diff --git a/docs/.vuepress/dist/404.html b/docs/.vuepress/dist/404.html index 9cca572c3..ec6bd2da9 100644 --- a/docs/.vuepress/dist/404.html +++ b/docs/.vuepress/dist/404.html @@ -23,11 +23,11 @@ } Solana Cookbook - +

404

That's a Four-Oh-Four.
Take me home
- + diff --git a/docs/.vuepress/dist/assets/404.7b7f0c1b.js b/docs/.vuepress/dist/assets/404.5e9926f4.js similarity index 89% rename from docs/.vuepress/dist/assets/404.7b7f0c1b.js rename to docs/.vuepress/dist/assets/404.5e9926f4.js index 369eef8a9..9e1e93af9 100644 --- a/docs/.vuepress/dist/assets/404.7b7f0c1b.js +++ b/docs/.vuepress/dist/assets/404.5e9926f4.js @@ -1 +1 @@ -import{f as i,u as _,g as p,r as f,o as k,c as v,a as o,t as c,b as L,w as g,h as l,d as x}from"./app.cfdf84e7.js";const B={class:"theme-container"},N={class:"theme-default-content"},T=o("h1",null,"404",-1),V=i({setup(b){var a,s,n;const u=_(),e=p(),t=(a=e.value.notFound)!=null?a:["Not Found"],r=()=>t[Math.floor(Math.random()*t.length)],h=(s=e.value.home)!=null?s:u.value,m=(n=e.value.backToHome)!=null?n:"Back to home";return(C,M)=>{const d=f("RouterLink");return k(),v("div",B,[o("div",N,[T,o("blockquote",null,c(r()),1),L(d,{to:l(h)},{default:g(()=>[x(c(l(m)),1)]),_:1},8,["to"])])])}}});export{V as default}; +import{f as i,u as _,g as p,r as f,o as k,c as v,a as o,t as c,b as L,w as g,h as l,d as x}from"./app.2fbb9e96.js";const B={class:"theme-container"},N={class:"theme-default-content"},T=o("h1",null,"404",-1),V=i({setup(b){var a,s,n;const u=_(),e=p(),t=(a=e.value.notFound)!=null?a:["Not Found"],r=()=>t[Math.floor(Math.random()*t.length)],h=(s=e.value.home)!=null?s:u.value,m=(n=e.value.backToHome)!=null?n:"Back to home";return(C,M)=>{const d=f("RouterLink");return k(),v("div",B,[o("div",N,[T,o("blockquote",null,c(r()),1),L(d,{to:l(h)},{default:g(()=>[x(c(l(m)),1)]),_:1},8,["to"])])])}}});export{V as default}; diff --git a/docs/.vuepress/dist/assets/404.html.75990c3f.js b/docs/.vuepress/dist/assets/404.html.75990c3f.js deleted file mode 100644 index 2ba3b9a2b..000000000 --- a/docs/.vuepress/dist/assets/404.html.75990c3f.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as r}from"./app.cfdf84e7.js";const _={};function e(t,c){return null}var a=r(_,[["render",e]]);export{a as default}; diff --git a/docs/.vuepress/dist/assets/404.html.78b930b6.js b/docs/.vuepress/dist/assets/404.html.78b930b6.js new file mode 100644 index 000000000..2cc653e3d --- /dev/null +++ b/docs/.vuepress/dist/assets/404.html.78b930b6.js @@ -0,0 +1 @@ +import{_ as r}from"./app.2fbb9e96.js";const _={};function e(t,c){return null}var a=r(_,[["render",e]]);export{a as default}; diff --git a/docs/.vuepress/dist/assets/Layout.e58914e6.js b/docs/.vuepress/dist/assets/Layout.372a7658.js similarity index 99% rename from docs/.vuepress/dist/assets/Layout.e58914e6.js rename to docs/.vuepress/dist/assets/Layout.372a7658.js index c8bb59100..4b08c0513 100644 --- a/docs/.vuepress/dist/assets/Layout.e58914e6.js +++ b/docs/.vuepress/dist/assets/Layout.372a7658.js @@ -1 +1 @@ -var Be=Object.defineProperty,Me=Object.defineProperties;var De=Object.getOwnPropertyDescriptors;var de=Object.getOwnPropertySymbols;var Ne=Object.prototype.hasOwnProperty,Ee=Object.prototype.propertyIsEnumerable;var ve=(l,t,e)=>t in l?Be(l,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):l[t]=e,X=(l,t)=>{for(var e in t||(t={}))Ne.call(t,e)&&ve(l,e,t[e]);if(de)for(var e of de(t))Ee.call(t,e)&&ve(l,e,t[e]);return l},Y=(l,t)=>Me(l,De(t));import{_ as Ie,r as R,o as a,c,b as $,f as x,i as I,j as p,k as _e,h as n,F as D,l as A,m as w,a as g,t as T,n as G,p as J,q as C,w as B,s as pe,v as y,d as U,x as q,y as Pe,z as Re,A as Ae,B as Q,C as Z,D as V,E as fe,G as me,H as P,u as be,g as M,T as ge,I as O,J as He,K as j,L as K,M as Oe,N as ze,O as ee,P as ke,Q as $e,e as Fe,R as Le,S as We,U as W,V as te,W as Ue,X as Ve,Y as je,Z as Ke}from"./app.cfdf84e7.js";const Ge={},qe={class:"theme-default-content custom"};function Xe(l,t){const e=R("Content");return a(),c("div",qe,[$(e)])}var Ye=Ie(Ge,[["render",Xe]]);const Je={key:0,class:"features"},Qe=x({setup(l){const t=I(),e=p(()=>_e(t.value.features)?t.value.features:[]);return(i,r)=>n(e).length?(a(),c("div",Je,[(a(!0),c(D,null,A(n(e),_=>(a(),c("div",{key:_.title,class:"feature"},[g("h2",null,T(_.title),1),g("p",null,T(_.details),1)]))),128))])):w("",!0)}}),Ze=["innerHTML"],et=["textContent"],tt=x({setup(l){const t=I(),e=p(()=>t.value.footer),i=p(()=>t.value.footerHtml);return(r,_)=>n(e)?(a(),c(D,{key:0},[n(i)?(a(),c("div",{key:0,class:"footer",innerHTML:n(e)},null,8,Ze)):(a(),c("div",{key:1,class:"footer",textContent:T(n(e))},null,8,et))],64)):w("",!0)}}),nt=["href","rel","target","aria-label"],at=x({inheritAttrs:!1}),E=x(Y(X({},at),{props:{item:{type:Object,required:!0}},setup(l){const t=l,e=G(),i=Ae(),{item:r}=J(t),_=p(()=>q(r.value.link)),f=p(()=>Pe(r.value.link)||Re(r.value.link)),h=p(()=>{if(!f.value){if(r.value.target)return r.value.target;if(_.value)return"_blank"}}),s=p(()=>h.value==="_blank"),o=p(()=>!_.value&&!f.value&&!s.value),u=p(()=>{if(!f.value){if(r.value.rel)return r.value.rel;if(s.value)return"noopener noreferrer"}}),d=p(()=>r.value.ariaLabel||r.value.text),v=p(()=>{const L=Object.keys(i.value.locales);return L.length?!L.some(m=>m===r.value.link):r.value.link!=="/"}),b=p(()=>v.value?e.path.startsWith(r.value.link):!1),k=p(()=>o.value?r.value.activeMatch?new RegExp(r.value.activeMatch).test(e.path):b.value:!1);return(L,m)=>{const S=R("RouterLink"),N=R("ExternalLinkIcon");return n(o)?(a(),C(S,pe({key:0,class:{"router-link-active":n(k)},to:n(r).link,"aria-label":n(d)},L.$attrs),{default:B(()=>[y(L.$slots,"before"),U(" "+T(n(r).text)+" ",1),y(L.$slots,"after")]),_:3},16,["class","to","aria-label"])):(a(),c("a",pe({key:1,class:"external-link",href:n(r).link,rel:n(u),target:n(h),"aria-label":n(d)},L.$attrs),[y(L.$slots,"before"),U(" "+T(n(r).text)+" ",1),n(s)?(a(),C(N,{key:0})):w("",!0),y(L.$slots,"after")],16,nt))}}})),st={class:"hero"},rt={key:0,id:"main-title"},ot={key:1,class:"description"},lt={key:2,class:"actions"},ut=x({setup(l){const t=I(),e=Q(),i=Z(),r=p(()=>i.value&&t.value.heroImageDark!==void 0?t.value.heroImageDark:t.value.heroImage),_=p(()=>t.value.heroText===null?null:t.value.heroText||e.value.title||"Hello"),f=p(()=>t.value.heroAlt||_.value||"hero"),h=p(()=>t.value.tagline===null?null:t.value.tagline||e.value.description||"Welcome to your VuePress site"),s=p(()=>_e(t.value.actions)?t.value.actions.map(({text:u,link:d,type:v="primary"})=>({text:u,link:d,type:v})):[]),o=()=>{if(!r.value)return null;const u=V("img",{src:fe(r.value),alt:f.value});return t.value.heroImageDark===void 0?u:V(me,()=>u)};return(u,d)=>(a(),c("header",st,[$(o),n(_)?(a(),c("h1",rt,T(n(_)),1)):w("",!0),n(h)?(a(),c("p",ot,T(n(h)),1)):w("",!0),n(s).length?(a(),c("p",lt,[(a(!0),c(D,null,A(n(s),v=>(a(),C(E,{key:v.text,class:P(["action-button",[v.type]]),item:v},null,8,["class","item"]))),128))])):w("",!0)]))}}),it={class:"home"},ct=x({setup(l){return(t,e)=>(a(),c("main",it,[$(ut),$(Qe),$(Ye),$(tt)]))}}),dt=x({setup(l){const t=be(),e=Q(),i=M(),r=Z(),_=p(()=>i.value.home||t.value),f=p(()=>e.value.title),h=p(()=>r.value&&i.value.logoDark!==void 0?i.value.logoDark:i.value.logo),s=()=>{if(!h.value)return null;const o=V("img",{class:"logo",src:fe(h.value),alt:f.value});return i.value.logoDark===void 0?o:V(me,()=>o)};return(o,u)=>{const d=R("RouterLink");return a(),C(d,{to:n(_)},{default:B(()=>[$(s),n(f)?(a(),c("span",{key:0,class:P(["site-name",{"can-hide":n(h)}])},T(n(f)),3)):w("",!0)]),_:1},8,["to"])}}}),ye=x({setup(l){const t=i=>{i.style.height=i.scrollHeight+"px"},e=i=>{i.style.height=""};return(i,r)=>(a(),C(ge,{name:"dropdown",onEnter:t,onAfterEnter:e,onBeforeLeave:t},{default:B(()=>[y(i.$slots,"default")]),_:3}))}}),vt=["aria-label"],pt={class:"title"},ht=g("span",{class:"arrow down"},null,-1),_t=["aria-label"],ft={class:"title"},mt={class:"navbar-dropdown"},bt={class:"navbar-dropdown-subtitle"},gt={key:1},kt={class:"navbar-dropdown-subitem-wrapper"},$t=x({props:{item:{type:Object,required:!0}},setup(l){const t=l,{item:e}=J(t),i=p(()=>e.value.ariaLabel||e.value.text),r=O(!1),_=G();He(()=>_.path,()=>{r.value=!1});const f=s=>{s.detail===0?r.value=!r.value:r.value=!1},h=(s,o)=>o[o.length-1]===s;return(s,o)=>(a(),c("div",{class:P(["navbar-dropdown-wrapper",{open:r.value}])},[g("button",{class:"navbar-dropdown-title",type:"button","aria-label":n(i),onClick:f},[g("span",pt,T(n(e).text),1),ht],8,vt),g("button",{class:"navbar-dropdown-title-mobile",type:"button","aria-label":n(i),onClick:o[0]||(o[0]=u=>r.value=!r.value)},[g("span",ft,T(n(e).text),1),g("span",{class:P(["arrow",r.value?"down":"right"])},null,2)],8,_t),$(ye,null,{default:B(()=>[j(g("ul",mt,[(a(!0),c(D,null,A(n(e).children,u=>(a(),c("li",{key:u.text,class:"navbar-dropdown-item"},[u.children?(a(),c(D,{key:0},[g("h4",bt,[u.link?(a(),C(E,{key:0,item:u,onFocusout:d=>h(u,n(e).children)&&u.children.length===0&&(r.value=!1)},null,8,["item","onFocusout"])):(a(),c("span",gt,T(u.text),1))]),g("ul",kt,[(a(!0),c(D,null,A(u.children,d=>(a(),c("li",{key:d.link,class:"navbar-dropdown-subitem"},[$(E,{item:d,onFocusout:v=>h(d,u.children)&&h(u,n(e).children)&&(r.value=!1)},null,8,["item","onFocusout"])]))),128))])],64)):(a(),C(E,{key:1,item:u,onFocusout:d=>h(u,n(e).children)&&(r.value=!1)},null,8,["item","onFocusout"]))]))),128))],512),[[K,r.value]])]),_:1})],2))}}),he=l=>decodeURI(l).replace(/#.*$/,"").replace(/(index)?\.(md|html)$/,""),Lt=(l,t)=>{if(t.hash===l)return!0;const e=he(t.path),i=he(l);return e===i},we=(l,t)=>l.link&&Lt(l.link,t)?!0:l.children?l.children.some(e=>we(e,t)):!1,xe=l=>!q(l)||/github\.com/.test(l)?"GitHub":/bitbucket\.org/.test(l)?"Bitbucket":/gitlab\.com/.test(l)?"GitLab":/gitee\.com/.test(l)?"Gitee":null,yt={GitHub:":repo/edit/:branch/:path",GitLab:":repo/-/edit/:branch/:path",Gitee:":repo/edit/:branch/:path",Bitbucket:":repo/src/:branch/:path?mode=edit&spa=0&at=:branch&fileviewer=file-view-default"},wt=({docsRepo:l,editLinkPattern:t})=>{if(t)return t;const e=xe(l);return e!==null?yt[e]:null},xt=({docsRepo:l,docsBranch:t,docsDir:e,filePathRelative:i,editLinkPattern:r})=>{if(!i)return null;const _=wt({docsRepo:l,editLinkPattern:r});return _?_.replace(/:repo/,q(l)?l:`https://github.com/${l}`).replace(/:branch/,t).replace(/:path/,Oe(`${ze(e)}/${i}`)):null},Ct={key:0,class:"navbar-items"},Ce=x({setup(l){const t=()=>{const o=ee(),u=be(),d=Q(),v=M();return p(()=>{var S,N;const b=Object.keys(d.value.locales);if(b.length<2)return[];const k=o.currentRoute.value.path,L=o.currentRoute.value.fullPath;return[{text:(S=v.value.selectLanguageText)!=null?S:"unknown language",ariaLabel:(N=v.value.selectLanguageAriaLabel)!=null?N:"unkown language",children:b.map(H=>{var se,re,oe,le,ue,ie;const z=(re=(se=d.value.locales)==null?void 0:se[H])!=null?re:{},ne=(le=(oe=v.value.locales)==null?void 0:oe[H])!=null?le:{},ae=`${z.lang}`,Te=(ue=ne.selectLanguageName)!=null?ue:ae;let F;if(ae===d.value.lang)F=L;else{const ce=k.replace(u.value,H);o.getRoutes().some(Se=>Se.path===ce)?F=ce:F=(ie=ne.home)!=null?ie:H}return{text:Te,link:F}})}]})},e=()=>{const o=M(),u=p(()=>o.value.repo),d=p(()=>u.value?xe(u.value):null),v=p(()=>u.value&&!q(u.value)?`https://github.com/${u.value}`:u.value),b=p(()=>v.value?o.value.repoLabel?o.value.repoLabel:d.value===null?"Source":d.value:null);return p(()=>!v.value||!b.value?[]:[{text:b.value,link:v.value}])},i=o=>ke(o)?$e(o):o.children?Y(X({},o),{children:o.children.map(i)}):o,_=(()=>{const o=M();return p(()=>(o.value.navbar||[]).map(i))})(),f=t(),h=e(),s=p(()=>[..._.value,...f.value,...h.value]);return(o,u)=>n(s).length?(a(),c("nav",Ct,[(a(!0),c(D,null,A(n(s),d=>(a(),c("div",{key:d.text,class:"navbar-item"},[d.children?(a(),C($t,{key:0,item:d},null,8,["item"])):(a(),C(E,{key:1,item:d},null,8,["item"]))]))),128))])):w("",!0)}}),Tt=["title"],St={class:"icon",focusable:"false",viewBox:"0 0 32 32"},Bt=Fe('',9),Mt=[Bt],Dt={class:"icon",focusable:"false",viewBox:"0 0 32 32"},Nt=g("path",{d:"M13.502 5.414a15.075 15.075 0 0 0 11.594 18.194a11.113 11.113 0 0 1-7.975 3.39c-.138 0-.278.005-.418 0a11.094 11.094 0 0 1-3.2-21.584M14.98 3a1.002 1.002 0 0 0-.175.016a13.096 13.096 0 0 0 1.825 25.981c.164.006.328 0 .49 0a13.072 13.072 0 0 0 10.703-5.555a1.01 1.01 0 0 0-.783-1.565A13.08 13.08 0 0 1 15.89 4.38A1.015 1.015 0 0 0 14.98 3z",fill:"currentColor"},null,-1),Et=[Nt],It=x({setup(l){const t=M(),e=Z(),i=()=>{e.value=!e.value};return(r,_)=>(a(),c("button",{class:"toggle-dark-button",title:n(t).toggleDarkMode,onClick:i},[j((a(),c("svg",St,Mt,512)),[[K,!n(e)]]),j((a(),c("svg",Dt,Et,512)),[[K,n(e)]])],8,Tt))}}),Pt=["title"],Rt=g("div",{class:"icon","aria-hidden":"true"},[g("span"),g("span"),g("span")],-1),At=[Rt],Ht=x({emits:["toggle"],setup(l){const t=M();return(e,i)=>(a(),c("div",{class:"toggle-sidebar-button",title:n(t).toggleSidebar,"aria-expanded":"false",role:"button",tabindex:"0",onClick:i[0]||(i[0]=r=>e.$emit("toggle"))},At,8,Pt))}}),Ot=x({emits:["toggle-sidebar"],setup(l){const t=M(),e=O(null),i=O(null),r=O(0),_=p(()=>r.value?{maxWidth:r.value+"px"}:{}),f=p(()=>t.value.darkMode);Le(()=>{const o=h(e.value,"paddingLeft")+h(e.value,"paddingRight"),u=()=>{var d;window.innerWidth<=719?r.value=0:r.value=e.value.offsetWidth-o-(((d=i.value)==null?void 0:d.offsetWidth)||0)};u(),window.addEventListener("resize",u,!1),window.addEventListener("orientationchange",u,!1)});function h(s,o){var v,b,k;const u=(k=(b=(v=s==null?void 0:s.ownerDocument)==null?void 0:v.defaultView)==null?void 0:b.getComputedStyle(s,null))==null?void 0:k[o],d=Number.parseInt(u,10);return Number.isNaN(d)?0:d}return(s,o)=>{const u=R("NavbarSearch");return a(),c("header",{ref_key:"navbar",ref:e,class:"navbar"},[$(Ht,{onToggle:o[0]||(o[0]=d=>s.$emit("toggle-sidebar"))}),g("span",{ref_key:"navbarBrand",ref:i},[$(dt)],512),g("div",{class:"navbar-items-wrapper",style:We(n(_))},[y(s.$slots,"before"),$(Ce,{class:"can-hide"}),y(s.$slots,"after"),n(f)?(a(),C(It,{key:0})):w("",!0),$(u)],4)],512)}}}),zt={class:"page-meta"},Ft={key:0,class:"meta-item edit-link"},Wt={key:1,class:"meta-item last-updated"},Ut={class:"meta-item-label"},Vt={class:"meta-item-info"},jt={key:2,class:"meta-item contributors"},Kt={class:"meta-item-label"},Gt={class:"meta-item-info"},qt=["title"],Xt=U(", "),Yt=x({setup(l){const t=()=>{const s=M(),o=W(),u=I();return p(()=>{var N,H,z;if(!((H=(N=u.value.editLink)!=null?N:s.value.editLink)!=null?H:!0))return null;const{repo:v,docsRepo:b=v,docsBranch:k="main",docsDir:L="",editLinkText:m}=s.value;if(!b)return null;const S=xt({docsRepo:b,docsBranch:k,docsDir:L,filePathRelative:o.value.filePathRelative,editLinkPattern:(z=u.value.editLinkPattern)!=null?z:s.value.editLinkPattern});return S?{text:m!=null?m:"Edit this page",link:S}:null})},e=()=>{const s=M(),o=W(),u=I();return p(()=>{var b,k,L,m;return!((k=(b=u.value.lastUpdated)!=null?b:s.value.lastUpdated)!=null?k:!0)||!((L=o.value.git)!=null&&L.updatedTime)?null:new Date((m=o.value.git)==null?void 0:m.updatedTime).toLocaleString()})},i=()=>{const s=M(),o=W(),u=I();return p(()=>{var v,b,k,L;return((b=(v=u.value.contributors)!=null?v:s.value.contributors)!=null?b:!0)&&(L=(k=o.value.git)==null?void 0:k.contributors)!=null?L:null})},r=M(),_=t(),f=e(),h=i();return(s,o)=>{const u=R("ClientOnly");return a(),c("footer",zt,[n(_)?(a(),c("div",Ft,[$(E,{class:"meta-item-label",item:n(_)},null,8,["item"])])):w("",!0),n(f)?(a(),c("div",Wt,[g("span",Ut,T(n(r).lastUpdatedText)+": ",1),$(u,null,{default:B(()=>[g("span",Vt,T(n(f)),1)]),_:1})])):w("",!0),n(h)&&n(h).length?(a(),c("div",jt,[g("span",Kt,T(n(r).contributorsText)+": ",1),g("span",Gt,[(a(!0),c(D,null,A(n(h),(d,v)=>(a(),c(D,{key:v},[g("span",{class:"contributor",title:`email: ${d.email}`},T(d.name),9,qt),v!==n(h).length-1?(a(),c(D,{key:0},[Xt],64)):w("",!0)],64))),128))])])):w("",!0)])}}}),Jt={key:0,class:"page-nav"},Qt={class:"inner"},Zt={key:0,class:"prev"},en={key:1,class:"next"},tn=x({setup(l){const t=s=>s===!1?null:ke(s)?$e(s):Ue(s)?s:!1,e=(s,o,u)=>{const d=s.findIndex(v=>v.link===o);if(d!==-1){const v=s[d+u];return v!=null&&v.link?v:null}for(const v of s)if(v.children){const b=e(v.children,o,u);if(b)return b}return null},i=I(),r=te(),_=G(),f=p(()=>{const s=t(i.value.prev);return s!==!1?s:e(r.value,_.path,-1)}),h=p(()=>{const s=t(i.value.next);return s!==!1?s:e(r.value,_.path,1)});return(s,o)=>n(f)||n(h)?(a(),c("nav",Jt,[g("p",Qt,[n(f)?(a(),c("span",Zt,[$(E,{item:n(f)},null,8,["item"])])):w("",!0),n(h)?(a(),c("span",en,[$(E,{item:n(h)},null,8,["item"])])):w("",!0)])])):w("",!0)}}),nn={class:"page"},an={class:"theme-default-content"},sn=x({setup(l){return(t,e)=>{const i=R("Content");return a(),c("main",nn,[y(t.$slots,"top"),g("div",an,[$(i)]),$(Yt),$(tn),y(t.$slots,"bottom")])}}}),rn={class:"sidebar-item-children"},on=x({props:{item:{type:Object,required:!0},depth:{type:Number,required:!1,default:0}},setup(l){const t=l,{item:e,depth:i}=J(t),r=G(),_=ee(),f=p(()=>we(e.value,r)),h=p(()=>({"sidebar-item":!0,"sidebar-heading":i.value===0,active:f.value,collapsible:e.value.collapsible})),s=O(!0),o=O(void 0);return e.value.collapsible&&(s.value=f.value,o.value=()=>{s.value=!s.value},_.afterEach(()=>{s.value=f.value})),(u,d)=>{var b;const v=R("SidebarItem",!0);return a(),c("li",null,[n(e).link?(a(),C(E,{key:0,class:P(n(h)),item:n(e)},null,8,["class","item"])):(a(),c("p",{key:1,tabindex:"0",class:P(n(h)),onClick:d[0]||(d[0]=(...k)=>o.value&&o.value(...k)),onKeydown:d[1]||(d[1]=Ve((...k)=>o.value&&o.value(...k),["enter"]))},[U(T(n(e).text)+" ",1),n(e).collapsible?(a(),c("span",{key:0,class:P(["arrow",s.value?"down":"right"])},null,2)):w("",!0)],34)),(b=n(e).children)!=null&&b.length?(a(),C(ye,{key:2},{default:B(()=>[j(g("ul",rn,[(a(!0),c(D,null,A(n(e).children,k=>(a(),C(v,{key:`${n(i)}${k.text}${k.link}`,item:k,depth:n(i)+1},null,8,["item","depth"]))),128))],512),[[K,s.value]])]),_:1})):w("",!0)])}}}),ln={key:0,class:"sidebar-items"},un=x({setup(l){const t=te();return(e,i)=>n(t).length?(a(),c("ul",ln,[(a(!0),c(D,null,A(n(t),r=>(a(),C(on,{key:r.link||r.text,item:r},null,8,["item"]))),128))])):w("",!0)}}),cn={class:"sidebar"},dn=x({setup(l){return(t,e)=>(a(),c("aside",cn,[$(Ce),y(t.$slots,"top"),$(un),y(t.$slots,"bottom")]))}}),hn=x({setup(l){const t=W(),e=I(),i=M(),r=p(()=>e.value.navbar!==!1&&i.value.navbar!==!1),_=te(),f=O(!1),h=m=>{f.value=typeof m=="boolean"?m:!f.value},s={x:0,y:0},o=m=>{s.x=m.changedTouches[0].clientX,s.y=m.changedTouches[0].clientY},u=m=>{const S=m.changedTouches[0].clientX-s.x,N=m.changedTouches[0].clientY-s.y;Math.abs(S)>Math.abs(N)&&Math.abs(S)>40&&(S>0&&s.x<=80?h(!0):h(!1))},d=p(()=>[{"no-navbar":!r.value,"no-sidebar":!_.value.length,"sidebar-open":f.value},e.value.pageClass]);let v;Le(()=>{v=ee().afterEach(()=>{h(!1)})}),je(()=>{v()});const b=Ke(),k=b.resolve,L=b.pending;return(m,S)=>(a(),c("div",{class:P(["theme-container",n(d)]),onTouchstart:o,onTouchend:u},[y(m.$slots,"navbar",{},()=>[n(r)?(a(),C(Ot,{key:0,onToggleSidebar:h},{before:B(()=>[y(m.$slots,"navbar-before")]),after:B(()=>[y(m.$slots,"navbar-after")]),_:3})):w("",!0)]),g("div",{class:"sidebar-mask",onClick:S[0]||(S[0]=N=>h(!1))}),y(m.$slots,"sidebar",{},()=>[$(dn,null,{top:B(()=>[y(m.$slots,"sidebar-top")]),bottom:B(()=>[y(m.$slots,"sidebar-bottom")]),_:3})]),y(m.$slots,"page",{},()=>[n(e).home?(a(),C(ct,{key:0})):(a(),C(ge,{key:1,name:"fade-slide-y",mode:"out-in",onBeforeEnter:n(k),onBeforeLeave:n(L)},{default:B(()=>[(a(),C(sn,{key:n(t).path},{top:B(()=>[y(m.$slots,"page-top")]),bottom:B(()=>[y(m.$slots,"page-bottom")]),_:3}))]),_:3},8,["onBeforeEnter","onBeforeLeave"]))])],34))}});export{hn as default}; +var Be=Object.defineProperty,Me=Object.defineProperties;var De=Object.getOwnPropertyDescriptors;var de=Object.getOwnPropertySymbols;var Ne=Object.prototype.hasOwnProperty,Ee=Object.prototype.propertyIsEnumerable;var ve=(l,t,e)=>t in l?Be(l,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):l[t]=e,X=(l,t)=>{for(var e in t||(t={}))Ne.call(t,e)&&ve(l,e,t[e]);if(de)for(var e of de(t))Ee.call(t,e)&&ve(l,e,t[e]);return l},Y=(l,t)=>Me(l,De(t));import{_ as Ie,r as R,o as a,c,b as $,f as x,i as I,j as p,k as _e,h as n,F as D,l as A,m as w,a as g,t as T,n as G,p as J,q as C,w as B,s as pe,v as y,d as U,x as q,y as Pe,z as Re,A as Ae,B as Q,C as Z,D as V,E as fe,G as me,H as P,u as be,g as M,T as ge,I as O,J as He,K as j,L as K,M as Oe,N as ze,O as ee,P as ke,Q as $e,e as Fe,R as Le,S as We,U as W,V as te,W as Ue,X as Ve,Y as je,Z as Ke}from"./app.2fbb9e96.js";const Ge={},qe={class:"theme-default-content custom"};function Xe(l,t){const e=R("Content");return a(),c("div",qe,[$(e)])}var Ye=Ie(Ge,[["render",Xe]]);const Je={key:0,class:"features"},Qe=x({setup(l){const t=I(),e=p(()=>_e(t.value.features)?t.value.features:[]);return(i,r)=>n(e).length?(a(),c("div",Je,[(a(!0),c(D,null,A(n(e),_=>(a(),c("div",{key:_.title,class:"feature"},[g("h2",null,T(_.title),1),g("p",null,T(_.details),1)]))),128))])):w("",!0)}}),Ze=["innerHTML"],et=["textContent"],tt=x({setup(l){const t=I(),e=p(()=>t.value.footer),i=p(()=>t.value.footerHtml);return(r,_)=>n(e)?(a(),c(D,{key:0},[n(i)?(a(),c("div",{key:0,class:"footer",innerHTML:n(e)},null,8,Ze)):(a(),c("div",{key:1,class:"footer",textContent:T(n(e))},null,8,et))],64)):w("",!0)}}),nt=["href","rel","target","aria-label"],at=x({inheritAttrs:!1}),E=x(Y(X({},at),{props:{item:{type:Object,required:!0}},setup(l){const t=l,e=G(),i=Ae(),{item:r}=J(t),_=p(()=>q(r.value.link)),f=p(()=>Pe(r.value.link)||Re(r.value.link)),h=p(()=>{if(!f.value){if(r.value.target)return r.value.target;if(_.value)return"_blank"}}),s=p(()=>h.value==="_blank"),o=p(()=>!_.value&&!f.value&&!s.value),u=p(()=>{if(!f.value){if(r.value.rel)return r.value.rel;if(s.value)return"noopener noreferrer"}}),d=p(()=>r.value.ariaLabel||r.value.text),v=p(()=>{const L=Object.keys(i.value.locales);return L.length?!L.some(m=>m===r.value.link):r.value.link!=="/"}),b=p(()=>v.value?e.path.startsWith(r.value.link):!1),k=p(()=>o.value?r.value.activeMatch?new RegExp(r.value.activeMatch).test(e.path):b.value:!1);return(L,m)=>{const S=R("RouterLink"),N=R("ExternalLinkIcon");return n(o)?(a(),C(S,pe({key:0,class:{"router-link-active":n(k)},to:n(r).link,"aria-label":n(d)},L.$attrs),{default:B(()=>[y(L.$slots,"before"),U(" "+T(n(r).text)+" ",1),y(L.$slots,"after")]),_:3},16,["class","to","aria-label"])):(a(),c("a",pe({key:1,class:"external-link",href:n(r).link,rel:n(u),target:n(h),"aria-label":n(d)},L.$attrs),[y(L.$slots,"before"),U(" "+T(n(r).text)+" ",1),n(s)?(a(),C(N,{key:0})):w("",!0),y(L.$slots,"after")],16,nt))}}})),st={class:"hero"},rt={key:0,id:"main-title"},ot={key:1,class:"description"},lt={key:2,class:"actions"},ut=x({setup(l){const t=I(),e=Q(),i=Z(),r=p(()=>i.value&&t.value.heroImageDark!==void 0?t.value.heroImageDark:t.value.heroImage),_=p(()=>t.value.heroText===null?null:t.value.heroText||e.value.title||"Hello"),f=p(()=>t.value.heroAlt||_.value||"hero"),h=p(()=>t.value.tagline===null?null:t.value.tagline||e.value.description||"Welcome to your VuePress site"),s=p(()=>_e(t.value.actions)?t.value.actions.map(({text:u,link:d,type:v="primary"})=>({text:u,link:d,type:v})):[]),o=()=>{if(!r.value)return null;const u=V("img",{src:fe(r.value),alt:f.value});return t.value.heroImageDark===void 0?u:V(me,()=>u)};return(u,d)=>(a(),c("header",st,[$(o),n(_)?(a(),c("h1",rt,T(n(_)),1)):w("",!0),n(h)?(a(),c("p",ot,T(n(h)),1)):w("",!0),n(s).length?(a(),c("p",lt,[(a(!0),c(D,null,A(n(s),v=>(a(),C(E,{key:v.text,class:P(["action-button",[v.type]]),item:v},null,8,["class","item"]))),128))])):w("",!0)]))}}),it={class:"home"},ct=x({setup(l){return(t,e)=>(a(),c("main",it,[$(ut),$(Qe),$(Ye),$(tt)]))}}),dt=x({setup(l){const t=be(),e=Q(),i=M(),r=Z(),_=p(()=>i.value.home||t.value),f=p(()=>e.value.title),h=p(()=>r.value&&i.value.logoDark!==void 0?i.value.logoDark:i.value.logo),s=()=>{if(!h.value)return null;const o=V("img",{class:"logo",src:fe(h.value),alt:f.value});return i.value.logoDark===void 0?o:V(me,()=>o)};return(o,u)=>{const d=R("RouterLink");return a(),C(d,{to:n(_)},{default:B(()=>[$(s),n(f)?(a(),c("span",{key:0,class:P(["site-name",{"can-hide":n(h)}])},T(n(f)),3)):w("",!0)]),_:1},8,["to"])}}}),ye=x({setup(l){const t=i=>{i.style.height=i.scrollHeight+"px"},e=i=>{i.style.height=""};return(i,r)=>(a(),C(ge,{name:"dropdown",onEnter:t,onAfterEnter:e,onBeforeLeave:t},{default:B(()=>[y(i.$slots,"default")]),_:3}))}}),vt=["aria-label"],pt={class:"title"},ht=g("span",{class:"arrow down"},null,-1),_t=["aria-label"],ft={class:"title"},mt={class:"navbar-dropdown"},bt={class:"navbar-dropdown-subtitle"},gt={key:1},kt={class:"navbar-dropdown-subitem-wrapper"},$t=x({props:{item:{type:Object,required:!0}},setup(l){const t=l,{item:e}=J(t),i=p(()=>e.value.ariaLabel||e.value.text),r=O(!1),_=G();He(()=>_.path,()=>{r.value=!1});const f=s=>{s.detail===0?r.value=!r.value:r.value=!1},h=(s,o)=>o[o.length-1]===s;return(s,o)=>(a(),c("div",{class:P(["navbar-dropdown-wrapper",{open:r.value}])},[g("button",{class:"navbar-dropdown-title",type:"button","aria-label":n(i),onClick:f},[g("span",pt,T(n(e).text),1),ht],8,vt),g("button",{class:"navbar-dropdown-title-mobile",type:"button","aria-label":n(i),onClick:o[0]||(o[0]=u=>r.value=!r.value)},[g("span",ft,T(n(e).text),1),g("span",{class:P(["arrow",r.value?"down":"right"])},null,2)],8,_t),$(ye,null,{default:B(()=>[j(g("ul",mt,[(a(!0),c(D,null,A(n(e).children,u=>(a(),c("li",{key:u.text,class:"navbar-dropdown-item"},[u.children?(a(),c(D,{key:0},[g("h4",bt,[u.link?(a(),C(E,{key:0,item:u,onFocusout:d=>h(u,n(e).children)&&u.children.length===0&&(r.value=!1)},null,8,["item","onFocusout"])):(a(),c("span",gt,T(u.text),1))]),g("ul",kt,[(a(!0),c(D,null,A(u.children,d=>(a(),c("li",{key:d.link,class:"navbar-dropdown-subitem"},[$(E,{item:d,onFocusout:v=>h(d,u.children)&&h(u,n(e).children)&&(r.value=!1)},null,8,["item","onFocusout"])]))),128))])],64)):(a(),C(E,{key:1,item:u,onFocusout:d=>h(u,n(e).children)&&(r.value=!1)},null,8,["item","onFocusout"]))]))),128))],512),[[K,r.value]])]),_:1})],2))}}),he=l=>decodeURI(l).replace(/#.*$/,"").replace(/(index)?\.(md|html)$/,""),Lt=(l,t)=>{if(t.hash===l)return!0;const e=he(t.path),i=he(l);return e===i},we=(l,t)=>l.link&&Lt(l.link,t)?!0:l.children?l.children.some(e=>we(e,t)):!1,xe=l=>!q(l)||/github\.com/.test(l)?"GitHub":/bitbucket\.org/.test(l)?"Bitbucket":/gitlab\.com/.test(l)?"GitLab":/gitee\.com/.test(l)?"Gitee":null,yt={GitHub:":repo/edit/:branch/:path",GitLab:":repo/-/edit/:branch/:path",Gitee:":repo/edit/:branch/:path",Bitbucket:":repo/src/:branch/:path?mode=edit&spa=0&at=:branch&fileviewer=file-view-default"},wt=({docsRepo:l,editLinkPattern:t})=>{if(t)return t;const e=xe(l);return e!==null?yt[e]:null},xt=({docsRepo:l,docsBranch:t,docsDir:e,filePathRelative:i,editLinkPattern:r})=>{if(!i)return null;const _=wt({docsRepo:l,editLinkPattern:r});return _?_.replace(/:repo/,q(l)?l:`https://github.com/${l}`).replace(/:branch/,t).replace(/:path/,Oe(`${ze(e)}/${i}`)):null},Ct={key:0,class:"navbar-items"},Ce=x({setup(l){const t=()=>{const o=ee(),u=be(),d=Q(),v=M();return p(()=>{var S,N;const b=Object.keys(d.value.locales);if(b.length<2)return[];const k=o.currentRoute.value.path,L=o.currentRoute.value.fullPath;return[{text:(S=v.value.selectLanguageText)!=null?S:"unknown language",ariaLabel:(N=v.value.selectLanguageAriaLabel)!=null?N:"unkown language",children:b.map(H=>{var se,re,oe,le,ue,ie;const z=(re=(se=d.value.locales)==null?void 0:se[H])!=null?re:{},ne=(le=(oe=v.value.locales)==null?void 0:oe[H])!=null?le:{},ae=`${z.lang}`,Te=(ue=ne.selectLanguageName)!=null?ue:ae;let F;if(ae===d.value.lang)F=L;else{const ce=k.replace(u.value,H);o.getRoutes().some(Se=>Se.path===ce)?F=ce:F=(ie=ne.home)!=null?ie:H}return{text:Te,link:F}})}]})},e=()=>{const o=M(),u=p(()=>o.value.repo),d=p(()=>u.value?xe(u.value):null),v=p(()=>u.value&&!q(u.value)?`https://github.com/${u.value}`:u.value),b=p(()=>v.value?o.value.repoLabel?o.value.repoLabel:d.value===null?"Source":d.value:null);return p(()=>!v.value||!b.value?[]:[{text:b.value,link:v.value}])},i=o=>ke(o)?$e(o):o.children?Y(X({},o),{children:o.children.map(i)}):o,_=(()=>{const o=M();return p(()=>(o.value.navbar||[]).map(i))})(),f=t(),h=e(),s=p(()=>[..._.value,...f.value,...h.value]);return(o,u)=>n(s).length?(a(),c("nav",Ct,[(a(!0),c(D,null,A(n(s),d=>(a(),c("div",{key:d.text,class:"navbar-item"},[d.children?(a(),C($t,{key:0,item:d},null,8,["item"])):(a(),C(E,{key:1,item:d},null,8,["item"]))]))),128))])):w("",!0)}}),Tt=["title"],St={class:"icon",focusable:"false",viewBox:"0 0 32 32"},Bt=Fe('',9),Mt=[Bt],Dt={class:"icon",focusable:"false",viewBox:"0 0 32 32"},Nt=g("path",{d:"M13.502 5.414a15.075 15.075 0 0 0 11.594 18.194a11.113 11.113 0 0 1-7.975 3.39c-.138 0-.278.005-.418 0a11.094 11.094 0 0 1-3.2-21.584M14.98 3a1.002 1.002 0 0 0-.175.016a13.096 13.096 0 0 0 1.825 25.981c.164.006.328 0 .49 0a13.072 13.072 0 0 0 10.703-5.555a1.01 1.01 0 0 0-.783-1.565A13.08 13.08 0 0 1 15.89 4.38A1.015 1.015 0 0 0 14.98 3z",fill:"currentColor"},null,-1),Et=[Nt],It=x({setup(l){const t=M(),e=Z(),i=()=>{e.value=!e.value};return(r,_)=>(a(),c("button",{class:"toggle-dark-button",title:n(t).toggleDarkMode,onClick:i},[j((a(),c("svg",St,Mt,512)),[[K,!n(e)]]),j((a(),c("svg",Dt,Et,512)),[[K,n(e)]])],8,Tt))}}),Pt=["title"],Rt=g("div",{class:"icon","aria-hidden":"true"},[g("span"),g("span"),g("span")],-1),At=[Rt],Ht=x({emits:["toggle"],setup(l){const t=M();return(e,i)=>(a(),c("div",{class:"toggle-sidebar-button",title:n(t).toggleSidebar,"aria-expanded":"false",role:"button",tabindex:"0",onClick:i[0]||(i[0]=r=>e.$emit("toggle"))},At,8,Pt))}}),Ot=x({emits:["toggle-sidebar"],setup(l){const t=M(),e=O(null),i=O(null),r=O(0),_=p(()=>r.value?{maxWidth:r.value+"px"}:{}),f=p(()=>t.value.darkMode);Le(()=>{const o=h(e.value,"paddingLeft")+h(e.value,"paddingRight"),u=()=>{var d;window.innerWidth<=719?r.value=0:r.value=e.value.offsetWidth-o-(((d=i.value)==null?void 0:d.offsetWidth)||0)};u(),window.addEventListener("resize",u,!1),window.addEventListener("orientationchange",u,!1)});function h(s,o){var v,b,k;const u=(k=(b=(v=s==null?void 0:s.ownerDocument)==null?void 0:v.defaultView)==null?void 0:b.getComputedStyle(s,null))==null?void 0:k[o],d=Number.parseInt(u,10);return Number.isNaN(d)?0:d}return(s,o)=>{const u=R("NavbarSearch");return a(),c("header",{ref_key:"navbar",ref:e,class:"navbar"},[$(Ht,{onToggle:o[0]||(o[0]=d=>s.$emit("toggle-sidebar"))}),g("span",{ref_key:"navbarBrand",ref:i},[$(dt)],512),g("div",{class:"navbar-items-wrapper",style:We(n(_))},[y(s.$slots,"before"),$(Ce,{class:"can-hide"}),y(s.$slots,"after"),n(f)?(a(),C(It,{key:0})):w("",!0),$(u)],4)],512)}}}),zt={class:"page-meta"},Ft={key:0,class:"meta-item edit-link"},Wt={key:1,class:"meta-item last-updated"},Ut={class:"meta-item-label"},Vt={class:"meta-item-info"},jt={key:2,class:"meta-item contributors"},Kt={class:"meta-item-label"},Gt={class:"meta-item-info"},qt=["title"],Xt=U(", "),Yt=x({setup(l){const t=()=>{const s=M(),o=W(),u=I();return p(()=>{var N,H,z;if(!((H=(N=u.value.editLink)!=null?N:s.value.editLink)!=null?H:!0))return null;const{repo:v,docsRepo:b=v,docsBranch:k="main",docsDir:L="",editLinkText:m}=s.value;if(!b)return null;const S=xt({docsRepo:b,docsBranch:k,docsDir:L,filePathRelative:o.value.filePathRelative,editLinkPattern:(z=u.value.editLinkPattern)!=null?z:s.value.editLinkPattern});return S?{text:m!=null?m:"Edit this page",link:S}:null})},e=()=>{const s=M(),o=W(),u=I();return p(()=>{var b,k,L,m;return!((k=(b=u.value.lastUpdated)!=null?b:s.value.lastUpdated)!=null?k:!0)||!((L=o.value.git)!=null&&L.updatedTime)?null:new Date((m=o.value.git)==null?void 0:m.updatedTime).toLocaleString()})},i=()=>{const s=M(),o=W(),u=I();return p(()=>{var v,b,k,L;return((b=(v=u.value.contributors)!=null?v:s.value.contributors)!=null?b:!0)&&(L=(k=o.value.git)==null?void 0:k.contributors)!=null?L:null})},r=M(),_=t(),f=e(),h=i();return(s,o)=>{const u=R("ClientOnly");return a(),c("footer",zt,[n(_)?(a(),c("div",Ft,[$(E,{class:"meta-item-label",item:n(_)},null,8,["item"])])):w("",!0),n(f)?(a(),c("div",Wt,[g("span",Ut,T(n(r).lastUpdatedText)+": ",1),$(u,null,{default:B(()=>[g("span",Vt,T(n(f)),1)]),_:1})])):w("",!0),n(h)&&n(h).length?(a(),c("div",jt,[g("span",Kt,T(n(r).contributorsText)+": ",1),g("span",Gt,[(a(!0),c(D,null,A(n(h),(d,v)=>(a(),c(D,{key:v},[g("span",{class:"contributor",title:`email: ${d.email}`},T(d.name),9,qt),v!==n(h).length-1?(a(),c(D,{key:0},[Xt],64)):w("",!0)],64))),128))])])):w("",!0)])}}}),Jt={key:0,class:"page-nav"},Qt={class:"inner"},Zt={key:0,class:"prev"},en={key:1,class:"next"},tn=x({setup(l){const t=s=>s===!1?null:ke(s)?$e(s):Ue(s)?s:!1,e=(s,o,u)=>{const d=s.findIndex(v=>v.link===o);if(d!==-1){const v=s[d+u];return v!=null&&v.link?v:null}for(const v of s)if(v.children){const b=e(v.children,o,u);if(b)return b}return null},i=I(),r=te(),_=G(),f=p(()=>{const s=t(i.value.prev);return s!==!1?s:e(r.value,_.path,-1)}),h=p(()=>{const s=t(i.value.next);return s!==!1?s:e(r.value,_.path,1)});return(s,o)=>n(f)||n(h)?(a(),c("nav",Jt,[g("p",Qt,[n(f)?(a(),c("span",Zt,[$(E,{item:n(f)},null,8,["item"])])):w("",!0),n(h)?(a(),c("span",en,[$(E,{item:n(h)},null,8,["item"])])):w("",!0)])])):w("",!0)}}),nn={class:"page"},an={class:"theme-default-content"},sn=x({setup(l){return(t,e)=>{const i=R("Content");return a(),c("main",nn,[y(t.$slots,"top"),g("div",an,[$(i)]),$(Yt),$(tn),y(t.$slots,"bottom")])}}}),rn={class:"sidebar-item-children"},on=x({props:{item:{type:Object,required:!0},depth:{type:Number,required:!1,default:0}},setup(l){const t=l,{item:e,depth:i}=J(t),r=G(),_=ee(),f=p(()=>we(e.value,r)),h=p(()=>({"sidebar-item":!0,"sidebar-heading":i.value===0,active:f.value,collapsible:e.value.collapsible})),s=O(!0),o=O(void 0);return e.value.collapsible&&(s.value=f.value,o.value=()=>{s.value=!s.value},_.afterEach(()=>{s.value=f.value})),(u,d)=>{var b;const v=R("SidebarItem",!0);return a(),c("li",null,[n(e).link?(a(),C(E,{key:0,class:P(n(h)),item:n(e)},null,8,["class","item"])):(a(),c("p",{key:1,tabindex:"0",class:P(n(h)),onClick:d[0]||(d[0]=(...k)=>o.value&&o.value(...k)),onKeydown:d[1]||(d[1]=Ve((...k)=>o.value&&o.value(...k),["enter"]))},[U(T(n(e).text)+" ",1),n(e).collapsible?(a(),c("span",{key:0,class:P(["arrow",s.value?"down":"right"])},null,2)):w("",!0)],34)),(b=n(e).children)!=null&&b.length?(a(),C(ye,{key:2},{default:B(()=>[j(g("ul",rn,[(a(!0),c(D,null,A(n(e).children,k=>(a(),C(v,{key:`${n(i)}${k.text}${k.link}`,item:k,depth:n(i)+1},null,8,["item","depth"]))),128))],512),[[K,s.value]])]),_:1})):w("",!0)])}}}),ln={key:0,class:"sidebar-items"},un=x({setup(l){const t=te();return(e,i)=>n(t).length?(a(),c("ul",ln,[(a(!0),c(D,null,A(n(t),r=>(a(),C(on,{key:r.link||r.text,item:r},null,8,["item"]))),128))])):w("",!0)}}),cn={class:"sidebar"},dn=x({setup(l){return(t,e)=>(a(),c("aside",cn,[$(Ce),y(t.$slots,"top"),$(un),y(t.$slots,"bottom")]))}}),hn=x({setup(l){const t=W(),e=I(),i=M(),r=p(()=>e.value.navbar!==!1&&i.value.navbar!==!1),_=te(),f=O(!1),h=m=>{f.value=typeof m=="boolean"?m:!f.value},s={x:0,y:0},o=m=>{s.x=m.changedTouches[0].clientX,s.y=m.changedTouches[0].clientY},u=m=>{const S=m.changedTouches[0].clientX-s.x,N=m.changedTouches[0].clientY-s.y;Math.abs(S)>Math.abs(N)&&Math.abs(S)>40&&(S>0&&s.x<=80?h(!0):h(!1))},d=p(()=>[{"no-navbar":!r.value,"no-sidebar":!_.value.length,"sidebar-open":f.value},e.value.pageClass]);let v;Le(()=>{v=ee().afterEach(()=>{h(!1)})}),je(()=>{v()});const b=Ke(),k=b.resolve,L=b.pending;return(m,S)=>(a(),c("div",{class:P(["theme-container",n(d)]),onTouchstart:o,onTouchend:u},[y(m.$slots,"navbar",{},()=>[n(r)?(a(),C(Ot,{key:0,onToggleSidebar:h},{before:B(()=>[y(m.$slots,"navbar-before")]),after:B(()=>[y(m.$slots,"navbar-after")]),_:3})):w("",!0)]),g("div",{class:"sidebar-mask",onClick:S[0]||(S[0]=N=>h(!1))}),y(m.$slots,"sidebar",{},()=>[$(dn,null,{top:B(()=>[y(m.$slots,"sidebar-top")]),bottom:B(()=>[y(m.$slots,"sidebar-bottom")]),_:3})]),y(m.$slots,"page",{},()=>[n(e).home?(a(),C(ct,{key:0})):(a(),C(ge,{key:1,name:"fade-slide-y",mode:"out-in",onBeforeEnter:n(k),onBeforeLeave:n(L)},{default:B(()=>[(a(),C(sn,{key:n(t).path},{top:B(()=>[y(m.$slots,"page-top")]),bottom:B(()=>[y(m.$slots,"page-bottom")]),_:3}))]),_:3},8,["onBeforeEnter","onBeforeLeave"]))])],34))}});export{hn as default}; diff --git a/docs/.vuepress/dist/assets/account-maps.html.420a011d.js b/docs/.vuepress/dist/assets/account-maps.html.1f0f0c6d.js similarity index 99% rename from docs/.vuepress/dist/assets/account-maps.html.420a011d.js rename to docs/.vuepress/dist/assets/account-maps.html.1f0f0c6d.js index 1b879594d..6ee769980 100644 --- a/docs/.vuepress/dist/assets/account-maps.html.420a011d.js +++ b/docs/.vuepress/dist/assets/account-maps.html.1f0f0c6d.js @@ -1,4 +1,4 @@ -import{_ as e,r as o,o as c,c as l,a as s,b as p,F as u,d as n,e as t}from"./app.cfdf84e7.js";const i={},r=s("h1",{id:"account-maps-hesap-haritalar\u0131",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#account-maps-hesap-haritalar\u0131","aria-hidden":"true"},"#"),n(" Account Maps (Hesap Haritalar\u0131)")],-1),k=s("p",null,[n("Maps, bir key\u2019i bir t\xFCr de\u011Ferle ili\u015Fkilendirmek i\xE7in programlamada s\u0131kl\u0131kla kulland\u0131\u011F\u0131m\u0131z veri yap\u0131lar\u0131d\u0131r. "),s("strong",null,"Key"),n(" ve "),s("strong",null,"de\u011Fer"),n(" herhangi bir t\xFCrde olabilir ve key, kaydedilmekte olan belirli bir de\u011Fer i\xE7in tan\u0131mlay\u0131c\u0131 g\xF6revi g\xF6r\xFCr. Daha sonra, key\u2019i verildi\u011Finde, bu de\u011Ferleri verimli bir \u015Fekilde eklememize, almam\u0131za ve g\xFCncellememize izin verir.")],-1),b=n("Solana'n\u0131n Hesap modeli, bildi\u011Fimiz gibi, program verilerinin ve ilgili durum verilerinin farkl\u0131 account'larda depolanmas\u0131n\u0131 gerektirir. Bu account'lar\u0131n kendileriyle ili\u015Fkili bir adresi vard\u0131r. Bu, kendi i\xE7inde bir map g\xF6revi g\xF6r\xFCr! Solana'n\u0131n Hesap modu hakk\u0131nda daha fazla bilgiyi "),m={href:"https://solanacookbook.com/core-concepts/accounts.html",target:"_blank",rel:"noopener noreferrer"},d=n("buradan"),g=n(" edinebilirsiniz."),y=t('

Bu nedenle, de\u011Feri almak i\xE7in gereken key adresiyle de\u011Ferlerinizi ayr\u0131 account'larda saklamak mant\u0131kl\u0131 olacakt\u0131r. Ancak bu, a\u015Fa\u011F\u0131daki gibi birka\xE7 sorunu beraberinde getirir:

Bu, bir\xE7ok Solana geli\u015Ftiricisinin kar\u015F\u0131la\u015Ft\u0131\u011F\u0131 ve programlar\u0131na Map benzeri bir logic uygulayan bir sorun sunuyor. Bu sorunla nas\u0131l ba\u015Fa \xE7\u0131kaca\u011F\u0131m\u0131za birka\xE7 yoldan bakal\u0131m:

Deriving PDAs

',4),f=n("PDA, "),_={href:"https://solanacookbook.com/references/accounts.html#program-derived-address",target:"_blank",rel:"noopener noreferrer"},h=n("Program Derived Address"),w=n(" (Programdan T\xFCretilmi\u015F Adres) anlam\u0131na gelir ve k\u0131saca, bir dizi seed ve bir program kimli\u011Finden (veya adresinden) t\xFCretilen adreslerdir."),A=n("PDA'larla ilgili benzersiz olan \u015Fey, bu adreslerin herhangi bir private key ile ili\u015Fkili olmamas\u0131d\u0131r. Bunun nedeni, bu adreslerin ED25519 e\u011Frisi \xFCzerinde yer almamas\u0131d\u0131r. Bu nedenle, yaln\u0131zca bu adresin t\xFCretildi\u011Fi program, seedler de sa\u011Flanm\u0131\u015Fsa, key\u2019le bir talimat imzalayabilir. Bu konuda "),v={href:"https://solanacookbook.com/references/programs.html#create-a-program-derived-address",target:"_blank",rel:"noopener noreferrer"},z=n("buradan"),B=n(" daha fazla bilgi edinebilirsiniz."),q=t(`

Art\u0131k PDA'lar\u0131n ne oldu\u011Fu hakk\u0131nda bir fikrimiz oldu\u011Funa g\xF6re, onlar\u0131 baz\u0131 account'lar\u0131 e\u015Fle\u015Ftirmek i\xE7in kullanal\u0131m! Bunun nas\u0131l uygulanaca\u011F\u0131n\u0131 g\xF6stermek i\xE7in bir Blog program\u0131 \xF6rne\u011Fi alaca\u011F\u0131z.

Bu Blog program\u0131nda, her Kullan\u0131c\u0131n\u0131n(User) tek bir Blog'u olmas\u0131n\u0131 istiyoruz. Bu blog herhangi bir say\u0131da Post i\xE7erebilir. Bu, her kullan\u0131c\u0131y\u0131 bir blogla e\u015Fle\u015Ftirdi\u011Fimiz (mapping) ve her yaz\u0131n\u0131n belirli bir blogla e\u015Fle\u015Ftirildi\u011Fi (mapped) anlam\u0131na gelir.

K\u0131sacas\u0131, bir kullan\u0131c\u0131 ile blogu aras\u0131nda 1:1 e\u015Fleme varken, blog ve g\xF6nderileri aras\u0131nda 1:N e\u015Fleme vard\u0131r.

1:1 e\u015Fleme i\xE7in, bir blog adresinin yaln\u0131zca kullan\u0131c\u0131s\u0131ndan t\xFCretilmesini isteriz; bu, yetkisi (veya kullan\u0131c\u0131s\u0131) verildi\u011Finde bir blogu geri almam\u0131za izin verir. Bu nedenle, bir blogun seed\u2019leri, authority's key\u2019den(otorite anahtar\u0131ndan) ve muhtemelen bir t\xFCr tan\u0131mlay\u0131c\u0131s\u0131 olarak i\u015Flev g\xF6rmesi i\xE7in "blog" \xF6n ekinden olu\u015Facakt\u0131r. 1:N e\u015Fleme i\xE7in, her bir g\xF6nderinin adresinin yaln\u0131zca ili\u015Fkili oldu\u011Fu blogdan de\u011Fil, ayn\u0131 zamanda blogdaki N say\u0131da g\xF6nderi aras\u0131nda ayr\u0131m yapmam\u0131za izin veren ba\u015Fka bir tan\u0131mlay\u0131c\u0131dan t\xFCretilmesini isteriz. A\u015Fa\u011F\u0131daki \xF6rnekte, her g\xF6nderinin adresi, blog anahtar\u0131ndan, her g\xF6nderiyi tan\u0131mlamak i\xE7in bir bilgi i\u015Faretinden ve bir t\xFCr tan\u0131mlay\u0131c\u0131s\u0131 olarak i\u015Flev g\xF6rmek i\xE7in "Post" \xF6n ekinden t\xFCretilmi\u015Ftir.

Kod a\u015Fa\u011F\u0131da g\xF6sterildi\u011Fi gibidir:

#[derive(Accounts)]
+import{_ as e,r as o,o as c,c as l,a as s,b as p,F as u,d as n,e as t}from"./app.2fbb9e96.js";const i={},r=s("h1",{id:"account-maps-hesap-haritalar\u0131",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#account-maps-hesap-haritalar\u0131","aria-hidden":"true"},"#"),n(" Account Maps (Hesap Haritalar\u0131)")],-1),k=s("p",null,[n("Maps, bir key\u2019i bir t\xFCr de\u011Ferle ili\u015Fkilendirmek i\xE7in programlamada s\u0131kl\u0131kla kulland\u0131\u011F\u0131m\u0131z veri yap\u0131lar\u0131d\u0131r. "),s("strong",null,"Key"),n(" ve "),s("strong",null,"de\u011Fer"),n(" herhangi bir t\xFCrde olabilir ve key, kaydedilmekte olan belirli bir de\u011Fer i\xE7in tan\u0131mlay\u0131c\u0131 g\xF6revi g\xF6r\xFCr. Daha sonra, key\u2019i verildi\u011Finde, bu de\u011Ferleri verimli bir \u015Fekilde eklememize, almam\u0131za ve g\xFCncellememize izin verir.")],-1),b=n("Solana'n\u0131n Hesap modeli, bildi\u011Fimiz gibi, program verilerinin ve ilgili durum verilerinin farkl\u0131 account'larda depolanmas\u0131n\u0131 gerektirir. Bu account'lar\u0131n kendileriyle ili\u015Fkili bir adresi vard\u0131r. Bu, kendi i\xE7inde bir map g\xF6revi g\xF6r\xFCr! Solana'n\u0131n Hesap modu hakk\u0131nda daha fazla bilgiyi "),m={href:"https://solanacookbook.com/core-concepts/accounts.html",target:"_blank",rel:"noopener noreferrer"},d=n("buradan"),g=n(" edinebilirsiniz."),y=t('

Bu nedenle, de\u011Feri almak i\xE7in gereken key adresiyle de\u011Ferlerinizi ayr\u0131 account'larda saklamak mant\u0131kl\u0131 olacakt\u0131r. Ancak bu, a\u015Fa\u011F\u0131daki gibi birka\xE7 sorunu beraberinde getirir:

  • Yukar\u0131da bahsedilen adresler, b\xFCy\xFCk olas\u0131l\u0131kla, hat\u0131rlayabilece\u011Finiz ve gerekli de\u011Feri alabilece\u011Finiz ideal key\u2019ler olmayacakt\u0131r.

  • Yukar\u0131da bahsedilen adresler, her bir public key\u2019in (veya adresin) kendisiyle ili\u015Fkilendirilmi\u015F bir private key\u2019e sahip olaca\u011F\u0131 farkl\u0131 Keypair\u2019lerin public key\u2019lerine at\u0131fta bulunur. Bu private key, gerekti\u011Finde ve gerekti\u011Finde farkl\u0131 talimatlar\u0131 imzalamak i\xE7in gerekli olacakt\u0131r, bu da private key\u2019i bir yerde saklamam\u0131z\u0131 gerektirir, ki bu kesinlikle \xF6nerilmez!

Bu, bir\xE7ok Solana geli\u015Ftiricisinin kar\u015F\u0131la\u015Ft\u0131\u011F\u0131 ve programlar\u0131na Map benzeri bir logic uygulayan bir sorun sunuyor. Bu sorunla nas\u0131l ba\u015Fa \xE7\u0131kaca\u011F\u0131m\u0131za birka\xE7 yoldan bakal\u0131m:

Deriving PDAs

',4),f=n("PDA, "),_={href:"https://solanacookbook.com/references/accounts.html#program-derived-address",target:"_blank",rel:"noopener noreferrer"},h=n("Program Derived Address"),w=n(" (Programdan T\xFCretilmi\u015F Adres) anlam\u0131na gelir ve k\u0131saca, bir dizi seed ve bir program kimli\u011Finden (veya adresinden) t\xFCretilen adreslerdir."),A=n("PDA'larla ilgili benzersiz olan \u015Fey, bu adreslerin herhangi bir private key ile ili\u015Fkili olmamas\u0131d\u0131r. Bunun nedeni, bu adreslerin ED25519 e\u011Frisi \xFCzerinde yer almamas\u0131d\u0131r. Bu nedenle, yaln\u0131zca bu adresin t\xFCretildi\u011Fi program, seedler de sa\u011Flanm\u0131\u015Fsa, key\u2019le bir talimat imzalayabilir. Bu konuda "),v={href:"https://solanacookbook.com/references/programs.html#create-a-program-derived-address",target:"_blank",rel:"noopener noreferrer"},z=n("buradan"),B=n(" daha fazla bilgi edinebilirsiniz."),q=t(`

Art\u0131k PDA'lar\u0131n ne oldu\u011Fu hakk\u0131nda bir fikrimiz oldu\u011Funa g\xF6re, onlar\u0131 baz\u0131 account'lar\u0131 e\u015Fle\u015Ftirmek i\xE7in kullanal\u0131m! Bunun nas\u0131l uygulanaca\u011F\u0131n\u0131 g\xF6stermek i\xE7in bir Blog program\u0131 \xF6rne\u011Fi alaca\u011F\u0131z.

Bu Blog program\u0131nda, her Kullan\u0131c\u0131n\u0131n(User) tek bir Blog'u olmas\u0131n\u0131 istiyoruz. Bu blog herhangi bir say\u0131da Post i\xE7erebilir. Bu, her kullan\u0131c\u0131y\u0131 bir blogla e\u015Fle\u015Ftirdi\u011Fimiz (mapping) ve her yaz\u0131n\u0131n belirli bir blogla e\u015Fle\u015Ftirildi\u011Fi (mapped) anlam\u0131na gelir.

K\u0131sacas\u0131, bir kullan\u0131c\u0131 ile blogu aras\u0131nda 1:1 e\u015Fleme varken, blog ve g\xF6nderileri aras\u0131nda 1:N e\u015Fleme vard\u0131r.

1:1 e\u015Fleme i\xE7in, bir blog adresinin yaln\u0131zca kullan\u0131c\u0131s\u0131ndan t\xFCretilmesini isteriz; bu, yetkisi (veya kullan\u0131c\u0131s\u0131) verildi\u011Finde bir blogu geri almam\u0131za izin verir. Bu nedenle, bir blogun seed\u2019leri, authority's key\u2019den(otorite anahtar\u0131ndan) ve muhtemelen bir t\xFCr tan\u0131mlay\u0131c\u0131s\u0131 olarak i\u015Flev g\xF6rmesi i\xE7in "blog" \xF6n ekinden olu\u015Facakt\u0131r. 1:N e\u015Fleme i\xE7in, her bir g\xF6nderinin adresinin yaln\u0131zca ili\u015Fkili oldu\u011Fu blogdan de\u011Fil, ayn\u0131 zamanda blogdaki N say\u0131da g\xF6nderi aras\u0131nda ayr\u0131m yapmam\u0131za izin veren ba\u015Fka bir tan\u0131mlay\u0131c\u0131dan t\xFCretilmesini isteriz. A\u015Fa\u011F\u0131daki \xF6rnekte, her g\xF6nderinin adresi, blog anahtar\u0131ndan, her g\xF6nderiyi tan\u0131mlamak i\xE7in bir bilgi i\u015Faretinden ve bir t\xFCr tan\u0131mlay\u0131c\u0131s\u0131 olarak i\u015Flev g\xF6rmek i\xE7in "Post" \xF6n ekinden t\xFCretilmi\u015Ftir.

Kod a\u015Fa\u011F\u0131da g\xF6sterildi\u011Fi gibidir:

#[derive(Accounts)]
 #[instruction(blog_account_bump: u8)]
 pub struct InitializeBlog<'info> {
     #[account(
diff --git a/docs/.vuepress/dist/assets/account-maps.html.de214c67.js b/docs/.vuepress/dist/assets/account-maps.html.29338336.js
similarity index 99%
rename from docs/.vuepress/dist/assets/account-maps.html.de214c67.js
rename to docs/.vuepress/dist/assets/account-maps.html.29338336.js
index c8f0ce539..6deaf7dd5 100644
--- a/docs/.vuepress/dist/assets/account-maps.html.de214c67.js
+++ b/docs/.vuepress/dist/assets/account-maps.html.29338336.js
@@ -1,4 +1,4 @@
-import{_ as u,r as c,o as r,c as i,a as n,b as t,w as a,F as k,e as p,d as s}from"./app.cfdf84e7.js";const b={},m=p('

Kontozuordnungen

Zuordnungen (Maps) sind Datenstrukturen, die wir h\xE4ufig beim Programmieren verwenden, um einen Schl\xFCssel mit einem Wert irgendeiner Art zu verkn\xFCpfen. Der Schl\xFCssel und der Wert k\xF6nnen von jedem beliebigen Typ sein, und der Schl\xFCssel dient als Kennung f\xFCr einen bestimmten Wert, der gespeichert wird. Es erm\xF6glicht uns dann, angesichts seines Schl\xFCssels, diese Werte effizient einzuf\xFCgen, abzurufen und zu aktualisieren.

Wie wir wissen, erfordert das Kontomodell von Solana, dass Programmdaten und ihre relevanten Zustandsdaten in verschiedenen Konten gespeichert werden. Diesen Konten ist eine Adresse zugeordnet. Dies dient an sich als Karte! Erfahren Sie [hier][AccountCookbook] mehr \xFCber den Kontomodus von Solana.

Es w\xE4re also sinnvoll, Ihre Werte in separaten Konten zu speichern, wobei deren Adresse der Schl\xFCssel ist, der zum Abrufen des Werts erforderlich ist. Aber das bringt ein paar Probleme mit sich, wie z.B.

  • Die oben genannten Adressen sind h\xF6chstwahrscheinlich keine idealen Schl\xFCssel, an die Sie sich erinnern und den erforderlichen Wert abrufen k\xF6nnten.

  • Die oben erw\xE4hnten Adressen beziehen sich auf \xF6ffentliche Schl\xFCssel verschiedener Schl\xFCsselpaare, wobei jedem \xF6ffentlichen Schl\xFCssel (oder Adresse) auch ein privater Schl\xFCssel zugeordnet w\xE4re. Dieser private Schl\xFCssel m\xFCsste bei Bedarf verschiedene Anweisungen unterzeichnen, sodass wir den privaten Schl\xFCssel irgendwo speichern m\xFCssen, was definitiv nicht empfohlen wird!

Dies stellt ein Problem dar, mit dem viele Solana-Entwickler konfrontiert sind, n\xE4mlich das Implementieren einer "Map"-\xE4hnlichen Logik in ihre Programme. Schauen wir uns ein paar M\xF6glichkeiten an, wie wir dieses Problem angehen w\xFCrden.

Ableitende PDAs

',7),d=s("PDA steht f\xFCr "),_={href:"https://solanacookbook.com/references/accounts.html#program-derived-address",target:"_blank",rel:"noopener noreferrer"},f=s("Program Derived Address"),y=s(", und sind kurz gesagt Adressen "),g=n("strong",null,"abgeleitet",-1),w=s(" von einer Reihe von Seeds und einer Programm-ID (oder "),h=n("em",null,"address",-1),A=s(")."),P=s("The unique thing about PDAs is that, these addresses are "),B=n("strong",null,"not",-1),S=s(" associated with any private key. This is because these addresses do not lie on the ED25519 curve. Hence, "),I=n("strong",null,"only",-1),v=s(" the program, from which this "),x=n("em",null,"address",-1),E=s(" was derived, can sign an instruction with the key, provided the seeds as well. Learn more about this "),z={href:"https://solanacookbook.com/references/programs.html#create-a-program-derived-address",target:"_blank",rel:"noopener noreferrer"},M=s("here"),C=s("."),D=p("

Nachdem wir nun eine Vorstellung davon haben, was PDAs sind, verwenden wir sie, um einige Konten zuzuordnen! Wir nehmen ein Beispiel eines Blog-Programms, um zu demonstrieren, wie dies implementiert werden w\xFCrde.

In diesem Blog-Programm m\xF6chten wir, dass jeder \u201EBenutzer\u201C einen einzigen \u201EBlog\u201C hat. Dieser Blog kann beliebig viele Beitr\xE4ge haben. Das w\xFCrde bedeuten, dass wir jeden Benutzer einem Blog zuordnen und jeder Beitrag einem bestimmten Blog zugeordnet wird.

Kurz gesagt, es gibt eine 1:1-Zuordnung zwischen einem Benutzer und seinem/ihrem Blog, w\xE4hrend eine 1:N-Zuordnung zwischen einem Blog und seinen Beitr\xE4gen besteht.

F\xFCr die 1:1-Zuordnung m\xF6chten wir, dass die Adresse eines Blogs nur von seinem Benutzer abgeleitet wird, was es uns erm\xF6glichen w\xFCrde, ein Blog abzurufen, wenn seine Autorit\xE4t (oder user) gegeben ist. Daher w\xFCrden die Schl\xFCssel f\xFCr einrn Blog aus dem Schl\xFCssel seiner Autorit\xE4t und m\xF6glicherweise einem Pr\xE4fix von "Blog" bestehen, das als Typidentifizierer fungiert.

For the 1:N mapping, we would want each post's address to be derived not only from the blog which it is associated with, but also another identifier, allowing us to differentiate between the N number of posts in the blog. In the example below, each post's address is derived from the blog's key, a slug to identify each post, and a prefix of "post", to act as a type identifier.

Der Code ist wie unten gezeigt,

",6),R=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("anchor_lang"),n("span",{class:"token punctuation"},"::"),s("prelude"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token operator"},"*"),n("span",{class:"token punctuation"},";"),s(` +import{_ as u,r as c,o as r,c as i,a as n,b as t,w as a,F as k,e as p,d as s}from"./app.2fbb9e96.js";const b={},m=p('

Kontozuordnungen

Zuordnungen (Maps) sind Datenstrukturen, die wir h\xE4ufig beim Programmieren verwenden, um einen Schl\xFCssel mit einem Wert irgendeiner Art zu verkn\xFCpfen. Der Schl\xFCssel und der Wert k\xF6nnen von jedem beliebigen Typ sein, und der Schl\xFCssel dient als Kennung f\xFCr einen bestimmten Wert, der gespeichert wird. Es erm\xF6glicht uns dann, angesichts seines Schl\xFCssels, diese Werte effizient einzuf\xFCgen, abzurufen und zu aktualisieren.

Wie wir wissen, erfordert das Kontomodell von Solana, dass Programmdaten und ihre relevanten Zustandsdaten in verschiedenen Konten gespeichert werden. Diesen Konten ist eine Adresse zugeordnet. Dies dient an sich als Karte! Erfahren Sie [hier][AccountCookbook] mehr \xFCber den Kontomodus von Solana.

Es w\xE4re also sinnvoll, Ihre Werte in separaten Konten zu speichern, wobei deren Adresse der Schl\xFCssel ist, der zum Abrufen des Werts erforderlich ist. Aber das bringt ein paar Probleme mit sich, wie z.B.

  • Die oben genannten Adressen sind h\xF6chstwahrscheinlich keine idealen Schl\xFCssel, an die Sie sich erinnern und den erforderlichen Wert abrufen k\xF6nnten.

  • Die oben erw\xE4hnten Adressen beziehen sich auf \xF6ffentliche Schl\xFCssel verschiedener Schl\xFCsselpaare, wobei jedem \xF6ffentlichen Schl\xFCssel (oder Adresse) auch ein privater Schl\xFCssel zugeordnet w\xE4re. Dieser private Schl\xFCssel m\xFCsste bei Bedarf verschiedene Anweisungen unterzeichnen, sodass wir den privaten Schl\xFCssel irgendwo speichern m\xFCssen, was definitiv nicht empfohlen wird!

Dies stellt ein Problem dar, mit dem viele Solana-Entwickler konfrontiert sind, n\xE4mlich das Implementieren einer "Map"-\xE4hnlichen Logik in ihre Programme. Schauen wir uns ein paar M\xF6glichkeiten an, wie wir dieses Problem angehen w\xFCrden.

Ableitende PDAs

',7),d=s("PDA steht f\xFCr "),_={href:"https://solanacookbook.com/references/accounts.html#program-derived-address",target:"_blank",rel:"noopener noreferrer"},f=s("Program Derived Address"),y=s(", und sind kurz gesagt Adressen "),g=n("strong",null,"abgeleitet",-1),w=s(" von einer Reihe von Seeds und einer Programm-ID (oder "),h=n("em",null,"address",-1),A=s(")."),P=s("The unique thing about PDAs is that, these addresses are "),B=n("strong",null,"not",-1),S=s(" associated with any private key. This is because these addresses do not lie on the ED25519 curve. Hence, "),I=n("strong",null,"only",-1),v=s(" the program, from which this "),x=n("em",null,"address",-1),E=s(" was derived, can sign an instruction with the key, provided the seeds as well. Learn more about this "),z={href:"https://solanacookbook.com/references/programs.html#create-a-program-derived-address",target:"_blank",rel:"noopener noreferrer"},M=s("here"),C=s("."),D=p("

Nachdem wir nun eine Vorstellung davon haben, was PDAs sind, verwenden wir sie, um einige Konten zuzuordnen! Wir nehmen ein Beispiel eines Blog-Programms, um zu demonstrieren, wie dies implementiert werden w\xFCrde.

In diesem Blog-Programm m\xF6chten wir, dass jeder \u201EBenutzer\u201C einen einzigen \u201EBlog\u201C hat. Dieser Blog kann beliebig viele Beitr\xE4ge haben. Das w\xFCrde bedeuten, dass wir jeden Benutzer einem Blog zuordnen und jeder Beitrag einem bestimmten Blog zugeordnet wird.

Kurz gesagt, es gibt eine 1:1-Zuordnung zwischen einem Benutzer und seinem/ihrem Blog, w\xE4hrend eine 1:N-Zuordnung zwischen einem Blog und seinen Beitr\xE4gen besteht.

F\xFCr die 1:1-Zuordnung m\xF6chten wir, dass die Adresse eines Blogs nur von seinem Benutzer abgeleitet wird, was es uns erm\xF6glichen w\xFCrde, ein Blog abzurufen, wenn seine Autorit\xE4t (oder user) gegeben ist. Daher w\xFCrden die Schl\xFCssel f\xFCr einrn Blog aus dem Schl\xFCssel seiner Autorit\xE4t und m\xF6glicherweise einem Pr\xE4fix von "Blog" bestehen, das als Typidentifizierer fungiert.

For the 1:N mapping, we would want each post's address to be derived not only from the blog which it is associated with, but also another identifier, allowing us to differentiate between the N number of posts in the blog. In the example below, each post's address is derived from the blog's key, a slug to identify each post, and a prefix of "post", to act as a type identifier.

Der Code ist wie unten gezeigt,

",6),R=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("anchor_lang"),n("span",{class:"token punctuation"},"::"),s("prelude"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token operator"},"*"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token macro property"},"declare_id!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"2vD2HBhLnkcYcKxnxLjFYXokHdcsgJnyEXGnSpAX376e"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` diff --git a/docs/.vuepress/dist/assets/account-maps.html.ffc7268f.js b/docs/.vuepress/dist/assets/account-maps.html.2eb64379.js similarity index 99% rename from docs/.vuepress/dist/assets/account-maps.html.ffc7268f.js rename to docs/.vuepress/dist/assets/account-maps.html.2eb64379.js index df5a898b0..98412bbca 100644 --- a/docs/.vuepress/dist/assets/account-maps.html.ffc7268f.js +++ b/docs/.vuepress/dist/assets/account-maps.html.2eb64379.js @@ -1,4 +1,4 @@ -import{_ as u,r as p,o as r,c as i,a as n,b as t,w as a,F as k,d as s,e as l}from"./app.cfdf84e7.js";const b={},m=n("h1",{id:"account-maps",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#account-maps","aria-hidden":"true"},"#"),s(" Account Maps")],-1),d=n("p",null,[s("Maps \u0E04\u0E37\u0E2D data structures \u0E17\u0E35\u0E48\u0E40\u0E23\u0E32\u0E43\u0E0A\u0E49\u0E1A\u0E48\u0E2D\u0E22\u0E46 \u0E15\u0E2D\u0E19\u0E40\u0E02\u0E35\u0E22\u0E19 program \u0E17\u0E35\u0E48\u0E40\u0E01\u0E35\u0E48\u0E22\u0E27\u0E01\u0E31\u0E1A "),n("strong",null,"key"),s(" \u0E41\u0E25\u0E30 "),n("strong",null,"value"),s(" \u0E02\u0E2D\u0E07\u0E2D\u0E30\u0E44\u0E23\u0E1A\u0E32\u0E07\u0E2D\u0E22\u0E48\u0E32\u0E07.\u0E0B\u0E36\u0E48\u0E07 value \u0E2D\u0E32\u0E08\u0E08\u0E30\u0E40\u0E1B\u0E47\u0E19 type \u0E2D\u0E30\u0E44\u0E23\u0E01\u0E47\u0E44\u0E14\u0E49 \u0E2A\u0E48\u0E27\u0E19 key \u0E08\u0E30\u0E40\u0E1B\u0E47\u0E19\u0E40\u0E2B\u0E21\u0E37\u0E2D\u0E19 identifier \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A value \u0E19\u0E31\u0E49\u0E19\u0E46 \u0E01\u0E32\u0E23\u0E21\u0E35 key \u0E01\u0E47\u0E08\u0E30\u0E17\u0E33\u0E43\u0E2B\u0E49\u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E41\u0E17\u0E23\u0E01 (insert), \u0E2D\u0E48\u0E32\u0E19\u0E04\u0E48\u0E32\u0E21\u0E32 (retrieve) \u0E41\u0E25\u0E30 \u0E40\u0E1B\u0E25\u0E35\u0E48\u0E22\u0E19\u0E41\u0E1B\u0E25\u0E07 (update) values \u0E40\u0E2B\u0E25\u0E48\u0E32\u0E19\u0E35\u0E49\u0E44\u0E14\u0E49\u0E2A\u0E30\u0E14\u0E27\u0E01")],-1),_=s("\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E17\u0E35\u0E48\u0E40\u0E23\u0E32\u0E23\u0E39\u0E49 \u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E02\u0E2D\u0E07 Solana's Account \u0E15\u0E49\u0E2D\u0E07\u0E01\u0E32\u0E23 program data \u0E41\u0E25\u0E30 state data \u0E17\u0E35\u0E48\u0E40\u0E01\u0E35\u0E48\u0E22\u0E27\u0E02\u0E49\u0E2D\u0E07\u0E40\u0E01\u0E47\u0E1A\u0E2D\u0E22\u0E39\u0E48\u0E43\u0E19 accounts \u0E41\u0E22\u0E01\u0E01\u0E31\u0E19 \u0E0B\u0E36\u0E48\u0E07\u0E01\u0E32\u0E23\u0E17\u0E35\u0E48 accounts \u0E40\u0E2B\u0E25\u0E48\u0E32\u0E19\u0E35\u0E49\u0E21\u0E35 address associated \u0E2D\u0E22\u0E39\u0E48\u0E17\u0E33\u0E43\u0E2B\u0E49\u0E21\u0E31\u0E19\u0E21\u0E35\u0E25\u0E31\u0E01\u0E29\u0E13\u0E30\u0E40\u0E2B\u0E21\u0E37\u0E2D\u0E19 map \u0E19\u0E31\u0E48\u0E19\u0E40\u0E2D\u0E07! \u0E40\u0E23\u0E35\u0E22\u0E19\u0E23\u0E39\u0E49\u0E40\u0E01\u0E35\u0E48\u0E22\u0E27\u0E01\u0E31\u0E1A Solana's Account mode "),y={href:"https://solanacookbook.com/core-concepts/accounts.html",target:"_blank",rel:"noopener noreferrer"},f=s("\u0E17\u0E35\u0E48\u0E19\u0E35\u0E48"),g=s("."),w=l('

\u0E14\u0E31\u0E07\u0E19\u0E31\u0E49\u0E19\u0E21\u0E31\u0E19\u0E01\u0E47\u0E40\u0E2B\u0E21\u0E32\u0E30\u0E2A\u0E21\u0E41\u0E25\u0E49\u0E27\u0E17\u0E35\u0E48\u0E40\u0E23\u0E32\u0E08\u0E30\u0E40\u0E01\u0E47\u0E1A values \u0E44\u0E27\u0E49\u0E43\u0E19 accounts \u0E41\u0E22\u0E01 \u0E42\u0E14\u0E22\u0E15\u0E49\u0E2D\u0E07\u0E21\u0E35 address \u0E40\u0E1B\u0E47\u0E19 key \u0E43\u0E19\u0E01\u0E32\u0E23\u0E14\u0E36\u0E07 value \u0E2D\u0E2D\u0E01\u0E21\u0E32. \u0E41\u0E15\u0E48\u0E21\u0E31\u0E19\u0E01\u0E47\u0E21\u0E35\u0E1B\u0E31\u0E0D\u0E2B\u0E32\u0E15\u0E32\u0E21\u0E21\u0E32\u0E2D\u0E22\u0E39\u0E48\u0E1A\u0E49\u0E32\u0E07\u0E40\u0E2B\u0E21\u0E37\u0E2D\u0E19\u0E01\u0E31\u0E19 \u0E40\u0E0A\u0E48\u0E19,

  • \u0E1E\u0E2D\u0E43\u0E0A\u0E49 addresses \u0E40\u0E1B\u0E47\u0E19 keys \u0E41\u0E25\u0E49\u0E27\u0E17\u0E33\u0E43\u0E2B\u0E49\u0E08\u0E33\u0E22\u0E32\u0E01

  • \u0E1E\u0E2D\u0E43\u0E0A\u0E49 addresses \u0E01\u0E47\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E17\u0E35\u0E48\u0E40\u0E23\u0E32\u0E23\u0E39\u0E49\u0E27\u0E48\u0E32 public keys \u0E02\u0E2D\u0E07 Keypairs \u0E08\u0E30\u0E21\u0E35 public key (\u0E2B\u0E23\u0E37\u0E2D address) \u0E41\u0E25\u0E30 private key \u0E40\u0E02\u0E49\u0E32\u0E21\u0E32\u0E40\u0E01\u0E35\u0E48\u0E22\u0E27\u0E02\u0E49\u0E2D\u0E07\u0E14\u0E49\u0E27\u0E22 \u0E0B\u0E36\u0E48\u0E07 private key \u0E08\u0E30\u0E15\u0E49\u0E2D\u0E07\u0E21\u0E35\u0E40\u0E2D\u0E32\u0E44\u0E27\u0E49 sign instructions \u0E15\u0E48\u0E32\u0E07\u0E46 \u0E40\u0E27\u0E25\u0E32\u0E17\u0E35\u0E48\u0E15\u0E49\u0E2D\u0E07\u0E01\u0E32\u0E23, \u0E17\u0E33\u0E43\u0E2B\u0E49\u0E40\u0E23\u0E32\u0E15\u0E49\u0E2D\u0E07\u0E40\u0E01\u0E47\u0E1A private key \u0E44\u0E27\u0E49\u0E14\u0E49\u0E27\u0E22 \u0E0B\u0E36\u0E48\u0E07 \u0E44\u0E21\u0E48\u0E43\u0E0A\u0E48\u0E17\u0E32\u0E07\u0E17\u0E35\u0E48\u0E14\u0E35 \u0E41\u0E19\u0E48\u0E46!

\u0E1B\u0E31\u0E0D\u0E2B\u0E32\u0E40\u0E2B\u0E25\u0E48\u0E32\u0E19\u0E49\u0E35\u0E40\u0E1B\u0E47\u0E19\u0E1B\u0E31\u0E0D\u0E2B\u0E32\u0E17\u0E35\u0E48\u0E19\u0E31\u0E01\u0E1E\u0E31\u0E12\u0E19\u0E32 Solana \u0E08\u0E30\u0E15\u0E49\u0E2D\u0E07\u0E40\u0E08\u0E2D\u0E40\u0E27\u0E25\u0E32\u0E17\u0E35\u0E48\u0E15\u0E49\u0E2D\u0E07\u0E43\u0E0A\u0E49 Map \u0E43\u0E19 programs \u0E40\u0E23\u0E32\u0E25\u0E2D\u0E07\u0E21\u0E32\u0E14\u0E39\u0E17\u0E32\u0E07\u0E41\u0E01\u0E49\u0E01\u0E31\u0E19\u0E14\u0E35\u0E01\u0E27\u0E48\u0E32

Deriving PDAs

',4),h=s("PDA \u0E22\u0E48\u0E2D\u0E21\u0E32\u0E08\u0E32\u0E01 "),A={href:"https://solanacookbook.com/references/accounts.html#program-derived-address",target:"_blank",rel:"noopener noreferrer"},P=s("Program Derived Address"),B=s(", \u0E41\u0E25\u0E30\u0E2A\u0E31\u0E49\u0E19\u0E46 \u0E04\u0E37\u0E2D addresses "),I=n("strong",null,"\u0E08\u0E30\u0E44\u0E14\u0E49\u0E23\u0E31\u0E1A\u0E2A\u0E37\u0E1A\u0E17\u0E2D\u0E14 (derived)",-1),S=s(" \u0E08\u0E32\u0E01 seeds \u0E41\u0E25\u0E30 a program id (\u0E2B\u0E23\u0E37\u0E2D "),v=n("em",null,"address",-1),x=s(")."),E=s("\u0E17\u0E35\u0E48\u0E1E\u0E34\u0E40\u0E28\u0E29\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A PDAs \u0E04\u0E37\u0E2D addresses \u0E40\u0E2B\u0E25\u0E48\u0E32\u0E19\u0E35\u0E49\u0E08\u0E30"),M=n("strong",null,"\u0E44\u0E21\u0E48",-1),C=s("\u0E40\u0E01\u0E35\u0E48\u0E22\u0E27\u0E02\u0E49\u0E2D\u0E07\u0E01\u0E31\u0E1A private key \u0E43\u0E14\u0E46 \u0E17\u0E31\u0E49\u0E07\u0E19\u0E35\u0E49\u0E40\u0E1E\u0E23\u0E32\u0E30 addresses \u0E40\u0E2B\u0E25\u0E48\u0E32\u0E19\u0E35\u0E49\u0E44\u0E21\u0E48\u0E44\u0E14\u0E49\u0E2D\u0E22\u0E39\u0E48\u0E1A\u0E19 ED25519 curve \u0E14\u0E31\u0E07\u0E19\u0E31\u0E49\u0E19\u0E08\u0E30\u0E21\u0E35 "),R=n("strong",null,"\u0E40\u0E09\u0E1E\u0E32\u0E30",-1),T=s(" program \u0E17\u0E35\u0E48 "),D=n("em",null,"address",-1),O=s(" \u0E19\u0E35\u0E49\u0E44\u0E14\u0E49\u0E23\u0E31\u0E1A\u0E2A\u0E37\u0E1A\u0E17\u0E2D\u0E14\u0E21\u0E32\u0E40\u0E17\u0E48\u0E32\u0E19\u0E31\u0E49\u0E19\u0E16\u0E36\u0E07\u0E08\u0E30\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 sign instruction \u0E19\u0E35\u0E49\u0E14\u0E49\u0E27\u0E22 key \u0E44\u0E14\u0E49 \u0E23\u0E48\u0E27\u0E21\u0E01\u0E31\u0E1A seeds \u0E17\u0E35\u0E48\u0E40\u0E15\u0E23\u0E35\u0E22\u0E21\u0E44\u0E27\u0E49 \u0E40\u0E23\u0E35\u0E22\u0E19\u0E23\u0E39\u0E49\u0E40\u0E01\u0E35\u0E48\u0E22\u0E27\u0E01\u0E31\u0E1A\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E35\u0E49\u0E44\u0E14\u0E49 "),K={href:"https://solanacookbook.com/references/programs.html#create-a-program-derived-address",target:"_blank",rel:"noopener noreferrer"},z=s("\u0E17\u0E35\u0E48\u0E19\u0E35\u0E48"),L=s("."),N=l("

\u0E15\u0E2D\u0E19\u0E19\u0E35\u0E49\u0E40\u0E23\u0E32\u0E01\u0E47\u0E44\u0E14\u0E49\u0E23\u0E39\u0E49\u0E08\u0E31\u0E01\u0E01\u0E31\u0E1A PDAs \u0E41\u0E25\u0E49\u0E27\u0E27\u0E48\u0E32\u0E21\u0E31\u0E19\u0E04\u0E37\u0E2D\u0E2D\u0E30\u0E44\u0E23, \u0E21\u0E32\u0E25\u0E2D\u0E07\u0E43\u0E0A\u0E49\u0E1E\u0E27\u0E01\u0E21\u0E31\u0E19\u0E43\u0E19\u0E01\u0E32\u0E23 map accounts \u0E01\u0E31\u0E19\u0E40\u0E16\u0E2D\u0E30! \u0E40\u0E23\u0E32\u0E08\u0E30\u0E43\u0E0A\u0E49\u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E08\u0E32\u0E01 Blog program \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E41\u0E2A\u0E14\u0E07\u0E43\u0E2B\u0E49\u0E40\u0E2B\u0E47\u0E19\u0E27\u0E48\u0E32\u0E40\u0E23\u0E32\u0E08\u0E30\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19\u0E21\u0E31\u0E19\u0E44\u0E14\u0E49\u0E22\u0E31\u0E07\u0E44\u0E07

\u0E43\u0E19 Blog program \u0E40\u0E23\u0E32\u0E15\u0E49\u0E2D\u0E07\u0E01\u0E32\u0E23\u0E43\u0E2B\u0E49\u0E41\u0E15\u0E48\u0E25\u0E30 User \u0E21\u0E35 Blog \u0E04\u0E19\u0E25\u0E30\u0E15\u0E31\u0E27 \u0E41\u0E25\u0E30 blog \u0E19\u0E35\u0E49\u0E08\u0E30\u0E21\u0E35\u0E44\u0E14\u0E49\u0E2B\u0E25\u0E32\u0E22 Posts \u0E19\u0E31\u0E48\u0E19\u0E2B\u0E21\u0E32\u0E22\u0E04\u0E27\u0E32\u0E21\u0E27\u0E48\u0E32\u0E40\u0E23\u0E32\u0E15\u0E49\u0E2D\u0E07\u0E17\u0E33\u0E01\u0E32\u0E23 mapping \u0E41\u0E15\u0E48\u0E25\u0E30 user \u0E44\u0E1B\u0E17\u0E35\u0E48 blog \u0E41\u0E25\u0E30\u0E41\u0E15\u0E48\u0E25\u0E30 post \u0E08\u0E30\u0E21\u0E35\u0E15\u0E31\u0E27\u0E0A\u0E35\u0E49\u0E04\u0E2D\u0E22 mapped \u0E44\u0E1B\u0E17\u0E35\u0E48 blog

\u0E1E\u0E39\u0E14\u0E2A\u0E31\u0E49\u0E19\u0E46 \u0E01\u0E47\u0E04\u0E37\u0E2D, \u0E21\u0E35 1:1 mapping \u0E23\u0E30\u0E2B\u0E27\u0E48\u0E32\u0E07 user \u0E01\u0E31\u0E1A blog \u0E41\u0E25\u0E30 1:N mapping \u0E23\u0E30\u0E2B\u0E27\u0E48\u0E32\u0E07 blog \u0E01\u0E31\u0E1A posts.

\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A 1:1 mapping, \u0E40\u0E23\u0E32\u0E15\u0E49\u0E2D\u0E07\u0E01\u0E32\u0E23\u0E43\u0E2B\u0E49 blog address \u0E2A\u0E37\u0E1A\u0E17\u0E2D\u0E14\u0E21\u0E32\u0E08\u0E32\u0E01 user \u0E40\u0E17\u0E48\u0E32\u0E19\u0E31\u0E49\u0E19, \u0E08\u0E30\u0E44\u0E14\u0E49\u0E17\u0E33\u0E43\u0E2B\u0E49\u0E40\u0E23\u0E32\u0E14\u0E36\u0E07 blog \u0E44\u0E14\u0E49\u0E15\u0E32\u0E21 authority (\u0E2B\u0E23\u0E37\u0E2D\u0E15\u0E32\u0E21 user \u0E19\u0E31\u0E48\u0E19\u0E40\u0E2D\u0E07). \u0E14\u0E31\u0E07\u0E19\u0E31\u0E49\u0E19 seed \u0E08\u0E36\u0E07\u0E15\u0E49\u0E2D\u0E07\u0E21\u0E35 authority's key \u0E41\u0E25\u0E30\u0E04\u0E27\u0E23\u0E08\u0E30\u0E02\u0E36\u0E49\u0E19\u0E15\u0E49\u0E19\u0E14\u0E49\u0E27\u0E22 "blog" \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E43\u0E0A\u0E49\u0E40\u0E1B\u0E47\u0E19\u0E15\u0E31\u0E27\u0E41\u0E22\u0E01\u0E1B\u0E23\u0E30\u0E40\u0E20\u0E17 (type identifier)

\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A 1:N mapping, \u0E40\u0E23\u0E32\u0E15\u0E49\u0E2D\u0E07\u0E01\u0E32\u0E23\u0E43\u0E2B\u0E49\u0E41\u0E15\u0E48\u0E25\u0E30 post address \u0E2A\u0E37\u0E1A\u0E17\u0E2D\u0E14\u0E44\u0E14\u0E49\u0E08\u0E32\u0E01 \u0E2B\u0E25\u0E32\u0E22\u0E46 blog \u0E17\u0E35\u0E48\u0E40\u0E01\u0E35\u0E48\u0E22\u0E27\u0E02\u0E49\u0E2D\u0E07 \u0E41\u0E15\u0E48\u0E43\u0E0A\u0E49\u0E04\u0E19\u0E25\u0E30 identifier, \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E08\u0E30\u0E44\u0E14\u0E49\u0E21\u0E35\u0E04\u0E27\u0E32\u0E21\u0E41\u0E15\u0E01\u0E15\u0E48\u0E32\u0E07\u0E23\u0E30\u0E2B\u0E27\u0E48\u0E32\u0E07 posts \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E17\u0E38\u0E01\u0E46 N posts \u0E43\u0E19 blog \u0E25\u0E2D\u0E07\u0E14\u0E39\u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E14\u0E49\u0E32\u0E19\u0E25\u0E48\u0E32\u0E07\u0E08\u0E30\u0E40\u0E2B\u0E47\u0E19\u0E27\u0E48\u0E32\u0E43\u0E19\u0E41\u0E15\u0E48\u0E25\u0E30 post address \u0E08\u0E30\u0E16\u0E39\u0E01\u0E2A\u0E37\u0E1A\u0E17\u0E2D\u0E14 (derived from) \u200B\u0E21\u0E32\u0E08\u0E32\u0E01 blog's key, slug \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E08\u0E33\u0E41\u0E19\u0E01\u0E41\u0E15\u0E48\u0E48\u0E25\u0E30 post, \u0E41\u0E25\u0E30\u0E02\u0E36\u0E49\u0E19\u0E15\u0E49\u0E19\u0E14\u0E49\u0E27\u0E22 "post" \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E43\u0E0A\u0E49\u0E40\u0E1B\u0E47\u0E19\u0E15\u0E31\u0E27\u0E41\u0E22\u0E01\u0E1B\u0E23\u0E30\u0E40\u0E20\u0E17 (type identifier) \u0E2D\u0E35\u0E01\u0E17\u0E35\u0E19\u0E36\u0E07.

\u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07 code \u0E2D\u0E22\u0E39\u0E48\u0E14\u0E49\u0E32\u0E19\u0E25\u0E48\u0E32\u0E07,

",6),U=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("anchor_lang"),n("span",{class:"token punctuation"},"::"),s("prelude"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token operator"},"*"),n("span",{class:"token punctuation"},";"),s(` +import{_ as u,r as p,o as r,c as i,a as n,b as t,w as a,F as k,d as s,e as l}from"./app.2fbb9e96.js";const b={},m=n("h1",{id:"account-maps",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#account-maps","aria-hidden":"true"},"#"),s(" Account Maps")],-1),d=n("p",null,[s("Maps \u0E04\u0E37\u0E2D data structures \u0E17\u0E35\u0E48\u0E40\u0E23\u0E32\u0E43\u0E0A\u0E49\u0E1A\u0E48\u0E2D\u0E22\u0E46 \u0E15\u0E2D\u0E19\u0E40\u0E02\u0E35\u0E22\u0E19 program \u0E17\u0E35\u0E48\u0E40\u0E01\u0E35\u0E48\u0E22\u0E27\u0E01\u0E31\u0E1A "),n("strong",null,"key"),s(" \u0E41\u0E25\u0E30 "),n("strong",null,"value"),s(" \u0E02\u0E2D\u0E07\u0E2D\u0E30\u0E44\u0E23\u0E1A\u0E32\u0E07\u0E2D\u0E22\u0E48\u0E32\u0E07.\u0E0B\u0E36\u0E48\u0E07 value \u0E2D\u0E32\u0E08\u0E08\u0E30\u0E40\u0E1B\u0E47\u0E19 type \u0E2D\u0E30\u0E44\u0E23\u0E01\u0E47\u0E44\u0E14\u0E49 \u0E2A\u0E48\u0E27\u0E19 key \u0E08\u0E30\u0E40\u0E1B\u0E47\u0E19\u0E40\u0E2B\u0E21\u0E37\u0E2D\u0E19 identifier \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A value \u0E19\u0E31\u0E49\u0E19\u0E46 \u0E01\u0E32\u0E23\u0E21\u0E35 key \u0E01\u0E47\u0E08\u0E30\u0E17\u0E33\u0E43\u0E2B\u0E49\u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E41\u0E17\u0E23\u0E01 (insert), \u0E2D\u0E48\u0E32\u0E19\u0E04\u0E48\u0E32\u0E21\u0E32 (retrieve) \u0E41\u0E25\u0E30 \u0E40\u0E1B\u0E25\u0E35\u0E48\u0E22\u0E19\u0E41\u0E1B\u0E25\u0E07 (update) values \u0E40\u0E2B\u0E25\u0E48\u0E32\u0E19\u0E35\u0E49\u0E44\u0E14\u0E49\u0E2A\u0E30\u0E14\u0E27\u0E01")],-1),_=s("\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E17\u0E35\u0E48\u0E40\u0E23\u0E32\u0E23\u0E39\u0E49 \u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E02\u0E2D\u0E07 Solana's Account \u0E15\u0E49\u0E2D\u0E07\u0E01\u0E32\u0E23 program data \u0E41\u0E25\u0E30 state data \u0E17\u0E35\u0E48\u0E40\u0E01\u0E35\u0E48\u0E22\u0E27\u0E02\u0E49\u0E2D\u0E07\u0E40\u0E01\u0E47\u0E1A\u0E2D\u0E22\u0E39\u0E48\u0E43\u0E19 accounts \u0E41\u0E22\u0E01\u0E01\u0E31\u0E19 \u0E0B\u0E36\u0E48\u0E07\u0E01\u0E32\u0E23\u0E17\u0E35\u0E48 accounts \u0E40\u0E2B\u0E25\u0E48\u0E32\u0E19\u0E35\u0E49\u0E21\u0E35 address associated \u0E2D\u0E22\u0E39\u0E48\u0E17\u0E33\u0E43\u0E2B\u0E49\u0E21\u0E31\u0E19\u0E21\u0E35\u0E25\u0E31\u0E01\u0E29\u0E13\u0E30\u0E40\u0E2B\u0E21\u0E37\u0E2D\u0E19 map \u0E19\u0E31\u0E48\u0E19\u0E40\u0E2D\u0E07! \u0E40\u0E23\u0E35\u0E22\u0E19\u0E23\u0E39\u0E49\u0E40\u0E01\u0E35\u0E48\u0E22\u0E27\u0E01\u0E31\u0E1A Solana's Account mode "),y={href:"https://solanacookbook.com/core-concepts/accounts.html",target:"_blank",rel:"noopener noreferrer"},f=s("\u0E17\u0E35\u0E48\u0E19\u0E35\u0E48"),g=s("."),w=l('

\u0E14\u0E31\u0E07\u0E19\u0E31\u0E49\u0E19\u0E21\u0E31\u0E19\u0E01\u0E47\u0E40\u0E2B\u0E21\u0E32\u0E30\u0E2A\u0E21\u0E41\u0E25\u0E49\u0E27\u0E17\u0E35\u0E48\u0E40\u0E23\u0E32\u0E08\u0E30\u0E40\u0E01\u0E47\u0E1A values \u0E44\u0E27\u0E49\u0E43\u0E19 accounts \u0E41\u0E22\u0E01 \u0E42\u0E14\u0E22\u0E15\u0E49\u0E2D\u0E07\u0E21\u0E35 address \u0E40\u0E1B\u0E47\u0E19 key \u0E43\u0E19\u0E01\u0E32\u0E23\u0E14\u0E36\u0E07 value \u0E2D\u0E2D\u0E01\u0E21\u0E32. \u0E41\u0E15\u0E48\u0E21\u0E31\u0E19\u0E01\u0E47\u0E21\u0E35\u0E1B\u0E31\u0E0D\u0E2B\u0E32\u0E15\u0E32\u0E21\u0E21\u0E32\u0E2D\u0E22\u0E39\u0E48\u0E1A\u0E49\u0E32\u0E07\u0E40\u0E2B\u0E21\u0E37\u0E2D\u0E19\u0E01\u0E31\u0E19 \u0E40\u0E0A\u0E48\u0E19,

  • \u0E1E\u0E2D\u0E43\u0E0A\u0E49 addresses \u0E40\u0E1B\u0E47\u0E19 keys \u0E41\u0E25\u0E49\u0E27\u0E17\u0E33\u0E43\u0E2B\u0E49\u0E08\u0E33\u0E22\u0E32\u0E01

  • \u0E1E\u0E2D\u0E43\u0E0A\u0E49 addresses \u0E01\u0E47\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E17\u0E35\u0E48\u0E40\u0E23\u0E32\u0E23\u0E39\u0E49\u0E27\u0E48\u0E32 public keys \u0E02\u0E2D\u0E07 Keypairs \u0E08\u0E30\u0E21\u0E35 public key (\u0E2B\u0E23\u0E37\u0E2D address) \u0E41\u0E25\u0E30 private key \u0E40\u0E02\u0E49\u0E32\u0E21\u0E32\u0E40\u0E01\u0E35\u0E48\u0E22\u0E27\u0E02\u0E49\u0E2D\u0E07\u0E14\u0E49\u0E27\u0E22 \u0E0B\u0E36\u0E48\u0E07 private key \u0E08\u0E30\u0E15\u0E49\u0E2D\u0E07\u0E21\u0E35\u0E40\u0E2D\u0E32\u0E44\u0E27\u0E49 sign instructions \u0E15\u0E48\u0E32\u0E07\u0E46 \u0E40\u0E27\u0E25\u0E32\u0E17\u0E35\u0E48\u0E15\u0E49\u0E2D\u0E07\u0E01\u0E32\u0E23, \u0E17\u0E33\u0E43\u0E2B\u0E49\u0E40\u0E23\u0E32\u0E15\u0E49\u0E2D\u0E07\u0E40\u0E01\u0E47\u0E1A private key \u0E44\u0E27\u0E49\u0E14\u0E49\u0E27\u0E22 \u0E0B\u0E36\u0E48\u0E07 \u0E44\u0E21\u0E48\u0E43\u0E0A\u0E48\u0E17\u0E32\u0E07\u0E17\u0E35\u0E48\u0E14\u0E35 \u0E41\u0E19\u0E48\u0E46!

\u0E1B\u0E31\u0E0D\u0E2B\u0E32\u0E40\u0E2B\u0E25\u0E48\u0E32\u0E19\u0E49\u0E35\u0E40\u0E1B\u0E47\u0E19\u0E1B\u0E31\u0E0D\u0E2B\u0E32\u0E17\u0E35\u0E48\u0E19\u0E31\u0E01\u0E1E\u0E31\u0E12\u0E19\u0E32 Solana \u0E08\u0E30\u0E15\u0E49\u0E2D\u0E07\u0E40\u0E08\u0E2D\u0E40\u0E27\u0E25\u0E32\u0E17\u0E35\u0E48\u0E15\u0E49\u0E2D\u0E07\u0E43\u0E0A\u0E49 Map \u0E43\u0E19 programs \u0E40\u0E23\u0E32\u0E25\u0E2D\u0E07\u0E21\u0E32\u0E14\u0E39\u0E17\u0E32\u0E07\u0E41\u0E01\u0E49\u0E01\u0E31\u0E19\u0E14\u0E35\u0E01\u0E27\u0E48\u0E32

Deriving PDAs

',4),h=s("PDA \u0E22\u0E48\u0E2D\u0E21\u0E32\u0E08\u0E32\u0E01 "),A={href:"https://solanacookbook.com/references/accounts.html#program-derived-address",target:"_blank",rel:"noopener noreferrer"},P=s("Program Derived Address"),B=s(", \u0E41\u0E25\u0E30\u0E2A\u0E31\u0E49\u0E19\u0E46 \u0E04\u0E37\u0E2D addresses "),I=n("strong",null,"\u0E08\u0E30\u0E44\u0E14\u0E49\u0E23\u0E31\u0E1A\u0E2A\u0E37\u0E1A\u0E17\u0E2D\u0E14 (derived)",-1),S=s(" \u0E08\u0E32\u0E01 seeds \u0E41\u0E25\u0E30 a program id (\u0E2B\u0E23\u0E37\u0E2D "),v=n("em",null,"address",-1),x=s(")."),E=s("\u0E17\u0E35\u0E48\u0E1E\u0E34\u0E40\u0E28\u0E29\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A PDAs \u0E04\u0E37\u0E2D addresses \u0E40\u0E2B\u0E25\u0E48\u0E32\u0E19\u0E35\u0E49\u0E08\u0E30"),M=n("strong",null,"\u0E44\u0E21\u0E48",-1),C=s("\u0E40\u0E01\u0E35\u0E48\u0E22\u0E27\u0E02\u0E49\u0E2D\u0E07\u0E01\u0E31\u0E1A private key \u0E43\u0E14\u0E46 \u0E17\u0E31\u0E49\u0E07\u0E19\u0E35\u0E49\u0E40\u0E1E\u0E23\u0E32\u0E30 addresses \u0E40\u0E2B\u0E25\u0E48\u0E32\u0E19\u0E35\u0E49\u0E44\u0E21\u0E48\u0E44\u0E14\u0E49\u0E2D\u0E22\u0E39\u0E48\u0E1A\u0E19 ED25519 curve \u0E14\u0E31\u0E07\u0E19\u0E31\u0E49\u0E19\u0E08\u0E30\u0E21\u0E35 "),R=n("strong",null,"\u0E40\u0E09\u0E1E\u0E32\u0E30",-1),T=s(" program \u0E17\u0E35\u0E48 "),D=n("em",null,"address",-1),O=s(" \u0E19\u0E35\u0E49\u0E44\u0E14\u0E49\u0E23\u0E31\u0E1A\u0E2A\u0E37\u0E1A\u0E17\u0E2D\u0E14\u0E21\u0E32\u0E40\u0E17\u0E48\u0E32\u0E19\u0E31\u0E49\u0E19\u0E16\u0E36\u0E07\u0E08\u0E30\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 sign instruction \u0E19\u0E35\u0E49\u0E14\u0E49\u0E27\u0E22 key \u0E44\u0E14\u0E49 \u0E23\u0E48\u0E27\u0E21\u0E01\u0E31\u0E1A seeds \u0E17\u0E35\u0E48\u0E40\u0E15\u0E23\u0E35\u0E22\u0E21\u0E44\u0E27\u0E49 \u0E40\u0E23\u0E35\u0E22\u0E19\u0E23\u0E39\u0E49\u0E40\u0E01\u0E35\u0E48\u0E22\u0E27\u0E01\u0E31\u0E1A\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E35\u0E49\u0E44\u0E14\u0E49 "),K={href:"https://solanacookbook.com/references/programs.html#create-a-program-derived-address",target:"_blank",rel:"noopener noreferrer"},z=s("\u0E17\u0E35\u0E48\u0E19\u0E35\u0E48"),L=s("."),N=l("

\u0E15\u0E2D\u0E19\u0E19\u0E35\u0E49\u0E40\u0E23\u0E32\u0E01\u0E47\u0E44\u0E14\u0E49\u0E23\u0E39\u0E49\u0E08\u0E31\u0E01\u0E01\u0E31\u0E1A PDAs \u0E41\u0E25\u0E49\u0E27\u0E27\u0E48\u0E32\u0E21\u0E31\u0E19\u0E04\u0E37\u0E2D\u0E2D\u0E30\u0E44\u0E23, \u0E21\u0E32\u0E25\u0E2D\u0E07\u0E43\u0E0A\u0E49\u0E1E\u0E27\u0E01\u0E21\u0E31\u0E19\u0E43\u0E19\u0E01\u0E32\u0E23 map accounts \u0E01\u0E31\u0E19\u0E40\u0E16\u0E2D\u0E30! \u0E40\u0E23\u0E32\u0E08\u0E30\u0E43\u0E0A\u0E49\u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E08\u0E32\u0E01 Blog program \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E41\u0E2A\u0E14\u0E07\u0E43\u0E2B\u0E49\u0E40\u0E2B\u0E47\u0E19\u0E27\u0E48\u0E32\u0E40\u0E23\u0E32\u0E08\u0E30\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19\u0E21\u0E31\u0E19\u0E44\u0E14\u0E49\u0E22\u0E31\u0E07\u0E44\u0E07

\u0E43\u0E19 Blog program \u0E40\u0E23\u0E32\u0E15\u0E49\u0E2D\u0E07\u0E01\u0E32\u0E23\u0E43\u0E2B\u0E49\u0E41\u0E15\u0E48\u0E25\u0E30 User \u0E21\u0E35 Blog \u0E04\u0E19\u0E25\u0E30\u0E15\u0E31\u0E27 \u0E41\u0E25\u0E30 blog \u0E19\u0E35\u0E49\u0E08\u0E30\u0E21\u0E35\u0E44\u0E14\u0E49\u0E2B\u0E25\u0E32\u0E22 Posts \u0E19\u0E31\u0E48\u0E19\u0E2B\u0E21\u0E32\u0E22\u0E04\u0E27\u0E32\u0E21\u0E27\u0E48\u0E32\u0E40\u0E23\u0E32\u0E15\u0E49\u0E2D\u0E07\u0E17\u0E33\u0E01\u0E32\u0E23 mapping \u0E41\u0E15\u0E48\u0E25\u0E30 user \u0E44\u0E1B\u0E17\u0E35\u0E48 blog \u0E41\u0E25\u0E30\u0E41\u0E15\u0E48\u0E25\u0E30 post \u0E08\u0E30\u0E21\u0E35\u0E15\u0E31\u0E27\u0E0A\u0E35\u0E49\u0E04\u0E2D\u0E22 mapped \u0E44\u0E1B\u0E17\u0E35\u0E48 blog

\u0E1E\u0E39\u0E14\u0E2A\u0E31\u0E49\u0E19\u0E46 \u0E01\u0E47\u0E04\u0E37\u0E2D, \u0E21\u0E35 1:1 mapping \u0E23\u0E30\u0E2B\u0E27\u0E48\u0E32\u0E07 user \u0E01\u0E31\u0E1A blog \u0E41\u0E25\u0E30 1:N mapping \u0E23\u0E30\u0E2B\u0E27\u0E48\u0E32\u0E07 blog \u0E01\u0E31\u0E1A posts.

\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A 1:1 mapping, \u0E40\u0E23\u0E32\u0E15\u0E49\u0E2D\u0E07\u0E01\u0E32\u0E23\u0E43\u0E2B\u0E49 blog address \u0E2A\u0E37\u0E1A\u0E17\u0E2D\u0E14\u0E21\u0E32\u0E08\u0E32\u0E01 user \u0E40\u0E17\u0E48\u0E32\u0E19\u0E31\u0E49\u0E19, \u0E08\u0E30\u0E44\u0E14\u0E49\u0E17\u0E33\u0E43\u0E2B\u0E49\u0E40\u0E23\u0E32\u0E14\u0E36\u0E07 blog \u0E44\u0E14\u0E49\u0E15\u0E32\u0E21 authority (\u0E2B\u0E23\u0E37\u0E2D\u0E15\u0E32\u0E21 user \u0E19\u0E31\u0E48\u0E19\u0E40\u0E2D\u0E07). \u0E14\u0E31\u0E07\u0E19\u0E31\u0E49\u0E19 seed \u0E08\u0E36\u0E07\u0E15\u0E49\u0E2D\u0E07\u0E21\u0E35 authority's key \u0E41\u0E25\u0E30\u0E04\u0E27\u0E23\u0E08\u0E30\u0E02\u0E36\u0E49\u0E19\u0E15\u0E49\u0E19\u0E14\u0E49\u0E27\u0E22 "blog" \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E43\u0E0A\u0E49\u0E40\u0E1B\u0E47\u0E19\u0E15\u0E31\u0E27\u0E41\u0E22\u0E01\u0E1B\u0E23\u0E30\u0E40\u0E20\u0E17 (type identifier)

\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A 1:N mapping, \u0E40\u0E23\u0E32\u0E15\u0E49\u0E2D\u0E07\u0E01\u0E32\u0E23\u0E43\u0E2B\u0E49\u0E41\u0E15\u0E48\u0E25\u0E30 post address \u0E2A\u0E37\u0E1A\u0E17\u0E2D\u0E14\u0E44\u0E14\u0E49\u0E08\u0E32\u0E01 \u0E2B\u0E25\u0E32\u0E22\u0E46 blog \u0E17\u0E35\u0E48\u0E40\u0E01\u0E35\u0E48\u0E22\u0E27\u0E02\u0E49\u0E2D\u0E07 \u0E41\u0E15\u0E48\u0E43\u0E0A\u0E49\u0E04\u0E19\u0E25\u0E30 identifier, \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E08\u0E30\u0E44\u0E14\u0E49\u0E21\u0E35\u0E04\u0E27\u0E32\u0E21\u0E41\u0E15\u0E01\u0E15\u0E48\u0E32\u0E07\u0E23\u0E30\u0E2B\u0E27\u0E48\u0E32\u0E07 posts \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E17\u0E38\u0E01\u0E46 N posts \u0E43\u0E19 blog \u0E25\u0E2D\u0E07\u0E14\u0E39\u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E14\u0E49\u0E32\u0E19\u0E25\u0E48\u0E32\u0E07\u0E08\u0E30\u0E40\u0E2B\u0E47\u0E19\u0E27\u0E48\u0E32\u0E43\u0E19\u0E41\u0E15\u0E48\u0E25\u0E30 post address \u0E08\u0E30\u0E16\u0E39\u0E01\u0E2A\u0E37\u0E1A\u0E17\u0E2D\u0E14 (derived from) \u200B\u0E21\u0E32\u0E08\u0E32\u0E01 blog's key, slug \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E08\u0E33\u0E41\u0E19\u0E01\u0E41\u0E15\u0E48\u0E48\u0E25\u0E30 post, \u0E41\u0E25\u0E30\u0E02\u0E36\u0E49\u0E19\u0E15\u0E49\u0E19\u0E14\u0E49\u0E27\u0E22 "post" \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E43\u0E0A\u0E49\u0E40\u0E1B\u0E47\u0E19\u0E15\u0E31\u0E27\u0E41\u0E22\u0E01\u0E1B\u0E23\u0E30\u0E40\u0E20\u0E17 (type identifier) \u0E2D\u0E35\u0E01\u0E17\u0E35\u0E19\u0E36\u0E07.

\u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07 code \u0E2D\u0E22\u0E39\u0E48\u0E14\u0E49\u0E32\u0E19\u0E25\u0E48\u0E32\u0E07,

",6),U=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("anchor_lang"),n("span",{class:"token punctuation"},"::"),s("prelude"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token operator"},"*"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token macro property"},"declare_id!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"2vD2HBhLnkcYcKxnxLjFYXokHdcsgJnyEXGnSpAX376e"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` diff --git a/docs/.vuepress/dist/assets/account-maps.html.01e3e678.js b/docs/.vuepress/dist/assets/account-maps.html.3a0ee8da.js similarity index 96% rename from docs/.vuepress/dist/assets/account-maps.html.01e3e678.js rename to docs/.vuepress/dist/assets/account-maps.html.3a0ee8da.js index 3857f65c5..2df1c77b6 100644 --- a/docs/.vuepress/dist/assets/account-maps.html.01e3e678.js +++ b/docs/.vuepress/dist/assets/account-maps.html.3a0ee8da.js @@ -1 +1 @@ -const t={key:"v-02feff2d",path:"/vi/guides/account-maps.html",title:"Account Maps",lang:"vi-VN",frontmatter:{title:"Account Maps",head:[["meta",{name:"title",content:"To\xE0n t\u1EADp Solana | Account Maps"}],["meta",{name:"og:title",content:"To\xE0n t\u1EADp Solana | Account Maps"}],["meta",{name:"description",content:"Account Map l\xE0 m\u1ED9t ki\u1EC3u c\u1EA5u tr\xFAc d\u1EEF li\u1EC7u h\u1EEFu \xEDch v\xE0 th\u01B0\u1EDDng d\xF9ng trong l\u1EADp tr\xECnh Solana. Chi ti\u1EBFt v\u1EC1 N\xE2ng c\u1EA5p d\u1EEF li\u1EC7u cho Account Map v\xE0 c\xE1c kh\xE1i ni\u1EC7m c\u01A1n b\u1EA3n kh\xE1c trong To\xE0n t\u1EADp Solana."}],["meta",{name:"og:description",content:"Account Map l\xE0 m\u1ED9t ki\u1EC3u c\u1EA5u tr\xFAc d\u1EEF li\u1EC7u h\u1EEFu \xEDch v\xE0 th\u01B0\u1EDDng d\xF9ng trong l\u1EADp tr\xECnh Solana. Chi ti\u1EBFt v\u1EC1 N\xE2ng c\u1EA5p d\u1EEF li\u1EC7u cho Account Map v\xE0 c\xE1c kh\xE1i ni\u1EC7m c\u01A1n b\u1EA3n kh\xE1c trong To\xE0n t\u1EADp Solana."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"T\xECm PDA",slug:"tim-pda",children:[]},{level:2,title:"Map b\u1EB1ng Account \u0111\u01A1n",slug:"map-bang-account-\u0111on",children:[]}],git:{updatedTime:1658783638e3},filePathRelative:"vi/guides/account-maps.md"};export{t as data}; +const t={key:"v-02feff2d",path:"/vi/guides/account-maps.html",title:"Account Maps",lang:"vi-VN",frontmatter:{title:"Account Maps",head:[["meta",{name:"title",content:"To\xE0n t\u1EADp Solana | Account Maps"}],["meta",{name:"og:title",content:"To\xE0n t\u1EADp Solana | Account Maps"}],["meta",{name:"description",content:"Account Map l\xE0 m\u1ED9t ki\u1EC3u c\u1EA5u tr\xFAc d\u1EEF li\u1EC7u h\u1EEFu \xEDch v\xE0 th\u01B0\u1EDDng d\xF9ng trong l\u1EADp tr\xECnh Solana. Chi ti\u1EBFt v\u1EC1 N\xE2ng c\u1EA5p d\u1EEF li\u1EC7u cho Account Map v\xE0 c\xE1c kh\xE1i ni\u1EC7m c\u01A1n b\u1EA3n kh\xE1c trong To\xE0n t\u1EADp Solana."}],["meta",{name:"og:description",content:"Account Map l\xE0 m\u1ED9t ki\u1EC3u c\u1EA5u tr\xFAc d\u1EEF li\u1EC7u h\u1EEFu \xEDch v\xE0 th\u01B0\u1EDDng d\xF9ng trong l\u1EADp tr\xECnh Solana. Chi ti\u1EBFt v\u1EC1 N\xE2ng c\u1EA5p d\u1EEF li\u1EC7u cho Account Map v\xE0 c\xE1c kh\xE1i ni\u1EC7m c\u01A1n b\u1EA3n kh\xE1c trong To\xE0n t\u1EADp Solana."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"T\xECm PDA",slug:"tim-pda",children:[]},{level:2,title:"Map b\u1EB1ng Account \u0111\u01A1n",slug:"map-bang-account-\u0111on",children:[]}],git:{updatedTime:1677551527e3},filePathRelative:"vi/guides/account-maps.md"};export{t as data}; diff --git a/docs/.vuepress/dist/assets/account-maps.html.85869834.js b/docs/.vuepress/dist/assets/account-maps.html.3ef0a43c.js similarity index 99% rename from docs/.vuepress/dist/assets/account-maps.html.85869834.js rename to docs/.vuepress/dist/assets/account-maps.html.3ef0a43c.js index 81be17bd3..e3e49d037 100644 --- a/docs/.vuepress/dist/assets/account-maps.html.85869834.js +++ b/docs/.vuepress/dist/assets/account-maps.html.3ef0a43c.js @@ -1,4 +1,4 @@ -import{_ as u,r as p,o as i,c as r,a as n,b as t,w as a,F as k,d as s,e as l}from"./app.cfdf84e7.js";const b={},m=n("h1",{id:"peta-akun",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#peta-akun","aria-hidden":"true"},"#"),s(" Peta Akun")],-1),d=n("p",null,[s("Peta ("),n("em",null,"Maps"),s(") adalah sebuah struktur data yang sering kita gunakan dalam pemrograman untuk mengaitkan sebuah "),n("strong",null,"kunci"),s(" dengan suatu "),n("strong",null,"nilai"),s(". Kunci dan nilai ini dapat bertipe data apa saja. Kunci ini berperan sebagai pengenal dari nilai yang diberikan yang sedang disimpan. Kunci dari peta ini memungkinkan kita untuk memasukkan, mengambil dan memperbarui nilai tersebut secara efisien.")],-1),_=s("Model dari akun Solana seperti yang kita ketahui memerlukan data program dan data posisi saat itu untuk dapat disimpan di akun yang berbeda. Akun tersebut memiliki alamat yang berkaitan dengan diri mereka. Hal ini sendiri sebenarnya merupakan sebuah peta! Pelajari lebih lanjut mengenai model akun solana "),y={href:"https://solanacookbook.com/core-concepts/accounts.html",target:"_blank",rel:"noopener noreferrer"},g=s("disini"),f=s("."),w=l('

Jadi, tentunya masuk akal untuk menyimpan nilai di akun yang berbeda, dengan alamat berperan sebagai kunci yang dibutuhkan untuk mengambil nilainya. Tetapi terdapat beberapa masalah yang muncul akibat metode ini, antara lain

  • Alamat - alamat yang disebutkan di atas kemungkinan besar bukanlah sebuah kunci yang ideal, yang dapat Anda ingat dan gunakan untuk mengambil nilai yang diperlukan.

  • Alamat - alamat yang disebutkan di atas merujuk ke kunci publik dari Pasangan Kunci yang berbeda, dimana setiap kunci publik (atau alamat) memiliki kunci pribadi yang berkaitan dengannya. Kunci pribadi ini akan diperlukan untuk menandatangani instruksi yang berbeda jika dan bila diperlukan, mengharuskan kita untuk menyimpan kunci pribadi di suatu tempat, yang tentunya tidak direkomendasikan!

Ini menghadirkan masalah yang dihadapi banyak pengembang Solana, yang menerapkan logika seperti Peta ke dalam program mereka. Mari kita lihat beberapa cara bagaimana kita akan mengatasi masalah ini,

Menghasilkan PDA

',4),h=s("PDA adalah singkatan dari "),A={href:"https://solanacookbook.com/references/accounts.html#program-derived-address",target:"_blank",rel:"noopener noreferrer"},P=s("Program Derived Address"),B=s(", dan secara singkat merupakan alamat - alamat yang "),I=n("strong",null,"diperoleh",-1),S=s(" dari sekumpulan benih, dan id program (atau "),x=n("em",null,"alamat",-1),E=s(")."),v=s("Hal unik tentang PDA adalah, alamat ini "),M=n("strong",null,"tidak",-1),C=s(" terkait dengan kunci pribadi apa pun. Ini karena alamat ini tidak terletak pada kurva ED25519. Oleh karena itu, "),R=n("strong",null,"hanya",-1),T=s(" program dari mana "),D=n("em",null,"alamat",-1),O=s(" ini diturunkan yang dapat menandatangani instruksi dengan kunci tersebut, dengan menyediakan benih juga. Pelajari lebih lanjut tentang ini "),K={href:"https://solanacookbook.com/references/programs.html#create-a-program-derived-address",target:"_blank",rel:"noopener noreferrer"},z=s("di sini"),L=s("."),N=l("

Sekarang setelah mengetahui apa itu PDA, mari kita gunakan mereka untuk memetakan beberapa akun! Kita akan mengambil sebuah contoh dari sebuah program Blog untuk mendemonstrasikan bagaimana hal ini dapat diimplementasikan.

Di dalam program Blog ini, kita ingin agar setiap Pengguna untuk memiliki sebuah Blog. Blog ini dapat memiliki sejumlah Artikel. Itu berarti kita memetakan setiap pengguna ke sebuah blog, dan setiap artikel dipetakan ke blog tertentu.

Singkatnya, ada pemetaan 1:1 antara pengguna dan blognya, sedangkan pemetaan 1:N antara blog dan artikelnya.

Untuk pemetaan 1:1, kita ingin alamat blog diturunkan hanya dari penggunanya, yang memungkinkan kita mengambil blog berdasarkan otoritasnya (atau pengguna). Oleh karena itu, benih untuk blog akan terdiri dari kunci otoritas, dan mungkin awalan "blog", untuk bertindak sebagai pengenal tipe.

Untuk pemetaan 1:N, kita ingin setiap alamat artikel diturunkan tidak hanya dari blog yang terkait dengannya, tetapi juga pengidentifikasi lain, yang memungkinkan kita untuk membedakan antara N jumlah artikel di blog. Dalam contoh di bawah ini, setiap alamat artikel diturunkan dari kunci blog, sebuah slug untuk mengidentifikasi setiap postingan, dan awalan "post", untuk bertindak sebagai pengenal tipe.

Untuk kodenya dapat dilihat pada gambar di bawah ini,

",6),U=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("anchor_lang"),n("span",{class:"token punctuation"},"::"),s("prelude"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token operator"},"*"),n("span",{class:"token punctuation"},";"),s(` +import{_ as u,r as p,o as i,c as r,a as n,b as t,w as a,F as k,d as s,e as l}from"./app.2fbb9e96.js";const b={},m=n("h1",{id:"peta-akun",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#peta-akun","aria-hidden":"true"},"#"),s(" Peta Akun")],-1),d=n("p",null,[s("Peta ("),n("em",null,"Maps"),s(") adalah sebuah struktur data yang sering kita gunakan dalam pemrograman untuk mengaitkan sebuah "),n("strong",null,"kunci"),s(" dengan suatu "),n("strong",null,"nilai"),s(". Kunci dan nilai ini dapat bertipe data apa saja. Kunci ini berperan sebagai pengenal dari nilai yang diberikan yang sedang disimpan. Kunci dari peta ini memungkinkan kita untuk memasukkan, mengambil dan memperbarui nilai tersebut secara efisien.")],-1),_=s("Model dari akun Solana seperti yang kita ketahui memerlukan data program dan data posisi saat itu untuk dapat disimpan di akun yang berbeda. Akun tersebut memiliki alamat yang berkaitan dengan diri mereka. Hal ini sendiri sebenarnya merupakan sebuah peta! Pelajari lebih lanjut mengenai model akun solana "),y={href:"https://solanacookbook.com/core-concepts/accounts.html",target:"_blank",rel:"noopener noreferrer"},g=s("disini"),f=s("."),w=l('

Jadi, tentunya masuk akal untuk menyimpan nilai di akun yang berbeda, dengan alamat berperan sebagai kunci yang dibutuhkan untuk mengambil nilainya. Tetapi terdapat beberapa masalah yang muncul akibat metode ini, antara lain

  • Alamat - alamat yang disebutkan di atas kemungkinan besar bukanlah sebuah kunci yang ideal, yang dapat Anda ingat dan gunakan untuk mengambil nilai yang diperlukan.

  • Alamat - alamat yang disebutkan di atas merujuk ke kunci publik dari Pasangan Kunci yang berbeda, dimana setiap kunci publik (atau alamat) memiliki kunci pribadi yang berkaitan dengannya. Kunci pribadi ini akan diperlukan untuk menandatangani instruksi yang berbeda jika dan bila diperlukan, mengharuskan kita untuk menyimpan kunci pribadi di suatu tempat, yang tentunya tidak direkomendasikan!

Ini menghadirkan masalah yang dihadapi banyak pengembang Solana, yang menerapkan logika seperti Peta ke dalam program mereka. Mari kita lihat beberapa cara bagaimana kita akan mengatasi masalah ini,

Menghasilkan PDA

',4),h=s("PDA adalah singkatan dari "),A={href:"https://solanacookbook.com/references/accounts.html#program-derived-address",target:"_blank",rel:"noopener noreferrer"},P=s("Program Derived Address"),B=s(", dan secara singkat merupakan alamat - alamat yang "),I=n("strong",null,"diperoleh",-1),S=s(" dari sekumpulan benih, dan id program (atau "),x=n("em",null,"alamat",-1),E=s(")."),v=s("Hal unik tentang PDA adalah, alamat ini "),M=n("strong",null,"tidak",-1),C=s(" terkait dengan kunci pribadi apa pun. Ini karena alamat ini tidak terletak pada kurva ED25519. Oleh karena itu, "),R=n("strong",null,"hanya",-1),T=s(" program dari mana "),D=n("em",null,"alamat",-1),O=s(" ini diturunkan yang dapat menandatangani instruksi dengan kunci tersebut, dengan menyediakan benih juga. Pelajari lebih lanjut tentang ini "),K={href:"https://solanacookbook.com/references/programs.html#create-a-program-derived-address",target:"_blank",rel:"noopener noreferrer"},z=s("di sini"),L=s("."),N=l("

Sekarang setelah mengetahui apa itu PDA, mari kita gunakan mereka untuk memetakan beberapa akun! Kita akan mengambil sebuah contoh dari sebuah program Blog untuk mendemonstrasikan bagaimana hal ini dapat diimplementasikan.

Di dalam program Blog ini, kita ingin agar setiap Pengguna untuk memiliki sebuah Blog. Blog ini dapat memiliki sejumlah Artikel. Itu berarti kita memetakan setiap pengguna ke sebuah blog, dan setiap artikel dipetakan ke blog tertentu.

Singkatnya, ada pemetaan 1:1 antara pengguna dan blognya, sedangkan pemetaan 1:N antara blog dan artikelnya.

Untuk pemetaan 1:1, kita ingin alamat blog diturunkan hanya dari penggunanya, yang memungkinkan kita mengambil blog berdasarkan otoritasnya (atau pengguna). Oleh karena itu, benih untuk blog akan terdiri dari kunci otoritas, dan mungkin awalan "blog", untuk bertindak sebagai pengenal tipe.

Untuk pemetaan 1:N, kita ingin setiap alamat artikel diturunkan tidak hanya dari blog yang terkait dengannya, tetapi juga pengidentifikasi lain, yang memungkinkan kita untuk membedakan antara N jumlah artikel di blog. Dalam contoh di bawah ini, setiap alamat artikel diturunkan dari kunci blog, sebuah slug untuk mengidentifikasi setiap postingan, dan awalan "post", untuk bertindak sebagai pengenal tipe.

Untuk kodenya dapat dilihat pada gambar di bawah ini,

",6),U=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("anchor_lang"),n("span",{class:"token punctuation"},"::"),s("prelude"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token operator"},"*"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token macro property"},"declare_id!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"2vD2HBhLnkcYcKxnxLjFYXokHdcsgJnyEXGnSpAX376e"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` diff --git a/docs/.vuepress/dist/assets/account-maps.html.c5508c2f.js b/docs/.vuepress/dist/assets/account-maps.html.45822ad6.js similarity index 99% rename from docs/.vuepress/dist/assets/account-maps.html.c5508c2f.js rename to docs/.vuepress/dist/assets/account-maps.html.45822ad6.js index 6f942189e..014726fba 100644 --- a/docs/.vuepress/dist/assets/account-maps.html.c5508c2f.js +++ b/docs/.vuepress/dist/assets/account-maps.html.45822ad6.js @@ -1,4 +1,4 @@ -import{_ as u,r as p,o as r,c as i,a as n,b as t,w as a,F as k,d as s,e as l}from"./app.cfdf84e7.js";const b={},m=n("h1",{id:"maps-de-comptes",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#maps-de-comptes","aria-hidden":"true"},"#"),s(" Maps de Comptes")],-1),d=n("p",null,[s("Les Maps sont des structures de donn\xE9es qui sont fr\xE9quemment utilis\xE9es en programmation pour associer une "),n("strong",null,"cl\xE9"),s(" \xE0 une "),n("strong",null,"valeur"),s(" quelconque. La cl\xE9 et la valeur peuvent \xEAtre de n'importe quel type. De plus, la cl\xE9 sert d'identifiant pour une valeur donn\xE9e qui est sauvegard\xE9e. Ensuite, selon la cl\xE9 donn\xE9e, elle nous permet d'ins\xE9rer, de r\xE9cup\xE9rer et de mettre \xE0 jour efficacement sa valeur.")],-1),_=s("Le mod\xE8le de compte Solana, comme nous le savons, exige que les donn\xE9es du programme et ses donn\xE9es d'\xE9tat correspondantes soient stock\xE9es dans des comptes diff\xE9rents. Ces comptes ont une adresse associ\xE9e. Ce qui, en soi, fait office de map ! D\xE9couvrez le mod\xE8le de compte de Solana "),f={href:"https://solanacookbook.com/core-concepts/accounts.html",target:"_blank",rel:"noopener noreferrer"},y=s("ici"),g=s("."),w=l('

Il serait donc logique de stocker vos valeurs dans des comptes distincts, dont l'adresse serait la cl\xE9 n\xE9cessaire pour r\xE9cup\xE9rer la valeur. Mais cela soul\xE8ve quelques probl\xE8mes, tels que :

  • Les adresses mentionn\xE9es ci-dessus ne seront tr\xE8s probablement pas des cl\xE9s id\xE9ales, dont vous pourriez vous souvenir et r\xE9cup\xE9rer la valeur requise.

  • Les adresses mentionn\xE9es ci-dessus font r\xE9f\xE9rence \xE0 des cl\xE9s publiques de diff\xE9rentes Paires de Cl\xE9s, o\xF9 chaque cl\xE9 publique (ou adresse) est associ\xE9e \xE0 une cl\xE9 priv\xE9e. Cette cl\xE9 priv\xE9e serait n\xE9cessaire pour signer diff\xE9rentes instructions si et quand cela est n\xE9cessaire, ce qui nous obligerait \xE0 stocker la cl\xE9 priv\xE9e quelque part, ce qui n'est absolument pas recommand\xE9 !

Cela pr\xE9sente un probl\xE8me auquel de nombreux d\xE9veloppeurs Solana sont confront\xE9s, \xE0 savoir l'impl\xE9mentation d'une logique de type Map dans leurs programmes. Voyons comment nous pourrions aborder ce probl\xE8me.

D\xE9rivation des PDAs

',4),h=s("PDA signifie "),A={href:"https://solanacookbook.com/references/accounts.html#program-derived-address",target:"_blank",rel:"noopener noreferrer"},P=s("Program Derived Address (Adresse D\xE9riv\xE9e du Programme)"),v=s(" et sont, en bref, des adresses "),B=n("strong",null,"d\xE9riv\xE9es",-1),I=s(" d'un ensemble de seeds et d'un identifiant de programme (ou "),S=n("em",null,"adresse",-1),x=s(")."),E=s("La particularit\xE9 des PDAs est que ces adresses ne sont "),M=n("strong",null,"pas",-1),q=s(" associ\xE9es \xE0 une cl\xE9 priv\xE9e. Cela est d\xFB au fait que ces adresses ne se trouvent pas sur la courbe ED25519. Par cons\xE9quent, "),C=n("strong",null,"seul",-1),R=s(" le programme, dont cette "),D=n("em",null,"adresse",-1),T=s(" a \xE9t\xE9 d\xE9riv\xE9e, peut signer une instruction avec la cl\xE9, pourvu que les seeds soient \xE9galement fournies. Plus d'informations \xE0 ce sujet "),z={href:"https://solanacookbook.com/references/programs.html#create-a-program-derived-address",target:"_blank",rel:"noopener noreferrer"},O=s("ici"),K=s("."),L=l("

Maintenant que nous avons une id\xE9e de ce que sont les PDAs, utilisons-les pour mapper quelques comptes ! Nous allons prendre l'exemple d'un programme de Blog pour montrer comment cela pourrait \xEAtre mis en \u0153uvre.

Dans ce programme de Blog, nous souhaitons que chaque Utilisateur ait un seul Blog. Ce blog peut avoir un nombre quelconque de "Posts". Cela signifie que nous mappons chaque utilisateur \xE0 un blog, et que chaque post est mapp\xE9 \xE0 un certain blog.

En bref, il existe une correspondance "1:1" entre un utilisateur et son blog, et une correspondance "1:N" entre un blog et ses articles.

Pour la correspondance 1:1, nous voudrions que l'adresse d'un blog soit d\xE9riv\xE9e uniquement de son utilisateur, ce qui nous permettrait de retrouver un blog, \xE9tant donn\xE9 son autorit\xE9 (ou utilisateur). Ainsi, les seeds d'un blog seraient constitu\xE9es de sa cl\xE9 d'autorit\xE9, et \xE9ventuellement d'un pr\xE9fixe "blog" pour servir d'identifiant de type.

Pour la correspondance 1:N, nous voudrions que l'adresse de chaque post soit d\xE9riv\xE9e non seulement du blog auquel il est associ\xE9, mais aussi d'un autre identifiant qui nous permet de faire la diff\xE9rence entre un nombre N de posts de blog. Dans l'exemple ci-dessous, l'adresse de chaque post est d\xE9riv\xE9e de la cl\xE9 du blog, d'un slug pour identifier chaque post, et d'un pr\xE9fixe "post" qui sert d'identifiant de type.

Le code est le suivant :

",6),N=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("anchor_lang"),n("span",{class:"token punctuation"},"::"),s("prelude"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token operator"},"*"),n("span",{class:"token punctuation"},";"),s(` +import{_ as u,r as p,o as r,c as i,a as n,b as t,w as a,F as k,d as s,e as l}from"./app.2fbb9e96.js";const b={},m=n("h1",{id:"maps-de-comptes",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#maps-de-comptes","aria-hidden":"true"},"#"),s(" Maps de Comptes")],-1),d=n("p",null,[s("Les Maps sont des structures de donn\xE9es qui sont fr\xE9quemment utilis\xE9es en programmation pour associer une "),n("strong",null,"cl\xE9"),s(" \xE0 une "),n("strong",null,"valeur"),s(" quelconque. La cl\xE9 et la valeur peuvent \xEAtre de n'importe quel type. De plus, la cl\xE9 sert d'identifiant pour une valeur donn\xE9e qui est sauvegard\xE9e. Ensuite, selon la cl\xE9 donn\xE9e, elle nous permet d'ins\xE9rer, de r\xE9cup\xE9rer et de mettre \xE0 jour efficacement sa valeur.")],-1),_=s("Le mod\xE8le de compte Solana, comme nous le savons, exige que les donn\xE9es du programme et ses donn\xE9es d'\xE9tat correspondantes soient stock\xE9es dans des comptes diff\xE9rents. Ces comptes ont une adresse associ\xE9e. Ce qui, en soi, fait office de map ! D\xE9couvrez le mod\xE8le de compte de Solana "),f={href:"https://solanacookbook.com/core-concepts/accounts.html",target:"_blank",rel:"noopener noreferrer"},y=s("ici"),g=s("."),w=l('

Il serait donc logique de stocker vos valeurs dans des comptes distincts, dont l'adresse serait la cl\xE9 n\xE9cessaire pour r\xE9cup\xE9rer la valeur. Mais cela soul\xE8ve quelques probl\xE8mes, tels que :

  • Les adresses mentionn\xE9es ci-dessus ne seront tr\xE8s probablement pas des cl\xE9s id\xE9ales, dont vous pourriez vous souvenir et r\xE9cup\xE9rer la valeur requise.

  • Les adresses mentionn\xE9es ci-dessus font r\xE9f\xE9rence \xE0 des cl\xE9s publiques de diff\xE9rentes Paires de Cl\xE9s, o\xF9 chaque cl\xE9 publique (ou adresse) est associ\xE9e \xE0 une cl\xE9 priv\xE9e. Cette cl\xE9 priv\xE9e serait n\xE9cessaire pour signer diff\xE9rentes instructions si et quand cela est n\xE9cessaire, ce qui nous obligerait \xE0 stocker la cl\xE9 priv\xE9e quelque part, ce qui n'est absolument pas recommand\xE9 !

Cela pr\xE9sente un probl\xE8me auquel de nombreux d\xE9veloppeurs Solana sont confront\xE9s, \xE0 savoir l'impl\xE9mentation d'une logique de type Map dans leurs programmes. Voyons comment nous pourrions aborder ce probl\xE8me.

D\xE9rivation des PDAs

',4),h=s("PDA signifie "),A={href:"https://solanacookbook.com/references/accounts.html#program-derived-address",target:"_blank",rel:"noopener noreferrer"},P=s("Program Derived Address (Adresse D\xE9riv\xE9e du Programme)"),v=s(" et sont, en bref, des adresses "),B=n("strong",null,"d\xE9riv\xE9es",-1),I=s(" d'un ensemble de seeds et d'un identifiant de programme (ou "),S=n("em",null,"adresse",-1),x=s(")."),E=s("La particularit\xE9 des PDAs est que ces adresses ne sont "),M=n("strong",null,"pas",-1),q=s(" associ\xE9es \xE0 une cl\xE9 priv\xE9e. Cela est d\xFB au fait que ces adresses ne se trouvent pas sur la courbe ED25519. Par cons\xE9quent, "),C=n("strong",null,"seul",-1),R=s(" le programme, dont cette "),D=n("em",null,"adresse",-1),T=s(" a \xE9t\xE9 d\xE9riv\xE9e, peut signer une instruction avec la cl\xE9, pourvu que les seeds soient \xE9galement fournies. Plus d'informations \xE0 ce sujet "),z={href:"https://solanacookbook.com/references/programs.html#create-a-program-derived-address",target:"_blank",rel:"noopener noreferrer"},O=s("ici"),K=s("."),L=l("

Maintenant que nous avons une id\xE9e de ce que sont les PDAs, utilisons-les pour mapper quelques comptes ! Nous allons prendre l'exemple d'un programme de Blog pour montrer comment cela pourrait \xEAtre mis en \u0153uvre.

Dans ce programme de Blog, nous souhaitons que chaque Utilisateur ait un seul Blog. Ce blog peut avoir un nombre quelconque de "Posts". Cela signifie que nous mappons chaque utilisateur \xE0 un blog, et que chaque post est mapp\xE9 \xE0 un certain blog.

En bref, il existe une correspondance "1:1" entre un utilisateur et son blog, et une correspondance "1:N" entre un blog et ses articles.

Pour la correspondance 1:1, nous voudrions que l'adresse d'un blog soit d\xE9riv\xE9e uniquement de son utilisateur, ce qui nous permettrait de retrouver un blog, \xE9tant donn\xE9 son autorit\xE9 (ou utilisateur). Ainsi, les seeds d'un blog seraient constitu\xE9es de sa cl\xE9 d'autorit\xE9, et \xE9ventuellement d'un pr\xE9fixe "blog" pour servir d'identifiant de type.

Pour la correspondance 1:N, nous voudrions que l'adresse de chaque post soit d\xE9riv\xE9e non seulement du blog auquel il est associ\xE9, mais aussi d'un autre identifiant qui nous permet de faire la diff\xE9rence entre un nombre N de posts de blog. Dans l'exemple ci-dessous, l'adresse de chaque post est d\xE9riv\xE9e de la cl\xE9 du blog, d'un slug pour identifier chaque post, et d'un pr\xE9fixe "post" qui sert d'identifiant de type.

Le code est le suivant :

",6),N=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("anchor_lang"),n("span",{class:"token punctuation"},"::"),s("prelude"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token operator"},"*"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token macro property"},"declare_id!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"2vD2HBhLnkcYcKxnxLjFYXokHdcsgJnyEXGnSpAX376e"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` diff --git a/docs/.vuepress/dist/assets/account-maps.html.3c23b24c.js b/docs/.vuepress/dist/assets/account-maps.html.5a5d3096.js similarity index 99% rename from docs/.vuepress/dist/assets/account-maps.html.3c23b24c.js rename to docs/.vuepress/dist/assets/account-maps.html.5a5d3096.js index aebb53c77..15fa1c1e5 100644 --- a/docs/.vuepress/dist/assets/account-maps.html.3c23b24c.js +++ b/docs/.vuepress/dist/assets/account-maps.html.5a5d3096.js @@ -1,4 +1,4 @@ -import{_ as u,r as p,o as r,c as i,a as n,b as t,w as a,F as k,d as s,e as l}from"./app.cfdf84e7.js";const b={},m=n("h1",{id:"como-usar-map-en-cuentas",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#como-usar-map-en-cuentas","aria-hidden":"true"},"#"),s(" C\xF3mo usar Map en cuentas")],-1),d=n("p",null,[s("Los mapas son estructuras de datos que usamos con frecuencia en la programaci\xF3n para asociar una "),n("strong",null,"clave"),s(" con un "),n("strong",null,"valor"),s(" de alg\xFAn tipo. La clave y el valor pueden ser de cualquier tipo arbitrario y la clave act\xFAa como un identificador para un valor dado que se est\xE1 guardando. Luego, dada su clave, nos permite insertar, recuperar y actualizar estos valores de manera eficiente.")],-1),_=s("El modelo de cuenta de Solana, como sabemos, requiere que los datos del programa y sus datos de estado relevantes se almacenen en diferentes cuentas. Estas cuentas tienen una direcci\xF3n asociada a ellas. \xA1Esto, en s\xED mismo, act\xFAa como un mapa! Obtenga m\xE1s informaci\xF3n sobre el modo de cuenta de Solana [aqu\xED] "),y={href:"https://solanacookbook.com/es/core-concepts/accounts.html",target:"_blank",rel:"noopener noreferrer"},f=s("AccountCookbook"),g=s("."),w=l('

Por lo tanto, tendr\xEDa sentido almacenar sus valores en cuentas separadas, siendo su direcci\xF3n la clave necesaria para recuperar el valor. Pero esto trae algunos problemas, tales como,

  • Las direcciones mencionadas anteriormente probablemente no sean las claves ideales porque son dif\xEDciles de recordar.

  • Las direcciones mencionadas anteriormente se refer\xEDan a claves p\xFAblicas de diferentes Pares de claves, donde cada clave p\xFAblica (o direcci\xF3n) tendr\xEDa asociada una clave privada. Se requerir\xEDa esta clave privada para firmar diferentes instrucciones cuando sea necesario, lo que requiere que almacenemos la clave privada en alg\xFAn lugar, \xA1lo cual definitivamente no se recomienda!

Esto presenta un problema al que se enfrentan muchos desarrolladores de Solana, que es implementar una l\xF3gica similar a Map en sus programas. Veamos un par de formas para solucionar este problema,

Derivando PDAs

',4),h=s("PDA significa "),A={href:"https://solanacookbook.com/references/es/accounts.html#program-derived-address",target:"_blank",rel:"noopener noreferrer"},P=s("Program Derived Address"),v=s(" o en espa\xF1ol, direcciones derivadas de programa, que de forma simple podemos decir que son cuentas "),B=n("strong",null,"derivadas",-1),I=s(" de un conjunto de semillas y un id de programa (o "),S=n("em",null,"direcci\xF3n",-1),E=s(")."),x=s("Lo \xFAnico de las PDA es que estas direcciones "),M=n("strong",null,"no",-1),C=s(" est\xE1n asociadas con ninguna clave privada. Esto se debe a que estas direcciones no se encuentran en la curva ED25519. Por lo tanto, "),R=n("strong",null,"solo",-1),T=s(" el programa, del cual se deriv\xF3 esta "),D=n("em",null,"direcci\xF3n",-1),O=s(", puede firmar una instrucci\xF3n con las semillas y el id del programa. Obtenga m\xE1s informaci\xF3n sobre esto "),z={href:"https://solanacookbook.com/references/es/programs.html#create-a-program-derived-address",target:"_blank",rel:"noopener noreferrer"},q=s("aqu\xED"),K=s("."),L=l("

Ahora que tenemos una idea de lo que son las PDA, \xA1utilic\xE9moslas para mapear algunas cuentas! Tomaremos un ejemplo de un programa Blog para demostrar c\xF3mo se implementar\xEDa.

En este programa de Blog, nos gustar\xEDa que cada 'Usuario' tuviera un solo 'Blog'. Este blog podr\xEDa tener cualquier n\xFAmero de 'Publicaciones'. Eso significar\xEDa que estamos asignando a cada usuario a un blog, y cada publicaci\xF3n est\xE1 asignada a un blog determinado.

En resumen, hay un mapeo 1:1 entre un usuario y su blog, mientras que un mapeo 1:N entre un blog y sus publicaciones.

Para el mapeo 1:1, nos gustar\xEDa que la direcci\xF3n de un blog se derive solo de su usuario, lo que nos permitir\xEDa recuperar un blog, dada su autoridad (o usuario). Por lo tanto, las semillas de un blog consistir\xEDan en su clave de autoridad y posiblemente un prefijo de "blog", para actuar como un identificador de tipo.

Para el mapeo 1:N, nos gustar\xEDa que la direcci\xF3n de cada publicaci\xF3n se derive no solo del blog con el que est\xE1 asociada, sino tambi\xE9n de otro identificador, lo que nos permite diferenciar entre N n\xFAmero de publicaciones en el blog. En el siguiente ejemplo, la direcci\xF3n de cada publicaci\xF3n se deriva de la clave del blog, un slug para identificar cada publicaci\xF3n y un prefijo de "publicaci\xF3n", para actuar como un identificador de tipo.

El c\xF3digo es como se muestra a continuaci\xF3n,

",6),N=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("anchor_lang"),n("span",{class:"token punctuation"},"::"),s("prelude"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token operator"},"*"),n("span",{class:"token punctuation"},";"),s(` +import{_ as u,r as p,o as r,c as i,a as n,b as t,w as a,F as k,d as s,e as l}from"./app.2fbb9e96.js";const b={},m=n("h1",{id:"como-usar-map-en-cuentas",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#como-usar-map-en-cuentas","aria-hidden":"true"},"#"),s(" C\xF3mo usar Map en cuentas")],-1),d=n("p",null,[s("Los mapas son estructuras de datos que usamos con frecuencia en la programaci\xF3n para asociar una "),n("strong",null,"clave"),s(" con un "),n("strong",null,"valor"),s(" de alg\xFAn tipo. La clave y el valor pueden ser de cualquier tipo arbitrario y la clave act\xFAa como un identificador para un valor dado que se est\xE1 guardando. Luego, dada su clave, nos permite insertar, recuperar y actualizar estos valores de manera eficiente.")],-1),_=s("El modelo de cuenta de Solana, como sabemos, requiere que los datos del programa y sus datos de estado relevantes se almacenen en diferentes cuentas. Estas cuentas tienen una direcci\xF3n asociada a ellas. \xA1Esto, en s\xED mismo, act\xFAa como un mapa! Obtenga m\xE1s informaci\xF3n sobre el modo de cuenta de Solana [aqu\xED] "),y={href:"https://solanacookbook.com/es/core-concepts/accounts.html",target:"_blank",rel:"noopener noreferrer"},f=s("AccountCookbook"),g=s("."),w=l('

Por lo tanto, tendr\xEDa sentido almacenar sus valores en cuentas separadas, siendo su direcci\xF3n la clave necesaria para recuperar el valor. Pero esto trae algunos problemas, tales como,

  • Las direcciones mencionadas anteriormente probablemente no sean las claves ideales porque son dif\xEDciles de recordar.

  • Las direcciones mencionadas anteriormente se refer\xEDan a claves p\xFAblicas de diferentes Pares de claves, donde cada clave p\xFAblica (o direcci\xF3n) tendr\xEDa asociada una clave privada. Se requerir\xEDa esta clave privada para firmar diferentes instrucciones cuando sea necesario, lo que requiere que almacenemos la clave privada en alg\xFAn lugar, \xA1lo cual definitivamente no se recomienda!

Esto presenta un problema al que se enfrentan muchos desarrolladores de Solana, que es implementar una l\xF3gica similar a Map en sus programas. Veamos un par de formas para solucionar este problema,

Derivando PDAs

',4),h=s("PDA significa "),A={href:"https://solanacookbook.com/references/es/accounts.html#program-derived-address",target:"_blank",rel:"noopener noreferrer"},P=s("Program Derived Address"),v=s(" o en espa\xF1ol, direcciones derivadas de programa, que de forma simple podemos decir que son cuentas "),B=n("strong",null,"derivadas",-1),I=s(" de un conjunto de semillas y un id de programa (o "),S=n("em",null,"direcci\xF3n",-1),E=s(")."),x=s("Lo \xFAnico de las PDA es que estas direcciones "),M=n("strong",null,"no",-1),C=s(" est\xE1n asociadas con ninguna clave privada. Esto se debe a que estas direcciones no se encuentran en la curva ED25519. Por lo tanto, "),R=n("strong",null,"solo",-1),T=s(" el programa, del cual se deriv\xF3 esta "),D=n("em",null,"direcci\xF3n",-1),O=s(", puede firmar una instrucci\xF3n con las semillas y el id del programa. Obtenga m\xE1s informaci\xF3n sobre esto "),z={href:"https://solanacookbook.com/references/es/programs.html#create-a-program-derived-address",target:"_blank",rel:"noopener noreferrer"},q=s("aqu\xED"),K=s("."),L=l("

Ahora que tenemos una idea de lo que son las PDA, \xA1utilic\xE9moslas para mapear algunas cuentas! Tomaremos un ejemplo de un programa Blog para demostrar c\xF3mo se implementar\xEDa.

En este programa de Blog, nos gustar\xEDa que cada 'Usuario' tuviera un solo 'Blog'. Este blog podr\xEDa tener cualquier n\xFAmero de 'Publicaciones'. Eso significar\xEDa que estamos asignando a cada usuario a un blog, y cada publicaci\xF3n est\xE1 asignada a un blog determinado.

En resumen, hay un mapeo 1:1 entre un usuario y su blog, mientras que un mapeo 1:N entre un blog y sus publicaciones.

Para el mapeo 1:1, nos gustar\xEDa que la direcci\xF3n de un blog se derive solo de su usuario, lo que nos permitir\xEDa recuperar un blog, dada su autoridad (o usuario). Por lo tanto, las semillas de un blog consistir\xEDan en su clave de autoridad y posiblemente un prefijo de "blog", para actuar como un identificador de tipo.

Para el mapeo 1:N, nos gustar\xEDa que la direcci\xF3n de cada publicaci\xF3n se derive no solo del blog con el que est\xE1 asociada, sino tambi\xE9n de otro identificador, lo que nos permite diferenciar entre N n\xFAmero de publicaciones en el blog. En el siguiente ejemplo, la direcci\xF3n de cada publicaci\xF3n se deriva de la clave del blog, un slug para identificar cada publicaci\xF3n y un prefijo de "publicaci\xF3n", para actuar como un identificador de tipo.

El c\xF3digo es como se muestra a continuaci\xF3n,

",6),N=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("anchor_lang"),n("span",{class:"token punctuation"},"::"),s("prelude"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token operator"},"*"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token macro property"},"declare_id!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"2vD2HBhLnkcYcKxnxLjFYXokHdcsgJnyEXGnSpAX376e"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` diff --git a/docs/.vuepress/dist/assets/account-maps.html.ba36ebf8.js b/docs/.vuepress/dist/assets/account-maps.html.981fa0ba.js similarity index 99% rename from docs/.vuepress/dist/assets/account-maps.html.ba36ebf8.js rename to docs/.vuepress/dist/assets/account-maps.html.981fa0ba.js index e101f5fd1..c7162f029 100644 --- a/docs/.vuepress/dist/assets/account-maps.html.ba36ebf8.js +++ b/docs/.vuepress/dist/assets/account-maps.html.981fa0ba.js @@ -1,4 +1,4 @@ -import{_ as u,r as p,o as r,c as i,a as n,b as t,w as a,F as k,d as s,e as l}from"./app.cfdf84e7.js";const b={},m=n("hr",null,null,-1),d=n("h1",{id:"account-maps",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#account-maps","aria-hidden":"true"},"#"),s(" Account Maps")],-1),_=n("p",null,[s("Map l\xE0 m\u1ED9t ki\u1EC3u c\u1EA5u tr\xFAc th\u01B0\u1EDDng d\xF9ng trong l\u1EADp tr\xECnh v\xE0 bao g\u1ED3m m\u1ED9t "),n("strong",null,"key"),s(" t\u01B0\u01A1ng \u1EE9ng v\u1EDBi m\u1ED9t "),n("strong",null,"value"),s(". C\u1EB7p key-value c\xF3 th\u1EC3 l\xE0 b\u1EA5t k\u1EF3 ki\u1EC3u d\u1EEF li\u1EC7u n\xE0o trong \u0111\xF3 key nh\u01B0 l\xE0 ch\xECa kho\xE1 \u0111\u1ECBnh danh d\u1EEF li\u1EC7u \u0111\u01B0\u1EE3c l\u01B0u trong value. Do \u0111\xF3, v\u1EDBi m\u1ED7i key, ch\u0169ng ta c\xF3 th\u1EC3 th\xEAm, xo\xE1, c\u1EADp nh\u1EADt d\u1EEF li\u1EC7u v\xE0o value m\u1ED9t c\xE1ch hi\u1EC7u qu\u1EA3.")],-1),y=s("M\xF4 h\xECnh Account trong Solana, nh\u01B0 \u0111\xE3 bi\u1EBFt, y\xEAu c\u1EA7u d\u1EEF li\u1EC7u c\u1EE7a Program v\xE0 c\xE1c tr\u1EA1ng th\xE1i c\u1EE7a n\xF3 ph\u1EA3i \u0111\u01B0\u1EE3c l\u01B0u \u1EDF nh\u1EEFng Account ri\xEAng bi\u1EC7t. Nh\u1EEFng Account n\xE0y c\xF3 m\u1ED9t \u0111\u1ECBa ch\u1EC9 \u0111\u1ECBnh danh t\u01B0\u01A1ng \u1EE9ng v\xE0 m\xF4 h\xECnh \u0111\xF3 r\u1EA5t gi\u1ED1ng v\u1EDBi map! T\xECm hi\u1EC3u th\xEAm v\u1EC1 m\xF4 h\xECnh Account trong Solana "),g={href:"https://solanacookbook.com/vi/core-concepts/accounts.html",target:"_blank",rel:"noopener noreferrer"},f=s("t\u1EA1i \u0111\xE2y"),w=s("."),h=l('

Nh\u01B0 v\u1EADy, d\u1EC5 hi\u1EC3u khi m\xE0 ta l\u01B0u values v\xE0o nh\u1EEFng Account t\xE1ch bi\u1EC7t v\xE0 d\xF9ng key \u0111\u1EC3 truy v\u1EA5n d\u1EEF li\u1EC7u trong values. Tuy nhi\xEAn, \u0111i\u1EC1u n\xE0y l\u1EA1i g\xE2y ra m\u1ED9t s\u1ED1 v\u1EA5n \u0111\u1EC1 nh\u01B0 l\xE0:

  • Nh\u1EEFng \u0111\u1ECBa ch\u1EC9 \u0111\u1EC1 c\u1EADp h\u1EA7u h\u1EBFt kh\xF4ng ph\u1EA3i l\xE0 m\u1ED9t keys l\xFD t\u01B0\u1EDFng, khi m\xE0 b\u1EA1n c\u1EA7n ph\u1EA3i ghi nh\u1EDB t\u1EA5t c\u1EA3 ch\xFAng \u0111\u1EC3 truy v\u1EA5n c\xE1c d\u1EEF li\u1EC7u t\u01B0\u01A1ng \u1EE9ng.

  • Nh\u1EEFng \u0111\u1ECBa ch\u1EC9 \u0111\u1EC1 c\u1EADp b\xEAn tr\xEAn \u0111\u01B0\u1EE3c tham chi\u1EBFu b\u1EB1ng kho\xE1 c\xF4ng khai c\u1EE7a nh\u1EEFng Keypairs (c\u1EB7p kho\xE1) kh\xE1c nhau, trong \u0111\xF3 kho\xE1 c\xF4ng khai b\u1EAFt bu\u1ED9c ph\u1EA3i c\xF3 kho\xE1 ri\xEAng t\u01B0 t\u01B0\u01A1ng \u1EE9ng. Kho\xE1 ri\xEAng t\u01B0 l\u1EA1i c\u1EA7n thi\u1EBFt \u0111\u1EC3 k\xFD c\xE1c ch\u1EC9 th\u1ECB v\xE0 l\u1EA1i b\u1EAFt bu\u1ED9c ch\xFAng ta ph\u1EA3i l\u01B0u \u1EDF m\u1ED9t n\u01A1i n\xE0o \u0111\xF3, \u0111i\u1EC1u m\xE0 th\u1EADt s\u1EF1 kh\xF4ng \u0111\u01B0\u1EE3c khuy\u1EBFn kh\xEDch trong th\u1EF1c ti\u1EC5n.

\u0110i\u1EBFu \u0111\xF3 d\u1EABn \u0111\u1EBFn r\u1EA5t nhi\u1EC1u v\u1EA5n \u0111\u1EC1 cho l\u1EADp tr\xECnh vi\xEAn mu\u1ED1n hi\u1EC7n th\u1EF1c Map tr\u1EF1c ti\u1EBFp v\xE0o Program tr\xEAn Solana. Gi\u1EDD h\xE3y quan s\xE1t m\u1ED9t v\xE0i c\xE1ch \u0111\u1EC3 gi\u1EA3i quy\u1EBFt v\u1EA5n \u0111\u1EC1 tr\xEAn.

T\xECm PDA

',4),A=s("PDA l\xE0 vi\u1EBFt t\u1EAFt "),P={href:"https://solanacookbook.com/references/accounts.html#program-derived-address",target:"_blank",rel:"noopener noreferrer"},v=s("Program Derived Address"),B=s(". Ch\xFAng l\xE0 nh\u1EEFng \u0111\u1ECBa ch\u1EC9 \u0111\u01B0\u1EE3c "),I=n("strong",null,"t\xECm th\u1EA5y",-1),S=s(" th\xF4ng qua t\u1EADp h\u1EE3p g\u1ED3m "),x=n("code",null,"seeds",-1),E=s(" v\xE0 "),M=n("code",null,"program_id",-1),C=s("."),R=s("\u0110i\u1EC3m \u0111\u1EB7c bi\u1EC7t c\u1EE7a PDA l\xE0 ch\xFAng "),T=n("strong",null,"kh\xF4ng",-1),D=s(" t\u1ED3n t\u1EA1i kho\xE1 ri\xEAng t\u01B0 t\u01B0\u01A1ng \u1EE9ng. \u0110i\u1EC1u n\xE0y b\u1EDFi v\xEC nh\u1EEFng \u0111\u1ECBa ch\u1EC9 n\xE0y kh\xF4ng n\u1EB1m tr\xEAn \u0111\u01B0\u1EDDng cong ED25519. V\xEC v\u1EADy, "),O=n("strong",null,"duy nh\u1EA5t",-1),K=s(" Program sinh ra PDA m\u1EDBi c\xF3 th\u1EC3 k\xFD l\xEAn c\xE1c ch\u1EC9 th\u1ECB cho c\xE1c PDA \u0111\xF3 b\u1EB1ng "),z=n("code",null,"seeds",-1),L=s(". T\xECm hi\u1EC3u th\xEAm "),N={href:"https://solanacookbook.com/references/programs.html#create-a-program-derived-address",target:"_blank",rel:"noopener noreferrer"},U=s("t\u1EA1i \u0111\xE2y"),G=s("."),W=l("

Sau khi \u0111\xE3 n\u1EAFm \u0111\u01B0\u1EE3c kh\xE1i ni\u1EC7m PDA, ch\xFAng ta c\xF3 th\u1EC3 s\u1EED d\u1EE5ng \u0111\u1EC3 t\u1EA1o ki\u1EC3u Map! H\xE3y l\u1EA5y v\xED d\u1EE5 m\u1ED9t Blog Program \u0111\u1EC3 hi\u1EC3u r\xF5 h\u01A1n c\xE1ch s\u1EED d\u1EE5ng.

Trong Blog Program, ch\xFAng ta mu\u1ED1n m\u1ED7i User s\u1EBD c\xF3 m\u1ED9t trang Blog. B\xE0i blog c\xF3 th\u1EC3 c\xF3 nhi\u1EC1u Posts. C\u1EE5 th\u1EC3 h\u01A1n, m\u1ED7i User s\u1EBD map \u0111\u1EBFn m\u1ED9t trang Blog. Nhi\u1EC1u b\xE0i Posts s\u1EBD \u0111\u01B0\u1EE3c map v\u1EC1 m\u1ED9t trang Blog.

User s\u1EBD c\xF3 k\u1EBFt n\u1ED1i 1:1 v\u1EDBi Blog trong khi Blog s\u1EBD c\xF3 k\u1EBFt n\u1ED1i 1:N v\u1EDBi Posts.

V\u1EDBi 1:1, ch\xFAng ta mong m\u1ED1n \u0111\u1ECBa ch\u1EC9 c\u1EE7a trang blog c\xF3 th\u1EC3 \u0111\u01B0\u1EE3c suy ra \u0111\u1ED9c nh\u1EA5t t\u1EEB \u0111\u1ECBa ch\u1EC9 ng\u01B0\u1EDDi d\xF9ng. C\u01A1 ch\u1EBF n\xE0y s\u1EBD gi\xFAp ch\xFAng ta l\u1EA5y \u0111\u01B0\u1EE3c d\u1EEF li\u1EC7u c\u1EE7a blog khi bi\u1EBFt \u0111\u01B0\u1EE3c \u0111\u1ECBa ch\u1EC9 ch\u1EED s\u1EDF h\u1EEFu blog \u0111\xF3. Hi\u1EC3n nhi\xEAn, seeds cho Blog ph\u1EA3i ch\u1EE9a \u0111\u1ECBa ch\u1EC9 ch\u1EE7 s\u1EDF h\u1EEFu, v\xE0 c\xF3 th\u1EC3 th\xEAm m\u1ED9t ti\u1EC1n t\u1ED1 nh\u01B0 "blog" \u0111\u1EC3 gi\xFAp ch\xFA th\xEDch.

V\u1EDBi 1:N, ch\xFAng ta mong mu\u1ED1n \u0111\u1ECBa ch\u1EC9 m\u1ED7i b\xE0i post s\u1EBD \u0111\u01B0\u1EE3c suy ra t\u1EEB kh\xF4ng ch\u1EC9 \u0111\u1ECBa ch\u1EC9 trang blog m\xE0 c\xF2n t\u1EEB c\xE1ch th\xE0nh t\u1ED1 kh\xE1c gi\xFAp t\u1EA1o ra N \u0111\u1ECBa ch\u1EC9 b\xE0i post trong m\u1ED9t trang blog. Trong v\xED d\u1EE5 b\xEAn d\u01B0\u1EDBi, m\u1ED7i \u0111\u1ECBa ch\u1EC9 b\xE0i post \u0111\u01B0\u1EE3c suy ra b\u1EB1ng \u0111\u1ECBa ch\u1EC9 trang blog, m\u1ED9t th\xE0nh t\u1ED1 ph\u1EE5 - slug - \u0111\u1EC3 \u0111\u1ECBnh danh cho m\u1ED7i b\xE0i post, v\xE0 ti\u1EC1n t\u1ED1 "post" \u0111\u1EC3 ch\xFA th\xEDch.

Code m\u1EABu \u0111\u01B0\u1EE3c vi\u1EBFt nh\u01B0 sau:

",6),Y=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("anchor_lang"),n("span",{class:"token punctuation"},"::"),s("prelude"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token operator"},"*"),n("span",{class:"token punctuation"},";"),s(` +import{_ as u,r as p,o as r,c as i,a as n,b as t,w as a,F as k,d as s,e as l}from"./app.2fbb9e96.js";const b={},m=n("hr",null,null,-1),d=n("h1",{id:"account-maps",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#account-maps","aria-hidden":"true"},"#"),s(" Account Maps")],-1),_=n("p",null,[s("Map l\xE0 m\u1ED9t ki\u1EC3u c\u1EA5u tr\xFAc th\u01B0\u1EDDng d\xF9ng trong l\u1EADp tr\xECnh v\xE0 bao g\u1ED3m m\u1ED9t "),n("strong",null,"key"),s(" t\u01B0\u01A1ng \u1EE9ng v\u1EDBi m\u1ED9t "),n("strong",null,"value"),s(". C\u1EB7p key-value c\xF3 th\u1EC3 l\xE0 b\u1EA5t k\u1EF3 ki\u1EC3u d\u1EEF li\u1EC7u n\xE0o trong \u0111\xF3 key nh\u01B0 l\xE0 ch\xECa kho\xE1 \u0111\u1ECBnh danh d\u1EEF li\u1EC7u \u0111\u01B0\u1EE3c l\u01B0u trong value. Do \u0111\xF3, v\u1EDBi m\u1ED7i key, ch\u0169ng ta c\xF3 th\u1EC3 th\xEAm, xo\xE1, c\u1EADp nh\u1EADt d\u1EEF li\u1EC7u v\xE0o value m\u1ED9t c\xE1ch hi\u1EC7u qu\u1EA3.")],-1),y=s("M\xF4 h\xECnh Account trong Solana, nh\u01B0 \u0111\xE3 bi\u1EBFt, y\xEAu c\u1EA7u d\u1EEF li\u1EC7u c\u1EE7a Program v\xE0 c\xE1c tr\u1EA1ng th\xE1i c\u1EE7a n\xF3 ph\u1EA3i \u0111\u01B0\u1EE3c l\u01B0u \u1EDF nh\u1EEFng Account ri\xEAng bi\u1EC7t. Nh\u1EEFng Account n\xE0y c\xF3 m\u1ED9t \u0111\u1ECBa ch\u1EC9 \u0111\u1ECBnh danh t\u01B0\u01A1ng \u1EE9ng v\xE0 m\xF4 h\xECnh \u0111\xF3 r\u1EA5t gi\u1ED1ng v\u1EDBi map! T\xECm hi\u1EC3u th\xEAm v\u1EC1 m\xF4 h\xECnh Account trong Solana "),g={href:"https://solanacookbook.com/vi/core-concepts/accounts.html",target:"_blank",rel:"noopener noreferrer"},f=s("t\u1EA1i \u0111\xE2y"),w=s("."),h=l('

Nh\u01B0 v\u1EADy, d\u1EC5 hi\u1EC3u khi m\xE0 ta l\u01B0u values v\xE0o nh\u1EEFng Account t\xE1ch bi\u1EC7t v\xE0 d\xF9ng key \u0111\u1EC3 truy v\u1EA5n d\u1EEF li\u1EC7u trong values. Tuy nhi\xEAn, \u0111i\u1EC1u n\xE0y l\u1EA1i g\xE2y ra m\u1ED9t s\u1ED1 v\u1EA5n \u0111\u1EC1 nh\u01B0 l\xE0:

  • Nh\u1EEFng \u0111\u1ECBa ch\u1EC9 \u0111\u1EC1 c\u1EADp h\u1EA7u h\u1EBFt kh\xF4ng ph\u1EA3i l\xE0 m\u1ED9t keys l\xFD t\u01B0\u1EDFng, khi m\xE0 b\u1EA1n c\u1EA7n ph\u1EA3i ghi nh\u1EDB t\u1EA5t c\u1EA3 ch\xFAng \u0111\u1EC3 truy v\u1EA5n c\xE1c d\u1EEF li\u1EC7u t\u01B0\u01A1ng \u1EE9ng.

  • Nh\u1EEFng \u0111\u1ECBa ch\u1EC9 \u0111\u1EC1 c\u1EADp b\xEAn tr\xEAn \u0111\u01B0\u1EE3c tham chi\u1EBFu b\u1EB1ng kho\xE1 c\xF4ng khai c\u1EE7a nh\u1EEFng Keypairs (c\u1EB7p kho\xE1) kh\xE1c nhau, trong \u0111\xF3 kho\xE1 c\xF4ng khai b\u1EAFt bu\u1ED9c ph\u1EA3i c\xF3 kho\xE1 ri\xEAng t\u01B0 t\u01B0\u01A1ng \u1EE9ng. Kho\xE1 ri\xEAng t\u01B0 l\u1EA1i c\u1EA7n thi\u1EBFt \u0111\u1EC3 k\xFD c\xE1c ch\u1EC9 th\u1ECB v\xE0 l\u1EA1i b\u1EAFt bu\u1ED9c ch\xFAng ta ph\u1EA3i l\u01B0u \u1EDF m\u1ED9t n\u01A1i n\xE0o \u0111\xF3, \u0111i\u1EC1u m\xE0 th\u1EADt s\u1EF1 kh\xF4ng \u0111\u01B0\u1EE3c khuy\u1EBFn kh\xEDch trong th\u1EF1c ti\u1EC5n.

\u0110i\u1EBFu \u0111\xF3 d\u1EABn \u0111\u1EBFn r\u1EA5t nhi\u1EC1u v\u1EA5n \u0111\u1EC1 cho l\u1EADp tr\xECnh vi\xEAn mu\u1ED1n hi\u1EC7n th\u1EF1c Map tr\u1EF1c ti\u1EBFp v\xE0o Program tr\xEAn Solana. Gi\u1EDD h\xE3y quan s\xE1t m\u1ED9t v\xE0i c\xE1ch \u0111\u1EC3 gi\u1EA3i quy\u1EBFt v\u1EA5n \u0111\u1EC1 tr\xEAn.

T\xECm PDA

',4),A=s("PDA l\xE0 vi\u1EBFt t\u1EAFt "),P={href:"https://solanacookbook.com/references/accounts.html#program-derived-address",target:"_blank",rel:"noopener noreferrer"},v=s("Program Derived Address"),B=s(". Ch\xFAng l\xE0 nh\u1EEFng \u0111\u1ECBa ch\u1EC9 \u0111\u01B0\u1EE3c "),I=n("strong",null,"t\xECm th\u1EA5y",-1),S=s(" th\xF4ng qua t\u1EADp h\u1EE3p g\u1ED3m "),x=n("code",null,"seeds",-1),E=s(" v\xE0 "),M=n("code",null,"program_id",-1),C=s("."),R=s("\u0110i\u1EC3m \u0111\u1EB7c bi\u1EC7t c\u1EE7a PDA l\xE0 ch\xFAng "),T=n("strong",null,"kh\xF4ng",-1),D=s(" t\u1ED3n t\u1EA1i kho\xE1 ri\xEAng t\u01B0 t\u01B0\u01A1ng \u1EE9ng. \u0110i\u1EC1u n\xE0y b\u1EDFi v\xEC nh\u1EEFng \u0111\u1ECBa ch\u1EC9 n\xE0y kh\xF4ng n\u1EB1m tr\xEAn \u0111\u01B0\u1EDDng cong ED25519. V\xEC v\u1EADy, "),O=n("strong",null,"duy nh\u1EA5t",-1),K=s(" Program sinh ra PDA m\u1EDBi c\xF3 th\u1EC3 k\xFD l\xEAn c\xE1c ch\u1EC9 th\u1ECB cho c\xE1c PDA \u0111\xF3 b\u1EB1ng "),z=n("code",null,"seeds",-1),L=s(". T\xECm hi\u1EC3u th\xEAm "),N={href:"https://solanacookbook.com/references/programs.html#create-a-program-derived-address",target:"_blank",rel:"noopener noreferrer"},U=s("t\u1EA1i \u0111\xE2y"),G=s("."),W=l("

Sau khi \u0111\xE3 n\u1EAFm \u0111\u01B0\u1EE3c kh\xE1i ni\u1EC7m PDA, ch\xFAng ta c\xF3 th\u1EC3 s\u1EED d\u1EE5ng \u0111\u1EC3 t\u1EA1o ki\u1EC3u Map! H\xE3y l\u1EA5y v\xED d\u1EE5 m\u1ED9t Blog Program \u0111\u1EC3 hi\u1EC3u r\xF5 h\u01A1n c\xE1ch s\u1EED d\u1EE5ng.

Trong Blog Program, ch\xFAng ta mu\u1ED1n m\u1ED7i User s\u1EBD c\xF3 m\u1ED9t trang Blog. B\xE0i blog c\xF3 th\u1EC3 c\xF3 nhi\u1EC1u Posts. C\u1EE5 th\u1EC3 h\u01A1n, m\u1ED7i User s\u1EBD map \u0111\u1EBFn m\u1ED9t trang Blog. Nhi\u1EC1u b\xE0i Posts s\u1EBD \u0111\u01B0\u1EE3c map v\u1EC1 m\u1ED9t trang Blog.

User s\u1EBD c\xF3 k\u1EBFt n\u1ED1i 1:1 v\u1EDBi Blog trong khi Blog s\u1EBD c\xF3 k\u1EBFt n\u1ED1i 1:N v\u1EDBi Posts.

V\u1EDBi 1:1, ch\xFAng ta mong m\u1ED1n \u0111\u1ECBa ch\u1EC9 c\u1EE7a trang blog c\xF3 th\u1EC3 \u0111\u01B0\u1EE3c suy ra \u0111\u1ED9c nh\u1EA5t t\u1EEB \u0111\u1ECBa ch\u1EC9 ng\u01B0\u1EDDi d\xF9ng. C\u01A1 ch\u1EBF n\xE0y s\u1EBD gi\xFAp ch\xFAng ta l\u1EA5y \u0111\u01B0\u1EE3c d\u1EEF li\u1EC7u c\u1EE7a blog khi bi\u1EBFt \u0111\u01B0\u1EE3c \u0111\u1ECBa ch\u1EC9 ch\u1EED s\u1EDF h\u1EEFu blog \u0111\xF3. Hi\u1EC3n nhi\xEAn, seeds cho Blog ph\u1EA3i ch\u1EE9a \u0111\u1ECBa ch\u1EC9 ch\u1EE7 s\u1EDF h\u1EEFu, v\xE0 c\xF3 th\u1EC3 th\xEAm m\u1ED9t ti\u1EC1n t\u1ED1 nh\u01B0 "blog" \u0111\u1EC3 gi\xFAp ch\xFA th\xEDch.

V\u1EDBi 1:N, ch\xFAng ta mong mu\u1ED1n \u0111\u1ECBa ch\u1EC9 m\u1ED7i b\xE0i post s\u1EBD \u0111\u01B0\u1EE3c suy ra t\u1EEB kh\xF4ng ch\u1EC9 \u0111\u1ECBa ch\u1EC9 trang blog m\xE0 c\xF2n t\u1EEB c\xE1ch th\xE0nh t\u1ED1 kh\xE1c gi\xFAp t\u1EA1o ra N \u0111\u1ECBa ch\u1EC9 b\xE0i post trong m\u1ED9t trang blog. Trong v\xED d\u1EE5 b\xEAn d\u01B0\u1EDBi, m\u1ED7i \u0111\u1ECBa ch\u1EC9 b\xE0i post \u0111\u01B0\u1EE3c suy ra b\u1EB1ng \u0111\u1ECBa ch\u1EC9 trang blog, m\u1ED9t th\xE0nh t\u1ED1 ph\u1EE5 - slug - \u0111\u1EC3 \u0111\u1ECBnh danh cho m\u1ED7i b\xE0i post, v\xE0 ti\u1EC1n t\u1ED1 "post" \u0111\u1EC3 ch\xFA th\xEDch.

Code m\u1EABu \u0111\u01B0\u1EE3c vi\u1EBFt nh\u01B0 sau:

",6),Y=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("anchor_lang"),n("span",{class:"token punctuation"},"::"),s("prelude"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token operator"},"*"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token macro property"},"declare_id!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"2vD2HBhLnkcYcKxnxLjFYXokHdcsgJnyEXGnSpAX376e"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` @@ -632,7 +632,7 @@ import{_ as u,r as p,o as r,c as i,a as n,b as t,w as a,F as k,d as s,e as l}fro `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Post account state: "'),n("span",{class:"token punctuation"},","),s(" postAccountState"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br")])],-1),J=l('

Map b\u1EB1ng Account \u0111\u01A1n

M\u1ED9t c\xE1ch kh\xE1c h\u01A1n \u0111\u1EC3n hi\u1EC7n th\u1EF1c map l\xE0 d\xF9ng c\u1EA5u tr\xFAc BTreeMap \u0111\u1EC3 l\u01B0u d\u1EEF li\u1EC7u l\xEAn m\u1ED9t Account duy nh\u1EA5t. \u0110\u1ECBa ch\u1EC9 c\u1EE7a Account n\xE0y c\xF3 th\u1EC3 l\xE0 PDA, ho\u1EB7c c\xF3 th\u1EC3 l\xE0 kho\xE1 c\xF4ng khai c\u1EE7a m\u1ED9t c\u1EB7p kho\xE1 \u0111\u01B0\u1EE3c sinh ra th\u1EE7 c\xF4ng.

Ph\u01B0\u01A1ng ph\xE1p n\xE0y th\u01B0\u1EDDng c\xF3 m\u1ED9t v\xE0i h\u1EA1n ch\u1EBF:

  • B\u1EA1n \u0111\u1EA7u ti\xEAn ph\u1EA3i kh\u1EDFi t\u1EA1o Account \u0111\u1EC3 l\u01B0u BTreeMap tr\u01B0\u1EDBc khi c\xF3 th\u1EC3 th\xEAm b\u1EA5t k\u1EF3 key-value n\xE0o v\xE0o b\xEAn trong n\xF3. Sau \u0111\xF3, b\u1EA1n s\u1EBD ph\u1EA3i l\u01B0u \u0111\u1ECBa ch\u1EC9 n\xE0y m\u1ED9t n\u01A1i n\xE0o \u0111\xF3 \u0111\u1EC3 d\xF9ng cho vi\u1EC7c c\u1EADp nh\u1EADt d\u1EEF li\u1EC7u v\u1EC1 sau.

  • C\xF3 nhi\u1EC1u gi\u1EDBi h\u1EA1n l\u01B0u tr\u1EEF cho m\u1ED9t Account nh\u01B0 l\xE0 dung l\u01B0\u1EE3ng t\u1ED1i \u0111a c\u1EE7a m\u1ED9t Account l\xE0 10 megabytes v\xE0 kh\xF4ng th\u1EC3 cho ph\xE9p BTreeMap c\xF3 th\u1EC3 l\u01B0u tr\u1EEF m\u1ED9t s\u1ED1 l\u01B0\u1EE3ng l\u1EDBn c\xE1c c\u1EB7p key-value.

Tuy v\xE0o t\xEDnh hu\u1ED1ng c\u1EE7a ri\xEAng \u1EE9ng d\u1EE5ng, b\u1EA1n c\xF3 th\u1EC3 c\xE2n nh\u1EAFc s\u1EED d\u1EE5ng n\xF3 nh\u01B0 sau:

',5),Z=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("std"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token namespace"},[s("collections"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"BTreeMap"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br")])],-1),J=l('

Map b\u1EB1ng Account \u0111\u01A1n

M\u1ED9t c\xE1ch kh\xE1c h\u01A1n \u0111\u1EC3n hi\u1EC7n th\u1EF1c map l\xE0 d\xF9ng c\u1EA5u tr\xFAc BTreeMap \u0111\u1EC3 l\u01B0u d\u1EEF li\u1EC7u l\xEAn m\u1ED9t Account duy nh\u1EA5t. \u0110\u1ECBa ch\u1EC9 c\u1EE7a Account n\xE0y c\xF3 th\u1EC3 l\xE0 PDA, ho\u1EB7c c\xF3 th\u1EC3 l\xE0 kho\xE1 c\xF4ng khai c\u1EE7a m\u1ED9t c\u1EB7p kho\xE1 \u0111\u01B0\u1EE3c sinh ra th\u1EE7 c\xF4ng.

Ph\u01B0\u01A1ng ph\xE1p n\xE0y th\u01B0\u1EDDng c\xF3 m\u1ED9t v\xE0i h\u1EA1n ch\u1EBF:

  • B\u01B0\u1EDBc \u0111\u1EA7u ti\xEAn ph\u1EA3i kh\u1EDFi t\u1EA1o Account \u0111\u1EC3 l\u01B0u BTreeMap tr\u01B0\u1EDBc khi c\xF3 th\u1EC3 th\xEAm b\u1EA5t k\u1EF3 key-value n\xE0o v\xE0o b\xEAn trong n\xF3. Sau \u0111\xF3, b\u1EA1n s\u1EBD ph\u1EA3i l\u01B0u \u0111\u1ECBa ch\u1EC9 n\xE0y m\u1ED9t n\u01A1i n\xE0o \u0111\xF3 \u0111\u1EC3 d\xF9ng cho vi\u1EC7c c\u1EADp nh\u1EADt d\u1EEF li\u1EC7u v\u1EC1 sau.

  • C\xF3 nhi\u1EC1u gi\u1EDBi h\u1EA1n l\u01B0u tr\u1EEF cho m\u1ED9t Account nh\u01B0 l\xE0 dung l\u01B0\u1EE3ng t\u1ED1i \u0111a c\u1EE7a m\u1ED9t Account l\xE0 10 megabytes v\xE0 kh\xF4ng th\u1EC3 cho ph\xE9p BTreeMap c\xF3 th\u1EC3 l\u01B0u tr\u1EEF m\u1ED9t s\u1ED1 l\u01B0\u1EE3ng l\u1EDBn c\xE1c c\u1EB7p key-value.

Tuy v\xE0o t\xEDnh hu\u1ED1ng c\u1EE7a ri\xEAng \u1EE9ng d\u1EE5ng, b\u1EA1n c\xF3 th\u1EC3 c\xE2n nh\u1EAFc s\u1EED d\u1EE5ng n\xF3 nh\u01B0 sau:

',5),Z=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("std"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token namespace"},[s("collections"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"BTreeMap"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("thiserror"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"Error"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("borsh"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"BorshSerialize"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"BorshDeserialize"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("num_traits"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"FromPrimitive"),n("span",{class:"token punctuation"},";"),s(` diff --git a/docs/.vuepress/dist/assets/account-maps.html.eacf2c55.js b/docs/.vuepress/dist/assets/account-maps.html.adbab433.js similarity index 99% rename from docs/.vuepress/dist/assets/account-maps.html.eacf2c55.js rename to docs/.vuepress/dist/assets/account-maps.html.adbab433.js index 6f0ef1909..4b71dda98 100644 --- a/docs/.vuepress/dist/assets/account-maps.html.eacf2c55.js +++ b/docs/.vuepress/dist/assets/account-maps.html.adbab433.js @@ -1,4 +1,4 @@ -import{_ as u,r as p,o as r,c as i,a as n,b as t,w as a,F as k,d as s,e as l}from"./app.cfdf84e7.js";const b={},m=n("h1",{id:"account-maps",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#account-maps","aria-hidden":"true"},"#"),s(" Account Maps")],-1),d=n("p",null,[s("Map\uB4E4\uC740 \uC6B0\uB9AC\uAC00 \uD504\uB85C\uADF8\uB798\uBC0D\uC5D0\uC11C "),n("strong",null,"key"),s("\uB97C \uC5B4\uB5A4 \uC885\uB958\uC758 "),n("strong",null,"value"),s("\uC640 \uC5F0\uAD00\uC2DC\uD0A4\uAE30 \uC704\uD574 \uC790\uC8FC \uC0AC\uC6A9\uD558\uB294 \uB370\uC774\uD130 \uAD6C\uC870\uB4E4\uC785\uB2C8\uB2E4. key\uC640 value\uB294 \uC784\uC758\uC758 \uD0C0\uC785\uC774 \uB420 \uC218 \uC788\uACE0 key\uB294 \uC800\uC7A5\uD560 value\uB97C \uC704\uD55C \uC2DD\uBCC4\uC790\uB85C\uC368 \uAE30\uB2A5\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uADF8\uB7EC\uBA74, \uC8FC\uC5B4\uC9C4 key\uB4E4\uC740 \uC6B0\uB9AC\uAC00 \uC774 value\uB4E4\uC744 \uD6A8\uC728\uC801\uC73C\uB85C insert, retrieve \uADF8\uB9AC\uACE0 update \uD560 \uC218 \uC788\uAC8C \uD574\uC90D\uB2C8\uB2E4.")],-1),_=s("\uC6B0\uB9AC\uAC00 \uC54C\uACE0 \uC788\uB4EF\uC774, Solana\uC758 Account \uBAA8\uB378\uC740 Program Data\uC640 \uC774\uAC83\uACFC \uAD00\uB828\uC788\uB294 \uB2E4\uB978 Account\uB4E4\uC5D0 \uC800\uC7A5\uB420 \uC0C1\uD0DC \uB370\uC774\uD130\uB97C \uC694\uAD6C\uD569\uB2C8\uB2E4. \uC774\uB7EC\uD55C Account\uB4E4\uC740 Address\uB97C \uAC16\uACE0 \uC788\uC2B5\uB2C8\uB2E4. \uC774\uAC83\uC740 \uC790\uCCB4\uC801\uC73C\uB85C Map\uC73C\uB85C \uB3D9\uC791\uD569\uB2C8\uB2E4. Solana\uC758 Account \uBAA8\uB378\uC5D0 \uB300\uD55C \uB354 \uC790\uC138\uD55C \uB0B4\uC6A9\uC740 "),y={href:"https://solanacookbook.com/core-concepts/accounts.html",target:"_blank",rel:"noopener noreferrer"},f=s("\uC5EC\uAE30"),g=s("\uC5D0\uC11C \uD655\uC778 \uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4."),w=l('

\uADF8\uB798\uC11C, \uC774\uC81C key\uAC00 \uB418\uB294 Account\uC758 address\uB97C \uAC00\uC9C0\uACE0 \uB098\uB204\uC5B4\uC9C4 Account\uB4E4\uC5D0 values\uB97C \uC800\uC7A5\uD558\uACE0, \uAC00\uC838\uC624\uB294 \uAC83\uC744 \uC774\uD574\uD560 \uAC83\uC785\uB2C8\uB2E4. \uADF8\uB7EC\uB098 \uC774\uAC83\uC740 \uB2E4\uC74C\uACFC \uAC19\uC740 \uBA87 \uAC00\uC9C0 \uC774\uC288\uB4E4\uC744 \uC57C\uAE30\uD569\uB2C8\uB2E4.

  • \uC704\uC5D0\uC11C \uC5B8\uAE09\uB41C address\uB4E4\uC740 \uC544\uB9C8\uB3C4 \uC774\uC0C1\uC801\uC778 keys\uAC00 \uB420 \uC218\uB294 \uC5C6\uC2B5\uB2C8\uB2E4. \uC774\uAC83\uB4E4\uC740 \uB2F9\uC2E0\uC774 \uAE30\uC5B5\uD560 \uC218 \uC5C6\uACE0 \uC6D0\uD558\uB294 \uAC12\uC744 \uAC00\uC838\uC62C \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.

\uB2E4\uB978 Keypairs\uC758 public key\uB4E4\uB85C \uC5B8\uAE09\uB41C Address\uB4E4\uC5D0\uC11C, \uAC01 public key (or address)\uB294 \uC5F0\uAD00\uB41C private key \uB610\uD55C \uAC16\uACE0 \uC788\uC2B5\uB2C8\uB2E4. \uC774 private key\uB294 \uD544\uC694\uD560\uB54C instruction\uB4E4\uC5D0 \uC11C\uBA85\uD558\uAE30 \uC704\uD574 \uC694\uAD6C\uB420 \uAC83\uC785\uB2C8\uB2E4. \uC774\uAC83\uC740 \uC6B0\uB9AC\uAC00 private key\uB97C \uC5B4\uB518\uAC00\uC5D0 \uC800\uC7A5\uD574\uC57C \uD558\uB294 \uAC83\uC744 \uC758\uBBF8\uD558\uBA70 \uC774\uAC83\uC740 \uC644\uC804\uD788 \uCD94\uCC9C\uB418\uC9C0 \uC54A\uB294 \uBC29\uC2DD\uC785\uB2C8\uB2E4.

\uC774\uAC83\uC740 Program\uB4E4\uC5D0 Map\uACFC \uAC19\uC740 \uB85C\uC9C1\uC744 \uAD6C\uD604\uD558\uB294 \uB370 \uBB38\uC81C\uAC00 \uC788\uACE0, \uB9CE\uC740 Solana \uAC1C\uBC1C\uC790\uB4E4\uC774 \uB2F9\uBA74\uD558\uACE0 \uC788\uC2B5\uB2C8\uB2E4. \uC6B0\uB9AC\uAC00 \uC774 \uBB38\uC81C\uB97C \uC5B4\uB5BB\uAC8C \uD560\uC9C0 \uBA87 \uAC00\uC9C0 \uBC29\uBC95\uC744 \uC0B4\uD3B4 \uBD04\uC2DC\uB2E4.

Deriving PDAs

',5),A=s("PDA\uB294 "),h={href:"https://solanacookbook.com/references/accounts.html#program-derived-address",target:"_blank",rel:"noopener noreferrer"},P=s("Program Derived Address"),B=s("\uB97C \uC758\uBBF8\uD558\uB294 \uC904\uC784\uB9D0\uC774\uACE0, seeds\uB4E4\uC758 \uC9D1\uD569\uC73C\uB85C\uBD80\uD130 "),I=n("strong",null,"\uBE44\uB86F\uB41C",-1),S=s(" Address\uB4E4\uC774\uBA70, Program id(or "),v=n("em",null,"address",-1),x=s(")\uC785\uB2C8\uB2E4."),E=s("PDA\uB4E4\uC5D0 \uAD00\uD574 \uC720\uB2C8\uD06C\uD55C \uAC83\uC740 \uC774\uB4E4 Address\uB4E4\uC740 \uC5B4\uB5A4 private key\uC640\uB3C4 \uC5F0\uAD00\uB418\uC5B4 \uC788\uC9C0 \uC54A\uB2E4\uB294 \uAC83\uC785\uB2C8\uB2E4. \uC774\uAC83\uC740 Address\uB4E4\uC774 ED25519 \uACE1\uC120\uC5D0 \uB193\uC5EC \uC788\uC9C0 \uC54A\uAE30 \uB54C\uBB38\uC785\uB2C8\uB2E4. \uC774\uB7F0 \uC774\uC720\uB85C, \uC624\uC9C1 \uC774 "),M=n("em",null,"address",-1),C=s(" \uB97C \uAD6C\uD55C program\uB9CC\uC774 key\uB97C \uAC00\uC9C0\uACE0 instruction\uC5D0 \uC11C\uBA85\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uC774 key \uB610\uD55C \uC81C\uACF5\uB41C seeds\uC785\uB2C8\uB2E4. \uB354 \uC790\uC138\uD55C \uB0B4\uC6A9\uC740 "),R={href:"https://solanacookbook.com/references/programs.html#create-a-program-derived-address",target:"_blank",rel:"noopener noreferrer"},T=s("\uC5EC\uAE30"),D=s("\uC5D0 \uC788\uC2B5\uB2C8\uB2E4."),O=l("

\uC6B0\uB9AC\uB294 \uC774\uC81C PDA\uB4E4\uC774 \uBB34\uC5C7\uC778\uC9C0 \uC54C\uC558\uC2B5\uB2C8\uB2E4. PDA\uB4E4\uC744 \uC0AC\uC6A9\uD574 \uBA87 \uAC00\uC9C0 Account\uB4E4\uC744 \uB9F5\uD551 \uD574\uBD05\uC2DC\uB2E4. \uC6B0\uB9AC\uB294 \uC5B4\uB5BB\uAC8C \uAD6C\uD604\uB418\uB294\uC9C0 \uC124\uBA85\uD558\uAE30 \uC704\uD574 Blog Program\uC5D0 \uB300\uD55C \uD55C \uC608\uC81C\uB97C \uC0B4\uD3B4\uBCFC \uAC83\uC785\uB2C8\uB2E4.

\uC774 Blog Program\uC5D0\uC11C \uC6B0\uB9AC\uB294 \uAC01 User\uAC00 \uD558\uB098\uC758 Blog\uB97C \uAC16\uB3C4\uB85D \uD558\uACE0 \uC2F6\uC2B5\uB2C8\uB2E4. \uC774 blog\uB294 \uC5EC\uB7EC\uAC1C\uC758 Posts\uB97C \uAC00\uC9C8 \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uC774\uAC83\uC740 \uC6B0\uB9AC\uAC00 \uAC01 user\uB97C \uD558\uB098\uC758 blog\uC5D0 \uB9F5\uD551\uD558\uACE0 \uAC01 post\uB294 \uD2B9\uC815 blog\uC5D0 \uB9F5\uD551\uB41C\uB2E4\uB294 \uAC83\uC744 \uC758\uBBF8\uD569\uB2C8\uB2E4.

\uC694\uC57D\uD558\uBA74, user\uC640 \uADF8/\uADF8\uB140\uC758 blog \uC0AC\uC774\uC5D0\uB294 1:1 \uB9F5\uD551 \uAD00\uACC4\uAC00 \uC788\uACE0, \uD558\uB098\uC758 blog\uC640 \uC774\uAC83\uC758 posts \uC5D0\uB294 1:N \uB9F5\uD551 \uAD00\uACC4\uAC00 \uC788\uC2B5\uB2C8\uB2E4.

1:1 \uB9F5\uD551 \uAD00\uAC8C\uB97C \uC704\uD574\uC11C, \uC6B0\uB9AC\uB294 blog\uC758 address\uAC00 \uC624\uC9C1 blog\uC758 \uC0AC\uC6A9\uC790\uB85C\uBD80\uD130 \uB9CC\uB4E4\uC5B4\uC9C0\uAE38 \uC6D0\uD569\uB2C8\uB2E4. \uC774\uAC83\uC740 blog\uC758 authority (or user)\uAC00 \uC8FC\uC5B4\uC84C\uC744 \uB54C, \uD558\uB098\uC758 blog\uB97C \uAC00\uC838\uC624\uB294 \uAC83\uC744 \uAC00\uB2A5\uD558\uAC8C \uD569\uB2C8\uB2E4. \uC774\uB7F0 \uC774\uC720\uB85C, blog\uC758 seeds\uB294 blog\uC758 authority's key \uB85C \uAD6C\uC131\uB420 \uAC83\uC774\uACE0, \uD0C0\uC785 \uC2DD\uBCC4\uC790\uB85C\uC368 \uAE30\uB2A5\uD558\uAE30 \uC704\uD574 \uAC00\uB2A5\uD558\uBA74 **"blog"**\uB77C\uB294 prefix\uB97C \uAC00\uC9C0\uB3C4\uB85D \uAD6C\uC131\uB420 \uAC83\uC785\uB2C8\uB2E4.

1:N \uB9F5\uD551 \uAD00\uACC4\uB97C \uC704\uD574\uC11C, \uC6B0\uB9AC\uB294 \uAC01 post\uC758 address\uAC00 \uC624\uC9C1 \uC5F0\uAD00\uB41C blog\uB85C\uBD80\uD130\uB9CC \uB9CC\uB4E4\uC5B4\uC9C0\uAE38 \uC6D0\uD558\uC9C0 \uC54A\uACE0, \uB610 \uB2E4\uB978 \uC2DD\uBCC4\uC790\uB85C\uBD80\uD130 \uD568\uAED8 \uB9CC\uB4E4\uC5B4\uC9C0\uAE38 \uC6D0\uD569\uB2C8\uB2E4. \uC774 \uC2DD\uBCC4\uC790\uB294 \uC6B0\uB9AC\uAC00 blog\uC5D0\uC11C N \uAC1C\uC758 post\uB4E4\uC744 \uAD6C\uBCC4\uD560 \uC218 \uC788\uAC8C \uD574\uC90D\uB2C8\uB2E4. \uC544\uB798\uC758 \uC608\uC81C\uC5D0\uC11C \uAC01 post\uC758 address\uB294 \uAC01 post\uB97C \uC2DD\uBCC4\uD558\uAE30 \uC704\uD574 blog's key\uC640 \uD558\uB098\uC758 slug, \uADF8\uB9AC\uACE0 \uD0C0\uC785 \uC2DD\uBCC4\uC790\uB85C\uC368 \uAE30\uB2A5\uD558\uAE30 \uC704\uD55C **"post"**\uB77C\uB294 prefix\uB85C\uBD80\uD130 \uB9CC\uB4E4\uC5B4\uC9D1\uB2C8\uB2E4.

\uCF54\uB4DC\uB294 \uC544\uB798\uC640 \uAC19\uC2B5\uB2C8\uB2E4.

",6),K=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("anchor_lang"),n("span",{class:"token punctuation"},"::"),s("prelude"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token operator"},"*"),n("span",{class:"token punctuation"},";"),s(` +import{_ as u,r as p,o as r,c as i,a as n,b as t,w as a,F as k,d as s,e as l}from"./app.2fbb9e96.js";const b={},m=n("h1",{id:"account-maps",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#account-maps","aria-hidden":"true"},"#"),s(" Account Maps")],-1),d=n("p",null,[s("Map\uB4E4\uC740 \uC6B0\uB9AC\uAC00 \uD504\uB85C\uADF8\uB798\uBC0D\uC5D0\uC11C "),n("strong",null,"key"),s("\uB97C \uC5B4\uB5A4 \uC885\uB958\uC758 "),n("strong",null,"value"),s("\uC640 \uC5F0\uAD00\uC2DC\uD0A4\uAE30 \uC704\uD574 \uC790\uC8FC \uC0AC\uC6A9\uD558\uB294 \uB370\uC774\uD130 \uAD6C\uC870\uB4E4\uC785\uB2C8\uB2E4. key\uC640 value\uB294 \uC784\uC758\uC758 \uD0C0\uC785\uC774 \uB420 \uC218 \uC788\uACE0 key\uB294 \uC800\uC7A5\uD560 value\uB97C \uC704\uD55C \uC2DD\uBCC4\uC790\uB85C\uC368 \uAE30\uB2A5\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uADF8\uB7EC\uBA74, \uC8FC\uC5B4\uC9C4 key\uB4E4\uC740 \uC6B0\uB9AC\uAC00 \uC774 value\uB4E4\uC744 \uD6A8\uC728\uC801\uC73C\uB85C insert, retrieve \uADF8\uB9AC\uACE0 update \uD560 \uC218 \uC788\uAC8C \uD574\uC90D\uB2C8\uB2E4.")],-1),_=s("\uC6B0\uB9AC\uAC00 \uC54C\uACE0 \uC788\uB4EF\uC774, Solana\uC758 Account \uBAA8\uB378\uC740 Program Data\uC640 \uC774\uAC83\uACFC \uAD00\uB828\uC788\uB294 \uB2E4\uB978 Account\uB4E4\uC5D0 \uC800\uC7A5\uB420 \uC0C1\uD0DC \uB370\uC774\uD130\uB97C \uC694\uAD6C\uD569\uB2C8\uB2E4. \uC774\uB7EC\uD55C Account\uB4E4\uC740 Address\uB97C \uAC16\uACE0 \uC788\uC2B5\uB2C8\uB2E4. \uC774\uAC83\uC740 \uC790\uCCB4\uC801\uC73C\uB85C Map\uC73C\uB85C \uB3D9\uC791\uD569\uB2C8\uB2E4. Solana\uC758 Account \uBAA8\uB378\uC5D0 \uB300\uD55C \uB354 \uC790\uC138\uD55C \uB0B4\uC6A9\uC740 "),y={href:"https://solanacookbook.com/core-concepts/accounts.html",target:"_blank",rel:"noopener noreferrer"},f=s("\uC5EC\uAE30"),g=s("\uC5D0\uC11C \uD655\uC778 \uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4."),w=l('

\uADF8\uB798\uC11C, \uC774\uC81C key\uAC00 \uB418\uB294 Account\uC758 address\uB97C \uAC00\uC9C0\uACE0 \uB098\uB204\uC5B4\uC9C4 Account\uB4E4\uC5D0 values\uB97C \uC800\uC7A5\uD558\uACE0, \uAC00\uC838\uC624\uB294 \uAC83\uC744 \uC774\uD574\uD560 \uAC83\uC785\uB2C8\uB2E4. \uADF8\uB7EC\uB098 \uC774\uAC83\uC740 \uB2E4\uC74C\uACFC \uAC19\uC740 \uBA87 \uAC00\uC9C0 \uC774\uC288\uB4E4\uC744 \uC57C\uAE30\uD569\uB2C8\uB2E4.

  • \uC704\uC5D0\uC11C \uC5B8\uAE09\uB41C address\uB4E4\uC740 \uC544\uB9C8\uB3C4 \uC774\uC0C1\uC801\uC778 keys\uAC00 \uB420 \uC218\uB294 \uC5C6\uC2B5\uB2C8\uB2E4. \uC774\uAC83\uB4E4\uC740 \uB2F9\uC2E0\uC774 \uAE30\uC5B5\uD560 \uC218 \uC5C6\uACE0 \uC6D0\uD558\uB294 \uAC12\uC744 \uAC00\uC838\uC62C \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.

\uB2E4\uB978 Keypairs\uC758 public key\uB4E4\uB85C \uC5B8\uAE09\uB41C Address\uB4E4\uC5D0\uC11C, \uAC01 public key (or address)\uB294 \uC5F0\uAD00\uB41C private key \uB610\uD55C \uAC16\uACE0 \uC788\uC2B5\uB2C8\uB2E4. \uC774 private key\uB294 \uD544\uC694\uD560\uB54C instruction\uB4E4\uC5D0 \uC11C\uBA85\uD558\uAE30 \uC704\uD574 \uC694\uAD6C\uB420 \uAC83\uC785\uB2C8\uB2E4. \uC774\uAC83\uC740 \uC6B0\uB9AC\uAC00 private key\uB97C \uC5B4\uB518\uAC00\uC5D0 \uC800\uC7A5\uD574\uC57C \uD558\uB294 \uAC83\uC744 \uC758\uBBF8\uD558\uBA70 \uC774\uAC83\uC740 \uC644\uC804\uD788 \uCD94\uCC9C\uB418\uC9C0 \uC54A\uB294 \uBC29\uC2DD\uC785\uB2C8\uB2E4.

\uC774\uAC83\uC740 Program\uB4E4\uC5D0 Map\uACFC \uAC19\uC740 \uB85C\uC9C1\uC744 \uAD6C\uD604\uD558\uB294 \uB370 \uBB38\uC81C\uAC00 \uC788\uACE0, \uB9CE\uC740 Solana \uAC1C\uBC1C\uC790\uB4E4\uC774 \uB2F9\uBA74\uD558\uACE0 \uC788\uC2B5\uB2C8\uB2E4. \uC6B0\uB9AC\uAC00 \uC774 \uBB38\uC81C\uB97C \uC5B4\uB5BB\uAC8C \uD560\uC9C0 \uBA87 \uAC00\uC9C0 \uBC29\uBC95\uC744 \uC0B4\uD3B4 \uBD04\uC2DC\uB2E4.

Deriving PDAs

',5),A=s("PDA\uB294 "),h={href:"https://solanacookbook.com/references/accounts.html#program-derived-address",target:"_blank",rel:"noopener noreferrer"},P=s("Program Derived Address"),B=s("\uB97C \uC758\uBBF8\uD558\uB294 \uC904\uC784\uB9D0\uC774\uACE0, seeds\uB4E4\uC758 \uC9D1\uD569\uC73C\uB85C\uBD80\uD130 "),I=n("strong",null,"\uBE44\uB86F\uB41C",-1),S=s(" Address\uB4E4\uC774\uBA70, Program id(or "),v=n("em",null,"address",-1),x=s(")\uC785\uB2C8\uB2E4."),E=s("PDA\uB4E4\uC5D0 \uAD00\uD574 \uC720\uB2C8\uD06C\uD55C \uAC83\uC740 \uC774\uB4E4 Address\uB4E4\uC740 \uC5B4\uB5A4 private key\uC640\uB3C4 \uC5F0\uAD00\uB418\uC5B4 \uC788\uC9C0 \uC54A\uB2E4\uB294 \uAC83\uC785\uB2C8\uB2E4. \uC774\uAC83\uC740 Address\uB4E4\uC774 ED25519 \uACE1\uC120\uC5D0 \uB193\uC5EC \uC788\uC9C0 \uC54A\uAE30 \uB54C\uBB38\uC785\uB2C8\uB2E4. \uC774\uB7F0 \uC774\uC720\uB85C, \uC624\uC9C1 \uC774 "),M=n("em",null,"address",-1),C=s(" \uB97C \uAD6C\uD55C program\uB9CC\uC774 key\uB97C \uAC00\uC9C0\uACE0 instruction\uC5D0 \uC11C\uBA85\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uC774 key \uB610\uD55C \uC81C\uACF5\uB41C seeds\uC785\uB2C8\uB2E4. \uB354 \uC790\uC138\uD55C \uB0B4\uC6A9\uC740 "),R={href:"https://solanacookbook.com/references/programs.html#create-a-program-derived-address",target:"_blank",rel:"noopener noreferrer"},T=s("\uC5EC\uAE30"),D=s("\uC5D0 \uC788\uC2B5\uB2C8\uB2E4."),O=l("

\uC6B0\uB9AC\uB294 \uC774\uC81C PDA\uB4E4\uC774 \uBB34\uC5C7\uC778\uC9C0 \uC54C\uC558\uC2B5\uB2C8\uB2E4. PDA\uB4E4\uC744 \uC0AC\uC6A9\uD574 \uBA87 \uAC00\uC9C0 Account\uB4E4\uC744 \uB9F5\uD551 \uD574\uBD05\uC2DC\uB2E4. \uC6B0\uB9AC\uB294 \uC5B4\uB5BB\uAC8C \uAD6C\uD604\uB418\uB294\uC9C0 \uC124\uBA85\uD558\uAE30 \uC704\uD574 Blog Program\uC5D0 \uB300\uD55C \uD55C \uC608\uC81C\uB97C \uC0B4\uD3B4\uBCFC \uAC83\uC785\uB2C8\uB2E4.

\uC774 Blog Program\uC5D0\uC11C \uC6B0\uB9AC\uB294 \uAC01 User\uAC00 \uD558\uB098\uC758 Blog\uB97C \uAC16\uB3C4\uB85D \uD558\uACE0 \uC2F6\uC2B5\uB2C8\uB2E4. \uC774 blog\uB294 \uC5EC\uB7EC\uAC1C\uC758 Posts\uB97C \uAC00\uC9C8 \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uC774\uAC83\uC740 \uC6B0\uB9AC\uAC00 \uAC01 user\uB97C \uD558\uB098\uC758 blog\uC5D0 \uB9F5\uD551\uD558\uACE0 \uAC01 post\uB294 \uD2B9\uC815 blog\uC5D0 \uB9F5\uD551\uB41C\uB2E4\uB294 \uAC83\uC744 \uC758\uBBF8\uD569\uB2C8\uB2E4.

\uC694\uC57D\uD558\uBA74, user\uC640 \uADF8/\uADF8\uB140\uC758 blog \uC0AC\uC774\uC5D0\uB294 1:1 \uB9F5\uD551 \uAD00\uACC4\uAC00 \uC788\uACE0, \uD558\uB098\uC758 blog\uC640 \uC774\uAC83\uC758 posts \uC5D0\uB294 1:N \uB9F5\uD551 \uAD00\uACC4\uAC00 \uC788\uC2B5\uB2C8\uB2E4.

1:1 \uB9F5\uD551 \uAD00\uAC8C\uB97C \uC704\uD574\uC11C, \uC6B0\uB9AC\uB294 blog\uC758 address\uAC00 \uC624\uC9C1 blog\uC758 \uC0AC\uC6A9\uC790\uB85C\uBD80\uD130 \uB9CC\uB4E4\uC5B4\uC9C0\uAE38 \uC6D0\uD569\uB2C8\uB2E4. \uC774\uAC83\uC740 blog\uC758 authority (or user)\uAC00 \uC8FC\uC5B4\uC84C\uC744 \uB54C, \uD558\uB098\uC758 blog\uB97C \uAC00\uC838\uC624\uB294 \uAC83\uC744 \uAC00\uB2A5\uD558\uAC8C \uD569\uB2C8\uB2E4. \uC774\uB7F0 \uC774\uC720\uB85C, blog\uC758 seeds\uB294 blog\uC758 authority's key \uB85C \uAD6C\uC131\uB420 \uAC83\uC774\uACE0, \uD0C0\uC785 \uC2DD\uBCC4\uC790\uB85C\uC368 \uAE30\uB2A5\uD558\uAE30 \uC704\uD574 \uAC00\uB2A5\uD558\uBA74 **"blog"**\uB77C\uB294 prefix\uB97C \uAC00\uC9C0\uB3C4\uB85D \uAD6C\uC131\uB420 \uAC83\uC785\uB2C8\uB2E4.

1:N \uB9F5\uD551 \uAD00\uACC4\uB97C \uC704\uD574\uC11C, \uC6B0\uB9AC\uB294 \uAC01 post\uC758 address\uAC00 \uC624\uC9C1 \uC5F0\uAD00\uB41C blog\uB85C\uBD80\uD130\uB9CC \uB9CC\uB4E4\uC5B4\uC9C0\uAE38 \uC6D0\uD558\uC9C0 \uC54A\uACE0, \uB610 \uB2E4\uB978 \uC2DD\uBCC4\uC790\uB85C\uBD80\uD130 \uD568\uAED8 \uB9CC\uB4E4\uC5B4\uC9C0\uAE38 \uC6D0\uD569\uB2C8\uB2E4. \uC774 \uC2DD\uBCC4\uC790\uB294 \uC6B0\uB9AC\uAC00 blog\uC5D0\uC11C N \uAC1C\uC758 post\uB4E4\uC744 \uAD6C\uBCC4\uD560 \uC218 \uC788\uAC8C \uD574\uC90D\uB2C8\uB2E4. \uC544\uB798\uC758 \uC608\uC81C\uC5D0\uC11C \uAC01 post\uC758 address\uB294 \uAC01 post\uB97C \uC2DD\uBCC4\uD558\uAE30 \uC704\uD574 blog's key\uC640 \uD558\uB098\uC758 slug, \uADF8\uB9AC\uACE0 \uD0C0\uC785 \uC2DD\uBCC4\uC790\uB85C\uC368 \uAE30\uB2A5\uD558\uAE30 \uC704\uD55C **"post"**\uB77C\uB294 prefix\uB85C\uBD80\uD130 \uB9CC\uB4E4\uC5B4\uC9D1\uB2C8\uB2E4.

\uCF54\uB4DC\uB294 \uC544\uB798\uC640 \uAC19\uC2B5\uB2C8\uB2E4.

",6),K=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("anchor_lang"),n("span",{class:"token punctuation"},"::"),s("prelude"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token operator"},"*"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token macro property"},"declare_id!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"2vD2HBhLnkcYcKxnxLjFYXokHdcsgJnyEXGnSpAX376e"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` diff --git a/docs/.vuepress/dist/assets/account-maps.html.dfbc4d79.js b/docs/.vuepress/dist/assets/account-maps.html.e17d66e4.js similarity index 99% rename from docs/.vuepress/dist/assets/account-maps.html.dfbc4d79.js rename to docs/.vuepress/dist/assets/account-maps.html.e17d66e4.js index 543ff273a..6d1820c05 100644 --- a/docs/.vuepress/dist/assets/account-maps.html.dfbc4d79.js +++ b/docs/.vuepress/dist/assets/account-maps.html.e17d66e4.js @@ -1,4 +1,4 @@ -import{_ as u,r as p,o as r,c as i,a as n,b as t,w as a,F as k,d as s,e as l}from"./app.cfdf84e7.js";const b={},m=n("h1",{id:"account-maps",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#account-maps","aria-hidden":"true"},"#"),s(" Account Maps")],-1),d=n("p",null,[s("Maps are data structures we frequently use in programming to associate a "),n("strong",null,"key"),s(" with a "),n("strong",null,"value"),s(" of some kind. The key and value could be any arbitrary type and the key acts as an identifier for a given value that is being saved. It then, given its key, allows us to efficiently insert, retrieve and update these values efficiently.")],-1),_=s("Solana's Account model, as we know, requires program data and its relevant state data to be stored in different accounts. These accounts have an address associated with them. This, in itself, acts as a map! Learn more about Solana's Account mode "),y={href:"https://solanacookbook.com/core-concepts/accounts.html",target:"_blank",rel:"noopener noreferrer"},f=s("here"),g=s("."),w=l('

So, it would make sense to store your values in separate accounts, with its address being the key required to retrieve the value. But this brings up a few issues, such as,

  • The addresses mentioned above are most probably not going to be ideal keys, which you could remember and retrieve the required value.

  • The addresses mentioned above, referred to public keys of different Keypairs, where each public key (or address) would have a private key associated with it as well. This private key would be required to sign different instructions if and when needed, requiring us to store the private key somewhere, which is most definitely not recommended!

This presents a problem many Solana developers face, which is implementing a Map-like logic into their programs. Let's look at a couple of way how we would go about this problem,

Deriving PDAs

',4),h=s("PDA stands for "),A={href:"https://solanacookbook.com/references/accounts.html#program-derived-address",target:"_blank",rel:"noopener noreferrer"},P=s("Program Derived Address"),v=s(", and are in short, addresses "),B=n("strong",null,"derived",-1),I=s(" from a set of seeds, and a program id (or "),S=n("em",null,"address",-1),x=s(")."),E=s("The unique thing about PDAs is that, these addresses are "),M=n("strong",null,"not",-1),T=s(" associated with any private key. This is because these addresses do not lie on the ED25519 curve. Hence, "),C=n("strong",null,"only",-1),R=s(" the program, from which this "),D=n("em",null,"address",-1),O=s(" was derived, can sign an instruction with the key, provided the seeds as well. Learn more about this "),K={href:"https://solanacookbook.com/references/programs.html#create-a-program-derived-address",target:"_blank",rel:"noopener noreferrer"},z=s("here"),L=s("."),N=l("

Now that we have an idea about what PDAs are, let's use them to map some accounts! We'll take an example of a Blog program to demonstrate how this would be implemented.

In this Blog program, we would like each User to have a single Blog. This blog could have any number of Posts. That would mean that we are mapping each user to a blog, and each post is mapped to a certain blog.

In short, there is a 1:1 mapping between a user and his/her blog, whereas a 1:N mapping between a blog and its posts.

For the 1:1 mapping, we would want a blog's address to be derived only from its user, which would allow us to retrieve a blog, given its authority (or user). Hence, the seeds for a blog would consist of its authority's key, and possibly a prefix of "blog", to act as a type identifier.

For the 1:N mapping, we would want each post's address to be derived not only from the blog which it is associated with, but also another identifier, allowing us to differentiate between the N number of posts in the blog. In the example below, each post's address is derived from the blog's key, a slug to identify each post, and a prefix of "post", to act as a type identifier.

The code is as shown below,

",6),q=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("anchor_lang"),n("span",{class:"token punctuation"},"::"),s("prelude"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token operator"},"*"),n("span",{class:"token punctuation"},";"),s(` +import{_ as u,r as p,o as r,c as i,a as n,b as t,w as a,F as k,d as s,e as l}from"./app.2fbb9e96.js";const b={},m=n("h1",{id:"account-maps",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#account-maps","aria-hidden":"true"},"#"),s(" Account Maps")],-1),d=n("p",null,[s("Maps are data structures we frequently use in programming to associate a "),n("strong",null,"key"),s(" with a "),n("strong",null,"value"),s(" of some kind. The key and value could be any arbitrary type and the key acts as an identifier for a given value that is being saved. It then, given its key, allows us to efficiently insert, retrieve and update these values efficiently.")],-1),_=s("Solana's Account model, as we know, requires program data and its relevant state data to be stored in different accounts. These accounts have an address associated with them. This, in itself, acts as a map! Learn more about Solana's Account mode "),y={href:"https://solanacookbook.com/core-concepts/accounts.html",target:"_blank",rel:"noopener noreferrer"},f=s("here"),g=s("."),w=l('

So, it would make sense to store your values in separate accounts, with its address being the key required to retrieve the value. But this brings up a few issues, such as,

  • The addresses mentioned above are most probably not going to be ideal keys, which you could remember and retrieve the required value.

  • The addresses mentioned above, referred to public keys of different Keypairs, where each public key (or address) would have a private key associated with it as well. This private key would be required to sign different instructions if and when needed, requiring us to store the private key somewhere, which is most definitely not recommended!

This presents a problem many Solana developers face, which is implementing a Map-like logic into their programs. Let's look at a couple of way how we would go about this problem,

Deriving PDAs

',4),h=s("PDA stands for "),A={href:"https://solanacookbook.com/references/accounts.html#program-derived-address",target:"_blank",rel:"noopener noreferrer"},P=s("Program Derived Address"),v=s(", and are in short, addresses "),B=n("strong",null,"derived",-1),I=s(" from a set of seeds, and a program id (or "),S=n("em",null,"address",-1),x=s(")."),E=s("The unique thing about PDAs is that, these addresses are "),M=n("strong",null,"not",-1),T=s(" associated with any private key. This is because these addresses do not lie on the ED25519 curve. Hence, "),C=n("strong",null,"only",-1),R=s(" the program, from which this "),D=n("em",null,"address",-1),O=s(" was derived, can sign an instruction with the key, provided the seeds as well. Learn more about this "),K={href:"https://solanacookbook.com/references/programs.html#create-a-program-derived-address",target:"_blank",rel:"noopener noreferrer"},z=s("here"),L=s("."),N=l("

Now that we have an idea about what PDAs are, let's use them to map some accounts! We'll take an example of a Blog program to demonstrate how this would be implemented.

In this Blog program, we would like each User to have a single Blog. This blog could have any number of Posts. That would mean that we are mapping each user to a blog, and each post is mapped to a certain blog.

In short, there is a 1:1 mapping between a user and his/her blog, whereas a 1:N mapping between a blog and its posts.

For the 1:1 mapping, we would want a blog's address to be derived only from its user, which would allow us to retrieve a blog, given its authority (or user). Hence, the seeds for a blog would consist of its authority's key, and possibly a prefix of "blog", to act as a type identifier.

For the 1:N mapping, we would want each post's address to be derived not only from the blog which it is associated with, but also another identifier, allowing us to differentiate between the N number of posts in the blog. In the example below, each post's address is derived from the blog's key, a slug to identify each post, and a prefix of "post", to act as a type identifier.

The code is as shown below,

",6),q=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("anchor_lang"),n("span",{class:"token punctuation"},"::"),s("prelude"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token operator"},"*"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token macro property"},"declare_id!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"2vD2HBhLnkcYcKxnxLjFYXokHdcsgJnyEXGnSpAX376e"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` diff --git a/docs/.vuepress/dist/assets/accounts.html.a1cddf8a.js b/docs/.vuepress/dist/assets/accounts.html.0534eff3.js similarity index 98% rename from docs/.vuepress/dist/assets/accounts.html.a1cddf8a.js rename to docs/.vuepress/dist/assets/accounts.html.0534eff3.js index 3e4197a67..4d1d95f1c 100644 --- a/docs/.vuepress/dist/assets/accounts.html.a1cddf8a.js +++ b/docs/.vuepress/dist/assets/accounts.html.0534eff3.js @@ -1 +1 @@ -import{_ as s,r,o,c as a,a as e,b as i,F as c,d as n,e as d}from"./app.cfdf84e7.js";var l="/assets/account_example.5b70d95a.jpeg";const h={},u=e("h1",{id:"accounts",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#accounts","aria-hidden":"true"},"#"),n(" Accounts")],-1),m=e("p",null,"Accounts innerhalb von Solana werden zum Speichern des Zustands verwendet. Sie sind ein wesentlicher Baustein f\xFCr die Entwicklung auf Solana.",-1),p=e("h2",{id:"fakten",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#fakten","aria-hidden":"true"},"#"),n(" Fakten")],-1),_={class:"custom-container tip"},g=e("p",{class:"custom-container-title"},"Fact Sheet",-1),f=e("li",null,"Accounts werden genutzt um Daten zu speichern",-1),b=e("li",null,"Jedes Konto hat eine eindeutige (einmalig vorhandene) Adresse",-1),A=e("li",null,"Accounts haben eine maximale Gr\xF6\xDFe von 10MB (10 Mega Bytes)",-1),z=e("li",null,"PDA Accounts haben eine maximale Gr\xF6\xDFe von 10KB (10 Kilo Bytes)",-1),w=e("li",null,"PDA Accounts k\xF6nnen verwendet werden, um im Namen eines Programms zu signieren",-1),k=n("Accountgr\xF6\xDFen sind bei erstellung festgelegt, k\xF6nnen aber mit "),v={href:"https://solanacookbook.com/references/programs.html#how-to-change-account-size",target:"_blank",rel:"noopener noreferrer"},D=n("realloc"),S=n(" angepasst werden"),x=e("li",null,'F\xFCr Accountsdatenspeicher wird "Miete" gezahlt (in SOL)',-1),K=e("li",null,"Der Standard-Accounts-Besitzer ist das Systemprogramm",-1),M=d('

Deep Dive

Accounts Model

Auf Solana gibt es 3 Arten von Accounts:

  • Daten Accounts speichern Daten
  • Program Accounts speichern ausf\xFChrbare Programme
  • Native Accounts die native Programme auf Solana angeben (wie z.B. System, Stake, und Vote )

Es gibt 2 Arten von Daten Accounts:

  • Systemeigene Accounts
  • PDA-Accounts (Program Derived Address).

Jedes Konto hat eine Adresse (normalerweise einen \xF6ffentlichen Schl\xFCssel) und einen Besitzer (Adresse eines Programmkontos). Die vollst\xE4ndige Feldliste speichert ein Konto ist unten zu finden.

FeldBeschreibung
lamportsDie Anzahl der Lamports im Besitz dieses Kontos
ownerDer Programmbesitzer dieses Kontos
executableOb dieses Konto Anweisungen verarbeiten kann
dataDas Rohdaten-Byte-Array, das von diesem Konto gespeichert wird
rent_epochDie n\xE4chste Epoche, in der dieses Konto Miete schuldet

Es gibt ein paar wichtige Eigentumsregeln:

  • Nur der Besitzer eines Datenkontos kann seine Daten \xE4ndern und Lamports belasten
  • Jeder darf Lamports auf ein Datenkonto gutschreiben
  • Der Inhaber eines Kontos kann einen neuen Inhaber zuweisen, wenn die Daten des Kontos auf Null gesetzt werden

ProgrammAccounts speichern keinen Status.

Wenn Du beispielsweise ein Z\xE4hlerprogramm hast, mit dem Du einen Z\xE4hler erh\xF6hen kannst, musst Du zwei Accounts erstellen - ein Konto zum Speichern des Programmcodes und eines zum Speichern der Z\xE4hler.

Um zu verhindern, dass ein Konto gel\xF6scht wird, m\xFCssen Sie Miete zahlen.

Miete

Daten auf Accounts zu speichern kostet SOL - diese Zahlung wird Miete genannt. Wenn du eine Mindesteinzahlung von 2 Jahren Miete t\xE4tigst, wird dein Account von zuk\xFCnftiger Miete befreit. Du kannst vorausgezahlte Miete durch schlie\xDFen von Accounts zur\xFCck in deine Wallet bekommen.

Die Miete wird zu zwei verschiedenen Zeitpunkten gezahlt:

  1. Wenn es von einer Transaktion referenziert wird
  2. Einmal pro Epoche

Ein Teil der \xFCber Accounts eingezogenen Miete wird vernichtet, w\xE4hrend der Rest verteilt wird Accounts am Ende jedes Slots zu bestimmen.

Reicht das Konto nicht aus, um die Miete zu zahlen, wird das Konto aufgel\xF6st und die Daten ENTFERNT.

Wichtig ist auch zu beachten, dass NeuAccounts mietfrei sein m\xFCssen.

Andere Ressourcen

',22),B={href:"https://solana.wiki/zh-cn/docs/de/account-model/#account-storage",target:"_blank",rel:"noopener noreferrer"},E=n("Solana Accounts Model"),P={href:"https://docs.solana.com/developing/programming-model/accounts",target:"_blank",rel:"noopener noreferrer"},N=n("Official Documentation"),y={href:"https://twitter.com/pencilflip/status/1452402100470644739",target:"_blank",rel:"noopener noreferrer"},F=n("pencilflip account thread"),L=e("h3",{id:"credit",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#credit","aria-hidden":"true"},"#"),n(" Credit")],-1),T=n("Dieses Kernkonzept wird Pencilflip zugeschrieben. "),Z={href:"https://twitter.com/intent/user?screen_name=pencilflip",target:"_blank",rel:"noopener noreferrer"},R=n("Folgt ihm auf Twitter"),V=n(".");function W(I,J){const t=r("ExternalLinkIcon");return o(),a(c,null,[u,m,p,e("div",_,[g,e("ul",null,[f,b,A,z,w,e("li",null,[k,e("a",v,[D,i(t)]),S]),x,K])]),M,e("ul",null,[e("li",null,[e("a",B,[E,i(t)])]),e("li",null,[e("a",P,[N,i(t)])]),e("li",null,[e("a",y,[F,i(t)])])]),L,e("p",null,[T,e("a",Z,[R,i(t)]),V])],64)}var j=s(h,[["render",W]]);export{j as default}; +import{_ as s,r,o,c as a,a as e,b as i,F as c,d as n,e as d}from"./app.2fbb9e96.js";var l="/assets/account_example.5b70d95a.jpeg";const h={},u=e("h1",{id:"accounts",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#accounts","aria-hidden":"true"},"#"),n(" Accounts")],-1),m=e("p",null,"Accounts innerhalb von Solana werden zum Speichern des Zustands verwendet. Sie sind ein wesentlicher Baustein f\xFCr die Entwicklung auf Solana.",-1),p=e("h2",{id:"fakten",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#fakten","aria-hidden":"true"},"#"),n(" Fakten")],-1),_={class:"custom-container tip"},g=e("p",{class:"custom-container-title"},"Fact Sheet",-1),f=e("li",null,"Accounts werden genutzt um Daten zu speichern",-1),b=e("li",null,"Jedes Konto hat eine eindeutige (einmalig vorhandene) Adresse",-1),A=e("li",null,"Accounts haben eine maximale Gr\xF6\xDFe von 10MB (10 Mega Bytes)",-1),z=e("li",null,"PDA Accounts haben eine maximale Gr\xF6\xDFe von 10KB (10 Kilo Bytes)",-1),w=e("li",null,"PDA Accounts k\xF6nnen verwendet werden, um im Namen eines Programms zu signieren",-1),k=n("Accountgr\xF6\xDFen sind bei erstellung festgelegt, k\xF6nnen aber mit "),v={href:"https://solanacookbook.com/references/programs.html#how-to-change-account-size",target:"_blank",rel:"noopener noreferrer"},D=n("realloc"),S=n(" angepasst werden"),x=e("li",null,'F\xFCr Accountsdatenspeicher wird "Miete" gezahlt (in SOL)',-1),K=e("li",null,"Der Standard-Accounts-Besitzer ist das Systemprogramm",-1),M=d('

Deep Dive

Accounts Model

Auf Solana gibt es 3 Arten von Accounts:

  • Daten Accounts speichern Daten
  • Program Accounts speichern ausf\xFChrbare Programme
  • Native Accounts die native Programme auf Solana angeben (wie z.B. System, Stake, und Vote )

Es gibt 2 Arten von Daten Accounts:

  • Systemeigene Accounts
  • PDA-Accounts (Program Derived Address).

Jedes Konto hat eine Adresse (normalerweise einen \xF6ffentlichen Schl\xFCssel) und einen Besitzer (Adresse eines Programmkontos). Die vollst\xE4ndige Feldliste speichert ein Konto ist unten zu finden.

FeldBeschreibung
lamportsDie Anzahl der Lamports im Besitz dieses Kontos
ownerDer Programmbesitzer dieses Kontos
executableOb dieses Konto Anweisungen verarbeiten kann
dataDas Rohdaten-Byte-Array, das von diesem Konto gespeichert wird
rent_epochDie n\xE4chste Epoche, in der dieses Konto Miete schuldet

Es gibt ein paar wichtige Eigentumsregeln:

  • Nur der Besitzer eines Datenkontos kann seine Daten \xE4ndern und Lamports belasten
  • Jeder darf Lamports auf ein Datenkonto gutschreiben
  • Der Inhaber eines Kontos kann einen neuen Inhaber zuweisen, wenn die Daten des Kontos auf Null gesetzt werden

ProgrammAccounts speichern keinen Status.

Wenn Du beispielsweise ein Z\xE4hlerprogramm hast, mit dem Du einen Z\xE4hler erh\xF6hen kannst, musst Du zwei Accounts erstellen - ein Konto zum Speichern des Programmcodes und eines zum Speichern der Z\xE4hler.

Um zu verhindern, dass ein Konto gel\xF6scht wird, m\xFCssen Sie Miete zahlen.

Miete

Daten auf Accounts zu speichern kostet SOL - diese Zahlung wird Miete genannt. Wenn du eine Mindesteinzahlung von 2 Jahren Miete t\xE4tigst, wird dein Account von zuk\xFCnftiger Miete befreit. Du kannst vorausgezahlte Miete durch schlie\xDFen von Accounts zur\xFCck in deine Wallet bekommen.

Die Miete wird zu zwei verschiedenen Zeitpunkten gezahlt:

  1. Wenn es von einer Transaktion referenziert wird
  2. Einmal pro Epoche

Ein Teil der \xFCber Accounts eingezogenen Miete wird vernichtet, w\xE4hrend der Rest verteilt wird Accounts am Ende jedes Slots zu bestimmen.

Reicht das Konto nicht aus, um die Miete zu zahlen, wird das Konto aufgel\xF6st und die Daten ENTFERNT.

Wichtig ist auch zu beachten, dass NeuAccounts mietfrei sein m\xFCssen.

Andere Ressourcen

',22),B={href:"https://solana.wiki/zh-cn/docs/de/account-model/#account-storage",target:"_blank",rel:"noopener noreferrer"},E=n("Solana Accounts Model"),P={href:"https://docs.solana.com/developing/programming-model/accounts",target:"_blank",rel:"noopener noreferrer"},N=n("Official Documentation"),y={href:"https://twitter.com/pencilflip/status/1452402100470644739",target:"_blank",rel:"noopener noreferrer"},F=n("pencilflip account thread"),L=e("h3",{id:"credit",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#credit","aria-hidden":"true"},"#"),n(" Credit")],-1),T=n("Dieses Kernkonzept wird Pencilflip zugeschrieben. "),Z={href:"https://twitter.com/intent/user?screen_name=pencilflip",target:"_blank",rel:"noopener noreferrer"},R=n("Folgt ihm auf Twitter"),V=n(".");function W(I,J){const t=r("ExternalLinkIcon");return o(),a(c,null,[u,m,p,e("div",_,[g,e("ul",null,[f,b,A,z,w,e("li",null,[k,e("a",v,[D,i(t)]),S]),x,K])]),M,e("ul",null,[e("li",null,[e("a",B,[E,i(t)])]),e("li",null,[e("a",P,[N,i(t)])]),e("li",null,[e("a",y,[F,i(t)])])]),L,e("p",null,[T,e("a",Z,[R,i(t)]),V])],64)}var j=s(h,[["render",W]]);export{j as default}; diff --git a/docs/.vuepress/dist/assets/accounts.html.2308a218.js b/docs/.vuepress/dist/assets/accounts.html.080971b3.js similarity index 98% rename from docs/.vuepress/dist/assets/accounts.html.2308a218.js rename to docs/.vuepress/dist/assets/accounts.html.080971b3.js index 72f239219..dbc60e035 100644 --- a/docs/.vuepress/dist/assets/accounts.html.2308a218.js +++ b/docs/.vuepress/dist/assets/accounts.html.080971b3.js @@ -1 +1 @@ -import{_ as n,r as t,o as l,c as o,a,b as i,F as c,e as d,d as e}from"./app.cfdf84e7.js";var s="/assets/account_example.5b70d95a.jpeg";const u={},m=d('

Accounts (Account\u2019lar)

Solana i\xE7indeki account\u2019lar (hesaplar), durumu saklamak i\xE7in kullan\u0131l\u0131r. Account, Solana'da geli\u015Fme yapmak i\xE7in \xF6nemli bir yap\u0131 ta\u015F\u0131d\u0131r.

Facts (\xD6zet Bilgiler)

Bilgi tablosu

  • Account\u2019lar veri depolamak i\xE7in kullan\u0131l\u0131r.
  • Her account'\u0131n benzersiz bir adresi vard\u0131r.
  • Account\u2019lar\u0131n maksimum boyutu 10 MB (10 Mega Bayt)\u2019d\u0131r.
  • PDA account'lar\u0131n\u0131n maksimum boyutu 10 KB (10 Kilo Bayt)\u2019d\u0131r.
  • PDA account'lar\u0131, bir program ad\u0131na imzalamak i\xE7in kullan\u0131labilir.
  • Account boyutu olu\u015Fturma s\u0131ras\u0131nda sabitlenir, ancak realloc kullan\u0131larak ayarlanabilir.
  • Account veri depolamas\u0131 rent ile \xF6denir.
  • Varsay\u0131lan account sahibi Sistem Program\u0131d\u0131r.

Deep Dive (Derinlemesine Bak\u0131\u015F)

Account Model (Account Modeli)

Solana'da 3 \xE7e\u015Fit account vard\u0131r:

  • Veri account'lar\u0131, verileri depolar.
  • Program account'lar\u0131, executable programlar\u0131 depolar.
  • System, Stake ve Vote gibi yerel programlar\u0131 g\xF6steren yerel account'lar bulunur.

Veri account'lar\u0131n\u0131n 2 t\xFCr\xFC bulunur:

  • Sisteme ait account'lar
  • PDA (Program Derived Address/Programdan T\xFCretilmi\u015F Adres) account'lar\u0131

Her account'\u0131n bir adresi (genellikle bir public key) ve bir sahibi (bir program account'\u0131n\u0131n adresi) vard\u0131r. Bir account'\u0131n depolad\u0131\u011F\u0131 tam alan listesi a\u015Fa\u011F\u0131da bulunur.

AlanA\xE7\u0131klamas\u0131
lamportsHesaba ait "lamport" say\u0131s\u0131
ownerAccount sahibi
executableHesab\u0131n talimatlar\u0131 i\u015Fleyip i\u015Fleyemeyece\u011Fi bilgisi
dataAccount taraf\u0131ndan depolanan ham veri byte array
rent_epochBu account'\u0131n rent borcu olaca\u011F\u0131 bir sonraki epoch

Birka\xE7 \xF6nemli sahiplik kural\u0131 vard\u0131r:

  • Yaln\u0131zca bir data account'\u0131n\u0131n sahibi, lamports verilerini ve bor\xE7 bilgisini de\u011Fi\u015Ftirebilir.
  • Herhangi birinin bir data account'\u0131na Lamports kredisi vermesine izin verilir.
  • Hesab\u0131n verileri s\u0131f\u0131rlan\u0131rsa, bir account'\u0131n sahibi yeni bir sahip atayabilir.
  • Program account'lar\u0131 durumu saklamaz.

\xD6rne\u011Fin, bir sayac\u0131 art\u0131rman\u0131za izin veren bir saya\xE7 program\u0131n\u0131z varsa, biri program kodunu depolamak i\xE7in di\u011Feri de sayac\u0131 depolamak i\xE7in iki account olu\u015Fturman\u0131z gerekir.

Bir account'\u0131n silinmesini \xF6nlemek i\xE7in rent \xF6demeniz gerekir.

Rent

Hesaplarda veri depolaman\u0131n bak\u0131m\u0131 SOL gerektirir ve rent(kira) ile finanse edilir. Bir account'ta en az 2 y\u0131ll\u0131k rent \xF6demesine e\u015Fde\u011Fer bir bakiyeniz varsa, account'\u0131n\u0131z rent \xF6demekten muaf tutulacakt\u0131r. Hesab\u0131 kapatarak ve Lamport'lar\u0131 c\xFCzdan\u0131n\u0131za geri g\xF6ndererek rent\u2019i geri alabilirsiniz.

Rent iki farkl\u0131 zamanlamada \xF6denir:

  1. Bir i\u015Flem taraf\u0131ndan referans al\u0131nd\u0131\u011F\u0131nda
  2. Her bir epoch(d\xF6ng\xFC)\u2019da

Hesaplar taraf\u0131ndan toplanan rent\u2019in belirli bir b\xF6l\xFCm\xFC yok edilirken geri kalan\u0131 her slotun sonunda vote account'lar\u0131na da\u011F\u0131t\u0131l\u0131r.

Hesab\u0131n rent \xF6demesi i\xE7in yeterli olmamas\u0131 durumunda, account serbest b\u0131rak\u0131l\u0131r ve veriler silinir.

Yeni account'lar\u0131n rent \xF6demesinden muaf olmas\u0131 gerekti\u011Fini de belirtmek \xF6nemlidir.

Other Resources (Di\u011Fer Kaynaklar)

',26),p={href:"https://solana.wiki/zh-cn/docs/account-model/#account-storage",target:"_blank",rel:"noopener noreferrer"},h=e("Solana Hesap Modeli"),b={href:"https://docs.solana.com/developing/programming-model/accounts",target:"_blank",rel:"noopener noreferrer"},k=e("Resmi Dok\xFCmantasyon"),g={href:"https://twitter.com/pencilflip/status/1452402100470644739",target:"_blank",rel:"noopener noreferrer"},_=e("Pencilflip Account Threadi"),f=a("h3",{id:"referans",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#referans","aria-hidden":"true"},"#"),e(" Referans")],-1),y=e("Bu bilgiler Pencilflip taraf\u0131ndan yaz\u0131ld\u0131, kendisini "),v={href:"https://twitter.com/intent/user?screen_name=pencilflip",target:"_blank",rel:"noopener noreferrer"},z=e("Twitter"),A=e("\u2019dan takip edebilirsiniz.");function B(x,H){const r=t("ExternalLinkIcon");return l(),o(c,null,[m,a("ul",null,[a("li",null,[a("a",p,[h,i(r)])]),a("li",null,[a("a",b,[k,i(r)])]),a("li",null,[a("a",g,[_,i(r)])])]),f,a("p",null,[y,a("a",v,[z,i(r)]),A])],64)}var S=n(u,[["render",B]]);export{S as default}; +import{_ as n,r as t,o as l,c as o,a,b as i,F as c,e as d,d as e}from"./app.2fbb9e96.js";var s="/assets/account_example.5b70d95a.jpeg";const u={},m=d('

Accounts (Account\u2019lar)

Solana i\xE7indeki account\u2019lar (hesaplar), durumu saklamak i\xE7in kullan\u0131l\u0131r. Account, Solana'da geli\u015Fme yapmak i\xE7in \xF6nemli bir yap\u0131 ta\u015F\u0131d\u0131r.

Facts (\xD6zet Bilgiler)

Bilgi tablosu

  • Account\u2019lar veri depolamak i\xE7in kullan\u0131l\u0131r.
  • Her account'\u0131n benzersiz bir adresi vard\u0131r.
  • Account\u2019lar\u0131n maksimum boyutu 10 MB (10 Mega Bayt)\u2019d\u0131r.
  • PDA account'lar\u0131n\u0131n maksimum boyutu 10 KB (10 Kilo Bayt)\u2019d\u0131r.
  • PDA account'lar\u0131, bir program ad\u0131na imzalamak i\xE7in kullan\u0131labilir.
  • Account boyutu olu\u015Fturma s\u0131ras\u0131nda sabitlenir, ancak realloc kullan\u0131larak ayarlanabilir.
  • Account veri depolamas\u0131 rent ile \xF6denir.
  • Varsay\u0131lan account sahibi Sistem Program\u0131d\u0131r.

Deep Dive (Derinlemesine Bak\u0131\u015F)

Account Model (Account Modeli)

Solana'da 3 \xE7e\u015Fit account vard\u0131r:

  • Veri account'lar\u0131, verileri depolar.
  • Program account'lar\u0131, executable programlar\u0131 depolar.
  • System, Stake ve Vote gibi yerel programlar\u0131 g\xF6steren yerel account'lar bulunur.

Veri account'lar\u0131n\u0131n 2 t\xFCr\xFC bulunur:

  • Sisteme ait account'lar
  • PDA (Program Derived Address/Programdan T\xFCretilmi\u015F Adres) account'lar\u0131

Her account'\u0131n bir adresi (genellikle bir public key) ve bir sahibi (bir program account'\u0131n\u0131n adresi) vard\u0131r. Bir account'\u0131n depolad\u0131\u011F\u0131 tam alan listesi a\u015Fa\u011F\u0131da bulunur.

AlanA\xE7\u0131klamas\u0131
lamportsHesaba ait "lamport" say\u0131s\u0131
ownerAccount sahibi
executableHesab\u0131n talimatlar\u0131 i\u015Fleyip i\u015Fleyemeyece\u011Fi bilgisi
dataAccount taraf\u0131ndan depolanan ham veri byte array
rent_epochBu account'\u0131n rent borcu olaca\u011F\u0131 bir sonraki epoch

Birka\xE7 \xF6nemli sahiplik kural\u0131 vard\u0131r:

  • Yaln\u0131zca bir data account'\u0131n\u0131n sahibi, lamports verilerini ve bor\xE7 bilgisini de\u011Fi\u015Ftirebilir.
  • Herhangi birinin bir data account'\u0131na Lamports kredisi vermesine izin verilir.
  • Hesab\u0131n verileri s\u0131f\u0131rlan\u0131rsa, bir account'\u0131n sahibi yeni bir sahip atayabilir.
  • Program account'lar\u0131 durumu saklamaz.

\xD6rne\u011Fin, bir sayac\u0131 art\u0131rman\u0131za izin veren bir saya\xE7 program\u0131n\u0131z varsa, biri program kodunu depolamak i\xE7in di\u011Feri de sayac\u0131 depolamak i\xE7in iki account olu\u015Fturman\u0131z gerekir.

Bir account'\u0131n silinmesini \xF6nlemek i\xE7in rent \xF6demeniz gerekir.

Rent

Hesaplarda veri depolaman\u0131n bak\u0131m\u0131 SOL gerektirir ve rent(kira) ile finanse edilir. Bir account'ta en az 2 y\u0131ll\u0131k rent \xF6demesine e\u015Fde\u011Fer bir bakiyeniz varsa, account'\u0131n\u0131z rent \xF6demekten muaf tutulacakt\u0131r. Hesab\u0131 kapatarak ve Lamport'lar\u0131 c\xFCzdan\u0131n\u0131za geri g\xF6ndererek rent\u2019i geri alabilirsiniz.

Rent iki farkl\u0131 zamanlamada \xF6denir:

  1. Bir i\u015Flem taraf\u0131ndan referans al\u0131nd\u0131\u011F\u0131nda
  2. Her bir epoch(d\xF6ng\xFC)\u2019da

Hesaplar taraf\u0131ndan toplanan rent\u2019in belirli bir b\xF6l\xFCm\xFC yok edilirken geri kalan\u0131 her slotun sonunda vote account'lar\u0131na da\u011F\u0131t\u0131l\u0131r.

Hesab\u0131n rent \xF6demesi i\xE7in yeterli olmamas\u0131 durumunda, account serbest b\u0131rak\u0131l\u0131r ve veriler silinir.

Yeni account'lar\u0131n rent \xF6demesinden muaf olmas\u0131 gerekti\u011Fini de belirtmek \xF6nemlidir.

Other Resources (Di\u011Fer Kaynaklar)

',26),p={href:"https://solana.wiki/zh-cn/docs/account-model/#account-storage",target:"_blank",rel:"noopener noreferrer"},h=e("Solana Hesap Modeli"),b={href:"https://docs.solana.com/developing/programming-model/accounts",target:"_blank",rel:"noopener noreferrer"},k=e("Resmi Dok\xFCmantasyon"),g={href:"https://twitter.com/pencilflip/status/1452402100470644739",target:"_blank",rel:"noopener noreferrer"},_=e("Pencilflip Account Threadi"),f=a("h3",{id:"referans",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#referans","aria-hidden":"true"},"#"),e(" Referans")],-1),y=e("Bu bilgiler Pencilflip taraf\u0131ndan yaz\u0131ld\u0131, kendisini "),v={href:"https://twitter.com/intent/user?screen_name=pencilflip",target:"_blank",rel:"noopener noreferrer"},z=e("Twitter"),A=e("\u2019dan takip edebilirsiniz.");function B(x,H){const r=t("ExternalLinkIcon");return l(),o(c,null,[m,a("ul",null,[a("li",null,[a("a",p,[h,i(r)])]),a("li",null,[a("a",b,[k,i(r)])]),a("li",null,[a("a",g,[_,i(r)])])]),f,a("p",null,[y,a("a",v,[z,i(r)]),A])],64)}var S=n(u,[["render",B]]);export{S as default}; diff --git a/docs/.vuepress/dist/assets/accounts.html.41870cda.js b/docs/.vuepress/dist/assets/accounts.html.100d9cfb.js similarity index 96% rename from docs/.vuepress/dist/assets/accounts.html.41870cda.js rename to docs/.vuepress/dist/assets/accounts.html.100d9cfb.js index 9dd863e5b..b0aec98ae 100644 --- a/docs/.vuepress/dist/assets/accounts.html.41870cda.js +++ b/docs/.vuepress/dist/assets/accounts.html.100d9cfb.js @@ -1,4 +1,4 @@ -import{_ as k,r as p,o as b,c as m,a as n,b as t,w as a,F as d,d as s,e as r}from"./app.cfdf84e7.js";const y={},_=n("h1",{id:"accounts",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#accounts","aria-hidden":"true"},"#"),s(" Accounts")],-1),f=n("h2",{id:"how-to-create-a-system-account",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-create-a-system-account","aria-hidden":"true"},"#"),s(" How to create a system account")],-1),g=s("Create an account that the "),w={href:"https://docs.solana.com/developing/clients/javascript-reference#systemprogram",target:"_blank",rel:"noopener noreferrer"},h=s("System Program"),P=s(" owns. The Solana runtime will grant the owner of an account, access to write to its data or transfer lamports. When creating an account, we have to preallocate a fixed storage space in bytes ("),v=n("code",null,"space",-1),S=s(") and enough lamports to cover the rent. "),A={href:"https://docs.solana.com/developing/programming-model/accounts#rent",target:"_blank",rel:"noopener noreferrer"},x=s("Rent"),T=s(" is a cost incurred to keep accounts alive on Solana."),K=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` +import{_ as k,r as p,o as b,c as m,a as n,b as t,w as a,F as d,d as s,e as r}from"./app.2fbb9e96.js";const y={},_=n("h1",{id:"accounts",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#accounts","aria-hidden":"true"},"#"),s(" Accounts")],-1),f=n("h2",{id:"how-to-create-a-system-account",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-create-a-system-account","aria-hidden":"true"},"#"),s(" How to create a system account")],-1),g=s("Create an account that the "),w={href:"https://docs.solana.com/developing/clients/javascript-reference#systemprogram",target:"_blank",rel:"noopener noreferrer"},h=s("System Program"),P=s(" owns. The Solana runtime will grant the owner of an account, access to write to its data or transfer lamports. When creating an account, we have to preallocate a fixed storage space in bytes ("),v=n("code",null,"space",-1),S=s(") and enough lamports to cover the rent. "),A={href:"https://docs.solana.com/developing/programming-model/accounts#rent",target:"_blank",rel:"noopener noreferrer"},x=s("Rent"),K=s(" is a cost incurred to keep accounts alive on Solana."),T=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` SystemProgram`),n("span",{class:"token punctuation"},","),s(` Keypair`),n("span",{class:"token punctuation"},","),s(` Transaction`),n("span",{class:"token punctuation"},","),s(` @@ -44,7 +44,7 @@ import{_ as k,r as p,o as b,c as m,a as n,b as t,w as a,F as d,d as s,e as r}fro newAccountPubkey`),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br")])],-1),R=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" createAccountParams "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"{"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br")])],-1),C=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" createAccountParams "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"{"),s(` fromPubkey`),n("span",{class:"token operator"},":"),s(" fromPubkey"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},","),s(` newAccountPubkey`),n("span",{class:"token operator"},":"),s(" newAccountPubkey"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},","),s(` lamports`),n("span",{class:"token operator"},":"),s(" rentExemptionAmount"),n("span",{class:"token punctuation"},","),s(` @@ -60,7 +60,7 @@ import{_ as k,r as p,o as b,c as m,a as n,b as t,w as a,F as d,d as s,e as r}fro fromPubkey`),n("span",{class:"token punctuation"},","),s(` newAccountPubkey`),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br")])],-1),C=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br")])],-1),R=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_program"),n("span",{class:"token punctuation"},"::")]),s("system_instruction"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("commitment_config"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("native_token"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token constant"},"LAMPORTS_PER_SOL"),n("span",{class:"token punctuation"},";"),s(` @@ -767,7 +767,7 @@ import{_ as k,r as p,o as b,c as m,a as n,b as t,w as a,F as d,d as s,e as r}fro `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),n("span",{class:"token template-string"},[n("span",{class:"token template-punctuation string"},"`"),n("span",{class:"token string"},"txhash: "),n("span",{class:"token interpolation"},[n("span",{class:"token interpolation-punctuation punctuation"},"${"),n("span",{class:"token keyword"},"await"),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"sendTransaction"),n("span",{class:"token punctuation"},"("),s("tx"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token punctuation"},"["),s("feePayer"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),n("span",{class:"token interpolation-punctuation punctuation"},"}")]),n("span",{class:"token template-punctuation string"},"`")]),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br")])],-1),An=n("h2",{id:"how-to-get-program-accounts",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-get-program-accounts","aria-hidden":"true"},"#"),s(" How to get program accounts")],-1),xn=s("Return all accounts owned by a program. Refer to the "),Tn=s("guides section"),Kn=s(" for more information on "),Rn=n("code",null,"getProgramAccounts",-1),Cn=s(" and its configuration."),Ln=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" clusterApiUrl"),n("span",{class:"token punctuation"},","),s(" Connection"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br")])],-1),An=n("h2",{id:"how-to-get-program-accounts",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-get-program-accounts","aria-hidden":"true"},"#"),s(" How to get program accounts")],-1),xn=s("Return all accounts owned by a program. Refer to the "),Kn=s("guides section"),Tn=s(" for more information on "),Cn=n("code",null,"getProgramAccounts",-1),Rn=s(" and its configuration."),Ln=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" clusterApiUrl"),n("span",{class:"token punctuation"},","),s(" Connection"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token constant"},"MY_PROGRAM_ID"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),s(` @@ -1005,19 +1005,44 @@ source_data`),n("span",{class:"token punctuation"},"."),n("span",{class:"token f `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br")])],-1),Jn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[s("connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"get_balance"),n("span",{class:"token punctuation"},"("),n("span",{class:"token operator"},"&"),s("wallet"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),zn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("publickey "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),zn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair `),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("api "),n("span",{class:"token keyword"},"import"),s(` Client client `),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),s(` key_pair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` -public_key `),n("span",{class:"token operator"},"="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s(`public_key +public_key `),n("span",{class:"token operator"},"="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("client"),n("span",{class:"token punctuation"},"."),s("get_balance"),n("span",{class:"token punctuation"},"("),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br")])],-1),$n=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("client "),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),s(` key_pair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` -public_key `),n("span",{class:"token operator"},"="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s(`public_key +public_key `),n("span",{class:"token operator"},"="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` client`),n("span",{class:"token punctuation"},"."),s("get_balance"),n("span",{class:"token punctuation"},"("),s("public_key"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),Xn={class:"custom-container tip"},Zn=n("p",{class:"custom-container-title"},"TIP",-1),ns=s("If you want to get a token balance, you will need to know the address of token account. For more information, see "),ss=s("Token References");function as(ts,es){const l=p("ExternalLinkIcon"),e=p("SolanaCodeGroupItem"),o=p("SolanaCodeGroup"),c=p("CodeGroupItem"),u=p("CodeGroup"),i=p("RouterLink");return b(),m(d,null,[_,f,n("p",null,[g,n("a",w,[h,t(l)]),P,v,S,n("a",A,[x,t(l)]),T]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[K]),preview:a(()=>[R]),_:1}),t(e,{title:"Rust"},{default:a(()=>[C]),preview:a(()=>[L]),_:1})]),_:1}),I,n("p",null,[O,n("a",U,[E,t(l)]),F]),t(u,null,{default:a(()=>[t(c,{title:"TS",active:""},{default:a(()=>[M]),_:1}),t(c,{title:"Rust"},{default:a(()=>[B]),_:1}),t(c,{title:"CLI"},{default:a(()=>[G]),_:1})]),_:1}),N,W,q,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Y]),preview:a(()=>[H]),_:1}),t(e,{title:"Rust"},{default:a(()=>[V]),preview:a(()=>[D]),_:1})]),_:1}),j,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Q]),preview:a(()=>[J]),_:1}),t(e,{title:"Rust",active:""},{default:a(()=>[z]),preview:a(()=>[$]),_:1})]),_:1}),X,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Z]),preview:a(()=>[nn]),_:1})]),_:1}),sn,an,n("p",null,[n("a",tn,[en,t(l)]),on]),cn,t(u,null,{default:a(()=>[t(c,{title:"TS",active:""},{default:a(()=>[pn]),_:1}),t(c,{title:"Rust"},{default:a(()=>[ln]),_:1})]),_:1}),un,t(o,null,{default:a(()=>[t(e,{title:"rust",active:""},{default:a(()=>[rn]),preview:a(()=>[kn]),_:1})]),_:1}),bn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[mn]),preview:a(()=>[dn]),_:1})]),_:1}),yn,_n,fn,gn,t(o,null,{default:a(()=>[t(e,{title:"Rust",active:""},{default:a(()=>[wn]),preview:a(()=>[hn]),_:1})]),_:1}),Pn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[vn]),preview:a(()=>[Sn]),_:1})]),_:1}),An,n("p",null,[xn,t(i,{to:"/guides/get-program-accounts.html"},{default:a(()=>[Tn]),_:1}),Kn,Rn,Cn]),t(u,null,{default:a(()=>[t(c,{title:"TS",active:""},{default:a(()=>[Ln]),_:1}),t(c,{title:"Rust"},{default:a(()=>[In]),_:1}),t(c,{title:"CLI"},{default:a(()=>[On]),_:1})]),_:1}),Un,n("p",null,[En,n("a",Fn,[Mn,t(l)]),Bn]),Gn,t(o,null,{default:a(()=>[t(e,{title:"rust",active:""},{default:a(()=>[Nn]),preview:a(()=>[Wn]),_:1})]),_:1}),qn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Yn]),preview:a(()=>[Hn]),_:1})]),_:1}),Vn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Dn]),preview:a(()=>[jn]),_:1}),t(e,{title:"Rust"},{default:a(()=>[Qn]),preview:a(()=>[Jn]),_:1}),t(e,{title:"Python"},{default:a(()=>[zn]),preview:a(()=>[$n]),_:1})]),_:1}),n("div",Xn,[Zn,n("p",null,[ns,t(i,{to:"/references/token.html"},{default:a(()=>[ss]),_:1})])])],64)}var cs=k(y,[["render",as]]);export{cs as default}; +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),Xn=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token comment"},"// clang++ get_balance.cpp -o get_balance -std=c++17 -lssl -lcrypto -lsodium"),s(` + +`),n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + Connection `),n("span",{class:"token function"},"connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"auto"),s(" public_key "),n("span",{class:"token operator"},"="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"public_key = "'),s(),n("span",{class:"token operator"},"<<"),s(" public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"uint64_t"),s(" balance "),n("span",{class:"token operator"},"="),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"get_balance"),n("span",{class:"token punctuation"},"("),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"balance = "'),s(),n("span",{class:"token operator"},"<<"),s(" balance "),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"return"),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br")])],-1),Zn=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[s("Connection "),n("span",{class:"token function"},"connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token keyword"},"auto"),s(" public_key "),n("span",{class:"token operator"},"="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"uint64_t"),s(" balance "),n("span",{class:"token operator"},"="),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"get_balance"),n("span",{class:"token punctuation"},"("),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),ns={class:"custom-container tip"},ss=n("p",{class:"custom-container-title"},"TIP",-1),as=s("If you want to get a token balance, you will need to know the address of token account. For more information, see "),ts=s("Token References");function es(os,cs){const l=p("ExternalLinkIcon"),e=p("SolanaCodeGroupItem"),o=p("SolanaCodeGroup"),c=p("CodeGroupItem"),u=p("CodeGroup"),i=p("RouterLink");return b(),m(d,null,[_,f,n("p",null,[g,n("a",w,[h,t(l)]),P,v,S,n("a",A,[x,t(l)]),K]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[T]),preview:a(()=>[C]),_:1}),t(e,{title:"Rust"},{default:a(()=>[R]),preview:a(()=>[L]),_:1})]),_:1}),I,n("p",null,[O,n("a",U,[E,t(l)]),F]),t(u,null,{default:a(()=>[t(c,{title:"TS",active:""},{default:a(()=>[M]),_:1}),t(c,{title:"Rust"},{default:a(()=>[B]),_:1}),t(c,{title:"CLI"},{default:a(()=>[G]),_:1})]),_:1}),N,W,q,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Y]),preview:a(()=>[H]),_:1}),t(e,{title:"Rust"},{default:a(()=>[V]),preview:a(()=>[D]),_:1})]),_:1}),j,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Q]),preview:a(()=>[J]),_:1}),t(e,{title:"Rust",active:""},{default:a(()=>[z]),preview:a(()=>[$]),_:1})]),_:1}),X,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Z]),preview:a(()=>[nn]),_:1})]),_:1}),sn,an,n("p",null,[n("a",tn,[en,t(l)]),on]),cn,t(u,null,{default:a(()=>[t(c,{title:"TS",active:""},{default:a(()=>[pn]),_:1}),t(c,{title:"Rust"},{default:a(()=>[ln]),_:1})]),_:1}),un,t(o,null,{default:a(()=>[t(e,{title:"rust",active:""},{default:a(()=>[rn]),preview:a(()=>[kn]),_:1})]),_:1}),bn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[mn]),preview:a(()=>[dn]),_:1})]),_:1}),yn,_n,fn,gn,t(o,null,{default:a(()=>[t(e,{title:"Rust",active:""},{default:a(()=>[wn]),preview:a(()=>[hn]),_:1})]),_:1}),Pn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[vn]),preview:a(()=>[Sn]),_:1})]),_:1}),An,n("p",null,[xn,t(i,{to:"/guides/get-program-accounts.html"},{default:a(()=>[Kn]),_:1}),Tn,Cn,Rn]),t(u,null,{default:a(()=>[t(c,{title:"TS",active:""},{default:a(()=>[Ln]),_:1}),t(c,{title:"Rust"},{default:a(()=>[In]),_:1}),t(c,{title:"CLI"},{default:a(()=>[On]),_:1})]),_:1}),Un,n("p",null,[En,n("a",Fn,[Mn,t(l)]),Bn]),Gn,t(o,null,{default:a(()=>[t(e,{title:"rust",active:""},{default:a(()=>[Nn]),preview:a(()=>[Wn]),_:1})]),_:1}),qn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Yn]),preview:a(()=>[Hn]),_:1})]),_:1}),Vn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Dn]),preview:a(()=>[jn]),_:1}),t(e,{title:"Rust"},{default:a(()=>[Qn]),preview:a(()=>[Jn]),_:1}),t(e,{title:"Python"},{default:a(()=>[zn]),preview:a(()=>[$n]),_:1}),t(e,{title:"C++"},{default:a(()=>[Xn]),preview:a(()=>[Zn]),_:1})]),_:1}),n("div",ns,[ss,n("p",null,[as,t(i,{to:"/references/token.html"},{default:a(()=>[ts]),_:1})])])],64)}var ls=k(y,[["render",es]]);export{ls as default}; diff --git a/docs/.vuepress/dist/assets/accounts.html.cbe5f8e8.js b/docs/.vuepress/dist/assets/accounts.html.22f9f7b9.js similarity index 97% rename from docs/.vuepress/dist/assets/accounts.html.cbe5f8e8.js rename to docs/.vuepress/dist/assets/accounts.html.22f9f7b9.js index dffbd3b66..3bb818db6 100644 --- a/docs/.vuepress/dist/assets/accounts.html.cbe5f8e8.js +++ b/docs/.vuepress/dist/assets/accounts.html.22f9f7b9.js @@ -1,4 +1,4 @@ -import{_ as k,r as p,o as b,c as m,a as n,b as t,w as a,F as d,d as s,e as r}from"./app.cfdf84e7.js";const y={},_=n("h1",{id:"cuentas",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#cuentas","aria-hidden":"true"},"#"),s(" Cuentas")],-1),f=n("h2",{id:"como-crear-una-cuenta-del-sistema",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#como-crear-una-cuenta-del-sistema","aria-hidden":"true"},"#"),s(" C\xF3mo crear una cuenta del sistema")],-1),g=s("Crea una cuenta del sistema que pertenezca al programa "),w={href:"https://docs.solana.com/developing/clients/javascript-reference#systemprogram",target:"_blank",rel:"noopener noreferrer"},h=s("System Program"),P=s(". El runtime de Solana dar\xE1 acceso al due\xF1o de la cuenta a escribir datos y transferir lamports. Cuando se crea una cuenta, debemos definir un espacio de almacenamiento en bytes ("),v=n("code",null,"space",-1),S=s(") y lamports suficientes para cubrir la renta. La renta ("),A={href:"https://docs.solana.com/developing/programming-model/accounts#rent",target:"_blank",rel:"noopener noreferrer"},x=s("Rent"),K=s(") es un costo en Solana para mantener las cuentas activas."),T=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` +import{_ as k,r as p,o as b,c as m,a as n,b as t,w as a,F as d,d as s,e as r}from"./app.2fbb9e96.js";const y={},_=n("h1",{id:"cuentas",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#cuentas","aria-hidden":"true"},"#"),s(" Cuentas")],-1),f=n("h2",{id:"como-crear-una-cuenta-del-sistema",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#como-crear-una-cuenta-del-sistema","aria-hidden":"true"},"#"),s(" C\xF3mo crear una cuenta del sistema")],-1),g=s("Crea una cuenta del sistema que pertenezca al programa "),w={href:"https://docs.solana.com/developing/clients/javascript-reference#systemprogram",target:"_blank",rel:"noopener noreferrer"},h=s("System Program"),P=s(". El runtime de Solana dar\xE1 acceso al due\xF1o de la cuenta a escribir datos y transferir lamports. Cuando se crea una cuenta, debemos definir un espacio de almacenamiento en bytes ("),v=n("code",null,"space",-1),S=s(") y lamports suficientes para cubrir la renta. La renta ("),A={href:"https://docs.solana.com/developing/programming-model/accounts#rent",target:"_blank",rel:"noopener noreferrer"},x=s("Rent"),K=s(") es un costo en Solana para mantener las cuentas activas."),T=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` SystemProgram`),n("span",{class:"token punctuation"},","),s(` Keypair`),n("span",{class:"token punctuation"},","),s(` Transaction`),n("span",{class:"token punctuation"},","),s(` @@ -1005,19 +1005,44 @@ source_data`),n("span",{class:"token punctuation"},"."),n("span",{class:"token f `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br")])],-1),Hn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[s("connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"get_balance"),n("span",{class:"token punctuation"},"("),n("span",{class:"token operator"},"&"),s("wallet"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),$n=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("publickey "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),$n=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair `),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("api "),n("span",{class:"token keyword"},"import"),s(` Client client `),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),s(` key_pair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` -public_key `),n("span",{class:"token operator"},"="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s(`public_key +public_key `),n("span",{class:"token operator"},"="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("client"),n("span",{class:"token punctuation"},"."),s("get_balance"),n("span",{class:"token punctuation"},"("),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br")])],-1),Xn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("client "),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),s(` key_pair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` -public_key `),n("span",{class:"token operator"},"="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s(`public_key +public_key `),n("span",{class:"token operator"},"="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` client`),n("span",{class:"token punctuation"},"."),s("get_balance"),n("span",{class:"token punctuation"},"("),s("public_key"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),Zn={class:"custom-container tip"},ns=n("p",{class:"custom-container-title"},"TIP",-1),ss=s("Si deseas obtener el saldo de un token, deber\xE1s conocer la direcci\xF3n de la cuenta de token. Para obtener m\xE1s informaci\xF3n, consulte "),as=s("Referencias de tokens");function ts(es,os){const l=p("ExternalLinkIcon"),e=p("SolanaCodeGroupItem"),o=p("SolanaCodeGroup"),c=p("CodeGroupItem"),u=p("CodeGroup"),i=p("RouterLink");return b(),m(d,null,[_,f,n("p",null,[g,n("a",w,[h,t(l)]),P,v,S,n("a",A,[x,t(l)]),K]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[T]),preview:a(()=>[C]),_:1}),t(e,{title:"Rust"},{default:a(()=>[R]),preview:a(()=>[L]),_:1})]),_:1}),O,n("p",null,[I,n("a",U,[E,t(l)]),M]),t(u,null,{default:a(()=>[t(c,{title:"TS",active:""},{default:a(()=>[q]),_:1}),t(c,{title:"Rust"},{default:a(()=>[G]),_:1}),t(c,{title:"CLI"},{default:a(()=>[F]),_:1})]),_:1}),B,N,W,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[j]),preview:a(()=>[V]),_:1}),t(e,{title:"Rust"},{default:a(()=>[Y]),preview:a(()=>[Q]),_:1})]),_:1}),z,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[D]),preview:a(()=>[J]),_:1}),t(e,{title:"Rust",active:""},{default:a(()=>[H]),preview:a(()=>[$]),_:1})]),_:1}),X,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Z]),preview:a(()=>[nn]),_:1})]),_:1}),sn,an,n("p",null,[tn,n("a",en,[on,t(l)]),cn]),pn,t(u,null,{default:a(()=>[t(c,{title:"TS",active:""},{default:a(()=>[ln]),_:1}),t(c,{title:"Rust"},{default:a(()=>[un]),_:1})]),_:1}),rn,t(o,null,{default:a(()=>[t(e,{title:"rust",active:""},{default:a(()=>[kn]),preview:a(()=>[bn]),_:1})]),_:1}),mn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[dn]),preview:a(()=>[yn]),_:1})]),_:1}),_n,fn,gn,wn,t(o,null,{default:a(()=>[t(e,{title:"Rust",active:""},{default:a(()=>[hn]),preview:a(()=>[Pn]),_:1})]),_:1}),vn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Sn]),preview:a(()=>[An]),_:1})]),_:1}),xn,n("p",null,[Kn,t(i,{to:"/es/guides/get-program-accounts.html"},{default:a(()=>[Tn]),_:1}),Cn,Rn,Ln]),t(u,null,{default:a(()=>[t(c,{title:"TS",active:""},{default:a(()=>[On]),_:1}),t(c,{title:"Rust"},{default:a(()=>[In]),_:1}),t(c,{title:"CLI"},{default:a(()=>[Un]),_:1})]),_:1}),En,n("p",null,[Mn,n("a",qn,[Gn,t(l)]),Fn]),Bn,t(o,null,{default:a(()=>[t(e,{title:"rust",active:""},{default:a(()=>[Nn]),preview:a(()=>[Wn]),_:1})]),_:1}),jn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Vn]),preview:a(()=>[Yn]),_:1})]),_:1}),Qn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[zn]),preview:a(()=>[Dn]),_:1}),t(e,{title:"Rust"},{default:a(()=>[Jn]),preview:a(()=>[Hn]),_:1}),t(e,{title:"Python"},{default:a(()=>[$n]),preview:a(()=>[Xn]),_:1})]),_:1}),n("div",Zn,[ns,n("p",null,[ss,t(i,{to:"/es/references/token.html"},{default:a(()=>[as]),_:1})])])],64)}var ps=k(y,[["render",ts]]);export{ps as default}; +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),Zn=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token comment"},"// clang++ get_balance.cpp -o get_balance -std=c++17 -lssl -lcrypto -lsodium"),s(` + +`),n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + Connection `),n("span",{class:"token function"},"connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"auto"),s(" public_key "),n("span",{class:"token operator"},"="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"public_key = "'),s(),n("span",{class:"token operator"},"<<"),s(" public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"uint64_t"),s(" balance "),n("span",{class:"token operator"},"="),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"get_balance"),n("span",{class:"token punctuation"},"("),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"balance = "'),s(),n("span",{class:"token operator"},"<<"),s(" balance "),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"return"),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br")])],-1),ns=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[s("Connection "),n("span",{class:"token function"},"connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token keyword"},"auto"),s(" public_key "),n("span",{class:"token operator"},"="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"uint64_t"),s(" balance "),n("span",{class:"token operator"},"="),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"get_balance"),n("span",{class:"token punctuation"},"("),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),ss={class:"custom-container tip"},as=n("p",{class:"custom-container-title"},"TIP",-1),ts=s("Si deseas obtener el saldo de un token, deber\xE1s conocer la direcci\xF3n de la cuenta de token. Para obtener m\xE1s informaci\xF3n, consulte "),es=s("Referencias de tokens");function os(cs,ps){const l=p("ExternalLinkIcon"),e=p("SolanaCodeGroupItem"),o=p("SolanaCodeGroup"),c=p("CodeGroupItem"),u=p("CodeGroup"),i=p("RouterLink");return b(),m(d,null,[_,f,n("p",null,[g,n("a",w,[h,t(l)]),P,v,S,n("a",A,[x,t(l)]),K]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[T]),preview:a(()=>[C]),_:1}),t(e,{title:"Rust"},{default:a(()=>[R]),preview:a(()=>[L]),_:1})]),_:1}),O,n("p",null,[I,n("a",U,[E,t(l)]),M]),t(u,null,{default:a(()=>[t(c,{title:"TS",active:""},{default:a(()=>[q]),_:1}),t(c,{title:"Rust"},{default:a(()=>[G]),_:1}),t(c,{title:"CLI"},{default:a(()=>[F]),_:1})]),_:1}),B,N,W,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[j]),preview:a(()=>[V]),_:1}),t(e,{title:"Rust"},{default:a(()=>[Y]),preview:a(()=>[Q]),_:1})]),_:1}),z,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[D]),preview:a(()=>[J]),_:1}),t(e,{title:"Rust",active:""},{default:a(()=>[H]),preview:a(()=>[$]),_:1})]),_:1}),X,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Z]),preview:a(()=>[nn]),_:1})]),_:1}),sn,an,n("p",null,[tn,n("a",en,[on,t(l)]),cn]),pn,t(u,null,{default:a(()=>[t(c,{title:"TS",active:""},{default:a(()=>[ln]),_:1}),t(c,{title:"Rust"},{default:a(()=>[un]),_:1})]),_:1}),rn,t(o,null,{default:a(()=>[t(e,{title:"rust",active:""},{default:a(()=>[kn]),preview:a(()=>[bn]),_:1})]),_:1}),mn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[dn]),preview:a(()=>[yn]),_:1})]),_:1}),_n,fn,gn,wn,t(o,null,{default:a(()=>[t(e,{title:"Rust",active:""},{default:a(()=>[hn]),preview:a(()=>[Pn]),_:1})]),_:1}),vn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Sn]),preview:a(()=>[An]),_:1})]),_:1}),xn,n("p",null,[Kn,t(i,{to:"/es/guides/get-program-accounts.html"},{default:a(()=>[Tn]),_:1}),Cn,Rn,Ln]),t(u,null,{default:a(()=>[t(c,{title:"TS",active:""},{default:a(()=>[On]),_:1}),t(c,{title:"Rust"},{default:a(()=>[In]),_:1}),t(c,{title:"CLI"},{default:a(()=>[Un]),_:1})]),_:1}),En,n("p",null,[Mn,n("a",qn,[Gn,t(l)]),Fn]),Bn,t(o,null,{default:a(()=>[t(e,{title:"rust",active:""},{default:a(()=>[Nn]),preview:a(()=>[Wn]),_:1})]),_:1}),jn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Vn]),preview:a(()=>[Yn]),_:1})]),_:1}),Qn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[zn]),preview:a(()=>[Dn]),_:1}),t(e,{title:"Rust"},{default:a(()=>[Jn]),preview:a(()=>[Hn]),_:1}),t(e,{title:"Python"},{default:a(()=>[$n]),preview:a(()=>[Xn]),_:1}),t(e,{title:"C++"},{default:a(()=>[Zn]),preview:a(()=>[ns]),_:1})]),_:1}),n("div",ss,[as,n("p",null,[ts,t(i,{to:"/es/references/token.html"},{default:a(()=>[es]),_:1})])])],64)}var us=k(y,[["render",os]]);export{us as default}; diff --git a/docs/.vuepress/dist/assets/accounts.html.9ee344c8.js b/docs/.vuepress/dist/assets/accounts.html.30b0e6b2.js similarity index 96% rename from docs/.vuepress/dist/assets/accounts.html.9ee344c8.js rename to docs/.vuepress/dist/assets/accounts.html.30b0e6b2.js index 4faa7e29e..a83924f34 100644 --- a/docs/.vuepress/dist/assets/accounts.html.9ee344c8.js +++ b/docs/.vuepress/dist/assets/accounts.html.30b0e6b2.js @@ -1 +1 @@ -const t={key:"v-6a35b27a",path:"/vi/core-concepts/accounts.html",title:"Accounts",lang:"vi-VN",frontmatter:{title:"Accounts",head:[["meta",{name:"title",content:"To\xE0n t\u1EADp Solana | Accounts"}],["meta",{name:"og:title",content:"To\xE0n t\u1EADp Cookbook | Accounts"}],["meta",{name:"description",content:"Account l\xE0 kh\u1ED1i c\u01A1 s\u1EDF c\u1EDF b\u1EA3n nh\u1EA5t trong l\u1EADp tr\xECnh Solana. Chi ti\u1EBFt v\u1EC1 Account v\xE0 c\xE1c kh\xE1i ni\u1EC7m c\u01A1n b\u1EA3n kh\xE1c trong To\xE0n t\u1EADp Solana."}],["meta",{name:"og:description",content:"Account l\xE0 kh\u1ED1i c\u01A1 s\u1EDF c\u1EDF b\u1EA3n nh\u1EA5t trong l\u1EADp tr\xECnh Solana. Chi ti\u1EBFt v\u1EC1 Account v\xE0 c\xE1c kh\xE1i ni\u1EC7m c\u01A1n b\u1EA3n kh\xE1c trong To\xE0n t\u1EADp Solana."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"C\xF3 th\u1EC3 b\u1EA1n ch\u01B0a bi\u1EBFt",slug:"co-the-ban-chua-biet",children:[]},{level:2,title:"Chi ti\u1EBFt",slug:"chi-tiet",children:[{level:3,title:"C\u1EA5u tr\xFAc Account",slug:"cau-truc-account",children:[]},{level:3,title:"Thu\xEA",slug:"thue",children:[]}]},{level:2,title:"C\xE1c ngu\u1ED3n t\xE0i li\u1EC7u kh\xE1c",slug:"cac-nguon-tai-lieu-khac",children:[{level:3,title:"L\u1EDDi c\u1EA3m \u01A1n",slug:"loi-cam-on",children:[]}]}],git:{updatedTime:1658783638e3},filePathRelative:"vi/core-concepts/accounts.md"};export{t as data}; +const t={key:"v-6a35b27a",path:"/vi/core-concepts/accounts.html",title:"Accounts",lang:"vi-VN",frontmatter:{title:"Accounts",head:[["meta",{name:"title",content:"To\xE0n t\u1EADp Solana | Accounts"}],["meta",{name:"og:title",content:"To\xE0n t\u1EADp Cookbook | Accounts"}],["meta",{name:"description",content:"Account l\xE0 kh\u1ED1i c\u01A1 s\u1EDF c\u1EDF b\u1EA3n nh\u1EA5t trong l\u1EADp tr\xECnh Solana. Chi ti\u1EBFt v\u1EC1 Account v\xE0 c\xE1c kh\xE1i ni\u1EC7m c\u01A1n b\u1EA3n kh\xE1c trong To\xE0n t\u1EADp Solana."}],["meta",{name:"og:description",content:"Account l\xE0 kh\u1ED1i c\u01A1 s\u1EDF c\u1EDF b\u1EA3n nh\u1EA5t trong l\u1EADp tr\xECnh Solana. Chi ti\u1EBFt v\u1EC1 Account v\xE0 c\xE1c kh\xE1i ni\u1EC7m c\u01A1n b\u1EA3n kh\xE1c trong To\xE0n t\u1EADp Solana."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"C\xF3 th\u1EC3 b\u1EA1n ch\u01B0a bi\u1EBFt",slug:"co-the-ban-chua-biet",children:[]},{level:2,title:"Chi ti\u1EBFt",slug:"chi-tiet",children:[{level:3,title:"C\u1EA5u tr\xFAc Account",slug:"cau-truc-account",children:[]},{level:3,title:"Thu\xEA",slug:"thue",children:[]}]},{level:2,title:"C\xE1c ngu\u1ED3n t\xE0i li\u1EC7u kh\xE1c",slug:"cac-nguon-tai-lieu-khac",children:[{level:3,title:"L\u1EDDi c\u1EA3m \u01A1n",slug:"loi-cam-on",children:[]}]}],git:{updatedTime:1677551527e3},filePathRelative:"vi/core-concepts/accounts.md"};export{t as data}; diff --git a/docs/.vuepress/dist/assets/accounts.html.777a7eb8.js b/docs/.vuepress/dist/assets/accounts.html.333507d3.js similarity index 96% rename from docs/.vuepress/dist/assets/accounts.html.777a7eb8.js rename to docs/.vuepress/dist/assets/accounts.html.333507d3.js index d2171e5e1..5375ef306 100644 --- a/docs/.vuepress/dist/assets/accounts.html.777a7eb8.js +++ b/docs/.vuepress/dist/assets/accounts.html.333507d3.js @@ -1,4 +1,4 @@ -import{_ as k,r as p,o as b,c as m,a as n,b as t,w as a,F as d,d as s,e as r}from"./app.cfdf84e7.js";const y={},_=n("h1",{id:"accounts",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#accounts","aria-hidden":"true"},"#"),s(" Accounts")],-1),f=n("h2",{id:"so-erstellen-sie-ein-systemkonto",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#so-erstellen-sie-ein-systemkonto","aria-hidden":"true"},"#"),s(" So erstellen Sie ein Systemkonto")],-1),g=s("Erstellen Sie ein Konto, das dem "),w={href:"https://docs.solana.com/developing/clients/javascript-reference#systemprogram",target:"_blank",rel:"noopener noreferrer"},h=s("Systemprogramm"),P=s(" geh\xF6rt. Die Solana-Laufzeit gew\xE4hrt dem Besitzer eines Kontos Zugriff darauf in seine Daten schreiben oder Lamports \xFCbertragen. Beim Erstellen eines Kontos m\xFCssen wir einen festen Speicherplatz in Bytes vorbelegen ("),S=n("code",null,"Raum",-1),v=s(") und gen\xFCgend Lamports, um die Miete zu decken. "),A={href:"https://docs.solana.com/developing/programming-model/accounts#rent",target:"_blank",rel:"noopener noreferrer"},x=s("Miete"),K=s(" sind Kosten, die anfallen, um Konten auf Solana am Leben zu erhalten."),T=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` +import{_ as k,r as p,o as b,c as m,a as n,b as t,w as a,F as d,d as s,e as r}from"./app.2fbb9e96.js";const y={},_=n("h1",{id:"accounts",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#accounts","aria-hidden":"true"},"#"),s(" Accounts")],-1),f=n("h2",{id:"so-erstellen-sie-ein-systemkonto",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#so-erstellen-sie-ein-systemkonto","aria-hidden":"true"},"#"),s(" So erstellen Sie ein Systemkonto")],-1),g=s("Erstellen Sie ein Konto, das dem "),w={href:"https://docs.solana.com/developing/clients/javascript-reference#systemprogram",target:"_blank",rel:"noopener noreferrer"},h=s("Systemprogramm"),P=s(" geh\xF6rt. Die Solana-Laufzeit gew\xE4hrt dem Besitzer eines Kontos Zugriff darauf in seine Daten schreiben oder Lamports \xFCbertragen. Beim Erstellen eines Kontos m\xFCssen wir einen festen Speicherplatz in Bytes vorbelegen ("),v=n("code",null,"Raum",-1),S=s(") und gen\xFCgend Lamports, um die Miete zu decken. "),A={href:"https://docs.solana.com/developing/programming-model/accounts#rent",target:"_blank",rel:"noopener noreferrer"},x=s("Miete"),K=s(" sind Kosten, die anfallen, um Konten auf Solana am Leben zu erhalten."),T=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` SystemProgram`),n("span",{class:"token punctuation"},","),s(` Keypair`),n("span",{class:"token punctuation"},","),s(` Transaction`),n("span",{class:"token punctuation"},","),s(` @@ -44,7 +44,7 @@ import{_ as k,r as p,o as b,c as m,a as n,b as t,w as a,F as d,d as s,e as r}fro newAccountPubkey`),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br")])],-1),R=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" createAccountParams "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"{"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br")])],-1),C=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" createAccountParams "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"{"),s(` fromPubkey`),n("span",{class:"token operator"},":"),s(" fromPubkey"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},","),s(` newAccountPubkey`),n("span",{class:"token operator"},":"),s(" newAccountPubkey"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},","),s(` lamports`),n("span",{class:"token operator"},":"),s(" rentExemptionAmount"),n("span",{class:"token punctuation"},","),s(` @@ -60,7 +60,7 @@ import{_ as k,r as p,o as b,c as m,a as n,b as t,w as a,F as d,d as s,e as r}fro fromPubkey`),n("span",{class:"token punctuation"},","),s(` newAccountPubkey`),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br")])],-1),C=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br")])],-1),R=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_program"),n("span",{class:"token punctuation"},"::")]),s("system_instruction"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("commitment_config"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("native_token"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token constant"},"LAMPORTS_PER_SOL"),n("span",{class:"token punctuation"},";"),s(` @@ -665,7 +665,7 @@ import{_ as k,r as p,o as b,c as m,a as n,b as t,w as a,F as d,d as s,e as r}fro `),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token operator"},"&"),n("span",{class:"token punctuation"},"["),n("span",{class:"token operator"},"&"),n("span",{class:"token punctuation"},"["),n("span",{class:"token string"},'b"escrow"'),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token operator"},"&"),n("span",{class:"token punctuation"},"["),s("bump_seed"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br")])],-1),Pn=n("h3",{id:"client-1",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#client-1","aria-hidden":"true"},"#"),s(" Client")],-1),Sn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br")])],-1),Pn=n("h3",{id:"client-1",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#client-1","aria-hidden":"true"},"#"),s(" Client")],-1),vn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` clusterApiUrl`),n("span",{class:"token punctuation"},","),s(` Connection`),n("span",{class:"token punctuation"},","),s(` Keypair`),n("span",{class:"token punctuation"},","),s(` @@ -740,7 +740,7 @@ import{_ as k,r as p,o as b,c as m,a as n,b as t,w as a,F as d,d as s,e as r}fro `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),n("span",{class:"token template-string"},[n("span",{class:"token template-punctuation string"},"`"),n("span",{class:"token string"},"txhash: "),n("span",{class:"token interpolation"},[n("span",{class:"token interpolation-punctuation punctuation"},"${"),n("span",{class:"token keyword"},"await"),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"sendTransaction"),n("span",{class:"token punctuation"},"("),s("tx"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token punctuation"},"["),s("feePayer"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),n("span",{class:"token interpolation-punctuation punctuation"},"}")]),n("span",{class:"token template-punctuation string"},"`")]),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br"),n("span",{class:"line-number"},"69"),n("br"),n("span",{class:"line-number"},"70"),n("br"),n("span",{class:"line-number"},"71"),n("br"),n("span",{class:"line-number"},"72"),n("br"),n("span",{class:"line-number"},"73"),n("br"),n("span",{class:"line-number"},"74"),n("br"),n("span",{class:"line-number"},"75"),n("br")])],-1),vn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" tx "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Transaction"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"add"),n("span",{class:"token punctuation"},"("),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br"),n("span",{class:"line-number"},"69"),n("br"),n("span",{class:"line-number"},"70"),n("br"),n("span",{class:"line-number"},"71"),n("br"),n("span",{class:"line-number"},"72"),n("br"),n("span",{class:"line-number"},"73"),n("br"),n("span",{class:"line-number"},"74"),n("br"),n("span",{class:"line-number"},"75"),n("br")])],-1),Sn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" tx "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Transaction"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"add"),n("span",{class:"token punctuation"},"("),s(` `),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"TransactionInstruction"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"{"),s(` keys`),n("span",{class:"token operator"},":"),s(),n("span",{class:"token punctuation"},"["),s(` `),n("span",{class:"token punctuation"},"{"),s(` @@ -767,7 +767,7 @@ import{_ as k,r as p,o as b,c as m,a as n,b as t,w as a,F as d,d as s,e as r}fro `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),n("span",{class:"token template-string"},[n("span",{class:"token template-punctuation string"},"`"),n("span",{class:"token string"},"txhash: "),n("span",{class:"token interpolation"},[n("span",{class:"token interpolation-punctuation punctuation"},"${"),n("span",{class:"token keyword"},"await"),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"sendTransaction"),n("span",{class:"token punctuation"},"("),s("tx"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token punctuation"},"["),s("feePayer"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),n("span",{class:"token interpolation-punctuation punctuation"},"}")]),n("span",{class:"token template-punctuation string"},"`")]),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br")])],-1),An=n("h2",{id:"so-erhalten-sie-programmkonten",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#so-erhalten-sie-programmkonten","aria-hidden":"true"},"#"),s(" So erhalten Sie Programmkonten")],-1),xn=s("Gibt alle Konten zur\xFCck, die einem Programm geh\xF6ren. Weitere Informationen zu "),Kn=n("code",null,"getProgramAccounts",-1),Tn=s(" und seiner Konfiguration finden Sie im "),Rn=s("Anleitungsabschnitt"),Cn=s("."),Ln=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" clusterApiUrl"),n("span",{class:"token punctuation"},","),s(" Connection"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br")])],-1),An=n("h2",{id:"so-erhalten-sie-programmkonten",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#so-erhalten-sie-programmkonten","aria-hidden":"true"},"#"),s(" So erhalten Sie Programmkonten")],-1),xn=s("Gibt alle Konten zur\xFCck, die einem Programm geh\xF6ren. Weitere Informationen zu "),Kn=n("code",null,"getProgramAccounts",-1),Tn=s(" und seiner Konfiguration finden Sie im "),Cn=s("Anleitungsabschnitt"),Rn=s("."),Ln=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" clusterApiUrl"),n("span",{class:"token punctuation"},","),s(" Connection"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token constant"},"MY_PROGRAM_ID"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),s(` @@ -1005,19 +1005,44 @@ source_data`),n("span",{class:"token punctuation"},"."),n("span",{class:"token f `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br")])],-1),Qn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[s("connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"get_balance"),n("span",{class:"token punctuation"},"("),n("span",{class:"token operator"},"&"),s("wallet"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Hn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("publickey "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Hn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair `),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("api "),n("span",{class:"token keyword"},"import"),s(` Client client `),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),s(` key_pair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` -public_key `),n("span",{class:"token operator"},"="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s(`public_key +public_key `),n("span",{class:"token operator"},"="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("client"),n("span",{class:"token punctuation"},"."),s("get_balance"),n("span",{class:"token punctuation"},"("),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br")])],-1),$n=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("client "),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),s(` key_pair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` -public_key `),n("span",{class:"token operator"},"="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s(`public_key +public_key `),n("span",{class:"token operator"},"="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` client`),n("span",{class:"token punctuation"},"."),s("get_balance"),n("span",{class:"token punctuation"},"("),s("public_key"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),Xn={class:"custom-container tip"},Zn=n("p",{class:"custom-container-title"},"TIP",-1),ns=s("If you want to get a token balance, you will need to know the address of token account. For more information, see "),ss=s("Token References");function as(ts,es){const l=p("ExternalLinkIcon"),e=p("SolanaCodeGroupItem"),o=p("SolanaCodeGroup"),c=p("CodeGroupItem"),u=p("CodeGroup"),i=p("RouterLink");return b(),m(d,null,[_,f,n("p",null,[g,n("a",w,[h,t(l)]),P,S,v,n("a",A,[x,t(l)]),K]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[T]),preview:a(()=>[R]),_:1}),t(e,{title:"Rust"},{default:a(()=>[C]),preview:a(()=>[L]),_:1})]),_:1}),I,n("p",null,[O,n("a",E,[U,t(l)]),B]),t(u,null,{default:a(()=>[t(c,{title:"TS",active:""},{default:a(()=>[M]),_:1}),t(c,{title:"Rust"},{default:a(()=>[F]),_:1}),t(c,{title:"CLI"},{default:a(()=>[z]),_:1})]),_:1}),G,D,N,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[W]),preview:a(()=>[q]),_:1}),t(e,{title:"Rust"},{default:a(()=>[V]),preview:a(()=>[Y]),_:1})]),_:1}),j,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[J]),preview:a(()=>[Q]),_:1}),t(e,{title:"Rust",active:""},{default:a(()=>[H]),preview:a(()=>[$]),_:1})]),_:1}),X,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Z]),preview:a(()=>[nn]),_:1})]),_:1}),sn,an,n("p",null,[n("a",tn,[en,t(l)]),on]),cn,t(u,null,{default:a(()=>[t(c,{title:"TS",active:""},{default:a(()=>[pn]),_:1}),t(c,{title:"Rust"},{default:a(()=>[ln]),_:1})]),_:1}),un,t(o,null,{default:a(()=>[t(e,{title:"rust",active:""},{default:a(()=>[rn]),preview:a(()=>[kn]),_:1})]),_:1}),bn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[mn]),preview:a(()=>[dn]),_:1})]),_:1}),yn,_n,fn,gn,t(o,null,{default:a(()=>[t(e,{title:"Rust",active:""},{default:a(()=>[wn]),preview:a(()=>[hn]),_:1})]),_:1}),Pn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Sn]),preview:a(()=>[vn]),_:1})]),_:1}),An,n("p",null,[xn,Kn,Tn,t(i,{to:"/de/guides/get-program-accounts.html"},{default:a(()=>[Rn]),_:1}),Cn]),t(u,null,{default:a(()=>[t(c,{title:"TS",active:""},{default:a(()=>[Ln]),_:1}),t(c,{title:"Rust"},{default:a(()=>[In]),_:1}),t(c,{title:"CLI"},{default:a(()=>[On]),_:1})]),_:1}),En,n("p",null,[Un,n("a",Bn,[Mn,t(l)]),Fn]),zn,t(o,null,{default:a(()=>[t(e,{title:"rust",active:""},{default:a(()=>[Gn]),preview:a(()=>[Dn]),_:1})]),_:1}),Nn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Wn]),preview:a(()=>[qn]),_:1})]),_:1}),Vn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Yn]),preview:a(()=>[jn]),_:1}),t(e,{title:"Rust"},{default:a(()=>[Jn]),preview:a(()=>[Qn]),_:1}),t(e,{title:"Python"},{default:a(()=>[Hn]),preview:a(()=>[$n]),_:1})]),_:1}),n("div",Xn,[Zn,n("p",null,[ns,t(i,{to:"/de/references/token.html"},{default:a(()=>[ss]),_:1})])])],64)}var cs=k(y,[["render",as]]);export{cs as default}; +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),Xn=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token comment"},"// clang++ get_balance.cpp -o get_balance -std=c++17 -lssl -lcrypto -lsodium"),s(` + +`),n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + Connection `),n("span",{class:"token function"},"connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"auto"),s(" public_key "),n("span",{class:"token operator"},"="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"public_key = "'),s(),n("span",{class:"token operator"},"<<"),s(" public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"uint64_t"),s(" balance "),n("span",{class:"token operator"},"="),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"get_balance"),n("span",{class:"token punctuation"},"("),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"balance = "'),s(),n("span",{class:"token operator"},"<<"),s(" balance "),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"return"),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br")])],-1),Zn=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[s("Connection "),n("span",{class:"token function"},"connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token keyword"},"auto"),s(" public_key "),n("span",{class:"token operator"},"="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"uint64_t"),s(" balance "),n("span",{class:"token operator"},"="),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"get_balance"),n("span",{class:"token punctuation"},"("),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),ns={class:"custom-container tip"},ss=n("p",{class:"custom-container-title"},"TIP",-1),as=s("If you want to get a token balance, you will need to know the address of token account. For more information, see "),ts=s("Token References");function es(os,cs){const l=p("ExternalLinkIcon"),e=p("SolanaCodeGroupItem"),o=p("SolanaCodeGroup"),c=p("CodeGroupItem"),u=p("CodeGroup"),i=p("RouterLink");return b(),m(d,null,[_,f,n("p",null,[g,n("a",w,[h,t(l)]),P,v,S,n("a",A,[x,t(l)]),K]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[T]),preview:a(()=>[C]),_:1}),t(e,{title:"Rust"},{default:a(()=>[R]),preview:a(()=>[L]),_:1})]),_:1}),I,n("p",null,[O,n("a",E,[U,t(l)]),B]),t(u,null,{default:a(()=>[t(c,{title:"TS",active:""},{default:a(()=>[M]),_:1}),t(c,{title:"Rust"},{default:a(()=>[F]),_:1}),t(c,{title:"CLI"},{default:a(()=>[z]),_:1})]),_:1}),G,D,N,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[W]),preview:a(()=>[q]),_:1}),t(e,{title:"Rust"},{default:a(()=>[V]),preview:a(()=>[Y]),_:1})]),_:1}),j,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[J]),preview:a(()=>[Q]),_:1}),t(e,{title:"Rust",active:""},{default:a(()=>[H]),preview:a(()=>[$]),_:1})]),_:1}),X,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Z]),preview:a(()=>[nn]),_:1})]),_:1}),sn,an,n("p",null,[n("a",tn,[en,t(l)]),on]),cn,t(u,null,{default:a(()=>[t(c,{title:"TS",active:""},{default:a(()=>[pn]),_:1}),t(c,{title:"Rust"},{default:a(()=>[ln]),_:1})]),_:1}),un,t(o,null,{default:a(()=>[t(e,{title:"rust",active:""},{default:a(()=>[rn]),preview:a(()=>[kn]),_:1})]),_:1}),bn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[mn]),preview:a(()=>[dn]),_:1})]),_:1}),yn,_n,fn,gn,t(o,null,{default:a(()=>[t(e,{title:"Rust",active:""},{default:a(()=>[wn]),preview:a(()=>[hn]),_:1})]),_:1}),Pn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[vn]),preview:a(()=>[Sn]),_:1})]),_:1}),An,n("p",null,[xn,Kn,Tn,t(i,{to:"/de/guides/get-program-accounts.html"},{default:a(()=>[Cn]),_:1}),Rn]),t(u,null,{default:a(()=>[t(c,{title:"TS",active:""},{default:a(()=>[Ln]),_:1}),t(c,{title:"Rust"},{default:a(()=>[In]),_:1}),t(c,{title:"CLI"},{default:a(()=>[On]),_:1})]),_:1}),En,n("p",null,[Un,n("a",Bn,[Mn,t(l)]),Fn]),zn,t(o,null,{default:a(()=>[t(e,{title:"rust",active:""},{default:a(()=>[Gn]),preview:a(()=>[Dn]),_:1})]),_:1}),Nn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Wn]),preview:a(()=>[qn]),_:1})]),_:1}),Vn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Yn]),preview:a(()=>[jn]),_:1}),t(e,{title:"Rust"},{default:a(()=>[Jn]),preview:a(()=>[Qn]),_:1}),t(e,{title:"Python"},{default:a(()=>[Hn]),preview:a(()=>[$n]),_:1}),t(e,{title:"C++"},{default:a(()=>[Xn]),preview:a(()=>[Zn]),_:1})]),_:1}),n("div",ns,[ss,n("p",null,[as,t(i,{to:"/de/references/token.html"},{default:a(()=>[ts]),_:1})])])],64)}var ls=k(y,[["render",es]]);export{ls as default}; diff --git a/docs/.vuepress/dist/assets/accounts.html.b148d429.js b/docs/.vuepress/dist/assets/accounts.html.3f56b028.js similarity index 97% rename from docs/.vuepress/dist/assets/accounts.html.b148d429.js rename to docs/.vuepress/dist/assets/accounts.html.3f56b028.js index fb26237da..470258151 100644 --- a/docs/.vuepress/dist/assets/accounts.html.b148d429.js +++ b/docs/.vuepress/dist/assets/accounts.html.3f56b028.js @@ -1 +1 @@ -const t={key:"v-0ed8daa2",path:"/vi/references/accounts.html",title:"Accounts",lang:"vi-VN",frontmatter:{title:"Accounts",head:[["meta",{name:"title",content:"To\xE0n t\u1EADp Solana | T\xE0i li\u1EC7u tham kh\u1EA3o cho Account"}],["meta",{name:"og:title",content:"To\xE0n t\u1EADp Solana | T\xE0i li\u1EC7u tham kh\u1EA3o cho Account"}],["meta",{name:"description",content:"T\xECm hi\u1EC3u chi ti\u1EBFt v\u1EC1 Account tr\xEAn Solana v\xE0 c\xE1ch s\u1EED d\u1EE5ng trong l\u1EADp tr\xECnh Program."}],["meta",{name:"og:description",content:"T\xECm hi\u1EC3u chi ti\u1EBFt v\u1EC1 Account tr\xEAn Solana v\xE0 c\xE1ch s\u1EED d\u1EE5ng trong l\u1EADp tr\xECnh Program."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 t\u1EA1o m\u1ED9t System Account",slug:"lam-the-nao-\u0111e-tao-mot-system-account",children:[]},{level:2,title:"T\xEDnh chi ph\xED cho m\u1ED9t account",slug:"tinh-chi-phi-cho-mot-account",children:[]},{level:2,title:"L\xE0m th\u1EBF \xE0o \u0111\u1EC3 t\u1EA1o account v\u1EDBi seeds",slug:"lam-the-ao-\u0111e-tao-account-voi-seeds",children:[{level:3,title:"T\xECm Account",slug:"tim-account",children:[]},{level:3,title:"T\u1EA1o Account",slug:"tao-account",children:[]},{level:3,title:"Chuy\u1EC3n lamports",slug:"chuyen-lamports",children:[]}]},{level:2,title:"C\xE1ch t\u1EA1o PDAs",slug:"cach-tao-pdas",children:[{level:3,title:"Sinh ra m\u1ED9t PDA",slug:"sinh-ra-mot-pda",children:[]},{level:3,title:"T\u1EA1o m\u1ED9t PDA",slug:"tao-mot-pda",children:[]}]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 k\xFD b\u1EB1ng PDA",slug:"lam-the-nao-\u0111e-ky-bang-pda",children:[{level:3,title:"Program",slug:"program-1",children:[]},{level:3,title:"Ng\u01B0\u1EDDi d\xF9ng",slug:"nguoi-dung-1",children:[]}]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 truy v\u1EA5n c\xE1c account c\u1EE7a m\u1ED9t program",slug:"lam-the-nao-\u0111e-truy-van-cac-account-cua-mot-program",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 \u0111\xF3ng account",slug:"lam-the-nao-\u0111e-\u0111ong-account",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 truy v\u1EA5n s\u1ED1 d\u01B0 c\u1EE7a m\u1ED9t account",slug:"lam-the-nao-\u0111e-truy-van-so-du-cua-mot-account",children:[]}],git:{updatedTime:1658783638e3},filePathRelative:"vi/references/accounts.md"};export{t as data}; +const t={key:"v-0ed8daa2",path:"/vi/references/accounts.html",title:"Accounts",lang:"vi-VN",frontmatter:{title:"Accounts",head:[["meta",{name:"title",content:"To\xE0n t\u1EADp Solana | T\xE0i li\u1EC7u tham kh\u1EA3o cho Account"}],["meta",{name:"og:title",content:"To\xE0n t\u1EADp Solana | T\xE0i li\u1EC7u tham kh\u1EA3o cho Account"}],["meta",{name:"description",content:"T\xECm hi\u1EC3u chi ti\u1EBFt v\u1EC1 Account tr\xEAn Solana v\xE0 c\xE1ch s\u1EED d\u1EE5ng trong l\u1EADp tr\xECnh Program."}],["meta",{name:"og:description",content:"T\xECm hi\u1EC3u chi ti\u1EBFt v\u1EC1 Account tr\xEAn Solana v\xE0 c\xE1ch s\u1EED d\u1EE5ng trong l\u1EADp tr\xECnh Program."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 t\u1EA1o m\u1ED9t System Account",slug:"lam-the-nao-\u0111e-tao-mot-system-account",children:[]},{level:2,title:"T\xEDnh chi ph\xED cho m\u1ED9t account",slug:"tinh-chi-phi-cho-mot-account",children:[]},{level:2,title:"L\xE0m th\u1EBF \xE0o \u0111\u1EC3 t\u1EA1o account v\u1EDBi seeds",slug:"lam-the-ao-\u0111e-tao-account-voi-seeds",children:[{level:3,title:"T\xECm Account",slug:"tim-account",children:[]},{level:3,title:"T\u1EA1o Account",slug:"tao-account",children:[]},{level:3,title:"Chuy\u1EC3n lamports",slug:"chuyen-lamports",children:[]}]},{level:2,title:"C\xE1ch t\u1EA1o PDAs",slug:"cach-tao-pdas",children:[{level:3,title:"Sinh ra m\u1ED9t PDA",slug:"sinh-ra-mot-pda",children:[]},{level:3,title:"T\u1EA1o m\u1ED9t PDA",slug:"tao-mot-pda",children:[]}]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 k\xFD b\u1EB1ng PDA",slug:"lam-the-nao-\u0111e-ky-bang-pda",children:[{level:3,title:"Program",slug:"program-1",children:[]},{level:3,title:"Ng\u01B0\u1EDDi d\xF9ng",slug:"nguoi-dung-1",children:[]}]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 truy v\u1EA5n c\xE1c account c\u1EE7a m\u1ED9t program",slug:"lam-the-nao-\u0111e-truy-van-cac-account-cua-mot-program",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 \u0111\xF3ng account",slug:"lam-the-nao-\u0111e-\u0111ong-account",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 truy v\u1EA5n s\u1ED1 d\u01B0 c\u1EE7a m\u1ED9t account",slug:"lam-the-nao-\u0111e-truy-van-so-du-cua-mot-account",children:[]}],git:{updatedTime:1676666728e3},filePathRelative:"vi/references/accounts.md"};export{t as data}; diff --git a/docs/.vuepress/dist/assets/accounts.html.dd62e52e.js b/docs/.vuepress/dist/assets/accounts.html.408cca03.js similarity index 96% rename from docs/.vuepress/dist/assets/accounts.html.dd62e52e.js rename to docs/.vuepress/dist/assets/accounts.html.408cca03.js index f04f2859a..1b799870e 100644 --- a/docs/.vuepress/dist/assets/accounts.html.dd62e52e.js +++ b/docs/.vuepress/dist/assets/accounts.html.408cca03.js @@ -1,4 +1,4 @@ -import{_ as k,r as p,o as b,c as m,a as n,b as t,w as a,F as d,d as s,e as r}from"./app.cfdf84e7.js";const y={},_=n("h1",{id:"accounts",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#accounts","aria-hidden":"true"},"#"),s(" Accounts")],-1),f=n("h2",{id:"how-to-create-a-system-account",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-create-a-system-account","aria-hidden":"true"},"#"),s(" How to create a system account")],-1),g={href:"https://docs.solana.com/developing/clients/javascript-reference#systemprogram",target:"_blank",rel:"noopener noreferrer"},w=s("System Program"),h=s(" \uC774 \uC18C\uC720\uD558\uB294 Account \uB9CC\uB4DC\uC138\uC694. Solana runtime\uC740 acount\uC758 \uC18C\uC720\uC790\uC5D0\uAC8C \uB370\uC774\uD130\uB97C \uC4F0\uACE0 lamports\uB97C \uBCF4\uB0BC \uAD8C\uD55C\uC744 \uC904 \uAC83\uC785\uB2C8\uB2E4. Account\uB97C \uC0DD\uC131\uD560 \uB584, \uC6B0\uB9AC\uB294 \uACE0\uC815\uB41C bytes("),P=n("code",null,"space",-1),v=s(")\uB85C \uC800\uC7A5 \uACF5\uAC04\uACFC rent\uB97C \uCEE4\uBC84\uD558\uAE30 \uC704\uD55C \uCDA9\uBD84\uD55C lamports\uB97C \uBBF8\uB9AC \uD560\uB2F9\uD574\uC57C \uD569\uB2C8\uB2E4. "),A={href:"https://docs.solana.com/developing/programming-model/accounts#rent",target:"_blank",rel:"noopener noreferrer"},S=s("Rent"),x=s(" \uB294 Solana\uC5D0\uC11C account\uB97C \uC720\uC9C0\uD558\uAE30 \uC704\uD574 \uBC1C\uC0DD\uD558\uB294 \uBE44\uC6A9\uC785\uB2C8\uB2E4."),T=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` +import{_ as k,r as p,o as b,c as m,a as n,b as t,w as a,F as d,d as s,e as r}from"./app.2fbb9e96.js";const y={},_=n("h1",{id:"accounts",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#accounts","aria-hidden":"true"},"#"),s(" Accounts")],-1),f=n("h2",{id:"how-to-create-a-system-account",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-create-a-system-account","aria-hidden":"true"},"#"),s(" How to create a system account")],-1),g={href:"https://docs.solana.com/developing/clients/javascript-reference#systemprogram",target:"_blank",rel:"noopener noreferrer"},w=s("System Program"),h=s(" \uC774 \uC18C\uC720\uD558\uB294 Account \uB9CC\uB4DC\uC138\uC694. Solana runtime\uC740 acount\uC758 \uC18C\uC720\uC790\uC5D0\uAC8C \uB370\uC774\uD130\uB97C \uC4F0\uACE0 lamports\uB97C \uBCF4\uB0BC \uAD8C\uD55C\uC744 \uC904 \uAC83\uC785\uB2C8\uB2E4. Account\uB97C \uC0DD\uC131\uD560 \uB584, \uC6B0\uB9AC\uB294 \uACE0\uC815\uB41C bytes("),P=n("code",null,"space",-1),v=s(")\uB85C \uC800\uC7A5 \uACF5\uAC04\uACFC rent\uB97C \uCEE4\uBC84\uD558\uAE30 \uC704\uD55C \uCDA9\uBD84\uD55C lamports\uB97C \uBBF8\uB9AC \uD560\uB2F9\uD574\uC57C \uD569\uB2C8\uB2E4. "),A={href:"https://docs.solana.com/developing/programming-model/accounts#rent",target:"_blank",rel:"noopener noreferrer"},S=s("Rent"),x=s(" \uB294 Solana\uC5D0\uC11C account\uB97C \uC720\uC9C0\uD558\uAE30 \uC704\uD574 \uBC1C\uC0DD\uD558\uB294 \uBE44\uC6A9\uC785\uB2C8\uB2E4."),K=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` SystemProgram`),n("span",{class:"token punctuation"},","),s(` Keypair`),n("span",{class:"token punctuation"},","),s(` Transaction`),n("span",{class:"token punctuation"},","),s(` @@ -44,7 +44,7 @@ import{_ as k,r as p,o as b,c as m,a as n,b as t,w as a,F as d,d as s,e as r}fro newAccountPubkey`),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br")])],-1),K=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" createAccountParams "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"{"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br")])],-1),T=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" createAccountParams "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"{"),s(` fromPubkey`),n("span",{class:"token operator"},":"),s(" fromPubkey"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},","),s(` newAccountPubkey`),n("span",{class:"token operator"},":"),s(" newAccountPubkey"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},","),s(` lamports`),n("span",{class:"token operator"},":"),s(" rentExemptionAmount"),n("span",{class:"token punctuation"},","),s(` @@ -60,7 +60,7 @@ import{_ as k,r as p,o as b,c as m,a as n,b as t,w as a,F as d,d as s,e as r}fro fromPubkey`),n("span",{class:"token punctuation"},","),s(` newAccountPubkey`),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br")])],-1),R=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br")])],-1),C=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_program"),n("span",{class:"token punctuation"},"::")]),s("system_instruction"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("commitment_config"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("native_token"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token constant"},"LAMPORTS_PER_SOL"),n("span",{class:"token punctuation"},";"),s(` @@ -122,7 +122,7 @@ import{_ as k,r as p,o as b,c as m,a as n,b as t,w as a,F as d,d as s,e as r}fro `),n("span",{class:"token class-name"},"Err"),n("span",{class:"token punctuation"},"("),s("_"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token macro property"},"println!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Error creating system account"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br")])],-1),C=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" create_account_ix "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token namespace"},[s("system_instruction"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token function"},"create_account"),n("span",{class:"token punctuation"},"("),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br")])],-1),R=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" create_account_ix "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token namespace"},[s("system_instruction"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token function"},"create_account"),n("span",{class:"token punctuation"},"("),s(` `),n("span",{class:"token operator"},"&"),s("from_pubkey"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token operator"},"&"),s("new_account_pubkey"),n("span",{class:"token punctuation"},","),s(` rent_exemption_amount`),n("span",{class:"token punctuation"},","),s(` @@ -767,7 +767,7 @@ import{_ as k,r as p,o as b,c as m,a as n,b as t,w as a,F as d,d as s,e as r}fro `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),n("span",{class:"token template-string"},[n("span",{class:"token template-punctuation string"},"`"),n("span",{class:"token string"},"txhash: "),n("span",{class:"token interpolation"},[n("span",{class:"token interpolation-punctuation punctuation"},"${"),n("span",{class:"token keyword"},"await"),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"sendTransaction"),n("span",{class:"token punctuation"},"("),s("tx"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token punctuation"},"["),s("feePayer"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),n("span",{class:"token interpolation-punctuation punctuation"},"}")]),n("span",{class:"token template-punctuation string"},"`")]),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br")])],-1),An=n("h2",{id:"how-to-get-program-accounts",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-get-program-accounts","aria-hidden":"true"},"#"),s(" How to get program accounts")],-1),Sn=s("Program\uC5D0 \uC758\uD574 \uC18C\uC720\uB41C \uBAA8\uB4E0 Account\uB4E4\uC744 \uB9AC\uD134\uD558\uC138\uC694. "),xn=n("code",null,"getProgramAccounts",-1),Tn=s("\uC640 \uC774\uAC83\uC758 \uC124\uC815\uC5D0 \uB300\uD55C \uB354 \uC790\uC138\uD55C \uC815\uBCF4\uB294 "),Kn=s("guides section"),Rn=s("\uB97C \uCC38\uC870\uD558\uC138\uC694."),Cn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" clusterApiUrl"),n("span",{class:"token punctuation"},","),s(" Connection"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br")])],-1),An=n("h2",{id:"how-to-get-program-accounts",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-get-program-accounts","aria-hidden":"true"},"#"),s(" How to get program accounts")],-1),Sn=s("Program\uC5D0 \uC758\uD574 \uC18C\uC720\uB41C \uBAA8\uB4E0 Account\uB4E4\uC744 \uB9AC\uD134\uD558\uC138\uC694. "),xn=n("code",null,"getProgramAccounts",-1),Kn=s("\uC640 \uC774\uAC83\uC758 \uC124\uC815\uC5D0 \uB300\uD55C \uB354 \uC790\uC138\uD55C \uC815\uBCF4\uB294 "),Tn=s("guides section"),Cn=s("\uB97C \uCC38\uC870\uD558\uC138\uC694."),Rn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" clusterApiUrl"),n("span",{class:"token punctuation"},","),s(" Connection"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token constant"},"MY_PROGRAM_ID"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),s(` @@ -1005,19 +1005,44 @@ source_data`),n("span",{class:"token punctuation"},"."),n("span",{class:"token f `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br")])],-1),Qn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[s("connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"get_balance"),n("span",{class:"token punctuation"},"("),n("span",{class:"token operator"},"&"),s("wallet"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Jn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("publickey "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Jn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair `),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("api "),n("span",{class:"token keyword"},"import"),s(` Client client `),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),s(` key_pair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` -public_key `),n("span",{class:"token operator"},"="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s(`public_key +public_key `),n("span",{class:"token operator"},"="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("client"),n("span",{class:"token punctuation"},"."),s("get_balance"),n("span",{class:"token punctuation"},"("),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br")])],-1),$n=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("client "),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),s(` key_pair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` -public_key `),n("span",{class:"token operator"},"="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s(`public_key +public_key `),n("span",{class:"token operator"},"="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` client`),n("span",{class:"token punctuation"},"."),s("get_balance"),n("span",{class:"token punctuation"},"("),s("public_key"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),zn={class:"custom-container tip"},Xn=n("p",{class:"custom-container-title"},"TIP",-1),Zn=s("\uB9CC\uC57D Token balance\uB97C \uC5BB\uACE0 \uC2F6\uB2E4\uBA74 \uB2F9\uC2E0\uC740 Token Account\uC758 address\uB97C \uC54C \uD544\uC694\uAC00 \uC788\uC2B5\uB2C8\uB2E4. \uB354 \uC790\uC138\uD55C \uC815\uBCF4\uB294 "),ns=s("Token References"),ss=s("\uB97C \uCC38\uC870\uD558\uC138\uC694.");function as(ts,es){const l=p("ExternalLinkIcon"),e=p("SolanaCodeGroupItem"),o=p("SolanaCodeGroup"),c=p("CodeGroupItem"),u=p("CodeGroup"),i=p("RouterLink");return b(),m(d,null,[_,f,n("p",null,[n("a",g,[w,t(l)]),h,P,v,n("a",A,[S,t(l)]),x]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[T]),preview:a(()=>[K]),_:1}),t(e,{title:"Rust"},{default:a(()=>[R]),preview:a(()=>[C]),_:1})]),_:1}),L,n("p",null,[I,n("a",O,[U,t(l)]),E]),t(u,null,{default:a(()=>[t(c,{title:"TS",active:""},{default:a(()=>[M]),_:1}),t(c,{title:"Rust"},{default:a(()=>[G]),_:1}),t(c,{title:"CLI"},{default:a(()=>[F]),_:1})]),_:1}),B,N,W,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[q]),preview:a(()=>[H]),_:1}),t(e,{title:"Rust"},{default:a(()=>[V]),preview:a(()=>[Y]),_:1})]),_:1}),D,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[j]),preview:a(()=>[Q]),_:1}),t(e,{title:"Rust",active:""},{default:a(()=>[J]),preview:a(()=>[$]),_:1})]),_:1}),z,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[X]),preview:a(()=>[Z]),_:1})]),_:1}),nn,sn,n("p",null,[n("a",an,[tn,t(l)]),en]),on,t(u,null,{default:a(()=>[t(c,{title:"TS",active:""},{default:a(()=>[cn]),_:1}),t(c,{title:"Rust"},{default:a(()=>[pn]),_:1})]),_:1}),ln,t(o,null,{default:a(()=>[t(e,{title:"rust",active:""},{default:a(()=>[un]),preview:a(()=>[rn]),_:1})]),_:1}),kn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[bn]),preview:a(()=>[mn]),_:1})]),_:1}),dn,yn,_n,fn,t(o,null,{default:a(()=>[t(e,{title:"Rust",active:""},{default:a(()=>[gn]),preview:a(()=>[wn]),_:1})]),_:1}),hn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Pn]),preview:a(()=>[vn]),_:1})]),_:1}),An,n("p",null,[Sn,xn,Tn,t(i,{to:"/kr/guides/get-program-accounts.html"},{default:a(()=>[Kn]),_:1}),Rn]),t(u,null,{default:a(()=>[t(c,{title:"TS",active:""},{default:a(()=>[Cn]),_:1}),t(c,{title:"Rust"},{default:a(()=>[Ln]),_:1}),t(c,{title:"CLI"},{default:a(()=>[In]),_:1})]),_:1}),On,n("p",null,[Un,n("a",En,[Mn,t(l)]),Gn]),Fn,t(o,null,{default:a(()=>[t(e,{title:"rust",active:""},{default:a(()=>[Bn]),preview:a(()=>[Nn]),_:1})]),_:1}),Wn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[qn]),preview:a(()=>[Hn]),_:1})]),_:1}),Vn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Yn]),preview:a(()=>[Dn]),_:1}),t(e,{title:"Rust"},{default:a(()=>[jn]),preview:a(()=>[Qn]),_:1}),t(e,{title:"Python"},{default:a(()=>[Jn]),preview:a(()=>[$n]),_:1})]),_:1}),n("div",zn,[Xn,n("p",null,[Zn,t(i,{to:"/kr/references/token.html"},{default:a(()=>[ns]),_:1}),ss])])],64)}var cs=k(y,[["render",as]]);export{cs as default}; +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),zn=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token comment"},"// clang++ get_balance.cpp -o get_balance -std=c++17 -lssl -lcrypto -lsodium"),s(` + +`),n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + Connection `),n("span",{class:"token function"},"connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"auto"),s(" public_key "),n("span",{class:"token operator"},"="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"public_key = "'),s(),n("span",{class:"token operator"},"<<"),s(" public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"uint64_t"),s(" balance "),n("span",{class:"token operator"},"="),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"get_balance"),n("span",{class:"token punctuation"},"("),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"balance = "'),s(),n("span",{class:"token operator"},"<<"),s(" balance "),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"return"),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br")])],-1),Xn=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[s("Connection "),n("span",{class:"token function"},"connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token keyword"},"auto"),s(" public_key "),n("span",{class:"token operator"},"="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"uint64_t"),s(" balance "),n("span",{class:"token operator"},"="),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"get_balance"),n("span",{class:"token punctuation"},"("),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),Zn={class:"custom-container tip"},ns=n("p",{class:"custom-container-title"},"TIP",-1),ss=s("\uB9CC\uC57D Token balance\uB97C \uC5BB\uACE0 \uC2F6\uB2E4\uBA74 \uB2F9\uC2E0\uC740 Token Account\uC758 address\uB97C \uC54C \uD544\uC694\uAC00 \uC788\uC2B5\uB2C8\uB2E4. \uB354 \uC790\uC138\uD55C \uC815\uBCF4\uB294 "),as=s("Token References"),ts=s("\uB97C \uCC38\uC870\uD558\uC138\uC694.");function es(os,cs){const l=p("ExternalLinkIcon"),e=p("SolanaCodeGroupItem"),o=p("SolanaCodeGroup"),c=p("CodeGroupItem"),u=p("CodeGroup"),i=p("RouterLink");return b(),m(d,null,[_,f,n("p",null,[n("a",g,[w,t(l)]),h,P,v,n("a",A,[S,t(l)]),x]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[K]),preview:a(()=>[T]),_:1}),t(e,{title:"Rust"},{default:a(()=>[C]),preview:a(()=>[R]),_:1})]),_:1}),L,n("p",null,[I,n("a",O,[U,t(l)]),E]),t(u,null,{default:a(()=>[t(c,{title:"TS",active:""},{default:a(()=>[M]),_:1}),t(c,{title:"Rust"},{default:a(()=>[G]),_:1}),t(c,{title:"CLI"},{default:a(()=>[F]),_:1})]),_:1}),B,N,W,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[q]),preview:a(()=>[H]),_:1}),t(e,{title:"Rust"},{default:a(()=>[V]),preview:a(()=>[Y]),_:1})]),_:1}),D,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[j]),preview:a(()=>[Q]),_:1}),t(e,{title:"Rust",active:""},{default:a(()=>[J]),preview:a(()=>[$]),_:1})]),_:1}),z,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[X]),preview:a(()=>[Z]),_:1})]),_:1}),nn,sn,n("p",null,[n("a",an,[tn,t(l)]),en]),on,t(u,null,{default:a(()=>[t(c,{title:"TS",active:""},{default:a(()=>[cn]),_:1}),t(c,{title:"Rust"},{default:a(()=>[pn]),_:1})]),_:1}),ln,t(o,null,{default:a(()=>[t(e,{title:"rust",active:""},{default:a(()=>[un]),preview:a(()=>[rn]),_:1})]),_:1}),kn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[bn]),preview:a(()=>[mn]),_:1})]),_:1}),dn,yn,_n,fn,t(o,null,{default:a(()=>[t(e,{title:"Rust",active:""},{default:a(()=>[gn]),preview:a(()=>[wn]),_:1})]),_:1}),hn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Pn]),preview:a(()=>[vn]),_:1})]),_:1}),An,n("p",null,[Sn,xn,Kn,t(i,{to:"/kr/guides/get-program-accounts.html"},{default:a(()=>[Tn]),_:1}),Cn]),t(u,null,{default:a(()=>[t(c,{title:"TS",active:""},{default:a(()=>[Rn]),_:1}),t(c,{title:"Rust"},{default:a(()=>[Ln]),_:1}),t(c,{title:"CLI"},{default:a(()=>[In]),_:1})]),_:1}),On,n("p",null,[Un,n("a",En,[Mn,t(l)]),Gn]),Fn,t(o,null,{default:a(()=>[t(e,{title:"rust",active:""},{default:a(()=>[Bn]),preview:a(()=>[Nn]),_:1})]),_:1}),Wn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[qn]),preview:a(()=>[Hn]),_:1})]),_:1}),Vn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Yn]),preview:a(()=>[Dn]),_:1}),t(e,{title:"Rust"},{default:a(()=>[jn]),preview:a(()=>[Qn]),_:1}),t(e,{title:"Python"},{default:a(()=>[Jn]),preview:a(()=>[$n]),_:1}),t(e,{title:"C++"},{default:a(()=>[zn]),preview:a(()=>[Xn]),_:1})]),_:1}),n("div",Zn,[ns,n("p",null,[ss,t(i,{to:"/kr/references/token.html"},{default:a(()=>[as]),_:1}),ts])])],64)}var ls=k(y,[["render",es]]);export{ls as default}; diff --git a/docs/.vuepress/dist/assets/accounts.html.41ccbfe0.js b/docs/.vuepress/dist/assets/accounts.html.41ccbfe0.js deleted file mode 100644 index dc4880d70..000000000 --- a/docs/.vuepress/dist/assets/accounts.html.41ccbfe0.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as h,r as e,o as i,c as a,a as t,b as o,F as r,d as c,e as l}from"./app.cfdf84e7.js";var u="/assets/account_example.5b70d95a.jpeg";const s={},d=t("h1",{id:"account",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#account","aria-hidden":"true"},"#"),c(" Account")],-1),p=t("p",null,"Account trong l\u1EADp tr\xECnh Solana \u0111\u01B0\u1EE3c hi\u1EC3u nh\u01B0 m\u1ED9t v\xF9ng nh\u1EDB \u0111\u1EC3 l\u01B0u d\u1EEF li\u1EC7u. Ch\xFAng l\xE0 m\u1ED9t kh\u1ED1i c\u01A1 s\u1EDF trong qu\xE1 tr\xECnh ph\xE1t tri\u1EC3n \u1EE9ng d\u1EE5ng tr\xEAn Solana.",-1),m=t("h2",{id:"co-the-ban-chua-biet",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#co-the-ban-chua-biet","aria-hidden":"true"},"#"),c(" C\xF3 th\u1EC3 b\u1EA1n ch\u01B0a bi\u1EBFt")],-1),g={class:"custom-container tip"},_=t("p",{class:"custom-container-title"},"Nh\u1EEFng \u0111i\u1EC1u c\xF3 th\u1EC3 b\u1EA1n ch\u01B0a bi\u1EBFt",-1),A=t("li",null,"Account \u0111\u01B0\u01A1c d\xF9ng \u0111\u1EC3 l\u01B0u tr\u1EEF d\u1EEF li\u1EC7u",-1),b=t("li",null,"M\u1ED7i Account s\u1EBD c\xF3 m\u1ED9t \u0111\u1ECBa ch\u1EC9 duy nh\u1EA5t",-1),k=t("li",null,"Account c\xF3 k\xEDch th\u01B0\u1EDBc t\u1ED1i \u0111a l\xE0 10MB (10 Mega Bytes)",-1),f=t("li",null,"PDA Account c\xF3 k\xEDch th\u01B0\u1EDBc t\u1ED1i \u0111a l\xE0 10KB (10 Kilo Bytes)",-1),v=t("li",null,"PDA Account c\xF3 th\u1EC3 d\xF9ng \u0111\u1EC3 k\xFD \u0111\u1EA1i di\u1EC7n cho m\u1ED9t program",-1),y=c("K\xEDch th\u01B0\u1EDBc Account \u0111\u01B0\u1EE3c c\u1ED1 \u0111\u1ECBnh t\u1EA1i th\u1EDDi \u0111i\u1EC3m kh\u1EDFi t\u1EA1o, nh\u01B0ng v\u1EABn c\xF3 th\u1EC3 \u0111i\u1EC1u ch\u1EC9nh b\u1EB1ng "),x={href:"https://solanacookbook.com/references/programs.html#how-to-change-account-size",target:"_blank",rel:"noopener noreferrer"},S=c("realloc"),P=t("li",null,"V\xF9ng nh\u1EDB d\u1EEF li\u1EC7u \u0111\u01B0\u1EE3c c\u1EA5p ph\xE1t cho Account ph\u1EA3i \u0111\u01B0\u1EE3c thu\xEA b\u1EB1ng c\xE1ch tr\u1EA3 ph\xED",-1),w=t("li",null,"Account owner trong tr\u01B0\u1EDDng h\u1EE3p m\u1EB7c \u0111\u1ECBnh s\u1EBD l\xE0 System Program",-1),C=l('

Chi ti\u1EBFt

C\u1EA5u tr\xFAc Account

C\xF3 3 ki\u1EC3u Account tr\xEAn Solana:

  • Data Accounts d\xF9ng \u0111\u1EC3 l\u01B0u tr\u1EEF d\u1EEF li\u1EC7u
  • Program Accounts d\xF9ng \u0111\u1EC3 l\u01B0u ch\u01B0\u01A1ng tr\xECnh th\u1EF1c thi
  • Native Accounts \xE1m ch\u1EC9 native programs tr\xEAn Solana nh\u01B0 l\xE0 System, Stake, v\xE0 Vote

Ki\u1EC3u Data Account l\u1EA1i c\xF3 2 ki\u1EC3u con:

  • Account \u0111\u01B0\u1EE3c s\u1EDF h\u1EEFu b\u1EDFi System
  • PDA (Program Derived Address) Accounts

M\u1ED7i Account l\u1EA1i c\xF3 m\u1ED9t \u0111\u1ECBa ch\u1EC9 (th\u01B0\u1EDDng l\xE0 public key - kho\xE1 c\xF4ng khai) v\xE0 m\u1ED9t owner (\u0111\u1ECBa ch\u1EC9 c\u1EE7a m\u1ED9t Program Account). \u0110\u1EA7y \u0111\u1EE7 c\xE1c tr\u01B0\u1EDDng c\u1EE7a m\u1ED9t Account \u0111\u01B0\u1EE3c tr\xECnh b\xE0y \u1EDF b\u1EA3ng d\u01B0\u1EDBi.

Tr\u01B0\u1EDDngM\xF4 t\u1EA3
lamportsS\u1ED1 l\u01B0\u1EE3ng lamports trong Account \u0111\xF3ng
owner\u0110\u1ECBa ch\u1EC9 Program Account \u0111ang ki\u1EBFm so\xE1t Account \u0111\xF3
executableAccount n\xE0y c\xF3 th\u1EC3 th\u1EF1c thi c\xE1c ch\u1EC9 th\u1ECB hay kh\xF4ng?
dataD\u1EEF li\u1EC7u th\xF4 d\u01B0\u1EDBi d\u1EA1ng c\xE1c bytes \u0111\u01B0\u1EE3c l\u01B0u tr\u1EEF trong Account
rent_epochK\u1EF3 h\u1EA1n thu\xEA v\xF9ng nh\u1EDB ti\u1EBFp theo cho Account

C\xF3 m\u1ED9t v\xE0i quy t\u1EAFc quan tr\u1ECDng v\u1EC1 quy\u1EC1n s\u1EDF h\u1EEFu:

  • Ch\u1EC9 owner m\u1EDBi \u0111\u01B0\u1EE3c ch\u1EC9nh s\u1EEDa c\u0169ng nh\u01B0 r\xFAt s\u1ED1 lamports t\u1EEB m\u1ED9t Data Account
  • B\u1EA5t k\u1EF3 ai c\u0169ng \u0111\u01B0\u1EE3c ph\xE9p n\u1EA1p lamports v\xE0o m\u1ED9t Data Account
  • Owner c\u1EE7a m\u1ED9t Account c\xF3 th\u1EC3 \u0111\u01B0\u1EE3c g\xE1n cho m\u1ED9t owner m\u1EDBi khi v\xE0 ch\u1EC9 khi v\xF9ng nh\u1EDB c\u1EE7a Account \u0111\xF3 \u0111\u01B0\u1EE3c ho\xE0n tr\u1EA3

Program Accounts kh\xF4ng \u0111\u01B0\u1EE3c l\u01B0u b\u1EA5t k\u1EF3 tr\u1EA1ng th\xE1i.

V\xED d\u1EE5, n\u1EBFu b\u1EA1n c\xF3 m\u1ED9t ch\u01B0\u01A1ng tr\xECnh \u0111\u1EBFm tr\xEAn m\u1ED9t Program Account v\xE0 cho ph\xE9p t\u0103ng b\u1ED9 \u0111\u1EBFm l\xEAn sau m\u1ED7i l\u1EA7n t\u01B0\u01A1ng t\xE1c, b\u1EA1n ph\u1EA3i t\u1EA1o t\u1ED1i thi\u1EC3u 2 Account. Trong \u0111\xF3, m\u1ED9t cho Program Account \u0111\u1EC3 l\u01B0u code th\u1EF1c thi, v\xE0 m\u1ED9t cho Data Account \u0111\u1EC3 l\u01B0u d\u1EEF li\u1EC7u b\u1ED9 \u0111\u1EBFm.

\u0110\u1EC3 tr\xE1nh vi\u1EC7c m\u1ED9t Account b\u1ECB xo\xE1, b\u1EA1n ph\u1EA3i tr\u1EA3 chi ph\xED \u0111\u1EC3 thu\xEA v\xF9ng nh\u1EDB cho Account \u0111\xF3.

Thu\xEA

L\u01B0u tr\u1EEF d\u1EEF li\u1EC7u v\xE0o Account v\xE0 duy tr\xEC Account \u0111\xF3 s\u1EBD ph\xE1t sinh chi ph\xED SOL. Chi ph\xED n\xE0y \u0111\u01B0\u1EE3c g\u1ECDi l\xE0 chi ph\xED thu\xEA. N\u1EBFu chi ph\xED thu\xEA \u0111\u01B0\u1EE3c duy tr\xEC \u1EDF m\u1EE9c t\u1ED1i thi\u1EC3u l\xE0 2 n\u0103m cho Account \u0111\xF3, th\xEC b\u1EA1n s\u1EBD \u0111\u01B0\u1EE3c mi\u1EC5n ph\xED l\u01B0u tr\u1EEF. B\u1EA1n c\u0169ng c\xF3 th\u1EC3 thu h\u1ED3i l\u1EA1i ph\xED c\u1ECDc b\u1EB1ng c\xE1ch \u0111\xF3ng Account. S\u1ED1 lamports c\u1ECDc s\u1EBD \u0111\u01B0\u1EE3c ho\xE0n tr\u1EA3 v\u1EC1 \u0111\u1ECBa ch\u1EC9 v\xED c\u1EE7a b\u1EA1n.

Chi ph\xED thu\xEA \u0111\u01B0\u1EE3c t\xEDnh to\xE1n v\xE0 chi tr\u1EA3 \u1EDF 2 th\u1EDDi \u0111i\u1EC3m kh\xE1c nhau:

  1. Khi c\xF3 b\u1EA5t k\u1EF3 giao d\u1ECBch n\xE0o c\xF3 tham kh\u1EA3o \u0111\u1EBFn Account \u0111\xF3.
  2. \u0110\u1ECBnh k\u1EF3 m\u1ED7i epoch.

M\u1ED9t ph\u1EA7n c\u1EE7a chi ph\xED thu\xEA thu \u0111\u01B0\u1EE3c s\u1EBD \u0111\u01B0\u1EE3c ti\xEAu hu\u1EF7, trong khi ph\u1EA7n c\xF2n l\u1EA1i s\u1EBD \u0111\u01B0\u1EE3c ph\xE2n chia cho c\xE1c Vote Account sau m\u1ED7i slot.

N\u1EBFu m\u1ED9t Account kh\xF4ng \u0111\u1EE7 c\u1ECDc \u0111\u1EC3 chi tr\u1EA3 ph\xED thu\xEA, Account \u0111\xF3 s\u1EBD b\u1ECB thu h\u1ED3i v\xE0 to\xE0n b\u1ED9 d\u1EEF li\u1EC7u s\u1EBD b\u1ECB xo\xE1.

C\xE1c ngu\u1ED3n t\xE0i li\u1EC7u kh\xE1c

',21),D={href:"https://solana.wiki/zh-cn/docs/account-model/#account-storage",target:"_blank",rel:"noopener noreferrer"},B=c("Solana Account Model"),N={href:"https://docs.solana.com/developing/programming-model/accounts",target:"_blank",rel:"noopener noreferrer"},V=c("T\xE0i li\u1EC7u ch\xEDnh th\u1ED1ng"),K={href:"https://twitter.com/pencilflip/status/1452402100470644739",target:"_blank",rel:"noopener noreferrer"},M=c("pencilflip account thread"),T=t("h3",{id:"loi-cam-on",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#loi-cam-on","aria-hidden":"true"},"#"),c(" L\u1EDDi c\u1EA3m \u01A1n")],-1),L=c("Kh\xE1i ni\u1EC7m c\u0103n b\u1EA3n n\xE0y \u0111\u01B0\u1EE3c \u0111\xF3ng g\xF3p c\u1EE7a Pencilflip. "),q={href:"https://twitter.com/intent/user?screen_name=pencilflip",target:"_blank",rel:"noopener noreferrer"},E=c("Theo d\xF5i anh \u1EA5y tr\xEAn Twitter"),z=c(".");function F(I,O){const n=e("ExternalLinkIcon");return i(),a(r,null,[d,p,m,t("div",g,[_,t("ul",null,[A,b,k,f,v,t("li",null,[y,t("a",x,[S,o(n)])]),P,w])]),C,t("ul",null,[t("li",null,[t("a",D,[B,o(n)])]),t("li",null,[t("a",N,[V,o(n)])]),t("li",null,[t("a",K,[M,o(n)])])]),T,t("p",null,[L,t("a",q,[E,o(n)]),z])],64)}var G=h(s,[["render",F]]);export{G as default}; diff --git a/docs/.vuepress/dist/assets/accounts.html.f2bc2200.js b/docs/.vuepress/dist/assets/accounts.html.448c8f1b.js similarity index 97% rename from docs/.vuepress/dist/assets/accounts.html.f2bc2200.js rename to docs/.vuepress/dist/assets/accounts.html.448c8f1b.js index 7b6913fdf..b79d53ca0 100644 --- a/docs/.vuepress/dist/assets/accounts.html.f2bc2200.js +++ b/docs/.vuepress/dist/assets/accounts.html.448c8f1b.js @@ -1,4 +1,4 @@ -import{_ as k,r as p,o as b,c as m,a as n,b as t,w as a,F as d,d as s,e as r}from"./app.cfdf84e7.js";const y={},_=n("h1",{id:"accounts",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#accounts","aria-hidden":"true"},"#"),s(" Accounts")],-1),g=n("h2",{id:"lam-the-nao-\u0111e-tao-mot-system-account",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#lam-the-nao-\u0111e-tao-mot-system-account","aria-hidden":"true"},"#"),s(" L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 t\u1EA1o m\u1ED9t System Account")],-1),f=s("T\u1EA1o m\u1ED9t System Account ngh\u0129a l\xE0 t\u1EA1o m\u1ED9t Account v\u1EDBi ch\u1EE7 s\u1EDF h\u1EEFu l\xE0 "),w={href:"https://docs.solana.com/developing/clients/javascript-reference#systemprogram",target:"_blank",rel:"noopener noreferrer"},h=s("System Program"),P=s(". Khi th\u1EF1c thi, Solana s\u1EBD \u0111\u01B0\u1EE3c g\xE1n v\xE0o m\u1ED9t Account, truy c\xE2n \u0111\u1EC3 ghi d\u1EEF li\u1EC7u, ho\u1EB7c chuy\u1EC3n lamports. Khi kh\u1EDFi t\u1EA1o Account, ch\xFAng ta ph\u1EA3i ph\xE2n ph\xE1t m\u1ED9t v\xF9ng nh\u1EDB v\u1EDBi \u0111\u1ECD d\xE0i c\u1ED1 \u0111\u1ECBnh tr\u01B0\u1EDBc ti\xEAn ("),v=n("code",null,"space",-1),S=s(") v\xE0 s\u1ED1 lamports \u0111\u1EE7 \u0111\u1EC3 thu\xEA v\xF9ng nh\u1EDB \u0111\xF3. "),A={href:"https://docs.solana.com/developing/programming-model/accounts#rent",target:"_blank",rel:"noopener noreferrer"},x=s("Ph\xED thu\xEA"),T=s(" l\xE0 chi ph\xED tr\u1EA3 cho vi\u1EC7c gi\u1EEF v\xF9ng nh\u1EDB c\u1EE7a Account t\u1ED3n t\u1EA1i tr\xEAn Solana."),K=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` +import{_ as k,r as p,o as b,c as m,a as n,b as t,w as a,F as d,d as s,e as r}from"./app.2fbb9e96.js";const y={},_=n("h1",{id:"accounts",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#accounts","aria-hidden":"true"},"#"),s(" Accounts")],-1),g=n("h2",{id:"lam-the-nao-\u0111e-tao-mot-system-account",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#lam-the-nao-\u0111e-tao-mot-system-account","aria-hidden":"true"},"#"),s(" L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 t\u1EA1o m\u1ED9t System Account")],-1),f=s("T\u1EA1o m\u1ED9t System Account ngh\u0129a l\xE0 t\u1EA1o m\u1ED9t Account v\u1EDBi ch\u1EE7 s\u1EDF h\u1EEFu l\xE0 "),w={href:"https://docs.solana.com/developing/clients/javascript-reference#systemprogram",target:"_blank",rel:"noopener noreferrer"},h=s("System Program"),P=s(". Khi th\u1EF1c thi, Solana s\u1EBD \u0111\u01B0\u1EE3c g\xE1n v\xE0o m\u1ED9t Account, truy c\xE2n \u0111\u1EC3 ghi d\u1EEF li\u1EC7u, ho\u1EB7c chuy\u1EC3n lamports. Khi kh\u1EDFi t\u1EA1o Account, ch\xFAng ta ph\u1EA3i ph\xE2n ph\xE1t m\u1ED9t v\xF9ng nh\u1EDB v\u1EDBi \u0111\u1ECD d\xE0i c\u1ED1 \u0111\u1ECBnh tr\u01B0\u1EDBc ti\xEAn ("),v=n("code",null,"space",-1),S=s(") v\xE0 s\u1ED1 lamports \u0111\u1EE7 \u0111\u1EC3 thu\xEA v\xF9ng nh\u1EDB \u0111\xF3. "),A={href:"https://docs.solana.com/developing/programming-model/accounts#rent",target:"_blank",rel:"noopener noreferrer"},x=s("Ph\xED thu\xEA"),T=s(" l\xE0 chi ph\xED tr\u1EA3 cho vi\u1EC7c gi\u1EEF v\xF9ng nh\u1EDB c\u1EE7a Account t\u1ED3n t\u1EA1i tr\xEAn Solana."),K=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` SystemProgram`),n("span",{class:"token punctuation"},","),s(` Keypair`),n("span",{class:"token punctuation"},","),s(` Transaction`),n("span",{class:"token punctuation"},","),s(` @@ -44,7 +44,7 @@ import{_ as k,r as p,o as b,c as m,a as n,b as t,w as a,F as d,d as s,e as r}fro newAccountPubkey`),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br")])],-1),R=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" createAccountParams "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"{"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br")])],-1),C=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" createAccountParams "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"{"),s(` fromPubkey`),n("span",{class:"token operator"},":"),s(" fromPubkey"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},","),s(` newAccountPubkey`),n("span",{class:"token operator"},":"),s(" newAccountPubkey"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},","),s(` lamports`),n("span",{class:"token operator"},":"),s(" rentExemptionAmount"),n("span",{class:"token punctuation"},","),s(` @@ -60,7 +60,7 @@ import{_ as k,r as p,o as b,c as m,a as n,b as t,w as a,F as d,d as s,e as r}fro fromPubkey`),n("span",{class:"token punctuation"},","),s(` newAccountPubkey`),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br")])],-1),C=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br")])],-1),R=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_program"),n("span",{class:"token punctuation"},"::")]),s("system_instruction"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("commitment_config"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("native_token"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token constant"},"LAMPORTS_PER_SOL"),n("span",{class:"token punctuation"},";"),s(` @@ -767,7 +767,7 @@ import{_ as k,r as p,o as b,c as m,a as n,b as t,w as a,F as d,d as s,e as r}fro `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),n("span",{class:"token template-string"},[n("span",{class:"token template-punctuation string"},"`"),n("span",{class:"token string"},"txhash: "),n("span",{class:"token interpolation"},[n("span",{class:"token interpolation-punctuation punctuation"},"${"),n("span",{class:"token keyword"},"await"),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"sendTransaction"),n("span",{class:"token punctuation"},"("),s("tx"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token punctuation"},"["),s("feePayer"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),n("span",{class:"token interpolation-punctuation punctuation"},"}")]),n("span",{class:"token template-punctuation string"},"`")]),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br")])],-1),An=n("h2",{id:"lam-the-nao-\u0111e-truy-van-cac-account-cua-mot-program",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#lam-the-nao-\u0111e-truy-van-cac-account-cua-mot-program","aria-hidden":"true"},"#"),s(" L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 truy v\u1EA5n c\xE1c account c\u1EE7a m\u1ED9t program")],-1),xn=s("\u0110\u1EC3 truy v\u1EA5n t\u1EA5t c\u1EA3 c\xE1c account \u0111\u01B0\u1EE3c s\u1EDF h\u1EEFu b\u1EDFi m\u1ED9t program, tham kh\u1EA3o "),Tn=s("ph\u1EA7n h\u01B0\u1EDBng d\u1EABn"),Kn=s(" \u0111\u1EC3 hi\u1EC3u v\u1EC1 h\xE0m "),Rn=n("code",null,"getProgramAccounts",-1),Cn=s(" v\xE0 tham s\u1ED1 c\u1EE7a n\xF3."),Ln=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" clusterApiUrl"),n("span",{class:"token punctuation"},","),s(" Connection"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br")])],-1),An=n("h2",{id:"lam-the-nao-\u0111e-truy-van-cac-account-cua-mot-program",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#lam-the-nao-\u0111e-truy-van-cac-account-cua-mot-program","aria-hidden":"true"},"#"),s(" L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 truy v\u1EA5n c\xE1c account c\u1EE7a m\u1ED9t program")],-1),xn=s("\u0110\u1EC3 truy v\u1EA5n t\u1EA5t c\u1EA3 c\xE1c account \u0111\u01B0\u1EE3c s\u1EDF h\u1EEFu b\u1EDFi m\u1ED9t program, tham kh\u1EA3o "),Tn=s("ph\u1EA7n h\u01B0\u1EDBng d\u1EABn"),Kn=s(" \u0111\u1EC3 hi\u1EC3u v\u1EC1 h\xE0m "),Cn=n("code",null,"getProgramAccounts",-1),Rn=s(" v\xE0 tham s\u1ED1 c\u1EE7a n\xF3."),Ln=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" clusterApiUrl"),n("span",{class:"token punctuation"},","),s(" Connection"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token constant"},"MY_PROGRAM_ID"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),s(` @@ -1005,19 +1005,44 @@ source_data`),n("span",{class:"token punctuation"},"."),n("span",{class:"token f `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br")])],-1),Hn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[s("connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"get_balance"),n("span",{class:"token punctuation"},"("),n("span",{class:"token operator"},"&"),s("wallet"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),$n=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("publickey "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),$n=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair `),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("api "),n("span",{class:"token keyword"},"import"),s(` Client client `),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),s(` key_pair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` -public_key `),n("span",{class:"token operator"},"="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s(`public_key +public_key `),n("span",{class:"token operator"},"="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("client"),n("span",{class:"token punctuation"},"."),s("get_balance"),n("span",{class:"token punctuation"},"("),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br")])],-1),zn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("client "),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),s(` key_pair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` -public_key `),n("span",{class:"token operator"},"="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s(`public_key +public_key `),n("span",{class:"token operator"},"="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` client`),n("span",{class:"token punctuation"},"."),s("get_balance"),n("span",{class:"token punctuation"},"("),s("public_key"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),Xn={class:"custom-container tip"},Zn=n("p",{class:"custom-container-title"},"TIP",-1),ns=s("N\u1EBFu b\u1EA1n mu\u1ED1n \u0111\u1ECDc s\u1ED1 d\u01B0 token, b\u1EA1n s\u1EBD c\u1EA7n bi\u1EBFt \u0111\u1ECBa ch\u1EC9 c\u1EE7a token account. Tham kh\u1EA3o "),ss=s("Token References"),as=s(" \u0111\u1EC3 hi\u1EC3u r\xF5.");function ts(es,os){const l=p("ExternalLinkIcon"),e=p("SolanaCodeGroupItem"),o=p("SolanaCodeGroup"),c=p("CodeGroupItem"),u=p("CodeGroup"),i=p("RouterLink");return b(),m(d,null,[_,g,n("p",null,[f,n("a",w,[h,t(l)]),P,v,S,n("a",A,[x,t(l)]),T]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[K]),preview:a(()=>[R]),_:1}),t(e,{title:"Rust"},{default:a(()=>[C]),preview:a(()=>[L]),_:1})]),_:1}),I,n("p",null,[O,n("a",U,[E,t(l)]),M]),t(u,null,{default:a(()=>[t(c,{title:"TS",active:""},{default:a(()=>[B]),_:1}),t(c,{title:"Rust"},{default:a(()=>[F]),_:1}),t(c,{title:"CLI"},{default:a(()=>[G]),_:1})]),_:1}),N,q,W,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[V]),preview:a(()=>[D]),_:1}),t(e,{title:"Rust"},{default:a(()=>[Y]),preview:a(()=>[j]),_:1})]),_:1}),Q,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[J]),preview:a(()=>[H]),_:1}),t(e,{title:"Rust",active:""},{default:a(()=>[$]),preview:a(()=>[z]),_:1})]),_:1}),X,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Z]),preview:a(()=>[nn]),_:1})]),_:1}),sn,an,n("p",null,[n("a",tn,[en,t(l)]),on]),cn,t(u,null,{default:a(()=>[t(c,{title:"TS",active:""},{default:a(()=>[pn]),_:1}),t(c,{title:"Rust"},{default:a(()=>[ln]),_:1})]),_:1}),un,t(o,null,{default:a(()=>[t(e,{title:"rust",active:""},{default:a(()=>[rn]),preview:a(()=>[kn]),_:1})]),_:1}),bn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[mn]),preview:a(()=>[dn]),_:1})]),_:1}),yn,_n,gn,fn,t(o,null,{default:a(()=>[t(e,{title:"Rust",active:""},{default:a(()=>[wn]),preview:a(()=>[hn]),_:1})]),_:1}),Pn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[vn]),preview:a(()=>[Sn]),_:1})]),_:1}),An,n("p",null,[xn,t(i,{to:"/vi/guides/get-program-accounts.html"},{default:a(()=>[Tn]),_:1}),Kn,Rn,Cn]),t(u,null,{default:a(()=>[t(c,{title:"TS",active:""},{default:a(()=>[Ln]),_:1}),t(c,{title:"Rust"},{default:a(()=>[In]),_:1}),t(c,{title:"CLI"},{default:a(()=>[On]),_:1})]),_:1}),Un,n("p",null,[En,n("a",Mn,[Bn,t(l)]),Fn]),Gn,t(o,null,{default:a(()=>[t(e,{title:"rust",active:""},{default:a(()=>[Nn]),preview:a(()=>[qn]),_:1})]),_:1}),Wn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Vn]),preview:a(()=>[Dn]),_:1})]),_:1}),Yn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[jn]),preview:a(()=>[Qn]),_:1}),t(e,{title:"Rust"},{default:a(()=>[Jn]),preview:a(()=>[Hn]),_:1}),t(e,{title:"Python"},{default:a(()=>[$n]),preview:a(()=>[zn]),_:1})]),_:1}),n("div",Xn,[Zn,n("p",null,[ns,t(i,{to:"/vi/references/token.html"},{default:a(()=>[ss]),_:1}),as])])],64)}var ps=k(y,[["render",ts]]);export{ps as default}; +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),Xn=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token comment"},"// clang++ get_balance.cpp -o get_balance -std=c++17 -lssl -lcrypto -lsodium"),s(` + +`),n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + Connection `),n("span",{class:"token function"},"connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"auto"),s(" public_key "),n("span",{class:"token operator"},"="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"public_key = "'),s(),n("span",{class:"token operator"},"<<"),s(" public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"uint64_t"),s(" balance "),n("span",{class:"token operator"},"="),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"get_balance"),n("span",{class:"token punctuation"},"("),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"balance = "'),s(),n("span",{class:"token operator"},"<<"),s(" balance "),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"return"),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br")])],-1),Zn=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[s("Connection "),n("span",{class:"token function"},"connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token keyword"},"auto"),s(" public_key "),n("span",{class:"token operator"},"="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"uint64_t"),s(" balance "),n("span",{class:"token operator"},"="),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"get_balance"),n("span",{class:"token punctuation"},"("),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),ns={class:"custom-container tip"},ss=n("p",{class:"custom-container-title"},"TIP",-1),as=s("N\u1EBFu b\u1EA1n mu\u1ED1n \u0111\u1ECDc s\u1ED1 d\u01B0 token, b\u1EA1n s\u1EBD c\u1EA7n bi\u1EBFt \u0111\u1ECBa ch\u1EC9 c\u1EE7a token account. Tham kh\u1EA3o "),ts=s("Token References"),es=s(" \u0111\u1EC3 hi\u1EC3u r\xF5.");function os(cs,ps){const l=p("ExternalLinkIcon"),e=p("SolanaCodeGroupItem"),o=p("SolanaCodeGroup"),c=p("CodeGroupItem"),u=p("CodeGroup"),i=p("RouterLink");return b(),m(d,null,[_,g,n("p",null,[f,n("a",w,[h,t(l)]),P,v,S,n("a",A,[x,t(l)]),T]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[K]),preview:a(()=>[C]),_:1}),t(e,{title:"Rust"},{default:a(()=>[R]),preview:a(()=>[L]),_:1})]),_:1}),I,n("p",null,[O,n("a",U,[E,t(l)]),M]),t(u,null,{default:a(()=>[t(c,{title:"TS",active:""},{default:a(()=>[B]),_:1}),t(c,{title:"Rust"},{default:a(()=>[F]),_:1}),t(c,{title:"CLI"},{default:a(()=>[G]),_:1})]),_:1}),N,q,W,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[V]),preview:a(()=>[D]),_:1}),t(e,{title:"Rust"},{default:a(()=>[Y]),preview:a(()=>[j]),_:1})]),_:1}),Q,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[J]),preview:a(()=>[H]),_:1}),t(e,{title:"Rust",active:""},{default:a(()=>[$]),preview:a(()=>[z]),_:1})]),_:1}),X,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Z]),preview:a(()=>[nn]),_:1})]),_:1}),sn,an,n("p",null,[n("a",tn,[en,t(l)]),on]),cn,t(u,null,{default:a(()=>[t(c,{title:"TS",active:""},{default:a(()=>[pn]),_:1}),t(c,{title:"Rust"},{default:a(()=>[ln]),_:1})]),_:1}),un,t(o,null,{default:a(()=>[t(e,{title:"rust",active:""},{default:a(()=>[rn]),preview:a(()=>[kn]),_:1})]),_:1}),bn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[mn]),preview:a(()=>[dn]),_:1})]),_:1}),yn,_n,gn,fn,t(o,null,{default:a(()=>[t(e,{title:"Rust",active:""},{default:a(()=>[wn]),preview:a(()=>[hn]),_:1})]),_:1}),Pn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[vn]),preview:a(()=>[Sn]),_:1})]),_:1}),An,n("p",null,[xn,t(i,{to:"/vi/guides/get-program-accounts.html"},{default:a(()=>[Tn]),_:1}),Kn,Cn,Rn]),t(u,null,{default:a(()=>[t(c,{title:"TS",active:""},{default:a(()=>[Ln]),_:1}),t(c,{title:"Rust"},{default:a(()=>[In]),_:1}),t(c,{title:"CLI"},{default:a(()=>[On]),_:1})]),_:1}),Un,n("p",null,[En,n("a",Mn,[Bn,t(l)]),Fn]),Gn,t(o,null,{default:a(()=>[t(e,{title:"rust",active:""},{default:a(()=>[Nn]),preview:a(()=>[qn]),_:1})]),_:1}),Wn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Vn]),preview:a(()=>[Dn]),_:1})]),_:1}),Yn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[jn]),preview:a(()=>[Qn]),_:1}),t(e,{title:"Rust"},{default:a(()=>[Jn]),preview:a(()=>[Hn]),_:1}),t(e,{title:"Python"},{default:a(()=>[$n]),preview:a(()=>[zn]),_:1}),t(e,{title:"C++"},{default:a(()=>[Xn]),preview:a(()=>[Zn]),_:1})]),_:1}),n("div",ns,[ss,n("p",null,[as,t(i,{to:"/vi/references/token.html"},{default:a(()=>[ts]),_:1}),es])])],64)}var us=k(y,[["render",os]]);export{us as default}; diff --git a/docs/.vuepress/dist/assets/accounts.html.6fe629f9.js b/docs/.vuepress/dist/assets/accounts.html.4db5c346.js similarity index 97% rename from docs/.vuepress/dist/assets/accounts.html.6fe629f9.js rename to docs/.vuepress/dist/assets/accounts.html.4db5c346.js index e59c6b8ae..25fd97c4f 100644 --- a/docs/.vuepress/dist/assets/accounts.html.6fe629f9.js +++ b/docs/.vuepress/dist/assets/accounts.html.4db5c346.js @@ -1,4 +1,4 @@ -import{_ as k,r as p,o as b,c as m,a as n,b as t,w as a,F as d,d as s,e as i}from"./app.cfdf84e7.js";const y={},g=n("h1",{id:"akun",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#akun","aria-hidden":"true"},"#"),s(" Akun")],-1),_=n("h2",{id:"bagaimana-cara-membuat-sebuah-sistem-akun",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#bagaimana-cara-membuat-sebuah-sistem-akun","aria-hidden":"true"},"#"),s(" Bagaimana cara membuat sebuah sistem akun")],-1),f=s("Membuat sistem akun ("),w=n("em",null,"system account",-1),h=s(") yang dimiliki oleh "),P={href:"https://docs.solana.com/developing/clients/javascript-reference#systemprogram",target:"_blank",rel:"noopener noreferrer"},v=s("System Program"),S=s(". Solana runtime akan memberikan akses ke pemilik akun, akses untuk menulis ke dalam datanya sendiri dana mentransfer lamports. Ketika membuat sebuah account, kita harus mempersiapkan kapasitas penyimpanan tetap dalam bytes ("),A=n("code",null,"space",-1),x=s(") dan lamports yang cukup untuk mencover rent. "),K={href:"https://docs.solana.com/developing/programming-model/accounts#rent",target:"_blank",rel:"noopener noreferrer"},T=s("Rent"),C=s(" adalah biaya yang ditimbulkan untuk menjaga agar account tetap hidup di Solana."),R=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` +import{_ as k,r as p,o as b,c as m,a as n,b as t,w as a,F as d,d as s,e as i}from"./app.2fbb9e96.js";const y={},_=n("h1",{id:"akun",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#akun","aria-hidden":"true"},"#"),s(" Akun")],-1),g=n("h2",{id:"bagaimana-cara-membuat-sebuah-sistem-akun",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#bagaimana-cara-membuat-sebuah-sistem-akun","aria-hidden":"true"},"#"),s(" Bagaimana cara membuat sebuah sistem akun")],-1),f=s("Membuat sistem akun ("),w=n("em",null,"system account",-1),h=s(") yang dimiliki oleh "),P={href:"https://docs.solana.com/developing/clients/javascript-reference#systemprogram",target:"_blank",rel:"noopener noreferrer"},v=s("System Program"),S=s(". Solana runtime akan memberikan akses ke pemilik akun, akses untuk menulis ke dalam datanya sendiri dana mentransfer lamports. Ketika membuat sebuah account, kita harus mempersiapkan kapasitas penyimpanan tetap dalam bytes ("),A=n("code",null,"space",-1),x=s(") dan lamports yang cukup untuk mencover rent. "),K={href:"https://docs.solana.com/developing/programming-model/accounts#rent",target:"_blank",rel:"noopener noreferrer"},T=s("Rent"),C=s(" adalah biaya yang ditimbulkan untuk menjaga agar account tetap hidup di Solana."),R=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` SystemProgram`),n("span",{class:"token punctuation"},","),s(` Keypair`),n("span",{class:"token punctuation"},","),s(` Transaction`),n("span",{class:"token punctuation"},","),s(` @@ -585,7 +585,7 @@ import{_ as k,r as p,o as b,c as m,a as n,b as t,w as a,F as d,d as s,e as i}fro `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),n("span",{class:"token template-string"},[n("span",{class:"token template-punctuation string"},"`"),n("span",{class:"token string"},"txhash: "),n("span",{class:"token interpolation"},[n("span",{class:"token interpolation-punctuation punctuation"},"${"),n("span",{class:"token keyword"},"await"),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"sendTransaction"),n("span",{class:"token punctuation"},"("),s("tx"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token punctuation"},"["),s("feePayer"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),n("span",{class:"token interpolation-punctuation punctuation"},"}")]),n("span",{class:"token template-punctuation string"},"`")]),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br"),n("span",{class:"line-number"},"69"),n("br")])],-1),gn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" tx "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Transaction"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"add"),n("span",{class:"token punctuation"},"("),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br"),n("span",{class:"line-number"},"69"),n("br")])],-1),_n=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" tx "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Transaction"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"add"),n("span",{class:"token punctuation"},"("),s(` `),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"TransactionInstruction"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"{"),s(` keys`),n("span",{class:"token operator"},":"),s(),n("span",{class:"token punctuation"},"["),s(` `),n("span",{class:"token punctuation"},"{"),s(` @@ -615,7 +615,7 @@ import{_ as k,r as p,o as b,c as m,a as n,b as t,w as a,F as d,d as s,e as i}fro `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),n("span",{class:"token template-string"},[n("span",{class:"token template-punctuation string"},"`"),n("span",{class:"token string"},"txhash: "),n("span",{class:"token interpolation"},[n("span",{class:"token interpolation-punctuation punctuation"},"${"),n("span",{class:"token keyword"},"await"),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"sendTransaction"),n("span",{class:"token punctuation"},"("),s("tx"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token punctuation"},"["),s("feePayer"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),n("span",{class:"token interpolation-punctuation punctuation"},"}")]),n("span",{class:"token template-punctuation string"},"`")]),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br")])],-1),_n=i('

Bagaimana cara untuk sign sebuah PDA

PDA hanya dapat di "sign" dalam lingkup program. Berikut adalah sebuah contoh program untuk "sign" dengan sebuah PDA dan memanggil program dari client.

Program

Instruksi tunggal berikut melakukan transfer SOL dari PDA yang di derive dari seed escrow ke akun. invoke_signed digunakan untuk sign dengan PDA.

',4),fn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_program"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br")])],-1),gn=i('

Bagaimana cara untuk sign sebuah PDA

PDA hanya dapat di "sign" dalam lingkup program. Berikut adalah sebuah contoh program untuk "sign" dengan sebuah PDA dan memanggil program dari client.

Program

Instruksi tunggal berikut melakukan transfer SOL dari PDA yang di derive dari seed escrow ke akun. invoke_signed digunakan untuk sign dengan PDA.

',4),fn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_program"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token namespace"},[s("account_info"),n("span",{class:"token punctuation"},"::")]),s("next_account_info"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token namespace"},[s("account_info"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"AccountInfo"),n("span",{class:"token punctuation"},","),s(" entrypoint"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token namespace"},[s("entrypoint"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"ProgramResult"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token namespace"},[s("program"),n("span",{class:"token punctuation"},"::")]),s("invoke_signed"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token namespace"},[s("pubkey"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"Pubkey"),n("span",{class:"token punctuation"},","),s(" system_instruction"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` @@ -1005,19 +1005,44 @@ source_data`),n("span",{class:"token punctuation"},"."),n("span",{class:"token f `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br")])],-1),Qn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[s("connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"get_balance"),n("span",{class:"token punctuation"},"("),n("span",{class:"token operator"},"&"),s("wallet"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Hn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("publickey "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Hn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair `),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("api "),n("span",{class:"token keyword"},"import"),s(` Client client `),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),s(` key_pair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` -public_key `),n("span",{class:"token operator"},"="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s(`public_key +public_key `),n("span",{class:"token operator"},"="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("client"),n("span",{class:"token punctuation"},"."),s("get_balance"),n("span",{class:"token punctuation"},"("),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br")])],-1),$n=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("client "),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),s(` key_pair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` -public_key `),n("span",{class:"token operator"},"="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s(`public_key +public_key `),n("span",{class:"token operator"},"="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` client`),n("span",{class:"token punctuation"},"."),s("get_balance"),n("span",{class:"token punctuation"},"("),s("public_key"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),zn={class:"custom-container tip"},Xn=n("p",{class:"custom-container-title"},"TIP",-1),Zn=s("Jika kita mau mendapatkan token balance, kita harus mengetahui alamat dari sebuah token akun. Untuk info lebih lanjut, lihat "),ns=s("Token References");function ss(as,ts){const l=p("ExternalLinkIcon"),e=p("SolanaCodeGroupItem"),o=p("SolanaCodeGroup"),c=p("CodeGroupItem"),u=p("CodeGroup"),r=p("RouterLink");return b(),m(d,null,[g,_,n("p",null,[f,w,h,n("a",P,[v,t(l)]),S,A,x,n("a",K,[T,t(l)]),C]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[R]),preview:a(()=>[L]),_:1}),t(e,{title:"Rust"},{default:a(()=>[I]),preview:a(()=>[O]),_:1})]),_:1}),U,n("p",null,[E,n("a",M,[B,t(l)]),F]),t(u,null,{default:a(()=>[t(c,{title:"TS",active:""},{default:a(()=>[G]),_:1}),t(c,{title:"Rust"},{default:a(()=>[q]),_:1}),t(c,{title:"CLI"},{default:a(()=>[N]),_:1})]),_:1}),W,j,V,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Y]),preview:a(()=>[D]),_:1}),t(e,{title:"Rust"},{default:a(()=>[J]),preview:a(()=>[Q]),_:1})]),_:1}),H,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[$]),preview:a(()=>[z]),_:1}),t(e,{title:"Rust",active:""},{default:a(()=>[X]),preview:a(()=>[Z]),_:1})]),_:1}),nn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[sn]),preview:a(()=>[an]),_:1})]),_:1}),tn,en,n("p",null,[n("a",on,[cn,t(l)]),pn]),ln,t(u,null,{default:a(()=>[t(c,{title:"TS",active:""},{default:a(()=>[un]),_:1}),t(c,{title:"Rust"},{default:a(()=>[rn]),_:1})]),_:1}),kn,t(o,null,{default:a(()=>[t(e,{title:"rust",active:""},{default:a(()=>[bn]),preview:a(()=>[mn]),_:1})]),_:1}),dn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[yn]),preview:a(()=>[gn]),_:1})]),_:1}),_n,t(o,null,{default:a(()=>[t(e,{title:"Rust",active:""},{default:a(()=>[fn]),preview:a(()=>[wn]),_:1})]),_:1}),hn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Pn]),preview:a(()=>[vn]),_:1})]),_:1}),Sn,n("p",null,[An,t(r,{to:"/id/guides/get-program-accounts.html"},{default:a(()=>[xn]),_:1}),Kn,Tn,Cn]),t(u,null,{default:a(()=>[t(c,{title:"TS",active:""},{default:a(()=>[Rn]),_:1}),t(c,{title:"Rust"},{default:a(()=>[Ln]),_:1}),t(c,{title:"CLI"},{default:a(()=>[In]),_:1})]),_:1}),On,n("p",null,[Un,n("a",En,[Mn,t(l)]),Bn]),Fn,t(o,null,{default:a(()=>[t(e,{title:"rust",active:""},{default:a(()=>[Gn]),preview:a(()=>[qn]),_:1})]),_:1}),Nn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Wn]),preview:a(()=>[jn]),_:1})]),_:1}),Vn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Yn]),preview:a(()=>[Dn]),_:1}),t(e,{title:"Rust"},{default:a(()=>[Jn]),preview:a(()=>[Qn]),_:1}),t(e,{title:"Python"},{default:a(()=>[Hn]),preview:a(()=>[$n]),_:1})]),_:1}),n("div",zn,[Xn,n("p",null,[Zn,t(r,{to:"/id/references/token.html"},{default:a(()=>[ns]),_:1})])])],64)}var os=k(y,[["render",ss]]);export{os as default}; +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),zn=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token comment"},"// clang++ get_balance.cpp -o get_balance -std=c++17 -lssl -lcrypto -lsodium"),s(` + +`),n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + Connection `),n("span",{class:"token function"},"connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"auto"),s(" public_key "),n("span",{class:"token operator"},"="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"public_key = "'),s(),n("span",{class:"token operator"},"<<"),s(" public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"uint64_t"),s(" balance "),n("span",{class:"token operator"},"="),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"get_balance"),n("span",{class:"token punctuation"},"("),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"balance = "'),s(),n("span",{class:"token operator"},"<<"),s(" balance "),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"return"),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br")])],-1),Xn=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[s("Connection "),n("span",{class:"token function"},"connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token keyword"},"auto"),s(" public_key "),n("span",{class:"token operator"},"="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"uint64_t"),s(" balance "),n("span",{class:"token operator"},"="),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"get_balance"),n("span",{class:"token punctuation"},"("),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),Zn={class:"custom-container tip"},ns=n("p",{class:"custom-container-title"},"TIP",-1),ss=s("Jika kita mau mendapatkan token balance, kita harus mengetahui alamat dari sebuah token akun. Untuk info lebih lanjut, lihat "),as=s("Token References");function ts(es,os){const l=p("ExternalLinkIcon"),e=p("SolanaCodeGroupItem"),o=p("SolanaCodeGroup"),c=p("CodeGroupItem"),u=p("CodeGroup"),r=p("RouterLink");return b(),m(d,null,[_,g,n("p",null,[f,w,h,n("a",P,[v,t(l)]),S,A,x,n("a",K,[T,t(l)]),C]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[R]),preview:a(()=>[L]),_:1}),t(e,{title:"Rust"},{default:a(()=>[I]),preview:a(()=>[O]),_:1})]),_:1}),U,n("p",null,[E,n("a",M,[B,t(l)]),F]),t(u,null,{default:a(()=>[t(c,{title:"TS",active:""},{default:a(()=>[G]),_:1}),t(c,{title:"Rust"},{default:a(()=>[q]),_:1}),t(c,{title:"CLI"},{default:a(()=>[N]),_:1})]),_:1}),W,j,V,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Y]),preview:a(()=>[D]),_:1}),t(e,{title:"Rust"},{default:a(()=>[J]),preview:a(()=>[Q]),_:1})]),_:1}),H,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[$]),preview:a(()=>[z]),_:1}),t(e,{title:"Rust",active:""},{default:a(()=>[X]),preview:a(()=>[Z]),_:1})]),_:1}),nn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[sn]),preview:a(()=>[an]),_:1})]),_:1}),tn,en,n("p",null,[n("a",on,[cn,t(l)]),pn]),ln,t(u,null,{default:a(()=>[t(c,{title:"TS",active:""},{default:a(()=>[un]),_:1}),t(c,{title:"Rust"},{default:a(()=>[rn]),_:1})]),_:1}),kn,t(o,null,{default:a(()=>[t(e,{title:"rust",active:""},{default:a(()=>[bn]),preview:a(()=>[mn]),_:1})]),_:1}),dn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[yn]),preview:a(()=>[_n]),_:1})]),_:1}),gn,t(o,null,{default:a(()=>[t(e,{title:"Rust",active:""},{default:a(()=>[fn]),preview:a(()=>[wn]),_:1})]),_:1}),hn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Pn]),preview:a(()=>[vn]),_:1})]),_:1}),Sn,n("p",null,[An,t(r,{to:"/id/guides/get-program-accounts.html"},{default:a(()=>[xn]),_:1}),Kn,Tn,Cn]),t(u,null,{default:a(()=>[t(c,{title:"TS",active:""},{default:a(()=>[Rn]),_:1}),t(c,{title:"Rust"},{default:a(()=>[Ln]),_:1}),t(c,{title:"CLI"},{default:a(()=>[In]),_:1})]),_:1}),On,n("p",null,[Un,n("a",En,[Mn,t(l)]),Bn]),Fn,t(o,null,{default:a(()=>[t(e,{title:"rust",active:""},{default:a(()=>[Gn]),preview:a(()=>[qn]),_:1})]),_:1}),Nn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Wn]),preview:a(()=>[jn]),_:1})]),_:1}),Vn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Yn]),preview:a(()=>[Dn]),_:1}),t(e,{title:"Rust"},{default:a(()=>[Jn]),preview:a(()=>[Qn]),_:1}),t(e,{title:"Python"},{default:a(()=>[Hn]),preview:a(()=>[$n]),_:1}),t(e,{title:"C++"},{default:a(()=>[zn]),preview:a(()=>[Xn]),_:1})]),_:1}),n("div",Zn,[ns,n("p",null,[ss,t(r,{to:"/id/references/token.html"},{default:a(()=>[as]),_:1})])])],64)}var ps=k(y,[["render",ts]]);export{ps as default}; diff --git a/docs/.vuepress/dist/assets/accounts.html.27dab1e8.js b/docs/.vuepress/dist/assets/accounts.html.55e1f46e.js similarity index 97% rename from docs/.vuepress/dist/assets/accounts.html.27dab1e8.js rename to docs/.vuepress/dist/assets/accounts.html.55e1f46e.js index 4b0a57f83..6e85c9664 100644 --- a/docs/.vuepress/dist/assets/accounts.html.27dab1e8.js +++ b/docs/.vuepress/dist/assets/accounts.html.55e1f46e.js @@ -1,4 +1,4 @@ -import{_ as k,r as p,o as b,c as m,a as n,b as t,w as a,F as d,d as s,e as r}from"./app.cfdf84e7.js";const y={},_=n("h1",{id:"accounts",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#accounts","aria-hidden":"true"},"#"),s(" Accounts")],-1),f=n("h2",{id:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07-system-account",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07-system-account","aria-hidden":"true"},"#"),s(" \u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07 system account")],-1),g=s("\u0E43\u0E19\u0E01\u0E32\u0E23\u0E2A\u0E23\u0E49\u0E32\u0E07 account \u0E17\u0E35\u0E48 "),w={href:"https://docs.solana.com/developing/clients/javascript-reference#systemprogram",target:"_blank",rel:"noopener noreferrer"},h=s("System Program"),P=s(" \u0E40\u0E1B\u0E47\u0E19\u0E40\u0E08\u0E49\u0E32\u0E02\u0E2D\u0E07 Solana runtime \u0E08\u0E30\u0E43\u0E2B\u0E49\u0E2A\u0E34\u0E17\u0E18\u0E34\u0E4C\u0E40\u0E08\u0E49\u0E32\u0E02\u0E2D\u0E07 account \u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E40\u0E02\u0E49\u0E32\u0E16\u0E36\u0E07\u0E44\u0E14\u0E49\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E40\u0E02\u0E35\u0E22\u0E19 data \u0E2B\u0E23\u0E37\u0E2D transfer lamports \u0E40\u0E21\u0E37\u0E48\u0E2D\u0E2A\u0E23\u0E49\u0E32\u0E07 account \u0E40\u0E23\u0E32\u0E08\u0E30\u0E15\u0E49\u0E2D\u0E07\u0E08\u0E2D\u0E07\u0E1E\u0E37\u0E49\u0E19\u0E17\u0E35\u0E48 storage space \u0E40\u0E1B\u0E47\u0E19 bytes \u0E44\u0E27\u0E49\u0E01\u0E48\u0E2D\u0E19\u0E08\u0E33\u0E19\u0E27\u0E19\u0E2B\u0E19\u0E36\u0E48\u0E07 ("),v=n("code",null,"\u0E1E\u0E37\u0E49\u0E19\u0E17\u0E35\u0E48",-1),S=s(") \u0E41\u0E25\u0E30 lamports \u0E17\u0E35\u0E48\u0E40\u0E1E\u0E35\u0E22\u0E07\u0E1E\u0E2D\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E04\u0E48\u0E32 rent \u0E0B\u0E36\u0E48\u0E07 "),A={href:"https://docs.solana.com/developing/programming-model/accounts#rent",target:"_blank",rel:"noopener noreferrer"},x=s("Rent"),K=s(" \u0E19\u0E35\u0E49\u0E04\u0E37\u0E2D\u0E04\u0E48\u0E32 cost \u0E17\u0E35\u0E48\u0E21\u0E35\u0E44\u0E27\u0E49\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E17\u0E33\u0E43\u0E2B\u0E49\u0E40\u0E23\u0E32 accounts \u0E04\u0E07\u0E2D\u0E22\u0E39\u0E48\u0E1A\u0E19 Solana"),T=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` +import{_ as k,r as p,o as b,c as m,a as n,b as t,w as a,F as d,d as s,e as r}from"./app.2fbb9e96.js";const y={},_=n("h1",{id:"accounts",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#accounts","aria-hidden":"true"},"#"),s(" Accounts")],-1),f=n("h2",{id:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07-system-account",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07-system-account","aria-hidden":"true"},"#"),s(" \u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07 system account")],-1),g=s("\u0E43\u0E19\u0E01\u0E32\u0E23\u0E2A\u0E23\u0E49\u0E32\u0E07 account \u0E17\u0E35\u0E48 "),w={href:"https://docs.solana.com/developing/clients/javascript-reference#systemprogram",target:"_blank",rel:"noopener noreferrer"},h=s("System Program"),P=s(" \u0E40\u0E1B\u0E47\u0E19\u0E40\u0E08\u0E49\u0E32\u0E02\u0E2D\u0E07 Solana runtime \u0E08\u0E30\u0E43\u0E2B\u0E49\u0E2A\u0E34\u0E17\u0E18\u0E34\u0E4C\u0E40\u0E08\u0E49\u0E32\u0E02\u0E2D\u0E07 account \u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E40\u0E02\u0E49\u0E32\u0E16\u0E36\u0E07\u0E44\u0E14\u0E49\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E40\u0E02\u0E35\u0E22\u0E19 data \u0E2B\u0E23\u0E37\u0E2D transfer lamports \u0E40\u0E21\u0E37\u0E48\u0E2D\u0E2A\u0E23\u0E49\u0E32\u0E07 account \u0E40\u0E23\u0E32\u0E08\u0E30\u0E15\u0E49\u0E2D\u0E07\u0E08\u0E2D\u0E07\u0E1E\u0E37\u0E49\u0E19\u0E17\u0E35\u0E48 storage space \u0E40\u0E1B\u0E47\u0E19 bytes \u0E44\u0E27\u0E49\u0E01\u0E48\u0E2D\u0E19\u0E08\u0E33\u0E19\u0E27\u0E19\u0E2B\u0E19\u0E36\u0E48\u0E07 ("),v=n("code",null,"\u0E1E\u0E37\u0E49\u0E19\u0E17\u0E35\u0E48",-1),S=s(") \u0E41\u0E25\u0E30 lamports \u0E17\u0E35\u0E48\u0E40\u0E1E\u0E35\u0E22\u0E07\u0E1E\u0E2D\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E04\u0E48\u0E32 rent \u0E0B\u0E36\u0E48\u0E07 "),A={href:"https://docs.solana.com/developing/programming-model/accounts#rent",target:"_blank",rel:"noopener noreferrer"},x=s("Rent"),K=s(" \u0E19\u0E35\u0E49\u0E04\u0E37\u0E2D\u0E04\u0E48\u0E32 cost \u0E17\u0E35\u0E48\u0E21\u0E35\u0E44\u0E27\u0E49\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E17\u0E33\u0E43\u0E2B\u0E49\u0E40\u0E23\u0E32 accounts \u0E04\u0E07\u0E2D\u0E22\u0E39\u0E48\u0E1A\u0E19 Solana"),T=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` SystemProgram`),n("span",{class:"token punctuation"},","),s(` Keypair`),n("span",{class:"token punctuation"},","),s(` Transaction`),n("span",{class:"token punctuation"},","),s(` @@ -44,7 +44,7 @@ import{_ as k,r as p,o as b,c as m,a as n,b as t,w as a,F as d,d as s,e as r}fro newAccountPubkey`),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br")])],-1),R=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" createAccountParams "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"{"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br")])],-1),C=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" createAccountParams "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"{"),s(` fromPubkey`),n("span",{class:"token operator"},":"),s(" fromPubkey"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},","),s(` newAccountPubkey`),n("span",{class:"token operator"},":"),s(" newAccountPubkey"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},","),s(` lamports`),n("span",{class:"token operator"},":"),s(" rentExemptionAmount"),n("span",{class:"token punctuation"},","),s(` @@ -60,7 +60,7 @@ import{_ as k,r as p,o as b,c as m,a as n,b as t,w as a,F as d,d as s,e as r}fro fromPubkey`),n("span",{class:"token punctuation"},","),s(` newAccountPubkey`),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br")])],-1),C=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br")])],-1),R=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_program"),n("span",{class:"token punctuation"},"::")]),s("system_instruction"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("commitment_config"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("native_token"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token constant"},"LAMPORTS_PER_SOL"),n("span",{class:"token punctuation"},";"),s(` @@ -767,7 +767,7 @@ import{_ as k,r as p,o as b,c as m,a as n,b as t,w as a,F as d,d as s,e as r}fro `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),n("span",{class:"token template-string"},[n("span",{class:"token template-punctuation string"},"`"),n("span",{class:"token string"},"txhash: "),n("span",{class:"token interpolation"},[n("span",{class:"token interpolation-punctuation punctuation"},"${"),n("span",{class:"token keyword"},"await"),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"sendTransaction"),n("span",{class:"token punctuation"},"("),s("tx"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token punctuation"},"["),s("feePayer"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),n("span",{class:"token interpolation-punctuation punctuation"},"}")]),n("span",{class:"token template-punctuation string"},"`")]),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br")])],-1),An=n("h2",{id:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25-program-accounts",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25-program-accounts","aria-hidden":"true"},"#"),s(" \u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25 program accounts")],-1),xn=s("\u0E04\u0E37\u0E19\u0E04\u0E48\u0E32\u0E17\u0E38\u0E01\u0E46 accounts \u0E17\u0E35\u0E48 program \u0E40\u0E1B\u0E47\u0E19\u0E40\u0E08\u0E49\u0E32\u0E02\u0E2D\u0E07 \u0E42\u0E14\u0E22\u0E08\u0E30\u0E2D\u0E49\u0E32\u0E07\u0E16\u0E36\u0E07 "),Kn=s("guides section"),Tn=s(" \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E23\u0E32\u0E22\u0E25\u0E30\u0E40\u0E2D\u0E35\u0E22\u0E14\u0E02\u0E2D\u0E07 "),Rn=n("code",null,"getProgramAccounts",-1),Cn=s(" \u0E41\u0E25\u0E30\u0E15\u0E31\u0E27\u0E40\u0E25\u0E37\u0E2D\u0E01\u0E01\u0E32\u0E23\u0E15\u0E31\u0E49\u0E07\u0E04\u0E48\u0E32"),Ln=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" clusterApiUrl"),n("span",{class:"token punctuation"},","),s(" Connection"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br")])],-1),An=n("h2",{id:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25-program-accounts",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25-program-accounts","aria-hidden":"true"},"#"),s(" \u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25 program accounts")],-1),xn=s("\u0E04\u0E37\u0E19\u0E04\u0E48\u0E32\u0E17\u0E38\u0E01\u0E46 accounts \u0E17\u0E35\u0E48 program \u0E40\u0E1B\u0E47\u0E19\u0E40\u0E08\u0E49\u0E32\u0E02\u0E2D\u0E07 \u0E42\u0E14\u0E22\u0E08\u0E30\u0E2D\u0E49\u0E32\u0E07\u0E16\u0E36\u0E07 "),Kn=s("guides section"),Tn=s(" \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E23\u0E32\u0E22\u0E25\u0E30\u0E40\u0E2D\u0E35\u0E22\u0E14\u0E02\u0E2D\u0E07 "),Cn=n("code",null,"getProgramAccounts",-1),Rn=s(" \u0E41\u0E25\u0E30\u0E15\u0E31\u0E27\u0E40\u0E25\u0E37\u0E2D\u0E01\u0E01\u0E32\u0E23\u0E15\u0E31\u0E49\u0E07\u0E04\u0E48\u0E32"),Ln=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" clusterApiUrl"),n("span",{class:"token punctuation"},","),s(" Connection"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token constant"},"MY_PROGRAM_ID"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),s(` @@ -1005,19 +1005,44 @@ source_data`),n("span",{class:"token punctuation"},"."),n("span",{class:"token f `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br")])],-1),zn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[s("connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"get_balance"),n("span",{class:"token punctuation"},"("),n("span",{class:"token operator"},"&"),s("wallet"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Hn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("publickey "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Hn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair `),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("api "),n("span",{class:"token keyword"},"import"),s(` Client client `),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),s(` key_pair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` -public_key `),n("span",{class:"token operator"},"="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s(`public_key +public_key `),n("span",{class:"token operator"},"="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("client"),n("span",{class:"token punctuation"},"."),s("get_balance"),n("span",{class:"token punctuation"},"("),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br")])],-1),$n=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("client "),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),s(` key_pair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` -public_key `),n("span",{class:"token operator"},"="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s(`public_key +public_key `),n("span",{class:"token operator"},"="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` client`),n("span",{class:"token punctuation"},"."),s("get_balance"),n("span",{class:"token punctuation"},"("),s("public_key"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),Xn={class:"custom-container tip"},Zn=n("p",{class:"custom-container-title"},"TIP",-1),ns=s("\u0E16\u0E49\u0E32\u0E40\u0E23\u0E32\u0E15\u0E49\u0E2D\u0E07\u0E01\u0E32\u0E23\u0E40\u0E23\u0E35\u0E22\u0E01\u0E14\u0E39 token balance \u0E40\u0E23\u0E32\u0E15\u0E49\u0E2D\u0E07\u0E23\u0E39\u0E49 address \u0E02\u0E2D\u0E07 token account \u0E19\u0E31\u0E49\u0E19\u0E46 \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E23\u0E32\u0E22\u0E40\u0E2D\u0E35\u0E22\u0E14\u0E40\u0E1E\u0E34\u0E48\u0E21\u0E40\u0E15\u0E34\u0E21\u0E44\u0E1B\u0E14\u0E39\u0E44\u0E14\u0E49\u0E17\u0E35\u0E48 "),ss=s("Token References");function as(ts,es){const l=p("ExternalLinkIcon"),e=p("SolanaCodeGroupItem"),o=p("SolanaCodeGroup"),c=p("CodeGroupItem"),u=p("CodeGroup"),i=p("RouterLink");return b(),m(d,null,[_,f,n("p",null,[g,n("a",w,[h,t(l)]),P,v,S,n("a",A,[x,t(l)]),K]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[T]),preview:a(()=>[R]),_:1}),t(e,{title:"Rust"},{default:a(()=>[C]),preview:a(()=>[L]),_:1})]),_:1}),I,n("p",null,[O,n("a",U,[E,t(l)]),M]),t(u,null,{default:a(()=>[t(c,{title:"TS",active:""},{default:a(()=>[F]),_:1}),t(c,{title:"Rust"},{default:a(()=>[G]),_:1}),t(c,{title:"CLI"},{default:a(()=>[B]),_:1})]),_:1}),N,W,q,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[V]),preview:a(()=>[Y]),_:1}),t(e,{title:"Rust"},{default:a(()=>[D]),preview:a(()=>[j]),_:1})]),_:1}),Q,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[J]),preview:a(()=>[z]),_:1}),t(e,{title:"Rust",active:""},{default:a(()=>[H]),preview:a(()=>[$]),_:1})]),_:1}),X,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Z]),preview:a(()=>[nn]),_:1})]),_:1}),sn,an,n("p",null,[n("a",tn,[en,t(l)]),on]),cn,t(u,null,{default:a(()=>[t(c,{title:"TS",active:""},{default:a(()=>[pn]),_:1}),t(c,{title:"Rust"},{default:a(()=>[ln]),_:1})]),_:1}),un,t(o,null,{default:a(()=>[t(e,{title:"rust",active:""},{default:a(()=>[rn]),preview:a(()=>[kn]),_:1})]),_:1}),bn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[mn]),preview:a(()=>[dn]),_:1})]),_:1}),yn,_n,fn,gn,t(o,null,{default:a(()=>[t(e,{title:"Rust",active:""},{default:a(()=>[wn]),preview:a(()=>[hn]),_:1})]),_:1}),Pn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[vn]),preview:a(()=>[Sn]),_:1})]),_:1}),An,n("p",null,[xn,t(i,{to:"/th/guides/get-program-accounts.html"},{default:a(()=>[Kn]),_:1}),Tn,Rn,Cn]),t(u,null,{default:a(()=>[t(c,{title:"TS",active:""},{default:a(()=>[Ln]),_:1}),t(c,{title:"Rust"},{default:a(()=>[In]),_:1}),t(c,{title:"CLI"},{default:a(()=>[On]),_:1})]),_:1}),Un,n("p",null,[En,n("a",Mn,[Fn,t(l)]),Gn]),Bn,t(o,null,{default:a(()=>[t(e,{title:"rust",active:""},{default:a(()=>[Nn]),preview:a(()=>[Wn]),_:1})]),_:1}),qn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Vn]),preview:a(()=>[Yn]),_:1})]),_:1}),Dn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[jn]),preview:a(()=>[Qn]),_:1}),t(e,{title:"Rust"},{default:a(()=>[Jn]),preview:a(()=>[zn]),_:1}),t(e,{title:"Python"},{default:a(()=>[Hn]),preview:a(()=>[$n]),_:1})]),_:1}),n("div",Xn,[Zn,n("p",null,[ns,t(i,{to:"/th/references/token.html"},{default:a(()=>[ss]),_:1})])])],64)}var cs=k(y,[["render",as]]);export{cs as default}; +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),Xn=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token comment"},"// clang++ get_balance.cpp -o get_balance -std=c++17 -lssl -lcrypto -lsodium"),s(` + +`),n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + Connection `),n("span",{class:"token function"},"connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"auto"),s(" public_key "),n("span",{class:"token operator"},"="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"public_key = "'),s(),n("span",{class:"token operator"},"<<"),s(" public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"uint64_t"),s(" balance "),n("span",{class:"token operator"},"="),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"get_balance"),n("span",{class:"token punctuation"},"("),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"balance = "'),s(),n("span",{class:"token operator"},"<<"),s(" balance "),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"return"),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br")])],-1),Zn=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[s("Connection "),n("span",{class:"token function"},"connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token keyword"},"auto"),s(" public_key "),n("span",{class:"token operator"},"="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"uint64_t"),s(" balance "),n("span",{class:"token operator"},"="),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"get_balance"),n("span",{class:"token punctuation"},"("),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),ns={class:"custom-container tip"},ss=n("p",{class:"custom-container-title"},"TIP",-1),as=s("\u0E16\u0E49\u0E32\u0E40\u0E23\u0E32\u0E15\u0E49\u0E2D\u0E07\u0E01\u0E32\u0E23\u0E40\u0E23\u0E35\u0E22\u0E01\u0E14\u0E39 token balance \u0E40\u0E23\u0E32\u0E15\u0E49\u0E2D\u0E07\u0E23\u0E39\u0E49 address \u0E02\u0E2D\u0E07 token account \u0E19\u0E31\u0E49\u0E19\u0E46 \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E23\u0E32\u0E22\u0E40\u0E2D\u0E35\u0E22\u0E14\u0E40\u0E1E\u0E34\u0E48\u0E21\u0E40\u0E15\u0E34\u0E21\u0E44\u0E1B\u0E14\u0E39\u0E44\u0E14\u0E49\u0E17\u0E35\u0E48 "),ts=s("Token References");function es(os,cs){const l=p("ExternalLinkIcon"),e=p("SolanaCodeGroupItem"),o=p("SolanaCodeGroup"),c=p("CodeGroupItem"),u=p("CodeGroup"),i=p("RouterLink");return b(),m(d,null,[_,f,n("p",null,[g,n("a",w,[h,t(l)]),P,v,S,n("a",A,[x,t(l)]),K]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[T]),preview:a(()=>[C]),_:1}),t(e,{title:"Rust"},{default:a(()=>[R]),preview:a(()=>[L]),_:1})]),_:1}),I,n("p",null,[O,n("a",U,[E,t(l)]),M]),t(u,null,{default:a(()=>[t(c,{title:"TS",active:""},{default:a(()=>[F]),_:1}),t(c,{title:"Rust"},{default:a(()=>[G]),_:1}),t(c,{title:"CLI"},{default:a(()=>[B]),_:1})]),_:1}),N,W,q,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[V]),preview:a(()=>[Y]),_:1}),t(e,{title:"Rust"},{default:a(()=>[D]),preview:a(()=>[j]),_:1})]),_:1}),Q,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[J]),preview:a(()=>[z]),_:1}),t(e,{title:"Rust",active:""},{default:a(()=>[H]),preview:a(()=>[$]),_:1})]),_:1}),X,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Z]),preview:a(()=>[nn]),_:1})]),_:1}),sn,an,n("p",null,[n("a",tn,[en,t(l)]),on]),cn,t(u,null,{default:a(()=>[t(c,{title:"TS",active:""},{default:a(()=>[pn]),_:1}),t(c,{title:"Rust"},{default:a(()=>[ln]),_:1})]),_:1}),un,t(o,null,{default:a(()=>[t(e,{title:"rust",active:""},{default:a(()=>[rn]),preview:a(()=>[kn]),_:1})]),_:1}),bn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[mn]),preview:a(()=>[dn]),_:1})]),_:1}),yn,_n,fn,gn,t(o,null,{default:a(()=>[t(e,{title:"Rust",active:""},{default:a(()=>[wn]),preview:a(()=>[hn]),_:1})]),_:1}),Pn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[vn]),preview:a(()=>[Sn]),_:1})]),_:1}),An,n("p",null,[xn,t(i,{to:"/th/guides/get-program-accounts.html"},{default:a(()=>[Kn]),_:1}),Tn,Cn,Rn]),t(u,null,{default:a(()=>[t(c,{title:"TS",active:""},{default:a(()=>[Ln]),_:1}),t(c,{title:"Rust"},{default:a(()=>[In]),_:1}),t(c,{title:"CLI"},{default:a(()=>[On]),_:1})]),_:1}),Un,n("p",null,[En,n("a",Mn,[Fn,t(l)]),Gn]),Bn,t(o,null,{default:a(()=>[t(e,{title:"rust",active:""},{default:a(()=>[Nn]),preview:a(()=>[Wn]),_:1})]),_:1}),qn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Vn]),preview:a(()=>[Yn]),_:1})]),_:1}),Dn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[jn]),preview:a(()=>[Qn]),_:1}),t(e,{title:"Rust"},{default:a(()=>[Jn]),preview:a(()=>[zn]),_:1}),t(e,{title:"Python"},{default:a(()=>[Hn]),preview:a(()=>[$n]),_:1}),t(e,{title:"C++"},{default:a(()=>[Xn]),preview:a(()=>[Zn]),_:1})]),_:1}),n("div",ns,[ss,n("p",null,[as,t(i,{to:"/th/references/token.html"},{default:a(()=>[ts]),_:1})])])],64)}var ls=k(y,[["render",es]]);export{ls as default}; diff --git a/docs/.vuepress/dist/assets/accounts.html.21ad9e29.js b/docs/.vuepress/dist/assets/accounts.html.569b9751.js similarity index 99% rename from docs/.vuepress/dist/assets/accounts.html.21ad9e29.js rename to docs/.vuepress/dist/assets/accounts.html.569b9751.js index ba9665498..676798822 100644 --- a/docs/.vuepress/dist/assets/accounts.html.21ad9e29.js +++ b/docs/.vuepress/dist/assets/accounts.html.569b9751.js @@ -1 +1 @@ -import{_ as l,r as o,o as i,c as n,a as t,b as r,F as d,e as s,d as e}from"./app.cfdf84e7.js";var c="/assets/account_example.8a777374.png";const h={},p=s('

\u8D26\u6237

\u5728Solana\u4E2D\uFF0C\u8D26\u6237\u662F\u7528\u6765\u5B58\u50A8\u72B6\u6001\u7684\u3002\u8D26\u6237\u662FSolana\u5F00\u53D1\u4E2D\u975E\u5E38\u91CD\u8981\u7684\u6784\u6210\u8981\u7D20\u3002

\u7EFC\u8FF0

\u8981\u70B9

  • \u8D26\u6237\u662F\u7528\u6765\u5B58\u653E\u6570\u636E\u7684
  • \u6BCF\u4E2A\u8D26\u6237\u90FD\u6709\u4E00\u4E2A\u72EC\u4E00\u65E0\u4E8C\u7684\u5730\u5740
  • \u6BCF\u4E2A\u8D26\u6237\u5927\u5C0F\u4E0D\u80FD\u8D85\u8FC710MB
  • \u7A0B\u5E8F\u6D3E\u751F\u8D26\u6237\u5927\u5C0F\u4E0D\u80FD\u8D85\u8FC710KB
  • \u7A0B\u5E8F\u6D3E\u751F\u8D26\u6237\u53EF\u4EE5\u7528\u5176\u5BF9\u5E94\u7A0B\u5E8F\u8FDB\u884C\u7B7E\u540D
  • \u8D26\u6237\u5927\u5C0F\u662F\u9759\u6001\u7684
  • \u8D26\u6237\u6570\u636E\u5B58\u50A8\u9700\u8981\u4ED8\u79DF\u91D1
  • \u9ED8\u8BA4\u7684\u8D26\u6237\u6240\u6709\u8005\u662F"\u7CFB\u7EDF\u7A0B\u5E8F"

\u6DF1\u5165

\u8D26\u6237\u6A21\u578B

\u5728Solana\u4E2D\u6709\u4E09\u7C7B\u8D26\u6237\uFF1A

  • \u6570\u636E\u8D26\u6237\uFF0C\u7528\u6765\u5B58\u50A8\u6570\u636E
  • \u7A0B\u5E8F\u8D26\u6237\uFF0C\u7528\u6765\u5B58\u50A8\u53EF\u6267\u884C\u7A0B\u5E8F
  • \u539F\u751F\u8D26\u6237\uFF0C\u6307Solana\u4E0A\u7684\u539F\u751F\u7A0B\u5E8F\uFF0C\u4F8B\u5982"System"\uFF0C"Stake"\uFF0C\u4EE5\u53CA"Vote"\u3002

\u6570\u636E\u8D26\u6237\u53C8\u5206\u4E3A\u4E24\u7C7B\uFF1A

  • \u7CFB\u7EDF\u6240\u6709\u8D26\u6237
  • \u7A0B\u5E8F\u6D3E\u751F\u8D26\u6237\uFF08PDA\uFF09

\u6BCF\u4E2A\u8D26\u6237\u90FD\u6709\u4E00\u4E2A\u5730\u5740\uFF08\u4E00\u822C\u60C5\u51B5\u4E0B\u662F\u4E00\u4E2A\u516C\u94A5\uFF09\u4EE5\u53CA\u4E00\u4E2A\u6240\u6709\u8005\uFF08\u7A0B\u5E8F\u8D26\u6237\u7684\u5730\u5740\uFF09\u3002 \u4E0B\u9762\u8BE6\u7EC6\u5217\u51FA\u4E00\u4E2A\u8D26\u6237\u5B58\u50A8\u7684\u5B8C\u6574\u5B57\u6BB5\u5217\u8868\u3002

\u5B57\u6BB5\u63CF\u8FF0
lamports\u8FD9\u4E2A\u8D26\u6237\u62E5\u6709\u7684lamport\uFF08\u5170\u6CE2\u7279\uFF09\u6570\u91CF
owner\u8FD9\u4E2A\u8D26\u6237\u7684\u6240\u6709\u8005\u7A0B\u5E8F
executable\u8FD9\u4E2A\u8D26\u6237\u6210\u662F\u5426\u53EF\u4EE5\u5904\u7406\u6307\u4EE4
data\u8FD9\u4E2A\u8D26\u6237\u5B58\u50A8\u7684\u6570\u636E\u7684\u5B57\u8282\u7801
rent_epoch\u4E0B\u4E00\u4E2A\u9700\u8981\u4ED8\u79DF\u91D1\u7684epoch\uFF08\u4EE3\uFF09

\u5173\u4E8E\u6240\u6709\u6743\uFF0C\u6709\u51E0\u6761\u91CD\u8981\u7684\u89C4\u5219\uFF1A

  • \u53EA\u6709\u8D26\u6237\u7684\u6240\u6709\u8005\u624D\u80FD\u6539\u53D8\u8D26\u6237\u4E2D\u7684\u6570\u636E\uFF0C\u63D0\u53D6lamport
  • \u4EFB\u4F55\u4EBA\u90FD\u53EF\u4EE5\u5411\u6570\u636E\u8D26\u6237\u4E2D\u5B58\u5165lamport
  • \u5F53\u8D26\u6237\u4E2D\u7684\u6570\u636E\u88AB\u62B9\u9664\u4E4B\u540E\uFF0C\u8D26\u6237\u7684\u6240\u6709\u8005\u53EF\u4EE5\u6307\u5B9A\u65B0\u7684\u6240\u6709\u8005

\u7A0B\u5E8F\u8D26\u6237\u4E0D\u50A8\u5B58\u72B6\u6001\u3002

\u4F8B\u5982\uFF0C\u5047\u8BBE\u6709\u4E00\u4E2A\u8BA1\u6570\u7A0B\u5E8F\uFF0C\u8FD9\u4E2A\u7A0B\u5E8F\u7528\u6765\u4E3A\u4E00\u4E2A\u8BA1\u6570\u5668\u52A0\u6570\uFF0C\u4F60\u9700\u8981\u521B\u5EFA\u4E24\u4E2A\u8D26\u6237\uFF0C\u4E00\u4E2A\u7528\u4E8E\u5B58\u50A8\u7A0B\u5E8F\u7684\u4EE3\u7801\uFF0C \u53E6\u4E00\u4E2A\u7528\u4E8E\u5B58\u50A8\u8BA1\u6570\u5668\u672C\u8EAB\u3002

\u4E3A\u4E86\u907F\u514D\u8D26\u6237\u88AB\u5220\u9664\uFF0C\u5FC5\u987B\u4ED8\u79DF\u91D1\u3002

\u79DF\u91D1

\u5728\u8D26\u6237\u4E2D\u5B58\u50A8\u6570\u636E\u9700\u8981\u82B1\u8D39SOL\u6765\u7EF4\u6301\uFF0C\u8FD9\u90E8\u5206\u82B1\u8D39\u7684SOL\u88AB\u79F0\u4F5C\u79DF\u91D1\u3002\u5982\u679C\u4F60\u5728\u4E00\u4E2A\u8D26\u6237\u4E2D\u5B58\u5165\u5927\u4E8E\u4E24\u5E74\u79DF\u91D1\u7684SOL\uFF0C \u8FD9\u4E2A\u8D26\u6237\u5C31\u53EF\u4EE5\u88AB\u8C41\u514D\u4ED8\u79DF\u3002\u79DF\u91D1\u53EF\u4EE5\u901A\u8FC7\u5173\u95ED\u8D26\u6237\u7684\u65B9\u5F0F\u6765\u53D6\u56DE\u3002lamport\u4F1A\u88AB\u8FD4\u8FD8\u56DE\u4F60\u7684\u94B1\u5305\u3002

\u79DF\u91D1\u5728\u8FD9\u4E24\u4E2A\u4E0D\u540C\u7684\u65F6\u95F4\u70B9\u88AB\u652F\u53D6\uFF1A

  1. \u88AB\u4E00\u4E2A\u4EA4\u6613\u5F15\u7528\u7684\u65F6\u5019
  2. epoch\u66F4\u8FED\u65F6

\u6536\u53D6\u7684\u79DF\u91D1\uFF0C\u4E00\u5B9A\u767E\u5206\u6BD4\u4F1A\u88AB\u9500\u6BC1\uFF0C\u53E6\u4E00\u90E8\u5206\u4F1A\u5728\u6BCF\u4E2Aslot\uFF08\u63D2\u69FD\uFF09\u7ED3\u675F\u65F6\u88AB\u5206\u914D\u7ED9\u6295\u7968\u8D26\u6237\u3002

\u5F53\u4E00\u4E2A\u8D26\u6237\u6CA1\u6709\u8DB3\u591F\u7684\u4F59\u989D\u652F\u4ED8\u79DF\u91D1\u65F6\uFF0C\u8FD9\u4E2A\u8D26\u6237\u4F1A\u88AB\u91CA\u653E\uFF0C\u6570\u636E\u4F1A\u88AB\u6E05\u9664\u3002

\u5176\u4ED6\u8D44\u6599

',25),_={href:"https://solana.wiki/zh-cn/docs/account-model/#account-storage",target:"_blank",rel:"noopener noreferrer"},u=e("Solana\u8D26\u6237\u6A21\u578B"),m={href:"https://docs.solana.com/developing/programming-model/accounts",target:"_blank",rel:"noopener noreferrer"},f=e("\u5B98\u65B9\u6587\u6863"),b={href:"https://twitter.com/pencilflip/status/1452402100470644739",target:"_blank",rel:"noopener noreferrer"},x=e("pencilflip\u8D26\u6237\u4E3B\u9898"),g=t("h3",{id:"\u81F4\u8C22",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#\u81F4\u8C22","aria-hidden":"true"},"#"),e(" \u81F4\u8C22")],-1),S=e("\u8FD9\u4E9B\u6838\u5FC3\u6982\u5FF5\u6765\u6E90\u4E8EPencilflip. "),k={href:"https://twitter.com/intent/user?screen_name=pencilflip",target:"_blank",rel:"noopener noreferrer"},q=e("\u5728Twitter\u4E0A\u5173\u6CE8\u4ED6"),v=e(".");function w(B,L){const a=o("ExternalLinkIcon");return i(),n(d,null,[p,t("ul",null,[t("li",null,[t("a",_,[u,r(a)])]),t("li",null,[t("a",m,[f,r(a)])]),t("li",null,[t("a",b,[x,r(a)])])]),g,t("p",null,[S,t("a",k,[q,r(a)]),v])],64)}var N=l(h,[["render",w]]);export{N as default}; +import{_ as l,r as o,o as i,c as n,a as t,b as r,F as d,e as s,d as e}from"./app.2fbb9e96.js";var c="/assets/account_example.8a777374.png";const h={},p=s('

\u8D26\u6237

\u5728Solana\u4E2D\uFF0C\u8D26\u6237\u662F\u7528\u6765\u5B58\u50A8\u72B6\u6001\u7684\u3002\u8D26\u6237\u662FSolana\u5F00\u53D1\u4E2D\u975E\u5E38\u91CD\u8981\u7684\u6784\u6210\u8981\u7D20\u3002

\u7EFC\u8FF0

\u8981\u70B9

  • \u8D26\u6237\u662F\u7528\u6765\u5B58\u653E\u6570\u636E\u7684
  • \u6BCF\u4E2A\u8D26\u6237\u90FD\u6709\u4E00\u4E2A\u72EC\u4E00\u65E0\u4E8C\u7684\u5730\u5740
  • \u6BCF\u4E2A\u8D26\u6237\u5927\u5C0F\u4E0D\u80FD\u8D85\u8FC710MB
  • \u7A0B\u5E8F\u6D3E\u751F\u8D26\u6237\u5927\u5C0F\u4E0D\u80FD\u8D85\u8FC710KB
  • \u7A0B\u5E8F\u6D3E\u751F\u8D26\u6237\u53EF\u4EE5\u7528\u5176\u5BF9\u5E94\u7A0B\u5E8F\u8FDB\u884C\u7B7E\u540D
  • \u8D26\u6237\u5927\u5C0F\u662F\u9759\u6001\u7684
  • \u8D26\u6237\u6570\u636E\u5B58\u50A8\u9700\u8981\u4ED8\u79DF\u91D1
  • \u9ED8\u8BA4\u7684\u8D26\u6237\u6240\u6709\u8005\u662F"\u7CFB\u7EDF\u7A0B\u5E8F"

\u6DF1\u5165

\u8D26\u6237\u6A21\u578B

\u5728Solana\u4E2D\u6709\u4E09\u7C7B\u8D26\u6237\uFF1A

  • \u6570\u636E\u8D26\u6237\uFF0C\u7528\u6765\u5B58\u50A8\u6570\u636E
  • \u7A0B\u5E8F\u8D26\u6237\uFF0C\u7528\u6765\u5B58\u50A8\u53EF\u6267\u884C\u7A0B\u5E8F
  • \u539F\u751F\u8D26\u6237\uFF0C\u6307Solana\u4E0A\u7684\u539F\u751F\u7A0B\u5E8F\uFF0C\u4F8B\u5982"System"\uFF0C"Stake"\uFF0C\u4EE5\u53CA"Vote"\u3002

\u6570\u636E\u8D26\u6237\u53C8\u5206\u4E3A\u4E24\u7C7B\uFF1A

  • \u7CFB\u7EDF\u6240\u6709\u8D26\u6237
  • \u7A0B\u5E8F\u6D3E\u751F\u8D26\u6237\uFF08PDA\uFF09

\u6BCF\u4E2A\u8D26\u6237\u90FD\u6709\u4E00\u4E2A\u5730\u5740\uFF08\u4E00\u822C\u60C5\u51B5\u4E0B\u662F\u4E00\u4E2A\u516C\u94A5\uFF09\u4EE5\u53CA\u4E00\u4E2A\u6240\u6709\u8005\uFF08\u7A0B\u5E8F\u8D26\u6237\u7684\u5730\u5740\uFF09\u3002 \u4E0B\u9762\u8BE6\u7EC6\u5217\u51FA\u4E00\u4E2A\u8D26\u6237\u5B58\u50A8\u7684\u5B8C\u6574\u5B57\u6BB5\u5217\u8868\u3002

\u5B57\u6BB5\u63CF\u8FF0
lamports\u8FD9\u4E2A\u8D26\u6237\u62E5\u6709\u7684lamport\uFF08\u5170\u6CE2\u7279\uFF09\u6570\u91CF
owner\u8FD9\u4E2A\u8D26\u6237\u7684\u6240\u6709\u8005\u7A0B\u5E8F
executable\u8FD9\u4E2A\u8D26\u6237\u6210\u662F\u5426\u53EF\u4EE5\u5904\u7406\u6307\u4EE4
data\u8FD9\u4E2A\u8D26\u6237\u5B58\u50A8\u7684\u6570\u636E\u7684\u5B57\u8282\u7801
rent_epoch\u4E0B\u4E00\u4E2A\u9700\u8981\u4ED8\u79DF\u91D1\u7684epoch\uFF08\u4EE3\uFF09

\u5173\u4E8E\u6240\u6709\u6743\uFF0C\u6709\u51E0\u6761\u91CD\u8981\u7684\u89C4\u5219\uFF1A

  • \u53EA\u6709\u8D26\u6237\u7684\u6240\u6709\u8005\u624D\u80FD\u6539\u53D8\u8D26\u6237\u4E2D\u7684\u6570\u636E\uFF0C\u63D0\u53D6lamport
  • \u4EFB\u4F55\u4EBA\u90FD\u53EF\u4EE5\u5411\u6570\u636E\u8D26\u6237\u4E2D\u5B58\u5165lamport
  • \u5F53\u8D26\u6237\u4E2D\u7684\u6570\u636E\u88AB\u62B9\u9664\u4E4B\u540E\uFF0C\u8D26\u6237\u7684\u6240\u6709\u8005\u53EF\u4EE5\u6307\u5B9A\u65B0\u7684\u6240\u6709\u8005

\u7A0B\u5E8F\u8D26\u6237\u4E0D\u50A8\u5B58\u72B6\u6001\u3002

\u4F8B\u5982\uFF0C\u5047\u8BBE\u6709\u4E00\u4E2A\u8BA1\u6570\u7A0B\u5E8F\uFF0C\u8FD9\u4E2A\u7A0B\u5E8F\u7528\u6765\u4E3A\u4E00\u4E2A\u8BA1\u6570\u5668\u52A0\u6570\uFF0C\u4F60\u9700\u8981\u521B\u5EFA\u4E24\u4E2A\u8D26\u6237\uFF0C\u4E00\u4E2A\u7528\u4E8E\u5B58\u50A8\u7A0B\u5E8F\u7684\u4EE3\u7801\uFF0C \u53E6\u4E00\u4E2A\u7528\u4E8E\u5B58\u50A8\u8BA1\u6570\u5668\u672C\u8EAB\u3002

\u4E3A\u4E86\u907F\u514D\u8D26\u6237\u88AB\u5220\u9664\uFF0C\u5FC5\u987B\u4ED8\u79DF\u91D1\u3002

\u79DF\u91D1

\u5728\u8D26\u6237\u4E2D\u5B58\u50A8\u6570\u636E\u9700\u8981\u82B1\u8D39SOL\u6765\u7EF4\u6301\uFF0C\u8FD9\u90E8\u5206\u82B1\u8D39\u7684SOL\u88AB\u79F0\u4F5C\u79DF\u91D1\u3002\u5982\u679C\u4F60\u5728\u4E00\u4E2A\u8D26\u6237\u4E2D\u5B58\u5165\u5927\u4E8E\u4E24\u5E74\u79DF\u91D1\u7684SOL\uFF0C \u8FD9\u4E2A\u8D26\u6237\u5C31\u53EF\u4EE5\u88AB\u8C41\u514D\u4ED8\u79DF\u3002\u79DF\u91D1\u53EF\u4EE5\u901A\u8FC7\u5173\u95ED\u8D26\u6237\u7684\u65B9\u5F0F\u6765\u53D6\u56DE\u3002lamport\u4F1A\u88AB\u8FD4\u8FD8\u56DE\u4F60\u7684\u94B1\u5305\u3002

\u79DF\u91D1\u5728\u8FD9\u4E24\u4E2A\u4E0D\u540C\u7684\u65F6\u95F4\u70B9\u88AB\u652F\u53D6\uFF1A

  1. \u88AB\u4E00\u4E2A\u4EA4\u6613\u5F15\u7528\u7684\u65F6\u5019
  2. epoch\u66F4\u8FED\u65F6

\u6536\u53D6\u7684\u79DF\u91D1\uFF0C\u4E00\u5B9A\u767E\u5206\u6BD4\u4F1A\u88AB\u9500\u6BC1\uFF0C\u53E6\u4E00\u90E8\u5206\u4F1A\u5728\u6BCF\u4E2Aslot\uFF08\u63D2\u69FD\uFF09\u7ED3\u675F\u65F6\u88AB\u5206\u914D\u7ED9\u6295\u7968\u8D26\u6237\u3002

\u5F53\u4E00\u4E2A\u8D26\u6237\u6CA1\u6709\u8DB3\u591F\u7684\u4F59\u989D\u652F\u4ED8\u79DF\u91D1\u65F6\uFF0C\u8FD9\u4E2A\u8D26\u6237\u4F1A\u88AB\u91CA\u653E\uFF0C\u6570\u636E\u4F1A\u88AB\u6E05\u9664\u3002

\u5176\u4ED6\u8D44\u6599

',25),_={href:"https://solana.wiki/zh-cn/docs/account-model/#account-storage",target:"_blank",rel:"noopener noreferrer"},u=e("Solana\u8D26\u6237\u6A21\u578B"),m={href:"https://docs.solana.com/developing/programming-model/accounts",target:"_blank",rel:"noopener noreferrer"},f=e("\u5B98\u65B9\u6587\u6863"),b={href:"https://twitter.com/pencilflip/status/1452402100470644739",target:"_blank",rel:"noopener noreferrer"},x=e("pencilflip\u8D26\u6237\u4E3B\u9898"),g=t("h3",{id:"\u81F4\u8C22",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#\u81F4\u8C22","aria-hidden":"true"},"#"),e(" \u81F4\u8C22")],-1),S=e("\u8FD9\u4E9B\u6838\u5FC3\u6982\u5FF5\u6765\u6E90\u4E8EPencilflip. "),k={href:"https://twitter.com/intent/user?screen_name=pencilflip",target:"_blank",rel:"noopener noreferrer"},q=e("\u5728Twitter\u4E0A\u5173\u6CE8\u4ED6"),v=e(".");function w(B,L){const a=o("ExternalLinkIcon");return i(),n(d,null,[p,t("ul",null,[t("li",null,[t("a",_,[u,r(a)])]),t("li",null,[t("a",m,[f,r(a)])]),t("li",null,[t("a",b,[x,r(a)])])]),g,t("p",null,[S,t("a",k,[q,r(a)]),v])],64)}var N=l(h,[["render",w]]);export{N as default}; diff --git a/docs/.vuepress/dist/assets/accounts.html.384f4db7.js b/docs/.vuepress/dist/assets/accounts.html.6bc5bf34.js similarity index 97% rename from docs/.vuepress/dist/assets/accounts.html.384f4db7.js rename to docs/.vuepress/dist/assets/accounts.html.6bc5bf34.js index 803e669bc..3e472418b 100644 --- a/docs/.vuepress/dist/assets/accounts.html.384f4db7.js +++ b/docs/.vuepress/dist/assets/accounts.html.6bc5bf34.js @@ -1 +1 @@ -const e={key:"v-da88730a",path:"/kr/references/accounts.html",title:"Accounts",lang:"kr-KR",frontmatter:{title:"Accounts",head:[["meta",{name:"title",content:"Solana Cookbook | Account References"}],["meta",{name:"og:title",content:"Solana Cookbook | Account References"}],["meta",{name:"description",content:"Learn more about accounts on Solana and how to use them in your programs."}],["meta",{name:"og:description",content:"Learn more about accounts on Solana and how to use them in your programs."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"How to create a system account",slug:"how-to-create-a-system-account",children:[]},{level:2,title:"How to calculate account cost",slug:"how-to-calculate-account-cost",children:[]},{level:2,title:"How to create accounts with seeds",slug:"how-to-create-accounts-with-seeds",children:[{level:3,title:"Generate",slug:"generate",children:[]},{level:3,title:"Create",slug:"create",children:[]},{level:3,title:"Transfer",slug:"transfer",children:[]}]},{level:2,title:"How to create PDAs",slug:"how-to-create-pdas",children:[{level:3,title:"Generate a PDA",slug:"generate-a-pda",children:[]},{level:3,title:"Create a PDA",slug:"create-a-pda",children:[]}]},{level:2,title:"How to sign with a PDA",slug:"how-to-sign-with-a-pda",children:[{level:3,title:"Program",slug:"program-1",children:[]},{level:3,title:"Client",slug:"client-1",children:[]}]},{level:2,title:"How to get program accounts",slug:"how-to-get-program-accounts",children:[]},{level:2,title:"How to close accounts",slug:"how-to-close-accounts",children:[]},{level:2,title:"How to get account balance",slug:"how-to-get-account-balance",children:[]}],git:{updatedTime:1672765954e3},filePathRelative:"kr/references/accounts.md"};export{e as data}; +const e={key:"v-da88730a",path:"/kr/references/accounts.html",title:"Accounts",lang:"kr-KR",frontmatter:{title:"Accounts",head:[["meta",{name:"title",content:"Solana Cookbook | Account References"}],["meta",{name:"og:title",content:"Solana Cookbook | Account References"}],["meta",{name:"description",content:"Learn more about accounts on Solana and how to use them in your programs."}],["meta",{name:"og:description",content:"Learn more about accounts on Solana and how to use them in your programs."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"How to create a system account",slug:"how-to-create-a-system-account",children:[]},{level:2,title:"How to calculate account cost",slug:"how-to-calculate-account-cost",children:[]},{level:2,title:"How to create accounts with seeds",slug:"how-to-create-accounts-with-seeds",children:[{level:3,title:"Generate",slug:"generate",children:[]},{level:3,title:"Create",slug:"create",children:[]},{level:3,title:"Transfer",slug:"transfer",children:[]}]},{level:2,title:"How to create PDAs",slug:"how-to-create-pdas",children:[{level:3,title:"Generate a PDA",slug:"generate-a-pda",children:[]},{level:3,title:"Create a PDA",slug:"create-a-pda",children:[]}]},{level:2,title:"How to sign with a PDA",slug:"how-to-sign-with-a-pda",children:[{level:3,title:"Program",slug:"program-1",children:[]},{level:3,title:"Client",slug:"client-1",children:[]}]},{level:2,title:"How to get program accounts",slug:"how-to-get-program-accounts",children:[]},{level:2,title:"How to close accounts",slug:"how-to-close-accounts",children:[]},{level:2,title:"How to get account balance",slug:"how-to-get-account-balance",children:[]}],git:{updatedTime:1676666728e3},filePathRelative:"kr/references/accounts.md"};export{e as data}; diff --git a/docs/.vuepress/dist/assets/accounts.html.fe2f1a83.js b/docs/.vuepress/dist/assets/accounts.html.6c5fb42e.js similarity index 98% rename from docs/.vuepress/dist/assets/accounts.html.fe2f1a83.js rename to docs/.vuepress/dist/assets/accounts.html.6c5fb42e.js index c5d2e9779..812f3c7d4 100644 --- a/docs/.vuepress/dist/assets/accounts.html.fe2f1a83.js +++ b/docs/.vuepress/dist/assets/accounts.html.6c5fb42e.js @@ -1 +1 @@ -import{_ as n,r,o as c,c as s,a as e,b as o,F as i,d as t,e as d}from"./app.cfdf84e7.js";var l="/assets/account_example.5b70d95a.jpeg";const h={},u=e("h1",{id:"accounts",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#accounts","aria-hidden":"true"},"#"),t(" Accounts")],-1),p=e("p",null,"Accounts within Solana are used to store state. They are an essential building block for developing on Solana.",-1),_=e("h2",{id:"facts",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#facts","aria-hidden":"true"},"#"),t(" Facts")],-1),m={class:"custom-container tip"},f=e("p",{class:"custom-container-title"},"Fact Sheet",-1),b=e("li",null,"Accounts are used to store data",-1),g=e("li",null,"Each account has a unique address",-1),y=e("li",null,"Accounts have a max size of 10MB (10 Mega Bytes)",-1),w=e("li",null,"PDA accounts have a max size of 10KB (10 Kilo Bytes)",-1),x=e("li",null,"PDA accounts can be used to sign on behalf of a program",-1),v=t("Accounts size are fixed at creation time, but can be adjusted using "),k={href:"https://solanacookbook.com/references/programs.html#how-to-change-account-size",target:"_blank",rel:"noopener noreferrer"},A=t("realloc"),S=e("li",null,"Account data storage is paid with rent",-1),T=e("li",null,"Default account owner is the System Program",-1),D=d('

Deep Dive

Account Model

There are 3 kinds of accounts on Solana:

  • Data accounts store data
  • Program accounts store executable programs
  • Native accounts that indicate native programs on Solana such as System, Stake, and Vote

Within data accounts, there are 2 types:

  • System owned accounts
  • PDA (Program Derived Address) accounts

Each account has an address (usually a public key) and an owner (address of a program account). The full field list an account stores is found below.

FieldDescription
lamportsThe number of lamports owned by this account
ownerThe program owner of this account
executableWhether this account can process instructions
dataThe raw data byte array stored by this account
rent_epochThe next epoch that this account will owe rent

There are a few important ownership rules:

  • Only a data account's owner can modify its data and debit lamports
  • Anyone is allowed to credit lamports to a data account
  • The owner of an account may assign a new owner if the account's data is zeroed out

Program accounts do not store state.

For example, if you have a counter program that lets you increment a counter, you must create two accounts, one account to store the program's code, and one to store the counter.

To prevent an account from being deleted, you must pay rent.

Rent

Storing data on accounts costs SOL to maintain, and it is funded by what is called rent. If you maintain a minimum balance equivalent to 2 years of rent payments in an account, your account will be exempt from paying rent. You can retrieve rent by closing the account and sending the lamports back to your wallet.

Rent is paid during two different timings:

  1. When referenced by a transaction
  2. Once an epoch

A percentage of rent collected by accounts is destroyed, while the rest is distributed to vote accounts at the end of every slot.

If the account does not have enough to pay rent, the account will be deallocated and the data removed.

It is also important to note that new accounts must be rent exempt.

Other Resources

',22),P={href:"https://solana.wiki/zh-cn/docs/account-model/#account-storage",target:"_blank",rel:"noopener noreferrer"},B=t("Solana Account Model"),F={href:"https://docs.solana.com/developing/programming-model/accounts",target:"_blank",rel:"noopener noreferrer"},z=t("Official Documentation"),E={href:"https://twitter.com/pencilflip/status/1452402100470644739",target:"_blank",rel:"noopener noreferrer"},I=t("pencilflip account thread"),N=e("h3",{id:"credit",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#credit","aria-hidden":"true"},"#"),t(" Credit")],-1),O=t("This core concept is credited to Pencilflip. "),V={href:"https://twitter.com/intent/user?screen_name=pencilflip",target:"_blank",rel:"noopener noreferrer"},M=t("Follow him on Twitter"),L=t(".");function R(W,j){const a=r("ExternalLinkIcon");return c(),s(i,null,[u,p,_,e("div",m,[f,e("ul",null,[b,g,y,w,x,e("li",null,[v,e("a",k,[A,o(a)])]),S,T])]),D,e("ul",null,[e("li",null,[e("a",P,[B,o(a)])]),e("li",null,[e("a",F,[z,o(a)])]),e("li",null,[e("a",E,[I,o(a)])])]),N,e("p",null,[O,e("a",V,[M,o(a)]),L])],64)}var C=n(h,[["render",R]]);export{C as default}; +import{_ as n,r,o as c,c as s,a as e,b as o,F as i,d as t,e as d}from"./app.2fbb9e96.js";var l="/assets/account_example.5b70d95a.jpeg";const h={},u=e("h1",{id:"accounts",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#accounts","aria-hidden":"true"},"#"),t(" Accounts")],-1),p=e("p",null,"Accounts within Solana are used to store state. They are an essential building block for developing on Solana.",-1),_=e("h2",{id:"facts",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#facts","aria-hidden":"true"},"#"),t(" Facts")],-1),m={class:"custom-container tip"},f=e("p",{class:"custom-container-title"},"Fact Sheet",-1),b=e("li",null,"Accounts are used to store data",-1),g=e("li",null,"Each account has a unique address",-1),y=e("li",null,"Accounts have a max size of 10MB (10 Mega Bytes)",-1),w=e("li",null,"PDA accounts have a max size of 10KB (10 Kilo Bytes)",-1),x=e("li",null,"PDA accounts can be used to sign on behalf of a program",-1),v=t("Accounts size are fixed at creation time, but can be adjusted using "),k={href:"https://solanacookbook.com/references/programs.html#how-to-change-account-size",target:"_blank",rel:"noopener noreferrer"},A=t("realloc"),S=e("li",null,"Account data storage is paid with rent",-1),T=e("li",null,"Default account owner is the System Program",-1),D=d('

Deep Dive

Account Model

There are 3 kinds of accounts on Solana:

  • Data accounts store data
  • Program accounts store executable programs
  • Native accounts that indicate native programs on Solana such as System, Stake, and Vote

Within data accounts, there are 2 types:

  • System owned accounts
  • PDA (Program Derived Address) accounts

Each account has an address (usually a public key) and an owner (address of a program account). The full field list an account stores is found below.

FieldDescription
lamportsThe number of lamports owned by this account
ownerThe program owner of this account
executableWhether this account can process instructions
dataThe raw data byte array stored by this account
rent_epochThe next epoch that this account will owe rent

There are a few important ownership rules:

  • Only a data account's owner can modify its data and debit lamports
  • Anyone is allowed to credit lamports to a data account
  • The owner of an account may assign a new owner if the account's data is zeroed out

Program accounts do not store state.

For example, if you have a counter program that lets you increment a counter, you must create two accounts, one account to store the program's code, and one to store the counter.

To prevent an account from being deleted, you must pay rent.

Rent

Storing data on accounts costs SOL to maintain, and it is funded by what is called rent. If you maintain a minimum balance equivalent to 2 years of rent payments in an account, your account will be exempt from paying rent. You can retrieve rent by closing the account and sending the lamports back to your wallet.

Rent is paid during two different timings:

  1. When referenced by a transaction
  2. Once an epoch

A percentage of rent collected by accounts is destroyed, while the rest is distributed to vote accounts at the end of every slot.

If the account does not have enough to pay rent, the account will be deallocated and the data removed.

It is also important to note that new accounts must be rent exempt.

Other Resources

',22),P={href:"https://solana.wiki/zh-cn/docs/account-model/#account-storage",target:"_blank",rel:"noopener noreferrer"},B=t("Solana Account Model"),F={href:"https://docs.solana.com/developing/programming-model/accounts",target:"_blank",rel:"noopener noreferrer"},z=t("Official Documentation"),E={href:"https://twitter.com/pencilflip/status/1452402100470644739",target:"_blank",rel:"noopener noreferrer"},I=t("pencilflip account thread"),N=e("h3",{id:"credit",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#credit","aria-hidden":"true"},"#"),t(" Credit")],-1),O=t("This core concept is credited to Pencilflip. "),V={href:"https://twitter.com/intent/user?screen_name=pencilflip",target:"_blank",rel:"noopener noreferrer"},M=t("Follow him on Twitter"),L=t(".");function R(W,j){const a=r("ExternalLinkIcon");return c(),s(i,null,[u,p,_,e("div",m,[f,e("ul",null,[b,g,y,w,x,e("li",null,[v,e("a",k,[A,o(a)])]),S,T])]),D,e("ul",null,[e("li",null,[e("a",P,[B,o(a)])]),e("li",null,[e("a",F,[z,o(a)])]),e("li",null,[e("a",E,[I,o(a)])])]),N,e("p",null,[O,e("a",V,[M,o(a)]),L])],64)}var C=n(h,[["render",R]]);export{C as default}; diff --git a/docs/.vuepress/dist/assets/accounts.html.24bd40ca.js b/docs/.vuepress/dist/assets/accounts.html.93fd4bdf.js similarity index 98% rename from docs/.vuepress/dist/assets/accounts.html.24bd40ca.js rename to docs/.vuepress/dist/assets/accounts.html.93fd4bdf.js index 8681e91c5..361077cab 100644 --- a/docs/.vuepress/dist/assets/accounts.html.24bd40ca.js +++ b/docs/.vuepress/dist/assets/accounts.html.93fd4bdf.js @@ -1 +1 @@ -import{_ as r,r as n,o as a,c as i,a as e,b as o,F as l,d as t,e as d}from"./app.cfdf84e7.js";var p="/assets/account_example.5b70d95a.jpeg";const c={},u=e("h1",{id:"comptes",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#comptes","aria-hidden":"true"},"#"),t(" Comptes")],-1),m=e("p",null,"Les comptes dans Solana sont utilis\xE9s pour stocker des \xE9tats. Ils constituent un \xE9l\xE9ment essentiel pour le d\xE9veloppement sur Solana.",-1),h=e("h2",{id:"faits",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#faits","aria-hidden":"true"},"#"),t(" Faits")],-1),_={class:"custom-container tip"},f=e("p",{class:"custom-container-title"},"Fiche d'Information",-1),g=e("li",null,"Les comptes sont utilis\xE9s pour stocker des donn\xE9es",-1),x=e("li",null,"Chaque compte a une adresse unique",-1),b=e("li",null,"Les comptes ont une taille maximale de 10MB (10 Mega Bytes)",-1),v=e("li",null,"Les comptes des adresses d\xE9riv\xE9es d'un programme (PDA) ont une taille maximale de 10KB (10 Kilo Bytes)",-1),L=e("li",null,"Les comptes des adresses d\xE9riv\xE9es d'un programme (PDA) peuvent \xEAtre utilis\xE9s pour signer au nom d'un programme",-1),k=t("La taille des comptes est fix\xE9e au moment de leur cr\xE9ation, mais elle peut \xEAtre ajust\xE9e en utilisant la fonctionnalit\xE9 "),q={href:"https://solanacookbook.com/references/programs.html#how-to-change-account-size",target:"_blank",rel:"noopener noreferrer"},y=t("realloc"),S=e("li",null,"Le stockage des donn\xE9es sur un compte est pay\xE9 par une rente",-1),z=e("li",null,"Le propri\xE9taire par d\xE9faut d'un compte est le programme syst\xE8me (System Program)",-1),I=d('

Examen plus approfondi

Le mod\xE8le d'un compte

Il existe 3 types de comptes sur Solana :

  • Les comptes de donn\xE9es pour le stockage des donn\xE9es
  • Les comptes de programmes pour le stockage des programmes ex\xE9cutables
  • Les comptes natifs pour les programmes natifs de Solana tels que System, Stake, et Vote

Il existe deux types de comptes de donn\xE9es :

  • Les comptes appartenant au syst\xE8me
  • Les comptes PDA (adresse d\xE9riv\xE9e du programme)

Chaque compte a une adresse (g\xE9n\xE9ralement une cl\xE9 publique) et un propri\xE9taire (adresse d'un compte de programme). La liste compl\xE8te des champs qu'un compte stocke est \xE9num\xE9r\xE9 ci-dessous.

ChampsDescription
lamportsLe nombre de lamports appartenant \xE0 ce compte
ownerLe programme propri\xE9taire de ce compte
executableIndique si ce compte peut traiter des instructions
dataLe tableau d'octets de donn\xE9es brutes stock\xE9 par ce compte
rent_epochLa prochaine \xE9poque \xE0 laquelle ce compte doit payer une rente

Il existe quelques r\xE8gles importantes concernant la propri\xE9t\xE9 des comptes :

  • Seul le propri\xE9taire d'un compte de donn\xE9es peut modifier ses donn\xE9es et d\xE9biter les lamports
  • Tout le monde est autoris\xE9 \xE0 envoyer des lamports sur un compte de donn\xE9es
  • Le propri\xE9taire d'un compte peut d\xE9signer un nouveau propri\xE9taire si les donn\xE9es de celui-ci sont mises \xE0 z\xE9ro

Les comptes de programme ne stockent pas d'\xE9tat.

Par exemple, si vous avez un programme de comptage qui permet d'incr\xE9menter un compteur, vous devez cr\xE9er deux comptes, un compte pour stocker le code du programme, et un autre pour stocker le compteur.

Pour \xE9viter qu'un compte soit supprim\xE9, vous devez payer une rente.

Rente

Le stockage des donn\xE9es sur les comptes co\xFBte des SOL, et il est financ\xE9 par ce qu'on appelle une rente. Si vous maintenez un solde minimum \xE9quivalent \xE0 deux ann\xE9es de rente sur un compte, celui-ci sera exempt\xE9 du paiement de cette rente. Vous pouvez r\xE9cup\xE9rer la rente en fermant le compte et en renvoyant les lamports dans votre portefeuille.

La rente est pay\xE9e \xE0 deux moments diff\xE9rents :

  1. Lorsqu'il est r\xE9f\xE9renc\xE9 par une transaction
  2. Une fois par \xE9poque

Un pourcentage des rentes collect\xE9es par les comptes est d\xE9truit, tandis que le reste est distribu\xE9 aux comptes de vote \xE0 la fin de chaque slot.

Si le compte ne dispose pas d'assez d'argent pour payer la rente, le compte sera supprim\xE9 ainsi que ses donn\xE9es.

Il est \xE9galement important de noter que les nouveaux comptes doivent \xEAtre exempts de rente.

Autres Ressources

',22),P={href:"https://solana.wiki/zh-cn/docs/account-model/#account-storage",target:"_blank",rel:"noopener noreferrer"},w=t("Mod\xE8le de compte de Solana"),B={href:"https://docs.solana.com/developing/programming-model/accounts",target:"_blank",rel:"noopener noreferrer"},C=t("Documentation officielle"),V={href:"https://twitter.com/pencilflip/status/1452402100470644739",target:"_blank",rel:"noopener noreferrer"},D=t("Thread Twitter sur les comptes par Pencilflip"),T=e("h3",{id:"credit",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#credit","aria-hidden":"true"},"#"),t(" Cr\xE9dit")],-1),A=t("Ce concept de base est attribu\xE9 \xE0 Pencilflip. "),E={href:"https://twitter.com/intent/user?screen_name=pencilflip",target:"_blank",rel:"noopener noreferrer"},F=t("Suivez-le sur Twitter"),N=t(".");function M(j,K){const s=n("ExternalLinkIcon");return a(),i(l,null,[u,m,h,e("div",_,[f,e("ul",null,[g,x,b,v,L,e("li",null,[k,e("a",q,[y,o(s)])]),S,z])]),I,e("ul",null,[e("li",null,[e("a",P,[w,o(s)])]),e("li",null,[e("a",B,[C,o(s)])]),e("li",null,[e("a",V,[D,o(s)])])]),T,e("p",null,[A,e("a",E,[F,o(s)]),N])],64)}var U=r(c,[["render",M]]);export{U as default}; +import{_ as r,r as n,o as a,c as i,a as e,b as o,F as l,d as t,e as d}from"./app.2fbb9e96.js";var p="/assets/account_example.5b70d95a.jpeg";const c={},u=e("h1",{id:"comptes",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#comptes","aria-hidden":"true"},"#"),t(" Comptes")],-1),m=e("p",null,"Les comptes dans Solana sont utilis\xE9s pour stocker des \xE9tats. Ils constituent un \xE9l\xE9ment essentiel pour le d\xE9veloppement sur Solana.",-1),h=e("h2",{id:"faits",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#faits","aria-hidden":"true"},"#"),t(" Faits")],-1),_={class:"custom-container tip"},f=e("p",{class:"custom-container-title"},"Fiche d'Information",-1),g=e("li",null,"Les comptes sont utilis\xE9s pour stocker des donn\xE9es",-1),x=e("li",null,"Chaque compte a une adresse unique",-1),b=e("li",null,"Les comptes ont une taille maximale de 10MB (10 Mega Bytes)",-1),v=e("li",null,"Les comptes des adresses d\xE9riv\xE9es d'un programme (PDA) ont une taille maximale de 10KB (10 Kilo Bytes)",-1),L=e("li",null,"Les comptes des adresses d\xE9riv\xE9es d'un programme (PDA) peuvent \xEAtre utilis\xE9s pour signer au nom d'un programme",-1),k=t("La taille des comptes est fix\xE9e au moment de leur cr\xE9ation, mais elle peut \xEAtre ajust\xE9e en utilisant la fonctionnalit\xE9 "),q={href:"https://solanacookbook.com/references/programs.html#how-to-change-account-size",target:"_blank",rel:"noopener noreferrer"},y=t("realloc"),S=e("li",null,"Le stockage des donn\xE9es sur un compte est pay\xE9 par une rente",-1),z=e("li",null,"Le propri\xE9taire par d\xE9faut d'un compte est le programme syst\xE8me (System Program)",-1),I=d('

Examen plus approfondi

Le mod\xE8le d'un compte

Il existe 3 types de comptes sur Solana :

  • Les comptes de donn\xE9es pour le stockage des donn\xE9es
  • Les comptes de programmes pour le stockage des programmes ex\xE9cutables
  • Les comptes natifs pour les programmes natifs de Solana tels que System, Stake, et Vote

Il existe deux types de comptes de donn\xE9es :

  • Les comptes appartenant au syst\xE8me
  • Les comptes PDA (adresse d\xE9riv\xE9e du programme)

Chaque compte a une adresse (g\xE9n\xE9ralement une cl\xE9 publique) et un propri\xE9taire (adresse d'un compte de programme). La liste compl\xE8te des champs qu'un compte stocke est \xE9num\xE9r\xE9 ci-dessous.

ChampsDescription
lamportsLe nombre de lamports appartenant \xE0 ce compte
ownerLe programme propri\xE9taire de ce compte
executableIndique si ce compte peut traiter des instructions
dataLe tableau d'octets de donn\xE9es brutes stock\xE9 par ce compte
rent_epochLa prochaine \xE9poque \xE0 laquelle ce compte doit payer une rente

Il existe quelques r\xE8gles importantes concernant la propri\xE9t\xE9 des comptes :

  • Seul le propri\xE9taire d'un compte de donn\xE9es peut modifier ses donn\xE9es et d\xE9biter les lamports
  • Tout le monde est autoris\xE9 \xE0 envoyer des lamports sur un compte de donn\xE9es
  • Le propri\xE9taire d'un compte peut d\xE9signer un nouveau propri\xE9taire si les donn\xE9es de celui-ci sont mises \xE0 z\xE9ro

Les comptes de programme ne stockent pas d'\xE9tat.

Par exemple, si vous avez un programme de comptage qui permet d'incr\xE9menter un compteur, vous devez cr\xE9er deux comptes, un compte pour stocker le code du programme, et un autre pour stocker le compteur.

Pour \xE9viter qu'un compte soit supprim\xE9, vous devez payer une rente.

Rente

Le stockage des donn\xE9es sur les comptes co\xFBte des SOL, et il est financ\xE9 par ce qu'on appelle une rente. Si vous maintenez un solde minimum \xE9quivalent \xE0 deux ann\xE9es de rente sur un compte, celui-ci sera exempt\xE9 du paiement de cette rente. Vous pouvez r\xE9cup\xE9rer la rente en fermant le compte et en renvoyant les lamports dans votre portefeuille.

La rente est pay\xE9e \xE0 deux moments diff\xE9rents :

  1. Lorsqu'il est r\xE9f\xE9renc\xE9 par une transaction
  2. Une fois par \xE9poque

Un pourcentage des rentes collect\xE9es par les comptes est d\xE9truit, tandis que le reste est distribu\xE9 aux comptes de vote \xE0 la fin de chaque slot.

Si le compte ne dispose pas d'assez d'argent pour payer la rente, le compte sera supprim\xE9 ainsi que ses donn\xE9es.

Il est \xE9galement important de noter que les nouveaux comptes doivent \xEAtre exempts de rente.

Autres Ressources

',22),P={href:"https://solana.wiki/zh-cn/docs/account-model/#account-storage",target:"_blank",rel:"noopener noreferrer"},w=t("Mod\xE8le de compte de Solana"),B={href:"https://docs.solana.com/developing/programming-model/accounts",target:"_blank",rel:"noopener noreferrer"},C=t("Documentation officielle"),V={href:"https://twitter.com/pencilflip/status/1452402100470644739",target:"_blank",rel:"noopener noreferrer"},D=t("Thread Twitter sur les comptes par Pencilflip"),T=e("h3",{id:"credit",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#credit","aria-hidden":"true"},"#"),t(" Cr\xE9dit")],-1),A=t("Ce concept de base est attribu\xE9 \xE0 Pencilflip. "),E={href:"https://twitter.com/intent/user?screen_name=pencilflip",target:"_blank",rel:"noopener noreferrer"},F=t("Suivez-le sur Twitter"),N=t(".");function M(j,K){const s=n("ExternalLinkIcon");return a(),i(l,null,[u,m,h,e("div",_,[f,e("ul",null,[g,x,b,v,L,e("li",null,[k,e("a",q,[y,o(s)])]),S,z])]),I,e("ul",null,[e("li",null,[e("a",P,[w,o(s)])]),e("li",null,[e("a",B,[C,o(s)])]),e("li",null,[e("a",V,[D,o(s)])])]),T,e("p",null,[A,e("a",E,[F,o(s)]),N])],64)}var U=r(c,[["render",M]]);export{U as default}; diff --git a/docs/.vuepress/dist/assets/accounts.html.2456efd3.js b/docs/.vuepress/dist/assets/accounts.html.945e38f8.js similarity index 97% rename from docs/.vuepress/dist/assets/accounts.html.2456efd3.js rename to docs/.vuepress/dist/assets/accounts.html.945e38f8.js index 331737562..494db6a18 100644 --- a/docs/.vuepress/dist/assets/accounts.html.2456efd3.js +++ b/docs/.vuepress/dist/assets/accounts.html.945e38f8.js @@ -1 +1 @@ -const e={key:"v-2d09cebe",path:"/de/references/accounts.html",title:"Accounts",lang:"de-DE",frontmatter:{title:"Accounts",head:[["meta",{name:"title",content:"Solana Kochbuch | Kontoreferenzen"}],["meta",{name:"og:title",content:"Solana Kochbuch | Kontoreferenzen"}],["meta",{name:"description",content:"Erfahren Sie mehr \xFCber Konten auf Solana und wie Sie sie in Ihren Programmen verwenden."}],["meta",{name:"og:description",content:"Erfahren Sie mehr \xFCber Konten auf Solana und wie Sie sie in Ihren Programmen verwenden."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"So erstellen Sie ein Systemkonto",slug:"so-erstellen-sie-ein-systemkonto",children:[]},{level:2,title:"So berechnen Sie die Kontokosten",slug:"so-berechnen-sie-die-kontokosten",children:[]},{level:2,title:"So erstellen Sie Konten mit Seeds",slug:"so-erstellen-sie-konten-mit-seeds",children:[{level:3,title:"Generieren",slug:"generieren",children:[]},{level:3,title:"Erstellen",slug:"erstellen",children:[]},{level:3,title:"Transferieren",slug:"transferieren",children:[]}]},{level:2,title:"So erstellen Sie PDAs",slug:"so-erstellen-sie-pdas",children:[{level:3,title:"Generieren Sie einen PDA",slug:"generieren-sie-einen-pda",children:[]},{level:3,title:"Erstellen Sie einen PDA",slug:"erstellen-sie-einen-pda",children:[]}]},{level:2,title:"So signieren Sie mit einem PDA",slug:"so-signieren-sie-mit-einem-pda",children:[{level:3,title:"Programm",slug:"programm",children:[]},{level:3,title:"Client",slug:"client-1",children:[]}]},{level:2,title:"So erhalten Sie Programmkonten",slug:"so-erhalten-sie-programmkonten",children:[]},{level:2,title:"So schlie\xDFen Sie Konten",slug:"so-schlie\xDFen-sie-konten",children:[]},{level:2,title:"So erhalten Sie den Kontostand",slug:"so-erhalten-sie-den-kontostand",children:[]}],git:{updatedTime:1672345621e3},filePathRelative:"de/references/accounts.md"};export{e as data}; +const e={key:"v-2d09cebe",path:"/de/references/accounts.html",title:"Accounts",lang:"de-DE",frontmatter:{title:"Accounts",head:[["meta",{name:"title",content:"Solana Kochbuch | Kontoreferenzen"}],["meta",{name:"og:title",content:"Solana Kochbuch | Kontoreferenzen"}],["meta",{name:"description",content:"Erfahren Sie mehr \xFCber Konten auf Solana und wie Sie sie in Ihren Programmen verwenden."}],["meta",{name:"og:description",content:"Erfahren Sie mehr \xFCber Konten auf Solana und wie Sie sie in Ihren Programmen verwenden."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"So erstellen Sie ein Systemkonto",slug:"so-erstellen-sie-ein-systemkonto",children:[]},{level:2,title:"So berechnen Sie die Kontokosten",slug:"so-berechnen-sie-die-kontokosten",children:[]},{level:2,title:"So erstellen Sie Konten mit Seeds",slug:"so-erstellen-sie-konten-mit-seeds",children:[{level:3,title:"Generieren",slug:"generieren",children:[]},{level:3,title:"Erstellen",slug:"erstellen",children:[]},{level:3,title:"Transferieren",slug:"transferieren",children:[]}]},{level:2,title:"So erstellen Sie PDAs",slug:"so-erstellen-sie-pdas",children:[{level:3,title:"Generieren Sie einen PDA",slug:"generieren-sie-einen-pda",children:[]},{level:3,title:"Erstellen Sie einen PDA",slug:"erstellen-sie-einen-pda",children:[]}]},{level:2,title:"So signieren Sie mit einem PDA",slug:"so-signieren-sie-mit-einem-pda",children:[{level:3,title:"Programm",slug:"programm",children:[]},{level:3,title:"Client",slug:"client-1",children:[]}]},{level:2,title:"So erhalten Sie Programmkonten",slug:"so-erhalten-sie-programmkonten",children:[]},{level:2,title:"So schlie\xDFen Sie Konten",slug:"so-schlie\xDFen-sie-konten",children:[]},{level:2,title:"So erhalten Sie den Kontostand",slug:"so-erhalten-sie-den-kontostand",children:[]}],git:{updatedTime:1676666728e3},filePathRelative:"de/references/accounts.md"};export{e as data}; diff --git a/docs/.vuepress/dist/assets/accounts.html.9cb1b0b9.js b/docs/.vuepress/dist/assets/accounts.html.9cb1b0b9.js new file mode 100644 index 000000000..3f7538655 --- /dev/null +++ b/docs/.vuepress/dist/assets/accounts.html.9cb1b0b9.js @@ -0,0 +1 @@ +import{_ as h,r as e,o as i,c as a,a as t,b as o,F as r,d as c,e as l}from"./app.2fbb9e96.js";var u="/assets/account_example.5b70d95a.jpeg";const s={},d=t("h1",{id:"account",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#account","aria-hidden":"true"},"#"),c(" Account")],-1),p=t("p",null,"Account trong l\u1EADp tr\xECnh Solana \u0111\u01B0\u1EE3c hi\u1EC3u nh\u01B0 m\u1ED9t v\xF9ng nh\u1EDB \u0111\u1EC3 l\u01B0u d\u1EEF li\u1EC7u. Ch\xFAng l\xE0 m\u1ED9t kh\u1ED1i c\u01A1 s\u1EDF trong qu\xE1 tr\xECnh ph\xE1t tri\u1EC3n \u1EE9ng d\u1EE5ng tr\xEAn Solana.",-1),m=t("h2",{id:"co-the-ban-chua-biet",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#co-the-ban-chua-biet","aria-hidden":"true"},"#"),c(" C\xF3 th\u1EC3 b\u1EA1n ch\u01B0a bi\u1EBFt")],-1),g={class:"custom-container tip"},_=t("p",{class:"custom-container-title"},"Nh\u1EEFng \u0111i\u1EC1u c\xF3 th\u1EC3 b\u1EA1n ch\u01B0a bi\u1EBFt",-1),A=t("li",null,"Account \u0111\u01B0\u01A1c d\xF9ng \u0111\u1EC3 l\u01B0u tr\u1EEF d\u1EEF li\u1EC7u",-1),b=t("li",null,"M\u1ED7i Account s\u1EBD c\xF3 m\u1ED9t \u0111\u1ECBa ch\u1EC9 duy nh\u1EA5t",-1),k=t("li",null,"Account c\xF3 k\xEDch th\u01B0\u1EDBc t\u1ED1i \u0111a l\xE0 10MB (10 Mega Bytes)",-1),f=t("li",null,"PDA Account c\xF3 k\xEDch th\u01B0\u1EDBc t\u1ED1i \u0111a l\xE0 10KB (10 Kilo Bytes)",-1),v=t("li",null,"PDA Account c\xF3 th\u1EC3 d\xF9ng \u0111\u1EC3 k\xFD \u0111\u1EA1i di\u1EC7n cho m\u1ED9t program",-1),y=c("K\xEDch th\u01B0\u1EDBc Account \u0111\u01B0\u1EE3c c\u1ED1 \u0111\u1ECBnh t\u1EA1i th\u1EDDi \u0111i\u1EC3m kh\u1EDFi t\u1EA1o, nh\u01B0ng v\u1EABn c\xF3 th\u1EC3 \u0111i\u1EC1u ch\u1EC9nh b\u1EB1ng "),x={href:"https://solanacookbook.com/references/programs.html#how-to-change-account-size",target:"_blank",rel:"noopener noreferrer"},S=c("realloc"),P=t("li",null,"V\xF9ng nh\u1EDB d\u1EEF li\u1EC7u \u0111\u01B0\u1EE3c c\u1EA5p ph\xE1t cho Account ph\u1EA3i \u0111\u01B0\u1EE3c thu\xEA b\u1EB1ng c\xE1ch tr\u1EA3 ph\xED",-1),w=t("li",null,"Account owner trong tr\u01B0\u1EDDng h\u1EE3p m\u1EB7c \u0111\u1ECBnh s\u1EBD l\xE0 System Program",-1),C=l('

Chi ti\u1EBFt

C\u1EA5u tr\xFAc Account

C\xF3 3 ki\u1EC3u Account tr\xEAn Solana:

  • Data Accounts d\xF9ng \u0111\u1EC3 l\u01B0u tr\u1EEF d\u1EEF li\u1EC7u
  • Program Accounts d\xF9ng \u0111\u1EC3 l\u01B0u ch\u01B0\u01A1ng tr\xECnh th\u1EF1c thi
  • Native Accounts \xE1m ch\u1EC9 native programs tr\xEAn Solana nh\u01B0 l\xE0 System, Stake, v\xE0 Vote

Ki\u1EC3u Data Account l\u1EA1i c\xF3 2 ki\u1EC3u con:

  • Account \u0111\u01B0\u1EE3c s\u1EDF h\u1EEFu b\u1EDFi System
  • PDA (Program Derived Address) Accounts

M\u1ED7i Account l\u1EA1i c\xF3 m\u1ED9t \u0111\u1ECBa ch\u1EC9 (th\u01B0\u1EDDng l\xE0 public key - kho\xE1 c\xF4ng khai) v\xE0 m\u1ED9t owner (\u0111\u1ECBa ch\u1EC9 c\u1EE7a m\u1ED9t Program Account). \u0110\u1EA7y \u0111\u1EE7 c\xE1c tr\u01B0\u1EDDng c\u1EE7a m\u1ED9t Account \u0111\u01B0\u1EE3c tr\xECnh b\xE0y \u1EDF b\u1EA3ng d\u01B0\u1EDBi.

Tr\u01B0\u1EDDngM\xF4 t\u1EA3
lamportsS\u1ED1 l\u01B0\u1EE3ng lamports thu\u1ED9c s\u1EDF h\u1EEFu b\u1EDFi Account \u0111\xF3
owner\u0110\u1ECBa ch\u1EC9 Program Account \u0111ang ki\u1EBFm so\xE1t Account \u0111\xF3
executableAccount n\xE0y c\xF3 th\u1EC3 th\u1EF1c thi c\xE1c instructions hay kh\xF4ng?
dataD\u1EEF li\u1EC7u th\xF4 d\u01B0\u1EDBi d\u1EA1ng c\xE1c bytes \u0111\u01B0\u1EE3c l\u01B0u tr\u1EEF trong Account
rent_epochK\u1EF3 h\u1EA1n thu\xEA v\xF9ng nh\u1EDB ti\u1EBFp theo cho Account

C\xF3 m\u1ED9t v\xE0i quy t\u1EAFc quan tr\u1ECDng v\u1EC1 quy\u1EC1n s\u1EDF h\u1EEFu:

  • Ch\u1EC9 owner m\u1EDBi \u0111\u01B0\u1EE3c ch\u1EC9nh s\u1EEDa c\u0169ng nh\u01B0 r\xFAt s\u1ED1 lamports t\u1EEB m\u1ED9t Data Account
  • B\u1EA5t k\u1EF3 ai c\u0169ng \u0111\u01B0\u1EE3c ph\xE9p n\u1EA1p lamports v\xE0o m\u1ED9t Data Account
  • Owner c\u1EE7a m\u1ED9t Account c\xF3 th\u1EC3 \u0111\u01B0\u1EE3c g\xE1n cho m\u1ED9t owner m\u1EDBi khi v\xE0 ch\u1EC9 khi v\xF9ng nh\u1EDB c\u1EE7a Account \u0111\xF3 \u0111\u01B0\u1EE3c ho\xE0n tr\u1EA3

Program Accounts kh\xF4ng \u0111\u01B0\u1EE3c l\u01B0u state.

V\xED d\u1EE5, n\u1EBFu b\u1EA1n c\xF3 m\u1ED9t ch\u01B0\u01A1ng tr\xECnh \u0111\u1EBFm tr\xEAn m\u1ED9t Program Account v\xE0 cho ph\xE9p t\u0103ng b\u1ED9 \u0111\u1EBFm l\xEAn sau m\u1ED7i l\u1EA7n t\u01B0\u01A1ng t\xE1c, b\u1EA1n ph\u1EA3i t\u1EA1o t\u1ED1i thi\u1EC3u 2 Account. Trong \u0111\xF3, m\u1ED9t cho Program Account \u0111\u1EC3 l\u01B0u code th\u1EF1c thi, v\xE0 m\u1ED9t cho Data Account \u0111\u1EC3 l\u01B0u d\u1EEF li\u1EC7u b\u1ED9 \u0111\u1EBFm.

\u0110\u1EC3 tr\xE1nh vi\u1EC7c m\u1ED9t Account b\u1ECB xo\xE1, b\u1EA1n ph\u1EA3i tr\u1EA3 chi ph\xED \u0111\u1EC3 thu\xEA v\xF9ng nh\u1EDB cho Account \u0111\xF3.

Thu\xEA

L\u01B0u tr\u1EEF d\u1EEF li\u1EC7u v\xE0o Account v\xE0 duy tr\xEC Account \u0111\xF3 s\u1EBD ph\xE1t sinh chi ph\xED SOL. Chi ph\xED n\xE0y \u0111\u01B0\u1EE3c g\u1ECDi l\xE0 chi ph\xED thu\xEA. N\u1EBFu chi ph\xED thu\xEA \u0111\u01B0\u1EE3c duy tr\xEC \u1EDF m\u1EE9c t\u1ED1i thi\u1EC3u l\xE0 2 n\u0103m cho Account \u0111\xF3, th\xEC b\u1EA1n s\u1EBD \u0111\u01B0\u1EE3c mi\u1EC5n ph\xED l\u01B0u tr\u1EEF. B\u1EA1n c\u0169ng c\xF3 th\u1EC3 thu h\u1ED3i l\u1EA1i ph\xED c\u1ECDc b\u1EB1ng c\xE1ch \u0111\xF3ng Account. S\u1ED1 lamports c\u1ECDc s\u1EBD \u0111\u01B0\u1EE3c ho\xE0n tr\u1EA3 v\u1EC1 \u0111\u1ECBa ch\u1EC9 v\xED c\u1EE7a b\u1EA1n.

Chi ph\xED thu\xEA \u0111\u01B0\u1EE3c t\xEDnh to\xE1n v\xE0 chi tr\u1EA3 \u1EDF 2 th\u1EDDi \u0111i\u1EC3m kh\xE1c nhau:

  1. Khi c\xF3 b\u1EA5t k\u1EF3 giao d\u1ECBch n\xE0o c\xF3 tham chi\u1EBFu \u0111\u1EBFn Account \u0111\xF3.
  2. \u0110\u1ECBnh k\u1EF3 m\u1ED7i epoch.

M\u1ED9t ph\u1EA7n c\u1EE7a chi ph\xED thu\xEA thu \u0111\u01B0\u1EE3c s\u1EBD \u0111\u01B0\u1EE3c ti\xEAu hu\u1EF7, trong khi ph\u1EA7n c\xF2n l\u1EA1i s\u1EBD \u0111\u01B0\u1EE3c ph\xE2n chia cho c\xE1c Vote Account sau m\u1ED7i slot.

N\u1EBFu m\u1ED9t Account kh\xF4ng \u0111\u1EE7 c\u1ECDc \u0111\u1EC3 chi tr\u1EA3 ph\xED thu\xEA, Account \u0111\xF3 s\u1EBD b\u1ECB thu h\u1ED3i v\xE0 to\xE0n b\u1ED9 d\u1EEF li\u1EC7u s\u1EBD b\u1ECB xo\xE1.

C\xE1c ngu\u1ED3n t\xE0i li\u1EC7u kh\xE1c

',21),D={href:"https://solana.wiki/zh-cn/docs/account-model/#account-storage",target:"_blank",rel:"noopener noreferrer"},B=c("Solana Account Model"),N={href:"https://docs.solana.com/developing/programming-model/accounts",target:"_blank",rel:"noopener noreferrer"},V=c("T\xE0i li\u1EC7u ch\xEDnh th\u1ED1ng"),K={href:"https://twitter.com/pencilflip/status/1452402100470644739",target:"_blank",rel:"noopener noreferrer"},M=c("pencilflip account thread"),T=t("h3",{id:"loi-cam-on",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#loi-cam-on","aria-hidden":"true"},"#"),c(" L\u1EDDi c\u1EA3m \u01A1n")],-1),L=c("Kh\xE1i ni\u1EC7m c\u0103n b\u1EA3n n\xE0y \u0111\u01B0\u1EE3c \u0111\xF3ng g\xF3p c\u1EE7a Pencilflip. "),q={href:"https://twitter.com/intent/user?screen_name=pencilflip",target:"_blank",rel:"noopener noreferrer"},E=c("Theo d\xF5i anh \u1EA5y tr\xEAn Twitter"),z=c(".");function F(I,O){const n=e("ExternalLinkIcon");return i(),a(r,null,[d,p,m,t("div",g,[_,t("ul",null,[A,b,k,f,v,t("li",null,[y,t("a",x,[S,o(n)])]),P,w])]),C,t("ul",null,[t("li",null,[t("a",D,[B,o(n)])]),t("li",null,[t("a",N,[V,o(n)])]),t("li",null,[t("a",K,[M,o(n)])])]),T,t("p",null,[L,t("a",q,[E,o(n)]),z])],64)}var G=h(s,[["render",F]]);export{G as default}; diff --git a/docs/.vuepress/dist/assets/accounts.html.b2e4d9ac.js b/docs/.vuepress/dist/assets/accounts.html.9e489d77.js similarity index 97% rename from docs/.vuepress/dist/assets/accounts.html.b2e4d9ac.js rename to docs/.vuepress/dist/assets/accounts.html.9e489d77.js index 2982256f6..85f2c4d54 100644 --- a/docs/.vuepress/dist/assets/accounts.html.b2e4d9ac.js +++ b/docs/.vuepress/dist/assets/accounts.html.9e489d77.js @@ -1 +1 @@ -const e={key:"v-3caeb514",path:"/es/references/accounts.html",title:"Cuentas",lang:"es",frontmatter:{title:"Cuentas",head:[["meta",{name:"title",content:"Libro de recetas de Solana | Cuentas"}],["meta",{name:"og:title",content:"Libro de recetas de Solana | Cuentas"}],["meta",{name:"description",content:"Aprende m\xE1s sobre cuentas en Solana y c\xF3mo usarlas en tus programas."}],["meta",{name:"og:description",content:"Aprende m\xE1s sobre cuentas en Solana y c\xF3mo usarlas en tus programas."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"C\xF3mo crear una cuenta del sistema",slug:"como-crear-una-cuenta-del-sistema",children:[]},{level:2,title:"C\xF3mo calcular el costo de una cuenta",slug:"como-calcular-el-costo-de-una-cuenta",children:[]},{level:2,title:"C\xF3mo crear cuentas con semillas",slug:"como-crear-cuentas-con-semillas",children:[{level:3,title:"Generar",slug:"generar",children:[]},{level:3,title:"Crear",slug:"crear",children:[]},{level:3,title:"Transferir",slug:"transferir",children:[]}]},{level:2,title:"C\xF3mo crear PDAs",slug:"como-crear-pdas",children:[{level:3,title:"Generar una cuenta derivada de programa (PDA)",slug:"generar-una-cuenta-derivada-de-programa-pda",children:[]},{level:3,title:"Crear una cuenta derivada de programa (PDA)",slug:"crear-una-cuenta-derivada-de-programa-pda",children:[]}]},{level:2,title:"C\xF3mo firmar con una cuenta derivada de programa (PDA)",slug:"como-firmar-con-una-cuenta-derivada-de-programa-pda",children:[{level:3,title:"Programa",slug:"programa-1",children:[]},{level:3,title:"Cliente",slug:"cliente-1",children:[]}]},{level:2,title:"C\xF3mo obtener cuentas de programas",slug:"como-obtener-cuentas-de-programas",children:[]},{level:2,title:"C\xF3mo cerrar cuentas",slug:"como-cerrar-cuentas",children:[]},{level:2,title:"C\xF3mo obtener el balance de una cuenta",slug:"como-obtener-el-balance-de-una-cuenta",children:[]}],git:{updatedTime:1663621463e3},filePathRelative:"es/references/accounts.md"};export{e as data}; +const e={key:"v-3caeb514",path:"/es/references/accounts.html",title:"Cuentas",lang:"es",frontmatter:{title:"Cuentas",head:[["meta",{name:"title",content:"Libro de recetas de Solana | Cuentas"}],["meta",{name:"og:title",content:"Libro de recetas de Solana | Cuentas"}],["meta",{name:"description",content:"Aprende m\xE1s sobre cuentas en Solana y c\xF3mo usarlas en tus programas."}],["meta",{name:"og:description",content:"Aprende m\xE1s sobre cuentas en Solana y c\xF3mo usarlas en tus programas."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"C\xF3mo crear una cuenta del sistema",slug:"como-crear-una-cuenta-del-sistema",children:[]},{level:2,title:"C\xF3mo calcular el costo de una cuenta",slug:"como-calcular-el-costo-de-una-cuenta",children:[]},{level:2,title:"C\xF3mo crear cuentas con semillas",slug:"como-crear-cuentas-con-semillas",children:[{level:3,title:"Generar",slug:"generar",children:[]},{level:3,title:"Crear",slug:"crear",children:[]},{level:3,title:"Transferir",slug:"transferir",children:[]}]},{level:2,title:"C\xF3mo crear PDAs",slug:"como-crear-pdas",children:[{level:3,title:"Generar una cuenta derivada de programa (PDA)",slug:"generar-una-cuenta-derivada-de-programa-pda",children:[]},{level:3,title:"Crear una cuenta derivada de programa (PDA)",slug:"crear-una-cuenta-derivada-de-programa-pda",children:[]}]},{level:2,title:"C\xF3mo firmar con una cuenta derivada de programa (PDA)",slug:"como-firmar-con-una-cuenta-derivada-de-programa-pda",children:[{level:3,title:"Programa",slug:"programa-1",children:[]},{level:3,title:"Cliente",slug:"cliente-1",children:[]}]},{level:2,title:"C\xF3mo obtener cuentas de programas",slug:"como-obtener-cuentas-de-programas",children:[]},{level:2,title:"C\xF3mo cerrar cuentas",slug:"como-cerrar-cuentas",children:[]},{level:2,title:"C\xF3mo obtener el balance de una cuenta",slug:"como-obtener-el-balance-de-una-cuenta",children:[]}],git:{updatedTime:1676666728e3},filePathRelative:"es/references/accounts.md"};export{e as data}; diff --git a/docs/.vuepress/dist/assets/accounts.html.ed5f030f.js b/docs/.vuepress/dist/assets/accounts.html.9f7cd589.js similarity index 98% rename from docs/.vuepress/dist/assets/accounts.html.ed5f030f.js rename to docs/.vuepress/dist/assets/accounts.html.9f7cd589.js index e4ee28ab9..e45b4b9fc 100644 --- a/docs/.vuepress/dist/assets/accounts.html.ed5f030f.js +++ b/docs/.vuepress/dist/assets/accounts.html.9f7cd589.js @@ -1 +1 @@ -import{_ as i,r as d,o as r,c as s,a,b as t,F as u,d as n,e as l}from"./app.cfdf84e7.js";var o="/assets/account_example.5b70d95a.jpeg";const k={},m=a("h1",{id:"akun",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#akun","aria-hidden":"true"},"#"),n(" Akun")],-1),p=a("p",null,"Akun-akun di dalam solana digunakan untuk menyimpan status. Akun-akun itu adalah blok yang sangat penting dalam pengembangan di Solana.",-1),h=a("h2",{id:"fakta-fakta",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#fakta-fakta","aria-hidden":"true"},"#"),n(" Fakta-Fakta")],-1),c={class:"custom-container tip"},_=a("p",{class:"custom-container-title"},"Fakta",-1),b=a("li",null,"Akun-akun digunakan untuk menyimpan data",-1),g=a("li",null,"Setiap akun memiliki alamat unik",-1),y=a("li",null,"Akun-akun memiliki ukuran maksimal yaitu 10MB (10 Mega Bytes)",-1),f=a("li",null,"Akun-akun PDA memiliki ukuran maksimal yaitu 10KB (10 Kilo Bytes)",-1),w=a("li",null,"Akun-akun PDA bisa digunakan untuk menandatangani atas nama program",-1),A=n("Ukuran akun-akun sudah ditetapkan pada waktu pembuatan, tapi bisa dilakukan penyesuaian menggunakan "),x={href:"https://solanacookbook.com/references/programs.html#how-to-change-account-size",target:"_blank",rel:"noopener noreferrer"},S=n("realloc"),D=a("li",null,"Penyimpanan data akun dibayarkan dengan sewa",-1),P=a("li",null,"Pemilik akun bawaan adalah Program Sistem",-1),B=l('

Lebih Dalam

Model Akun

Ada 3 macam akun di Solana :

  • Data akun penyimpan data
  • Akun program menyimpan program yang dapat dieksekusi
  • Akun Bawaan (native) yang menunjukkan program bawaan di solana seperti Sistem, Stake, dan Vote

Dalam data akun, ada 2 jenis yaitu:

  • Akun-akun yang dimiliki sistem
  • Akun PDA (Program Derived Address)

Setiap akun memiliki sebuah alamat (biasanya disebut public key) dan seorang pemilik (alamat dari akun program). Daftar lengkap tipe apa saja yang disimpan oleh akun dapat ditemukan di bawah ini.

TipeDeskripsi
lamportsJumlah lamports yang dimiliki oleh akun ini
ownerPemilik program akun ini
executableApakah akun ini bisa untuk memproses intruksi
dataArray byte data mentah yang disimpan oleh akun ini
rent_epochDi epoch berikutnya, akun ini akan berutang sewa

Berikut ini beberapa aturan penting kepemilikan :

  • Hanya pemilik data akun yang bisa mengubah datanya dan data lamports
  • Siapapun diizinkan untuk mengkreditkan lamports ke data akun
  • Pemilik akun dapat menetapkan pemilik baru jika data akun tidak ada

Akun program tidak menyimpan status.

Sebagai contoh, jika anda memiliki program penghitung yang memungkinkan anda menambah penghitung, anda harus membuat dua akun, satu akun untuk menyimpan kode program, dan satu untuk menyimpan konter.

Untuk mencegah sebuah akun dihapus, anda harus membayar sewa.

Menyewa

Menyimpan data pada akun membutuhkan biaya berupa SOL untuk pemeliharaan, dan itu didanai oleh apa yang disebut dengan sewa. Jika anda menyediakan biaya pemeliharaan minimum yang setara untuk 2 tahun pembayaran sewa di akun, akun anda akan dibebaskan dari pembayaran sewa. Anda bisa mengambil sewa dengan menutup akun dan mengirimkan lamports kembali ke wallet anda.

Sewa dibayarkan selama dua waktu yang berbeda:

  1. Ketika dirujuk oleh suatu transaksi
  2. Sekali dalam satu masa epoch

Persentase sewa yang dikumpulkan oleh akun-akun akan dihancurkan, sementara sisanya didistribusikan untuk memilih akun di akhir setiap slot.

Jika akun tidak punya saldo yang cukup untuk membayar seewa, akun akan dibatalkan alokasinya dan datanya akan dihapus.

Sumber Lainnya

',21),j={href:"https://solana.wiki/zh-cn/docs/account-model/#account-storage",target:"_blank",rel:"noopener noreferrer"},v=n("Solana Account Model"),F={href:"https://docs.solana.com/developing/programming-model/accounts",target:"_blank",rel:"noopener noreferrer"},M=n("Official Documentation"),L={href:"https://twitter.com/pencilflip/status/1452402100470644739",target:"_blank",rel:"noopener noreferrer"},V=n("pencilflip account thread"),K=a("h3",{id:"credit",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#credit","aria-hidden":"true"},"#"),n(" Credit")],-1),N=n("Konsep dasar ini dikreditkan ke Pencilflip. "),z={href:"https://twitter.com/intent/user?screen_name=pencilflip",target:"_blank",rel:"noopener noreferrer"},E=n("Follow him on Twitter"),J=n(".");function T(C,I){const e=d("ExternalLinkIcon");return r(),s(u,null,[m,p,h,a("div",c,[_,a("ul",null,[b,g,y,f,w,a("li",null,[A,a("a",x,[S,t(e)])]),D,P])]),B,a("ul",null,[a("li",null,[a("a",j,[v,t(e)])]),a("li",null,[a("a",F,[M,t(e)])]),a("li",null,[a("a",L,[V,t(e)])])]),K,a("p",null,[N,a("a",z,[E,t(e)]),J])],64)}var U=i(k,[["render",T]]);export{U as default}; +import{_ as i,r as d,o as r,c as s,a,b as t,F as u,d as n,e as l}from"./app.2fbb9e96.js";var o="/assets/account_example.5b70d95a.jpeg";const k={},m=a("h1",{id:"akun",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#akun","aria-hidden":"true"},"#"),n(" Akun")],-1),p=a("p",null,"Akun-akun di dalam solana digunakan untuk menyimpan status. Akun-akun itu adalah blok yang sangat penting dalam pengembangan di Solana.",-1),h=a("h2",{id:"fakta-fakta",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#fakta-fakta","aria-hidden":"true"},"#"),n(" Fakta-Fakta")],-1),c={class:"custom-container tip"},_=a("p",{class:"custom-container-title"},"Fakta",-1),b=a("li",null,"Akun-akun digunakan untuk menyimpan data",-1),g=a("li",null,"Setiap akun memiliki alamat unik",-1),y=a("li",null,"Akun-akun memiliki ukuran maksimal yaitu 10MB (10 Mega Bytes)",-1),f=a("li",null,"Akun-akun PDA memiliki ukuran maksimal yaitu 10KB (10 Kilo Bytes)",-1),w=a("li",null,"Akun-akun PDA bisa digunakan untuk menandatangani atas nama program",-1),A=n("Ukuran akun-akun sudah ditetapkan pada waktu pembuatan, tapi bisa dilakukan penyesuaian menggunakan "),x={href:"https://solanacookbook.com/references/programs.html#how-to-change-account-size",target:"_blank",rel:"noopener noreferrer"},S=n("realloc"),D=a("li",null,"Penyimpanan data akun dibayarkan dengan sewa",-1),P=a("li",null,"Pemilik akun bawaan adalah Program Sistem",-1),B=l('

Lebih Dalam

Model Akun

Ada 3 macam akun di Solana :

  • Data akun penyimpan data
  • Akun program menyimpan program yang dapat dieksekusi
  • Akun Bawaan (native) yang menunjukkan program bawaan di solana seperti Sistem, Stake, dan Vote

Dalam data akun, ada 2 jenis yaitu:

  • Akun-akun yang dimiliki sistem
  • Akun PDA (Program Derived Address)

Setiap akun memiliki sebuah alamat (biasanya disebut public key) dan seorang pemilik (alamat dari akun program). Daftar lengkap tipe apa saja yang disimpan oleh akun dapat ditemukan di bawah ini.

TipeDeskripsi
lamportsJumlah lamports yang dimiliki oleh akun ini
ownerPemilik program akun ini
executableApakah akun ini bisa untuk memproses intruksi
dataArray byte data mentah yang disimpan oleh akun ini
rent_epochDi epoch berikutnya, akun ini akan berutang sewa

Berikut ini beberapa aturan penting kepemilikan :

  • Hanya pemilik data akun yang bisa mengubah datanya dan data lamports
  • Siapapun diizinkan untuk mengkreditkan lamports ke data akun
  • Pemilik akun dapat menetapkan pemilik baru jika data akun tidak ada

Akun program tidak menyimpan status.

Sebagai contoh, jika anda memiliki program penghitung yang memungkinkan anda menambah penghitung, anda harus membuat dua akun, satu akun untuk menyimpan kode program, dan satu untuk menyimpan konter.

Untuk mencegah sebuah akun dihapus, anda harus membayar sewa.

Menyewa

Menyimpan data pada akun membutuhkan biaya berupa SOL untuk pemeliharaan, dan itu didanai oleh apa yang disebut dengan sewa. Jika anda menyediakan biaya pemeliharaan minimum yang setara untuk 2 tahun pembayaran sewa di akun, akun anda akan dibebaskan dari pembayaran sewa. Anda bisa mengambil sewa dengan menutup akun dan mengirimkan lamports kembali ke wallet anda.

Sewa dibayarkan selama dua waktu yang berbeda:

  1. Ketika dirujuk oleh suatu transaksi
  2. Sekali dalam satu masa epoch

Persentase sewa yang dikumpulkan oleh akun-akun akan dihancurkan, sementara sisanya didistribusikan untuk memilih akun di akhir setiap slot.

Jika akun tidak punya saldo yang cukup untuk membayar seewa, akun akan dibatalkan alokasinya dan datanya akan dihapus.

Sumber Lainnya

',21),j={href:"https://solana.wiki/zh-cn/docs/account-model/#account-storage",target:"_blank",rel:"noopener noreferrer"},v=n("Solana Account Model"),F={href:"https://docs.solana.com/developing/programming-model/accounts",target:"_blank",rel:"noopener noreferrer"},M=n("Official Documentation"),L={href:"https://twitter.com/pencilflip/status/1452402100470644739",target:"_blank",rel:"noopener noreferrer"},V=n("pencilflip account thread"),K=a("h3",{id:"credit",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#credit","aria-hidden":"true"},"#"),n(" Credit")],-1),N=n("Konsep dasar ini dikreditkan ke Pencilflip. "),z={href:"https://twitter.com/intent/user?screen_name=pencilflip",target:"_blank",rel:"noopener noreferrer"},E=n("Follow him on Twitter"),J=n(".");function T(C,I){const e=d("ExternalLinkIcon");return r(),s(u,null,[m,p,h,a("div",c,[_,a("ul",null,[b,g,y,f,w,a("li",null,[A,a("a",x,[S,t(e)])]),D,P])]),B,a("ul",null,[a("li",null,[a("a",j,[v,t(e)])]),a("li",null,[a("a",F,[M,t(e)])]),a("li",null,[a("a",L,[V,t(e)])])]),K,a("p",null,[N,a("a",z,[E,t(e)]),J])],64)}var U=i(k,[["render",T]]);export{U as default}; diff --git a/docs/.vuepress/dist/assets/accounts.html.66496e06.js b/docs/.vuepress/dist/assets/accounts.html.a82c0a3f.js similarity index 99% rename from docs/.vuepress/dist/assets/accounts.html.66496e06.js rename to docs/.vuepress/dist/assets/accounts.html.a82c0a3f.js index 6ba75cabb..b4144ee66 100644 --- a/docs/.vuepress/dist/assets/accounts.html.66496e06.js +++ b/docs/.vuepress/dist/assets/accounts.html.a82c0a3f.js @@ -1 +1 @@ -import{_ as n,r,o as a,c as s,a as t,b as c,F as l,d as e,e as i}from"./app.cfdf84e7.js";var d="/assets/account_example.5b70d95a.jpeg";const u={},h=t("h1",{id:"accounts",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#accounts","aria-hidden":"true"},"#"),e(" Accounts")],-1),_=t("p",null,[e("Solana\uC5D0\uC11C Account\uB294 \uC0C1\uD0DC\uB97C \uC800\uC7A5\uD558\uAE30 \uC704\uD574 \uC0AC\uC6A9\uB429\uB2C8\uB2E4."),t("br"),e(" Account\uB294 Solana\uC5D0\uC11C \uAC1C\uBC1C\uC744 \uC704\uD55C \uAC00\uC7A5 \uD544\uC218\uC801\uC778 \uAD6C\uC131 \uC694\uC18C\uC785\uB2C8\uB2E4.")],-1),p=t("h2",{id:"facts",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#facts","aria-hidden":"true"},"#"),e(" Facts")],-1),A={class:"custom-container tip"},m=t("p",{class:"custom-container-title"},"Fact Sheet",-1),f=t("li",null,"Account\uB294 \uB370\uC774\uD130\uB97C \uC800\uC7A5\uD558\uAE30 \uC704\uD574 \uC0AC\uC6A9\uB429\uB2C8\uB2E4.",-1),b=t("li",null,"\uAC01 Account\uB294 \uC720\uC77C\uD55C address\uB97C \uAC16\uACE0 \uC788\uC2B5\uB2C8\uB2E4.",-1),g=t("li",null,"Account\uB294 10MB\uC758 \uCD5C\uB300 \uD06C\uAE30\uB97C \uAC00\uC9D1\uB2C8\uB2E4.",-1),x=t("li",null,"PDA Account\uB294 10KB\uC758 \uCD5C\uB300 \uD06C\uAE30\uB97C \uAC00\uC9D1\uB2C8\uB2E4.",-1),k=t("li",null,"PDA Account\uB294 Program\uC744 \uB300\uC2E0\uD574 \uC11C\uBA85\uD558\uAE30 \uC704\uD574 \uC0AC\uC6A9\uB420 \uC218 \uC788\uC2B5\uB2C8\uB2E4.",-1),v=e("Account \uD06C\uAE30\uB294 \uC0DD\uC131 \uC2DC\uC810\uC5D0 \uACE0\uC815\uB429\uB2C8\uB2E4. \uD558\uC9C0\uB9CC "),D={href:"https://solanacookbook.com/references/programs.html#how-to-change-account-size",target:"_blank",rel:"noopener noreferrer"},y=e("realloc"),P=e("\uC744 \uC0AC\uC6A9\uD574\uC11C \uC870\uC815\uB420 \uC218 \uC788\uC2B5\uB2C8\uB2E4."),S=t("li",null,"Account \uB370\uC774\uD130 \uC800\uC7A5\uC740 rent\uB77C\uB294 \uBE44\uC6A9\uC774 \uBC1C\uC0DD\uD569\uB2C8\uB2E4.",-1),w=t("li",null,"\uAE30\uBCF8\uC801\uC73C\uB85C Account\uC758 \uC18C\uC720\uC790\uB294 System Program\uC785\uB2C8\uB2E4.",-1),F=i('

Deep Dive

Account Model

\uC194\uB77C\uB098\uC5D0\uB294 3\uAC00\uC9C0 \uC885\uB958\uC758 Accounts\uAC00 \uC788\uC2B5\uB2C8\uB2E4:

  • Data Account\uB294 \uB370\uC774\uD130\uB97C \uC800\uC7A5\uD569\uB2C8\uB2E4.
  • Program Account\uB294 \uC2E4\uD589 \uAC00\uB2A5\uD55C \uD504\uB85C\uADF8\uB7A8\uB4E4\uC744 \uC800\uC7A5\uD569\uB2C8\uB2E4.
  • Native Account\uB294 \uC194\uB77C\uB098\uC5D0 \uC788\uB294 System, Stake, Vote \uAC19\uC740 Native \uD504\uB85C\uADF8\uB7A8\uC785\uB2C8\uB2E4.

Data Account\uC5D0\uB294 2\uAC00\uC9C0 \uD0C0\uC785\uC774 \uC788\uC2B5\uB2C8\uB2E4:

  • System\uC774 \uC18C\uC720\uD55C Account
  • PDA (Program Derived Address) Account

\uAC01 Account\uB294 \uC8FC\uC18C(\uBCF4\uD1B5 public key)\uC640 \uC18C\uC720\uC790(\uD504\uB85C\uADF8\uB7A8 Account\uC758 \uC8FC\uC18C)\uB97C \uAC16\uACE0 \uC788\uC2B5\uB2C8\uB2E4.
\uD55C Account\uAC00 \uC800\uC7A5\uD558\uB294 \uC804\uCCB4 \uD544\uB4DC \uB9AC\uC2A4\uD2B8\uB294 \uC544\uB798\uC640 \uAC19\uC2B5\uB2C8\uB2E4.

FieldDescription
lamportsAccount\uAC00 \uC18C\uC720\uD558\uACE0 \uC788\uB294 lamport\uC758 \uAC1C\uC218
ownerAccount\uB97C \uC18C\uC720\uD558\uACE0 \uC788\uB294 Program
executableAccount\uAC00 Instruction\uB4E4\uC744 \uCC98\uB9AC\uD560 \uC218 \uC788\uB294\uC9C0 \uC5EC\uBD80
dataAccount\uAC00 \uC800\uC7A5\uD55C byte array \uC6D0\uBCF8 \uB370\uC774\uD130
rent_epochAccount\uAC00 rent\uB97C \uD560 \uB2E4\uC74C epoch

ownership\uC5D0 \uB300\uD55C \uC911\uC694\uD55C \uBA87 \uAC00\uC9C0 \uADDC\uCE59\uC774 \uC788\uC2B5\uB2C8\uB2E4.:

  • Data Account\uC758 \uC18C\uC720\uC790\uB9CC \uC624\uC9C1 \uC774 Account\uC758 \uB370\uC774\uD130\uB97C \uC218\uC815\uD560 \uC218 \uC788\uACE0, lamports\uB97C \uC778\uCD9C\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.
  • \uB204\uAD6C\uB098 Data Account\uC5D0 lamports\uB4E4\uC744 \uC785\uAE08\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.
  • Account\uC758 \uC18C\uC720\uC790\uB294 \uC774 Account\uC758 \uB370\uC774\uD130\uAC00 \uBE44\uC5B4\uC788\uB2E4\uBA74 \uC0C8\uB85C\uC6B4 \uC18C\uC720\uC790\uC5D0\uAC8C \uC774 Account\uB97C \uD560\uB2F9\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.

Program Account\uB294 \uC0C1\uD0DC\uB97C \uC800\uC7A5\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.

\uC608\uB97C \uB4E4\uC5B4, \uB9CC\uC57D counter\uB97C \uC99D\uAC00\uC2DC\uD0AC \uC218 \uC788\uB294 counter program\uC744 \uAC00\uC9C0\uACE0 \uC788\uB2E4\uBA74, \uB450 \uAC1C\uC758 Account\uB97C \uC0DD\uC131\uD574\uC57C \uD569\uB2C8\uB2E4.
\uD558\uB098\uB294 Program\uC758 Code\uB97C \uC800\uC7A5\uD558\uB294 Account\uC774\uACE0, \uB2E4\uB978 \uD558\uB098\uB294 counter \uB370\uC774\uD130\uB97C \uC800\uC7A5\uD558\uB294 Account\uC785\uB2C8\uB2E4.

Account\uAC00 \uC0AD\uC81C\uB418\uB294 \uAC83\uC744 \uB9C9\uAE30 \uC704\uD574\uC11C\uB294 rent\uB97C \uC9C0\uBD88\uD574\uC57C \uD569\uB2C8\uB2E4.

Rent

Account\uC5D0 \uB370\uC774\uD130\uB97C \uC800\uC7A5\uD558\uB294 \uAC83\uC740 \uBA54\uC778\uB137\uC5D0 SOL \uBE44\uC6A9\uC744 \uBC1C\uC0DD\uC2DC\uD0A4\uACE0, rent\uB77C\uACE0 \uBD88\uB9AC\uB294 \uAC83\uC5D0 \uC758\uD574 \uAC77\uC5B4\uC9D1\uB2C8\uB2E4.
\uB9CC\uC57D \uD55C Account\uC5D0 2\uB144 \uCE58\uC758 rent \uC9C0\uBD88\uACFC \uB3D9\uB4F1\uD55C balance\uB97C \uC720\uC9C0\uD55C\uB2E4\uBA74, Account\uB294 rent\uB97C \uC9C0\uBD88\uD558\uB294 \uAC83\uC774 \uBA74\uC81C\uB429\uB2C8\uB2E4.
Account \uC0AC\uC6A9\uC744 \uB9C8\uCE58\uBA74 rent\uB97C \uB418\uCC3E\uC744 \uC218 \uC788\uACE0 lamports\uB97C \uC9C0\uAC11\uC5D0 \uBCF4\uB0BC \uC218 \uC788\uC2B5\uB2C8\uB2E4.

Rent\uB294 \uB450 \uAC00\uC9C0 \uD0C0\uC774\uBC0D\uC5D0 \uC9C0\uBD88\uB429\uB2C8\uB2E4:

  1. Transaction\uC5D0 \uC758\uD574 \uCC38\uC870\uB420 \uB54C
  2. \uB9E4 epoch \uB9C8\uB2E4

A percentage of rent collected by accounts is destroyed, while the rest is distributed to vote accounts at the end of every slot.

\uB9CC\uC57D Account\uAC00 rent\uB97C \uC9C0\uBD88\uD558\uAE30 \uC704\uD55C \uCDA9\uBD84\uD55C lamports\uB97C \uAC16\uACE0 \uC788\uC9C0 \uC54A\uB2E4\uBA74, Account\uB294 \uD560\uB2F9 \uD574\uC81C\uB418\uBA70 \uB370\uC774\uD130\uB294 \uC9C0\uC6CC\uC9D1\uB2C8\uB2E4.

\uC0C8\uB85C\uC6B4 Account\uB4E4\uC740 rent \uBA74\uC81C\uB418\uB3C4\uB85D \uD558\uB294 \uAC83\uC774 \uC911\uC694\uD569\uB2C8\uB2E4.

Other Resources

',22),N={href:"https://solana.wiki/zh-cn/docs/account-model/#account-storage",target:"_blank",rel:"noopener noreferrer"},B=e("Solana Account Model"),V={href:"https://docs.solana.com/developing/programming-model/accounts",target:"_blank",rel:"noopener noreferrer"},T=e("Official Documentation"),C={href:"https://twitter.com/pencilflip/status/1452402100470644739",target:"_blank",rel:"noopener noreferrer"},E=e("pencilflip account thread"),I=t("h3",{id:"credit",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#credit","aria-hidden":"true"},"#"),e(" Credit")],-1),L=e("This core concept is credited to Pencilflip. "),M={href:"https://twitter.com/intent/user?screen_name=pencilflip",target:"_blank",rel:"noopener noreferrer"},O=e("Follow him on Twitter"),R=e(".");function z(j,K){const o=r("ExternalLinkIcon");return a(),s(l,null,[h,_,p,t("div",A,[m,t("ul",null,[f,b,g,x,k,t("li",null,[v,t("a",D,[y,c(o)]),P]),S,w])]),F,t("ul",null,[t("li",null,[t("a",N,[B,c(o)])]),t("li",null,[t("a",V,[T,c(o)])]),t("li",null,[t("a",C,[E,c(o)])])]),I,t("p",null,[L,t("a",M,[O,c(o)]),R])],64)}var G=n(u,[["render",z]]);export{G as default}; +import{_ as n,r,o as a,c as s,a as t,b as c,F as l,d as e,e as i}from"./app.2fbb9e96.js";var d="/assets/account_example.5b70d95a.jpeg";const u={},h=t("h1",{id:"accounts",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#accounts","aria-hidden":"true"},"#"),e(" Accounts")],-1),_=t("p",null,[e("Solana\uC5D0\uC11C Account\uB294 \uC0C1\uD0DC\uB97C \uC800\uC7A5\uD558\uAE30 \uC704\uD574 \uC0AC\uC6A9\uB429\uB2C8\uB2E4."),t("br"),e(" Account\uB294 Solana\uC5D0\uC11C \uAC1C\uBC1C\uC744 \uC704\uD55C \uAC00\uC7A5 \uD544\uC218\uC801\uC778 \uAD6C\uC131 \uC694\uC18C\uC785\uB2C8\uB2E4.")],-1),p=t("h2",{id:"facts",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#facts","aria-hidden":"true"},"#"),e(" Facts")],-1),A={class:"custom-container tip"},m=t("p",{class:"custom-container-title"},"Fact Sheet",-1),f=t("li",null,"Account\uB294 \uB370\uC774\uD130\uB97C \uC800\uC7A5\uD558\uAE30 \uC704\uD574 \uC0AC\uC6A9\uB429\uB2C8\uB2E4.",-1),b=t("li",null,"\uAC01 Account\uB294 \uC720\uC77C\uD55C address\uB97C \uAC16\uACE0 \uC788\uC2B5\uB2C8\uB2E4.",-1),g=t("li",null,"Account\uB294 10MB\uC758 \uCD5C\uB300 \uD06C\uAE30\uB97C \uAC00\uC9D1\uB2C8\uB2E4.",-1),x=t("li",null,"PDA Account\uB294 10KB\uC758 \uCD5C\uB300 \uD06C\uAE30\uB97C \uAC00\uC9D1\uB2C8\uB2E4.",-1),k=t("li",null,"PDA Account\uB294 Program\uC744 \uB300\uC2E0\uD574 \uC11C\uBA85\uD558\uAE30 \uC704\uD574 \uC0AC\uC6A9\uB420 \uC218 \uC788\uC2B5\uB2C8\uB2E4.",-1),v=e("Account \uD06C\uAE30\uB294 \uC0DD\uC131 \uC2DC\uC810\uC5D0 \uACE0\uC815\uB429\uB2C8\uB2E4. \uD558\uC9C0\uB9CC "),D={href:"https://solanacookbook.com/references/programs.html#how-to-change-account-size",target:"_blank",rel:"noopener noreferrer"},y=e("realloc"),P=e("\uC744 \uC0AC\uC6A9\uD574\uC11C \uC870\uC815\uB420 \uC218 \uC788\uC2B5\uB2C8\uB2E4."),S=t("li",null,"Account \uB370\uC774\uD130 \uC800\uC7A5\uC740 rent\uB77C\uB294 \uBE44\uC6A9\uC774 \uBC1C\uC0DD\uD569\uB2C8\uB2E4.",-1),w=t("li",null,"\uAE30\uBCF8\uC801\uC73C\uB85C Account\uC758 \uC18C\uC720\uC790\uB294 System Program\uC785\uB2C8\uB2E4.",-1),F=i('

Deep Dive

Account Model

\uC194\uB77C\uB098\uC5D0\uB294 3\uAC00\uC9C0 \uC885\uB958\uC758 Accounts\uAC00 \uC788\uC2B5\uB2C8\uB2E4:

  • Data Account\uB294 \uB370\uC774\uD130\uB97C \uC800\uC7A5\uD569\uB2C8\uB2E4.
  • Program Account\uB294 \uC2E4\uD589 \uAC00\uB2A5\uD55C \uD504\uB85C\uADF8\uB7A8\uB4E4\uC744 \uC800\uC7A5\uD569\uB2C8\uB2E4.
  • Native Account\uB294 \uC194\uB77C\uB098\uC5D0 \uC788\uB294 System, Stake, Vote \uAC19\uC740 Native \uD504\uB85C\uADF8\uB7A8\uC785\uB2C8\uB2E4.

Data Account\uC5D0\uB294 2\uAC00\uC9C0 \uD0C0\uC785\uC774 \uC788\uC2B5\uB2C8\uB2E4:

  • System\uC774 \uC18C\uC720\uD55C Account
  • PDA (Program Derived Address) Account

\uAC01 Account\uB294 \uC8FC\uC18C(\uBCF4\uD1B5 public key)\uC640 \uC18C\uC720\uC790(\uD504\uB85C\uADF8\uB7A8 Account\uC758 \uC8FC\uC18C)\uB97C \uAC16\uACE0 \uC788\uC2B5\uB2C8\uB2E4.
\uD55C Account\uAC00 \uC800\uC7A5\uD558\uB294 \uC804\uCCB4 \uD544\uB4DC \uB9AC\uC2A4\uD2B8\uB294 \uC544\uB798\uC640 \uAC19\uC2B5\uB2C8\uB2E4.

FieldDescription
lamportsAccount\uAC00 \uC18C\uC720\uD558\uACE0 \uC788\uB294 lamport\uC758 \uAC1C\uC218
ownerAccount\uB97C \uC18C\uC720\uD558\uACE0 \uC788\uB294 Program
executableAccount\uAC00 Instruction\uB4E4\uC744 \uCC98\uB9AC\uD560 \uC218 \uC788\uB294\uC9C0 \uC5EC\uBD80
dataAccount\uAC00 \uC800\uC7A5\uD55C byte array \uC6D0\uBCF8 \uB370\uC774\uD130
rent_epochAccount\uAC00 rent\uB97C \uD560 \uB2E4\uC74C epoch

ownership\uC5D0 \uB300\uD55C \uC911\uC694\uD55C \uBA87 \uAC00\uC9C0 \uADDC\uCE59\uC774 \uC788\uC2B5\uB2C8\uB2E4.:

  • Data Account\uC758 \uC18C\uC720\uC790\uB9CC \uC624\uC9C1 \uC774 Account\uC758 \uB370\uC774\uD130\uB97C \uC218\uC815\uD560 \uC218 \uC788\uACE0, lamports\uB97C \uC778\uCD9C\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.
  • \uB204\uAD6C\uB098 Data Account\uC5D0 lamports\uB4E4\uC744 \uC785\uAE08\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.
  • Account\uC758 \uC18C\uC720\uC790\uB294 \uC774 Account\uC758 \uB370\uC774\uD130\uAC00 \uBE44\uC5B4\uC788\uB2E4\uBA74 \uC0C8\uB85C\uC6B4 \uC18C\uC720\uC790\uC5D0\uAC8C \uC774 Account\uB97C \uD560\uB2F9\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.

Program Account\uB294 \uC0C1\uD0DC\uB97C \uC800\uC7A5\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.

\uC608\uB97C \uB4E4\uC5B4, \uB9CC\uC57D counter\uB97C \uC99D\uAC00\uC2DC\uD0AC \uC218 \uC788\uB294 counter program\uC744 \uAC00\uC9C0\uACE0 \uC788\uB2E4\uBA74, \uB450 \uAC1C\uC758 Account\uB97C \uC0DD\uC131\uD574\uC57C \uD569\uB2C8\uB2E4.
\uD558\uB098\uB294 Program\uC758 Code\uB97C \uC800\uC7A5\uD558\uB294 Account\uC774\uACE0, \uB2E4\uB978 \uD558\uB098\uB294 counter \uB370\uC774\uD130\uB97C \uC800\uC7A5\uD558\uB294 Account\uC785\uB2C8\uB2E4.

Account\uAC00 \uC0AD\uC81C\uB418\uB294 \uAC83\uC744 \uB9C9\uAE30 \uC704\uD574\uC11C\uB294 rent\uB97C \uC9C0\uBD88\uD574\uC57C \uD569\uB2C8\uB2E4.

Rent

Account\uC5D0 \uB370\uC774\uD130\uB97C \uC800\uC7A5\uD558\uB294 \uAC83\uC740 \uBA54\uC778\uB137\uC5D0 SOL \uBE44\uC6A9\uC744 \uBC1C\uC0DD\uC2DC\uD0A4\uACE0, rent\uB77C\uACE0 \uBD88\uB9AC\uB294 \uAC83\uC5D0 \uC758\uD574 \uAC77\uC5B4\uC9D1\uB2C8\uB2E4.
\uB9CC\uC57D \uD55C Account\uC5D0 2\uB144 \uCE58\uC758 rent \uC9C0\uBD88\uACFC \uB3D9\uB4F1\uD55C balance\uB97C \uC720\uC9C0\uD55C\uB2E4\uBA74, Account\uB294 rent\uB97C \uC9C0\uBD88\uD558\uB294 \uAC83\uC774 \uBA74\uC81C\uB429\uB2C8\uB2E4.
Account \uC0AC\uC6A9\uC744 \uB9C8\uCE58\uBA74 rent\uB97C \uB418\uCC3E\uC744 \uC218 \uC788\uACE0 lamports\uB97C \uC9C0\uAC11\uC5D0 \uBCF4\uB0BC \uC218 \uC788\uC2B5\uB2C8\uB2E4.

Rent\uB294 \uB450 \uAC00\uC9C0 \uD0C0\uC774\uBC0D\uC5D0 \uC9C0\uBD88\uB429\uB2C8\uB2E4:

  1. Transaction\uC5D0 \uC758\uD574 \uCC38\uC870\uB420 \uB54C
  2. \uB9E4 epoch \uB9C8\uB2E4

A percentage of rent collected by accounts is destroyed, while the rest is distributed to vote accounts at the end of every slot.

\uB9CC\uC57D Account\uAC00 rent\uB97C \uC9C0\uBD88\uD558\uAE30 \uC704\uD55C \uCDA9\uBD84\uD55C lamports\uB97C \uAC16\uACE0 \uC788\uC9C0 \uC54A\uB2E4\uBA74, Account\uB294 \uD560\uB2F9 \uD574\uC81C\uB418\uBA70 \uB370\uC774\uD130\uB294 \uC9C0\uC6CC\uC9D1\uB2C8\uB2E4.

\uC0C8\uB85C\uC6B4 Account\uB4E4\uC740 rent \uBA74\uC81C\uB418\uB3C4\uB85D \uD558\uB294 \uAC83\uC774 \uC911\uC694\uD569\uB2C8\uB2E4.

Other Resources

',22),N={href:"https://solana.wiki/zh-cn/docs/account-model/#account-storage",target:"_blank",rel:"noopener noreferrer"},B=e("Solana Account Model"),V={href:"https://docs.solana.com/developing/programming-model/accounts",target:"_blank",rel:"noopener noreferrer"},T=e("Official Documentation"),C={href:"https://twitter.com/pencilflip/status/1452402100470644739",target:"_blank",rel:"noopener noreferrer"},E=e("pencilflip account thread"),I=t("h3",{id:"credit",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#credit","aria-hidden":"true"},"#"),e(" Credit")],-1),L=e("This core concept is credited to Pencilflip. "),M={href:"https://twitter.com/intent/user?screen_name=pencilflip",target:"_blank",rel:"noopener noreferrer"},O=e("Follow him on Twitter"),R=e(".");function z(j,K){const o=r("ExternalLinkIcon");return a(),s(l,null,[h,_,p,t("div",A,[m,t("ul",null,[f,b,g,x,k,t("li",null,[v,t("a",D,[y,c(o)]),P]),S,w])]),F,t("ul",null,[t("li",null,[t("a",N,[B,c(o)])]),t("li",null,[t("a",V,[T,c(o)])]),t("li",null,[t("a",C,[E,c(o)])])]),I,t("p",null,[L,t("a",M,[O,c(o)]),R])],64)}var G=n(u,[["render",z]]);export{G as default}; diff --git a/docs/.vuepress/dist/assets/accounts.html.7fb9a899.js b/docs/.vuepress/dist/assets/accounts.html.adc63ed0.js similarity index 97% rename from docs/.vuepress/dist/assets/accounts.html.7fb9a899.js rename to docs/.vuepress/dist/assets/accounts.html.adc63ed0.js index 581dad300..80a2fbff3 100644 --- a/docs/.vuepress/dist/assets/accounts.html.7fb9a899.js +++ b/docs/.vuepress/dist/assets/accounts.html.adc63ed0.js @@ -1 +1 @@ -const a={key:"v-06371947",path:"/id/references/accounts.html",title:"Akun",lang:"id-ID",frontmatter:{title:"Akun",head:[["meta",{name:"title",content:"Buku Panduan Solana | Referensi Akun"}],["meta",{name:"og:title",content:"Buku Panduan Solana | Referensi Akun"}],["meta",{name:"description",content:"Belajar tentang akun di Solana dan cara menggunakannya di program."}],["meta",{name:"og:description",content:"Belajar tentang akun di Solana dan cara menggunakannya di program."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"Bagaimana cara membuat sebuah sistem akun",slug:"bagaimana-cara-membuat-sebuah-sistem-akun",children:[]},{level:2,title:"Bagaimana cara mengkalkulasi biaya akun",slug:"bagaimana-cara-mengkalkulasi-biaya-akun",children:[]},{level:2,title:"Bagaimana cara membuat akun dengan seeds",slug:"bagaimana-cara-membuat-akun-dengan-seeds",children:[{level:3,title:"Generate",slug:"generate",children:[]},{level:3,title:"Create",slug:"create",children:[]},{level:3,title:"Transfer",slug:"transfer",children:[]}]},{level:2,title:"Bagaimana cara membuat PDAs",slug:"bagaimana-cara-membuat-pdas",children:[{level:3,title:"Menghasilkan sebuah PDA",slug:"menghasilkan-sebuah-pda",children:[]},{level:3,title:"Membuat sebuah PDA",slug:"membuat-sebuah-pda",children:[]}]},{level:2,title:"Bagaimana cara untuk sign sebuah PDA",slug:"bagaimana-cara-untuk-sign-sebuah-pda",children:[{level:3,title:"Program",slug:"program-1",children:[]},{level:3,title:"Client",slug:"client-1",children:[]}]},{level:2,title:"Bagaimana Cara Mendapatkan Program Akun",slug:"bagaimana-cara-mendapatkan-program-akun",children:[]},{level:2,title:"Bagaimana Cara Menutup Akun",slug:"bagaimana-cara-menutup-akun",children:[]},{level:2,title:"Bagaimana Cara Mendapatkan Balance Akun",slug:"bagaimana-cara-mendapatkan-balance-akun",children:[]}],git:{updatedTime:1663636948e3},filePathRelative:"id/references/accounts.md"};export{a as data}; +const a={key:"v-06371947",path:"/id/references/accounts.html",title:"Akun",lang:"id-ID",frontmatter:{title:"Akun",head:[["meta",{name:"title",content:"Buku Panduan Solana | Referensi Akun"}],["meta",{name:"og:title",content:"Buku Panduan Solana | Referensi Akun"}],["meta",{name:"description",content:"Belajar tentang akun di Solana dan cara menggunakannya di program."}],["meta",{name:"og:description",content:"Belajar tentang akun di Solana dan cara menggunakannya di program."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"Bagaimana cara membuat sebuah sistem akun",slug:"bagaimana-cara-membuat-sebuah-sistem-akun",children:[]},{level:2,title:"Bagaimana cara mengkalkulasi biaya akun",slug:"bagaimana-cara-mengkalkulasi-biaya-akun",children:[]},{level:2,title:"Bagaimana cara membuat akun dengan seeds",slug:"bagaimana-cara-membuat-akun-dengan-seeds",children:[{level:3,title:"Generate",slug:"generate",children:[]},{level:3,title:"Create",slug:"create",children:[]},{level:3,title:"Transfer",slug:"transfer",children:[]}]},{level:2,title:"Bagaimana cara membuat PDAs",slug:"bagaimana-cara-membuat-pdas",children:[{level:3,title:"Menghasilkan sebuah PDA",slug:"menghasilkan-sebuah-pda",children:[]},{level:3,title:"Membuat sebuah PDA",slug:"membuat-sebuah-pda",children:[]}]},{level:2,title:"Bagaimana cara untuk sign sebuah PDA",slug:"bagaimana-cara-untuk-sign-sebuah-pda",children:[{level:3,title:"Program",slug:"program-1",children:[]},{level:3,title:"Client",slug:"client-1",children:[]}]},{level:2,title:"Bagaimana Cara Mendapatkan Program Akun",slug:"bagaimana-cara-mendapatkan-program-akun",children:[]},{level:2,title:"Bagaimana Cara Menutup Akun",slug:"bagaimana-cara-menutup-akun",children:[]},{level:2,title:"Bagaimana Cara Mendapatkan Balance Akun",slug:"bagaimana-cara-mendapatkan-balance-akun",children:[]}],git:{updatedTime:1676666728e3},filePathRelative:"id/references/accounts.md"};export{a as data}; diff --git a/docs/.vuepress/dist/assets/accounts.html.55154bf6.js b/docs/.vuepress/dist/assets/accounts.html.b2dd049c.js similarity index 97% rename from docs/.vuepress/dist/assets/accounts.html.55154bf6.js rename to docs/.vuepress/dist/assets/accounts.html.b2dd049c.js index 3908879d5..960023505 100644 --- a/docs/.vuepress/dist/assets/accounts.html.55154bf6.js +++ b/docs/.vuepress/dist/assets/accounts.html.b2dd049c.js @@ -1 +1 @@ -const e={key:"v-742672b6",path:"/fr/references/accounts.html",title:"Comptes",lang:"fr-FR",frontmatter:{title:"Comptes",head:[["meta",{name:"title",content:"Solana Cookbook | R\xE9f\xE9rences sur les comptes"}],["meta",{name:"og:title",content:"Solana Cookbook | R\xE9f\xE9rences sur les comptes"}],["meta",{name:"description",content:"D\xE9couvrez les comptes sur Solana et comment les utiliser dans vos programmes."}],["meta",{name:"og:description",content:"D\xE9couvrez les comptes sur Solana et comment les utiliser dans vos programmes."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"Comment cr\xE9er un compte de syst\xE8me",slug:"comment-creer-un-compte-de-systeme",children:[]},{level:2,title:"Comment calculer les frais de compte",slug:"comment-calculer-les-frais-de-compte",children:[]},{level:2,title:"Comment cr\xE9er des comptes avec des seeds",slug:"comment-creer-des-comptes-avec-des-seeds",children:[{level:3,title:"G\xE9n\xE9rer",slug:"generer",children:[]},{level:3,title:"Cr\xE9er",slug:"creer",children:[]},{level:3,title:"Transf\xE9rer",slug:"transferer",children:[]}]},{level:2,title:"Comment cr\xE9er des PDAs",slug:"comment-creer-des-pdas",children:[{level:3,title:"G\xE9n\xE9rer un PDA",slug:"generer-un-pda",children:[]},{level:3,title:"Cr\xE9er un PDA",slug:"creer-un-pda",children:[]}]},{level:2,title:"Comment signer avec un PDA",slug:"comment-signer-avec-un-pda",children:[{level:3,title:"Programme",slug:"programme-1",children:[]},{level:3,title:"Client",slug:"client-1",children:[]}]},{level:2,title:"Comment obtenir les comptes du programme",slug:"comment-obtenir-les-comptes-du-programme",children:[]},{level:2,title:"Comment fermer des comptes",slug:"comment-fermer-des-comptes",children:[]},{level:2,title:"Comment obtenir le solde d'un compte",slug:"comment-obtenir-le-solde-d-un-compte",children:[]}],git:{updatedTime:1664978942e3},filePathRelative:"fr/references/accounts.md"};export{e as data}; +const e={key:"v-742672b6",path:"/fr/references/accounts.html",title:"Comptes",lang:"fr-FR",frontmatter:{title:"Comptes",head:[["meta",{name:"title",content:"Solana Cookbook | R\xE9f\xE9rences sur les comptes"}],["meta",{name:"og:title",content:"Solana Cookbook | R\xE9f\xE9rences sur les comptes"}],["meta",{name:"description",content:"D\xE9couvrez les comptes sur Solana et comment les utiliser dans vos programmes."}],["meta",{name:"og:description",content:"D\xE9couvrez les comptes sur Solana et comment les utiliser dans vos programmes."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"Comment cr\xE9er un compte de syst\xE8me",slug:"comment-creer-un-compte-de-systeme",children:[]},{level:2,title:"Comment calculer les frais de compte",slug:"comment-calculer-les-frais-de-compte",children:[]},{level:2,title:"Comment cr\xE9er des comptes avec des seeds",slug:"comment-creer-des-comptes-avec-des-seeds",children:[{level:3,title:"G\xE9n\xE9rer",slug:"generer",children:[]},{level:3,title:"Cr\xE9er",slug:"creer",children:[]},{level:3,title:"Transf\xE9rer",slug:"transferer",children:[]}]},{level:2,title:"Comment cr\xE9er des PDAs",slug:"comment-creer-des-pdas",children:[{level:3,title:"G\xE9n\xE9rer un PDA",slug:"generer-un-pda",children:[]},{level:3,title:"Cr\xE9er un PDA",slug:"creer-un-pda",children:[]}]},{level:2,title:"Comment signer avec un PDA",slug:"comment-signer-avec-un-pda",children:[{level:3,title:"Programme",slug:"programme-1",children:[]},{level:3,title:"Client",slug:"client-1",children:[]}]},{level:2,title:"Comment obtenir les comptes du programme",slug:"comment-obtenir-les-comptes-du-programme",children:[]},{level:2,title:"Comment fermer des comptes",slug:"comment-fermer-des-comptes",children:[]},{level:2,title:"Comment obtenir le solde d'un compte",slug:"comment-obtenir-le-solde-d-un-compte",children:[]}],git:{updatedTime:1676666728e3},filePathRelative:"fr/references/accounts.md"};export{e as data}; diff --git a/docs/.vuepress/dist/assets/accounts.html.e95b991d.js b/docs/.vuepress/dist/assets/accounts.html.b5ad2fda.js similarity index 97% rename from docs/.vuepress/dist/assets/accounts.html.e95b991d.js rename to docs/.vuepress/dist/assets/accounts.html.b5ad2fda.js index 0b6a8986c..959095676 100644 --- a/docs/.vuepress/dist/assets/accounts.html.e95b991d.js +++ b/docs/.vuepress/dist/assets/accounts.html.b5ad2fda.js @@ -1,4 +1,4 @@ -import{_ as k,r as p,o as b,c as m,a as n,b as t,w as a,F as d,d as s,e as r}from"./app.cfdf84e7.js";const y={},_=n("h1",{id:"comptes",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#comptes","aria-hidden":"true"},"#"),s(" Comptes")],-1),f=n("h2",{id:"comment-creer-un-compte-de-systeme",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#comment-creer-un-compte-de-systeme","aria-hidden":"true"},"#"),s(" Comment cr\xE9er un compte de syst\xE8me")],-1),g=s("Cr\xE9ez un compte que le "),w={href:"https://docs.solana.com/developing/clients/javascript-reference#systemprogram",target:"_blank",rel:"noopener noreferrer"},h=s("Programme du Syst\xE8me"),P=s(" poss\xE8de. Le runtime de Solana donnera au propri\xE9taire du compte l'acc\xE8s \xE0 l'\xE9criture des donn\xE9es et au transfert des lamports. Lors de la cr\xE9ation d'un compte, nous devons pr\xE9-allouer un espace de stockage fixe en bytes ("),v=n("code",null,"space",-1),S=s(") et suffisamment de lamports pour couvrir la rente. La "),A={href:"https://docs.solana.com/developing/programming-model/accounts#rent",target:"_blank",rel:"noopener noreferrer"},x=s("Rente"),K=s(" est un co\xFBt encouru pour maintenir les comptes en vie sur Solana."),T=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` +import{_ as k,r as p,o as b,c as m,a as n,b as t,w as a,F as d,d as s,e as r}from"./app.2fbb9e96.js";const y={},_=n("h1",{id:"comptes",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#comptes","aria-hidden":"true"},"#"),s(" Comptes")],-1),f=n("h2",{id:"comment-creer-un-compte-de-systeme",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#comment-creer-un-compte-de-systeme","aria-hidden":"true"},"#"),s(" Comment cr\xE9er un compte de syst\xE8me")],-1),g=s("Cr\xE9ez un compte que le "),w={href:"https://docs.solana.com/developing/clients/javascript-reference#systemprogram",target:"_blank",rel:"noopener noreferrer"},h=s("Programme du Syst\xE8me"),v=s(" poss\xE8de. Le runtime de Solana donnera au propri\xE9taire du compte l'acc\xE8s \xE0 l'\xE9criture des donn\xE9es et au transfert des lamports. Lors de la cr\xE9ation d'un compte, nous devons pr\xE9-allouer un espace de stockage fixe en bytes ("),P=n("code",null,"space",-1),S=s(") et suffisamment de lamports pour couvrir la rente. La "),A={href:"https://docs.solana.com/developing/programming-model/accounts#rent",target:"_blank",rel:"noopener noreferrer"},x=s("Rente"),K=s(" est un co\xFBt encouru pour maintenir les comptes en vie sur Solana."),T=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` SystemProgram`),n("span",{class:"token punctuation"},","),s(` Keypair`),n("span",{class:"token punctuation"},","),s(` Transaction`),n("span",{class:"token punctuation"},","),s(` @@ -665,7 +665,7 @@ import{_ as k,r as p,o as b,c as m,a as n,b as t,w as a,F as d,d as s,e as r}fro `),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token operator"},"&"),n("span",{class:"token punctuation"},"["),n("span",{class:"token operator"},"&"),n("span",{class:"token punctuation"},"["),n("span",{class:"token string"},'b"escrow"'),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token operator"},"&"),n("span",{class:"token punctuation"},"["),s("bump_seed"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br")])],-1),Pn=n("h3",{id:"client-1",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#client-1","aria-hidden":"true"},"#"),s(" Client")],-1),vn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br")])],-1),vn=n("h3",{id:"client-1",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#client-1","aria-hidden":"true"},"#"),s(" Client")],-1),Pn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` clusterApiUrl`),n("span",{class:"token punctuation"},","),s(` Connection`),n("span",{class:"token punctuation"},","),s(` Keypair`),n("span",{class:"token punctuation"},","),s(` @@ -1005,19 +1005,44 @@ source_data`),n("span",{class:"token punctuation"},"."),n("span",{class:"token f `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br")])],-1),Qn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[s("connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"get_balance"),n("span",{class:"token punctuation"},"("),n("span",{class:"token operator"},"&"),s("wallet"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Hn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("publickey "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Hn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair `),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("api "),n("span",{class:"token keyword"},"import"),s(` Client client `),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),s(` key_pair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` -public_key `),n("span",{class:"token operator"},"="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s(`public_key +public_key `),n("span",{class:"token operator"},"="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("client"),n("span",{class:"token punctuation"},"."),s("get_balance"),n("span",{class:"token punctuation"},"("),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br")])],-1),$n=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("client "),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),s(` key_pair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` -public_key `),n("span",{class:"token operator"},"="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s(`public_key +public_key `),n("span",{class:"token operator"},"="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` client`),n("span",{class:"token punctuation"},"."),s("get_balance"),n("span",{class:"token punctuation"},"("),s("public_key"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),Xn={class:"custom-container tip"},Zn=n("p",{class:"custom-container-title"},"TIP",-1),ns=s("Si vous voulez obtenir un solde de jetons, vous devez conna\xEEtre l'adresse du compte de jetons. Pour plus d'informations, voir "),ss=s("R\xE9f\xE9rences des Jetons");function as(ts,es){const l=p("ExternalLinkIcon"),e=p("SolanaCodeGroupItem"),o=p("SolanaCodeGroup"),c=p("CodeGroupItem"),u=p("CodeGroup"),i=p("RouterLink");return b(),m(d,null,[_,f,n("p",null,[g,n("a",w,[h,t(l)]),P,v,S,n("a",A,[x,t(l)]),K]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[T]),preview:a(()=>[C]),_:1}),t(e,{title:"Rust"},{default:a(()=>[R]),preview:a(()=>[L]),_:1})]),_:1}),I,n("p",null,[O,n("a",U,[E,t(l)]),q]),t(u,null,{default:a(()=>[t(c,{title:"TS",active:""},{default:a(()=>[M]),_:1}),t(c,{title:"Rust"},{default:a(()=>[G]),_:1}),t(c,{title:"CLI"},{default:a(()=>[B]),_:1})]),_:1}),F,N,W,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[z]),preview:a(()=>[V]),_:1}),t(e,{title:"Rust"},{default:a(()=>[j]),preview:a(()=>[D]),_:1})]),_:1}),Y,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[J]),preview:a(()=>[Q]),_:1}),t(e,{title:"Rust",active:""},{default:a(()=>[H]),preview:a(()=>[$]),_:1})]),_:1}),X,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Z]),preview:a(()=>[nn]),_:1})]),_:1}),sn,an,n("p",null,[n("a",tn,[en,t(l)]),on]),cn,t(u,null,{default:a(()=>[t(c,{title:"TS",active:""},{default:a(()=>[pn]),_:1}),t(c,{title:"Rust"},{default:a(()=>[ln]),_:1})]),_:1}),un,t(o,null,{default:a(()=>[t(e,{title:"rust",active:""},{default:a(()=>[rn]),preview:a(()=>[kn]),_:1})]),_:1}),bn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[mn]),preview:a(()=>[dn]),_:1})]),_:1}),yn,_n,fn,gn,t(o,null,{default:a(()=>[t(e,{title:"Rust",active:""},{default:a(()=>[wn]),preview:a(()=>[hn]),_:1})]),_:1}),Pn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[vn]),preview:a(()=>[Sn]),_:1})]),_:1}),An,n("p",null,[xn,t(i,{to:"/fr/guides/get-program-accounts.html"},{default:a(()=>[Kn]),_:1}),Tn,Cn,Rn]),t(u,null,{default:a(()=>[t(c,{title:"TS",active:""},{default:a(()=>[Ln]),_:1}),t(c,{title:"Rust"},{default:a(()=>[In]),_:1}),t(c,{title:"CLI"},{default:a(()=>[On]),_:1})]),_:1}),Un,n("p",null,[En,n("a",qn,[Mn,t(l)]),Gn]),Bn,t(o,null,{default:a(()=>[t(e,{title:"rust",active:""},{default:a(()=>[Fn]),preview:a(()=>[Nn]),_:1})]),_:1}),Wn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[zn]),preview:a(()=>[Vn]),_:1})]),_:1}),jn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Dn]),preview:a(()=>[Yn]),_:1}),t(e,{title:"Rust"},{default:a(()=>[Jn]),preview:a(()=>[Qn]),_:1}),t(e,{title:"Python"},{default:a(()=>[Hn]),preview:a(()=>[$n]),_:1})]),_:1}),n("div",Xn,[Zn,n("p",null,[ns,t(i,{to:"/fr/references/token.html"},{default:a(()=>[ss]),_:1})])])],64)}var cs=k(y,[["render",as]]);export{cs as default}; +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),Xn=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token comment"},"// clang++ get_balance.cpp -o get_balance -std=c++17 -lssl -lcrypto -lsodium"),s(` + +`),n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + Connection `),n("span",{class:"token function"},"connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"auto"),s(" public_key "),n("span",{class:"token operator"},"="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"public_key = "'),s(),n("span",{class:"token operator"},"<<"),s(" public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"uint64_t"),s(" balance "),n("span",{class:"token operator"},"="),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"get_balance"),n("span",{class:"token punctuation"},"("),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"balance = "'),s(),n("span",{class:"token operator"},"<<"),s(" balance "),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"return"),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br")])],-1),Zn=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[s("Connection "),n("span",{class:"token function"},"connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token keyword"},"auto"),s(" public_key "),n("span",{class:"token operator"},"="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"uint64_t"),s(" balance "),n("span",{class:"token operator"},"="),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"get_balance"),n("span",{class:"token punctuation"},"("),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),ns={class:"custom-container tip"},ss=n("p",{class:"custom-container-title"},"TIP",-1),as=s("Si vous voulez obtenir un solde de jetons, vous devez conna\xEEtre l'adresse du compte de jetons. Pour plus d'informations, voir "),ts=s("R\xE9f\xE9rences des Jetons");function es(os,cs){const l=p("ExternalLinkIcon"),e=p("SolanaCodeGroupItem"),o=p("SolanaCodeGroup"),c=p("CodeGroupItem"),u=p("CodeGroup"),i=p("RouterLink");return b(),m(d,null,[_,f,n("p",null,[g,n("a",w,[h,t(l)]),v,P,S,n("a",A,[x,t(l)]),K]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[T]),preview:a(()=>[C]),_:1}),t(e,{title:"Rust"},{default:a(()=>[R]),preview:a(()=>[L]),_:1})]),_:1}),I,n("p",null,[O,n("a",U,[E,t(l)]),q]),t(u,null,{default:a(()=>[t(c,{title:"TS",active:""},{default:a(()=>[M]),_:1}),t(c,{title:"Rust"},{default:a(()=>[G]),_:1}),t(c,{title:"CLI"},{default:a(()=>[B]),_:1})]),_:1}),F,N,W,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[z]),preview:a(()=>[V]),_:1}),t(e,{title:"Rust"},{default:a(()=>[j]),preview:a(()=>[D]),_:1})]),_:1}),Y,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[J]),preview:a(()=>[Q]),_:1}),t(e,{title:"Rust",active:""},{default:a(()=>[H]),preview:a(()=>[$]),_:1})]),_:1}),X,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Z]),preview:a(()=>[nn]),_:1})]),_:1}),sn,an,n("p",null,[n("a",tn,[en,t(l)]),on]),cn,t(u,null,{default:a(()=>[t(c,{title:"TS",active:""},{default:a(()=>[pn]),_:1}),t(c,{title:"Rust"},{default:a(()=>[ln]),_:1})]),_:1}),un,t(o,null,{default:a(()=>[t(e,{title:"rust",active:""},{default:a(()=>[rn]),preview:a(()=>[kn]),_:1})]),_:1}),bn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[mn]),preview:a(()=>[dn]),_:1})]),_:1}),yn,_n,fn,gn,t(o,null,{default:a(()=>[t(e,{title:"Rust",active:""},{default:a(()=>[wn]),preview:a(()=>[hn]),_:1})]),_:1}),vn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Pn]),preview:a(()=>[Sn]),_:1})]),_:1}),An,n("p",null,[xn,t(i,{to:"/fr/guides/get-program-accounts.html"},{default:a(()=>[Kn]),_:1}),Tn,Cn,Rn]),t(u,null,{default:a(()=>[t(c,{title:"TS",active:""},{default:a(()=>[Ln]),_:1}),t(c,{title:"Rust"},{default:a(()=>[In]),_:1}),t(c,{title:"CLI"},{default:a(()=>[On]),_:1})]),_:1}),Un,n("p",null,[En,n("a",qn,[Mn,t(l)]),Gn]),Bn,t(o,null,{default:a(()=>[t(e,{title:"rust",active:""},{default:a(()=>[Fn]),preview:a(()=>[Nn]),_:1})]),_:1}),Wn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[zn]),preview:a(()=>[Vn]),_:1})]),_:1}),jn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Dn]),preview:a(()=>[Yn]),_:1}),t(e,{title:"Rust"},{default:a(()=>[Jn]),preview:a(()=>[Qn]),_:1}),t(e,{title:"Python"},{default:a(()=>[Hn]),preview:a(()=>[$n]),_:1}),t(e,{title:"C++"},{default:a(()=>[Xn]),preview:a(()=>[Zn]),_:1})]),_:1}),n("div",ns,[ss,n("p",null,[as,t(i,{to:"/fr/references/token.html"},{default:a(()=>[ts]),_:1})])])],64)}var ls=k(y,[["render",es]]);export{ls as default}; diff --git a/docs/.vuepress/dist/assets/accounts.html.90aaa4be.js b/docs/.vuepress/dist/assets/accounts.html.c01d01f3.js similarity index 98% rename from docs/.vuepress/dist/assets/accounts.html.90aaa4be.js rename to docs/.vuepress/dist/assets/accounts.html.c01d01f3.js index ef5a4794b..51e912038 100644 --- a/docs/.vuepress/dist/assets/accounts.html.90aaa4be.js +++ b/docs/.vuepress/dist/assets/accounts.html.c01d01f3.js @@ -1 +1 @@ -import{_ as o,r as s,o as r,c as d,a as e,b as n,F as l,d as a,e as i}from"./app.cfdf84e7.js";var c="/assets/account_example.5b70d95a.jpeg";const u={},p=e("h1",{id:"cuentas",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#cuentas","aria-hidden":"true"},"#"),a(" Cuentas")],-1),m=e("p",null,"Las Cuentas en Solana son usadas para almacenar el estado. Son una pieza fundamental en el desarrollo de programas en Solana.",-1),h=e("h2",{id:"hechos",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#hechos","aria-hidden":"true"},"#"),a(" Hechos")],-1),_={class:"custom-container tip"},g=e("p",{class:"custom-container-title"},"Lista de hechos",-1),f=e("li",null,"Las cuentas son usadas para almacenar estado",-1),b=e("li",null,"Cada cuenta tiene una direcci\xF3n \xFAnica",-1),v=e("li",null,"Las cuentas tienen un tama\xF1o m\xE1ximo de 10MB (10 Mega Bytes)",-1),y=e("li",null,"Las cuentas de direcciones derivadas de programa (PDA) tienen un tama\xF1o m\xE1ximo de 10KB (10 Kilo Bytes)",-1),x=e("li",null,"Las cuentas de direcciones derivadas de programa (PDA) pueden ser usadas para firmar a nombre de un programa",-1),L=a("Los tama\xF1os de las cuentas son definidos al momento de la creaci\xF3n, pero pueden ser ajustados usando "),S={href:"https://solanacookbook.com/references/programs.html#how-to-change-account-size",target:"_blank",rel:"noopener noreferrer"},k=a("realloc"),C=e("li",null,"El almacenamiento de datos en una cuenta es pagado con la renta",-1),E=e("li",null,"El due\xF1o por defecto de una cuenta es el programa del sistema (System Program)",-1),q=i('

Un vistazo m\xE1s profundo

El modelo de una cuenta

Hay 3 tipos de cuentas en Solana:

  • Cuentas de datos para almacenar datos
  • Cuentas de programas para almacenar programas ejecutables
  • Cuentas nativas para los programas nativos de Solana como System, Stake, y Vote

En las cuentas de datos hay 2 tipos:

  • Cuentas de propiedad del sistema (System owned accounts)
  • Cuentas de direcciones derivadas de programa o PDA (Program Derived Address)

Cada cuenta tiene una direcci\xF3n (usualmente una llave p\xFAblica) y un due\xF1o (direcci\xF3n de la cuenta del programa). La lista completa de los campos que tiene una cuenta se encuentra a continuaci\xF3n.

FieldDescription
lamportsEl n\xFAmero de lamports que tiene la cuenta
ownerEl programa due\xF1o de esa cuenta
executableIndica si la cuenta procesa transacciones
dataEl array de bytes de datos que tiene la cuenta
rent_epochLa siguiente \xE9poca que esta cuenta deber\xE1 renta

Hay algunos reglas importantes de propiedad de la cuenta:

  • Solo el due\xF1o de la cuenta de datos puede modificar sus datos y debitar lamports
  • Cualquier puede enviar lamports a una cuenta de datos
  • El duse\xF1o de la cuenta puede asignar un nuevo due\xF1o si la cuenta no tiene datos

Las cuentas de programa no almacenan datos.

Por ejemplo, si existiera un programa que cuenta que permite incrementar el contador, debes crear 2 cuentas, una para almacenar el c\xF3digo del programa (ejecutable) y otra para almacenar el contador (no ejecutable).

Para evitar que las cuentas sean elmininadas se debe pagar renta.

Renta

Almacenar datos en las cuentas cuesta SOL para mantenerlas y es pagado a trav\xE9s de las rentas. Si mantienes un balance m\xEDnimo equivalente a 2 a\xF1os de renta en la cuenta, la cuenta no tendr\xE1 que pagar renta, como un dep\xF3sito de garant\xEDa. Luego puedes obtener de vuelta el valor de la renta al cerrar la cuenta y enviar los lamports hacia tu wallet.

La renta es pagada en dos momentos:

  1. Cuando es iniciado por una transacci\xF3n
  2. Una vez por \xE9poca (cantidad de slots)

Un porcentaje de las rentas es eliminado y el resto es distribuido para votar al final de cada slot.

Si la cuenta no tiene suficiente renta para pagar, la cuenta ser\xE1 eliminada junto con sus datos.

Otros recursos

',21),P={href:"https://solana.wiki/zh-cn/docs/account-model/#account-storage",target:"_blank",rel:"noopener noreferrer"},w=a("Modelo de cuentas de Solana"),j={href:"https://docs.solana.com/developing/programming-model/accounts",target:"_blank",rel:"noopener noreferrer"},z=a("Documentaci\xF3n oficial"),B={href:"https://twitter.com/pencilflip/status/1452402100470644739",target:"_blank",rel:"noopener noreferrer"},D=a("Hilo de la cuenta de Twitter de pencilflip"),A=e("h3",{id:"creditos",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#creditos","aria-hidden":"true"},"#"),a(" Creditos")],-1),V=a("El concepto de cuentas es gracias a Pencilflip. "),H={href:"https://twitter.com/intent/user?screen_name=pencilflip",target:"_blank",rel:"noopener noreferrer"},N=a("Pueden seguir a Penciflip en Twitter"),F=a(".");function I(M,T){const t=s("ExternalLinkIcon");return r(),d(l,null,[p,m,h,e("div",_,[g,e("ul",null,[f,b,v,y,x,e("li",null,[L,e("a",S,[k,n(t)])]),C,E])]),q,e("ul",null,[e("li",null,[e("a",P,[w,n(t)])]),e("li",null,[e("a",j,[z,n(t)])]),e("li",null,[e("a",B,[D,n(t)])])]),A,e("p",null,[V,e("a",H,[N,n(t)]),F])],64)}var K=o(u,[["render",I]]);export{K as default}; +import{_ as o,r as s,o as r,c as d,a as e,b as n,F as l,d as a,e as i}from"./app.2fbb9e96.js";var c="/assets/account_example.5b70d95a.jpeg";const u={},p=e("h1",{id:"cuentas",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#cuentas","aria-hidden":"true"},"#"),a(" Cuentas")],-1),m=e("p",null,"Las Cuentas en Solana son usadas para almacenar el estado. Son una pieza fundamental en el desarrollo de programas en Solana.",-1),h=e("h2",{id:"hechos",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#hechos","aria-hidden":"true"},"#"),a(" Hechos")],-1),_={class:"custom-container tip"},g=e("p",{class:"custom-container-title"},"Lista de hechos",-1),f=e("li",null,"Las cuentas son usadas para almacenar estado",-1),b=e("li",null,"Cada cuenta tiene una direcci\xF3n \xFAnica",-1),v=e("li",null,"Las cuentas tienen un tama\xF1o m\xE1ximo de 10MB (10 Mega Bytes)",-1),y=e("li",null,"Las cuentas de direcciones derivadas de programa (PDA) tienen un tama\xF1o m\xE1ximo de 10KB (10 Kilo Bytes)",-1),x=e("li",null,"Las cuentas de direcciones derivadas de programa (PDA) pueden ser usadas para firmar a nombre de un programa",-1),L=a("Los tama\xF1os de las cuentas son definidos al momento de la creaci\xF3n, pero pueden ser ajustados usando "),S={href:"https://solanacookbook.com/references/programs.html#how-to-change-account-size",target:"_blank",rel:"noopener noreferrer"},k=a("realloc"),C=e("li",null,"El almacenamiento de datos en una cuenta es pagado con la renta",-1),E=e("li",null,"El due\xF1o por defecto de una cuenta es el programa del sistema (System Program)",-1),q=i('

Un vistazo m\xE1s profundo

El modelo de una cuenta

Hay 3 tipos de cuentas en Solana:

  • Cuentas de datos para almacenar datos
  • Cuentas de programas para almacenar programas ejecutables
  • Cuentas nativas para los programas nativos de Solana como System, Stake, y Vote

En las cuentas de datos hay 2 tipos:

  • Cuentas de propiedad del sistema (System owned accounts)
  • Cuentas de direcciones derivadas de programa o PDA (Program Derived Address)

Cada cuenta tiene una direcci\xF3n (usualmente una llave p\xFAblica) y un due\xF1o (direcci\xF3n de la cuenta del programa). La lista completa de los campos que tiene una cuenta se encuentra a continuaci\xF3n.

FieldDescription
lamportsEl n\xFAmero de lamports que tiene la cuenta
ownerEl programa due\xF1o de esa cuenta
executableIndica si la cuenta procesa transacciones
dataEl array de bytes de datos que tiene la cuenta
rent_epochLa siguiente \xE9poca que esta cuenta deber\xE1 renta

Hay algunos reglas importantes de propiedad de la cuenta:

  • Solo el due\xF1o de la cuenta de datos puede modificar sus datos y debitar lamports
  • Cualquier puede enviar lamports a una cuenta de datos
  • El duse\xF1o de la cuenta puede asignar un nuevo due\xF1o si la cuenta no tiene datos

Las cuentas de programa no almacenan datos.

Por ejemplo, si existiera un programa que cuenta que permite incrementar el contador, debes crear 2 cuentas, una para almacenar el c\xF3digo del programa (ejecutable) y otra para almacenar el contador (no ejecutable).

Para evitar que las cuentas sean elmininadas se debe pagar renta.

Renta

Almacenar datos en las cuentas cuesta SOL para mantenerlas y es pagado a trav\xE9s de las rentas. Si mantienes un balance m\xEDnimo equivalente a 2 a\xF1os de renta en la cuenta, la cuenta no tendr\xE1 que pagar renta, como un dep\xF3sito de garant\xEDa. Luego puedes obtener de vuelta el valor de la renta al cerrar la cuenta y enviar los lamports hacia tu wallet.

La renta es pagada en dos momentos:

  1. Cuando es iniciado por una transacci\xF3n
  2. Una vez por \xE9poca (cantidad de slots)

Un porcentaje de las rentas es eliminado y el resto es distribuido para votar al final de cada slot.

Si la cuenta no tiene suficiente renta para pagar, la cuenta ser\xE1 eliminada junto con sus datos.

Otros recursos

',21),P={href:"https://solana.wiki/zh-cn/docs/account-model/#account-storage",target:"_blank",rel:"noopener noreferrer"},w=a("Modelo de cuentas de Solana"),j={href:"https://docs.solana.com/developing/programming-model/accounts",target:"_blank",rel:"noopener noreferrer"},z=a("Documentaci\xF3n oficial"),B={href:"https://twitter.com/pencilflip/status/1452402100470644739",target:"_blank",rel:"noopener noreferrer"},D=a("Hilo de la cuenta de Twitter de pencilflip"),A=e("h3",{id:"creditos",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#creditos","aria-hidden":"true"},"#"),a(" Creditos")],-1),V=a("El concepto de cuentas es gracias a Pencilflip. "),H={href:"https://twitter.com/intent/user?screen_name=pencilflip",target:"_blank",rel:"noopener noreferrer"},N=a("Pueden seguir a Penciflip en Twitter"),F=a(".");function I(M,T){const t=s("ExternalLinkIcon");return r(),d(l,null,[p,m,h,e("div",_,[g,e("ul",null,[f,b,v,y,x,e("li",null,[L,e("a",S,[k,n(t)])]),C,E])]),q,e("ul",null,[e("li",null,[e("a",P,[w,n(t)])]),e("li",null,[e("a",j,[z,n(t)])]),e("li",null,[e("a",B,[D,n(t)])])]),A,e("p",null,[V,e("a",H,[N,n(t)]),F])],64)}var K=o(u,[["render",I]]);export{K as default}; diff --git a/docs/.vuepress/dist/assets/accounts.html.110556a0.js b/docs/.vuepress/dist/assets/accounts.html.d2d4d5ac.js similarity index 99% rename from docs/.vuepress/dist/assets/accounts.html.110556a0.js rename to docs/.vuepress/dist/assets/accounts.html.d2d4d5ac.js index 697b6d5ff..9e741bf9c 100644 --- a/docs/.vuepress/dist/assets/accounts.html.110556a0.js +++ b/docs/.vuepress/dist/assets/accounts.html.d2d4d5ac.js @@ -1 +1 @@ -import{_ as c,r as n,o as r,c as s,a as t,b as o,F as l,d as e,e as i}from"./app.cfdf84e7.js";var d="/assets/account_example.5b70d95a.jpeg";const u={},h=t("h1",{id:"accounts",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#accounts","aria-hidden":"true"},"#"),e(" Accounts")],-1),p=t("p",null,"Accounts \u0E43\u0E19 Solana \u0E08\u0E30\u0E40\u0E2D\u0E32\u0E44\u0E27\u0E49\u0E40\u0E01\u0E47\u0E1A state \u0E41\u0E25\u0E30\u0E40\u0E1B\u0E47\u0E19\u0E2A\u0E48\u0E27\u0E19\u0E2A\u0E33\u0E04\u0E31\u0E0D\u0E43\u0E19\u0E01\u0E32\u0E23\u0E1E\u0E31\u0E12\u0E19\u0E32\u0E1A\u0E19 Solana.",-1),_=t("h2",{id:"\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49","aria-hidden":"true"},"#"),e(" \u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49")],-1),m={class:"custom-container tip"},f=t("p",{class:"custom-container-title"},"Fact Sheet",-1),g=t("li",null,"Accounts \u0E40\u0E2D\u0E32\u0E44\u0E27\u0E49\u0E40\u0E01\u0E47\u0E1A\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25 (data)",-1),b=t("li",null,"\u0E41\u0E15\u0E48\u0E25\u0E30 account \u0E21\u0E35 address \u0E17\u0E35\u0E48\u0E44\u0E21\u0E48\u0E0B\u0E49\u0E33\u0E01\u0E31\u0E19",-1),x=t("li",null,"Accounts \u0E21\u0E35\u0E02\u0E19\u0E32\u0E14\u0E44\u0E14\u0E49\u0E44\u0E21\u0E48\u0E40\u0E01\u0E34\u0E19 10MB (10 Mega Bytes)",-1),k=t("li",null,"PDA accounts \u0E21\u0E35\u0E02\u0E19\u0E32\u0E14\u0E44\u0E14\u0E49\u0E44\u0E21\u0E48\u0E40\u0E01\u0E34\u0E19 10KB (10 Kilo Bytes)",-1),A=t("li",null,"PDA accounts \u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E43\u0E0A\u0E49 sign \u0E41\u0E17\u0E19 program \u0E44\u0E14\u0E49",-1),S=e("\u0E02\u0E19\u0E32\u0E14\u0E02\u0E2D\u0E07 Accounts \u0E08\u0E30\u0E16\u0E39\u0E01\u0E01\u0E33\u0E2B\u0E19\u0E14\u0E15\u0E31\u0E49\u0E07\u0E41\u0E15\u0E48\u0E15\u0E2D\u0E19\u0E2A\u0E23\u0E49\u0E32\u0E07 \u0E41\u0E15\u0E48\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E40\u0E1B\u0E25\u0E35\u0E48\u0E22\u0E19\u0E44\u0E14\u0E49\u0E17\u0E35\u0E2B\u0E25\u0E31\u0E07\u0E14\u0E49\u0E27\u0E22\u0E01\u0E32\u0E23 "),y={href:"https://solanacookbook.com/references/programs.html#how-to-change-account-size",target:"_blank",rel:"noopener noreferrer"},v=e("realloc"),w=t("li",null,"\u0E1E\u0E37\u0E49\u0E19\u0E17\u0E35\u0E48\u0E40\u0E01\u0E47\u0E1A data \u0E43\u0E19 Account \u0E15\u0E49\u0E2D\u0E07\u0E08\u0E48\u0E32\u0E22\u0E22\u0E04\u0E48\u0E32\u0E40\u0E0A\u0E48\u0E32 (rent)",-1),P=t("li",null,"\u0E40\u0E08\u0E49\u0E32\u0E02\u0E2D\u0E07 account \u0E15\u0E32\u0E21 default \u0E04\u0E37\u0E2D System Program",-1),B=i('

\u0E25\u0E07\u0E25\u0E36\u0E01

Account Model

accounts \u0E1A\u0E19 Solana \u0E08\u0E30\u0E21\u0E35 3 \u0E41\u0E1A\u0E1A:

  • Data accounts \u0E40\u0E2D\u0E32\u0E44\u0E27\u0E49\u0E40\u0E01\u0E47\u0E1A data
  • Program accounts \u0E40\u0E2D\u0E32\u0E44\u0E27\u0E49\u0E40\u0E01\u0E47\u0E1A executable programs
  • Native accounts \u0E04\u0E37\u0E2D\u0E1E\u0E27\u0E01 native programs \u0E1A\u0E19 Solana \u0E40\u0E0A\u0E48\u0E19 System, Stake, \u0E41\u0E25\u0E30 Vote

data accounts \u0E21\u0E35 2 \u0E1B\u0E23\u0E30\u0E40\u0E20\u0E17:

  • accounts \u0E17\u0E35\u0E48\u0E21\u0E35 System \u0E40\u0E1B\u0E47\u0E19\u0E40\u0E08\u0E49\u0E32\u0E02\u0E2D\u0E07
  • PDA (Program Derived Address) accounts

\u0E41\u0E15\u0E48\u0E25\u0E30 account \u0E08\u0E30\u0E21\u0E35 address (\u0E01\u0E47\u0E04\u0E37\u0E2D public key) \u0E41\u0E25\u0E30\u0E21\u0E35 owner (address \u0E02\u0E2D\u0E07 program account). \u0E42\u0E14\u0E22 account \u0E08\u0E30\u0E21\u0E35 field \u0E15\u0E32\u0E21\u0E14\u0E49\u0E32\u0E19\u0E25\u0E48\u0E32\u0E07\u0E19\u0E35\u0E49

Field\u0E04\u0E33\u0E2D\u0E18\u0E34\u0E1A\u0E32\u0E22
lamports\u0E08\u0E33\u0E19\u0E27\u0E19 lamports \u0E17\u0E35\u0E48 account \u0E21\u0E35\u0E2D\u0E22\u0E39\u0E48
ownerprogram \u0E17\u0E35\u0E48\u0E40\u0E1B\u0E47\u0E19\u0E40\u0E08\u0E49\u0E32\u0E02\u0E2D\u0E07 account \u0E19\u0E35\u0E49
executableaccount \u0E19\u0E35\u0E49\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E1B\u0E23\u0E30\u0E21\u0E27\u0E25\u0E1C\u0E25 instructions \u0E44\u0E14\u0E49\u0E2B\u0E23\u0E37\u0E2D\u0E44\u0E21\u0E48
data\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E14\u0E34\u0E1A\u0E40\u0E1B\u0E47\u0E19 byte array \u0E17\u0E35\u0E48\u0E40\u0E01\u0E47\u0E1A\u0E2D\u0E22\u0E39\u0E48\u0E43\u0E19 account \u0E19\u0E35\u0E49
rent_epochepoch \u0E16\u0E31\u0E14\u0E44\u0E1B\u0E17\u0E35\u0E48 account \u0E19\u0E35\u0E49\u0E08\u0E30\u0E40\u0E1B\u0E47\u0E19\u0E2B\u0E19\u0E35\u0E49\u0E04\u0E48\u0E32\u0E40\u0E0A\u0E48\u0E32 rent

\u0E01\u0E0F\u0E17\u0E35\u0E48\u0E2A\u0E33\u0E04\u0E31\u0E0D\u0E40\u0E01\u0E35\u0E48\u0E22\u0E27\u0E01\u0E31\u0E1A ownership:

  • \u0E40\u0E09\u0E1E\u0E32\u0E30\u0E40\u0E08\u0E49\u0E32\u0E02\u0E2D\u0E07 data account \u0E17\u0E35\u0E48\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E41\u0E01\u0E49\u0E44\u0E02\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E02\u0E2D\u0E07\u0E15\u0E31\u0E27\u0E40\u0E2D\u0E07\u0E44\u0E14\u0E49 \u0E41\u0E25\u0E30\u0E16\u0E2D\u0E19 lamports \u0E2D\u0E2D\u0E01\u0E21\u0E32\u0E44\u0E14\u0E49
  • \u0E17\u0E38\u0E01\u0E04\u0E19\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E1D\u0E32\u0E01 lamports \u0E40\u0E02\u0E49\u0E32 data account \u0E44\u0E14\u0E49
  • \u0E40\u0E08\u0E49\u0E32\u0E02\u0E2D\u0E07 account \u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E42\u0E2D\u0E19\u0E40\u0E1B\u0E25\u0E35\u0E48\u0E22\u0E19\u0E40\u0E08\u0E49\u0E32\u0E02\u0E2D\u0E07\u0E43\u0E2B\u0E21\u0E48\u0E44\u0E14\u0E49 \u0E16\u0E49\u0E32 data \u0E43\u0E19 account \u0E44\u0E21\u0E48\u0E21\u0E35\u0E41\u0E25\u0E49\u0E27 (zeroed out)

Program accounts \u0E44\u0E21\u0E48\u0E40\u0E01\u0E47\u0E1A state.

\u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E40\u0E0A\u0E48\u0E19 \u0E16\u0E49\u0E32\u0E40\u0E23\u0E32\u0E21\u0E35 counter program \u0E17\u0E35\u0E48\u0E43\u0E2B\u0E49\u0E40\u0E23\u0E32\u0E40\u0E1E\u0E34\u0E48\u0E21\u0E08\u0E33\u0E19\u0E27\u0E19 counter \u0E44\u0E14\u0E49, \u0E40\u0E23\u0E32\u0E15\u0E49\u0E2D\u0E07\u0E2A\u0E23\u0E49\u0E32\u0E07 2 accounts \u0E42\u0E14\u0E22\u0E17\u0E35\u0E48 account \u0E41\u0E23\u0E01\u0E08\u0E30\u0E40\u0E2D\u0E32\u0E44\u0E27\u0E49\u0E40\u0E01\u0E47\u0E1A code \u0E02\u0E2D\u0E07 program \u0E41\u0E25\u0E30\u0E2D\u0E35\u0E01\u0E2D\u0E31\u0E19\u0E40\u0E2D\u0E32\u0E44\u0E27\u0E49\u0E40\u0E01\u0E47\u0E1A\u0E08\u0E33\u0E19\u0E27\u0E19 counter

\u0E04\u0E38\u0E13\u0E15\u0E49\u0E2D\u0E07\u0E08\u0E48\u0E32\u0E22 Rent (\u0E04\u0E48\u0E32\u0E40\u0E0A\u0E48\u0E32) \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E1B\u0E49\u0E2D\u0E07\u0E01\u0E31\u0E19 account \u0E08\u0E32\u0E01\u0E01\u0E32\u0E23\u0E16\u0E39\u0E01\u0E25\u0E1A

Rent (\u0E04\u0E48\u0E32\u0E40\u0E0A\u0E48\u0E32)

\u0E01\u0E32\u0E23\u0E40\u0E01\u0E47\u0E1A\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E1A\u0E19 account \u0E08\u0E30\u0E40\u0E2A\u0E35\u0E22 SOL \u0E43\u0E19\u0E01\u0E32\u0E23\u0E14\u0E39\u0E41\u0E25 \u0E41\u0E25\u0E30\u0E21\u0E31\u0E19\u0E08\u0E30\u0E16\u0E39\u0E01\u0E08\u0E48\u0E32\u0E22\u0E42\u0E14\u0E22\u0E40\u0E23\u0E35\u0E22\u0E01\u0E27\u0E48\u0E32 rent (\u0E04\u0E48\u0E32\u0E40\u0E0A\u0E48\u0E32) \u0E16\u0E49\u0E32\u0E04\u0E38\u0E13\u0E08\u0E48\u0E32\u0E22\u0E17\u0E34\u0E49\u0E07\u0E44\u0E27\u0E49\u0E43\u0E2B\u0E49\u0E04\u0E23\u0E2D\u0E1A\u0E04\u0E25\u0E38\u0E21\u0E02\u0E31\u0E49\u0E19\u0E15\u0E48\u0E33 2 \u0E1B\u0E35 \u0E04\u0E38\u0E13\u0E01\u0E47\u0E08\u0E30\u0E44\u0E14\u0E49\u0E23\u0E31\u0E1A\u0E01\u0E32\u0E23\u0E22\u0E01\u0E40\u0E27\u0E49\u0E19\u0E04\u0E48\u0E32\u0E40\u0E0A\u0E48\u0E32 (rent exempt) \u0E41\u0E25\u0E30\u0E04\u0E38\u0E13\u0E22\u0E31\u0E07\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E40\u0E2D\u0E32 lamports \u0E04\u0E37\u0E19\u0E44\u0E14\u0E49\u0E14\u0E49\u0E27\u0E22\u0E01\u0E32\u0E23\u0E1B\u0E34\u0E14 (close) account \u0E41\u0E25\u0E30\u0E2A\u0E48\u0E07 lamports \u0E04\u0E37\u0E19\u0E2A\u0E39\u0E48 wallet

Rent \u0E08\u0E30\u0E16\u0E39\u0E01\u0E08\u0E48\u0E32\u0E22\u0E40\u0E21\u0E37\u0E48\u0E2D 2 \u0E40\u0E2B\u0E15\u0E38\u0E01\u0E32\u0E23\u0E13\u0E4C\u0E19\u0E35\u0E49\u0E40\u0E01\u0E34\u0E14\u0E02\u0E36\u0E49\u0E19:

  1. \u0E40\u0E21\u0E37\u0E48\u0E2D\u0E16\u0E39\u0E01\u0E2D\u0E49\u0E32\u0E07\u0E2D\u0E34\u0E07\u0E14\u0E49\u0E27\u0E22 transaction
  2. \u0E40\u0E21\u0E37\u0E48\u0E2D\u0E08\u0E1A\u0E23\u0E2D\u0E1A epoch

\u0E08\u0E33\u0E19\u0E27\u0E19 % \u0E02\u0E2D\u0E07 rent \u0E17\u0E35\u0E48\u0E16\u0E39\u0E01\u0E40\u0E01\u0E47\u0E1A\u0E08\u0E32\u0E01 accounts \u0E08\u0E30\u0E16\u0E39\u0E01\u0E17\u0E33\u0E25\u0E32\u0E22 \u0E43\u0E19\u0E02\u0E13\u0E30\u0E17\u0E35\u0E48\u0E08\u0E33\u0E19\u0E27\u0E19\u0E17\u0E35\u0E48\u0E40\u0E2B\u0E25\u0E37\u0E2D\u0E08\u0E30\u0E16\u0E39\u0E01\u0E41\u0E08\u0E01\u0E08\u0E48\u0E32\u0E22\u0E44\u0E1B\u0E43\u0E2B\u0E49 vote account \u0E40\u0E21\u0E37\u0E48\u0E2D\u0E08\u0E1A\u0E23\u0E2D\u0E1A\u0E02\u0E2D\u0E07\u0E17\u0E38\u0E01 slot

\u0E16\u0E49\u0E32 account \u0E44\u0E21\u0E48\u0E21\u0E35 lamports \u0E40\u0E1E\u0E35\u0E22\u0E07\u0E1E\u0E2D\u0E17\u0E35\u0E48\u0E08\u0E30\u0E08\u0E48\u0E32\u0E22 rent \u0E08\u0E30\u0E17\u0E33\u0E43\u0E2B\u0E49 account \u0E16\u0E39\u0E01\u0E08\u0E31\u0E14\u0E2A\u0E23\u0E23\u0E04\u0E37\u0E19 deallocated \u0E41\u0E25\u0E30\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E01\u0E47\u0E08\u0E30\u0E2B\u0E32\u0E22\u0E44\u0E1B

\u0E41\u0E25\u0E30\u0E40\u0E23\u0E32\u0E15\u0E49\u0E2D\u0E07\u0E08\u0E33\u0E44\u0E27\u0E49\u0E14\u0E49\u0E27\u0E22\u0E27\u0E48\u0E32 account \u0E43\u0E2B\u0E21\u0E48\u0E08\u0E30\u0E15\u0E49\u0E2D\u0E07\u0E08\u0E48\u0E32\u0E22\u0E04\u0E48\u0E32 rent exempt \u0E2A\u0E33\u0E23\u0E2D\u0E07\u0E44\u0E27\u0E49\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E22\u0E01\u0E40\u0E27\u0E49\u0E19\u0E04\u0E48\u0E32\u0E40\u0E0A\u0E48\u0E32\u0E40\u0E2A\u0E21\u0E2D

\u0E41\u0E2B\u0E25\u0E48\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19

',22),D={href:"https://solana.wiki/zh-cn/docs/account-model/#account-storage",target:"_blank",rel:"noopener noreferrer"},N=e("Solana Account Model"),V={href:"https://docs.solana.com/developing/programming-model/accounts",target:"_blank",rel:"noopener noreferrer"},F=e("Official Documentation"),M={href:"https://twitter.com/pencilflip/status/1452402100470644739",target:"_blank",rel:"noopener noreferrer"},z=e("pencilflip account thread"),E=t("h3",{id:"credit",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#credit","aria-hidden":"true"},"#"),e(" Credit")],-1),L=e("\u0E2B\u0E25\u0E31\u0E01\u0E01\u0E32\u0E23\u0E19\u0E35\u0E49\u0E40\u0E1B\u0E47\u0E19 credit \u0E02\u0E2D\u0E07 Pencilflip. "),R={href:"https://twitter.com/intent/user?screen_name=pencilflip",target:"_blank",rel:"noopener noreferrer"},C=e("\u0E15\u0E34\u0E14\u0E15\u0E32\u0E21\u0E40\u0E04\u0E49\u0E32\u0E44\u0E14\u0E49\u0E17\u0E32\u0E07 Twitter"),I=e(".");function K(O,T){const a=n("ExternalLinkIcon");return r(),s(l,null,[h,p,_,t("div",m,[f,t("ul",null,[g,b,x,k,A,t("li",null,[S,t("a",y,[v,o(a)])]),w,P])]),B,t("ul",null,[t("li",null,[t("a",D,[N,o(a)])]),t("li",null,[t("a",V,[F,o(a)])]),t("li",null,[t("a",M,[z,o(a)])])]),E,t("p",null,[L,t("a",R,[C,o(a)]),I])],64)}var q=c(u,[["render",K]]);export{q as default}; +import{_ as c,r as n,o as r,c as s,a as t,b as o,F as l,d as e,e as i}from"./app.2fbb9e96.js";var d="/assets/account_example.5b70d95a.jpeg";const u={},h=t("h1",{id:"accounts",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#accounts","aria-hidden":"true"},"#"),e(" Accounts")],-1),p=t("p",null,"Accounts \u0E43\u0E19 Solana \u0E08\u0E30\u0E40\u0E2D\u0E32\u0E44\u0E27\u0E49\u0E40\u0E01\u0E47\u0E1A state \u0E41\u0E25\u0E30\u0E40\u0E1B\u0E47\u0E19\u0E2A\u0E48\u0E27\u0E19\u0E2A\u0E33\u0E04\u0E31\u0E0D\u0E43\u0E19\u0E01\u0E32\u0E23\u0E1E\u0E31\u0E12\u0E19\u0E32\u0E1A\u0E19 Solana.",-1),_=t("h2",{id:"\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49","aria-hidden":"true"},"#"),e(" \u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49")],-1),m={class:"custom-container tip"},f=t("p",{class:"custom-container-title"},"Fact Sheet",-1),g=t("li",null,"Accounts \u0E40\u0E2D\u0E32\u0E44\u0E27\u0E49\u0E40\u0E01\u0E47\u0E1A\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25 (data)",-1),b=t("li",null,"\u0E41\u0E15\u0E48\u0E25\u0E30 account \u0E21\u0E35 address \u0E17\u0E35\u0E48\u0E44\u0E21\u0E48\u0E0B\u0E49\u0E33\u0E01\u0E31\u0E19",-1),x=t("li",null,"Accounts \u0E21\u0E35\u0E02\u0E19\u0E32\u0E14\u0E44\u0E14\u0E49\u0E44\u0E21\u0E48\u0E40\u0E01\u0E34\u0E19 10MB (10 Mega Bytes)",-1),k=t("li",null,"PDA accounts \u0E21\u0E35\u0E02\u0E19\u0E32\u0E14\u0E44\u0E14\u0E49\u0E44\u0E21\u0E48\u0E40\u0E01\u0E34\u0E19 10KB (10 Kilo Bytes)",-1),A=t("li",null,"PDA accounts \u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E43\u0E0A\u0E49 sign \u0E41\u0E17\u0E19 program \u0E44\u0E14\u0E49",-1),S=e("\u0E02\u0E19\u0E32\u0E14\u0E02\u0E2D\u0E07 Accounts \u0E08\u0E30\u0E16\u0E39\u0E01\u0E01\u0E33\u0E2B\u0E19\u0E14\u0E15\u0E31\u0E49\u0E07\u0E41\u0E15\u0E48\u0E15\u0E2D\u0E19\u0E2A\u0E23\u0E49\u0E32\u0E07 \u0E41\u0E15\u0E48\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E40\u0E1B\u0E25\u0E35\u0E48\u0E22\u0E19\u0E44\u0E14\u0E49\u0E17\u0E35\u0E2B\u0E25\u0E31\u0E07\u0E14\u0E49\u0E27\u0E22\u0E01\u0E32\u0E23 "),y={href:"https://solanacookbook.com/references/programs.html#how-to-change-account-size",target:"_blank",rel:"noopener noreferrer"},v=e("realloc"),w=t("li",null,"\u0E1E\u0E37\u0E49\u0E19\u0E17\u0E35\u0E48\u0E40\u0E01\u0E47\u0E1A data \u0E43\u0E19 Account \u0E15\u0E49\u0E2D\u0E07\u0E08\u0E48\u0E32\u0E22\u0E22\u0E04\u0E48\u0E32\u0E40\u0E0A\u0E48\u0E32 (rent)",-1),P=t("li",null,"\u0E40\u0E08\u0E49\u0E32\u0E02\u0E2D\u0E07 account \u0E15\u0E32\u0E21 default \u0E04\u0E37\u0E2D System Program",-1),B=i('

\u0E25\u0E07\u0E25\u0E36\u0E01

Account Model

accounts \u0E1A\u0E19 Solana \u0E08\u0E30\u0E21\u0E35 3 \u0E41\u0E1A\u0E1A:

  • Data accounts \u0E40\u0E2D\u0E32\u0E44\u0E27\u0E49\u0E40\u0E01\u0E47\u0E1A data
  • Program accounts \u0E40\u0E2D\u0E32\u0E44\u0E27\u0E49\u0E40\u0E01\u0E47\u0E1A executable programs
  • Native accounts \u0E04\u0E37\u0E2D\u0E1E\u0E27\u0E01 native programs \u0E1A\u0E19 Solana \u0E40\u0E0A\u0E48\u0E19 System, Stake, \u0E41\u0E25\u0E30 Vote

data accounts \u0E21\u0E35 2 \u0E1B\u0E23\u0E30\u0E40\u0E20\u0E17:

  • accounts \u0E17\u0E35\u0E48\u0E21\u0E35 System \u0E40\u0E1B\u0E47\u0E19\u0E40\u0E08\u0E49\u0E32\u0E02\u0E2D\u0E07
  • PDA (Program Derived Address) accounts

\u0E41\u0E15\u0E48\u0E25\u0E30 account \u0E08\u0E30\u0E21\u0E35 address (\u0E01\u0E47\u0E04\u0E37\u0E2D public key) \u0E41\u0E25\u0E30\u0E21\u0E35 owner (address \u0E02\u0E2D\u0E07 program account). \u0E42\u0E14\u0E22 account \u0E08\u0E30\u0E21\u0E35 field \u0E15\u0E32\u0E21\u0E14\u0E49\u0E32\u0E19\u0E25\u0E48\u0E32\u0E07\u0E19\u0E35\u0E49

Field\u0E04\u0E33\u0E2D\u0E18\u0E34\u0E1A\u0E32\u0E22
lamports\u0E08\u0E33\u0E19\u0E27\u0E19 lamports \u0E17\u0E35\u0E48 account \u0E21\u0E35\u0E2D\u0E22\u0E39\u0E48
ownerprogram \u0E17\u0E35\u0E48\u0E40\u0E1B\u0E47\u0E19\u0E40\u0E08\u0E49\u0E32\u0E02\u0E2D\u0E07 account \u0E19\u0E35\u0E49
executableaccount \u0E19\u0E35\u0E49\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E1B\u0E23\u0E30\u0E21\u0E27\u0E25\u0E1C\u0E25 instructions \u0E44\u0E14\u0E49\u0E2B\u0E23\u0E37\u0E2D\u0E44\u0E21\u0E48
data\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E14\u0E34\u0E1A\u0E40\u0E1B\u0E47\u0E19 byte array \u0E17\u0E35\u0E48\u0E40\u0E01\u0E47\u0E1A\u0E2D\u0E22\u0E39\u0E48\u0E43\u0E19 account \u0E19\u0E35\u0E49
rent_epochepoch \u0E16\u0E31\u0E14\u0E44\u0E1B\u0E17\u0E35\u0E48 account \u0E19\u0E35\u0E49\u0E08\u0E30\u0E40\u0E1B\u0E47\u0E19\u0E2B\u0E19\u0E35\u0E49\u0E04\u0E48\u0E32\u0E40\u0E0A\u0E48\u0E32 rent

\u0E01\u0E0F\u0E17\u0E35\u0E48\u0E2A\u0E33\u0E04\u0E31\u0E0D\u0E40\u0E01\u0E35\u0E48\u0E22\u0E27\u0E01\u0E31\u0E1A ownership:

  • \u0E40\u0E09\u0E1E\u0E32\u0E30\u0E40\u0E08\u0E49\u0E32\u0E02\u0E2D\u0E07 data account \u0E17\u0E35\u0E48\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E41\u0E01\u0E49\u0E44\u0E02\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E02\u0E2D\u0E07\u0E15\u0E31\u0E27\u0E40\u0E2D\u0E07\u0E44\u0E14\u0E49 \u0E41\u0E25\u0E30\u0E16\u0E2D\u0E19 lamports \u0E2D\u0E2D\u0E01\u0E21\u0E32\u0E44\u0E14\u0E49
  • \u0E17\u0E38\u0E01\u0E04\u0E19\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E1D\u0E32\u0E01 lamports \u0E40\u0E02\u0E49\u0E32 data account \u0E44\u0E14\u0E49
  • \u0E40\u0E08\u0E49\u0E32\u0E02\u0E2D\u0E07 account \u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E42\u0E2D\u0E19\u0E40\u0E1B\u0E25\u0E35\u0E48\u0E22\u0E19\u0E40\u0E08\u0E49\u0E32\u0E02\u0E2D\u0E07\u0E43\u0E2B\u0E21\u0E48\u0E44\u0E14\u0E49 \u0E16\u0E49\u0E32 data \u0E43\u0E19 account \u0E44\u0E21\u0E48\u0E21\u0E35\u0E41\u0E25\u0E49\u0E27 (zeroed out)

Program accounts \u0E44\u0E21\u0E48\u0E40\u0E01\u0E47\u0E1A state.

\u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E40\u0E0A\u0E48\u0E19 \u0E16\u0E49\u0E32\u0E40\u0E23\u0E32\u0E21\u0E35 counter program \u0E17\u0E35\u0E48\u0E43\u0E2B\u0E49\u0E40\u0E23\u0E32\u0E40\u0E1E\u0E34\u0E48\u0E21\u0E08\u0E33\u0E19\u0E27\u0E19 counter \u0E44\u0E14\u0E49, \u0E40\u0E23\u0E32\u0E15\u0E49\u0E2D\u0E07\u0E2A\u0E23\u0E49\u0E32\u0E07 2 accounts \u0E42\u0E14\u0E22\u0E17\u0E35\u0E48 account \u0E41\u0E23\u0E01\u0E08\u0E30\u0E40\u0E2D\u0E32\u0E44\u0E27\u0E49\u0E40\u0E01\u0E47\u0E1A code \u0E02\u0E2D\u0E07 program \u0E41\u0E25\u0E30\u0E2D\u0E35\u0E01\u0E2D\u0E31\u0E19\u0E40\u0E2D\u0E32\u0E44\u0E27\u0E49\u0E40\u0E01\u0E47\u0E1A\u0E08\u0E33\u0E19\u0E27\u0E19 counter

\u0E04\u0E38\u0E13\u0E15\u0E49\u0E2D\u0E07\u0E08\u0E48\u0E32\u0E22 Rent (\u0E04\u0E48\u0E32\u0E40\u0E0A\u0E48\u0E32) \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E1B\u0E49\u0E2D\u0E07\u0E01\u0E31\u0E19 account \u0E08\u0E32\u0E01\u0E01\u0E32\u0E23\u0E16\u0E39\u0E01\u0E25\u0E1A

Rent (\u0E04\u0E48\u0E32\u0E40\u0E0A\u0E48\u0E32)

\u0E01\u0E32\u0E23\u0E40\u0E01\u0E47\u0E1A\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E1A\u0E19 account \u0E08\u0E30\u0E40\u0E2A\u0E35\u0E22 SOL \u0E43\u0E19\u0E01\u0E32\u0E23\u0E14\u0E39\u0E41\u0E25 \u0E41\u0E25\u0E30\u0E21\u0E31\u0E19\u0E08\u0E30\u0E16\u0E39\u0E01\u0E08\u0E48\u0E32\u0E22\u0E42\u0E14\u0E22\u0E40\u0E23\u0E35\u0E22\u0E01\u0E27\u0E48\u0E32 rent (\u0E04\u0E48\u0E32\u0E40\u0E0A\u0E48\u0E32) \u0E16\u0E49\u0E32\u0E04\u0E38\u0E13\u0E08\u0E48\u0E32\u0E22\u0E17\u0E34\u0E49\u0E07\u0E44\u0E27\u0E49\u0E43\u0E2B\u0E49\u0E04\u0E23\u0E2D\u0E1A\u0E04\u0E25\u0E38\u0E21\u0E02\u0E31\u0E49\u0E19\u0E15\u0E48\u0E33 2 \u0E1B\u0E35 \u0E04\u0E38\u0E13\u0E01\u0E47\u0E08\u0E30\u0E44\u0E14\u0E49\u0E23\u0E31\u0E1A\u0E01\u0E32\u0E23\u0E22\u0E01\u0E40\u0E27\u0E49\u0E19\u0E04\u0E48\u0E32\u0E40\u0E0A\u0E48\u0E32 (rent exempt) \u0E41\u0E25\u0E30\u0E04\u0E38\u0E13\u0E22\u0E31\u0E07\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E40\u0E2D\u0E32 lamports \u0E04\u0E37\u0E19\u0E44\u0E14\u0E49\u0E14\u0E49\u0E27\u0E22\u0E01\u0E32\u0E23\u0E1B\u0E34\u0E14 (close) account \u0E41\u0E25\u0E30\u0E2A\u0E48\u0E07 lamports \u0E04\u0E37\u0E19\u0E2A\u0E39\u0E48 wallet

Rent \u0E08\u0E30\u0E16\u0E39\u0E01\u0E08\u0E48\u0E32\u0E22\u0E40\u0E21\u0E37\u0E48\u0E2D 2 \u0E40\u0E2B\u0E15\u0E38\u0E01\u0E32\u0E23\u0E13\u0E4C\u0E19\u0E35\u0E49\u0E40\u0E01\u0E34\u0E14\u0E02\u0E36\u0E49\u0E19:

  1. \u0E40\u0E21\u0E37\u0E48\u0E2D\u0E16\u0E39\u0E01\u0E2D\u0E49\u0E32\u0E07\u0E2D\u0E34\u0E07\u0E14\u0E49\u0E27\u0E22 transaction
  2. \u0E40\u0E21\u0E37\u0E48\u0E2D\u0E08\u0E1A\u0E23\u0E2D\u0E1A epoch

\u0E08\u0E33\u0E19\u0E27\u0E19 % \u0E02\u0E2D\u0E07 rent \u0E17\u0E35\u0E48\u0E16\u0E39\u0E01\u0E40\u0E01\u0E47\u0E1A\u0E08\u0E32\u0E01 accounts \u0E08\u0E30\u0E16\u0E39\u0E01\u0E17\u0E33\u0E25\u0E32\u0E22 \u0E43\u0E19\u0E02\u0E13\u0E30\u0E17\u0E35\u0E48\u0E08\u0E33\u0E19\u0E27\u0E19\u0E17\u0E35\u0E48\u0E40\u0E2B\u0E25\u0E37\u0E2D\u0E08\u0E30\u0E16\u0E39\u0E01\u0E41\u0E08\u0E01\u0E08\u0E48\u0E32\u0E22\u0E44\u0E1B\u0E43\u0E2B\u0E49 vote account \u0E40\u0E21\u0E37\u0E48\u0E2D\u0E08\u0E1A\u0E23\u0E2D\u0E1A\u0E02\u0E2D\u0E07\u0E17\u0E38\u0E01 slot

\u0E16\u0E49\u0E32 account \u0E44\u0E21\u0E48\u0E21\u0E35 lamports \u0E40\u0E1E\u0E35\u0E22\u0E07\u0E1E\u0E2D\u0E17\u0E35\u0E48\u0E08\u0E30\u0E08\u0E48\u0E32\u0E22 rent \u0E08\u0E30\u0E17\u0E33\u0E43\u0E2B\u0E49 account \u0E16\u0E39\u0E01\u0E08\u0E31\u0E14\u0E2A\u0E23\u0E23\u0E04\u0E37\u0E19 deallocated \u0E41\u0E25\u0E30\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E01\u0E47\u0E08\u0E30\u0E2B\u0E32\u0E22\u0E44\u0E1B

\u0E41\u0E25\u0E30\u0E40\u0E23\u0E32\u0E15\u0E49\u0E2D\u0E07\u0E08\u0E33\u0E44\u0E27\u0E49\u0E14\u0E49\u0E27\u0E22\u0E27\u0E48\u0E32 account \u0E43\u0E2B\u0E21\u0E48\u0E08\u0E30\u0E15\u0E49\u0E2D\u0E07\u0E08\u0E48\u0E32\u0E22\u0E04\u0E48\u0E32 rent exempt \u0E2A\u0E33\u0E23\u0E2D\u0E07\u0E44\u0E27\u0E49\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E22\u0E01\u0E40\u0E27\u0E49\u0E19\u0E04\u0E48\u0E32\u0E40\u0E0A\u0E48\u0E32\u0E40\u0E2A\u0E21\u0E2D

\u0E41\u0E2B\u0E25\u0E48\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19

',22),D={href:"https://solana.wiki/zh-cn/docs/account-model/#account-storage",target:"_blank",rel:"noopener noreferrer"},N=e("Solana Account Model"),V={href:"https://docs.solana.com/developing/programming-model/accounts",target:"_blank",rel:"noopener noreferrer"},F=e("Official Documentation"),M={href:"https://twitter.com/pencilflip/status/1452402100470644739",target:"_blank",rel:"noopener noreferrer"},z=e("pencilflip account thread"),E=t("h3",{id:"credit",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#credit","aria-hidden":"true"},"#"),e(" Credit")],-1),L=e("\u0E2B\u0E25\u0E31\u0E01\u0E01\u0E32\u0E23\u0E19\u0E35\u0E49\u0E40\u0E1B\u0E47\u0E19 credit \u0E02\u0E2D\u0E07 Pencilflip. "),R={href:"https://twitter.com/intent/user?screen_name=pencilflip",target:"_blank",rel:"noopener noreferrer"},C=e("\u0E15\u0E34\u0E14\u0E15\u0E32\u0E21\u0E40\u0E04\u0E49\u0E32\u0E44\u0E14\u0E49\u0E17\u0E32\u0E07 Twitter"),I=e(".");function K(O,T){const a=n("ExternalLinkIcon");return r(),s(l,null,[h,p,_,t("div",m,[f,t("ul",null,[g,b,x,k,A,t("li",null,[S,t("a",y,[v,o(a)])]),w,P])]),B,t("ul",null,[t("li",null,[t("a",D,[N,o(a)])]),t("li",null,[t("a",V,[F,o(a)])]),t("li",null,[t("a",M,[z,o(a)])])]),E,t("p",null,[L,t("a",R,[C,o(a)]),I])],64)}var q=c(u,[["render",K]]);export{q as default}; diff --git a/docs/.vuepress/dist/assets/accounts.html.60e994e8.js b/docs/.vuepress/dist/assets/accounts.html.dc18717f.js similarity index 99% rename from docs/.vuepress/dist/assets/accounts.html.60e994e8.js rename to docs/.vuepress/dist/assets/accounts.html.dc18717f.js index ef1d9815c..a0f9e25b0 100644 --- a/docs/.vuepress/dist/assets/accounts.html.60e994e8.js +++ b/docs/.vuepress/dist/assets/accounts.html.dc18717f.js @@ -1,4 +1,4 @@ -import{_ as l,r as o,o as u,c as r,a,b as s,w as c,F as i,d as n,e as t}from"./app.cfdf84e7.js";const k={},b=a("h1",{id:"accounts-account-lar",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#accounts-account-lar","aria-hidden":"true"},"#"),n(" Accounts (Account\u2019lar)")],-1),m=a("h2",{id:"how-to-create-a-system-account-system-account-olusturma",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#how-to-create-a-system-account-system-account-olusturma","aria-hidden":"true"},"#"),n(" How to create a system account (System account olu\u015Fturma)")],-1),d={href:"https://docs.solana.com/developing/clients/javascript-reference#systemprogram",target:"_blank",rel:"noopener noreferrer"},g=n("Sistem Program\u0131n\u0131"),h=n("n sahip oldu\u011Fu bir account olu\u015Fturun. Solana \xE7al\u0131\u015Fma zaman\u0131, bir account'\u0131n sahibine, verilerine yazma veya lamp ba\u011Flant\u0131lar\u0131n\u0131 aktarma eri\u015Fimi verir. Bir account olu\u015Ftururken, bayt ("),f=a("code",null,"space",-1),y=n(") cinsinden sabit bir depolama alan\u0131 ve rent\u2019i kar\u015F\u0131lamak i\xE7in yeterli lamp pay\u0131 \xF6nceden tahsis etmeliyiz. "),_={href:"https://docs.solana.com/developing/programming-model/accounts#rent",target:"_blank",rel:"noopener noreferrer"},w=n("Rent"),v=n(", Solana'da account'lar\u0131 canl\u0131 tutmak i\xE7in yap\u0131lan bir maliyettir."),P=t(`
const createAccountParams = {
+import{_ as l,r as o,o as u,c as r,a,b as s,w as c,F as i,d as n,e as t}from"./app.2fbb9e96.js";const k={},b=a("h1",{id:"accounts-account-lar",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#accounts-account-lar","aria-hidden":"true"},"#"),n(" Accounts (Account\u2019lar)")],-1),m=a("h2",{id:"how-to-create-a-system-account-system-account-olusturma",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#how-to-create-a-system-account-system-account-olusturma","aria-hidden":"true"},"#"),n(" How to create a system account (System account olu\u015Fturma)")],-1),d={href:"https://docs.solana.com/developing/clients/javascript-reference#systemprogram",target:"_blank",rel:"noopener noreferrer"},g=n("Sistem Program\u0131n\u0131"),h=n("n sahip oldu\u011Fu bir account olu\u015Fturun. Solana \xE7al\u0131\u015Fma zaman\u0131, bir account'\u0131n sahibine, verilerine yazma veya lamp ba\u011Flant\u0131lar\u0131n\u0131 aktarma eri\u015Fimi verir. Bir account olu\u015Ftururken, bayt ("),f=a("code",null,"space",-1),y=n(") cinsinden sabit bir depolama alan\u0131 ve rent\u2019i kar\u015F\u0131lamak i\xE7in yeterli lamp pay\u0131 \xF6nceden tahsis etmeliyiz. "),_={href:"https://docs.solana.com/developing/programming-model/accounts#rent",target:"_blank",rel:"noopener noreferrer"},w=n("Rent"),v=n(", Solana'da account'lar\u0131 canl\u0131 tutmak i\xE7in yap\u0131lan bir maliyettir."),P=t(`
const createAccountParams = {
   fromPubkey: fromPubkey.publicKey,
   newAccountPubkey: newAccountPubkey.publicKey,
   lamports: rentExemptionAmount,
diff --git a/docs/.vuepress/dist/assets/accounts.html.28d1454a.js b/docs/.vuepress/dist/assets/accounts.html.dc8ca524.js
similarity index 98%
rename from docs/.vuepress/dist/assets/accounts.html.28d1454a.js
rename to docs/.vuepress/dist/assets/accounts.html.dc8ca524.js
index c8d9828fa..cdb8b9c2c 100644
--- a/docs/.vuepress/dist/assets/accounts.html.28d1454a.js
+++ b/docs/.vuepress/dist/assets/accounts.html.dc8ca524.js
@@ -1 +1 @@
-const e={key:"v-f7cfc3e4",path:"/th/references/accounts.html",title:"Accounts",lang:"th-TH",frontmatter:{title:"Accounts",head:[["meta",{name:"title",content:"\u0E04\u0E39\u0E48\u0E21\u0E37\u0E2D Solana | Account References"}],["meta",{name:"og:title",content:"\u0E04\u0E39\u0E48\u0E21\u0E37\u0E2D Solana | Account References"}],["meta",{name:"description",content:"\u0E40\u0E23\u0E35\u0E22\u0E19\u0E23\u0E39\u0E49\u0E40\u0E01\u0E35\u0E48\u0E22\u0E27\u0E01\u0E31\u0E1A accounts \u0E1A\u0E19 Solana \u0E41\u0E25\u0E30 \u0E27\u0E34\u0E18\u0E35\u0E43\u0E0A\u0E49\u0E43\u0E19 programs \u0E02\u0E2D\u0E07\u0E40\u0E23\u0E32."}],["meta",{name:"og:description",content:"\u0E40\u0E23\u0E35\u0E22\u0E19\u0E23\u0E39\u0E49\u0E40\u0E01\u0E35\u0E48\u0E22\u0E27\u0E01\u0E31\u0E1A accounts \u0E1A\u0E19 Solana \u0E41\u0E25\u0E30 \u0E27\u0E34\u0E18\u0E35\u0E43\u0E0A\u0E49\u0E43\u0E19 programs \u0E02\u0E2D\u0E07\u0E40\u0E23\u0E32."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07 system account",slug:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07-system-account",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E04\u0E33\u0E19\u0E27\u0E13 account cost",slug:"\u0E27\u0E34\u0E18\u0E35\u0E04\u0E4D\u0E32\u0E19\u0E27\u0E13-account-cost",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07 accounts \u0E14\u0E49\u0E27\u0E22 seeds",slug:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07-accounts-\u0E14\u0E49\u0E27\u0E22-seeds",children:[{level:3,title:"Generate",slug:"generate",children:[]},{level:3,title:"Create",slug:"create",children:[]},{level:3,title:"Transfer",slug:"transfer",children:[]}]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07 PDAs",slug:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07-pdas",children:[{level:3,title:"\u0E01\u0E32\u0E23\u0E2A\u0E23\u0E49\u0E32\u0E07 PDA",slug:"\u0E01\u0E32\u0E23\u0E2A\u0E23\u0E49\u0E32\u0E07-pda",children:[]},{level:3,title:"\u0E28\u0E23\u0E49\u0E32\u0E07 PDA",slug:"\u0E28\u0E23\u0E49\u0E32\u0E07-pda",children:[]}]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35 sign \u0E14\u0E49\u0E27\u0E22 PDA",slug:"\u0E27\u0E34\u0E18\u0E35-sign-\u0E14\u0E49\u0E27\u0E22-pda",children:[{level:3,title:"Program",slug:"program-1",children:[]},{level:3,title:"Client",slug:"client-1",children:[]}]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25 program accounts",slug:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25-program-accounts",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E1B\u0E34\u0E14 accounts",slug:"\u0E27\u0E34\u0E18\u0E35\u0E1B\u0E34\u0E14-accounts",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25 account balance",slug:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25-account-balance",children:[]}],git:{updatedTime:1660787553e3},filePathRelative:"th/references/accounts.md"};export{e as data};
+const e={key:"v-f7cfc3e4",path:"/th/references/accounts.html",title:"Accounts",lang:"th-TH",frontmatter:{title:"Accounts",head:[["meta",{name:"title",content:"\u0E04\u0E39\u0E48\u0E21\u0E37\u0E2D Solana | Account References"}],["meta",{name:"og:title",content:"\u0E04\u0E39\u0E48\u0E21\u0E37\u0E2D Solana | Account References"}],["meta",{name:"description",content:"\u0E40\u0E23\u0E35\u0E22\u0E19\u0E23\u0E39\u0E49\u0E40\u0E01\u0E35\u0E48\u0E22\u0E27\u0E01\u0E31\u0E1A accounts \u0E1A\u0E19 Solana \u0E41\u0E25\u0E30 \u0E27\u0E34\u0E18\u0E35\u0E43\u0E0A\u0E49\u0E43\u0E19 programs \u0E02\u0E2D\u0E07\u0E40\u0E23\u0E32."}],["meta",{name:"og:description",content:"\u0E40\u0E23\u0E35\u0E22\u0E19\u0E23\u0E39\u0E49\u0E40\u0E01\u0E35\u0E48\u0E22\u0E27\u0E01\u0E31\u0E1A accounts \u0E1A\u0E19 Solana \u0E41\u0E25\u0E30 \u0E27\u0E34\u0E18\u0E35\u0E43\u0E0A\u0E49\u0E43\u0E19 programs \u0E02\u0E2D\u0E07\u0E40\u0E23\u0E32."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07 system account",slug:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07-system-account",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E04\u0E33\u0E19\u0E27\u0E13 account cost",slug:"\u0E27\u0E34\u0E18\u0E35\u0E04\u0E4D\u0E32\u0E19\u0E27\u0E13-account-cost",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07 accounts \u0E14\u0E49\u0E27\u0E22 seeds",slug:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07-accounts-\u0E14\u0E49\u0E27\u0E22-seeds",children:[{level:3,title:"Generate",slug:"generate",children:[]},{level:3,title:"Create",slug:"create",children:[]},{level:3,title:"Transfer",slug:"transfer",children:[]}]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07 PDAs",slug:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07-pdas",children:[{level:3,title:"\u0E01\u0E32\u0E23\u0E2A\u0E23\u0E49\u0E32\u0E07 PDA",slug:"\u0E01\u0E32\u0E23\u0E2A\u0E23\u0E49\u0E32\u0E07-pda",children:[]},{level:3,title:"\u0E28\u0E23\u0E49\u0E32\u0E07 PDA",slug:"\u0E28\u0E23\u0E49\u0E32\u0E07-pda",children:[]}]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35 sign \u0E14\u0E49\u0E27\u0E22 PDA",slug:"\u0E27\u0E34\u0E18\u0E35-sign-\u0E14\u0E49\u0E27\u0E22-pda",children:[{level:3,title:"Program",slug:"program-1",children:[]},{level:3,title:"Client",slug:"client-1",children:[]}]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25 program accounts",slug:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25-program-accounts",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E1B\u0E34\u0E14 accounts",slug:"\u0E27\u0E34\u0E18\u0E35\u0E1B\u0E34\u0E14-accounts",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25 account balance",slug:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25-account-balance",children:[]}],git:{updatedTime:1676666728e3},filePathRelative:"th/references/accounts.md"};export{e as data};
diff --git a/docs/.vuepress/dist/assets/accounts.html.873d703f.js b/docs/.vuepress/dist/assets/accounts.html.e4e6faaf.js
similarity index 97%
rename from docs/.vuepress/dist/assets/accounts.html.873d703f.js
rename to docs/.vuepress/dist/assets/accounts.html.e4e6faaf.js
index 42d66296b..43b2bd391 100644
--- a/docs/.vuepress/dist/assets/accounts.html.873d703f.js
+++ b/docs/.vuepress/dist/assets/accounts.html.e4e6faaf.js
@@ -1 +1 @@
-const e={key:"v-6c467d65",path:"/references/accounts.html",title:"Accounts",lang:"en-US",frontmatter:{title:"Accounts",head:[["meta",{name:"title",content:"Solana Cookbook | Account References"}],["meta",{name:"og:title",content:"Solana Cookbook | Account References"}],["meta",{name:"description",content:"Learn more about accounts on Solana and how to use them in your programs."}],["meta",{name:"og:description",content:"Learn more about accounts on Solana and how to use them in your programs."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"How to create a system account",slug:"how-to-create-a-system-account",children:[]},{level:2,title:"How to calculate account cost",slug:"how-to-calculate-account-cost",children:[]},{level:2,title:"How to create accounts with seeds",slug:"how-to-create-accounts-with-seeds",children:[{level:3,title:"Generate",slug:"generate",children:[]},{level:3,title:"Create",slug:"create",children:[]},{level:3,title:"Transfer",slug:"transfer",children:[]}]},{level:2,title:"How to create PDAs",slug:"how-to-create-pdas",children:[{level:3,title:"Generate a PDA",slug:"generate-a-pda",children:[]},{level:3,title:"Create a PDA",slug:"create-a-pda",children:[]}]},{level:2,title:"How to sign with a PDA",slug:"how-to-sign-with-a-pda",children:[{level:3,title:"Program",slug:"program-1",children:[]},{level:3,title:"Client",slug:"client-1",children:[]}]},{level:2,title:"How to get program accounts",slug:"how-to-get-program-accounts",children:[]},{level:2,title:"How to close accounts",slug:"how-to-close-accounts",children:[]},{level:2,title:"How to get account balance",slug:"how-to-get-account-balance",children:[]}],git:{updatedTime:1645936605e3},filePathRelative:"references/accounts.md"};export{e as data};
+const e={key:"v-6c467d65",path:"/references/accounts.html",title:"Accounts",lang:"en-US",frontmatter:{title:"Accounts",head:[["meta",{name:"title",content:"Solana Cookbook | Account References"}],["meta",{name:"og:title",content:"Solana Cookbook | Account References"}],["meta",{name:"description",content:"Learn more about accounts on Solana and how to use them in your programs."}],["meta",{name:"og:description",content:"Learn more about accounts on Solana and how to use them in your programs."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"How to create a system account",slug:"how-to-create-a-system-account",children:[]},{level:2,title:"How to calculate account cost",slug:"how-to-calculate-account-cost",children:[]},{level:2,title:"How to create accounts with seeds",slug:"how-to-create-accounts-with-seeds",children:[{level:3,title:"Generate",slug:"generate",children:[]},{level:3,title:"Create",slug:"create",children:[]},{level:3,title:"Transfer",slug:"transfer",children:[]}]},{level:2,title:"How to create PDAs",slug:"how-to-create-pdas",children:[{level:3,title:"Generate a PDA",slug:"generate-a-pda",children:[]},{level:3,title:"Create a PDA",slug:"create-a-pda",children:[]}]},{level:2,title:"How to sign with a PDA",slug:"how-to-sign-with-a-pda",children:[{level:3,title:"Program",slug:"program-1",children:[]},{level:3,title:"Client",slug:"client-1",children:[]}]},{level:2,title:"How to get program accounts",slug:"how-to-get-program-accounts",children:[]},{level:2,title:"How to close accounts",slug:"how-to-close-accounts",children:[]},{level:2,title:"How to get account balance",slug:"how-to-get-account-balance",children:[]}],git:{updatedTime:1676666728e3},filePathRelative:"references/accounts.md"};export{e as data};
diff --git a/docs/.vuepress/dist/assets/app.2fbb9e96.js b/docs/.vuepress/dist/assets/app.2fbb9e96.js
new file mode 100644
index 000000000..fc910f8b3
--- /dev/null
+++ b/docs/.vuepress/dist/assets/app.2fbb9e96.js
@@ -0,0 +1,20 @@
+var Pu=Object.defineProperty,Su=Object.defineProperties;var Tu=Object.getOwnPropertyDescriptors;var $i=Object.getOwnPropertySymbols;var Ou=Object.prototype.hasOwnProperty,Au=Object.prototype.propertyIsEnumerable;var Gi=(e,t,n)=>t in e?Pu(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,xe=(e,t)=>{for(var n in t||(t={}))Ou.call(t,n)&&Gi(e,n,t[n]);if($i)for(var n of $i(t))Au.call(t,n)&&Gi(e,n,t[n]);return e},Lt=(e,t)=>Su(e,Tu(t));const sl={};function si(e,t){const n=Object.create(null),r=e.split(",");for(let l=0;l!!n[l.toLowerCase()]:l=>!!n[l]}const Lu="itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly",Du=si(Lu);function is(e){return!!e||e===""}function Yr(e){if(te(e)){const t={};for(let n=0;n{if(n){const r=n.split(Iu);r.length>1&&(t[r[0].trim()]=r[1].trim())}}),t}function wt(e){let t="";if(be(e))t=e;else if(te(e))for(let n=0;nbe(e)?e:e==null?"":te(e)||Oe(e)&&(e.toString===cs||!ae(e.toString))?JSON.stringify(e,as,2):String(e),as=(e,t)=>t&&t.__v_isRef?as(e,t.value):sn(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[r,l])=>(n[`${r} =>`]=l,n),{})}:os(t)?{[`Set(${t.size})`]:[...t.values()]}:Oe(t)&&!te(t)&&!us(t)?String(t):t,fe={},on=[],Xe=()=>{},Vu=()=>!1,Fu=/^on[^a-z]/,Xn=e=>Fu.test(e),ci=e=>e.startsWith("onUpdate:"),Ce=Object.assign,ui=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},ju=Object.prototype.hasOwnProperty,de=(e,t)=>ju.call(e,t),te=Array.isArray,sn=e=>Qr(e)==="[object Map]",os=e=>Qr(e)==="[object Set]",ae=e=>typeof e=="function",be=e=>typeof e=="string",di=e=>typeof e=="symbol",Oe=e=>e!==null&&typeof e=="object",ss=e=>Oe(e)&&ae(e.then)&&ae(e.catch),cs=Object.prototype.toString,Qr=e=>cs.call(e),Nu=e=>Qr(e).slice(8,-1),us=e=>Qr(e)==="[object Object]",hi=e=>be(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,In=si(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Zr=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},Mu=/-(\w)/g,ot=Zr(e=>e.replace(Mu,(t,n)=>n?n.toUpperCase():"")),zu=/\B([A-Z])/g,Wt=Zr(e=>e.replace(zu,"-$1").toLowerCase()),Xr=Zr(e=>e.charAt(0).toUpperCase()+e.slice(1)),cl=Zr(e=>e?`on${Xr(e)}`:""),Bn=(e,t)=>!Object.is(e,t),ul=(e,t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})},ds=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let Ji;const Hu=()=>Ji||(Ji=typeof globalThis!="undefined"?globalThis:typeof self!="undefined"?self:typeof window!="undefined"?window:typeof global!="undefined"?global:{});let Ge;class Bu{constructor(t=!1){this.active=!0,this.effects=[],this.cleanups=[],!t&&Ge&&(this.parent=Ge,this.index=(Ge.scopes||(Ge.scopes=[])).push(this)-1)}run(t){if(this.active)try{return Ge=this,t()}finally{Ge=this.parent}}on(){Ge=this}off(){Ge=this.parent}stop(t){if(this.active){let n,r;for(n=0,r=this.effects.length;n{const t=new Set(e);return t.w=0,t.n=0,t},hs=e=>(e.w&Tt)>0,gs=e=>(e.n&Tt)>0,Wu=({deps:e})=>{if(e.length)for(let t=0;t{const{deps:t}=e;if(t.length){let n=0;for(let r=0;r{(u==="length"||u>=r)&&o.push(s)});else switch(n!==void 0&&o.push(a.get(n)),t){case"add":te(e)?hi(n)&&o.push(a.get("length")):(o.push(a.get(Ht)),sn(e)&&o.push(a.get(Rl)));break;case"delete":te(e)||(o.push(a.get(Ht)),sn(e)&&o.push(a.get(Rl)));break;case"set":sn(e)&&o.push(a.get(Ht));break}if(o.length===1)o[0]&&Il(o[0]);else{const s=[];for(const u of o)u&&s.push(...u);Il(gi(s))}}function Il(e,t){for(const n of te(e)?e:[...e])(n!==lt||n.allowRecurse)&&(n.scheduler?n.scheduler():n.run())}const Gu=si("__proto__,__v_isRef,__isVue"),ps=new Set(Object.getOwnPropertyNames(Symbol).map(e=>Symbol[e]).filter(di)),Ju=vi(),Yu=vi(!1,!0),Qu=vi(!0),Qi=Zu();function Zu(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...n){const r=ge(this);for(let i=0,a=this.length;i{e[t]=function(...n){pn();const r=ge(this)[t].apply(this,n);return fn(),r}}),e}function vi(e=!1,t=!1){return function(r,l,i){if(l==="__v_isReactive")return!e;if(l==="__v_isReadonly")return e;if(l==="__v_isShallow")return t;if(l==="__v_raw"&&i===(e?t?md:ys:t?ks:bs).get(r))return r;const a=te(r);if(!e&&a&&de(Qi,l))return Reflect.get(Qi,l,i);const o=Reflect.get(r,l,i);return(di(l)?ps.has(l):Gu(l))||(e||qe(r,"get",l),t)?o:De(o)?!a||!hi(l)?o.value:o:Oe(o)?e?_i(o):_n(o):o}}const Xu=fs(),ed=fs(!0);function fs(e=!1){return function(n,r,l,i){let a=n[r];if(Un(a)&&De(a)&&!De(l))return!1;if(!e&&!Un(l)&&(Es(l)||(l=ge(l),a=ge(a)),!te(n)&&De(a)&&!De(l)))return a.value=l,!0;const o=te(n)&&hi(r)?Number(r)e,el=e=>Reflect.getPrototypeOf(e);function ar(e,t,n=!1,r=!1){e=e.__v_raw;const l=ge(e),i=ge(t);t!==i&&!n&&qe(l,"get",t),!n&&qe(l,"get",i);const{has:a}=el(l),o=r?pi:n?ki:Kn;if(a.call(l,t))return o(e.get(t));if(a.call(l,i))return o(e.get(i));e!==l&&e.get(t)}function or(e,t=!1){const n=this.__v_raw,r=ge(n),l=ge(e);return e!==l&&!t&&qe(r,"has",e),!t&&qe(r,"has",l),e===l?n.has(e):n.has(e)||n.has(l)}function sr(e,t=!1){return e=e.__v_raw,!t&&qe(ge(e),"iterate",Ht),Reflect.get(e,"size",e)}function Zi(e){e=ge(e);const t=ge(this);return el(t).has.call(t,e)||(t.add(e),gt(t,"add",e,e)),this}function Xi(e,t){t=ge(t);const n=ge(this),{has:r,get:l}=el(n);let i=r.call(n,e);i||(e=ge(e),i=r.call(n,e));const a=l.call(n,e);return n.set(e,t),i?Bn(t,a)&>(n,"set",e,t):gt(n,"add",e,t),this}function ea(e){const t=ge(this),{has:n,get:r}=el(t);let l=n.call(t,e);l||(e=ge(e),l=n.call(t,e)),r&&r.call(t,e);const i=t.delete(e);return l&>(t,"delete",e,void 0),i}function ta(){const e=ge(this),t=e.size!==0,n=e.clear();return t&>(e,"clear",void 0,void 0),n}function cr(e,t){return function(r,l){const i=this,a=i.__v_raw,o=ge(a),s=t?pi:e?ki:Kn;return!e&&qe(o,"iterate",Ht),a.forEach((u,d)=>r.call(l,s(u),s(d),i))}}function ur(e,t,n){return function(...r){const l=this.__v_raw,i=ge(l),a=sn(i),o=e==="entries"||e===Symbol.iterator&&a,s=e==="keys"&&a,u=l[e](...r),d=n?pi:t?ki:Kn;return!t&&qe(i,"iterate",s?Rl:Ht),{next(){const{value:m,done:h}=u.next();return h?{value:m,done:h}:{value:o?[d(m[0]),d(m[1])]:d(m),done:h}},[Symbol.iterator](){return this}}}}function vt(e){return function(...t){return e==="delete"?!1:this}}function ad(){const e={get(i){return ar(this,i)},get size(){return sr(this)},has:or,add:Zi,set:Xi,delete:ea,clear:ta,forEach:cr(!1,!1)},t={get(i){return ar(this,i,!1,!0)},get size(){return sr(this)},has:or,add:Zi,set:Xi,delete:ea,clear:ta,forEach:cr(!1,!0)},n={get(i){return ar(this,i,!0)},get size(){return sr(this,!0)},has(i){return or.call(this,i,!0)},add:vt("add"),set:vt("set"),delete:vt("delete"),clear:vt("clear"),forEach:cr(!0,!1)},r={get(i){return ar(this,i,!0,!0)},get size(){return sr(this,!0)},has(i){return or.call(this,i,!0)},add:vt("add"),set:vt("set"),delete:vt("delete"),clear:vt("clear"),forEach:cr(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(i=>{e[i]=ur(i,!1,!1),n[i]=ur(i,!0,!1),t[i]=ur(i,!1,!0),r[i]=ur(i,!0,!0)}),[e,n,t,r]}const[od,sd,cd,ud]=ad();function fi(e,t){const n=t?e?ud:cd:e?sd:od;return(r,l,i)=>l==="__v_isReactive"?!e:l==="__v_isReadonly"?e:l==="__v_raw"?r:Reflect.get(de(n,l)&&l in r?n:r,l,i)}const dd={get:fi(!1,!1)},hd={get:fi(!1,!0)},gd={get:fi(!0,!1)},bs=new WeakMap,ks=new WeakMap,ys=new WeakMap,md=new WeakMap;function vd(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function pd(e){return e.__v_skip||!Object.isExtensible(e)?0:vd(Nu(e))}function _n(e){return Un(e)?e:bi(e,!1,_s,dd,bs)}function fd(e){return bi(e,!1,id,hd,ks)}function _i(e){return bi(e,!0,ld,gd,ys)}function bi(e,t,n,r,l){if(!Oe(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const i=l.get(e);if(i)return i;const a=pd(e);if(a===0)return e;const o=new Proxy(e,a===2?r:n);return l.set(e,o),o}function cn(e){return Un(e)?cn(e.__v_raw):!!(e&&e.__v_isReactive)}function Un(e){return!!(e&&e.__v_isReadonly)}function Es(e){return!!(e&&e.__v_isShallow)}function ws(e){return cn(e)||Un(e)}function ge(e){const t=e&&e.__v_raw;return t?ge(t):e}function Ps(e){return Or(e,"__v_skip",!0),e}const Kn=e=>Oe(e)?_n(e):e,ki=e=>Oe(e)?_i(e):e;function Ss(e){Pt&<&&(e=ge(e),vs(e.dep||(e.dep=gi())))}function Ts(e,t){e=ge(e),e.dep&&Il(e.dep)}function De(e){return!!(e&&e.__v_isRef===!0)}function Ee(e){return As(e,!1)}function Os(e){return As(e,!0)}function As(e,t){return De(e)?e:new _d(e,t)}class _d{constructor(t,n){this.__v_isShallow=n,this.dep=void 0,this.__v_isRef=!0,this._rawValue=n?t:ge(t),this._value=n?t:Kn(t)}get value(){return Ss(this),this._value}set value(t){t=this.__v_isShallow?t:ge(t),Bn(t,this._rawValue)&&(this._rawValue=t,this._value=this.__v_isShallow?t:Kn(t),Ts(this))}}function Bt(e){return De(e)?e.value:e}const bd={get:(e,t,n)=>Bt(Reflect.get(e,t,n)),set:(e,t,n,r)=>{const l=e[t];return De(l)&&!De(n)?(l.value=n,!0):Reflect.set(e,t,n,r)}};function Ls(e){return cn(e)?e:new Proxy(e,bd)}function kd(e){const t=te(e)?new Array(e.length):{};for(const n in e)t[n]=Ed(e,n);return t}class yd{constructor(t,n,r){this._object=t,this._key=n,this._defaultValue=r,this.__v_isRef=!0}get value(){const t=this._object[this._key];return t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}}function Ed(e,t,n){const r=e[t];return De(r)?r:new yd(e,t,n)}class wd{constructor(t,n,r,l){this._setter=n,this.dep=void 0,this.__v_isRef=!0,this._dirty=!0,this.effect=new mi(t,()=>{this._dirty||(this._dirty=!0,Ts(this))}),this.effect.computed=this,this.effect.active=this._cacheable=!l,this.__v_isReadonly=r}get value(){const t=ge(this);return Ss(t),(t._dirty||!t._cacheable)&&(t._dirty=!1,t._value=t.effect.run()),t._value}set value(t){this._setter(t)}}function Pd(e,t,n=!1){let r,l;const i=ae(e);return i?(r=e,l=Xe):(r=e.get,l=e.set),new wd(r,l,i||!l,n)}Promise.resolve();function St(e,t,n,r){let l;try{l=r?e(...r):e()}catch(i){er(i,t,n)}return l}function Je(e,t,n,r){if(ae(e)){const i=St(e,t,n,r);return i&&ss(i)&&i.catch(a=>{er(a,t,n)}),i}const l=[];for(let i=0;i>>1;qn(Ue[r])ct&&Ue.splice(t,1)}function Is(e,t,n,r){te(e)?n.push(...e):(!t||!t.includes(e,e.allowRecurse?r+1:r))&&n.push(e),Rs()}function Ad(e){Is(e,Ln,Cn,Xt)}function Ld(e){Is(e,bt,xn,en)}function Pi(e,t=null){if(Cn.length){for(xl=t,Ln=[...new Set(Cn)],Cn.length=0,Xt=0;Xtqn(n)-qn(r)),en=0;ene.id==null?1/0:e.id;function Cs(e){Cl=!1,Ar=!0,Pi(e),Ue.sort((n,r)=>qn(n)-qn(r));const t=Xe;try{for(ct=0;ctb.trim()):m&&(l=n.map(ds))}let o,s=r[o=cl(t)]||r[o=cl(ot(t))];!s&&i&&(s=r[o=cl(Wt(t))]),s&&Je(s,e,6,l);const u=r[o+"Once"];if(u){if(!e.emitted)e.emitted={};else if(e.emitted[o])return;e.emitted[o]=!0,Je(u,e,6,l)}}function xs(e,t,n=!1){const r=t.emitsCache,l=r.get(e);if(l!==void 0)return l;const i=e.emits;let a={},o=!1;if(!ae(e)){const s=u=>{const d=xs(u,t,!0);d&&(o=!0,Ce(a,d))};!n&&t.mixins.length&&t.mixins.forEach(s),e.extends&&s(e.extends),e.mixins&&e.mixins.forEach(s)}return!i&&!o?(r.set(e,null),null):(te(i)?i.forEach(s=>a[s]=null):Ce(a,i),r.set(e,a),a)}function Si(e,t){return!e||!Xn(t)?!1:(t=t.slice(2).replace(/Once$/,""),de(e,t[0].toLowerCase()+t.slice(1))||de(e,Wt(t))||de(e,t))}let Ke=null,Vs=null;function Dr(e){const t=Ke;return Ke=e,Vs=e&&e.type.__scopeId||null,t}function Rd(e,t=Ke,n){if(!t||e._n)return e;const r=(...l)=>{r._d&&ha(-1);const i=Dr(t),a=e(...l);return Dr(i),r._d&&ha(1),a};return r._n=!0,r._c=!0,r._d=!0,r}function dl(e){const{type:t,vnode:n,proxy:r,withProxy:l,props:i,propsOptions:[a],slots:o,attrs:s,emit:u,render:d,renderCache:m,data:h,setupState:b,ctx:g,inheritAttrs:_}=e;let f,k;const w=Dr(e);try{if(n.shapeFlag&4){const T=l||r;f=Ze(d.call(T,T,m,i,b,h,g)),k=s}else{const T=t;f=Ze(T.length>1?T(i,{attrs:s,slots:o,emit:u}):T(i,null)),k=t.props?s:Id(s)}}catch(T){Fn.length=0,er(T,e,1),f=Se(Ye)}let P=f;if(k&&_!==!1){const T=Object.keys(k),{shapeFlag:D}=P;T.length&&D&7&&(a&&T.some(ci)&&(k=Cd(k,a)),P=un(P,k))}return n.dirs&&(P.dirs=P.dirs?P.dirs.concat(n.dirs):n.dirs),n.transition&&(P.transition=n.transition),f=P,Dr(w),f}const Id=e=>{let t;for(const n in e)(n==="class"||n==="style"||Xn(n))&&((t||(t={}))[n]=e[n]);return t},Cd=(e,t)=>{const n={};for(const r in e)(!ci(r)||!(r.slice(9)in t))&&(n[r]=e[r]);return n};function xd(e,t,n){const{props:r,children:l,component:i}=e,{props:a,children:o,patchFlag:s}=t,u=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&s>=0){if(s&1024)return!0;if(s&16)return r?na(r,a,u):!!a;if(s&8){const d=t.dynamicProps;for(let m=0;me.__isSuspense;function Fs(e,t){t&&t.pendingBranch?te(e)?t.effects.push(...e):t.effects.push(e):Ld(e)}function Ut(e,t){if(Le){let n=Le.provides;const r=Le.parent&&Le.parent.provides;r===n&&(n=Le.provides=Object.create(r)),n[e]=t}}function Re(e,t,n=!1){const r=Le||Ke;if(r){const l=r.parent==null?r.vnode.appContext&&r.vnode.appContext.provides:r.parent.provides;if(l&&e in l)return l[e];if(arguments.length>1)return n&&ae(t)?t.call(r.proxy):t}}const ra={};function et(e,t,n){return js(e,t,n)}function js(e,t,{immediate:n,deep:r,flush:l,onTrack:i,onTrigger:a}=fe){const o=Le;let s,u=!1,d=!1;if(De(e)?(s=()=>e.value,u=Es(e)):cn(e)?(s=()=>e,r=!0):te(e)?(d=!0,u=e.some(cn),s=()=>e.map(k=>{if(De(k))return k.value;if(cn(k))return zt(k);if(ae(k))return St(k,o,2)})):ae(e)?t?s=()=>St(e,o,2):s=()=>{if(!(o&&o.isUnmounted))return m&&m(),Je(e,o,3,[h])}:s=Xe,t&&r){const k=s;s=()=>zt(k())}let m,h=k=>{m=f.onStop=()=>{St(k,o,4)}};if(hn)return h=Xe,t?n&&Je(t,o,3,[s(),d?[]:void 0,h]):s(),Xe;let b=d?[]:ra;const g=()=>{if(!!f.active)if(t){const k=f.run();(r||u||(d?k.some((w,P)=>Bn(w,b[P])):Bn(k,b)))&&(m&&m(),Je(t,o,3,[k,b===ra?void 0:b,h]),b=k)}else f.run()};g.allowRecurse=!!t;let _;l==="sync"?_=g:l==="post"?_=()=>Ne(g,o&&o.suspense):_=()=>{!o||o.isMounted?Ad(g):g()};const f=new mi(s,_);return t?n?g():b=f.run():l==="post"?Ne(f.run.bind(f),o&&o.suspense):f.run(),()=>{f.stop(),o&&o.scope&&ui(o.scope.effects,f)}}function jd(e,t,n){const r=this.proxy,l=be(e)?e.includes(".")?Ns(r,e):()=>r[e]:e.bind(r,r);let i;ae(t)?i=t:(i=t.handler,n=t);const a=Le;dn(this);const o=js(l,i.bind(r),n);return a?dn(a):qt(),o}function Ns(e,t){const n=t.split(".");return()=>{let r=e;for(let l=0;l{zt(n,t)});else if(us(e))for(const n in e)zt(e[n],t);return e}function Nd(){const e={isMounted:!1,isLeaving:!1,isUnmounting:!1,leavingVNodes:new Map};return tt(()=>{e.isMounted=!0}),nl(()=>{e.isUnmounting=!0}),e}const We=[Function,Array],Md={name:"BaseTransition",props:{mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:We,onEnter:We,onAfterEnter:We,onEnterCancelled:We,onBeforeLeave:We,onLeave:We,onAfterLeave:We,onLeaveCancelled:We,onBeforeAppear:We,onAppear:We,onAfterAppear:We,onAppearCancelled:We},setup(e,{slots:t}){const n=rc(),r=Nd();let l;return()=>{const i=t.default&&Hs(t.default(),!0);if(!i||!i.length)return;const a=ge(e),{mode:o}=a,s=i[0];if(r.isLeaving)return hl(s);const u=la(s);if(!u)return hl(s);const d=Vl(u,a,r,n);Fl(u,d);const m=n.subTree,h=m&&la(m);let b=!1;const{getTransitionKey:g}=u.type;if(g){const _=g();l===void 0?l=_:_!==l&&(l=_,b=!0)}if(h&&h.type!==Ye&&(!Nt(u,h)||b)){const _=Vl(h,a,r,n);if(Fl(h,_),o==="out-in")return r.isLeaving=!0,_.afterLeave=()=>{r.isLeaving=!1,n.update()},hl(s);o==="in-out"&&u.type!==Ye&&(_.delayLeave=(f,k,w)=>{const P=zs(r,h);P[String(h.key)]=h,f._leaveCb=()=>{k(),f._leaveCb=void 0,delete d.delayedLeave},d.delayedLeave=w})}return s}}},Ms=Md;function zs(e,t){const{leavingVNodes:n}=e;let r=n.get(t.type);return r||(r=Object.create(null),n.set(t.type,r)),r}function Vl(e,t,n,r){const{appear:l,mode:i,persisted:a=!1,onBeforeEnter:o,onEnter:s,onAfterEnter:u,onEnterCancelled:d,onBeforeLeave:m,onLeave:h,onAfterLeave:b,onLeaveCancelled:g,onBeforeAppear:_,onAppear:f,onAfterAppear:k,onAppearCancelled:w}=t,P=String(e.key),T=zs(n,e),D=(L,O)=>{L&&Je(L,r,9,O)},j={mode:i,persisted:a,beforeEnter(L){let O=o;if(!n.isMounted)if(l)O=_||o;else return;L._leaveCb&&L._leaveCb(!0);const K=T[P];K&&Nt(e,K)&&K.el._leaveCb&&K.el._leaveCb(),D(O,[L])},enter(L){let O=s,K=u,B=d;if(!n.isMounted)if(l)O=f||s,K=k||u,B=w||d;else return;let W=!1;const A=L._enterCb=H=>{W||(W=!0,H?D(B,[L]):D(K,[L]),j.delayedLeave&&j.delayedLeave(),L._enterCb=void 0)};O?(O(L,A),O.length<=1&&A()):A()},leave(L,O){const K=String(e.key);if(L._enterCb&&L._enterCb(!0),n.isUnmounting)return O();D(m,[L]);let B=!1;const W=L._leaveCb=A=>{B||(B=!0,O(),A?D(g,[L]):D(b,[L]),L._leaveCb=void 0,T[K]===e&&delete T[K])};T[K]=e,h?(h(L,W),h.length<=1&&W()):W()},clone(L){return Vl(L,t,n,r)}};return j}function hl(e){if(tr(e))return e=un(e),e.children=null,e}function la(e){return tr(e)?e.children?e.children[0]:void 0:e}function Fl(e,t){e.shapeFlag&6&&e.component?Fl(e.component.subTree,t):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Hs(e,t=!1){let n=[],r=0;for(let l=0;l1)for(let l=0;l!!e.type.__asyncLoader;function v(e){ae(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:r,delay:l=200,timeout:i,suspensible:a=!0,onError:o}=e;let s=null,u,d=0;const m=()=>(d++,s=null,h()),h=()=>{let b;return s||(b=s=t().catch(g=>{if(g=g instanceof Error?g:new Error(String(g)),o)return new Promise((_,f)=>{o(g,()=>_(m()),()=>f(g),d+1)});throw g}).then(g=>b!==s&&s?s:(g&&(g.__esModule||g[Symbol.toStringTag]==="Module")&&(g=g.default),u=g,g)))};return ze({name:"AsyncComponentWrapper",__asyncLoader:h,get __asyncResolved(){return u},setup(){const b=Le;if(u)return()=>gl(u,b);const g=w=>{s=null,er(w,b,13,!r)};if(a&&b.suspense||hn)return h().then(w=>()=>gl(w,b)).catch(w=>(g(w),()=>r?Se(r,{error:w}):null));const _=Ee(!1),f=Ee(),k=Ee(!!l);return l&&setTimeout(()=>{k.value=!1},l),i!=null&&setTimeout(()=>{if(!_.value&&!f.value){const w=new Error(`Async component timed out after ${i}ms.`);g(w),f.value=w}},i),h().then(()=>{_.value=!0,b.parent&&tr(b.parent.vnode)&&wi(b.parent.update)}).catch(w=>{g(w),f.value=w}),()=>{if(_.value&&u)return gl(u,b);if(f.value&&r)return Se(r,{error:f.value});if(n&&!k.value)return Se(n)}}})}function gl(e,{vnode:{ref:t,props:n,children:r}}){const l=Se(e,n,r);return l.ref=t,l}const tr=e=>e.type.__isKeepAlive;function zd(e,t){Bs(e,"a",t)}function Hd(e,t){Bs(e,"da",t)}function Bs(e,t,n=Le){const r=e.__wdc||(e.__wdc=()=>{let l=n;for(;l;){if(l.isDeactivated)return;l=l.parent}return e()});if(tl(t,r,n),n){let l=n.parent;for(;l&&l.parent;)tr(l.parent.vnode)&&Bd(r,t,n,l),l=l.parent}}function Bd(e,t,n,r){const l=tl(t,e,r,!0);Ti(()=>{ui(r[t],l)},n)}function tl(e,t,n=Le,r=!1){if(n){const l=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...a)=>{if(n.isUnmounted)return;pn(),dn(n);const o=Je(t,n,e,a);return qt(),fn(),o});return r?l.unshift(i):l.push(i),i}}const mt=e=>(t,n=Le)=>(!hn||e==="sp")&&tl(e,t,n),Ud=mt("bm"),tt=mt("m"),Kd=mt("bu"),qd=mt("u"),nl=mt("bum"),Ti=mt("um"),Wd=mt("sp"),$d=mt("rtg"),Gd=mt("rtc");function Jd(e,t=Le){tl("ec",e,t)}let jl=!0;function Yd(e){const t=Ks(e),n=e.proxy,r=e.ctx;jl=!1,t.beforeCreate&&ia(t.beforeCreate,e,"bc");const{data:l,computed:i,methods:a,watch:o,provide:s,inject:u,created:d,beforeMount:m,mounted:h,beforeUpdate:b,updated:g,activated:_,deactivated:f,beforeDestroy:k,beforeUnmount:w,destroyed:P,unmounted:T,render:D,renderTracked:j,renderTriggered:L,errorCaptured:O,serverPrefetch:K,expose:B,inheritAttrs:W,components:A,directives:H,filters:Q}=t;if(u&&Qd(u,r,null,e.appContext.config.unwrapInjectedRef),a)for(const re in a){const le=a[re];ae(le)&&(r[re]=le.bind(n))}if(l){const re=l.call(n,n);Oe(re)&&(e.data=_n(re))}if(jl=!0,i)for(const re in i){const le=i[re],we=ae(le)?le.bind(n,n):ae(le.get)?le.get.bind(n,n):Xe,Te=!ae(le)&&ae(le.set)?le.set.bind(n):Xe,Ae=_e({get:we,set:Te});Object.defineProperty(r,re,{enumerable:!0,configurable:!0,get:()=>Ae.value,set:Pe=>Ae.value=Pe})}if(o)for(const re in o)Us(o[re],r,n,re);if(s){const re=ae(s)?s.call(n):s;Reflect.ownKeys(re).forEach(le=>{Ut(le,re[le])})}d&&ia(d,e,"c");function J(re,le){te(le)?le.forEach(we=>re(we.bind(n))):le&&re(le.bind(n))}if(J(Ud,m),J(tt,h),J(Kd,b),J(qd,g),J(zd,_),J(Hd,f),J(Jd,O),J(Gd,j),J($d,L),J(nl,w),J(Ti,T),J(Wd,K),te(B))if(B.length){const re=e.exposed||(e.exposed={});B.forEach(le=>{Object.defineProperty(re,le,{get:()=>n[le],set:we=>n[le]=we})})}else e.exposed||(e.exposed={});D&&e.render===Xe&&(e.render=D),W!=null&&(e.inheritAttrs=W),A&&(e.components=A),H&&(e.directives=H)}function Qd(e,t,n=Xe,r=!1){te(e)&&(e=Nl(e));for(const l in e){const i=e[l];let a;Oe(i)?"default"in i?a=Re(i.from||l,i.default,!0):a=Re(i.from||l):a=Re(i),De(a)&&r?Object.defineProperty(t,l,{enumerable:!0,configurable:!0,get:()=>a.value,set:o=>a.value=o}):t[l]=a}}function ia(e,t,n){Je(te(e)?e.map(r=>r.bind(t.proxy)):e.bind(t.proxy),t,n)}function Us(e,t,n,r){const l=r.includes(".")?Ns(n,r):()=>n[r];if(be(e)){const i=t[e];ae(i)&&et(l,i)}else if(ae(e))et(l,e.bind(n));else if(Oe(e))if(te(e))e.forEach(i=>Us(i,t,n,r));else{const i=ae(e.handler)?e.handler.bind(n):t[e.handler];ae(i)&&et(l,i,e)}}function Ks(e){const t=e.type,{mixins:n,extends:r}=t,{mixins:l,optionsCache:i,config:{optionMergeStrategies:a}}=e.appContext,o=i.get(t);let s;return o?s=o:!l.length&&!n&&!r?s=t:(s={},l.length&&l.forEach(u=>Ir(s,u,a,!0)),Ir(s,t,a)),i.set(t,s),s}function Ir(e,t,n,r=!1){const{mixins:l,extends:i}=t;i&&Ir(e,i,n,!0),l&&l.forEach(a=>Ir(e,a,n,!0));for(const a in t)if(!(r&&a==="expose")){const o=Zd[a]||n&&n[a];e[a]=o?o(e[a],t[a]):t[a]}return e}const Zd={data:aa,props:Vt,emits:Vt,methods:Vt,computed:Vt,beforeCreate:Fe,created:Fe,beforeMount:Fe,mounted:Fe,beforeUpdate:Fe,updated:Fe,beforeDestroy:Fe,beforeUnmount:Fe,destroyed:Fe,unmounted:Fe,activated:Fe,deactivated:Fe,errorCaptured:Fe,serverPrefetch:Fe,components:Vt,directives:Vt,watch:eh,provide:aa,inject:Xd};function aa(e,t){return t?e?function(){return Ce(ae(e)?e.call(this,this):e,ae(t)?t.call(this,this):t)}:t:e}function Xd(e,t){return Vt(Nl(e),Nl(t))}function Nl(e){if(te(e)){const t={};for(let n=0;n0)&&!(a&16)){if(a&8){const d=e.vnode.dynamicProps;for(let m=0;m{s=!0;const[h,b]=Ws(m,t,!0);Ce(a,h),b&&o.push(...b)};!n&&t.mixins.length&&t.mixins.forEach(d),e.extends&&d(e.extends),e.mixins&&e.mixins.forEach(d)}if(!i&&!s)return r.set(e,on),on;if(te(i))for(let d=0;d-1,b[1]=_<0||g<_,(g>-1||de(b,"default"))&&o.push(m)}}}const u=[a,o];return r.set(e,u),u}function oa(e){return e[0]!=="$"}function sa(e){const t=e&&e.toString().match(/^\s*function (\w+)/);return t?t[1]:e===null?"null":""}function ca(e,t){return sa(e)===sa(t)}function ua(e,t){return te(t)?t.findIndex(n=>ca(n,e)):ae(t)&&ca(t,e)?0:-1}const $s=e=>e[0]==="_"||e==="$stable",Oi=e=>te(e)?e.map(Ze):[Ze(e)],rh=(e,t,n)=>{const r=Rd((...l)=>Oi(t(...l)),n);return r._c=!1,r},Gs=(e,t,n)=>{const r=e._ctx;for(const l in e){if($s(l))continue;const i=e[l];if(ae(i))t[l]=rh(l,i,r);else if(i!=null){const a=Oi(i);t[l]=()=>a}}},Js=(e,t)=>{const n=Oi(t);e.slots.default=()=>n},lh=(e,t)=>{if(e.vnode.shapeFlag&32){const n=t._;n?(e.slots=ge(t),Or(t,"_",n)):Gs(t,e.slots={})}else e.slots={},t&&Js(e,t);Or(e.slots,rl,1)},ih=(e,t,n)=>{const{vnode:r,slots:l}=e;let i=!0,a=fe;if(r.shapeFlag&32){const o=t._;o?n&&o===1?i=!1:(Ce(l,t),!n&&o===1&&delete l._):(i=!t.$stable,Gs(t,l)),a=t}else t&&(Js(e,t),a={default:1});if(i)for(const o in l)!$s(o)&&!(o in a)&&delete l[o]};function z_(e,t){const n=Ke;if(n===null)return e;const r=n.proxy,l=e.dirs||(e.dirs=[]);for(let i=0;iCr(h,t&&(te(t)?t[b]:t),n,r,l));return}if(Rr(r)&&!l)return;const i=r.shapeFlag&4?Ri(r.component)||r.component.proxy:r.el,a=l?null:i,{i:o,r:s}=e,u=t&&t.r,d=o.refs===fe?o.refs={}:o.refs,m=o.setupState;if(u!=null&&u!==s&&(be(u)?(d[u]=null,de(m,u)&&(m[u]=null)):De(u)&&(u.value=null)),ae(s))St(s,o,12,[a,d]);else{const h=be(s),b=De(s);if(h||b){const g=()=>{if(e.f){const _=h?d[s]:s.value;l?te(_)&&ui(_,i):te(_)?_.includes(i)||_.push(i):h?d[s]=[i]:(s.value=[i],e.k&&(d[e.k]=s.value))}else h?(d[s]=a,de(m,s)&&(m[s]=a)):De(s)&&(s.value=a,e.k&&(d[e.k]=a))};a?(g.id=-1,Ne(g,n)):g()}}}let pt=!1;const dr=e=>/svg/.test(e.namespaceURI)&&e.tagName!=="foreignObject",ml=e=>e.nodeType===8;function sh(e){const{mt:t,p:n,o:{patchProp:r,nextSibling:l,parentNode:i,remove:a,insert:o,createComment:s}}=e,u=(f,k)=>{if(!k.hasChildNodes()){n(null,f,k),Lr();return}pt=!1,d(k.firstChild,f,null,null,null),Lr(),pt&&console.error("Hydration completed but contains mismatches.")},d=(f,k,w,P,T,D=!1)=>{const j=ml(f)&&f.data==="[",L=()=>g(f,k,w,P,T,j),{type:O,ref:K,shapeFlag:B}=k,W=f.nodeType;k.el=f;let A=null;switch(O){case Wn:W!==3?A=L():(f.data!==k.children&&(pt=!0,f.data=k.children),A=l(f));break;case Ye:W!==8||j?A=L():A=l(f);break;case Vn:if(W!==1)A=L();else{A=f;const H=!k.children.length;for(let Q=0;Q{D=D||!!k.dynamicChildren;const{type:j,props:L,patchFlag:O,shapeFlag:K,dirs:B}=k,W=j==="input"&&B||j==="option";if(W||O!==-1){if(B&&rt(k,null,w,"created"),L)if(W||!D||O&48)for(const H in L)(W&&H.endsWith("value")||Xn(H)&&!In(H))&&r(f,H,null,L[H],!1,void 0,w);else L.onClick&&r(f,"onClick",null,L.onClick,!1,void 0,w);let A;if((A=L&&L.onVnodeBeforeMount)&&$e(A,w,k),B&&rt(k,null,w,"beforeMount"),((A=L&&L.onVnodeMounted)||B)&&Fs(()=>{A&&$e(A,w,k),B&&rt(k,null,w,"mounted")},P),K&16&&!(L&&(L.innerHTML||L.textContent))){let H=h(f.firstChild,k,f,w,P,T,D);for(;H;){pt=!0;const Q=H;H=H.nextSibling,a(Q)}}else K&8&&f.textContent!==k.children&&(pt=!0,f.textContent=k.children)}return f.nextSibling},h=(f,k,w,P,T,D,j)=>{j=j||!!k.dynamicChildren;const L=k.children,O=L.length;for(let K=0;K{const{slotScopeIds:j}=k;j&&(T=T?T.concat(j):j);const L=i(f),O=h(l(f),k,L,w,P,T,D);return O&&ml(O)&&O.data==="]"?l(k.anchor=O):(pt=!0,o(k.anchor=s("]"),L,O),O)},g=(f,k,w,P,T,D)=>{if(pt=!0,k.el=null,D){const O=_(f);for(;;){const K=l(f);if(K&&K!==O)a(K);else break}}const j=l(f),L=i(f);return a(f),n(null,k,L,j,w,P,dr(L),T),j},_=f=>{let k=0;for(;f;)if(f=l(f),f&&ml(f)&&(f.data==="["&&k++,f.data==="]")){if(k===0)return l(f);k--}return f};return[u,d]}const Ne=Fs;function ch(e){return uh(e,sh)}function uh(e,t){const n=Hu();n.__VUE__=!0;const{insert:r,remove:l,patchProp:i,createElement:a,createText:o,createComment:s,setText:u,setElementText:d,parentNode:m,nextSibling:h,setScopeId:b=Xe,cloneNode:g,insertStaticContent:_}=e,f=(p,y,S,R=null,C=null,x=null,M=!1,V=null,z=!!y.dynamicChildren)=>{if(p===y)return;p&&!Nt(p,y)&&(R=q(p),Ie(p,C,x,!0),p=null),y.patchFlag===-2&&(z=!1,y.dynamicChildren=null);const{type:F,ref:Y,shapeFlag:G}=y;switch(F){case Wn:k(p,y,S,R);break;case Ye:w(p,y,S,R);break;case Vn:p==null&&P(y,S,R,M);break;case Me:H(p,y,S,R,C,x,M,V,z);break;default:G&1?j(p,y,S,R,C,x,M,V,z):G&6?Q(p,y,S,R,C,x,M,V,z):(G&64||G&128)&&F.process(p,y,S,R,C,x,M,V,z,me)}Y!=null&&C&&Cr(Y,p&&p.ref,x,y||p,!y)},k=(p,y,S,R)=>{if(p==null)r(y.el=o(y.children),S,R);else{const C=y.el=p.el;y.children!==p.children&&u(C,y.children)}},w=(p,y,S,R)=>{p==null?r(y.el=s(y.children||""),S,R):y.el=p.el},P=(p,y,S,R)=>{[p.el,p.anchor]=_(p.children,y,S,R,p.el,p.anchor)},T=({el:p,anchor:y},S,R)=>{let C;for(;p&&p!==y;)C=h(p),r(p,S,R),p=C;r(y,S,R)},D=({el:p,anchor:y})=>{let S;for(;p&&p!==y;)S=h(p),l(p),p=S;l(y)},j=(p,y,S,R,C,x,M,V,z)=>{M=M||y.type==="svg",p==null?L(y,S,R,C,x,M,V,z):B(p,y,C,x,M,V,z)},L=(p,y,S,R,C,x,M,V)=>{let z,F;const{type:Y,props:G,shapeFlag:$,transition:X,patchFlag:oe,dirs:ye}=p;if(p.el&&g!==void 0&&oe===-1)z=p.el=g(p.el);else{if(z=p.el=a(p.type,x,G&&G.is,G),$&8?d(z,p.children):$&16&&K(p.children,z,null,R,C,x&&Y!=="foreignObject",M,V),ye&&rt(p,null,R,"created"),G){for(const ke in G)ke!=="value"&&!In(ke)&&i(z,ke,null,G[ke],x,p.children,R,C,N);"value"in G&&i(z,"value",null,G.value),(F=G.onVnodeBeforeMount)&&$e(F,R,p)}O(z,p,p.scopeId,M,R)}ye&&rt(p,null,R,"beforeMount");const ve=(!C||C&&!C.pendingBranch)&&X&&!X.persisted;ve&&X.beforeEnter(z),r(z,y,S),((F=G&&G.onVnodeMounted)||ve||ye)&&Ne(()=>{F&&$e(F,R,p),ve&&X.enter(z),ye&&rt(p,null,R,"mounted")},C)},O=(p,y,S,R,C)=>{if(S&&b(p,S),R)for(let x=0;x{for(let F=z;F{const V=y.el=p.el;let{patchFlag:z,dynamicChildren:F,dirs:Y}=y;z|=p.patchFlag&16;const G=p.props||fe,$=y.props||fe;let X;S&&Dt(S,!1),(X=$.onVnodeBeforeUpdate)&&$e(X,S,y,p),Y&&rt(y,p,S,"beforeUpdate"),S&&Dt(S,!0);const oe=C&&y.type!=="foreignObject";if(F?W(p.dynamicChildren,F,V,S,R,oe,x):M||we(p,y,V,null,S,R,oe,x,!1),z>0){if(z&16)A(V,y,G,$,S,R,C);else if(z&2&&G.class!==$.class&&i(V,"class",null,$.class,C),z&4&&i(V,"style",G.style,$.style,C),z&8){const ye=y.dynamicProps;for(let ve=0;ve{X&&$e(X,S,y,p),Y&&rt(y,p,S,"updated")},R)},W=(p,y,S,R,C,x,M)=>{for(let V=0;V{if(S!==R){for(const V in R){if(In(V))continue;const z=R[V],F=S[V];z!==F&&V!=="value"&&i(p,V,F,z,M,y.children,C,x,N)}if(S!==fe)for(const V in S)!In(V)&&!(V in R)&&i(p,V,S[V],null,M,y.children,C,x,N);"value"in R&&i(p,"value",S.value,R.value)}},H=(p,y,S,R,C,x,M,V,z)=>{const F=y.el=p?p.el:o(""),Y=y.anchor=p?p.anchor:o("");let{patchFlag:G,dynamicChildren:$,slotScopeIds:X}=y;X&&(V=V?V.concat(X):X),p==null?(r(F,S,R),r(Y,S,R),K(y.children,S,Y,C,x,M,V,z)):G>0&&G&64&&$&&p.dynamicChildren?(W(p.dynamicChildren,$,S,C,x,M,V),(y.key!=null||C&&y===C.subTree)&&Qs(p,y,!0)):we(p,y,S,Y,C,x,M,V,z)},Q=(p,y,S,R,C,x,M,V,z)=>{y.slotScopeIds=V,p==null?y.shapeFlag&512?C.ctx.activate(y,S,R,M,z):se(y,S,R,C,x,M,z):J(p,y,z)},se=(p,y,S,R,C,x,M)=>{const V=p.component=wh(p,R,C);if(tr(p)&&(V.ctx.renderer=me),Ph(V),V.asyncDep){if(C&&C.registerDep(V,re),!p.el){const z=V.subTree=Se(Ye);w(null,z,y,S)}return}re(V,p,y,S,C,x,M)},J=(p,y,S)=>{const R=y.component=p.component;if(xd(p,y,S))if(R.asyncDep&&!R.asyncResolved){le(R,y,S);return}else R.next=y,Od(R.update),R.update();else y.component=p.component,y.el=p.el,R.vnode=y},re=(p,y,S,R,C,x,M)=>{const V=()=>{if(p.isMounted){let{next:Y,bu:G,u:$,parent:X,vnode:oe}=p,ye=Y,ve;Dt(p,!1),Y?(Y.el=oe.el,le(p,Y,M)):Y=oe,G&&ul(G),(ve=Y.props&&Y.props.onVnodeBeforeUpdate)&&$e(ve,X,Y,oe),Dt(p,!0);const ke=dl(p),Qe=p.subTree;p.subTree=ke,f(Qe,ke,m(Qe.el),q(Qe),p,C,x),Y.el=ke.el,ye===null&&Vd(p,ke.el),$&&Ne($,C),(ve=Y.props&&Y.props.onVnodeUpdated)&&Ne(()=>$e(ve,X,Y,oe),C)}else{let Y;const{el:G,props:$}=y,{bm:X,m:oe,parent:ye}=p,ve=Rr(y);if(Dt(p,!1),X&&ul(X),!ve&&(Y=$&&$.onVnodeBeforeMount)&&$e(Y,ye,y),Dt(p,!0),G&&ne){const ke=()=>{p.subTree=dl(p),ne(G,p.subTree,p,C,null)};ve?y.type.__asyncLoader().then(()=>!p.isUnmounted&&ke()):ke()}else{const ke=p.subTree=dl(p);f(null,ke,S,R,p,C,x),y.el=ke.el}if(oe&&Ne(oe,C),!ve&&(Y=$&&$.onVnodeMounted)){const ke=y;Ne(()=>$e(Y,ye,ke),C)}y.shapeFlag&256&&p.a&&Ne(p.a,C),p.isMounted=!0,y=S=R=null}},z=p.effect=new mi(V,()=>wi(p.update),p.scope),F=p.update=z.run.bind(z);F.id=p.uid,Dt(p,!0),F()},le=(p,y,S)=>{y.component=p;const R=p.vnode.props;p.vnode=y,p.next=null,nh(p,y.props,R,S),ih(p,y.children,S),pn(),Pi(void 0,p.update),fn()},we=(p,y,S,R,C,x,M,V,z=!1)=>{const F=p&&p.children,Y=p?p.shapeFlag:0,G=y.children,{patchFlag:$,shapeFlag:X}=y;if($>0){if($&128){Ae(F,G,S,R,C,x,M,V,z);return}else if($&256){Te(F,G,S,R,C,x,M,V,z);return}}X&8?(Y&16&&N(F,C,x),G!==F&&d(S,G)):Y&16?X&16?Ae(F,G,S,R,C,x,M,V,z):N(F,C,x,!0):(Y&8&&d(S,""),X&16&&K(G,S,R,C,x,M,V,z))},Te=(p,y,S,R,C,x,M,V,z)=>{p=p||on,y=y||on;const F=p.length,Y=y.length,G=Math.min(F,Y);let $;for($=0;$Y?N(p,C,x,!0,!1,G):K(y,S,R,C,x,M,V,z,G)},Ae=(p,y,S,R,C,x,M,V,z)=>{let F=0;const Y=y.length;let G=p.length-1,$=Y-1;for(;F<=G&&F<=$;){const X=p[F],oe=y[F]=z?kt(y[F]):Ze(y[F]);if(Nt(X,oe))f(X,oe,S,null,C,x,M,V,z);else break;F++}for(;F<=G&&F<=$;){const X=p[G],oe=y[$]=z?kt(y[$]):Ze(y[$]);if(Nt(X,oe))f(X,oe,S,null,C,x,M,V,z);else break;G--,$--}if(F>G){if(F<=$){const X=$+1,oe=X$)for(;F<=G;)Ie(p[F],C,x,!0),F++;else{const X=F,oe=F,ye=new Map;for(F=oe;F<=$;F++){const Be=y[F]=z?kt(y[F]):Ze(y[F]);Be.key!=null&&ye.set(Be.key,F)}let ve,ke=0;const Qe=$-oe+1;let $t=!1,Ki=0;const kn=new Array(Qe);for(F=0;F=Qe){Ie(Be,C,x,!0);continue}let nt;if(Be.key!=null)nt=ye.get(Be.key);else for(ve=oe;ve<=$;ve++)if(kn[ve-oe]===0&&Nt(Be,y[ve])){nt=ve;break}nt===void 0?Ie(Be,C,x,!0):(kn[nt-oe]=F+1,nt>=Ki?Ki=nt:$t=!0,f(Be,y[nt],S,null,C,x,M,V,z),ke++)}const qi=$t?dh(kn):on;for(ve=qi.length-1,F=Qe-1;F>=0;F--){const Be=oe+F,nt=y[Be],Wi=Be+1{const{el:x,type:M,transition:V,children:z,shapeFlag:F}=p;if(F&6){Pe(p.component.subTree,y,S,R);return}if(F&128){p.suspense.move(y,S,R);return}if(F&64){M.move(p,y,S,me);return}if(M===Me){r(x,y,S);for(let G=0;GV.enter(x),C);else{const{leave:G,delayLeave:$,afterLeave:X}=V,oe=()=>r(x,y,S),ye=()=>{G(x,()=>{oe(),X&&X()})};$?$(x,oe,ye):ye()}else r(x,y,S)},Ie=(p,y,S,R=!1,C=!1)=>{const{type:x,props:M,ref:V,children:z,dynamicChildren:F,shapeFlag:Y,patchFlag:G,dirs:$}=p;if(V!=null&&Cr(V,null,S,p,!0),Y&256){y.ctx.deactivate(p);return}const X=Y&1&&$,oe=!Rr(p);let ye;if(oe&&(ye=M&&M.onVnodeBeforeUnmount)&&$e(ye,y,p),Y&6)U(p.component,S,R);else{if(Y&128){p.suspense.unmount(S,R);return}X&&rt(p,null,y,"beforeUnmount"),Y&64?p.type.remove(p,y,S,C,me,R):F&&(x!==Me||G>0&&G&64)?N(F,y,S,!1,!0):(x===Me&&G&384||!C&&Y&16)&&N(z,y,S),R&&He(p)}(oe&&(ye=M&&M.onVnodeUnmounted)||X)&&Ne(()=>{ye&&$e(ye,y,p),X&&rt(p,null,y,"unmounted")},S)},He=p=>{const{type:y,el:S,anchor:R,transition:C}=p;if(y===Me){I(S,R);return}if(y===Vn){D(p);return}const x=()=>{l(S),C&&!C.persisted&&C.afterLeave&&C.afterLeave()};if(p.shapeFlag&1&&C&&!C.persisted){const{leave:M,delayLeave:V}=C,z=()=>M(S,x);V?V(p.el,x,z):z()}else x()},I=(p,y)=>{let S;for(;p!==y;)S=h(p),l(p),p=S;l(y)},U=(p,y,S)=>{const{bum:R,scope:C,update:x,subTree:M,um:V}=p;R&&ul(R),C.stop(),x&&(x.active=!1,Ie(M,p,y,S)),V&&Ne(V,y),Ne(()=>{p.isUnmounted=!0},y),y&&y.pendingBranch&&!y.isUnmounted&&p.asyncDep&&!p.asyncResolved&&p.suspenseId===y.pendingId&&(y.deps--,y.deps===0&&y.resolve())},N=(p,y,S,R=!1,C=!1,x=0)=>{for(let M=x;Mp.shapeFlag&6?q(p.component.subTree):p.shapeFlag&128?p.suspense.next():h(p.anchor||p.el),ue=(p,y,S)=>{p==null?y._vnode&&Ie(y._vnode,null,null,!0):f(y._vnode||null,p,y,null,null,null,S),Lr(),y._vnode=p},me={p:f,um:Ie,m:Pe,r:He,mt:se,mc:K,pc:we,pbc:W,n:q,o:e};let ie,ne;return t&&([ie,ne]=t(me)),{render:ue,hydrate:ie,createApp:oh(ue,ie)}}function Dt({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function Qs(e,t,n=!1){const r=e.children,l=t.children;if(te(r)&&te(l))for(let i=0;i>1,e[n[o]]0&&(t[r]=n[i-1]),n[i]=r)}}for(i=n.length,a=n[i-1];i-- >0;)n[i]=a,a=t[a];return n}const hh=e=>e.__isTeleport,Zs="components";function gh(e,t){return vh(Zs,e,!0,t)||e}const mh=Symbol();function vh(e,t,n=!0,r=!1){const l=Ke||Le;if(l){const i=l.type;if(e===Zs){const o=Ah(i);if(o&&(o===t||o===ot(t)||o===Xr(ot(t))))return i}const a=da(l[e]||i[e],t)||da(l.appContext[e],t);return!a&&r?i:a}}function da(e,t){return e&&(e[t]||e[ot(t)]||e[Xr(ot(t))])}const Me=Symbol(void 0),Wn=Symbol(void 0),Ye=Symbol(void 0),Vn=Symbol(void 0),Fn=[];let Kt=null;function nr(e=!1){Fn.push(Kt=e?null:[])}function ph(){Fn.pop(),Kt=Fn[Fn.length-1]||null}let xr=1;function ha(e){xr+=e}function Xs(e){return e.dynamicChildren=xr>0?Kt||on:null,ph(),xr>0&&Kt&&Kt.push(e),e}function Ai(e,t,n,r,l,i){return Xs(Fr(e,t,n,r,l,i,!0))}function ec(e,t,n,r,l){return Xs(Se(e,t,n,r,l,!0))}function Vr(e){return e?e.__v_isVNode===!0:!1}function Nt(e,t){return e.type===t.type&&e.key===t.key}const rl="__vInternal",tc=({key:e})=>e!=null?e:null,kr=({ref:e,ref_key:t,ref_for:n})=>e!=null?be(e)||De(e)||ae(e)?{i:Ke,r:e,k:t,f:!!n}:e:null;function Fr(e,t=null,n=null,r=0,l=null,i=e===Me?0:1,a=!1,o=!1){const s={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&tc(t),ref:t&&kr(t),scopeId:Vs,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:r,dynamicProps:l,dynamicChildren:null,appContext:null};return o?(Di(s,n),i&128&&e.normalize(s)):n&&(s.shapeFlag|=be(n)?8:16),xr>0&&!a&&Kt&&(s.patchFlag>0||i&6)&&s.patchFlag!==32&&Kt.push(s),s}const Se=fh;function fh(e,t=null,n=null,r=0,l=null,i=!1){if((!e||e===mh)&&(e=Ye),Vr(e)){const o=un(e,t,!0);return n&&Di(o,n),o}if(Lh(e)&&(e=e.__vccOpts),t){t=_h(t);let{class:o,style:s}=t;o&&!be(o)&&(t.class=wt(o)),Oe(s)&&(ws(s)&&!te(s)&&(s=Ce({},s)),t.style=Yr(s))}const a=be(e)?1:Fd(e)?128:hh(e)?64:Oe(e)?4:ae(e)?2:0;return Fr(e,t,n,r,l,a,i,!0)}function _h(e){return e?ws(e)||rl in e?Ce({},e):e:null}function un(e,t,n=!1){const{props:r,ref:l,patchFlag:i,children:a}=e,o=t?bh(r||{},t):r;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:o,key:o&&tc(o),ref:t&&t.ref?n&&l?te(l)?l.concat(kr(t)):[l,kr(t)]:kr(t):l,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:a,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Me?i===-1?16:i|16:i,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&un(e.ssContent),ssFallback:e.ssFallback&&un(e.ssFallback),el:e.el,anchor:e.anchor}}function Li(e=" ",t=0){return Se(Wn,null,e,t)}function H_(e,t){const n=Se(Vn,null,e);return n.staticCount=t,n}function B_(e="",t=!1){return t?(nr(),ec(Ye,null,e)):Se(Ye,null,e)}function Ze(e){return e==null||typeof e=="boolean"?Se(Ye):te(e)?Se(Me,null,e.slice()):typeof e=="object"?kt(e):Se(Wn,null,String(e))}function kt(e){return e.el===null||e.memo?e:un(e)}function Di(e,t){let n=0;const{shapeFlag:r}=e;if(t==null)t=null;else if(te(t))n=16;else if(typeof t=="object")if(r&65){const l=t.default;l&&(l._c&&(l._d=!1),Di(e,l()),l._c&&(l._d=!0));return}else{n=32;const l=t._;!l&&!(rl in t)?t._ctx=Ke:l===3&&Ke&&(Ke.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else ae(t)?(t={default:t,_ctx:Ke},n=32):(t=String(t),r&64?(n=16,t=[Li(t)]):n=8);e.children=t,e.shapeFlag|=n}function bh(...e){const t={};for(let n=0;nt(a,o,void 0,i&&i[o]));else{const a=Object.keys(e);l=new Array(a.length);for(let o=0,s=a.length;oVr(t)?!(t.type===Ye||t.type===Me&&!nc(t.children)):!0)?e:null}const zl=e=>e?lc(e)?Ri(e)||e.proxy:zl(e.parent):null,Nr=Ce(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>zl(e.parent),$root:e=>zl(e.root),$emit:e=>e.emit,$options:e=>Ks(e),$forceUpdate:e=>()=>wi(e.update),$nextTick:e=>Ei.bind(e.proxy),$watch:e=>jd.bind(e)}),kh={get({_:e},t){const{ctx:n,setupState:r,data:l,props:i,accessCache:a,type:o,appContext:s}=e;let u;if(t[0]!=="$"){const b=a[t];if(b!==void 0)switch(b){case 1:return r[t];case 2:return l[t];case 4:return n[t];case 3:return i[t]}else{if(r!==fe&&de(r,t))return a[t]=1,r[t];if(l!==fe&&de(l,t))return a[t]=2,l[t];if((u=e.propsOptions[0])&&de(u,t))return a[t]=3,i[t];if(n!==fe&&de(n,t))return a[t]=4,n[t];jl&&(a[t]=0)}}const d=Nr[t];let m,h;if(d)return t==="$attrs"&&qe(e,"get",t),d(e);if((m=o.__cssModules)&&(m=m[t]))return m;if(n!==fe&&de(n,t))return a[t]=4,n[t];if(h=s.config.globalProperties,de(h,t))return h[t]},set({_:e},t,n){const{data:r,setupState:l,ctx:i}=e;return l!==fe&&de(l,t)?(l[t]=n,!0):r!==fe&&de(r,t)?(r[t]=n,!0):de(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:r,appContext:l,propsOptions:i}},a){let o;return!!n[a]||e!==fe&&de(e,a)||t!==fe&&de(t,a)||(o=i[0])&&de(o,a)||de(r,a)||de(Nr,a)||de(l.config.globalProperties,a)},defineProperty(e,t,n){return n.get!=null?this.set(e,t,n.get(),null):n.value!=null&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}},yh=Ys();let Eh=0;function wh(e,t,n){const r=e.type,l=(t?t.appContext:e.appContext)||yh,i={uid:Eh++,vnode:e,type:r,parent:t,appContext:l,root:null,next:null,subTree:null,effect:null,update:null,scope:new Bu(!0),render:null,proxy:null,exposed:null,exposeProxy:null,withProxy:null,provides:t?t.provides:Object.create(l.provides),accessCache:null,renderCache:[],components:null,directives:null,propsOptions:Ws(r,l),emitsOptions:xs(r,l),emit:null,emitted:null,propsDefaults:fe,inheritAttrs:r.inheritAttrs,ctx:fe,data:fe,props:fe,attrs:fe,slots:fe,refs:fe,setupState:fe,setupContext:null,suspense:n,suspenseId:n?n.pendingId:0,asyncDep:null,asyncResolved:!1,isMounted:!1,isUnmounted:!1,isDeactivated:!1,bc:null,c:null,bm:null,m:null,bu:null,u:null,um:null,bum:null,da:null,a:null,rtg:null,rtc:null,ec:null,sp:null};return i.ctx={_:i},i.root=t?t.root:i,i.emit=Dd.bind(null,i),e.ce&&e.ce(i),i}let Le=null;const rc=()=>Le||Ke,dn=e=>{Le=e,e.scope.on()},qt=()=>{Le&&Le.scope.off(),Le=null};function lc(e){return e.vnode.shapeFlag&4}let hn=!1;function Ph(e,t=!1){hn=t;const{props:n,children:r}=e.vnode,l=lc(e);th(e,n,l,t),lh(e,r);const i=l?Sh(e,t):void 0;return hn=!1,i}function Sh(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=Ps(new Proxy(e.ctx,kh));const{setup:r}=n;if(r){const l=e.setupContext=r.length>1?Oh(e):null;dn(e),pn();const i=St(r,e,0,[e.props,l]);if(fn(),qt(),ss(i)){if(i.then(qt,qt),t)return i.then(a=>{ga(e,a,t)}).catch(a=>{er(a,e,0)});e.asyncDep=i}else ga(e,i,t)}else ic(e,t)}function ga(e,t,n){ae(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:Oe(t)&&(e.setupState=Ls(t)),ic(e,n)}let ma;function ic(e,t,n){const r=e.type;if(!e.render){if(!t&&ma&&!r.render){const l=r.template;if(l){const{isCustomElement:i,compilerOptions:a}=e.appContext.config,{delimiters:o,compilerOptions:s}=r,u=Ce(Ce({isCustomElement:i,delimiters:o},a),s);r.render=ma(l,u)}}e.render=r.render||Xe}dn(e),pn(),Yd(e),fn(),qt()}function Th(e){return new Proxy(e.attrs,{get(t,n){return qe(e,"get","$attrs"),t[n]}})}function Oh(e){const t=r=>{e.exposed=r||{}};let n;return{get attrs(){return n||(n=Th(e))},slots:e.slots,emit:e.emit,expose:t}}function Ri(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(Ls(Ps(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Nr)return Nr[n](e)}}))}function Ah(e){return ae(e)&&e.displayName||e.name}function Lh(e){return ae(e)&&"__vccOpts"in e}const _e=(e,t)=>Pd(e,t,hn);function ee(e,t,n){const r=arguments.length;return r===2?Oe(t)&&!te(t)?Vr(t)?Se(e,null,[t]):Se(e,t):Se(e,null,t):(r>3?n=Array.prototype.slice.call(arguments,2):r===3&&Vr(n)&&(n=[n]),Se(e,t,n))}const Dh="3.2.31",Rh="http://www.w3.org/2000/svg",Mt=typeof document!="undefined"?document:null,va=Mt&&Mt.createElement("template"),Ih={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,r)=>{const l=t?Mt.createElementNS(Rh,e):Mt.createElement(e,n?{is:n}:void 0);return e==="select"&&r&&r.multiple!=null&&l.setAttribute("multiple",r.multiple),l},createText:e=>Mt.createTextNode(e),createComment:e=>Mt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Mt.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},cloneNode(e){const t=e.cloneNode(!0);return"_value"in e&&(t._value=e._value),t},insertStaticContent(e,t,n,r,l,i){const a=n?n.previousSibling:t.lastChild;if(l&&(l===i||l.nextSibling))for(;t.insertBefore(l.cloneNode(!0),n),!(l===i||!(l=l.nextSibling)););else{va.innerHTML=r?`${e}`:e;const o=va.content;if(r){const s=o.firstChild;for(;s.firstChild;)o.appendChild(s.firstChild);o.removeChild(s)}t.insertBefore(o,n)}return[a?a.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}};function Ch(e,t,n){const r=e._vtc;r&&(t=(t?[t,...r]:[...r]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}function xh(e,t,n){const r=e.style,l=be(n);if(n&&!l){for(const i in n)Hl(r,i,n[i]);if(t&&!be(t))for(const i in t)n[i]==null&&Hl(r,i,"")}else{const i=r.display;l?t!==n&&(r.cssText=n):t&&e.removeAttribute("style"),"_vod"in e&&(r.display=i)}}const pa=/\s*!important$/;function Hl(e,t,n){if(te(n))n.forEach(r=>Hl(e,t,r));else if(t.startsWith("--"))e.setProperty(t,n);else{const r=Vh(e,t);pa.test(n)?e.setProperty(Wt(r),n.replace(pa,""),"important"):e[r]=n}}const fa=["Webkit","Moz","ms"],vl={};function Vh(e,t){const n=vl[t];if(n)return n;let r=ot(t);if(r!=="filter"&&r in e)return vl[t]=r;r=Xr(r);for(let l=0;ldocument.createEvent("Event").timeStamp&&(Mr=()=>performance.now());const e=navigator.userAgent.match(/firefox\/(\d+)/i);ac=!!(e&&Number(e[1])<=53)}let Bl=0;const Nh=Promise.resolve(),Mh=()=>{Bl=0},zh=()=>Bl||(Nh.then(Mh),Bl=Mr());function Hh(e,t,n,r){e.addEventListener(t,n,r)}function Bh(e,t,n,r){e.removeEventListener(t,n,r)}function Uh(e,t,n,r,l=null){const i=e._vei||(e._vei={}),a=i[t];if(r&&a)a.value=r;else{const[o,s]=Kh(t);if(r){const u=i[t]=qh(r,l);Hh(e,o,u,s)}else a&&(Bh(e,o,a,s),i[t]=void 0)}}const ba=/(?:Once|Passive|Capture)$/;function Kh(e){let t;if(ba.test(e)){t={};let n;for(;n=e.match(ba);)e=e.slice(0,e.length-n[0].length),t[n[0].toLowerCase()]=!0}return[Wt(e.slice(2)),t]}function qh(e,t){const n=r=>{const l=r.timeStamp||Mr();(ac||l>=n.attached-1)&&Je(Wh(r,n.value),t,5,[r])};return n.value=e,n.attached=zh(),n}function Wh(e,t){if(te(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(r=>l=>!l._stopped&&r&&r(l))}else return t}const ka=/^on[a-z]/,$h=(e,t,n,r,l=!1,i,a,o,s)=>{t==="class"?Ch(e,r,l):t==="style"?xh(e,n,r):Xn(t)?ci(t)||Uh(e,t,n,r,a):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Gh(e,t,r,l))?jh(e,t,r,i,a,o,s):(t==="true-value"?e._trueValue=r:t==="false-value"&&(e._falseValue=r),Fh(e,t,r,l))};function Gh(e,t,n,r){return r?!!(t==="innerHTML"||t==="textContent"||t in e&&ka.test(t)&&ae(n)):t==="spellcheck"||t==="draggable"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA"||ka.test(t)&&be(n)?!1:t in e}const ft="transition",yn="animation",Ii=(e,{slots:t})=>ee(Ms,Jh(e),t);Ii.displayName="Transition";const oc={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String};Ii.props=Ce({},Ms.props,oc);const Rt=(e,t=[])=>{te(e)?e.forEach(n=>n(...t)):e&&e(...t)},ya=e=>e?te(e)?e.some(t=>t.length>1):e.length>1:!1;function Jh(e){const t={};for(const A in e)A in oc||(t[A]=e[A]);if(e.css===!1)return t;const{name:n="v",type:r,duration:l,enterFromClass:i=`${n}-enter-from`,enterActiveClass:a=`${n}-enter-active`,enterToClass:o=`${n}-enter-to`,appearFromClass:s=i,appearActiveClass:u=a,appearToClass:d=o,leaveFromClass:m=`${n}-leave-from`,leaveActiveClass:h=`${n}-leave-active`,leaveToClass:b=`${n}-leave-to`}=e,g=Yh(l),_=g&&g[0],f=g&&g[1],{onBeforeEnter:k,onEnter:w,onEnterCancelled:P,onLeave:T,onLeaveCancelled:D,onBeforeAppear:j=k,onAppear:L=w,onAppearCancelled:O=P}=t,K=(A,H,Q)=>{Gt(A,H?d:o),Gt(A,H?u:a),Q&&Q()},B=(A,H)=>{Gt(A,b),Gt(A,h),H&&H()},W=A=>(H,Q)=>{const se=A?L:w,J=()=>K(H,A,Q);Rt(se,[H,J]),Ea(()=>{Gt(H,A?s:i),_t(H,A?d:o),ya(se)||wa(H,r,_,J)})};return Ce(t,{onBeforeEnter(A){Rt(k,[A]),_t(A,i),_t(A,a)},onBeforeAppear(A){Rt(j,[A]),_t(A,s),_t(A,u)},onEnter:W(!1),onAppear:W(!0),onLeave(A,H){const Q=()=>B(A,H);_t(A,m),Xh(),_t(A,h),Ea(()=>{Gt(A,m),_t(A,b),ya(T)||wa(A,r,f,Q)}),Rt(T,[A,Q])},onEnterCancelled(A){K(A,!1),Rt(P,[A])},onAppearCancelled(A){K(A,!0),Rt(O,[A])},onLeaveCancelled(A){B(A),Rt(D,[A])}})}function Yh(e){if(e==null)return null;if(Oe(e))return[pl(e.enter),pl(e.leave)];{const t=pl(e);return[t,t]}}function pl(e){return ds(e)}function _t(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e._vtc||(e._vtc=new Set)).add(t)}function Gt(e,t){t.split(/\s+/).forEach(r=>r&&e.classList.remove(r));const{_vtc:n}=e;n&&(n.delete(t),n.size||(e._vtc=void 0))}function Ea(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let Qh=0;function wa(e,t,n,r){const l=e._endId=++Qh,i=()=>{l===e._endId&&r()};if(n)return setTimeout(i,n);const{type:a,timeout:o,propCount:s}=Zh(e,t);if(!a)return r();const u=a+"end";let d=0;const m=()=>{e.removeEventListener(u,h),i()},h=b=>{b.target===e&&++d>=s&&m()};setTimeout(()=>{d(n[g]||"").split(", "),l=r(ft+"Delay"),i=r(ft+"Duration"),a=Pa(l,i),o=r(yn+"Delay"),s=r(yn+"Duration"),u=Pa(o,s);let d=null,m=0,h=0;t===ft?a>0&&(d=ft,m=a,h=i.length):t===yn?u>0&&(d=yn,m=u,h=s.length):(m=Math.max(a,u),d=m>0?a>u?ft:yn:null,h=d?d===ft?i.length:s.length:0);const b=d===ft&&/\b(transform|all)(,|$)/.test(n[ft+"Property"]);return{type:d,timeout:m,propCount:h,hasTransform:b}}function Pa(e,t){for(;e.lengthSa(n)+Sa(e[r])))}function Sa(e){return Number(e.slice(0,-1).replace(",","."))*1e3}function Xh(){return document.body.offsetHeight}const eg={esc:"escape",space:" ",up:"arrow-up",left:"arrow-left",right:"arrow-right",down:"arrow-down",delete:"backspace"},K_=(e,t)=>n=>{if(!("key"in n))return;const r=Wt(n.key);if(t.some(l=>l===r||eg[l]===r))return e(n)},q_={beforeMount(e,{value:t},{transition:n}){e._vod=e.style.display==="none"?"":e.style.display,n&&t?n.beforeEnter(e):En(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:r}){!t!=!n&&(r?t?(r.beforeEnter(e),En(e,!0),r.enter(e)):r.leave(e,()=>{En(e,!1)}):En(e,t))},beforeUnmount(e,{value:t}){En(e,t)}};function En(e,t){e.style.display=t?e._vod:"none"}const tg=Ce({patchProp:$h},Ih);let fl,Ta=!1;function ng(){return fl=Ta?fl:ch(tg),Ta=!0,fl}const rg=(...e)=>{const t=ng().createApp(...e),{mount:n}=t;return t.mount=r=>{const l=lg(r);if(l)return n(l,!0,l instanceof SVGElement)},t};function lg(e){return be(e)?document.querySelector(e):e}/*!
+  * vue-router v4.0.12
+  * (c) 2021 Eduardo San Martin Morote
+  * @license MIT
+  */const sc=typeof Symbol=="function"&&typeof Symbol.toStringTag=="symbol",bn=e=>sc?Symbol(e):"_vr_"+e,ig=bn("rvlm"),Oa=bn("rvd"),ll=bn("r"),Ci=bn("rl"),Ul=bn("rvl"),tn=typeof window!="undefined";function ag(e){return e.__esModule||sc&&e[Symbol.toStringTag]==="Module"}const pe=Object.assign;function _l(e,t){const n={};for(const r in t){const l=t[r];n[r]=Array.isArray(l)?l.map(e):e(l)}return n}const jn=()=>{},og=/\/$/,sg=e=>e.replace(og,"");function bl(e,t,n="/"){let r,l={},i="",a="";const o=t.indexOf("?"),s=t.indexOf("#",o>-1?o:0);return o>-1&&(r=t.slice(0,o),i=t.slice(o+1,s>-1?s:t.length),l=e(i)),s>-1&&(r=r||t.slice(0,s),a=t.slice(s,t.length)),r=hg(r!=null?r:t,n),{fullPath:r+(i&&"?")+i+a,path:r,query:l,hash:a}}function cg(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function Aa(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function ug(e,t,n){const r=t.matched.length-1,l=n.matched.length-1;return r>-1&&r===l&&gn(t.matched[r],n.matched[l])&&cc(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function gn(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function cc(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const n in e)if(!dg(e[n],t[n]))return!1;return!0}function dg(e,t){return Array.isArray(e)?La(e,t):Array.isArray(t)?La(t,e):e===t}function La(e,t){return Array.isArray(t)?e.length===t.length&&e.every((n,r)=>n===t[r]):e.length===1&&e[0]===t}function hg(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),r=e.split("/");let l=n.length-1,i,a;for(i=0;i({left:window.pageXOffset,top:window.pageYOffset});function fg(e){let t;if("el"in e){const n=e.el,r=typeof n=="string"&&n.startsWith("#"),l=typeof n=="string"?r?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!l)return;t=pg(l,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.pageXOffset,t.top!=null?t.top:window.pageYOffset)}function Da(e,t){return(history.state?history.state.position-t:-1)+e}const Kl=new Map;function _g(e,t){Kl.set(e,t)}function bg(e){const t=Kl.get(e);return Kl.delete(e),t}let kg=()=>location.protocol+"//"+location.host;function uc(e,t){const{pathname:n,search:r,hash:l}=t,i=e.indexOf("#");if(i>-1){let o=l.includes(e.slice(i))?e.slice(i).length:1,s=l.slice(o);return s[0]!=="/"&&(s="/"+s),Aa(s,"")}return Aa(n,e)+r+l}function yg(e,t,n,r){let l=[],i=[],a=null;const o=({state:h})=>{const b=uc(e,location),g=n.value,_=t.value;let f=0;if(h){if(n.value=b,t.value=h,a&&a===g){a=null;return}f=_?h.position-_.position:0}else r(b);l.forEach(k=>{k(n.value,g,{delta:f,type:$n.pop,direction:f?f>0?Nn.forward:Nn.back:Nn.unknown})})};function s(){a=n.value}function u(h){l.push(h);const b=()=>{const g=l.indexOf(h);g>-1&&l.splice(g,1)};return i.push(b),b}function d(){const{history:h}=window;!h.state||h.replaceState(pe({},h.state,{scroll:il()}),"")}function m(){for(const h of i)h();i=[],window.removeEventListener("popstate",o),window.removeEventListener("beforeunload",d)}return window.addEventListener("popstate",o),window.addEventListener("beforeunload",d),{pauseListeners:s,listen:u,destroy:m}}function Ra(e,t,n,r=!1,l=!1){return{back:e,current:t,forward:n,replaced:r,position:window.history.length,scroll:l?il():null}}function Eg(e){const{history:t,location:n}=window,r={value:uc(e,n)},l={value:t.state};l.value||i(r.value,{back:null,current:r.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function i(s,u,d){const m=e.indexOf("#"),h=m>-1?(n.host&&document.querySelector("base")?e:e.slice(m))+s:kg()+e+s;try{t[d?"replaceState":"pushState"](u,"",h),l.value=u}catch(b){console.error(b),n[d?"replace":"assign"](h)}}function a(s,u){const d=pe({},t.state,Ra(l.value.back,s,l.value.forward,!0),u,{position:l.value.position});i(s,d,!0),r.value=s}function o(s,u){const d=pe({},l.value,t.state,{forward:s,scroll:il()});i(d.current,d,!0);const m=pe({},Ra(r.value,s,null),{position:d.position+1},u);i(s,m,!1),r.value=s}return{location:r,state:l,push:o,replace:a}}function wg(e){e=gg(e);const t=Eg(e),n=yg(e,t.state,t.location,t.replace);function r(i,a=!0){a||n.pauseListeners(),history.go(i)}const l=pe({location:"",base:e,go:r,createHref:vg.bind(null,e)},t,n);return Object.defineProperty(l,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(l,"state",{enumerable:!0,get:()=>t.state.value}),l}function Pg(e){return typeof e=="string"||e&&typeof e=="object"}function dc(e){return typeof e=="string"||typeof e=="symbol"}const st={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0},hc=bn("nf");var Ia;(function(e){e[e.aborted=4]="aborted",e[e.cancelled=8]="cancelled",e[e.duplicated=16]="duplicated"})(Ia||(Ia={}));function mn(e,t){return pe(new Error,{type:e,[hc]:!0},t)}function It(e,t){return e instanceof Error&&hc in e&&(t==null||!!(e.type&t))}const Ca="[^/]+?",Sg={sensitive:!1,strict:!1,start:!0,end:!0},Tg=/[.+*?^${}()[\]/\\]/g;function Og(e,t){const n=pe({},Sg,t),r=[];let l=n.start?"^":"";const i=[];for(const u of e){const d=u.length?[]:[90];n.strict&&!u.length&&(l+="/");for(let m=0;mt.length?t.length===1&&t[0]===40+40?1:-1:0}function Lg(e,t){let n=0;const r=e.score,l=t.score;for(;n1&&(s==="*"||s==="+")&&t(`A repeatable param (${u}) must be alone in its segment. eg: '/:ids+.`),i.push({type:1,value:u,regexp:d,repeatable:s==="*"||s==="+",optional:s==="*"||s==="?"})):t("Invalid state to consume buffer"),u="")}function h(){u+=s}for(;o{a(w)}:jn}function a(d){if(dc(d)){const m=r.get(d);m&&(r.delete(d),n.splice(n.indexOf(m),1),m.children.forEach(a),m.alias.forEach(a))}else{const m=n.indexOf(d);m>-1&&(n.splice(m,1),d.record.name&&r.delete(d.record.name),d.children.forEach(a),d.alias.forEach(a))}}function o(){return n}function s(d){let m=0;for(;m=0;)m++;n.splice(m,0,d),d.record.name&&!xa(d)&&r.set(d.record.name,d)}function u(d,m){let h,b={},g,_;if("name"in d&&d.name){if(h=r.get(d.name),!h)throw mn(1,{location:d});_=h.record.name,b=pe(Vg(m.params,h.keys.filter(w=>!w.optional).map(w=>w.name)),d.params),g=h.stringify(b)}else if("path"in d)g=d.path,h=n.find(w=>w.re.test(g)),h&&(b=h.parse(g),_=h.record.name);else{if(h=m.name?r.get(m.name):n.find(w=>w.re.test(m.path)),!h)throw mn(1,{location:d,currentLocation:m});_=h.record.name,b=pe({},m.params,d.params),g=h.stringify(b)}const f=[];let k=h;for(;k;)f.unshift(k.record),k=k.parent;return{name:_,path:g,params:b,matched:f,meta:Ng(f)}}return e.forEach(d=>i(d)),{addRoute:i,resolve:u,removeRoute:a,getRoutes:o,getRecordMatcher:l}}function Vg(e,t){const n={};for(const r of t)r in e&&(n[r]=e[r]);return n}function Fg(e){return{path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:void 0,beforeEnter:e.beforeEnter,props:jg(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||{}:{default:e.component}}}function jg(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const r in e.components)t[r]=typeof n=="boolean"?n:n[r];return t}function xa(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function Ng(e){return e.reduce((t,n)=>pe(t,n.meta),{})}function Va(e,t){const n={};for(const r in e)n[r]=r in t?t[r]:e[r];return n}const gc=/#/g,Mg=/&/g,zg=/\//g,Hg=/=/g,Bg=/\?/g,mc=/\+/g,Ug=/%5B/g,Kg=/%5D/g,vc=/%5E/g,qg=/%60/g,pc=/%7B/g,Wg=/%7C/g,fc=/%7D/g,$g=/%20/g;function xi(e){return encodeURI(""+e).replace(Wg,"|").replace(Ug,"[").replace(Kg,"]")}function Gg(e){return xi(e).replace(pc,"{").replace(fc,"}").replace(vc,"^")}function ql(e){return xi(e).replace(mc,"%2B").replace($g,"+").replace(gc,"%23").replace(Mg,"%26").replace(qg,"`").replace(pc,"{").replace(fc,"}").replace(vc,"^")}function Jg(e){return ql(e).replace(Hg,"%3D")}function Yg(e){return xi(e).replace(gc,"%23").replace(Bg,"%3F")}function Qg(e){return e==null?"":Yg(e).replace(zg,"%2F")}function zr(e){try{return decodeURIComponent(""+e)}catch{}return""+e}function Zg(e){const t={};if(e===""||e==="?")return t;const r=(e[0]==="?"?e.slice(1):e).split("&");for(let l=0;li&&ql(i)):[r&&ql(r)]).forEach(i=>{i!==void 0&&(t+=(t.length?"&":"")+n,i!=null&&(t+="="+i))})}return t}function Xg(e){const t={};for(const n in e){const r=e[n];r!==void 0&&(t[n]=Array.isArray(r)?r.map(l=>l==null?null:""+l):r==null?r:""+r)}return t}function wn(){let e=[];function t(r){return e.push(r),()=>{const l=e.indexOf(r);l>-1&&e.splice(l,1)}}function n(){e=[]}return{add:t,list:()=>e,reset:n}}function yt(e,t,n,r,l){const i=r&&(r.enterCallbacks[l]=r.enterCallbacks[l]||[]);return()=>new Promise((a,o)=>{const s=m=>{m===!1?o(mn(4,{from:n,to:t})):m instanceof Error?o(m):Pg(m)?o(mn(2,{from:t,to:m})):(i&&r.enterCallbacks[l]===i&&typeof m=="function"&&i.push(m),a())},u=e.call(r&&r.instances[l],t,n,s);let d=Promise.resolve(u);e.length<3&&(d=d.then(s)),d.catch(m=>o(m))})}function kl(e,t,n,r){const l=[];for(const i of e)for(const a in i.components){let o=i.components[a];if(!(t!=="beforeRouteEnter"&&!i.instances[a]))if(em(o)){const u=(o.__vccOpts||o)[t];u&&l.push(yt(u,n,r,i,a))}else{let s=o();l.push(()=>s.then(u=>{if(!u)return Promise.reject(new Error(`Couldn't resolve component "${a}" at "${i.path}"`));const d=ag(u)?u.default:u;i.components[a]=d;const h=(d.__vccOpts||d)[t];return h&&yt(h,n,r,i,a)()}))}}return l}function em(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function ja(e){const t=Re(ll),n=Re(Ci),r=_e(()=>t.resolve(Bt(e.to))),l=_e(()=>{const{matched:s}=r.value,{length:u}=s,d=s[u-1],m=n.matched;if(!d||!m.length)return-1;const h=m.findIndex(gn.bind(null,d));if(h>-1)return h;const b=Na(s[u-2]);return u>1&&Na(d)===b&&m[m.length-1].path!==b?m.findIndex(gn.bind(null,s[u-2])):h}),i=_e(()=>l.value>-1&&lm(n.params,r.value.params)),a=_e(()=>l.value>-1&&l.value===n.matched.length-1&&cc(n.params,r.value.params));function o(s={}){return rm(s)?t[Bt(e.replace)?"replace":"push"](Bt(e.to)).catch(jn):Promise.resolve()}return{route:r,href:_e(()=>r.value.href),isActive:i,isExactActive:a,navigate:o}}const tm=ze({name:"RouterLink",props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"}},useLink:ja,setup(e,{slots:t}){const n=_n(ja(e)),{options:r}=Re(ll),l=_e(()=>({[Ma(e.activeClass,r.linkActiveClass,"router-link-active")]:n.isActive,[Ma(e.exactActiveClass,r.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const i=t.default&&t.default(n);return e.custom?i:ee("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:l.value},i)}}}),nm=tm;function rm(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function lm(e,t){for(const n in t){const r=t[n],l=e[n];if(typeof r=="string"){if(r!==l)return!1}else if(!Array.isArray(l)||l.length!==r.length||r.some((i,a)=>i!==l[a]))return!1}return!0}function Na(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const Ma=(e,t,n)=>e!=null?e:t!=null?t:n,im=ze({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},setup(e,{attrs:t,slots:n}){const r=Re(Ul),l=_e(()=>e.route||r.value),i=Re(Oa,0),a=_e(()=>l.value.matched[i]);Ut(Oa,i+1),Ut(ig,a),Ut(Ul,l);const o=Ee();return et(()=>[o.value,a.value,e.name],([s,u,d],[m,h,b])=>{u&&(u.instances[d]=s,h&&h!==u&&s&&s===m&&(u.leaveGuards.size||(u.leaveGuards=h.leaveGuards),u.updateGuards.size||(u.updateGuards=h.updateGuards))),s&&u&&(!h||!gn(u,h)||!m)&&(u.enterCallbacks[d]||[]).forEach(g=>g(s))},{flush:"post"}),()=>{const s=l.value,u=a.value,d=u&&u.components[e.name],m=e.name;if(!d)return za(n.default,{Component:d,route:s});const h=u.props[e.name],b=h?h===!0?s.params:typeof h=="function"?h(s):h:null,_=ee(d,pe({},b,t,{onVnodeUnmounted:f=>{f.component.isUnmounted&&(u.instances[m]=null)},ref:o}));return za(n.default,{Component:_,route:s})||_}}});function za(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const _c=im;function am(e){const t=xg(e.routes,e),n=e.parseQuery||Zg,r=e.stringifyQuery||Fa,l=e.history,i=wn(),a=wn(),o=wn(),s=Os(st);let u=st;tn&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const d=_l.bind(null,I=>""+I),m=_l.bind(null,Qg),h=_l.bind(null,zr);function b(I,U){let N,q;return dc(I)?(N=t.getRecordMatcher(I),q=U):q=I,t.addRoute(q,N)}function g(I){const U=t.getRecordMatcher(I);U&&t.removeRoute(U)}function _(){return t.getRoutes().map(I=>I.record)}function f(I){return!!t.getRecordMatcher(I)}function k(I,U){if(U=pe({},U||s.value),typeof I=="string"){const ne=bl(n,I,U.path),p=t.resolve({path:ne.path},U),y=l.createHref(ne.fullPath);return pe(ne,p,{params:h(p.params),hash:zr(ne.hash),redirectedFrom:void 0,href:y})}let N;if("path"in I)N=pe({},I,{path:bl(n,I.path,U.path).path});else{const ne=pe({},I.params);for(const p in ne)ne[p]==null&&delete ne[p];N=pe({},I,{params:m(I.params)}),U.params=m(U.params)}const q=t.resolve(N,U),ue=I.hash||"";q.params=d(h(q.params));const me=cg(r,pe({},I,{hash:Gg(ue),path:q.path})),ie=l.createHref(me);return pe({fullPath:me,hash:ue,query:r===Fa?Xg(I.query):I.query||{}},q,{redirectedFrom:void 0,href:ie})}function w(I){return typeof I=="string"?bl(n,I,s.value.path):pe({},I)}function P(I,U){if(u!==I)return mn(8,{from:U,to:I})}function T(I){return L(I)}function D(I){return T(pe(w(I),{replace:!0}))}function j(I){const U=I.matched[I.matched.length-1];if(U&&U.redirect){const{redirect:N}=U;let q=typeof N=="function"?N(I):N;return typeof q=="string"&&(q=q.includes("?")||q.includes("#")?q=w(q):{path:q},q.params={}),pe({query:I.query,hash:I.hash,params:I.params},q)}}function L(I,U){const N=u=k(I),q=s.value,ue=I.state,me=I.force,ie=I.replace===!0,ne=j(N);if(ne)return L(pe(w(ne),{state:ue,force:me,replace:ie}),U||N);const p=N;p.redirectedFrom=U;let y;return!me&&ug(r,q,N)&&(y=mn(16,{to:p,from:q}),Te(q,q,!0,!1)),(y?Promise.resolve(y):K(p,q)).catch(S=>It(S)?S:re(S,p,q)).then(S=>{if(S){if(It(S,2))return L(pe(w(S.to),{state:ue,force:me,replace:ie}),U||p)}else S=W(p,q,!0,ie,ue);return B(p,q,S),S})}function O(I,U){const N=P(I,U);return N?Promise.reject(N):Promise.resolve()}function K(I,U){let N;const[q,ue,me]=om(I,U);N=kl(q.reverse(),"beforeRouteLeave",I,U);for(const ne of q)ne.leaveGuards.forEach(p=>{N.push(yt(p,I,U))});const ie=O.bind(null,I,U);return N.push(ie),Jt(N).then(()=>{N=[];for(const ne of i.list())N.push(yt(ne,I,U));return N.push(ie),Jt(N)}).then(()=>{N=kl(ue,"beforeRouteUpdate",I,U);for(const ne of ue)ne.updateGuards.forEach(p=>{N.push(yt(p,I,U))});return N.push(ie),Jt(N)}).then(()=>{N=[];for(const ne of I.matched)if(ne.beforeEnter&&!U.matched.includes(ne))if(Array.isArray(ne.beforeEnter))for(const p of ne.beforeEnter)N.push(yt(p,I,U));else N.push(yt(ne.beforeEnter,I,U));return N.push(ie),Jt(N)}).then(()=>(I.matched.forEach(ne=>ne.enterCallbacks={}),N=kl(me,"beforeRouteEnter",I,U),N.push(ie),Jt(N))).then(()=>{N=[];for(const ne of a.list())N.push(yt(ne,I,U));return N.push(ie),Jt(N)}).catch(ne=>It(ne,8)?ne:Promise.reject(ne))}function B(I,U,N){for(const q of o.list())q(I,U,N)}function W(I,U,N,q,ue){const me=P(I,U);if(me)return me;const ie=U===st,ne=tn?history.state:{};N&&(q||ie?l.replace(I.fullPath,pe({scroll:ie&&ne&&ne.scroll},ue)):l.push(I.fullPath,ue)),s.value=I,Te(I,U,N,ie),we()}let A;function H(){A=l.listen((I,U,N)=>{const q=k(I),ue=j(q);if(ue){L(pe(ue,{replace:!0}),q).catch(jn);return}u=q;const me=s.value;tn&&_g(Da(me.fullPath,N.delta),il()),K(q,me).catch(ie=>It(ie,12)?ie:It(ie,2)?(L(ie.to,q).then(ne=>{It(ne,20)&&!N.delta&&N.type===$n.pop&&l.go(-1,!1)}).catch(jn),Promise.reject()):(N.delta&&l.go(-N.delta,!1),re(ie,q,me))).then(ie=>{ie=ie||W(q,me,!1),ie&&(N.delta?l.go(-N.delta,!1):N.type===$n.pop&&It(ie,20)&&l.go(-1,!1)),B(q,me,ie)}).catch(jn)})}let Q=wn(),se=wn(),J;function re(I,U,N){we(I);const q=se.list();return q.length?q.forEach(ue=>ue(I,U,N)):console.error(I),Promise.reject(I)}function le(){return J&&s.value!==st?Promise.resolve():new Promise((I,U)=>{Q.add([I,U])})}function we(I){J||(J=!0,H(),Q.list().forEach(([U,N])=>I?N(I):U()),Q.reset())}function Te(I,U,N,q){const{scrollBehavior:ue}=e;if(!tn||!ue)return Promise.resolve();const me=!N&&bg(Da(I.fullPath,0))||(q||!N)&&history.state&&history.state.scroll||null;return Ei().then(()=>ue(I,U,me)).then(ie=>ie&&fg(ie)).catch(ie=>re(ie,I,U))}const Ae=I=>l.go(I);let Pe;const Ie=new Set;return{currentRoute:s,addRoute:b,removeRoute:g,hasRoute:f,getRoutes:_,resolve:k,options:e,push:T,replace:D,go:Ae,back:()=>Ae(-1),forward:()=>Ae(1),beforeEach:i.add,beforeResolve:a.add,afterEach:o.add,onError:se.add,isReady:le,install(I){const U=this;I.component("RouterLink",nm),I.component("RouterView",_c),I.config.globalProperties.$router=U,Object.defineProperty(I.config.globalProperties,"$route",{enumerable:!0,get:()=>Bt(s)}),tn&&!Pe&&s.value===st&&(Pe=!0,T(l.location).catch(ue=>{}));const N={};for(const ue in st)N[ue]=_e(()=>s.value[ue]);I.provide(ll,U),I.provide(Ci,_n(N)),I.provide(Ul,s);const q=I.unmount;Ie.add(I),I.unmount=function(){Ie.delete(I),Ie.size<1&&(u=st,A&&A(),s.value=st,Pe=!1,J=!1),q()}}}}function Jt(e){return e.reduce((t,n)=>t.then(()=>n()),Promise.resolve())}function om(e,t){const n=[],r=[],l=[],i=Math.max(t.matched.length,e.matched.length);for(let a=0;agn(u,o))?r.push(o):n.push(o));const s=e.matched[a];s&&(t.matched.find(u=>gn(u,s))||l.push(s))}return[n,r,l]}function rr(){return Re(ll)}function Vi(){return Re(Ci)}const sm=ze({setup(e,t){const n=Ee(!1);return tt(()=>{n.value=!0}),()=>{var r,l;return n.value?(l=(r=t.slots).default)===null||l===void 0?void 0:l.call(r):null}}}),cm="modulepreload",Ha={},um="/",c=function(t,n){return!n||n.length===0?t():Promise.all(n.map(r=>{if(r=`${um}${r}`,r in Ha)return;Ha[r]=!0;const l=r.endsWith(".css"),i=l?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${r}"]${i}`))return;const a=document.createElement("link");if(a.rel=l?"stylesheet":cm,l||(a.as="script",a.crossOrigin=""),a.href=r,document.head.appendChild(a),l)return new Promise((o,s)=>{a.addEventListener("load",o),a.addEventListener("error",()=>s(new Error(`Unable to preload CSS for ${r}`)))})})).then(()=>t())},bc={"v-8daa1a0e":v(()=>c(()=>import("./index.html.8d563e04.js"),[])),"v-6bf54404":v(()=>c(()=>import("./accounts.html.6c5fb42e.js"),[])),"v-5f0a12cc":v(()=>c(()=>import("./cpi.html.3c5b2fad.js"),[])),"v-130ca978":v(()=>c(()=>import("./pdas.html.6cd183ed.js"),[])),"v-882009ca":v(()=>c(()=>import("./programs.html.abb8a7d0.js"),[])),"v-63197375":v(()=>c(()=>import("./transactions.html.e77ad835.js"),[])),"v-2d0a87a8":v(()=>c(()=>import("./index.html.260ddcc4.js"),[])),"v-2d0a8235":v(()=>c(()=>import("./index.html.0fa0c74e.js"),[])),"v-4e8563af":v(()=>c(()=>import("./installation.html.551eda7d.js"),[])),"v-76b1e9e3":v(()=>c(()=>import("./account-maps.html.e17d66e4.js"),[])),"v-6da58eef":v(()=>c(()=>import("./data-migration.html.c8f4c967.js"),[])),"v-4684263f":v(()=>c(()=>import("./debugging-solana-programs.html.00b68f5c.js"),[])),"v-4740871a":v(()=>c(()=>import("./feature-parity-testing.html.ffa95768.js"),[])),"v-2b9a5458":v(()=>c(()=>import("./get-program-accounts.html.33767d6d.js"),[])),"v-5a9d5a10":v(()=>c(()=>import("./retrying-transactions.html.5fd1bc68.js"),[])),"v-2e379628":v(()=>c(()=>import("./serialization.html.cbd7ad5f.js"),[])),"v-7e81f36f":v(()=>c(()=>import("./versioned-transactions.html.7f9e7fba.js"),[])),"v-2d0a8b4a":v(()=>c(()=>import("./index.html.012e7f00.js"),[])),"v-2d0a94db":v(()=>c(()=>import("./index.html.700f6b24.js"),[])),"v-100dc897":v(()=>c(()=>import("./index.html.4dda40ff.js"),[])),"v-13513bf3":v(()=>c(()=>import("./jupiter.html.0da87dba.js"),[])),"v-7f12be2e":v(()=>c(()=>import("./mango.html.ec7a53fc.js"),[])),"v-0bf487b4":v(()=>c(()=>import("./orao-vrf.html.a55507f9.js"),[])),"v-6bb05bf6":v(()=>c(()=>import("./pyth.html.13b048d9.js"),[])),"v-78a2a41d":v(()=>c(()=>import("./react-native.html.4e30041b.js"),[])),"v-0a8f60b8":v(()=>c(()=>import("./serum.html.bf6c9d32.js"),[])),"v-402eef45":v(()=>c(()=>import("./strata.html.95f9b321.js"),[])),"v-4d26b27e":v(()=>c(()=>import("./switchboard.html.2054dd93.js"),[])),"v-da1de70a":v(()=>c(()=>import("./web3auth.html.345169aa.js"),[])),"v-2d0a9e0f":v(()=>c(()=>import("./index.html.d6bfe13b.js"),[])),"v-6c467d65":v(()=>c(()=>import("./accounts.html.100d9cfb.js"),[])),"v-70f9aa12":v(()=>c(()=>import("./basic-transactions.html.9ad2c78b.js"),[])),"v-4dc29afa":v(()=>c(()=>import("./keypairs-and-wallets.html.faaa4153.js"),[])),"v-10b56a2e":v(()=>c(()=>import("./local-development.html.77a5d6d7.js"),[])),"v-9eccd210":v(()=>c(()=>import("./name-service.html.819cca94.js"),[])),"v-d2aec298":v(()=>c(()=>import("./nfts.html.3e24ae11.js"),[])),"v-f8950628":v(()=>c(()=>import("./offline-transactions.html.772a0f44.js"),[])),"v-877d9708":v(()=>c(()=>import("./programs.html.44f14c2f.js"),[])),"v-26f90ae0":v(()=>c(()=>import("./staking.html.e0773cbc.js"),[])),"v-0d096f0e":v(()=>c(()=>import("./token.html.b0f64f1f.js"),[])),"v-2d0abea2":v(()=>c(()=>import("./index.html.e7bf87d4.js"),[])),"v-2d0abfd8":v(()=>c(()=>import("./index.html.34ecc93b.js"),[])),"v-2d0ac643":v(()=>c(()=>import("./index.html.89167c54.js"),[])),"v-2d0ad528":v(()=>c(()=>import("./index.html.6b2e93b1.js"),[])),"v-08458c16":v(()=>c(()=>import("./accounts.html.c01d01f3.js"),[])),"v-79377c96":v(()=>c(()=>import("./pdas.html.4cb1789d.js"),[])),"v-4bd7f10c":v(()=>c(()=>import("./programs.html.d0bfafe6.js"),[])),"v-314308e6":v(()=>c(()=>import("./transactions.html.a8a9e78c.js"),[])),"v-389f60e0":v(()=>c(()=>import("./installation.html.aa217998.js"),[])),"v-471a2192":v(()=>c(()=>import("./account-maps.html.5a5d3096.js"),[])),"v-7642d244":v(()=>c(()=>import("./data-migration.html.e85fb8c1.js"),[])),"v-6c0a22f0":v(()=>c(()=>import("./debugging-solana-programs.html.11868c06.js"),[])),"v-35856562":v(()=>c(()=>import("./feature-parity-testing.html.54657bef.js"),[])),"v-3d8822fa":v(()=>c(()=>import("./get-program-accounts.html.fb5458ec.js"),[])),"v-44b75741":v(()=>c(()=>import("./retrying-transactions.html.d1c44dfc.js"),[])),"v-6ad65459":v(()=>c(()=>import("./serialization.html.e9f1b66c.js"),[])),"v-3caeb514":v(()=>c(()=>import("./accounts.html.22f9f7b9.js"),[])),"v-20a8d3e6":v(()=>c(()=>import("./basic-transactions.html.3644e567.js"),[])),"v-17bc77ae":v(()=>c(()=>import("./keypairs-and-wallets.html.b96ee178.js"),[])),"v-0a613142":v(()=>c(()=>import("./local-development.html.744d3a55.js"),[])),"v-1db05f27":v(()=>c(()=>import("./name-service.html.6348de7a.js"),[])),"v-6f8605e3":v(()=>c(()=>import("./nfts.html.601b0bfd.js"),[])),"v-2a14a61b":v(()=>c(()=>import("./offline-transactions.html.80d13700.js"),[])),"v-e6ad27aa":v(()=>c(()=>import("./programs.html.2cb2bd0c.js"),[])),"v-8d23ddfe":v(()=>c(()=>import("./staking.html.18305091.js"),[])),"v-4fd8edbf":v(()=>c(()=>import("./token.html.8a3ee454.js"),[])),"v-8e5be170":v(()=>c(()=>import("./accounts.html.0534eff3.js"),[])),"v-f2328ef0":v(()=>c(()=>import("./pdas.html.6eca14e4.js"),[])),"v-08ccc65f":v(()=>c(()=>import("./programs.html.86897b5c.js"),[])),"v-1256fcb9":v(()=>c(()=>import("./transactions.html.30c748a9.js"),[])),"v-2485abf3":v(()=>c(()=>import("./installation.html.92c7e5ad.js"),[])),"v-1832f5c2":v(()=>c(()=>import("./account-maps.html.29338336.js"),[])),"v-70204b2b":v(()=>c(()=>import("./data-migration.html.539393f0.js"),[])),"v-16deac83":v(()=>c(()=>import("./debugging-solana-programs.html.0d43a0e1.js"),[])),"v-732f06a2":v(()=>c(()=>import("./feature-parity-testing.html.8018c3be.js"),[])),"v-22a67510":v(()=>c(()=>import("./get-program-accounts.html.d10be18f.js"),[])),"v-309da254":v(()=>c(()=>import("./retrying-transactions.html.6089e242.js"),[])),"v-5796626c":v(()=>c(()=>import("./serialization.html.bc0f886a.js"),[])),"v-1bac4a4a":v(()=>c(()=>import("./index.html.937166ce.js"),[])),"v-3cb00837":v(()=>c(()=>import("./jupiter.html.fc772f9c.js"),[])),"v-0f7fcb72":v(()=>c(()=>import("./mango.html.dfd4748b.js"),[])),"v-0e6f43f0":v(()=>c(()=>import("./orao-vrf.html.b537debf.js"),[])),"v-d5fbe77e":v(()=>c(()=>import("./pyth.html.2e623aa1.js"),[])),"v-0aace259":v(()=>c(()=>import("./react-native.html.e8b4a92a.js"),[])),"v-ca072408":v(()=>c(()=>import("./serum.html.4f134f2b.js"),[])),"v-8538eafe":v(()=>c(()=>import("./strata.html.bd864fcf.js"),[])),"v-5404867c":v(()=>c(()=>import("./switchboard.html.8c428b59.js"),[])),"v-d5286e92":v(()=>c(()=>import("./web3auth.html.a5374e0f.js"),[])),"v-2d09cebe":v(()=>c(()=>import("./accounts.html.333507d3.js"),[])),"v-9ce8299a":v(()=>c(()=>import("./basic-transactions.html.bd6e749c.js"),[])),"v-4ec78794":v(()=>c(()=>import("./keypairs-and-wallets.html.b8096ec4.js"),[])),"v-32949b1c":v(()=>c(()=>import("./local-development.html.c075b9c1.js"),[])),"v-01539798":v(()=>c(()=>import("./name-service.html.43b7d32f.js"),[])),"v-6bf79020":v(()=>c(()=>import("./nfts.html.2105e347.js"),[])),"v-0e8f1e28":v(()=>c(()=>import("./offline-transactions.html.21cb3aba.js"),[])),"v-3975cfb8":v(()=>c(()=>import("./programs.html.75772791.js"),[])),"v-7cf087d4":v(()=>c(()=>import("./staking.html.7540b6be.js"),[])),"v-4520fd52":v(()=>c(()=>import("./token.html.271324d7.js"),[])),"v-598bfdda":v(()=>c(()=>import("./accounts.html.93fd4bdf.js"),[])),"v-410d47d3":v(()=>c(()=>import("./pdas.html.0a69b530.js"),[])),"v-2334b82a":v(()=>c(()=>import("./programs.html.98ed5152.js"),[])),"v-1ee9ddf8":v(()=>c(()=>import("./transactions.html.6e86b8ba.js"),[])),"v-4605d97e":v(()=>c(()=>import("./installation.html.0017d237.js"),[])),"v-7e91df34":v(()=>c(()=>import("./account-maps.html.45822ad6.js"),[])),"v-05451800":v(()=>c(()=>import("./data-migration.html.70e1853f.js"),[])),"v-0bb1c6e4":v(()=>c(()=>import("./debugging-solana-programs.html.084253a5.js"),[])),"v-5623fef8":v(()=>c(()=>import("./feature-parity-testing.html.dbdc3bf2.js"),[])),"v-0af4ea25":v(()=>c(()=>import("./get-program-accounts.html.510b18c0.js"),[])),"v-521dcfdf":v(()=>c(()=>import("./retrying-transactions.html.d5ed1e28.js"),[])),"v-22564af7":v(()=>c(()=>import("./serialization.html.c79b151c.js"),[])),"v-77103780":v(()=>c(()=>import("./versioned-transactions.html.a6b7138b.js"),[])),"v-4571fbe6":v(()=>c(()=>import("./index.html.98dc024c.js"),[])),"v-076ff0c2":v(()=>c(()=>import("./jupiter.html.4eaf438d.js"),[])),"v-6cb34a86":v(()=>c(()=>import("./mango.html.ed3aa781.js"),[])),"v-c8a72676":v(()=>c(()=>import("./orao-vrf.html.7953840f.js"),[])),"v-6976e796":v(()=>c(()=>import("./pyth.html.30db177c.js"),[])),"v-1e60cea4":v(()=>c(()=>import("./react-native.html.d0862c32.js"),[])),"v-5522fd47":v(()=>c(()=>import("./serum.html.edb62029.js"),[])),"v-480ee496":v(()=>c(()=>import("./strata.html.39f81272.js"),[])),"v-139f3066":v(()=>c(()=>import("./switchboard.html.e36a699f.js"),[])),"v-22a8f18c":v(()=>c(()=>import("./web3auth.html.e0bca51a.js"),[])),"v-742672b6":v(()=>c(()=>import("./accounts.html.b5ad2fda.js"),[])),"v-7fdd21f0":v(()=>c(()=>import("./basic-transactions.html.31083260.js"),[])),"v-5bd01ecb":v(()=>c(()=>import("./keypairs-and-wallets.html.25071617.js"),[])),"v-0835dffd":v(()=>c(()=>import("./local-development.html.73b0d31a.js"),[])),"v-31ec7bc9":v(()=>c(()=>import("./name-service.html.3042b894.js"),[])),"v-3331e485":v(()=>c(()=>import("./nfts.html.7f4acb22.js"),[])),"v-dc79fe86":v(()=>c(()=>import("./offline-transactions.html.c4fd9dc0.js"),[])),"v-77bdac66":v(()=>c(()=>import("./programs.html.a729e5a5.js"),[])),"v-3717171f":v(()=>c(()=>import("./staking.html.b453dc6b.js"),[])),"v-01a8e35d":v(()=>c(()=>import("./token.html.8a86434c.js"),[])),"v-02e9060d":v(()=>c(()=>import("./installation.html.d22331f2.js"),[])),"v-10a285c5":v(()=>c(()=>import("./account-maps.html.3ef0a43c.js"),[])),"v-4ddeba51":v(()=>c(()=>import("./data-migration.html.f96be103.js"),[])),"v-0173699d":v(()=>c(()=>import("./debugging-solana-programs.html.1d43cb56.js"),[])),"v-971f3456":v(()=>c(()=>import("./feature-parity-testing.html.d47db88f.js"),[])),"v-307b2094":v(()=>c(()=>import("./get-program-accounts.html.e331e7b0.js"),[])),"v-0f00fc6e":v(()=>c(()=>import("./retrying-transactions.html.cfeea4ac.js"),[])),"v-5b4b12f4":v(()=>c(()=>import("./serialization.html.62d319fc.js"),[])),"v-0027c5f5":v(()=>c(()=>import("./index.html.7616e51b.js"),[])),"v-9117c75e":v(()=>c(()=>import("./jupiter.html.0fe2690a.js"),[])),"v-d6e3c3e8":v(()=>c(()=>import("./mango.html.5e7b6391.js"),[])),"v-2df1fe67":v(()=>c(()=>import("./pyth.html.ca4338c1.js"),[])),"v-10996302":v(()=>c(()=>import("./react-native.html.20032395.js"),[])),"v-200ac096":v(()=>c(()=>import("./serum.html.f55e8c37.js"),[])),"v-4bc0e9b2":v(()=>c(()=>import("./strata.html.3b66a030.js"),[])),"v-6a0633dc":v(()=>c(()=>import("./switchboard.html.4cb6706c.js"),[])),"v-732a37dd":v(()=>c(()=>import("./web3auth.html.f6264781.js"),[])),"v-06371947":v(()=>c(()=>import("./accounts.html.4db5c346.js"),[])),"v-c0d8574e":v(()=>c(()=>import("./basic-transactions.html.da77937a.js"),[])),"v-644e73dc":v(()=>c(()=>import("./keypairs-and-wallets.html.ec5ebd4d.js"),[])),"v-75cde6e8":v(()=>c(()=>import("./local-development.html.34489fb3.js"),[])),"v-673571da":v(()=>c(()=>import("./name-service.html.1a69f639.js"),[])),"v-931308d4":v(()=>c(()=>import("./nfts.html.7db667ee.js"),[])),"v-cb7d5464":v(()=>c(()=>import("./offline-transactions.html.931bdc60.js"),[])),"v-5631d05e":v(()=>c(()=>import("./programs.html.2be33c5f.js"),[])),"v-01feda6e":v(()=>c(()=>import("./staking.html.2a68a938.js"),[])),"v-3211a328":v(()=>c(()=>import("./token.html.e77e0548.js"),[])),"v-da3cf63c":v(()=>c(()=>import("./accounts.html.9f7cd589.js"),[])),"v-0bf50b22":v(()=>c(()=>import("./pdas.html.c4ec1265.js"),[])),"v-3a47880e":v(()=>c(()=>import("./programs.html.bfb8bafa.js"),[])),"v-73c3d55a":v(()=>c(()=>import("./transactions.html.f3b1874c.js"),[])),"v-52cd49a4":v(()=>c(()=>import("./accounts.html.a82c0a3f.js"),[])),"v-4a4be76e":v(()=>c(()=>import("./pdas.html.254305c4.js"),[])),"v-26941245":v(()=>c(()=>import("./programs.html.6f7ab3c6.js"),[])),"v-2229e59f":v(()=>c(()=>import("./transactions.html.d1090aa2.js"),[])),"v-e97c194e":v(()=>c(()=>import("./installation.html.d1ee0289.js"),[])),"v-c5b19a0e":v(()=>c(()=>import("./account-maps.html.adbab433.js"),[])),"v-68262af6":v(()=>c(()=>import("./data-migration.html.e64daf12.js"),[])),"v-a4865e2e":v(()=>c(()=>import("./debugging-solana-programs.html.0a48722b.js"),[])),"v-37352209":v(()=>c(()=>import("./feature-parity-testing.html.a6a87887.js"),[])),"v-0d30a8ea":v(()=>c(()=>import("./get-program-accounts.html.25a79f83.js"),[])),"v-d14c2c8c":v(()=>c(()=>import("./retrying-transactions.html.d6d95eab.js"),[])),"v-5329205c":v(()=>c(()=>import("./serialization.html.46c2b34d.js"),[])),"v-da88730a":v(()=>c(()=>import("./accounts.html.408cca03.js"),[])),"v-2258908d":v(()=>c(()=>import("./basic-transactions.html.028095e3.js"),[])),"v-48d4f310":v(()=>c(()=>import("./keypairs-and-wallets.html.837fef59.js"),[])),"v-4d71f9d8":v(()=>c(()=>import("./local-development.html.e7698a93.js"),[])),"v-cb0f35e4":v(()=>c(()=>import("./name-service.html.8332c395.js"),[])),"v-b3ac3a6c":v(()=>c(()=>import("./nfts.html.16b8d53d.js"),[])),"v-7ec7d502":v(()=>c(()=>import("./offline-transactions.html.ec06e8f3.js"),[])),"v-3a9304dc":v(()=>c(()=>import("./programs.html.8ae34e5c.js"),[])),"v-4055b6ba":v(()=>c(()=>import("./staking.html.2accd08e.js"),[])),"v-249ea490":v(()=>c(()=>import("./token.html.abb56ff4.js"),[])),"v-3f8c76bb":v(()=>c(()=>import("./accounts.html.d2d4d5ac.js"),[])),"v-310cd17b":v(()=>c(()=>import("./pdas.html.4204ce02.js"),[])),"v-e0f1a45c":v(()=>c(()=>import("./programs.html.8e2df564.js"),[])),"v-5dda72ac":v(()=>c(()=>import("./transactions.html.02f2bc8b.js"),[])),"v-c5f91db4":v(()=>c(()=>import("./installation.html.6ce244fd.js"),[])),"v-e2f8eae8":v(()=>c(()=>import("./account-maps.html.2eb64379.js"),[])),"v-50dcad50":v(()=>c(()=>import("./data-migration.html.66f586f5.js"),[])),"v-387ebf94":v(()=>c(()=>import("./debugging-solana-programs.html.0682a445.js"),[])),"v-5da35ddc":v(()=>c(()=>import("./feature-parity-testing.html.c42953f4.js"),[])),"v-4791bd7d":v(()=>c(()=>import("./get-program-accounts.html.98cfd9d7.js"),[])),"v-adc930f2":v(()=>c(()=>import("./retrying-transactions.html.76ed1f79.js"),[])),"v-109a0a9f":v(()=>c(()=>import("./serialization.html.b37aa233.js"),[])),"v-0074d650":v(()=>c(()=>import("./versioned-transactions.html.ca57f109.js"),[])),"v-18d9f78e":v(()=>c(()=>import("./index.html.9ac10738.js"),[])),"v-14989f2c":v(()=>c(()=>import("./jupiter.html.44e5face.js"),[])),"v-8cb43736":v(()=>c(()=>import("./mango.html.dd07158c.js"),[])),"v-67e8ee24":v(()=>c(()=>import("./pyth.html.edd0e7cd.js"),[])),"v-fe8d3bf4":v(()=>c(()=>import("./react-native.html.192d957c.js"),[])),"v-452286ef":v(()=>c(()=>import("./serum.html.8f65bdc5.js"),[])),"v-58008fee":v(()=>c(()=>import("./strata.html.98bf58fc.js"),[])),"v-d087d916":v(()=>c(()=>import("./switchboard.html.9c632cc0.js"),[])),"v-0645b238":v(()=>c(()=>import("./web3auth.html.2d668c51.js"),[])),"v-f7cfc3e4":v(()=>c(()=>import("./accounts.html.55e1f46e.js"),[])),"v-48c6cc60":v(()=>c(()=>import("./basic-transactions.html.9ea6884a.js"),[])),"v-e6b8f3ba":v(()=>c(()=>import("./keypairs-and-wallets.html.04ed83d9.js"),[])),"v-5f3377a5":v(()=>c(()=>import("./local-development.html.3adcb5b4.js"),[])),"v-4fe8bb21":v(()=>c(()=>import("./name-service.html.cbfa7fab.js"),[])),"v-00aefbdd":v(()=>c(()=>import("./nfts.html.c666f613.js"),[])),"v-7ad32fd6":v(()=>c(()=>import("./offline-transactions.html.57239913.js"),[])),"v-57da55b6":v(()=>c(()=>import("./programs.html.bdb42a51.js"),[])),"v-2716a0c7":v(()=>c(()=>import("./staking.html.f5dd8fb8.js"),[])),"v-386291f6":v(()=>c(()=>import("./token.html.cb018164.js"),[])),"v-46a93876":v(()=>c(()=>import("./accounts.html.080971b3.js"),[])),"v-5aefd385":v(()=>c(()=>import("./pdas.html.a968d7a9.js"),[])),"v-2ca61adc":v(()=>c(()=>import("./programs.html.72bc0c7e.js"),[])),"v-4847cab6":v(()=>c(()=>import("./transactions.html.039d4d6d.js"),[])),"v-bd0a22a0":v(()=>c(()=>import("./installation.html.95dce78f.js"),[])),"v-bdfe6c7c":v(()=>c(()=>import("./account-maps.html.1f0f0c6d.js"),[])),"v-3fbbf30e":v(()=>c(()=>import("./data-migration.html.846f2758.js"),[])),"v-846b6e80":v(()=>c(()=>import("./debugging-solana-programs.html.c226d7e0.js"),[])),"v-2fc8dcdc":v(()=>c(()=>import("./feature-parity-testing.html.326a7f26.js"),[])),"v-aa61329a":v(()=>c(()=>import("./get-program-accounts.html.0ddbb8af.js"),[])),"v-a4da35de":v(()=>c(()=>import("./retrying-transactions.html.b365dd3a.js"),[])),"v-4dc4b229":v(()=>c(()=>import("./serialization.html.bc53729c.js"),[])),"v-d2d54578":v(()=>c(()=>import("./accounts.html.dc18717f.js"),[])),"v-5981ffd4":v(()=>c(()=>import("./basic-transactions.html.877bd5e7.js"),[])),"v-59dda459":v(()=>c(()=>import("./keypairs-and-wallets.html.be77a35d.js"),[])),"v-63aaf52f":v(()=>c(()=>import("./local-development.html.2c4ea044.js"),[])),"v-56a76f57":v(()=>c(()=>import("./name-service.html.8bee77ad.js"),[])),"v-41e84613":v(()=>c(()=>import("./nfts.html.88ed037e.js"),[])),"v-e05ef36a":v(()=>c(()=>import("./offline-transactions.html.8bcd0782.js"),[])),"v-32dfd74a":v(()=>c(()=>import("./programs.html.a7ccbe5d.js"),[])),"v-50f9a2d1":v(()=>c(()=>import("./staking.html.d08e4599.js"),[])),"v-6c8298e2":v(()=>c(()=>import("./token.html.eae451ae.js"),[])),"v-6a35b27a":v(()=>c(()=>import("./accounts.html.9cb1b0b9.js"),[])),"v-8e20768c":v(()=>c(()=>import("./pdas.html.2c9c6b22.js"),[])),"v-8b9f2cde":v(()=>c(()=>import("./programs.html.59a5a1e4.js"),[])),"v-55f1b6eb":v(()=>c(()=>import("./transactions.html.cbaf2f31.js"),[])),"v-274abcb6":v(()=>c(()=>import("./installation.html.ba618e0e.js"),[])),"v-02feff2d":v(()=>c(()=>import("./account-maps.html.981fa0ba.js"),[])),"v-1b0279b9":v(()=>c(()=>import("./data-migration.html.0eb2a254.js"),[])),"v-5afd7935":v(()=>c(()=>import("./debugging-solana-programs.html.a8c7f521.js"),[])),"v-0d9b8586":v(()=>c(()=>import("./feature-parity-testing.html.e02d9a55.js"),[])),"v-5263011e":v(()=>c(()=>import("./get-program-accounts.html.f40aa08d.js"),[])),"v-0f1acff4":v(()=>c(()=>import("./retrying-transactions.html.9deaf6d5.js"),[])),"v-2b8d2a1e":v(()=>c(()=>import("./serialization.html.af19876b.js"),[])),"v-35d91d8d":v(()=>c(()=>import("./index.html.147cb94b.js"),[])),"v-10a6cfe9":v(()=>c(()=>import("./jupiter.html.4afa02f4.js"),[])),"v-4188d7a4":v(()=>c(()=>import("./mango.html.7b1b90fd.js"),[])),"v-5f249c62":v(()=>c(()=>import("./pyth.html.f34a4d6f.js"),[])),"v-049919e7":v(()=>c(()=>import("./react-native.html.8e2cf68d.js"),[])),"v-65f50ba4":v(()=>c(()=>import("./serum.html.20de9b32.js"),[])),"v-6707f6e2":v(()=>c(()=>import("./strata.html.70d377de.js"),[])),"v-85f54918":v(()=>c(()=>import("./switchboard.html.ff24c966.js"),[])),"v-404df745":v(()=>c(()=>import("./web3auth.html.e3fc1127.js"),[])),"v-0ed8daa2":v(()=>c(()=>import("./accounts.html.448c8f1b.js"),[])),"v-3754a87e":v(()=>c(()=>import("./basic-transactions.html.95100180.js"),[])),"v-7ff81144":v(()=>c(()=>import("./keypairs-and-wallets.html.caea0fb1.js"),[])),"v-a2eaafb8":v(()=>c(()=>import("./local-development.html.6e3488ec.js"),[])),"v-7a66f742":v(()=>c(()=>import("./name-service.html.e457c71e.js"),[])),"v-1b97e8fe":v(()=>c(()=>import("./nfts.html.2a267d1f.js"),[])),"v-942a1994":v(()=>c(()=>import("./offline-transactions.html.285b7675.js"),[])),"v-488e49c6":v(()=>c(()=>import("./programs.html.372ac186.js"),[])),"v-a20cd7f4":v(()=>c(()=>import("./staking.html.ff32fca8.js"),[])),"v-26036e04":v(()=>c(()=>import("./token.html.f8b32b64.js"),[])),"v-43987c75":v(()=>c(()=>import("./accounts.html.569b9751.js"),[])),"v-3c24c435":v(()=>c(()=>import("./pdas.html.e8a69463.js"),[])),"v-d8d998e8":v(()=>c(()=>import("./programs.html.f78f6de4.js"),[])),"v-66cde934":v(()=>c(()=>import("./transactions.html.c11549b8.js"),[])),"v-567ec360":v(()=>c(()=>import("./installation.html.ffbc7ac8.js"),[])),"v-3706649a":v(()=>c(()=>import("./404.html.78b930b6.js"),[]))},dm={"v-8daa1a0e":()=>c(()=>import("./index.html.88acc20a.js"),[]).then(({data:e})=>e),"v-6bf54404":()=>c(()=>import("./accounts.html.38770ed8.js"),[]).then(({data:e})=>e),"v-5f0a12cc":()=>c(()=>import("./cpi.html.6cd740cc.js"),[]).then(({data:e})=>e),"v-130ca978":()=>c(()=>import("./pdas.html.86f433ac.js"),[]).then(({data:e})=>e),"v-882009ca":()=>c(()=>import("./programs.html.019b1de0.js"),[]).then(({data:e})=>e),"v-63197375":()=>c(()=>import("./transactions.html.2e85ce0d.js"),[]).then(({data:e})=>e),"v-2d0a87a8":()=>c(()=>import("./index.html.6fc3a0cb.js"),[]).then(({data:e})=>e),"v-2d0a8235":()=>c(()=>import("./index.html.63d0712f.js"),[]).then(({data:e})=>e),"v-4e8563af":()=>c(()=>import("./installation.html.10d7fe9c.js"),[]).then(({data:e})=>e),"v-76b1e9e3":()=>c(()=>import("./account-maps.html.7f566c97.js"),[]).then(({data:e})=>e),"v-6da58eef":()=>c(()=>import("./data-migration.html.0c96e815.js"),[]).then(({data:e})=>e),"v-4684263f":()=>c(()=>import("./debugging-solana-programs.html.43c480ed.js"),[]).then(({data:e})=>e),"v-4740871a":()=>c(()=>import("./feature-parity-testing.html.b11197fa.js"),[]).then(({data:e})=>e),"v-2b9a5458":()=>c(()=>import("./get-program-accounts.html.43c89426.js"),[]).then(({data:e})=>e),"v-5a9d5a10":()=>c(()=>import("./retrying-transactions.html.6a79ffcd.js"),[]).then(({data:e})=>e),"v-2e379628":()=>c(()=>import("./serialization.html.8e1be4b7.js"),[]).then(({data:e})=>e),"v-7e81f36f":()=>c(()=>import("./versioned-transactions.html.47eafff9.js"),[]).then(({data:e})=>e),"v-2d0a8b4a":()=>c(()=>import("./index.html.d2939d6d.js"),[]).then(({data:e})=>e),"v-2d0a94db":()=>c(()=>import("./index.html.e934385c.js"),[]).then(({data:e})=>e),"v-100dc897":()=>c(()=>import("./index.html.081f67f1.js"),[]).then(({data:e})=>e),"v-13513bf3":()=>c(()=>import("./jupiter.html.93e3a081.js"),[]).then(({data:e})=>e),"v-7f12be2e":()=>c(()=>import("./mango.html.924479dc.js"),[]).then(({data:e})=>e),"v-0bf487b4":()=>c(()=>import("./orao-vrf.html.b785628d.js"),[]).then(({data:e})=>e),"v-6bb05bf6":()=>c(()=>import("./pyth.html.033fc713.js"),[]).then(({data:e})=>e),"v-78a2a41d":()=>c(()=>import("./react-native.html.6b3df8c5.js"),[]).then(({data:e})=>e),"v-0a8f60b8":()=>c(()=>import("./serum.html.b2b0fa44.js"),[]).then(({data:e})=>e),"v-402eef45":()=>c(()=>import("./strata.html.7eec772e.js"),[]).then(({data:e})=>e),"v-4d26b27e":()=>c(()=>import("./switchboard.html.48465e15.js"),[]).then(({data:e})=>e),"v-da1de70a":()=>c(()=>import("./web3auth.html.92e98604.js"),[]).then(({data:e})=>e),"v-2d0a9e0f":()=>c(()=>import("./index.html.84352b13.js"),[]).then(({data:e})=>e),"v-6c467d65":()=>c(()=>import("./accounts.html.e4e6faaf.js"),[]).then(({data:e})=>e),"v-70f9aa12":()=>c(()=>import("./basic-transactions.html.660a3a4e.js"),[]).then(({data:e})=>e),"v-4dc29afa":()=>c(()=>import("./keypairs-and-wallets.html.77e957b4.js"),[]).then(({data:e})=>e),"v-10b56a2e":()=>c(()=>import("./local-development.html.a66a151d.js"),[]).then(({data:e})=>e),"v-9eccd210":()=>c(()=>import("./name-service.html.3fcbdad5.js"),[]).then(({data:e})=>e),"v-d2aec298":()=>c(()=>import("./nfts.html.5905d36e.js"),[]).then(({data:e})=>e),"v-f8950628":()=>c(()=>import("./offline-transactions.html.06b84d27.js"),[]).then(({data:e})=>e),"v-877d9708":()=>c(()=>import("./programs.html.3a39cb44.js"),[]).then(({data:e})=>e),"v-26f90ae0":()=>c(()=>import("./staking.html.46023113.js"),[]).then(({data:e})=>e),"v-0d096f0e":()=>c(()=>import("./token.html.48d29609.js"),[]).then(({data:e})=>e),"v-2d0abea2":()=>c(()=>import("./index.html.1a914276.js"),[]).then(({data:e})=>e),"v-2d0abfd8":()=>c(()=>import("./index.html.44b0d9b7.js"),[]).then(({data:e})=>e),"v-2d0ac643":()=>c(()=>import("./index.html.bc355c58.js"),[]).then(({data:e})=>e),"v-2d0ad528":()=>c(()=>import("./index.html.9cc338cd.js"),[]).then(({data:e})=>e),"v-08458c16":()=>c(()=>import("./accounts.html.fc9a7c5a.js"),[]).then(({data:e})=>e),"v-79377c96":()=>c(()=>import("./pdas.html.e450b8ed.js"),[]).then(({data:e})=>e),"v-4bd7f10c":()=>c(()=>import("./programs.html.c37386e2.js"),[]).then(({data:e})=>e),"v-314308e6":()=>c(()=>import("./transactions.html.cc7273b2.js"),[]).then(({data:e})=>e),"v-389f60e0":()=>c(()=>import("./installation.html.84c588eb.js"),[]).then(({data:e})=>e),"v-471a2192":()=>c(()=>import("./account-maps.html.2c69a16b.js"),[]).then(({data:e})=>e),"v-7642d244":()=>c(()=>import("./data-migration.html.5d5702f7.js"),[]).then(({data:e})=>e),"v-6c0a22f0":()=>c(()=>import("./debugging-solana-programs.html.d1a3770c.js"),[]).then(({data:e})=>e),"v-35856562":()=>c(()=>import("./feature-parity-testing.html.19e2bbaa.js"),[]).then(({data:e})=>e),"v-3d8822fa":()=>c(()=>import("./get-program-accounts.html.bd8162fb.js"),[]).then(({data:e})=>e),"v-44b75741":()=>c(()=>import("./retrying-transactions.html.b2a6e828.js"),[]).then(({data:e})=>e),"v-6ad65459":()=>c(()=>import("./serialization.html.3bdc505f.js"),[]).then(({data:e})=>e),"v-3caeb514":()=>c(()=>import("./accounts.html.9e489d77.js"),[]).then(({data:e})=>e),"v-20a8d3e6":()=>c(()=>import("./basic-transactions.html.05f47ad8.js"),[]).then(({data:e})=>e),"v-17bc77ae":()=>c(()=>import("./keypairs-and-wallets.html.bd52e0aa.js"),[]).then(({data:e})=>e),"v-0a613142":()=>c(()=>import("./local-development.html.b76d3d02.js"),[]).then(({data:e})=>e),"v-1db05f27":()=>c(()=>import("./name-service.html.04a7e09f.js"),[]).then(({data:e})=>e),"v-6f8605e3":()=>c(()=>import("./nfts.html.acfd8117.js"),[]).then(({data:e})=>e),"v-2a14a61b":()=>c(()=>import("./offline-transactions.html.b1bf1d38.js"),[]).then(({data:e})=>e),"v-e6ad27aa":()=>c(()=>import("./programs.html.55a34056.js"),[]).then(({data:e})=>e),"v-8d23ddfe":()=>c(()=>import("./staking.html.caff0a8a.js"),[]).then(({data:e})=>e),"v-4fd8edbf":()=>c(()=>import("./token.html.d67112e7.js"),[]).then(({data:e})=>e),"v-8e5be170":()=>c(()=>import("./accounts.html.0afa202e.js"),[]).then(({data:e})=>e),"v-f2328ef0":()=>c(()=>import("./pdas.html.2ca6de13.js"),[]).then(({data:e})=>e),"v-08ccc65f":()=>c(()=>import("./programs.html.737227bf.js"),[]).then(({data:e})=>e),"v-1256fcb9":()=>c(()=>import("./transactions.html.f78fedbc.js"),[]).then(({data:e})=>e),"v-2485abf3":()=>c(()=>import("./installation.html.0b6e50b0.js"),[]).then(({data:e})=>e),"v-1832f5c2":()=>c(()=>import("./account-maps.html.ae4094c6.js"),[]).then(({data:e})=>e),"v-70204b2b":()=>c(()=>import("./data-migration.html.800e226a.js"),[]).then(({data:e})=>e),"v-16deac83":()=>c(()=>import("./debugging-solana-programs.html.8edbc7c0.js"),[]).then(({data:e})=>e),"v-732f06a2":()=>c(()=>import("./feature-parity-testing.html.223015c2.js"),[]).then(({data:e})=>e),"v-22a67510":()=>c(()=>import("./get-program-accounts.html.769423d1.js"),[]).then(({data:e})=>e),"v-309da254":()=>c(()=>import("./retrying-transactions.html.b49a7fa7.js"),[]).then(({data:e})=>e),"v-5796626c":()=>c(()=>import("./serialization.html.2d743db8.js"),[]).then(({data:e})=>e),"v-1bac4a4a":()=>c(()=>import("./index.html.f465b4b8.js"),[]).then(({data:e})=>e),"v-3cb00837":()=>c(()=>import("./jupiter.html.e8544b6c.js"),[]).then(({data:e})=>e),"v-0f7fcb72":()=>c(()=>import("./mango.html.b6c7b10b.js"),[]).then(({data:e})=>e),"v-0e6f43f0":()=>c(()=>import("./orao-vrf.html.b1229ca4.js"),[]).then(({data:e})=>e),"v-d5fbe77e":()=>c(()=>import("./pyth.html.64733ceb.js"),[]).then(({data:e})=>e),"v-0aace259":()=>c(()=>import("./react-native.html.4720ff7b.js"),[]).then(({data:e})=>e),"v-ca072408":()=>c(()=>import("./serum.html.ebcb81e0.js"),[]).then(({data:e})=>e),"v-8538eafe":()=>c(()=>import("./strata.html.894a5ce9.js"),[]).then(({data:e})=>e),"v-5404867c":()=>c(()=>import("./switchboard.html.9889916b.js"),[]).then(({data:e})=>e),"v-d5286e92":()=>c(()=>import("./web3auth.html.8ccbd135.js"),[]).then(({data:e})=>e),"v-2d09cebe":()=>c(()=>import("./accounts.html.945e38f8.js"),[]).then(({data:e})=>e),"v-9ce8299a":()=>c(()=>import("./basic-transactions.html.0fafe6bd.js"),[]).then(({data:e})=>e),"v-4ec78794":()=>c(()=>import("./keypairs-and-wallets.html.61de6722.js"),[]).then(({data:e})=>e),"v-32949b1c":()=>c(()=>import("./local-development.html.1115a589.js"),[]).then(({data:e})=>e),"v-01539798":()=>c(()=>import("./name-service.html.3fd74674.js"),[]).then(({data:e})=>e),"v-6bf79020":()=>c(()=>import("./nfts.html.2be37d95.js"),[]).then(({data:e})=>e),"v-0e8f1e28":()=>c(()=>import("./offline-transactions.html.1cf02fbe.js"),[]).then(({data:e})=>e),"v-3975cfb8":()=>c(()=>import("./programs.html.cebbf111.js"),[]).then(({data:e})=>e),"v-7cf087d4":()=>c(()=>import("./staking.html.4f6e8106.js"),[]).then(({data:e})=>e),"v-4520fd52":()=>c(()=>import("./token.html.0e36c987.js"),[]).then(({data:e})=>e),"v-598bfdda":()=>c(()=>import("./accounts.html.ca784cf3.js"),[]).then(({data:e})=>e),"v-410d47d3":()=>c(()=>import("./pdas.html.336dcdba.js"),[]).then(({data:e})=>e),"v-2334b82a":()=>c(()=>import("./programs.html.f710045a.js"),[]).then(({data:e})=>e),"v-1ee9ddf8":()=>c(()=>import("./transactions.html.9356bb2a.js"),[]).then(({data:e})=>e),"v-4605d97e":()=>c(()=>import("./installation.html.f6599085.js"),[]).then(({data:e})=>e),"v-7e91df34":()=>c(()=>import("./account-maps.html.a30e994d.js"),[]).then(({data:e})=>e),"v-05451800":()=>c(()=>import("./data-migration.html.a840baeb.js"),[]).then(({data:e})=>e),"v-0bb1c6e4":()=>c(()=>import("./debugging-solana-programs.html.1a1e9843.js"),[]).then(({data:e})=>e),"v-5623fef8":()=>c(()=>import("./feature-parity-testing.html.9234e626.js"),[]).then(({data:e})=>e),"v-0af4ea25":()=>c(()=>import("./get-program-accounts.html.98d258d1.js"),[]).then(({data:e})=>e),"v-521dcfdf":()=>c(()=>import("./retrying-transactions.html.259b8c70.js"),[]).then(({data:e})=>e),"v-22564af7":()=>c(()=>import("./serialization.html.a920b8f0.js"),[]).then(({data:e})=>e),"v-77103780":()=>c(()=>import("./versioned-transactions.html.c4762cf6.js"),[]).then(({data:e})=>e),"v-4571fbe6":()=>c(()=>import("./index.html.0bcc3780.js"),[]).then(({data:e})=>e),"v-076ff0c2":()=>c(()=>import("./jupiter.html.466e4669.js"),[]).then(({data:e})=>e),"v-6cb34a86":()=>c(()=>import("./mango.html.70776e15.js"),[]).then(({data:e})=>e),"v-c8a72676":()=>c(()=>import("./orao-vrf.html.5ce1f7c1.js"),[]).then(({data:e})=>e),"v-6976e796":()=>c(()=>import("./pyth.html.9a5120ae.js"),[]).then(({data:e})=>e),"v-1e60cea4":()=>c(()=>import("./react-native.html.e7e69a2a.js"),[]).then(({data:e})=>e),"v-5522fd47":()=>c(()=>import("./serum.html.bc158364.js"),[]).then(({data:e})=>e),"v-480ee496":()=>c(()=>import("./strata.html.3c228f93.js"),[]).then(({data:e})=>e),"v-139f3066":()=>c(()=>import("./switchboard.html.dee9bb14.js"),[]).then(({data:e})=>e),"v-22a8f18c":()=>c(()=>import("./web3auth.html.487e25b6.js"),[]).then(({data:e})=>e),"v-742672b6":()=>c(()=>import("./accounts.html.b2dd049c.js"),[]).then(({data:e})=>e),"v-7fdd21f0":()=>c(()=>import("./basic-transactions.html.a7b08dd4.js"),[]).then(({data:e})=>e),"v-5bd01ecb":()=>c(()=>import("./keypairs-and-wallets.html.04cbd79d.js"),[]).then(({data:e})=>e),"v-0835dffd":()=>c(()=>import("./local-development.html.b5a3cc9b.js"),[]).then(({data:e})=>e),"v-31ec7bc9":()=>c(()=>import("./name-service.html.ce4ae0ce.js"),[]).then(({data:e})=>e),"v-3331e485":()=>c(()=>import("./nfts.html.7516a777.js"),[]).then(({data:e})=>e),"v-dc79fe86":()=>c(()=>import("./offline-transactions.html.8fd7e979.js"),[]).then(({data:e})=>e),"v-77bdac66":()=>c(()=>import("./programs.html.953ebfba.js"),[]).then(({data:e})=>e),"v-3717171f":()=>c(()=>import("./staking.html.1c45d356.js"),[]).then(({data:e})=>e),"v-01a8e35d":()=>c(()=>import("./token.html.fbd48861.js"),[]).then(({data:e})=>e),"v-02e9060d":()=>c(()=>import("./installation.html.659560ce.js"),[]).then(({data:e})=>e),"v-10a285c5":()=>c(()=>import("./account-maps.html.5f8e99d8.js"),[]).then(({data:e})=>e),"v-4ddeba51":()=>c(()=>import("./data-migration.html.52b8fb7b.js"),[]).then(({data:e})=>e),"v-0173699d":()=>c(()=>import("./debugging-solana-programs.html.bca8cf7f.js"),[]).then(({data:e})=>e),"v-971f3456":()=>c(()=>import("./feature-parity-testing.html.559273e4.js"),[]).then(({data:e})=>e),"v-307b2094":()=>c(()=>import("./get-program-accounts.html.917c7c6a.js"),[]).then(({data:e})=>e),"v-0f00fc6e":()=>c(()=>import("./retrying-transactions.html.51722db4.js"),[]).then(({data:e})=>e),"v-5b4b12f4":()=>c(()=>import("./serialization.html.1e543ecb.js"),[]).then(({data:e})=>e),"v-0027c5f5":()=>c(()=>import("./index.html.96afeed1.js"),[]).then(({data:e})=>e),"v-9117c75e":()=>c(()=>import("./jupiter.html.a69ee874.js"),[]).then(({data:e})=>e),"v-d6e3c3e8":()=>c(()=>import("./mango.html.8f1af944.js"),[]).then(({data:e})=>e),"v-2df1fe67":()=>c(()=>import("./pyth.html.f99e7c1c.js"),[]).then(({data:e})=>e),"v-10996302":()=>c(()=>import("./react-native.html.e9a79d40.js"),[]).then(({data:e})=>e),"v-200ac096":()=>c(()=>import("./serum.html.18bd0c8d.js"),[]).then(({data:e})=>e),"v-4bc0e9b2":()=>c(()=>import("./strata.html.8bba2b83.js"),[]).then(({data:e})=>e),"v-6a0633dc":()=>c(()=>import("./switchboard.html.268deb26.js"),[]).then(({data:e})=>e),"v-732a37dd":()=>c(()=>import("./web3auth.html.bf152da7.js"),[]).then(({data:e})=>e),"v-06371947":()=>c(()=>import("./accounts.html.adc63ed0.js"),[]).then(({data:e})=>e),"v-c0d8574e":()=>c(()=>import("./basic-transactions.html.c005de00.js"),[]).then(({data:e})=>e),"v-644e73dc":()=>c(()=>import("./keypairs-and-wallets.html.249e3149.js"),[]).then(({data:e})=>e),"v-75cde6e8":()=>c(()=>import("./local-development.html.33d72e8a.js"),[]).then(({data:e})=>e),"v-673571da":()=>c(()=>import("./name-service.html.c894a74d.js"),[]).then(({data:e})=>e),"v-931308d4":()=>c(()=>import("./nfts.html.fef66637.js"),[]).then(({data:e})=>e),"v-cb7d5464":()=>c(()=>import("./offline-transactions.html.41ad40f9.js"),[]).then(({data:e})=>e),"v-5631d05e":()=>c(()=>import("./programs.html.b57b7fd6.js"),[]).then(({data:e})=>e),"v-01feda6e":()=>c(()=>import("./staking.html.bb940893.js"),[]).then(({data:e})=>e),"v-3211a328":()=>c(()=>import("./token.html.c5c0d562.js"),[]).then(({data:e})=>e),"v-da3cf63c":()=>c(()=>import("./accounts.html.0313f31c.js"),[]).then(({data:e})=>e),"v-0bf50b22":()=>c(()=>import("./pdas.html.c5d8c58d.js"),[]).then(({data:e})=>e),"v-3a47880e":()=>c(()=>import("./programs.html.398d0985.js"),[]).then(({data:e})=>e),"v-73c3d55a":()=>c(()=>import("./transactions.html.789955d2.js"),[]).then(({data:e})=>e),"v-52cd49a4":()=>c(()=>import("./accounts.html.25d1da4d.js"),[]).then(({data:e})=>e),"v-4a4be76e":()=>c(()=>import("./pdas.html.d436a692.js"),[]).then(({data:e})=>e),"v-26941245":()=>c(()=>import("./programs.html.8e390c72.js"),[]).then(({data:e})=>e),"v-2229e59f":()=>c(()=>import("./transactions.html.ae0e0a34.js"),[]).then(({data:e})=>e),"v-e97c194e":()=>c(()=>import("./installation.html.78755c51.js"),[]).then(({data:e})=>e),"v-c5b19a0e":()=>c(()=>import("./account-maps.html.1449aec7.js"),[]).then(({data:e})=>e),"v-68262af6":()=>c(()=>import("./data-migration.html.d42f0ca8.js"),[]).then(({data:e})=>e),"v-a4865e2e":()=>c(()=>import("./debugging-solana-programs.html.5bfbbe91.js"),[]).then(({data:e})=>e),"v-37352209":()=>c(()=>import("./feature-parity-testing.html.144de85a.js"),[]).then(({data:e})=>e),"v-0d30a8ea":()=>c(()=>import("./get-program-accounts.html.3120791e.js"),[]).then(({data:e})=>e),"v-d14c2c8c":()=>c(()=>import("./retrying-transactions.html.7bf63f72.js"),[]).then(({data:e})=>e),"v-5329205c":()=>c(()=>import("./serialization.html.19baa9d0.js"),[]).then(({data:e})=>e),"v-da88730a":()=>c(()=>import("./accounts.html.6bc5bf34.js"),[]).then(({data:e})=>e),"v-2258908d":()=>c(()=>import("./basic-transactions.html.6649f70c.js"),[]).then(({data:e})=>e),"v-48d4f310":()=>c(()=>import("./keypairs-and-wallets.html.ad81e611.js"),[]).then(({data:e})=>e),"v-4d71f9d8":()=>c(()=>import("./local-development.html.f0781937.js"),[]).then(({data:e})=>e),"v-cb0f35e4":()=>c(()=>import("./name-service.html.b4effe44.js"),[]).then(({data:e})=>e),"v-b3ac3a6c":()=>c(()=>import("./nfts.html.57180f5a.js"),[]).then(({data:e})=>e),"v-7ec7d502":()=>c(()=>import("./offline-transactions.html.6a78ad9b.js"),[]).then(({data:e})=>e),"v-3a9304dc":()=>c(()=>import("./programs.html.b41c0d46.js"),[]).then(({data:e})=>e),"v-4055b6ba":()=>c(()=>import("./staking.html.89a43dc2.js"),[]).then(({data:e})=>e),"v-249ea490":()=>c(()=>import("./token.html.4683cbb3.js"),[]).then(({data:e})=>e),"v-3f8c76bb":()=>c(()=>import("./accounts.html.50a23d38.js"),[]).then(({data:e})=>e),"v-310cd17b":()=>c(()=>import("./pdas.html.5971b691.js"),[]).then(({data:e})=>e),"v-e0f1a45c":()=>c(()=>import("./programs.html.4dd8a111.js"),[]).then(({data:e})=>e),"v-5dda72ac":()=>c(()=>import("./transactions.html.d12c3b53.js"),[]).then(({data:e})=>e),"v-c5f91db4":()=>c(()=>import("./installation.html.0916f190.js"),[]).then(({data:e})=>e),"v-e2f8eae8":()=>c(()=>import("./account-maps.html.44488805.js"),[]).then(({data:e})=>e),"v-50dcad50":()=>c(()=>import("./data-migration.html.47e0a19b.js"),[]).then(({data:e})=>e),"v-387ebf94":()=>c(()=>import("./debugging-solana-programs.html.b90ccbbd.js"),[]).then(({data:e})=>e),"v-5da35ddc":()=>c(()=>import("./feature-parity-testing.html.2af02bb0.js"),[]).then(({data:e})=>e),"v-4791bd7d":()=>c(()=>import("./get-program-accounts.html.860edbe4.js"),[]).then(({data:e})=>e),"v-adc930f2":()=>c(()=>import("./retrying-transactions.html.52526203.js"),[]).then(({data:e})=>e),"v-109a0a9f":()=>c(()=>import("./serialization.html.9401658c.js"),[]).then(({data:e})=>e),"v-0074d650":()=>c(()=>import("./versioned-transactions.html.66b49b02.js"),[]).then(({data:e})=>e),"v-18d9f78e":()=>c(()=>import("./index.html.a85cc6a2.js"),[]).then(({data:e})=>e),"v-14989f2c":()=>c(()=>import("./jupiter.html.7c798e83.js"),[]).then(({data:e})=>e),"v-8cb43736":()=>c(()=>import("./mango.html.1d2c7c84.js"),[]).then(({data:e})=>e),"v-67e8ee24":()=>c(()=>import("./pyth.html.2620ca31.js"),[]).then(({data:e})=>e),"v-fe8d3bf4":()=>c(()=>import("./react-native.html.585666c2.js"),[]).then(({data:e})=>e),"v-452286ef":()=>c(()=>import("./serum.html.6b46a49c.js"),[]).then(({data:e})=>e),"v-58008fee":()=>c(()=>import("./strata.html.a9175fcc.js"),[]).then(({data:e})=>e),"v-d087d916":()=>c(()=>import("./switchboard.html.ec4ae728.js"),[]).then(({data:e})=>e),"v-0645b238":()=>c(()=>import("./web3auth.html.0966486b.js"),[]).then(({data:e})=>e),"v-f7cfc3e4":()=>c(()=>import("./accounts.html.dc8ca524.js"),[]).then(({data:e})=>e),"v-48c6cc60":()=>c(()=>import("./basic-transactions.html.4cdcf2ee.js"),[]).then(({data:e})=>e),"v-e6b8f3ba":()=>c(()=>import("./keypairs-and-wallets.html.6da52a07.js"),[]).then(({data:e})=>e),"v-5f3377a5":()=>c(()=>import("./local-development.html.f51b1aee.js"),[]).then(({data:e})=>e),"v-4fe8bb21":()=>c(()=>import("./name-service.html.61d03b32.js"),[]).then(({data:e})=>e),"v-00aefbdd":()=>c(()=>import("./nfts.html.78141b5d.js"),[]).then(({data:e})=>e),"v-7ad32fd6":()=>c(()=>import("./offline-transactions.html.cedd0b42.js"),[]).then(({data:e})=>e),"v-57da55b6":()=>c(()=>import("./programs.html.12ac4236.js"),[]).then(({data:e})=>e),"v-2716a0c7":()=>c(()=>import("./staking.html.8fc974f1.js"),[]).then(({data:e})=>e),"v-386291f6":()=>c(()=>import("./token.html.a2c3a237.js"),[]).then(({data:e})=>e),"v-46a93876":()=>c(()=>import("./accounts.html.07c4a3ad.js"),[]).then(({data:e})=>e),"v-5aefd385":()=>c(()=>import("./pdas.html.7737299f.js"),[]).then(({data:e})=>e),"v-2ca61adc":()=>c(()=>import("./programs.html.b501d38a.js"),[]).then(({data:e})=>e),"v-4847cab6":()=>c(()=>import("./transactions.html.f5d7f074.js"),[]).then(({data:e})=>e),"v-bd0a22a0":()=>c(()=>import("./installation.html.9ee3bdcf.js"),[]).then(({data:e})=>e),"v-bdfe6c7c":()=>c(()=>import("./account-maps.html.97fa12d3.js"),[]).then(({data:e})=>e),"v-3fbbf30e":()=>c(()=>import("./data-migration.html.2f3fdd46.js"),[]).then(({data:e})=>e),"v-846b6e80":()=>c(()=>import("./debugging-solana-programs.html.2e01332a.js"),[]).then(({data:e})=>e),"v-2fc8dcdc":()=>c(()=>import("./feature-parity-testing.html.6f5d0fac.js"),[]).then(({data:e})=>e),"v-aa61329a":()=>c(()=>import("./get-program-accounts.html.24883fcb.js"),[]).then(({data:e})=>e),"v-a4da35de":()=>c(()=>import("./retrying-transactions.html.37e02212.js"),[]).then(({data:e})=>e),"v-4dc4b229":()=>c(()=>import("./serialization.html.dc1446cb.js"),[]).then(({data:e})=>e),"v-d2d54578":()=>c(()=>import("./accounts.html.6569d379.js"),[]).then(({data:e})=>e),"v-5981ffd4":()=>c(()=>import("./basic-transactions.html.c9f0e983.js"),[]).then(({data:e})=>e),"v-59dda459":()=>c(()=>import("./keypairs-and-wallets.html.47c28600.js"),[]).then(({data:e})=>e),"v-63aaf52f":()=>c(()=>import("./local-development.html.f3763675.js"),[]).then(({data:e})=>e),"v-56a76f57":()=>c(()=>import("./name-service.html.a9b8c560.js"),[]).then(({data:e})=>e),"v-41e84613":()=>c(()=>import("./nfts.html.cf00b226.js"),[]).then(({data:e})=>e),"v-e05ef36a":()=>c(()=>import("./offline-transactions.html.9c1ce8f1.js"),[]).then(({data:e})=>e),"v-32dfd74a":()=>c(()=>import("./programs.html.9eb1d5be.js"),[]).then(({data:e})=>e),"v-50f9a2d1":()=>c(()=>import("./staking.html.00ec96e2.js"),[]).then(({data:e})=>e),"v-6c8298e2":()=>c(()=>import("./token.html.f322a148.js"),[]).then(({data:e})=>e),"v-6a35b27a":()=>c(()=>import("./accounts.html.30b0e6b2.js"),[]).then(({data:e})=>e),"v-8e20768c":()=>c(()=>import("./pdas.html.3b24f46f.js"),[]).then(({data:e})=>e),"v-8b9f2cde":()=>c(()=>import("./programs.html.712cf75d.js"),[]).then(({data:e})=>e),"v-55f1b6eb":()=>c(()=>import("./transactions.html.6a6e4f0c.js"),[]).then(({data:e})=>e),"v-274abcb6":()=>c(()=>import("./installation.html.b994e720.js"),[]).then(({data:e})=>e),"v-02feff2d":()=>c(()=>import("./account-maps.html.3a0ee8da.js"),[]).then(({data:e})=>e),"v-1b0279b9":()=>c(()=>import("./data-migration.html.3a47b2d3.js"),[]).then(({data:e})=>e),"v-5afd7935":()=>c(()=>import("./debugging-solana-programs.html.232c34cb.js"),[]).then(({data:e})=>e),"v-0d9b8586":()=>c(()=>import("./feature-parity-testing.html.69ff629a.js"),[]).then(({data:e})=>e),"v-5263011e":()=>c(()=>import("./get-program-accounts.html.e0588315.js"),[]).then(({data:e})=>e),"v-0f1acff4":()=>c(()=>import("./retrying-transactions.html.a0358ba8.js"),[]).then(({data:e})=>e),"v-2b8d2a1e":()=>c(()=>import("./serialization.html.817640af.js"),[]).then(({data:e})=>e),"v-35d91d8d":()=>c(()=>import("./index.html.0c85b258.js"),[]).then(({data:e})=>e),"v-10a6cfe9":()=>c(()=>import("./jupiter.html.c2fdbdaf.js"),[]).then(({data:e})=>e),"v-4188d7a4":()=>c(()=>import("./mango.html.931f8a01.js"),[]).then(({data:e})=>e),"v-5f249c62":()=>c(()=>import("./pyth.html.88ef18a8.js"),[]).then(({data:e})=>e),"v-049919e7":()=>c(()=>import("./react-native.html.7bf57c65.js"),[]).then(({data:e})=>e),"v-65f50ba4":()=>c(()=>import("./serum.html.8079c62c.js"),[]).then(({data:e})=>e),"v-6707f6e2":()=>c(()=>import("./strata.html.4c9e956b.js"),[]).then(({data:e})=>e),"v-85f54918":()=>c(()=>import("./switchboard.html.e55e7630.js"),[]).then(({data:e})=>e),"v-404df745":()=>c(()=>import("./web3auth.html.fde4af14.js"),[]).then(({data:e})=>e),"v-0ed8daa2":()=>c(()=>import("./accounts.html.3f56b028.js"),[]).then(({data:e})=>e),"v-3754a87e":()=>c(()=>import("./basic-transactions.html.31e740e7.js"),[]).then(({data:e})=>e),"v-7ff81144":()=>c(()=>import("./keypairs-and-wallets.html.ad78d040.js"),[]).then(({data:e})=>e),"v-a2eaafb8":()=>c(()=>import("./local-development.html.4fd16255.js"),[]).then(({data:e})=>e),"v-7a66f742":()=>c(()=>import("./name-service.html.a0666392.js"),[]).then(({data:e})=>e),"v-1b97e8fe":()=>c(()=>import("./nfts.html.6f7be66d.js"),[]).then(({data:e})=>e),"v-942a1994":()=>c(()=>import("./offline-transactions.html.6f0a6ca2.js"),[]).then(({data:e})=>e),"v-488e49c6":()=>c(()=>import("./programs.html.615f54c9.js"),[]).then(({data:e})=>e),"v-a20cd7f4":()=>c(()=>import("./staking.html.740e3b00.js"),[]).then(({data:e})=>e),"v-26036e04":()=>c(()=>import("./token.html.a3662525.js"),[]).then(({data:e})=>e),"v-43987c75":()=>c(()=>import("./accounts.html.efa5c970.js"),[]).then(({data:e})=>e),"v-3c24c435":()=>c(()=>import("./pdas.html.c425715e.js"),[]).then(({data:e})=>e),"v-d8d998e8":()=>c(()=>import("./programs.html.de4b5596.js"),[]).then(({data:e})=>e),"v-66cde934":()=>c(()=>import("./transactions.html.d8f9ea08.js"),[]).then(({data:e})=>e),"v-567ec360":()=>c(()=>import("./installation.html.4b980212.js"),[]).then(({data:e})=>e),"v-3706649a":()=>c(()=>import("./404.html.f166316b.js"),[]).then(({data:e})=>e)},kc=Ee(dm),yc=_i({key:"",path:"",title:"",lang:"",frontmatter:{},excerpt:"",headers:[]}),ut=Ee(yc),lr=()=>ut;sl.webpackHot&&(__VUE_HMR_RUNTIME__.updatePageData=e=>{kc.value[e.key]=()=>Promise.resolve(e),e.key===ut.value.key&&(ut.value=e)});const Ec=Symbol(""),hm=()=>{const e=Re(Ec);if(!e)throw new Error("usePageFrontmatter() is called without provider.");return e},wc=Symbol(""),gm=()=>{const e=Re(wc);if(!e)throw new Error("usePageHead() is called without provider.");return e},mm=Symbol(""),Pc=Symbol(""),Sc=()=>{const e=Re(Pc);if(!e)throw new Error("usePageLang() is called without provider.");return e},Fi=Symbol(""),ji=()=>{const e=Re(Fi);if(!e)throw new Error("useRouteLocale() is called without provider.");return e},vm={base:"/",lang:"en-US",title:"Solana Cookbook",description:"",head:[["link",{rel:"icon",href:"/solana_cookbook_lightmode.svg"}],["script",{"data-domain":"solanacookbook.com",src:"https://plausible.io/js/plausible.js"}]],locales:{"/":{lang:"en-US",title:"Solana Cookbook"},"/zh/":{lang:"zh-CN",title:"Solana\u79D8\u7C4D"},"/es/":{lang:"es",title:"Solana Cookbook"},"/de/":{lang:"de-DE",title:"Solana Cookbook"},"/vi/":{lang:"vi-VN",title:"To\xE0n t\u1EADp Solana"},"/th/":{lang:"th-TH",title:"\u0E04\u0E39\u0E48\u0E21\u0E37\u0E2D Solana"},"/fr/":{lang:"fr-FR",title:"Solana Cookbook"},"/id/":{lang:"id-ID",title:"Buku Panduan Solana"},"/kr/":{lang:"kr-KR",title:"Solana Cookbook"},"/tr/":{lang:"tr-TR",title:"Solana Cookbook"}}},Et=Ee(vm),Tc=()=>Et;sl.webpackHot&&(__VUE_HMR_RUNTIME__.updateSiteData=e=>{Et.value=e});const Oc=Symbol(""),W_=()=>{const e=Re(Oc);if(!e)throw new Error("useSiteLocaleData() is called without provider.");return e},pm=Symbol(""),Ni=e=>{let t;e.pageKey?t=e.pageKey:t=lr().value.key;const n=bc[t];return n?ee(n):ee("div","404 Not Found")};Ni.displayName="Content";Ni.props={pageKey:{type:String,required:!1}};const fm={"404":v(()=>c(()=>import("./404.5e9926f4.js"),[])),Layout:v(()=>c(()=>import("./Layout.372a7658.js"),[]))},_m=([e,t,n])=>e==="meta"&&t.name?`${e}.${t.name}`:["title","base"].includes(e)?e:e==="template"&&t.id?`${e}.${t.id}`:JSON.stringify([e,t,n]),bm=e=>{const t=new Set,n=[];return e.forEach(r=>{const l=_m(r);t.has(l)||(t.add(l),n.push(r))}),n},km=e=>/^(https?:)?\/\//.test(e),$_=e=>/^mailto:/.test(e),G_=e=>/^tel:/.test(e),Ac=e=>Object.prototype.toString.call(e)==="[object Object]",ym=e=>e.replace(/\/$/,""),Em=e=>e.replace(/^\//,""),Lc=(e,t)=>{const n=Object.keys(e).sort((r,l)=>{const i=l.split("/").length-r.split("/").length;return i!==0?i:l.length-r.length});for(const r of n)if(t.startsWith(r))return r;return"/"},wm=(e,t="/")=>e.replace(/^(https?:)?\/\/[^/]*/,"").replace(new RegExp(`^${t}`),"/"),Ba=ze({name:"Vuepress",setup(){const e=lr(),t=_e(()=>{let n;if(e.value.path){const r=e.value.frontmatter.layout;be(r)?n=r:n="Layout"}else n="404";return fm[n]||gh(n,!1)});return()=>ee(t.value)}}),At=e=>e,Mi=e=>e,Pm=e=>km(e)?e:`${Tc().value.base}${Em(e)}`,Ft=_n({resolvePageData:async e=>{const t=kc.value[e],n=await(t==null?void 0:t());return n!=null?n:yc},resolvePageFrontmatter:e=>e.frontmatter,resolvePageHead:(e,t,n)=>{const r=be(t.description)?t.description:n.description,l=[...te(t.head)?t.head:[],...n.head,["title",{},e],["meta",{name:"description",content:r}]];return bm(l)},resolvePageHeadTitle:(e,t)=>`${e.title?`${e.title} | `:""}${t.title}`,resolvePageLang:e=>e.lang||"en",resolveRouteLocale:(e,t)=>Lc(e,t),resolveSiteLocaleData:(e,t)=>xe(xe({},e),e.locales[t])});const Sm=ee("svg",{class:"external-link-icon",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",x:"0px",y:"0px",viewBox:"0 0 100 100",width:"15",height:"15"},[ee("path",{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}),ee("polygon",{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"})]),Tm=ze({name:"ExternalLinkIcon",props:{locales:{type:Object,required:!1,default:()=>({})}},setup(e){const t=ji(),n=_e(()=>{var r;return(r=e.locales[t.value])!==null&&r!==void 0?r:{openInNewWindow:"open in new window"}});return()=>ee("span",[Sm,ee("span",{class:"external-link-icon-sr-only"},n.value.openInNewWindow)])}}),Om={"/":{openInNewWindow:"open in new window"},"/zh/":{openInNewWindow:"open in new window"},"/es/":{openInNewWindow:"open in new window"},"/de/":{openInNewWindow:"open in new window"},"/vi/":{openInNewWindow:"open in new window"},"/th/":{openInNewWindow:"open in new window"},"/fr/":{openInNewWindow:"open in new window"},"/id/":{openInNewWindow:"open in new window"},"/tr/":{openInNewWindow:"open in new window"},"/kr/":{openInNewWindow:"open in new window"}};var Am=At(({app:e})=>{e.component("ExternalLinkIcon",ee(Tm,{locales:Om}))});/*! medium-zoom 1.0.6 | MIT License | https://github.com/francoischalifour/medium-zoom */var jt=Object.assign||function(e){for(var t=1;t1&&arguments[1]!==void 0?arguments[1]:{},r=window.Promise||function(A){function H(){}A(H,H)},l=function(A){var H=A.target;if(H===K){g();return}P.indexOf(H)!==-1&&_({target:H})},i=function(){if(!(D||!O.original)){var A=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0;Math.abs(j-A)>L.scrollOffset&&setTimeout(g,150)}},a=function(A){var H=A.key||A.keyCode;(H==="Escape"||H==="Esc"||H===27)&&g()},o=function(){var A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},H=A;if(A.background&&(K.style.background=A.background),A.container&&A.container instanceof Object&&(H.container=jt({},L.container,A.container)),A.template){var Q=yr(A.template)?A.template:document.querySelector(A.template);H.template=Q}return L=jt({},L,H),P.forEach(function(se){se.dispatchEvent(Yt("medium-zoom:update",{detail:{zoom:B}}))}),B},s=function(){var A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return e(jt({},L,A))},u=function(){for(var A=arguments.length,H=Array(A),Q=0;Q0?H.reduce(function(J,re){return[].concat(J,Ka(re))},[]):P;return se.forEach(function(J){J.classList.remove("medium-zoom-image"),J.dispatchEvent(Yt("medium-zoom:detach",{detail:{zoom:B}}))}),P=P.filter(function(J){return se.indexOf(J)===-1}),B},m=function(A,H){var Q=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return P.forEach(function(se){se.addEventListener("medium-zoom:"+A,H,Q)}),T.push({type:"medium-zoom:"+A,listener:H,options:Q}),B},h=function(A,H){var Q=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return P.forEach(function(se){se.removeEventListener("medium-zoom:"+A,H,Q)}),T=T.filter(function(se){return!(se.type==="medium-zoom:"+A&&se.listener.toString()===H.toString())}),B},b=function(){var A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},H=A.target,Q=function(){var J={width:document.documentElement.clientWidth,height:document.documentElement.clientHeight,left:0,top:0,right:0,bottom:0},re=void 0,le=void 0;if(L.container)if(L.container instanceof Object)J=jt({},J,L.container),re=J.width-J.left-J.right-L.margin*2,le=J.height-J.top-J.bottom-L.margin*2;else{var we=yr(L.container)?L.container:document.querySelector(L.container),Te=we.getBoundingClientRect(),Ae=Te.width,Pe=Te.height,Ie=Te.left,He=Te.top;J=jt({},J,{width:Ae,height:Pe,left:Ie,top:He})}re=re||J.width-L.margin*2,le=le||J.height-L.margin*2;var I=O.zoomedHd||O.original,U=Ua(I)?re:I.naturalWidth||re,N=Ua(I)?le:I.naturalHeight||le,q=I.getBoundingClientRect(),ue=q.top,me=q.left,ie=q.width,ne=q.height,p=Math.min(U,re)/ie,y=Math.min(N,le)/ne,S=Math.min(p,y),R=(-me+(re-ie)/2+L.margin+J.left)/S,C=(-ue+(le-ne)/2+L.margin+J.top)/S,x="scale("+S+") translate3d("+R+"px, "+C+"px, 0)";O.zoomed.style.transform=x,O.zoomedHd&&(O.zoomedHd.style.transform=x)};return new r(function(se){if(H&&P.indexOf(H)===-1){se(B);return}var J=function Ae(){D=!1,O.zoomed.removeEventListener("transitionend",Ae),O.original.dispatchEvent(Yt("medium-zoom:opened",{detail:{zoom:B}})),se(B)};if(O.zoomed){se(B);return}if(H)O.original=H;else if(P.length>0){var re=P;O.original=re[0]}else{se(B);return}if(O.original.dispatchEvent(Yt("medium-zoom:open",{detail:{zoom:B}})),j=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,D=!0,O.zoomed=Rm(O.original),document.body.appendChild(K),L.template){var le=yr(L.template)?L.template:document.querySelector(L.template);O.template=document.createElement("div"),O.template.appendChild(le.content.cloneNode(!0)),document.body.appendChild(O.template)}if(document.body.appendChild(O.zoomed),window.requestAnimationFrame(function(){document.body.classList.add("medium-zoom--opened")}),O.original.classList.add("medium-zoom-image--hidden"),O.zoomed.classList.add("medium-zoom-image--opened"),O.zoomed.addEventListener("click",g),O.zoomed.addEventListener("transitionend",J),O.original.getAttribute("data-zoom-src")){O.zoomedHd=O.zoomed.cloneNode(),O.zoomedHd.removeAttribute("srcset"),O.zoomedHd.removeAttribute("sizes"),O.zoomedHd.src=O.zoomed.getAttribute("data-zoom-src"),O.zoomedHd.onerror=function(){clearInterval(we),console.warn("Unable to reach the zoom image target "+O.zoomedHd.src),O.zoomedHd=null,Q()};var we=setInterval(function(){O.zoomedHd.complete&&(clearInterval(we),O.zoomedHd.classList.add("medium-zoom-image--opened"),O.zoomedHd.addEventListener("click",g),document.body.appendChild(O.zoomedHd),Q())},10)}else if(O.original.hasAttribute("srcset")){O.zoomedHd=O.zoomed.cloneNode(),O.zoomedHd.removeAttribute("sizes"),O.zoomedHd.removeAttribute("loading");var Te=O.zoomedHd.addEventListener("load",function(){O.zoomedHd.removeEventListener("load",Te),O.zoomedHd.classList.add("medium-zoom-image--opened"),O.zoomedHd.addEventListener("click",g),document.body.appendChild(O.zoomedHd),Q()})}else Q()})},g=function(){return new r(function(A){if(D||!O.original){A(B);return}var H=function Q(){O.original.classList.remove("medium-zoom-image--hidden"),document.body.removeChild(O.zoomed),O.zoomedHd&&document.body.removeChild(O.zoomedHd),document.body.removeChild(K),O.zoomed.classList.remove("medium-zoom-image--opened"),O.template&&document.body.removeChild(O.template),D=!1,O.zoomed.removeEventListener("transitionend",Q),O.original.dispatchEvent(Yt("medium-zoom:closed",{detail:{zoom:B}})),O.original=null,O.zoomed=null,O.zoomedHd=null,O.template=null,A(B)};D=!0,document.body.classList.remove("medium-zoom--opened"),O.zoomed.style.transform="",O.zoomedHd&&(O.zoomedHd.style.transform=""),O.template&&(O.template.style.transition="opacity 150ms",O.template.style.opacity=0),O.original.dispatchEvent(Yt("medium-zoom:close",{detail:{zoom:B}})),O.zoomed.addEventListener("transitionend",H)})},_=function(){var A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},H=A.target;return O.original?g():b({target:H})},f=function(){return L},k=function(){return P},w=function(){return O.original},P=[],T=[],D=!1,j=0,L=n,O={original:null,zoomed:null,zoomedHd:null,template:null};Object.prototype.toString.call(t)==="[object Object]"?L=t:(t||typeof t=="string")&&u(t),L=jt({margin:0,background:"#fff",scrollOffset:40,container:null,template:null},L);var K=Dm(L.background);document.addEventListener("click",l),document.addEventListener("keyup",a),document.addEventListener("scroll",i),window.addEventListener("resize",g);var B={open:b,close:g,toggle:_,update:o,clone:s,attach:u,detach:d,on:m,off:h,getOptions:f,getImages:k,getZoomedImage:w};return B};function Cm(e,t){t===void 0&&(t={});var n=t.insertAt;if(!(!e||typeof document=="undefined")){var r=document.head||document.getElementsByTagName("head")[0],l=document.createElement("style");l.type="text/css",n==="top"&&r.firstChild?r.insertBefore(l,r.firstChild):r.appendChild(l),l.styleSheet?l.styleSheet.cssText=e:l.appendChild(document.createTextNode(e))}}var xm=".medium-zoom-overlay{position:fixed;top:0;right:0;bottom:0;left:0;opacity:0;transition:opacity .3s;will-change:opacity}.medium-zoom--opened .medium-zoom-overlay{cursor:pointer;cursor:zoom-out;opacity:1}.medium-zoom-image{cursor:pointer;cursor:zoom-in;transition:transform .3s cubic-bezier(.2,0,.2,1)!important}.medium-zoom-image--hidden{visibility:hidden}.medium-zoom-image--opened{position:relative;cursor:pointer;cursor:zoom-out;will-change:transform}";Cm(xm);var Vm=Im;const Fm=Symbol("mediumZoom");const jm=".theme-default-content > img, .theme-default-content :not(a) > img",Nm={},Mm=300;var zm=At(({app:e,router:t})=>{const n=Vm(Nm);n.refresh=(r=jm)=>{n.detach(),n.attach(r)},e.provide(Fm,n),t.afterEach(()=>{setTimeout(()=>n.refresh(),Mm)})});const Hm={logo:"/solana_cookbook_lightmode.svg",logoDark:"/solana_cookbook_darkmode.svg",contributors:!1,algolia:{apiKey:"1831a64a81ffef4f85d5c0aa28cb801f",indexName:"solanacookbook",appId:"QMKSKREFKN",algoliaOptions:{hitsPerPage:10}},locales:{"/":{navbar:[{text:"Contribute",link:"https://github.com/solana-developers/solana-cookbook"},{text:"Integrations",link:"/integrations"}],sidebar:{"/":[{text:"Getting Started",children:["/","/getting-started/installation.md"]},{text:"Core Concepts",children:["/core-concepts/accounts.md","/core-concepts/programs.md","/core-concepts/transactions.md","/core-concepts/pdas.md","/core-concepts/cpi.md"]},{text:"Guides",children:["/guides/get-program-accounts.md","/guides/serialization.md","/guides/data-migration.md","/guides/account-maps.md","/guides/retrying-transactions.md","/guides/debugging-solana-programs.md","/guides/feature-parity-testing.md","/guides/versioned-transactions.md"]},{text:"References",children:["/references/local-development.md","/references/keypairs-and-wallets.md","/references/basic-transactions.md","/references/accounts.md","/references/programs.md","/references/token.md","/references/staking.md","/references/nfts.md","/references/offline-transactions.md","/references/name-service.md"]}],"/integrations":[{text:"Integrations",children:["/integrations","/integrations/serum.md","/integrations/pyth.md","/integrations/switchboard.md","/integrations/mango.md","/integrations/strata.md","/integrations/web3auth.md","/integrations/react-native.md","/integrations/jupiter.md","/integrations/orao-vrf.md"]}]},selectLanguageName:"English"},"/zh/":{selectLanguageName:"\u4E2D\u6587",navbar:[{text:"\u8D21\u732E\u4EE3\u7801",link:"https://github.com/solana-developers/solana-cookbook"}],sidebar:[{text:"\u5F00\u59CB\u4F7F\u7528",children:["/zh/","/zh/getting-started/installation.md"]},{text:"\u6838\u5FC3\u6982\u5FF5",children:["/zh/core-concepts/accounts.md","/zh/core-concepts/programs.md","/zh/core-concepts/transactions.md","/zh/core-concepts/pdas.md"]},{text:"\u6307\u5357",children:[]},{text:"\u53C2\u8003",children:[]}]},"/es/":{selectLanguageName:"Spanish",navbar:[{text:"Contribuir",link:"https://github.com/solana-developers/solana-cookbook"}],sidebar:{"/":[{text:"Primeros pasos",children:["/es/","/es/getting-started/installation.md"]},{text:"Conceptos clave",children:["/es/core-concepts/accounts.md","/es/core-concepts/programs.md","/es/core-concepts/transactions.md","/es/core-concepts/pdas.md"]},{text:"Gu\xEDas",children:["/es/guides/get-program-accounts.md","/es/guides/serialization.md","/es/guides/data-migration.md","/es/guides/account-maps.md","/es/guides/retrying-transactions.md","/es/guides/debugging-solana-programs.md","/es/guides/feature-parity-testing.md"]},{text:"Referencias",children:["/es/references/local-development.md","/es/references/keypairs-and-wallets.md","/es/references/basic-transactions.md","/es/references/accounts.md","/es/references/programs.md","/es/references/token.md","/es/references/staking.md","/es/references/nfts.md","/es/references/offline-transactions.md","/es/references/name-service.md"]}]}},"/de/":{selectLanguageName:"Deutsch",navbar:[{text:"Kontributor",link:"https://github.com/solana-developers/solana-cookbook"},{text:"Integrationen",link:"/de/integrations"}],sidebar:{"/":[{text:"F\xFCr Beginner",children:["/de/","/de/getting-started/installation.md"]},{text:"Fundamentale Konzepte",children:["/de/core-concepts/accounts.md","/de/core-concepts/programs.md","/de/core-concepts/transactions.md","/de/core-concepts/pdas.md"]},{text:"Guides",children:["/de/guides/get-program-accounts.md","/de/guides/serialization.md","/de/guides/data-migration.md","/de/guides/account-maps.md","/de/guides/retrying-transactions.md","/de/guides/debugging-solana-programs.md","/de/guides/feature-parity-testing.md"]},{text:"Referenzen",children:["/de/references/local-development.md","/de/references/keypairs-and-wallets.md","/de/references/basic-transactions.md","/de/references/accounts.md","/de/references/programs.md","/de/references/token.md","/de/references/staking.md","/de/references/nfts.md","/de/references/offline-transactions.md","/de/references/name-service.md"]}],"/de/integrations":[{text:"Integrationen",children:["/de/integrations","/de/integrations/serum.md","/de/integrations/pyth.md","/de/integrations/switchboard.md","/de/integrations/mango.md","/de/integrations/strata.md","/de/integrations/web3auth.md","/de/integrations/react-native.md","/de/integrations/jupiter.md"]}]}},"/vi/":{selectLanguageName:"Ti\u1EBFng Vi\u1EC7t",navbar:[{text:"\u0110\xF3ng g\xF3p",link:"https://github.com/solana-developers/solana-cookbook"},{text:"T\xEDch h\u1EE3p",link:"/vi/integrations"}],sidebar:{"/vi/":[{text:"M\u1EDF \u0111\u1EA7u",children:["/vi/","/vi/getting-started/installation.md"]},{text:"Kh\xE1i ni\u1EC7m c\u0103n b\u1EA3n",children:["/vi/core-concepts/accounts.md","/vi/core-concepts/programs.md","/vi/core-concepts/transactions.md","/vi/core-concepts/pdas.md"]},{text:"H\u01B0\u1EDBng d\u1EABn",children:["/vi/guides/get-program-accounts.md","/vi/guides/serialization.md","/vi/guides/data-migration.md","/vi/guides/account-maps.md","/vi/guides/retrying-transactions.md","/vi/guides/debugging-solana-programs.md","/vi/guides/feature-parity-testing.md"]},{text:"Tham kh\u1EA3o",children:["/vi/references/local-development.md","/vi/references/keypairs-and-wallets.md","/vi/references/basic-transactions.md","/vi/references/accounts.md","/vi/references/programs.md","/vi/references/token.md","/vi/references/staking.md","/vi/references/nfts.md","/vi/references/offline-transactions.md","/vi/references/name-service.md"]}],"/vi/integrations":[{text:"T\xEDch h\u1EE3p",children:["/vi/integrations","/vi/integrations/serum.md","/vi/integrations/pyth.md","/vi/integrations/switchboard.md","/vi/integrations/mango.md","/vi/integrations/strata.md","/vi/integrations/web3auth.md","/vi/integrations/react-native.md","/vi/integrations/jupiter.md"]}]}},"/th/":{selectLanguageName:"\u0E44\u0E17\u0E22",navbar:[{text:"\u0E23\u0E48\u0E27\u0E21\u0E01\u0E31\u0E19\u0E40\u0E02\u0E35\u0E22\u0E19",link:"https://github.com/solana-developers/solana-cookbook"},{text:"\u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19",link:"/th/integrations"}],sidebar:{"/th/":[{text:"\u0E40\u0E23\u0E34\u0E48\u0E21\u0E15\u0E49\u0E19",children:["/th/","/th/getting-started/installation.md"]},{text:"\u0E41\u0E19\u0E27\u0E04\u0E27\u0E32\u0E21\u0E04\u0E34\u0E14\u0E2B\u0E25\u0E31\u0E01",children:["/th/core-concepts/accounts.md","/th/core-concepts/programs.md","/th/core-concepts/transactions.md","/th/core-concepts/pdas.md"]},{text:"\u0E41\u0E19\u0E27\u0E17\u0E32\u0E07",children:["/th/guides/get-program-accounts.md","/th/guides/serialization.md","/th/guides/data-migration.md","/th/guides/account-maps.md","/th/guides/retrying-transactions.md","/th/guides/debugging-solana-programs.md","/th/guides/feature-parity-testing.md","/th/guides/versioned-transactions.md"]},{text:"\u0E2D\u0E49\u0E32\u0E07\u0E2D\u0E34\u0E07",children:["/th/references/local-development.md","/th/references/keypairs-and-wallets.md","/th/references/basic-transactions.md","/th/references/accounts.md","/th/references/programs.md","/th/references/token.md","/th/references/staking.md","/th/references/nfts.md","/th/references/offline-transactions.md","/th/references/name-service.md"]}],"/th/integrations":[{text:"\u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19",children:["/th/integrations","/th/integrations/serum.md","/th/integrations/pyth.md","/th/integrations/switchboard.md","/th/integrations/mango.md","/th/integrations/strata.md","/th/integrations/web3auth.md","/th/integrations/react-native.md","/th/integrations/jupiter.md"]}]}},"/fr/":{selectLanguageName:"Fran\xE7ais",navbar:[{text:"Contribuer",link:"https://github.com/solana-developers/solana-cookbook"},{text:"Int\xE9grations",link:"/fr/integrations"}],sidebar:{"/fr/":[{text:"Pour Commencer",children:["/fr/","/fr/getting-started/installation.md"]},{text:"Concepts Fondamentaux",children:["/fr/core-concepts/accounts.md","/fr/core-concepts/programs.md","/fr/core-concepts/transactions.md","/fr/core-concepts/pdas.md"]},{text:"Guides",children:["/fr/guides/get-program-accounts.md","/fr/guides/serialization.md","/fr/guides/data-migration.md","/fr/guides/account-maps.md","/fr/guides/retrying-transactions.md","/fr/guides/debugging-solana-programs.md","/fr/guides/feature-parity-testing.md"]},{text:"R\xE9f\xE9rences",children:["/fr/references/local-development.md","/fr/references/keypairs-and-wallets.md","/fr/references/basic-transactions.md","/fr/references/accounts.md","/fr/references/programs.md","/fr/references/token.md","/fr/references/staking.md","/fr/references/nfts.md","/fr/references/offline-transactions.md","/fr/references/name-service.md"]}],"/fr/integrations":[{text:"Int\xE9grations",children:["/fr/integrations","/fr/integrations/serum.md","/fr/integrations/pyth.md","/fr/integrations/switchboard.md","/fr/integrations/mango.md","/fr/integrations/strata.md","/fr/integrations/web3auth.md","/fr/integrations/react-native.md","/fr/integrations/jupiter.md"]}]}},"/id/":{selectLanguageName:"Bahasa Indonesia",navbar:[{text:"Kontribusi",link:"https://github.com/solana-developers/solana-cookbook"},{text:"Integrasi",link:"/id/integrations"}],sidebar:{"/":[{text:"Memulai",children:["/id/","/id/getting-started/installation.md"]},{text:"Konsep Utama",children:["/id/core-concepts/accounts.md","/id/core-concepts/programs.md","/id/core-concepts/transactions.md","/id/core-concepts/pdas.md"]},{text:"Panduan",children:["/id/guides/get-program-accounts.md","/id/guides/serialization.md","/id/guides/data-migration.md","/id/guides/account-maps.md","/id/guides/retrying-transactions.md","/id/guides/debugging-solana-programs.md","/id/guides/feature-parity-testing.md"]},{text:"Referensi",children:["/id/references/local-development.md","/id/references/keypairs-and-wallets.md","/id/references/basic-transactions.md","/id/references/accounts.md","/id/references/programs.md","/id/references/token.md","/id/references/staking.md","/id/references/nfts.md","/id/references/offline-transactions.md","/id/references/name-service.md"]}],"/id/integrations":[{text:"Integrasi",children:["/id/integrations","/id/integrations/serum.md","/id/integrations/pyth.md","/id/integrations/switchboard.md","/id/integrations/mango.md","/id/integrations/strata.md","/id/integrations/web3auth.md","/id/integrations/react-native.md","/id/integrations/jupiter.md"]}]}},"/tr/":{selectLanguageName:"T\xFCrk\xE7e",navbar:[{text:"Katk\u0131 yapmak",link:"https://github.com/solana-developers/solana-cookbook"}],sidebar:{"/tr/":[{text:"Ba\u015Flarken",children:["/tr/","/tr/getting-started/installation.md"]},{text:"Temel Kavramlar",children:["/tr/core-concepts/accounts.md","/tr/core-concepts/programs.md","/tr/core-concepts/transactions.md","/tr/core-concepts/pdas.md"]},{text:"K\u0131lavuzlar",children:["/tr/guides/get-program-accounts.md","/tr/guides/serialization.md","/tr/guides/data-migration.md","/tr/guides/account-maps.md","/tr/guides/retrying-transactions.md","/tr/guides/debugging-solana-programs.md","/tr/guides/feature-parity-testing.md"]},{text:"Referanslar",children:["/tr/references/local-development.md","/tr/references/keypairs-and-wallets.md","/tr/references/basic-transactions.md","/tr/references/accounts.md","/tr/references/programs.md","/tr/references/token.md","/tr/references/staking.md","/tr/references/nfts.md","/tr/references/offline-transactions.md","/tr/references/name-service.md"]}]}},"/kr/":{selectLanguageName:"\uD55C\uAD6D\uC5B4",navbar:[{text:"Contribute",link:"https://github.com/solana-developers/solana-cookbook"},{text:"Integrations",link:"/integrations"}],sidebar:{"/":[{text:"Getting Started",children:["/kr/","/kr/getting-started/installation.md"]},{text:"Core Concepts",children:["/kr/core-concepts/accounts.md","/kr/core-concepts/programs.md","/kr/core-concepts/transactions.md","/kr/core-concepts/pdas.md"]},{text:"Guides",children:["/kr/guides/get-program-accounts.md","/kr/guides/serialization.md","/kr/guides/data-migration.md","/kr/guides/account-maps.md","/kr/guides/retrying-transactions.md","/kr/guides/debugging-solana-programs.md","/kr/guides/feature-parity-testing.md"]},{text:"References",children:["/kr/references/local-development.md","/kr/references/keypairs-and-wallets.md","/kr/references/basic-transactions.md","/kr/references/accounts.md","/kr/references/programs.md","/kr/references/token.md","/kr/references/staking.md","/kr/references/nfts.md","/kr/references/offline-transactions.md","/kr/references/name-service.md"]}],"/integrations":[{text:"Integrations",children:["/integrations","/integrations/serum.md","/integrations/pyth.md","/integrations/switchboard.md","/integrations/mango.md","/integrations/strata.md","/integrations/web3auth.md","/integrations/react-native.md","/integrations/jupiter.md"]}]}}},navbar:[],darkMode:!0,repo:null,selectLanguageText:"Languages",selectLanguageAriaLabel:"Select language",sidebar:"auto",sidebarDepth:2,editLink:!0,editLinkText:"Edit this page",lastUpdated:!0,lastUpdatedText:"Last Updated",contributorsText:"Contributors",notFound:["There's nothing here.","How did we get here?","That's a Four-Oh-Four.","Looks like we've got some broken links."],backToHome:"Take me home",openInNewWindow:"open in new window",toggleDarkMode:"toggle dark mode",toggleSidebar:"toggle sidebar"},Dc=Ee(Hm),Bm=()=>Dc;sl.webpackHot&&(__VUE_HMR_RUNTIME__.updateThemeData=e=>{Dc.value=e});const Rc=Symbol(""),Um=()=>{const e=Re(Rc);if(!e)throw new Error("useThemeLocaleData() is called without provider.");return e},Km=(e,t)=>{var n;return xe(xe({},e),(n=e.locales)===null||n===void 0?void 0:n[t])};var qm=At(({app:e})=>{const t=Bm(),n=e._context.provides[Fi],r=_e(()=>Km(t.value,n.value));e.provide(Rc,r),Object.defineProperties(e.config.globalProperties,{$theme:{get(){return t.value}},$themeLocale:{get(){return r.value}}})});const Wm=ze({props:{type:{type:String,required:!1,default:"tip"},text:{type:String,required:!1,default:""},vertical:{type:String,required:!1,default:void 0}},setup(e){return(t,n)=>(nr(),Ai("span",{class:wt(["badge",e.type]),style:Yr({verticalAlign:e.vertical})},[jr(t.$slots,"default",{},()=>[Li(xu(e.text),1)])],6))}});var $m=ze({name:"CodeGroup",setup(e,{slots:t}){const n=Ee(-1),r=Ee([]),l=(o=n.value)=>{o{o>0?n.value=o-1:n.value=r.value.length-1,r.value[n.value].focus()},a=(o,s)=>{o.key===" "||o.key==="Enter"?(o.preventDefault(),n.value=s):o.key==="ArrowRight"?(o.preventDefault(),l(s)):o.key==="ArrowLeft"&&(o.preventDefault(),i(s))};return()=>{var o;const s=(((o=t.default)===null||o===void 0?void 0:o.call(t))||[]).filter(u=>u.type.name==="CodeGroupItem").map(u=>(u.props===null&&(u.props={}),u));return s.length===0?null:(n.value<0||n.value>s.length-1?(n.value=s.findIndex(u=>u.props.active===""||u.props.active===!0),n.value===-1&&(n.value=0)):s.forEach((u,d)=>{u.props.active=d===n.value}),ee("div",{class:"code-group"},[ee("div",{class:"code-group__nav"},ee("ul",{class:"code-group__ul"},s.map((u,d)=>{const m=d===n.value;return ee("li",{class:"code-group__li"},ee("button",{ref:h=>{h&&(r.value[d]=h)},class:{"code-group__nav-tab":!0,"code-group__nav-tab-active":m},ariaPressed:m,ariaExpanded:m,onClick:()=>n.value=d,onKeydown:h=>a(h,d)},u.props.title))}))),s]))}}});const Gm=["aria-selected"],Jm=ze({name:"CodeGroupItem"}),Ym=ze(Lt(xe({},Jm),{props:{title:{type:String,required:!0},active:{type:Boolean,required:!1,default:!1}},setup(e){return(t,n)=>(nr(),Ai("div",{class:wt(["code-group-item",{"code-group-item__active":e.active}]),"aria-selected":e.active},[jr(t.$slots,"default")],10,Gm))}}));function Ic(e){return Ku()?(qu(e),!0):!1}const ir=typeof window!="undefined",Qm=e=>typeof e=="string",yl=()=>{};function Zm(e,t){function n(...r){e(()=>t.apply(this,r),{fn:t,thisArg:this,args:r})}return n}const Xm=e=>e();var qa=Object.getOwnPropertySymbols,ev=Object.prototype.hasOwnProperty,tv=Object.prototype.propertyIsEnumerable,nv=(e,t)=>{var n={};for(var r in e)ev.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&qa)for(var r of qa(e))t.indexOf(r)<0&&tv.call(e,r)&&(n[r]=e[r]);return n};function rv(e,t,n={}){const r=n,{eventFilter:l=Xm}=r,i=nv(r,["eventFilter"]);return et(e,Zm(l,t),i)}function lv(e,t=!0){rc()?tt(e):t?e():Ei(e)}const Hr=ir?window:void 0;ir&&window.document;ir&&window.navigator;ir&&window.location;function iv(...e){let t,n,r,l;if(Qm(e[0])?([n,r,l]=e,t=Hr):[t,n,r,l]=e,!t)return yl;let i=yl;const a=et(()=>Bt(t),s=>{i(),s&&(s.addEventListener(n,r,l),i=()=>{s.removeEventListener(n,r,l),i=yl})},{immediate:!0,flush:"post"}),o=()=>{a(),i()};return Ic(o),o}function av(e,t={}){const{window:n=Hr}=t;let r;const l=Ee(!1),i=()=>{!n||(r||(r=n.matchMedia(e)),l.value=r.matches)};return lv(()=>{i(),r&&("addEventListener"in r?r.addEventListener("change",i):r.addListener(i),Ic(()=>{"removeEventListener"in i?r.removeEventListener("change",i):r.removeListener(i)}))}),l}const Wl=typeof globalThis!="undefined"?globalThis:typeof window!="undefined"?window:typeof global!="undefined"?global:typeof self!="undefined"?self:{},$l="__vueuse_ssr_handlers__";Wl[$l]=Wl[$l]||{};const ov=Wl[$l];function sv(e,t){return ov[e]||t}function cv(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"||Array.isArray(e)?"object":Number.isNaN(e)?"any":"number"}const uv={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))}};function dv(e,t,n,r={}){var l;const{flush:i="pre",deep:a=!0,listenToStorageChanges:o=!0,writeDefaults:s=!0,shallow:u,window:d=Hr,eventFilter:m,onError:h=w=>{console.error(w)}}=r,b=Bt(t),g=cv(b),_=(u?Os:Ee)(t),f=(l=r.serializer)!=null?l:uv[g];if(!n)try{n=sv("getDefaultStorage",()=>{var w;return(w=Hr)==null?void 0:w.localStorage})()}catch(w){h(w)}function k(w){if(!(!n||w&&w.key!==e))try{const P=w?w.newValue:n.getItem(e);P==null?(_.value=b,s&&b!==null&&n.setItem(e,f.write(b))):typeof P!="string"?_.value=P:_.value=f.read(P)}catch(P){h(P)}}return k(),d&&o&&iv(d,"storage",w=>setTimeout(()=>k(w),0)),n&&rv(_,()=>{try{_.value==null?n.removeItem(e):n.setItem(e,f.write(_.value))}catch(w){h(w)}},{flush:i,deep:a,eventFilter:m}),_}function hv(e){return av("(prefers-color-scheme: dark)",e)}var Wa,$a;ir&&(window==null?void 0:window.navigator)&&((Wa=window==null?void 0:window.navigator)==null?void 0:Wa.platform)&&/iP(ad|hone|od)/.test(($a=window==null?void 0:window.navigator)==null?void 0:$a.platform);var gv=Object.defineProperty,Ga=Object.getOwnPropertySymbols,mv=Object.prototype.hasOwnProperty,vv=Object.prototype.propertyIsEnumerable,Ja=(e,t,n)=>t in e?gv(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,pv=(e,t)=>{for(var n in t||(t={}))mv.call(t,n)&&Ja(e,n,t[n]);if(Ga)for(var n of Ga(t))vv.call(t,n)&&Ja(e,n,t[n]);return e};const fv={top:0,left:0,bottom:0,right:0,height:0,width:0};pv({text:""},fv);const Cc=Symbol(""),J_=()=>{const e=Re(Cc);if(!e)throw new Error("useDarkMode() is called without provider.");return e},_v=()=>{const e=jc(),t=hv(),n=dv("vuepress-color-scheme","auto"),r=_e({get(){return e.value.darkMode?n.value==="auto"?t.value:n.value==="dark":!1},set(l){l===t.value?n.value="auto":n.value=l?"dark":"light"}});Ut(Cc,r),bv(r)},bv=e=>{const t=(n=e.value)=>{const r=window==null?void 0:window.document.querySelector("html");r==null||r.classList.toggle("dark",n)};tt(()=>{et(e,t,{immediate:!0})}),Ti(()=>t())},xc=(...e)=>{const n=rr().resolve(...e),r=n.matched[n.matched.length-1];if(!(r!=null&&r.redirect))return n;const{redirect:l}=r,i=ae(l)?l(n):l,a=be(i)?{path:i}:i;return xc(xe({hash:n.hash,query:n.query,params:n.params},a))},kv=e=>{const t=xc(e);return{text:t.meta.title||e,link:t.name==="404"?e:t.fullPath}};let El=null,Pn=null;const yv={wait:()=>El,pending:()=>{El=new Promise(e=>Pn=e)},resolve:()=>{Pn==null||Pn(),El=null,Pn=null}},Ev=()=>yv,Vc=Symbol("sidebarItems"),Y_=()=>{const e=Re(Vc);if(!e)throw new Error("useSidebarItems() is called without provider.");return e},wv=()=>{const e=jc(),t=hm(),n=_e(()=>Pv(t.value,e.value));Ut(Vc,n)},Pv=(e,t)=>{var n,r,l,i;const a=(r=(n=e.sidebar)!==null&&n!==void 0?n:t.sidebar)!==null&&r!==void 0?r:"auto",o=(i=(l=e.sidebarDepth)!==null&&l!==void 0?l:t.sidebarDepth)!==null&&i!==void 0?i:2;return e.home||a===!1?[]:a==="auto"?Tv(o):te(a)?Fc(a,o):Ac(a)?Ov(a,o):[]},Sv=(e,t)=>({text:e.title,link:`#${e.slug}`,children:zi(e.children,t)}),zi=(e,t)=>t>0?e.map(n=>Sv(n,t-1)):[],Tv=e=>{const t=lr();return[{text:t.value.title,children:zi(t.value.headers,e)}]},Fc=(e,t)=>{const n=Vi(),r=lr(),l=i=>{var a;let o;if(be(i)?o=kv(i):o=i,o.children)return Lt(xe({},o),{children:o.children.map(s=>l(s))});if(o.link===n.path){const s=((a=r.value.headers[0])===null||a===void 0?void 0:a.level)===1?r.value.headers[0].children:r.value.headers;return Lt(xe({},o),{children:zi(s,t)})}return o};return e.map(i=>l(i))},Ov=(e,t)=>{var n;const r=Vi(),l=Lc(e,r.path),i=(n=e[l])!==null&&n!==void 0?n:[];return Fc(i,t)},jc=()=>Um();var Av=At(({app:e,router:t})=>{e.component("Badge",Wm),e.component("CodeGroup",$m),e.component("CodeGroupItem",Ym),e.component("NavbarSearch",()=>{const r=e.component("Docsearch")||e.component("SearchBox");return r?ee(r):null});const n=t.options.scrollBehavior;t.options.scrollBehavior=async(...r)=>(await Ev().wait(),n(...r))});const Lv=e=>{if(window.dataLayer&&window.gtag)return;const t=document.createElement("script");t.src=`https://www.googletagmanager.com/gtag/js?id=${e}`,t.async=!0,document.head.appendChild(t),window.dataLayer=window.dataLayer||[],window.gtag=function(){dataLayer.push(arguments)},gtag("js",new Date),gtag("config",e)},Dv="UA-213843360-1";var Rv=At(()=>{Lv(Dv)});const Iv=({input:e,hotKeys:t})=>{const n=r=>{!e.value||t.value.length===0||r.target===document.body&&t.value.includes(r.key)&&(e.value.focus(),r.preventDefault())};tt(()=>{document.addEventListener("keydown",n)}),nl(()=>{document.removeEventListener("keydown",n)})},Cv=[{title:"Cooking with Solana",headers:[{level:2,title:"Contributing",slug:"contributing",children:[]},{level:2,title:"How to Read the Cookbook",slug:"how-to-read-the-cookbook",children:[]}],path:"/",pathLocale:"/",extraFields:[]},{title:"Accounts",headers:[{level:2,title:"Facts",slug:"facts",children:[]},{level:2,title:"Deep Dive",slug:"deep-dive",children:[{level:3,title:"Account Model",slug:"account-model",children:[]},{level:3,title:"Rent",slug:"rent",children:[]}]},{level:2,title:"Other Resources",slug:"other-resources",children:[{level:3,title:"Credit",slug:"credit",children:[]}]}],path:"/core-concepts/accounts.html",pathLocale:"/",extraFields:[]},{title:"Cross Program Invocations (CPIs)",headers:[{level:2,title:"Facts",slug:"facts",children:[]},{level:2,title:"Deep Dive",slug:"deep-dive",children:[{level:3,title:"CPI with\xA0invoke",slug:"cpi-with-invoke",children:[]},{level:3,title:"CPI with\xA0invoke_signed",slug:"cpi-with-invoke-signed",children:[]},{level:3,title:"CPI Instruction",slug:"cpi-instruction",children:[]},{level:3,title:"CPI AccountInfo",slug:"cpi-accountinfo",children:[]}]},{level:2,title:"Other Resources",slug:"other-resources",children:[]}],path:"/core-concepts/cpi.html",pathLocale:"/",extraFields:[]},{title:"Program Derived Addresses (PDAs)",headers:[{level:2,title:"Facts",slug:"facts",children:[]},{level:2,title:"Deep Dive",slug:"deep-dive",children:[{level:3,title:"Generating PDAs",slug:"generating-pdas",children:[]},{level:3,title:"Interacting with PDAs",slug:"interacting-with-pdas",children:[]}]},{level:2,title:"Other Resources",slug:"other-resources",children:[]}],path:"/core-concepts/pdas.html",pathLocale:"/",extraFields:[]},{title:"Programs",headers:[{level:2,title:"Facts",slug:"facts",children:[]},{level:2,title:"Deep Dive",slug:"deep-dive",children:[{level:3,title:"Native Programs & The Solana Program Library (SPL)",slug:"native-programs-the-solana-program-library-spl",children:[]},{level:3,title:"Writing Programs",slug:"writing-programs",children:[]},{level:3,title:"Deploying Programs",slug:"deploying-programs",children:[]}]},{level:2,title:"Other Resources",slug:"other-resources",children:[]}],path:"/core-concepts/programs.html",pathLocale:"/",extraFields:[]},{title:"Transactions",headers:[{level:2,title:"Facts",slug:"facts",children:[]},{level:2,title:"Deep Dive",slug:"deep-dive",children:[{level:3,title:"Fees",slug:"fees",children:[]}]},{level:2,title:"Other Resources",slug:"other-resources",children:[]}],path:"/core-concepts/transactions.html",pathLocale:"/",extraFields:[]},{title:"Libro de recetas de Solana",headers:[{level:2,title:"Contribuyendo",slug:"contribuyendo",children:[]},{level:2,title:"Como Leer el Cookbook",slug:"como-leer-el-cookbook",children:[]}],path:"/es/",pathLocale:"/es/",extraFields:[]},{title:"Kochen mit Solana",headers:[{level:2,title:"Beitragen",slug:"beitragen",children:[]},{level:2,title:"Wie man das Kochbuch liest",slug:"wie-man-das-kochbuch-liest",children:[]}],path:"/de/",pathLocale:"/de/",extraFields:[]},{title:"Installation",headers:[{level:2,title:"Install Web3.js",slug:"install-web3-js",children:[{level:3,title:"Web3.js",slug:"web3-js",children:[]},{level:3,title:"SPL-Token",slug:"spl-token",children:[]},{level:3,title:"Wallet-Adapter",slug:"wallet-adapter",children:[]}]},{level:2,title:"Install Rust",slug:"install-rust",children:[]},{level:2,title:"Install CLI",slug:"install-cli",children:[{level:3,title:"macOS & Linux",slug:"macos-linux",children:[]},{level:3,title:"Windows",slug:"windows",children:[]},{level:3,title:"Build From Source",slug:"build-from-source",children:[]}]}],path:"/getting-started/installation.html",pathLocale:"/",extraFields:[]},{title:"Account Maps",headers:[{level:2,title:"Deriving PDAs",slug:"deriving-pdas",children:[]},{level:2,title:"Single Map Account",slug:"single-map-account",children:[]}],path:"/guides/account-maps.html",pathLocale:"/",extraFields:[]},{title:"Migrating Program Data Accounts",headers:[{level:2,title:"How can you migrate a program's data accounts?",slug:"how-can-you-migrate-a-program-s-data-accounts",children:[]},{level:2,title:"Scenario",slug:"scenario",children:[]},{level:2,title:"Upgrading the Account",slug:"upgrading-the-account",children:[{level:3,title:"1. Add account conversion logic",slug:"_1-add-account-conversion-logic",children:[]}]},{level:2,title:"Resources",slug:"resources",children:[]}],path:"/guides/data-migration.html",pathLocale:"/",extraFields:[]},{title:"Debugging Solana Programs",headers:[{level:2,title:"Facts",slug:"facts",children:[]},{level:2,title:"Runtime Testing and Debugging in editor",slug:"runtime-testing-and-debugging-in-editor",children:[]},{level:2,title:"Local Validator Node Testing in editor",slug:"local-validator-node-testing-in-editor",children:[]},{level:2,title:"Local Validator Node Testing from Client Apps",slug:"local-validator-node-testing-from-client-apps",children:[]},{level:2,title:"Resources",slug:"resources",children:[]}],path:"/guides/debugging-solana-programs.html",pathLocale:"/",extraFields:[]},{title:"Feature Parity Testing",headers:[{level:2,title:"Facts",slug:"facts",children:[]},{level:2,title:"Scenario",slug:"scenario",children:[]},{level:2,title:"Feature Status",slug:"feature-status",children:[]},{level:2,title:"Parity Testing",slug:"parity-testing",children:[]},{level:2,title:"Simple Demonstration",slug:"simple-demonstration",children:[{level:3,title:"All features activated",slug:"all-features-activated",children:[]},{level:3,title:"Selective features deactivated",slug:"selective-features-deactivated",children:[]}]},{level:2,title:"Full Parity Testing",slug:"full-parity-testing",children:[]},{level:2,title:"Full Parity Testing Programmatically",slug:"full-parity-testing-programmatically",children:[]},{level:2,title:"Resources",slug:"resources",children:[]}],path:"/guides/feature-parity-testing.html",pathLocale:"/",extraFields:[]},{title:"Get Program Accounts",headers:[{level:2,title:"Facts",slug:"facts",children:[]},{level:2,title:"Deep Dive",slug:"deep-dive",children:[{level:3,title:"filters",slug:"filters",children:[]},{level:3,title:"dataSlice",slug:"dataslice",children:[]}]},{level:2,title:"Other Resources",slug:"other-resources",children:[]}],path:"/guides/get-program-accounts.html",pathLocale:"/",extraFields:[]},{title:"Retrying Transactions",headers:[{level:2,title:"Facts",slug:"facts",children:[]},{level:2,title:"The Journey of a Transaction",slug:"the-journey-of-a-transaction",children:[{level:3,title:"How Clients Submit Transactions",slug:"how-clients-submit-transactions",children:[]},{level:3,title:"How RPC Nodes Broadcast Transactions",slug:"how-rpc-nodes-broadcast-transactions",children:[]}]},{level:2,title:"How Transactions Get Dropped",slug:"how-transactions-get-dropped",children:[{level:3,title:"Before a transaction is processed",slug:"before-a-transaction-is-processed",children:[]},{level:3,title:"After a transaction is processed and before it is finalized",slug:"after-a-transaction-is-processed-and-before-it-is-finalized",children:[]}]},{level:2,title:"Handling Dropped Transactions",slug:"handling-dropped-transactions",children:[{level:3,title:"An In-Depth Look at sendTransaction",slug:"an-in-depth-look-at-sendtransaction",children:[]}]},{level:2,title:"Customizing Rebroadcast Logic",slug:"customizing-rebroadcast-logic",children:[{level:3,title:"The Cost of Skipping Preflight",slug:"the-cost-of-skipping-preflight",children:[]},{level:3,title:"When to Re-Sign Transactions",slug:"when-to-re-sign-transactions",children:[]}]},{level:2,title:"Acknowledgements",slug:"acknowledgements",children:[]}],path:"/guides/retrying-transactions.html",pathLocale:"/",extraFields:[]},{title:"Serializing Data",headers:[{level:2,title:"Setting up for Borsh Serialization",slug:"setting-up-for-borsh-serialization",children:[]},{level:2,title:"How to serialize instruction data on the client",slug:"how-to-serialize-instruction-data-on-the-client",children:[]},{level:2,title:"How to deserialize instruction data on the program",slug:"how-to-deserialize-instruction-data-on-the-program",children:[]},{level:2,title:"How to serialize account data on the program",slug:"how-to-serialize-account-data-on-the-program",children:[{level:3,title:"Pack",slug:"pack",children:[]},{level:3,title:"Serialization/Deserialization",slug:"serialization-deserialization",children:[]},{level:3,title:"Usage",slug:"usage",children:[]}]},{level:2,title:"How to deserialize account data on the client",slug:"how-to-deserialize-account-data-on-the-client",children:[]},{level:2,title:"Common Solana TS/JS Mappings",slug:"common-solana-ts-js-mappings",children:[]},{level:2,title:"Advanced Constructs",slug:"advanced-constructs",children:[{level:3,title:"COption",slug:"coption",children:[]}]},{level:2,title:"Resources",slug:"resources",children:[]}],path:"/guides/serialization.html",pathLocale:"/",extraFields:[]},{title:"Versioned Transactions",headers:[{level:2,title:"Facts",slug:"facts",children:[]},{level:2,title:"Legacy Transaction",slug:"legacy-transaction",children:[]},{level:2,title:"Legacy Message",slug:"legacy-message",children:[{level:3,title:"Header",slug:"header",children:[]},{level:3,title:"Compact-array of account addresses",slug:"compact-array-of-account-addresses",children:[]},{level:3,title:"Compact array of instructions",slug:"compact-array-of-instructions",children:[]}]},{level:2,title:"Issues with Legacy Transactions",slug:"issues-with-legacy-transactions",children:[]},{level:2,title:"Address Lookup Tables (LUT)",slug:"address-lookup-tables-lut",children:[]},{level:2,title:"Versioned Transactions: TransactionV0",slug:"versioned-transactions-transactionv0",children:[]},{level:2,title:"MessageV0",slug:"messagev0",children:[{level:3,title:"Compact array of address table lookups",slug:"compact-array-of-address-table-lookups",children:[]},{level:3,title:"Compact array of instructions",slug:"compact-array-of-instructions-1",children:[]}]},{level:2,title:"RPC Changes",slug:"rpc-changes",children:[]},{level:2,title:"Other Resources",slug:"other-resources",children:[]},{level:2,title:"References",slug:"references",children:[]}],path:"/guides/versioned-transactions.html",pathLocale:"/",extraFields:[]},{title:"Solana Cookbook",headers:[{level:2,title:"Contribution",slug:"contribution",children:[]},{level:2,title:"Comment lire le Cookbook",slug:"comment-lire-le-cookbook",children:[]}],path:"/fr/",pathLocale:"/fr/",extraFields:[]},{title:"Buku Panduan Solana",headers:[{level:2,title:"Cara untuk berkontribusi",slug:"cara-untuk-berkontribusi",children:[]},{level:2,title:"Cara untuk membaca Buku Panduan",slug:"cara-untuk-membaca-buku-panduan",children:[]}],path:"/id/",pathLocale:"/id/",extraFields:[]},{title:"Getting Started",headers:[{level:2,title:"Composability is Key",slug:"composability-is-key",children:[]},{level:2,title:"Contributing",slug:"contributing",children:[]}],path:"/integrations/",pathLocale:"/",extraFields:[]},{title:"Jupiter",headers:[{level:3,title:"Installation",slug:"installation",children:[]},{level:3,title:"Fetching Token list from Jupiter",slug:"fetching-token-list-from-jupiter",children:[]},{level:3,title:"Loading the Jupiter instance",slug:"loading-the-jupiter-instance",children:[]},{level:3,title:"Getting the RouteMap",slug:"getting-the-routemap",children:[]},{level:3,title:"Getting the routes for given Input and Output token",slug:"getting-the-routes-for-given-input-and-output-token",children:[]},{level:3,title:"Execute the Token Swap",slug:"execute-the-token-swap",children:[]},{level:2,title:"How to use Jupiter in a React Application",slug:"how-to-use-jupiter-in-a-react-application",children:[{level:3,title:"Installation",slug:"installation-1",children:[]},{level:3,title:"Adding the Provider",slug:"adding-the-provider",children:[]},{level:3,title:"Fetching the List of Tokens",slug:"fetching-the-list-of-tokens",children:[]},{level:3,title:"Setting up the State",slug:"setting-up-the-state",children:[]},{level:3,title:"Using the useJupiter react hook",slug:"using-the-usejupiter-react-hook",children:[]},{level:3,title:"Performing the Swap",slug:"performing-the-swap",children:[]}]},{level:2,title:"How to use Jupiter API",slug:"how-to-use-jupiter-api",children:[{level:3,title:"Installation",slug:"installation-2",children:[]},{level:3,title:"Getting the Route Map",slug:"getting-the-route-map",children:[]},{level:3,title:"Getting the Serialized Transaction to perform Swap",slug:"getting-the-serialized-transaction-to-perform-swap",children:[]},{level:3,title:"Executing the Swap Transaction",slug:"executing-the-swap-transaction",children:[]}]},{level:2,title:"Other Resources",slug:"other-resources",children:[]}],path:"/integrations/jupiter.html",pathLocale:"/",extraFields:[]},{title:"Mango Markets",headers:[{level:2,title:"How to get a Mango Group",slug:"how-to-get-a-mango-group",children:[]},{level:2,title:"How to create a Mango Account",slug:"how-to-create-a-mango-account",children:[]},{level:2,title:"How to deposit USDC into a Mango Account",slug:"how-to-deposit-usdc-into-a-mango-account",children:[]},{level:2,title:"How to place a spot order",slug:"how-to-place-a-spot-order",children:[]},{level:2,title:"How to load bids",slug:"how-to-load-bids",children:[]},{level:2,title:"How to load asks",slug:"how-to-load-asks",children:[]},{level:2,title:"Other Resources",slug:"other-resources",children:[]}],path:"/integrations/mango.html",pathLocale:"/",extraFields:[]},{title:"ORAO VRF",headers:[{level:2,title:"Basic usage scenario",slug:"basic-usage-scenario",children:[]},{level:2,title:"SDKs",slug:"sdks",children:[]},{level:2,title:"Anatomy of a randomness request",slug:"anatomy-of-a-randomness-request",children:[]},{level:2,title:"Anatomy of a VRF configuration",slug:"anatomy-of-a-vrf-configuration",children:[]},{level:2,title:"Rust-native example",slug:"rust-native-example",children:[{level:3,title:"1. Setup the connection",slug:"_1-setup-the-connection",children:[]},{level:3,title:"2. Create a request",slug:"_2-create-a-request",children:[]},{level:3,title:"3. Wait for fulfillment",slug:"_3-wait-for-fulfillment",children:[]}]},{level:2,title:"CPI Example",slug:"cpi-example",children:[{level:3,title:"1. Create the contract",slug:"_1-create-the-contract",children:[]},{level:3,title:"2. Collect the necessary accounts",slug:"_2-collect-the-necessary-accounts",children:[]},{level:3,title:"3. Perform a CPI call",slug:"_3-perform-a-cpi-call",children:[]},{level:3,title:"4. Use the fulfilled randomness",slug:"_4-use-the-fulfilled-randomness",children:[]}]}],path:"/integrations/orao-vrf.html",pathLocale:"/",extraFields:[]},{title:"Pyth",headers:[{level:2,title:"How to use Pyth in Client",slug:"how-to-use-pyth-in-client",children:[]},{level:2,title:"How to use Pyth in Anchor",slug:"how-to-use-pyth-in-anchor",children:[]},{level:2,title:"Other Resources",slug:"other-resources",children:[]}],path:"/integrations/pyth.html",pathLocale:"/",extraFields:[]},{title:"React Native",headers:[{level:2,title:"How to use @solana/web3.js in a React Native app",slug:"how-to-use-solana-web3-js-in-a-react-native-app",children:[{level:3,title:"Create a new app",slug:"create-a-new-app",children:[]},{level:3,title:"Install dependencies",slug:"install-dependencies",children:[]},{level:3,title:"Patch Babel to use the Hermes transforms",slug:"patch-babel-to-use-the-hermes-transforms",children:[]},{level:3,title:"Update index.js",slug:"update-index-js",children:[]},{level:3,title:"Update App.tsx",slug:"update-app-tsx",children:[]},{level:3,title:"[iOS only] Install cocoapods",slug:"ios-only-install-cocoapods",children:[]},{level:3,title:"Start application",slug:"start-application",children:[]}]},{level:2,title:"Solana DApp Scaffold for React Native",slug:"solana-dapp-scaffold-for-react-native",children:[]},{level:2,title:"Common issues when using crypto libraries in a React Native app",slug:"common-issues-when-using-crypto-libraries-in-a-react-native-app",children:[{level:3,title:"Error: Watchman crawl failed",slug:"error-watchman-crawl-failed",children:[]},{level:3,title:"Error: URL.protocol is not implemented",slug:"error-url-protocol-is-not-implemented",children:[]},{level:3,title:"Error: crypto.getRandomValues() not supported",slug:"error-crypto-getrandomvalues-not-supported",children:[]}]}],path:"/integrations/react-native.html",pathLocale:"/",extraFields:[]},{title:"Serum",headers:[{level:2,title:"How to get a Serum market",slug:"how-to-get-a-serum-market",children:[]},{level:2,title:"How to get Serum order books",slug:"how-to-get-serum-order-books",children:[]},{level:2,title:"How to get current open orders",slug:"how-to-get-current-open-orders",children:[]}],path:"/integrations/serum.html",pathLocale:"/",extraFields:[]},{title:"Strata",headers:[{level:2,title:"How to create a fully managed token",slug:"how-to-create-a-fully-managed-token",children:[]},{level:2,title:"How to buy and sell a token",slug:"how-to-buy-and-sell-a-token",children:[]},{level:2,title:"How to bootstrap liquidity",slug:"how-to-bootstrap-liquidity",children:[]},{level:2,title:"Other Resources",slug:"other-resources",children:[]}],path:"/integrations/strata.html",pathLocale:"/",extraFields:[]},{title:"Switchboard",headers:[{level:2,title:"Data Feeds",slug:"data-feeds",children:[{level:3,title:"Read data from an aggregator feed",slug:"read-data-from-an-aggregator-feed",children:[]},{level:3,title:"Create a new aggregator feed",slug:"create-a-new-aggregator-feed",children:[]},{level:3,title:"Read data from an aggregator feed in program",slug:"read-data-from-an-aggregator-feed-in-program",children:[]},{level:3,title:"How to Create a Feed from the Publisher",slug:"how-to-create-a-feed-from-the-publisher",children:[]}]},{level:2,title:"Oracles",slug:"oracles",children:[{level:3,title:"Create an oracle",slug:"create-an-oracle",children:[]},{level:3,title:"Run an oracle locally",slug:"run-an-oracle-locally",children:[]},{level:3,title:"Oracle Config",slug:"oracle-config",children:[]}]},{level:2,title:"Verifiable Random Function(VRF)",slug:"verifiable-random-function-vrf",children:[{level:3,title:"Reading a VRF account",slug:"reading-a-vrf-account",children:[]},{level:3,title:"Creating a VRF account",slug:"creating-a-vrf-account",children:[]},{level:3,title:"Request Randomness from vrf account",slug:"request-randomness-from-vrf-account",children:[]}]},{level:2,title:"Resources",slug:"resources",children:[{level:3,title:"APIs and Libraries",slug:"apis-and-libraries",children:[]},{level:3,title:"Examples",slug:"examples",children:[]},{level:3,title:"More Information",slug:"more-information",children:[]}]}],path:"/integrations/switchboard.html",pathLocale:"/",extraFields:[]},{title:"web3Auth (Torus Wallet)",headers:[{level:2,title:"What is a wallet?",slug:"what-is-a-wallet",children:[]},{level:2,title:"Social Logins on Solana",slug:"social-logins-on-solana",children:[]},{level:2,title:"Integration Guide",slug:"integration-guide",children:[{level:3,title:"Installing Dependencies",slug:"installing-dependencies",children:[]},{level:3,title:"Import the SDK and initialize",slug:"import-the-sdk-and-initialize",children:[]},{level:3,title:"Trigger user login\u200B",slug:"trigger-user-login\u200B",children:[]},{level:3,title:"Using torus instance to fetch user account detail\u200B",slug:"using-torus-instance-to-fetch-user-account-detail\u200B",children:[]},{level:3,title:"Using Torus Solana API to sign a message.",slug:"using-torus-solana-api-to-sign-a-message",children:[]},{level:3,title:"Using torus Solana API to send a transaction.\u200B",slug:"using-torus-solana-api-to-send-a-transaction-\u200B",children:[]},{level:3,title:"Top-ups\u200B",slug:"top-ups\u200B",children:[]},{level:3,title:"Logout",slug:"logout",children:[]}]},{level:2,title:"Resources",slug:"resources",children:[]}],path:"/integrations/web3auth.html",pathLocale:"/",extraFields:[]},{title:"Cooking with Solana",headers:[{level:2,title:"Contributing",slug:"contributing",children:[]},{level:2,title:"How to Read the Cookbook",slug:"how-to-read-the-cookbook",children:[]}],path:"/kr/",pathLocale:"/kr/",extraFields:[]},{title:"Accounts",headers:[{level:2,title:"How to create a system account",slug:"how-to-create-a-system-account",children:[]},{level:2,title:"How to calculate account cost",slug:"how-to-calculate-account-cost",children:[]},{level:2,title:"How to create accounts with seeds",slug:"how-to-create-accounts-with-seeds",children:[{level:3,title:"Generate",slug:"generate",children:[]},{level:3,title:"Create",slug:"create",children:[]},{level:3,title:"Transfer",slug:"transfer",children:[]}]},{level:2,title:"How to create PDAs",slug:"how-to-create-pdas",children:[{level:3,title:"Generate a PDA",slug:"generate-a-pda",children:[]},{level:3,title:"Create a PDA",slug:"create-a-pda",children:[]}]},{level:2,title:"How to sign with a PDA",slug:"how-to-sign-with-a-pda",children:[{level:3,title:"Program",slug:"program-1",children:[]},{level:3,title:"Client",slug:"client-1",children:[]}]},{level:2,title:"How to get program accounts",slug:"how-to-get-program-accounts",children:[]},{level:2,title:"How to close accounts",slug:"how-to-close-accounts",children:[]},{level:2,title:"How to get account balance",slug:"how-to-get-account-balance",children:[]}],path:"/references/accounts.html",pathLocale:"/",extraFields:[]},{title:"Sending Transactions",headers:[{level:2,title:"How to send SOL",slug:"how-to-send-sol",children:[]},{level:2,title:"How to send SPL-Tokens",slug:"how-to-send-spl-tokens",children:[]},{level:2,title:"How to calculate transaction cost",slug:"how-to-calculate-transaction-cost",children:[{level:3,title:"getEstimatedFee",slug:"getestimatedfee",children:[]},{level:3,title:"getFeeForMessage",slug:"getfeeformessage",children:[]}]},{level:2,title:"How to add a memo to a transaction",slug:"how-to-add-a-memo-to-a-transaction",children:[]},{level:2,title:"How to change compute budget, fee, & priority for a transaction",slug:"how-to-change-compute-budget-fee-priority-for-a-transaction",children:[]}],path:"/references/basic-transactions.html",pathLocale:"/",extraFields:[]},{title:"Keypairs and Wallets",headers:[{level:2,title:"How to generate a new Keypair",slug:"how-to-generate-a-new-keypair",children:[]},{level:2,title:"How to restore a Keypair from a secret",slug:"how-to-restore-a-keypair-from-a-secret",children:[]},{level:2,title:"How to verify a Keypair",slug:"how-to-verify-a-keypair",children:[]},{level:2,title:"How to check if a public key has an associated private key",slug:"how-to-check-if-a-public-key-has-an-associated-private-key",children:[]},{level:2,title:"How to generate a mnemonic phrase",slug:"how-to-generate-a-mnemonic-phrase",children:[]},{level:2,title:"How to restore a Keypair from a mnemonic phrase",slug:"how-to-restore-a-keypair-from-a-mnemonic-phrase",children:[]},{level:2,title:"How to generate a vanity address",slug:"how-to-generate-a-vanity-address",children:[]},{level:2,title:"How to sign and verify messages with wallets",slug:"how-to-sign-and-verify-messages-with-wallets",children:[]},{level:2,title:"How to connect to a wallet",slug:"how-to-connect-to-a-wallet",children:[{level:3,title:"React",slug:"react",children:[]},{level:3,title:"Vue",slug:"vue",children:[]},{level:3,title:"Svelte",slug:"svelte",children:[]}]}],path:"/references/keypairs-and-wallets.html",pathLocale:"/",extraFields:[]},{title:"Local Development",headers:[{level:2,title:"Starting a Local Validator",slug:"starting-a-local-validator",children:[]},{level:2,title:"Connecting to Environments",slug:"connecting-to-environments",children:[]},{level:2,title:"Subscribing to Events",slug:"subscribing-to-events",children:[]},{level:2,title:"Getting Test SOL",slug:"getting-test-sol",children:[]},{level:2,title:"Using Mainnet Accounts and Programs",slug:"using-mainnet-accounts-and-programs",children:[{level:3,title:"How to load accounts from mainnet",slug:"how-to-load-accounts-from-mainnet",children:[]},{level:3,title:"How to load programs from mainnet",slug:"how-to-load-programs-from-mainnet",children:[]}]}],path:"/references/local-development.html",pathLocale:"/",extraFields:[]},{title:"Name Service",headers:[{level:2,title:"Name registry",slug:"name-registry",children:[]},{level:2,title:"Resolving SOL domains",slug:"resolving-sol-domains",children:[]},{level:2,title:"Reverse look up",slug:"reverse-look-up",children:[]},{level:2,title:"Subdomain look up",slug:"subdomain-look-up",children:[]},{level:2,title:"Find all the domain names owned by a public key",slug:"find-all-the-domain-names-owned-by-a-public-key",children:[]},{level:2,title:"Resolve a Twitter handle",slug:"resolve-a-twitter-handle",children:[]},{level:2,title:"Reverse look up of a Twitter handle",slug:"reverse-look-up-of-a-twitter-handle",children:[]}],path:"/references/name-service.html",pathLocale:"/",extraFields:[]},{title:"NFTs",headers:[{level:2,title:"How to create an NFT",slug:"how-to-create-an-nft",children:[{level:3,title:"Upload to Arweave",slug:"upload-to-arweave",children:[]},{level:3,title:"Mint the NFT",slug:"mint-the-nft",children:[]}]},{level:2,title:"How to get NFT Metadata",slug:"how-to-get-nft-metadata",children:[]},{level:2,title:"How to get the owner of an NFT",slug:"how-to-get-the-owner-of-an-nft",children:[]},{level:2,title:"How to get NFT Mint Addresses",slug:"how-to-get-nft-mint-addresses",children:[{level:3,title:"Candy Machine V1",slug:"candy-machine-v1",children:[]},{level:3,title:"Candy Machine V2",slug:"candy-machine-v2",children:[]}]},{level:2,title:"How to get all NFTs from a wallet?",slug:"how-to-get-all-nfts-from-a-wallet",children:[]},{level:2,title:"Candy Machine v2",slug:"candy-machine-v2-1",children:[{level:3,title:"How to create a Candy Machine",slug:"how-to-create-a-candy-machine",children:[]},{level:3,title:"How to delete a Candy Machine",slug:"how-to-delete-a-candy-machine",children:[]},{level:3,title:"How to find Candy Machine via authority",slug:"how-to-find-candy-machine-via-authority",children:[]},{level:3,title:"How to find Candy Machine using wallet address",slug:"how-to-find-candy-machine-using-wallet-address",children:[]},{level:3,title:"How to find Candy Machine using its address",slug:"how-to-find-candy-machine-using-its-address",children:[]},{level:3,title:"How to find minted NFTs from a Candy Machine",slug:"how-to-find-minted-nfts-from-a-candy-machine",children:[]},{level:3,title:"How to insert items into a Candy Machine",slug:"how-to-insert-items-into-a-candy-machine",children:[]},{level:3,title:"How to mint an NFT from a Candy Machine",slug:"how-to-mint-an-nft-from-a-candy-machine",children:[]}]}],path:"/references/nfts.html",pathLocale:"/",extraFields:[]},{title:"Sending Offline Transactions",headers:[{level:2,title:"Sign Transaction",slug:"sign-transaction",children:[]},{level:2,title:"Partial Sign Transaction",slug:"partial-sign-transaction",children:[]},{level:2,title:"Durable Nonce",slug:"durable-nonce",children:[{level:3,title:"Create Nonce Account",slug:"create-nonce-account",children:[]},{level:3,title:"Get Nonce Account",slug:"get-nonce-account",children:[]},{level:3,title:"Use Nonce Account",slug:"use-nonce-account",children:[]}]}],path:"/references/offline-transactions.html",pathLocale:"/",extraFields:[]},{title:"Writing Programs",headers:[{level:2,title:"How to transfer SOL in a program",slug:"how-to-transfer-sol-in-a-program",children:[]},{level:2,title:"How to get clock in a program",slug:"how-to-get-clock-in-a-program",children:[{level:3,title:"Passing Clock as an account inside an instruction",slug:"passing-clock-as-an-account-inside-an-instruction",children:[]},{level:3,title:"Accessing Clock directly inside an instruction",slug:"accessing-clock-directly-inside-an-instruction",children:[]}]},{level:2,title:"How to change account size",slug:"how-to-change-account-size",children:[]},{level:2,title:"How to do Cross Program Invocation",slug:"how-to-do-cross-program-invocation",children:[]},{level:2,title:"How to create a PDA",slug:"how-to-create-a-pda",children:[]},{level:2,title:"How to read accounts",slug:"how-to-read-accounts",children:[]},{level:2,title:"How to verify accounts",slug:"how-to-verify-accounts",children:[]},{level:2,title:"How to read multiple instructions from a transaction",slug:"how-to-read-multiple-instructions-from-a-transaction",children:[]}],path:"/references/programs.html",pathLocale:"/",extraFields:[]},{title:"Staking",headers:[{level:2,title:"Get Current Validators",slug:"get-current-validators",children:[]},{level:2,title:"Create Stake Account",slug:"create-stake-account",children:[]},{level:2,title:"Delegate Stake",slug:"delegate-stake",children:[]},{level:2,title:"Get Delegator by Validators",slug:"get-delegator-by-validators",children:[]},{level:2,title:"Deactivate Stake",slug:"deactivate-stake",children:[]},{level:2,title:"Withdraw Stake",slug:"withdraw-stake",children:[]}],path:"/references/staking.html",pathLocale:"/",extraFields:[]},{title:"Interacting with Tokens",headers:[{level:2,title:"What do I need to get started with SPL-Tokens?",slug:"what-do-i-need-to-get-started-with-spl-tokens",children:[]},{level:2,title:"How to create a new Token",slug:"how-to-create-a-new-token",children:[]},{level:2,title:"How to get a token mint",slug:"how-to-get-a-token-mint",children:[]},{level:2,title:"How to create a token account",slug:"how-to-create-a-token-account",children:[]},{level:2,title:"How to get a Token Account",slug:"how-to-get-a-token-account",children:[]},{level:2,title:"How to get a token account's balance",slug:"how-to-get-a-token-account-s-balance",children:[]},{level:2,title:"How to mint tokens",slug:"how-to-mint-tokens",children:[]},{level:2,title:"How to transfer tokens",slug:"how-to-transfer-tokens",children:[]},{level:2,title:"How to burn tokens",slug:"how-to-burn-tokens",children:[]},{level:2,title:"How to close token accounts",slug:"how-to-close-token-accounts",children:[]},{level:2,title:"How to set authority on token accounts or mints",slug:"how-to-set-authority-on-token-accounts-or-mints",children:[]},{level:2,title:"How to approve a token delegate",slug:"how-to-approve-a-token-delegate",children:[]},{level:2,title:"How to revoke a token delegate",slug:"how-to-revoke-a-token-delegate",children:[]},{level:2,title:"How to manage wrapped SOL",slug:"how-to-manage-wrapped-sol",children:[{level:3,title:"Create Token Account",slug:"create-token-account",children:[]},{level:3,title:"Add Balance",slug:"add-balance",children:[]}]},{level:2,title:"How to get all token accounts by owner",slug:"how-to-get-all-token-accounts-by-owner",children:[]}],path:"/references/token.html",pathLocale:"/",extraFields:[]},{title:"Cooking \u0E01\u0E31\u0E1A Solana",headers:[{level:2,title:"\u0E23\u0E48\u0E27\u0E21\u0E01\u0E31\u0E19\u0E40\u0E02\u0E35\u0E22\u0E19",slug:"\u0E23\u0E48\u0E27\u0E21\u0E01\u0E31\u0E19\u0E40\u0E02\u0E35\u0E22\u0E19",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E2D\u0E48\u0E32\u0E19\u0E04\u0E39\u0E48\u0E21\u0E37\u0E2D",slug:"\u0E27\u0E34\u0E18\u0E35\u0E2D\u0E48\u0E32\u0E19\u0E04\u0E39\u0E48\u0E21\u0E37\u0E2D",children:[]}],path:"/th/",pathLocale:"/th/",extraFields:[]},{title:"Solana Cookbook",headers:[{level:2,title:"Contributing (Nas\u0131l Katk\u0131 Verebilirsiniz?)",slug:"contributing-nas\u0131l-katk\u0131-verebilirsiniz",children:[]},{level:2,title:"How to Read the Cookbook (Cookbook Nas\u0131l Okunur?)",slug:"how-to-read-the-cookbook-cookbook-nas\u0131l-okunur",children:[]}],path:"/tr/",pathLocale:"/tr/",extraFields:[]},{title:"Nh\u1EADp m\xF4n Solana",headers:[{level:2,title:"\u0110\xF3ng g\xF3p",slug:"\u0111ong-gop",children:[]},{level:2,title:"C\u1EA5u tr\xFAc c\u1EE7a To\xE0n t\u1EADp Solana",slug:"cau-truc-cua-toan-tap-solana",children:[]},{level:2,title:"L\u1EDDi c\u1EE7a d\u1ECBch gi\u1EA3",slug:"loi-cua-dich-gia",children:[]}],path:"/vi/",pathLocale:"/vi/",extraFields:[]},{title:"Solana\u79D8\u7C4D",headers:[{level:2,title:"\u8D21\u732E\u4EE3\u7801",slug:"\u8D21\u732E\u4EE3\u7801",children:[]},{level:2,title:"\u5982\u4F55\u9605\u8BFBSolana\u79D8\u7C4D",slug:"\u5982\u4F55\u9605\u8BFBsolana\u79D8\u7C4D",children:[]}],path:"/zh/",pathLocale:"/zh/",extraFields:[]},{title:"Cuentas",headers:[{level:2,title:"Hechos",slug:"hechos",children:[]},{level:2,title:"Un vistazo m\xE1s profundo",slug:"un-vistazo-mas-profundo",children:[{level:3,title:"El modelo de una cuenta",slug:"el-modelo-de-una-cuenta",children:[]},{level:3,title:"Renta",slug:"renta",children:[]}]},{level:2,title:"Otros recursos",slug:"otros-recursos",children:[{level:3,title:"Creditos",slug:"creditos",children:[]}]}],path:"/es/core-concepts/accounts.html",pathLocale:"/es/",extraFields:[]},{title:"Direcciones derivadas de programa (PDAs)",headers:[{level:2,title:"Hechos",slug:"hechos",children:[{level:3,title:"Generando PDAs",slug:"generando-pdas",children:[]},{level:3,title:"Interactuando con PDAs",slug:"interactuando-con-pdas",children:[]}]},{level:2,title:"Other Resources",slug:"other-resources",children:[]}],path:"/es/core-concepts/pdas.html",pathLocale:"/es/",extraFields:[]},{title:"Programas",headers:[{level:2,title:"Hechos",slug:"hechos",children:[]},{level:2,title:"Un vistazo m\xE1s profundo",slug:"un-vistazo-mas-profundo",children:[{level:3,title:"Programas nativos & La librer\xEDa de Programas de Solana (SPL)",slug:"programas-nativos-la-libreria-de-programas-de-solana-spl",children:[]},{level:3,title:"Escribiendo programas",slug:"escribiendo-programas",children:[]},{level:3,title:"Desplegando Programas",slug:"desplegando-programas",children:[]}]},{level:2,title:"Other Resources",slug:"other-resources",children:[]}],path:"/es/core-concepts/programs.html",pathLocale:"/es/",extraFields:[]},{title:"Transacciones",headers:[{level:2,title:"Hechos",slug:"hechos",children:[]},{level:2,title:"Un vistazo m\xE1s profundo",slug:"un-vistazo-mas-profundo",children:[{level:3,title:"Cargos (fees)",slug:"cargos-fees",children:[]}]},{level:2,title:"Other Resources",slug:"other-resources",children:[]}],path:"/es/core-concepts/transactions.html",pathLocale:"/es/",extraFields:[]},{title:"Instalaci\xF3n",headers:[{level:2,title:"Instalaci\xF3n de Web3.js",slug:"instalacion-de-web3-js",children:[{level:3,title:"Web3.js",slug:"web3-js",children:[]},{level:3,title:"SPL-Token",slug:"spl-token",children:[]},{level:3,title:"Wallet-Adapter",slug:"wallet-adapter",children:[]}]},{level:2,title:"Instalaci\xF3n de Rust",slug:"instalacion-de-rust",children:[]},{level:2,title:"Instalaci\xF3n de CLI",slug:"instalacion-de-cli",children:[{level:3,title:"macOS & Linux",slug:"macos-linux",children:[]},{level:3,title:"Windows",slug:"windows",children:[]},{level:3,title:"Compilaci\xF3n desde el C\xF3digo Fuente",slug:"compilacion-desde-el-codigo-fuente",children:[]}]}],path:"/es/getting-started/installation.html",pathLocale:"/es/",extraFields:[]},{title:"C\xF3mo usar Map en cuentas",headers:[{level:2,title:"Derivando PDAs",slug:"derivando-pdas",children:[]},{level:2,title:"Map simple",slug:"map-simple",children:[]}],path:"/es/guides/account-maps.html",pathLocale:"/es/",extraFields:[]},{title:"Migrando cuentas de datos de programas",headers:[{level:2,title:"\xBFC\xF3mo se pueden migrar las cuentas de datos de un programa?",slug:"\xBFcomo-se-pueden-migrar-las-cuentas-de-datos-de-un-programa",children:[]},{level:2,title:"Escenario",slug:"escenario",children:[]},{level:2,title:"Actualizando la cuenta",slug:"actualizando-la-cuenta",children:[{level:3,title:"1. Agregar la l\xF3gica de conversi\xF3n de cuenta",slug:"_1-agregar-la-logica-de-conversion-de-cuenta",children:[]}]},{level:2,title:"Resources",slug:"resources",children:[]}],path:"/es/guides/data-migration.html",pathLocale:"/es/",extraFields:[]},{title:"Depurando Programas en Solana",headers:[{level:2,title:"Hechos",slug:"hechos",children:[]},{level:2,title:"Pruebas de tiempo de ejecuci\xF3n y depuraci\xF3n en el editor",slug:"pruebas-de-tiempo-de-ejecucion-y-depuracion-en-el-editor",children:[]},{level:2,title:"Pruebas de nodo de validaci\xF3n local en el editor (Local Validator)",slug:"pruebas-de-nodo-de-validacion-local-en-el-editor-local-validator",children:[]},{level:2,title:"Pruebas de nodos de validadores locales desde aplicaciones cliente",slug:"pruebas-de-nodos-de-validadores-locales-desde-aplicaciones-cliente",children:[]},{level:2,title:"Recursos",slug:"recursos",children:[]}],path:"/es/guides/debugging-solana-programs.html",pathLocale:"/es/",extraFields:[]},{title:"Prueba de paridad de caracter\xEDsticas",headers:[{level:2,title:"Hechos",slug:"hechos",children:[]},{level:2,title:"Escenario",slug:"escenario",children:[]},{level:2,title:"Estado de la funci\xF3n",slug:"estado-de-la-funcion",children:[]},{level:2,title:"Pruebas de paridad",slug:"pruebas-de-paridad",children:[]},{level:2,title:"Demostraci\xF3n sencilla",slug:"demostracion-sencilla",children:[{level:3,title:"Todas las funciones activadas",slug:"todas-las-funciones-activadas",children:[]},{level:3,title:"Funciones selectivas desactivadas",slug:"funciones-selectivas-desactivadas",children:[]}]},{level:2,title:"Pruebas de paridad completa",slug:"pruebas-de-paridad-completa",children:[]},{level:2,title:"Pruebas de paridad completa program\xE1ticamente",slug:"pruebas-de-paridad-completa-programaticamente",children:[]},{level:2,title:"Recursos",slug:"recursos",children:[]}],path:"/es/guides/feature-parity-testing.html",pathLocale:"/es/",extraFields:[]},{title:"Obtener cuentas de programa",headers:[{level:2,title:"Hechos",slug:"hechos",children:[]},{level:2,title:"Un vistazo m\xE1s profundo",slug:"un-vistazo-mas-profundo",children:[{level:3,title:"dataSlice",slug:"dataslice",children:[]}]},{level:2,title:"Otros recursos",slug:"otros-recursos",children:[]}],path:"/es/guides/get-program-accounts.html",pathLocale:"/es/",extraFields:[]},{title:"Reintentando Transacciones",headers:[{level:2,title:"Hechos",slug:"hechos",children:[]},{level:2,title:"El viaje de una transacci\xF3n",slug:"el-viaje-de-una-transaccion",children:[{level:3,title:"C\xF3mo los clientes env\xEDan transacciones",slug:"como-los-clientes-envian-transacciones",children:[]},{level:3,title:"C\xF3mo transmiten las transacciones los nodos RPC",slug:"como-transmiten-las-transacciones-los-nodos-rpc",children:[]}]},{level:2,title:"C\xF3mo se caen las transacciones",slug:"como-se-caen-las-transacciones",children:[{level:3,title:"Antes de que se procese una transacci\xF3n",slug:"antes-de-que-se-procese-una-transaccion",children:[]},{level:3,title:"Despu\xE9s de que se procese una transacci\xF3n y antes de que finalice",slug:"despues-de-que-se-procese-una-transaccion-y-antes-de-que-finalice",children:[]}]},{level:2,title:"Manejo de transacciones descartadas",slug:"manejo-de-transacciones-descartadas",children:[{level:3,title:"Una mirada en profundidad a sendTransaction",slug:"una-mirada-en-profundidad-a-sendtransaction",children:[]}]},{level:2,title:"Personalizaci\xF3n de la l\xF3gica de retransmisi\xF3n",slug:"personalizacion-de-la-logica-de-retransmision",children:[{level:3,title:"El costo de omitir la verificaci\xF3n previa",slug:"el-costo-de-omitir-la-verificacion-previa",children:[]},{level:3,title:"Cu\xE1ndo volver a firmar transacciones",slug:"cuando-volver-a-firmar-transacciones",children:[]}]},{level:2,title:"Agradecimientos",slug:"agradecimientos",children:[]}],path:"/es/guides/retrying-transactions.html",pathLocale:"/es/",extraFields:[]},{title:"Serializando datos",headers:[{level:2,title:"Configuraci\xF3n para la serializaci\xF3n con Borsh",slug:"configuracion-para-la-serializacion-con-borsh",children:[]},{level:2,title:"C\xF3mo serializar datos de instrucciones en el cliente",slug:"como-serializar-datos-de-instrucciones-en-el-cliente",children:[]},{level:2,title:"How to deserialize instruction data on the program",slug:"how-to-deserialize-instruction-data-on-the-program",children:[]},{level:2,title:"C\xF3mo serializar los datos de la cuenta en el programa",slug:"como-serializar-los-datos-de-la-cuenta-en-el-programa",children:[{level:3,title:"Pack",slug:"pack",children:[]},{level:3,title:"Serializaci\xF3n/Deserealizaci\xF3n",slug:"serializacion-deserealizacion",children:[]},{level:3,title:"Usage",slug:"usage",children:[]}]},{level:2,title:"C\xF3mo deserializar los datos de la cuenta en el cliente",slug:"como-deserializar-los-datos-de-la-cuenta-en-el-cliente",children:[]},{level:2,title:"Mappins comunes de Solana TS/JS",slug:"mappins-comunes-de-solana-ts-js",children:[]},{level:2,title:"Construcciones avanzadas",slug:"construcciones-avanzadas",children:[{level:3,title:"COption",slug:"coption",children:[]}]},{level:2,title:"Recursos",slug:"recursos",children:[]}],path:"/es/guides/serialization.html",pathLocale:"/es/",extraFields:[]},{title:"Cuentas",headers:[{level:2,title:"C\xF3mo crear una cuenta del sistema",slug:"como-crear-una-cuenta-del-sistema",children:[]},{level:2,title:"C\xF3mo calcular el costo de una cuenta",slug:"como-calcular-el-costo-de-una-cuenta",children:[]},{level:2,title:"C\xF3mo crear cuentas con semillas",slug:"como-crear-cuentas-con-semillas",children:[{level:3,title:"Generar",slug:"generar",children:[]},{level:3,title:"Crear",slug:"crear",children:[]},{level:3,title:"Transferir",slug:"transferir",children:[]}]},{level:2,title:"C\xF3mo crear PDAs",slug:"como-crear-pdas",children:[{level:3,title:"Generar una cuenta derivada de programa (PDA)",slug:"generar-una-cuenta-derivada-de-programa-pda",children:[]},{level:3,title:"Crear una cuenta derivada de programa (PDA)",slug:"crear-una-cuenta-derivada-de-programa-pda",children:[]}]},{level:2,title:"C\xF3mo firmar con una cuenta derivada de programa (PDA)",slug:"como-firmar-con-una-cuenta-derivada-de-programa-pda",children:[{level:3,title:"Programa",slug:"programa-1",children:[]},{level:3,title:"Cliente",slug:"cliente-1",children:[]}]},{level:2,title:"C\xF3mo obtener cuentas de programas",slug:"como-obtener-cuentas-de-programas",children:[]},{level:2,title:"C\xF3mo cerrar cuentas",slug:"como-cerrar-cuentas",children:[]},{level:2,title:"C\xF3mo obtener el balance de una cuenta",slug:"como-obtener-el-balance-de-una-cuenta",children:[]}],path:"/es/references/accounts.html",pathLocale:"/es/",extraFields:[]},{title:"Enviando transacciones",headers:[{level:2,title:"C\xF3mo enviar SOL",slug:"como-enviar-sol",children:[]},{level:2,title:"How to send SPL-Tokens",slug:"how-to-send-spl-tokens",children:[]},{level:2,title:"C\xF3mo calcular el costo de una transacci\xF3n",slug:"como-calcular-el-costo-de-una-transaccion",children:[{level:3,title:"getEstimatedFee",slug:"getestimatedfee",children:[]},{level:3,title:"getFeeForMessage",slug:"getfeeformessage",children:[]}]},{level:2,title:"C\xF3mo agregar un memo en una transacci\xF3n",slug:"como-agregar-un-memo-en-una-transaccion",children:[]},{level:2,title:"C\xF3mo cambiar el presupuesto de c\xF3mputo para una transacci\xF3n",slug:"como-cambiar-el-presupuesto-de-computo-para-una-transaccion",children:[]}],path:"/es/references/basic-transactions.html",pathLocale:"/es/",extraFields:[]},{title:"Pares de llaves y billeteras",headers:[{level:2,title:"C\xF3mo generar un nuevo Keypair (par de llaves)",slug:"como-generar-un-nuevo-keypair-par-de-llaves",children:[]},{level:2,title:"C\xF3mo restaurar un par de llaves a partir de una llave privada",slug:"como-restaurar-un-par-de-llaves-a-partir-de-una-llave-privada",children:[]},{level:2,title:"C\xF3mo verificar un par de llaves",slug:"como-verificar-un-par-de-llaves",children:[]},{level:2,title:"C\xF3mo comprobar si una llave p\xFAblica tiene una llave privada asociada",slug:"como-comprobar-si-una-llave-publica-tiene-una-llave-privada-asociada",children:[]},{level:2,title:"C\xF3mo generar una frase semilla (mnemonic)",slug:"como-generar-una-frase-semilla-mnemonic",children:[]},{level:2,title:"C\xF3mo restaurar un par de llaves desde una frase semilla",slug:"como-restaurar-un-par-de-llaves-desde-una-frase-semilla",children:[]},{level:2,title:"C\xF3mo generar una direcci\xF3n personalizada",slug:"como-generar-una-direccion-personalizada",children:[]},{level:2,title:"C\xF3mo firmar y verificar mensajes con wallets",slug:"como-firmar-y-verificar-mensajes-con-wallets",children:[]},{level:2,title:"C\xF3mo conectar una wallet",slug:"como-conectar-una-wallet",children:[{level:3,title:"React",slug:"react",children:[]},{level:3,title:"Vue",slug:"vue",children:[]},{level:3,title:"Svelte",slug:"svelte",children:[]}]}],path:"/es/references/keypairs-and-wallets.html",pathLocale:"/es/",extraFields:[]},{title:"Desarrollo en entorno local",headers:[{level:2,title:"Iniciando un validador",slug:"iniciando-un-validador",children:[]},{level:2,title:"Conect\xE1ndote con los diferentes entornos",slug:"conectandote-con-los-diferentes-entornos",children:[]},{level:2,title:"Suscripci\xF3n a eventos",slug:"suscripcion-a-eventos",children:[]},{level:2,title:"Obteniendo SOL para pruebas",slug:"obteniendo-sol-para-pruebas",children:[]},{level:2,title:"Usando cuentas de mainnet y programas",slug:"usando-cuentas-de-mainnet-y-programas",children:[{level:3,title:"C\xF3mo cargar cuentas de mainnet",slug:"como-cargar-cuentas-de-mainnet",children:[]},{level:3,title:"C\xF3mo cargar programas de mainnet",slug:"como-cargar-programas-de-mainnet",children:[]}]}],path:"/es/references/local-development.html",pathLocale:"/es/",extraFields:[]},{title:"Servicio de nombres",headers:[{level:2,title:"Registro de nombres",slug:"registro-de-nombres",children:[]},{level:2,title:"Resolviendo dominios SOL",slug:"resolviendo-dominios-sol",children:[]},{level:2,title:"B\xFAsqueda inversa",slug:"busqueda-inversa",children:[]},{level:2,title:"B\xFAsqueda de subdominios",slug:"busqueda-de-subdominios",children:[]},{level:2,title:"Encuentre todos los nombres de dominio que pertenecen a una clave p\xFAblica",slug:"encuentre-todos-los-nombres-de-dominio-que-pertenecen-a-una-clave-publica",children:[]},{level:2,title:"Resolver un identificador de Twitter",slug:"resolver-un-identificador-de-twitter",children:[]},{level:2,title:"B\xFAsqueda inversa de un identificador de Twitter",slug:"busqueda-inversa-de-un-identificador-de-twitter",children:[]}],path:"/es/references/name-service.html",pathLocale:"/es/",extraFields:[]},{title:"NFTs",headers:[{level:2,title:"\xBFC\xF3mo crear un NFT?",slug:"\xBFcomo-crear-un-nft",children:[{level:3,title:"Subir a Arweave",slug:"subir-a-arweave",children:[]},{level:3,title:"Crear (mint) el NFT",slug:"crear-mint-el-nft",children:[]}]},{level:2,title:"\xBFC\xF3mo obtener metadatos de un NFT?",slug:"\xBFcomo-obtener-metadatos-de-un-nft",children:[]},{level:2,title:"\xBFC\xF3mo obtener el due\xF1o de un NFT?",slug:"\xBFcomo-obtener-el-dueno-de-un-nft",children:[]},{level:2,title:"\xBFC\xF3mo obtener direcciones de mint de NFT?",slug:"\xBFcomo-obtener-direcciones-de-mint-de-nft",children:[{level:3,title:"Candy Machine V1",slug:"candy-machine-v1",children:[]},{level:3,title:"Candy Machine V2",slug:"candy-machine-v2",children:[]}]},{level:2,title:"\xBFC\xF3mo obtener todos los NFT de una billetera?",slug:"\xBFcomo-obtener-todos-los-nft-de-una-billetera",children:[]}],path:"/es/references/nfts.html",pathLocale:"/es/",extraFields:[]},{title:"Enviando transacciones offline",headers:[{level:2,title:"Firmar una transacci\xF3n",slug:"firmar-una-transaccion",children:[]},{level:2,title:"Firma parcial de una transacci\xF3n",slug:"firma-parcial-de-una-transaccion",children:[]},{level:2,title:"Nonce de larga duraci\xF3n (Durable Nonce)",slug:"nonce-de-larga-duracion-durable-nonce",children:[{level:3,title:"Crear una cuenta nonce",slug:"crear-una-cuenta-nonce",children:[]},{level:3,title:"Obtener una cuenta nonce",slug:"obtener-una-cuenta-nonce",children:[]},{level:3,title:"Usar una cuenta nonce",slug:"usar-una-cuenta-nonce",children:[]}]}],path:"/es/references/offline-transactions.html",pathLocale:"/es/",extraFields:[]},{title:"Escribiendo Programas",headers:[{level:2,title:"C\xF3mo transferir SOL a un programa",slug:"como-transferir-sol-a-un-programa",children:[]},{level:2,title:"C\xF3mo obtener una referencia al reloj en un programa",slug:"como-obtener-una-referencia-al-reloj-en-un-programa",children:[{level:3,title:"Enviando Clock c\xF3mo una cuenta dentro de una instrucci\xF3n",slug:"enviando-clock-como-una-cuenta-dentro-de-una-instruccion",children:[]},{level:3,title:"Accediendo al reloj directamente dentro de una instrucci\xF3n",slug:"accediendo-al-reloj-directamente-dentro-de-una-instruccion",children:[]}]},{level:2,title:"C\xF3mo cambiar el tama\xF1o de una cuenta",slug:"como-cambiar-el-tamano-de-una-cuenta",children:[]},{level:2,title:"C\xF3mo hacer una invocaci\xF3n entre programas (Cross Program Invocation)",slug:"como-hacer-una-invocacion-entre-programas-cross-program-invocation",children:[]},{level:2,title:"C\xF3mo crear una cuenta derivada de programa (PDA)",slug:"como-crear-una-cuenta-derivada-de-programa-pda",children:[]},{level:2,title:"C\xF3mo leer cuentas",slug:"como-leer-cuentas",children:[]},{level:2,title:"C\xF3mo verificar cuentas",slug:"como-verificar-cuentas",children:[]},{level:2,title:"C\xF3mo leer m\xFAltiples instrucciones de una transacci\xF3n",slug:"como-leer-multiples-instrucciones-de-una-transaccion",children:[]}],path:"/es/references/programs.html",pathLocale:"/es/",extraFields:[]},{title:"Staking",headers:[{level:2,title:"Obtener los validadores actuales",slug:"obtener-los-validadores-actuales",children:[]},{level:2,title:"\xBFCrear una cuenta de stake?",slug:"\xBFcrear-una-cuenta-de-stake",children:[]},{level:2,title:"Delegar Stake",slug:"delegar-stake",children:[]},{level:2,title:"Obtener el delegador por los validadores",slug:"obtener-el-delegador-por-los-validadores",children:[]},{level:2,title:"Desactivar Stake",slug:"desactivar-stake",children:[]},{level:2,title:"Retirar Stake",slug:"retirar-stake",children:[]}],path:"/es/references/staking.html",pathLocale:"/es/",extraFields:[]},{title:"Interactuando con tokens",headers:[{level:2,title:"\xBFQu\xE9 necesito para comenzar a trabajar con SPL-Tokens?",slug:"\xBFque-necesito-para-comenzar-a-trabajar-con-spl-tokens",children:[]},{level:2,title:"\xBFC\xF3mo crear un nuevo token?",slug:"\xBFcomo-crear-un-nuevo-token",children:[]},{level:2,title:'\xBFC\xF3mo obtener un token "mint"?',slug:"\xBFcomo-obtener-un-token-mint",children:[]},{level:2,title:"\xBFC\xF3mo crear una cuenta de token?",slug:"\xBFcomo-crear-una-cuenta-de-token",children:[]},{level:2,title:"\xBFC\xF3mo obtener un cuenta de token?",slug:"\xBFcomo-obtener-un-cuenta-de-token",children:[]},{level:2,title:"\xBFC\xF3mo obtener el saldo de una cuenta token?",slug:"\xBFcomo-obtener-el-saldo-de-una-cuenta-token",children:[]},{level:2,title:"\xBFC\xF3mo crear (mint) nuevos tokens?",slug:"\xBFcomo-crear-mint-nuevos-tokens",children:[]},{level:2,title:"\xBFC\xF3mo transferir tokens?",slug:"\xBFcomo-transferir-tokens",children:[]},{level:2,title:"\xBFC\xF3mo quemar tokens?",slug:"\xBFcomo-quemar-tokens",children:[]},{level:2,title:"\xBFC\xF3mo cerrar cuentas de token?",slug:"\xBFcomo-cerrar-cuentas-de-token",children:[]},{level:2,title:"\xBFC\xF3mo establecer la autoridad en cuentas de tokens o mints?",slug:"\xBFcomo-establecer-la-autoridad-en-cuentas-de-tokens-o-mints",children:[]},{level:2,title:"\xBFC\xF3mo aprobar una delegaci\xF3n de token?",slug:"\xBFcomo-aprobar-una-delegacion-de-token",children:[]},{level:2,title:"\xBFC\xF3mo revocar una delegaci\xF3n de token?",slug:"\xBFcomo-revocar-una-delegacion-de-token",children:[]},{level:2,title:"\xBFC\xF3mo manejar Wrapped SOL?",slug:"\xBFcomo-manejar-wrapped-sol",children:[{level:3,title:"Crear una cuenta de token",slug:"crear-una-cuenta-de-token",children:[]},{level:3,title:"Agregar saldo",slug:"agregar-saldo",children:[]}]},{level:2,title:"\xBFC\xF3mo obtener todas las cuentas de token por propietario?",slug:"\xBFcomo-obtener-todas-las-cuentas-de-token-por-propietario",children:[]}],path:"/es/references/token.html",pathLocale:"/es/",extraFields:[]},{title:"Accounts",headers:[{level:2,title:"Fakten",slug:"fakten",children:[]},{level:2,title:"Deep Dive",slug:"deep-dive",children:[{level:3,title:"Accounts Model",slug:"accounts-model",children:[]},{level:3,title:"Miete",slug:"miete",children:[]}]},{level:2,title:"Andere Ressourcen",slug:"andere-ressourcen",children:[{level:3,title:"Credit",slug:"credit",children:[]}]}],path:"/de/core-concepts/accounts.html",pathLocale:"/de/",extraFields:[]},{title:"Programmabgeleitete Adressen (PDAs)",headers:[{level:2,title:"Fakten",slug:"fakten",children:[]},{level:2,title:"Deep Dive",slug:"deep-dive",children:[{level:3,title:"Generating PDAs",slug:"generating-pdas",children:[]},{level:3,title:"Interaktion mit PDAs",slug:"interaktion-mit-pdas",children:[]}]},{level:2,title:"Andere Quellen",slug:"andere-quellen",children:[]}],path:"/de/core-concepts/pdas.html",pathLocale:"/de/",extraFields:[]},{title:"Programme",headers:[{level:2,title:"Facts",slug:"facts",children:[]},{level:2,title:"Deep Dive",slug:"deep-dive",children:[{level:3,title:"Native Programme & Die Solana Programm Bibliothek (SPL - Solana Program Library)",slug:"native-programme-die-solana-programm-bibliothek-spl-solana-program-library",children:[]},{level:3,title:"Writing Programs",slug:"writing-programs",children:[]},{level:3,title:"Bereitstellen von Programmen",slug:"bereitstellen-von-programmen",children:[]}]},{level:2,title:"Weitere Quellen",slug:"weitere-quellen",children:[]}],path:"/de/core-concepts/programs.html",pathLocale:"/de/",extraFields:[]},{title:"Transaktionen",headers:[{level:2,title:"Fakten",slug:"fakten",children:[]},{level:2,title:"Deep Dive",slug:"deep-dive",children:[{level:3,title:"Geb\xFChren",slug:"gebuhren",children:[]}]},{level:2,title:"Other Resources",slug:"other-resources",children:[]}],path:"/de/core-concepts/transactions.html",pathLocale:"/de/",extraFields:[]},{title:"Installation",headers:[{level:2,title:"Installieren von Web3.js",slug:"installieren-von-web3-js",children:[{level:3,title:"Web3.js",slug:"web3-js",children:[]},{level:3,title:"SPL-Token",slug:"spl-token",children:[]},{level:3,title:"Wallet-Adapter",slug:"wallet-adapter",children:[]}]},{level:2,title:"Install Rust",slug:"install-rust",children:[]},{level:2,title:"Install CLI",slug:"install-cli",children:[{level:3,title:"macOS & Linux",slug:"macos-linux",children:[]},{level:3,title:"Windows",slug:"windows",children:[]},{level:3,title:"Aus Quelle erstellen",slug:"aus-quelle-erstellen",children:[]}]}],path:"/de/getting-started/installation.html",pathLocale:"/de/",extraFields:[]},{title:"Kontozuordnungen",headers:[{level:2,title:"Ableitende PDAs",slug:"ableitende-pdas",children:[]},{level:2,title:"Einzelnes Kartenkonto",slug:"einzelnes-kartenkonto",children:[]}],path:"/de/guides/account-maps.html",pathLocale:"/de/",extraFields:[]},{title:"Migrieren von Programmdatenkonten",headers:[{level:2,title:"Wie k\xF6nnen Sie die Datenkonten eines Programms migrieren?",slug:"wie-konnen-sie-die-datenkonten-eines-programms-migrieren",children:[]},{level:2,title:"Szenario",slug:"szenario",children:[]},{level:2,title:"Upgrade des Kontos",slug:"upgrade-des-kontos",children:[{level:3,title:"1. Kontoumwandlungslogik hinzuf\xFCgen",slug:"_1-kontoumwandlungslogik-hinzufugen",children:[]}]},{level:2,title:"Resources",slug:"resources",children:[]}],path:"/de/guides/data-migration.html",pathLocale:"/de/",extraFields:[]},{title:"Debuggen von Solana-Programmen",headers:[{level:2,title:"Fakten",slug:"fakten",children:[]},{level:2,title:"Laufzeittests und Debugging im Editor",slug:"laufzeittests-und-debugging-im-editor",children:[]},{level:2,title:"Testen des lokalen Validator-Knotens im Editor",slug:"testen-des-lokalen-validator-knotens-im-editor",children:[]},{level:2,title:"Testen lokaler Validator-Knoten von Client-Apps",slug:"testen-lokaler-validator-knoten-von-client-apps",children:[]},{level:2,title:"Ressourcen",slug:"ressourcen",children:[]}],path:"/de/guides/debugging-solana-programs.html",pathLocale:"/de/",extraFields:[]},{title:"Funktionsparit\xE4tstest",headers:[{level:2,title:"Fakten",slug:"fakten",children:[]},{level:2,title:"Szenario",slug:"szenario",children:[]},{level:2,title:"Feature Status",slug:"feature-status",children:[]},{level:2,title:"Parit\xE4tstest",slug:"paritatstest",children:[]},{level:2,title:"Einfache Vorf\xFChrung",slug:"einfache-vorfuhrung",children:[{level:3,title:"Alle Funktionen aktiviert",slug:"alle-funktionen-aktiviert",children:[]},{level:3,title:"Selektive Funktionen deaktiviert",slug:"selektive-funktionen-deaktiviert",children:[]}]},{level:2,title:"Vollst\xE4ndiger Parit\xE4tstest",slug:"vollstandiger-paritatstest",children:[]},{level:2,title:"Vollst\xE4ndiger Parit\xE4tstest programmgesteuert",slug:"vollstandiger-paritatstest-programmgesteuert",children:[]},{level:2,title:"Ressourcen",slug:"ressourcen",children:[]}],path:"/de/guides/feature-parity-testing.html",pathLocale:"/de/",extraFields:[]},{title:"Programmkonten Abfragen",headers:[{level:2,title:"Fakten",slug:"fakten",children:[]},{level:2,title:"Deep Dive",slug:"deep-dive",children:[{level:3,title:"filters",slug:"filters",children:[]},{level:3,title:"dataSlice",slug:"dataslice",children:[]}]},{level:2,title:"Other Resources",slug:"other-resources",children:[]}],path:"/de/guides/get-program-accounts.html",pathLocale:"/de/",extraFields:[]},{title:"Transaktionen Wiederholen",headers:[{level:2,title:"Fakten",slug:"fakten",children:[]},{level:2,title:"Die Reise einer Transaktion",slug:"die-reise-einer-transaktion-1",children:[{level:3,title:"Wie Anwender Transaktionen \xFCbermitteln",slug:"wie-anwender-transaktionen-ubermitteln",children:[]},{level:3,title:"Wie RPC-Knoten Transaktionen senden",slug:"wie-rpc-knoten-transaktionen-senden",children:[]}]},{level:2,title:"Wie Transaktionen verworfen werden",slug:"wie-transaktionen-verworfen-werden",children:[{level:3,title:"Bevor eine Transaktion verarbeitet wird",slug:"bevor-eine-transaktion-verarbeitet-wird",children:[]},{level:3,title:"Nachdem eine Transaktion verarbeitet wurde und bevor sie abgeschlossen wird",slug:"nachdem-eine-transaktion-verarbeitet-wurde-und-bevor-sie-abgeschlossen-wird",children:[]}]},{level:2,title:"Umgang mit abgebrochenen Transaktionen",slug:"umgang-mit-abgebrochenen-transaktionen",children:[{level:3,title:"Ein eingehender Blick in sendTransaction",slug:"ein-eingehender-blick-in-sendtransaction",children:[]}]},{level:2,title:"Anpassen der Reroadcast-Logik",slug:"anpassen-der-reroadcast-logik",children:[{level:3,title:"Die Kosten f\xFCr das \xDCberspringen des Preflights",slug:"die-kosten-fur-das-uberspringen-des-preflights",children:[]},{level:3,title:"Wann Transaktionen neu signiert werden m\xFCssen",slug:"wann-transaktionen-neu-signiert-werden-mussen",children:[]}]},{level:2,title:"Danksagungen",slug:"danksagungen",children:[]}],path:"/de/guides/retrying-transactions.html",pathLocale:"/de/",extraFields:[]},{title:"Serialisieren von Daten",headers:[{level:2,title:"Einrichten der Borsh-Serialisierung",slug:"einrichten-der-borsh-serialisierung",children:[]},{level:2,title:"So serialisieren Sie Anweisungsdaten auf dem Client",slug:"so-serialisieren-sie-anweisungsdaten-auf-dem-client",children:[]},{level:2,title:"So deserialisieren Sie Befehlsdaten im Programm",slug:"so-deserialisieren-sie-befehlsdaten-im-programm",children:[]},{level:2,title:"So serialisieren Sie Kontodaten im Programm",slug:"so-serialisieren-sie-kontodaten-im-programm",children:[{level:3,title:"Pack",slug:"pack",children:[]},{level:3,title:"Serialisierung/Deserialisierung",slug:"serialisierung-deserialisierung",children:[]},{level:3,title:"Usage",slug:"usage",children:[]}]},{level:2,title:"So deserialisieren Sie Kontodaten auf dem Client",slug:"so-deserialisieren-sie-kontodaten-auf-dem-client",children:[]},{level:2,title:"Common Solana TS/JS Mappings",slug:"common-solana-ts-js-mappings",children:[]},{level:2,title:"Fortgeschrittene Konstrukte",slug:"fortgeschrittene-konstrukte",children:[{level:3,title:"COption",slug:"coption",children:[]}]},{level:2,title:"Ressourcen",slug:"ressourcen",children:[]}],path:"/de/guides/serialization.html",pathLocale:"/de/",extraFields:[]},{title:"Getting Started",headers:[{level:2,title:"Composability is Key",slug:"composability-is-key",children:[]},{level:2,title:"Contributing",slug:"contributing",children:[]}],path:"/de/integrations/",pathLocale:"/de/",extraFields:[]},{title:"Jupiter",headers:[{level:2,title:"Installation",slug:"installation",children:[{level:3,title:"Abrufen der Token-Liste von Jupiter",slug:"abrufen-der-token-liste-von-jupiter",children:[]},{level:3,title:"Laden der Jupiter-Instanz",slug:"laden-der-jupiter-instanz",children:[]},{level:3,title:"Abrufen der RouteMap",slug:"abrufen-der-routemap",children:[]},{level:3,title:"Abrufen der Routen f\xFCr gegebene Input- und Output-Token",slug:"abrufen-der-routen-fur-gegebene-input-und-output-token",children:[]},{level:3,title:"F\xFChren Sie den Token-Tausch durch",slug:"fuhren-sie-den-token-tausch-durch",children:[]}]},{level:2,title:"So verwenden Sie Jupiter in einer React-Anwendung",slug:"so-verwenden-sie-jupiter-in-einer-react-anwendung",children:[{level:3,title:"Installation",slug:"installation-1",children:[]},{level:3,title:"Anbieter hinzuf\xFCgen",slug:"anbieter-hinzufugen",children:[]},{level:3,title:"Abrufen der Token-Liste",slug:"abrufen-der-token-liste",children:[]},{level:3,title:"Aufbau des Staates",slug:"aufbau-des-staates",children:[]},{level:3,title:"Verwenden des useJupiter-Reaktionshooks",slug:"verwenden-des-usejupiter-reaktionshooks",children:[]},{level:3,title:"Durchf\xFChrung des Swaps",slug:"durchfuhrung-des-swaps",children:[]}]},{level:2,title:"So verwenden Sie die Jupiter-API",slug:"so-verwenden-sie-die-jupiter-api",children:[{level:3,title:"Installation",slug:"installation-2",children:[]},{level:3,title:"Abrufen der Routenkarte",slug:"abrufen-der-routenkarte",children:[]},{level:3,title:"Abrufen der serialisierten Transaktion zum Ausf\xFChren von Swap",slug:"abrufen-der-serialisierten-transaktion-zum-ausfuhren-von-swap",children:[]},{level:3,title:"Ausf\xFChrung der Swap-Transaktion",slug:"ausfuhrung-der-swap-transaktion",children:[]}]},{level:2,title:"Other Resources",slug:"other-resources",children:[]}],path:"/de/integrations/jupiter.html",pathLocale:"/de/",extraFields:[]},{title:"Mango Markets",headers:[{level:2,title:"So erhalten Sie eine Mango-Gruppe",slug:"so-erhalten-sie-eine-mango-gruppe",children:[]},{level:2,title:"So erstellen Sie ein Mango-Konto",slug:"so-erstellen-sie-ein-mango-konto",children:[]},{level:2,title:"So zahlen Sie USDC auf ein Mango-Konto ein",slug:"so-zahlen-sie-usdc-auf-ein-mango-konto-ein",children:[]},{level:2,title:"So platzieren Sie eine Spot-Order",slug:"so-platzieren-sie-eine-spot-order",children:[]},{level:2,title:"So laden Sie Gebote",slug:"so-laden-sie-gebote",children:[]},{level:2,title:"How to load asks",slug:"how-to-load-asks",children:[]},{level:2,title:"Andere Ressourcen",slug:"andere-ressourcen",children:[]}],path:"/de/integrations/mango.html",pathLocale:"/de/",extraFields:[]},{title:"ORAO VRF",headers:[{level:2,title:"Grundlegendes Nutzungsszenario",slug:"grundlegendes-nutzungsszenario",children:[]},{level:2,title:"SDKs (Software Developer Kits - Software-entwicklungs-packet)",slug:"sdks-software-developer-kits-software-entwicklungs-packet",children:[]},{level:2,title:"Anatomie einer Zuf\xE4lligkeitsanforderung",slug:"anatomie-einer-zufalligkeitsanforderung",children:[]},{level:2,title:"Anatomie einer VRF-Konfiguration",slug:"anatomie-einer-vrf-konfiguration",children:[]},{level:2,title:"Rust-natives Beispiel",slug:"rust-natives-beispiel",children:[{level:3,title:"1. Stellen Sie die Verbindung her",slug:"_1-stellen-sie-die-verbindung-her",children:[]},{level:3,title:"2. Erstellen Sie eine Anfrage",slug:"_2-erstellen-sie-eine-anfrage",children:[]},{level:3,title:"3. Warte auf die Erf\xFCllung",slug:"_3-warte-auf-die-erfullung",children:[]}]},{level:2,title:"CPI-Beispiel",slug:"cpi-beispiel",children:[{level:3,title:"1. Erstellen Sie den Vertrag",slug:"_1-erstellen-sie-den-vertrag",children:[]},{level:3,title:"2. Sammeln Sie die erforderlichen Konten",slug:"_2-sammeln-sie-die-erforderlichen-konten",children:[]},{level:3,title:"3. F\xFChren Sie einen CPI-Aufruf durch",slug:"_3-fuhren-sie-einen-cpi-aufruf-durch",children:[]},{level:3,title:"4. Nutzen Sie die erf\xFCllte Zuf\xE4lligkeit",slug:"_4-nutzen-sie-die-erfullte-zufalligkeit",children:[]}]}],path:"/de/integrations/orao-vrf.html",pathLocale:"/de/",extraFields:[]},{title:"Pyth",headers:[{level:2,title:"Verwendung von Pyth im Client",slug:"verwendung-von-pyth-im-client",children:[]},{level:2,title:"Verwendung von Pyth in Anchor",slug:"verwendung-von-pyth-in-anchor",children:[]},{level:2,title:"Other Resources",slug:"other-resources",children:[]}],path:"/de/integrations/pyth.html",pathLocale:"/de/",extraFields:[]},{title:"React Native",headers:[{level:2,title:"How to use @solana/web3.js in a React Native app",slug:"how-to-use-solana-web3-js-in-a-react-native-app",children:[{level:3,title:"Erstellen Sie eine neue Anwendung",slug:"erstellen-sie-eine-neue-anwendung",children:[]},{level:3,title:"Abh\xE4ngigkeiten installieren",slug:"abhangigkeiten-installieren",children:[]},{level:3,title:"Patchen Sie Babel, um die Hermes-Transformationen zu verwenden",slug:"patchen-sie-babel-um-die-hermes-transformationen-zu-verwenden",children:[]},{level:3,title:"Aktualisieren Sie \u201Eindex.js\u201C",slug:"aktualisieren-sie-\u201Eindex-js",children:[]},{level:3,title:"Aktualisieren Sie \u201EApp.tsx\u201C",slug:"aktualisieren-sie-\u201Eapp-tsx",children:[]},{level:3,title:"[iOS only] Install cocoapods",slug:"ios-only-install-cocoapods",children:[]},{level:3,title:"Anwendung starten",slug:"anwendung-starten",children:[]}]},{level:2,title:"Solana DApp Scaffold f\xFCr React Native",slug:"solana-dapp-scaffold-fur-react-native",children:[]},{level:2,title:"H\xE4ufige Probleme bei der Verwendung von Kryptobibliotheken in einer React Native-App",slug:"haufige-probleme-bei-der-verwendung-von-kryptobibliotheken-in-einer-react-native-app",children:[{level:3,title:"Fehler: \u201EWatchman-Crawling fehlgeschlagen\u201C.",slug:"fehler-\u201Ewatchman-crawling-fehlgeschlagen",children:[]},{level:3,title:"Fehler: URL.protocol ist nicht implementiert",slug:"fehler-url-protocol-ist-nicht-implementiert",children:[]},{level:3,title:"Fehler: crypto.getRandomValues() wird nicht unterst\xFCtzt",slug:"fehler-crypto-getrandomvalues-wird-nicht-unterstutzt",children:[]}]}],path:"/de/integrations/react-native.html",pathLocale:"/de/",extraFields:[]},{title:"Serum",headers:[{level:2,title:"So erhalten Sie einen Serummarkt",slug:"so-erhalten-sie-einen-serummarkt",children:[]},{level:2,title:"So erhalten Sie Serum-Bestellb\xFCcher",slug:"so-erhalten-sie-serum-bestellbucher",children:[]},{level:2,title:"So erhalten Sie aktuelle offene Bestellungen",slug:"so-erhalten-sie-aktuelle-offene-bestellungen",children:[]}],path:"/de/integrations/serum.html",pathLocale:"/de/",extraFields:[]},{title:"Strata",headers:[{level:2,title:"So erstellen Sie ein vollst\xE4ndig verwaltetes Token",slug:"so-erstellen-sie-ein-vollstandig-verwaltetes-token",children:[]},{level:2,title:"Wie man einen Token kauft und verkauft",slug:"wie-man-einen-token-kauft-und-verkauft",children:[]},{level:2,title:"Wie man Liquidit\xE4t aufbaut",slug:"wie-man-liquiditat-aufbaut",children:[]},{level:2,title:"Other Resources",slug:"other-resources",children:[]}],path:"/de/integrations/strata.html",pathLocale:"/de/",extraFields:[]},{title:"Switchboard",headers:[{level:2,title:"Daten Feeds",slug:"daten-feeds",children:[{level:3,title:"Daten aus einem Aggregator-Feed lesen",slug:"daten-aus-einem-aggregator-feed-lesen",children:[]},{level:3,title:"Erstellen eines neuen Aggregator-Feed",slug:"erstellen-eines-neuen-aggregator-feed",children:[]},{level:3,title:"Lesen Sie Daten aus einem Aggregator-Feed-in-Programm",slug:"lesen-sie-daten-aus-einem-aggregator-feed-in-programm",children:[]},{level:3,title:"So erstellen Sie einen Feed vom Publisher",slug:"so-erstellen-sie-einen-feed-vom-publisher",children:[]}]},{level:2,title:"Oracles",slug:"oracles",children:[{level:3,title:"Erstelen eines Oracle",slug:"erstelen-eines-oracle",children:[]},{level:3,title:"Ausf\xFChren eines lokalen Oracle",slug:"ausfuhren-eines-lokalen-oracle",children:[]},{level:3,title:"Oracle Config",slug:"oracle-config",children:[]}]},{level:2,title:"Verifizierbare Zufallsfunktion (VRF)",slug:"verifizierbare-zufallsfunktion-vrf",children:[{level:3,title:"Lesen eines VRF-Kontos",slug:"lesen-eines-vrf-kontos",children:[]},{level:3,title:"Erstellen eines VRF-Kontos",slug:"erstellen-eines-vrf-kontos",children:[]},{level:3,title:"Fordern von Zuf\xE4lligkeit vom vrf-Konto",slug:"fordern-von-zufalligkeit-vom-vrf-konto",children:[]}]},{level:2,title:"Resources",slug:"resources",children:[{level:3,title:"APIs and Libraries",slug:"apis-and-libraries",children:[]},{level:3,title:"Examples",slug:"examples",children:[]},{level:3,title:"More Information",slug:"more-information",children:[]}]}],path:"/de/integrations/switchboard.html",pathLocale:"/de/",extraFields:[]},{title:"web3Auth (Torus Wallet)",headers:[{level:2,title:"Was ist eine Brieftasche?",slug:"was-ist-eine-brieftasche",children:[]},{level:2,title:"Soziale Logins auf Solana",slug:"soziale-logins-auf-solana",children:[]},{level:2,title:"Integrationsleitfaden",slug:"integrationsleitfaden",children:[{level:3,title:"Abh\xE4ngigkeiten installieren",slug:"abhangigkeiten-installieren",children:[]},{level:3,title:"Importieren Sie das SDK und initialisieren Sie es",slug:"importieren-sie-das-sdk-und-initialisieren-sie-es",children:[]},{level:3,title:"Benutzeranmeldung ausl\xF6sen",slug:"benutzeranmeldung-auslosen",children:[]},{level:3,title:"Verwenden der Torus-Instanz zum Abrufen von Benutzerkontodetails",slug:"verwenden-der-torus-instanz-zum-abrufen-von-benutzerkontodetails",children:[]},{level:3,title:"Verwenden der Torus Solana-API zum Signieren einer Nachricht.",slug:"verwenden-der-torus-solana-api-zum-signieren-einer-nachricht",children:[]},{level:3,title:"Verwenden der Torus Solana-API zum Senden einer Transaktion",slug:"verwenden-der-torus-solana-api-zum-senden-einer-transaktion",children:[]},{level:3,title:"Aufladungen",slug:"aufladungen",children:[]},{level:3,title:"Ausloggen",slug:"ausloggen",children:[]}]},{level:2,title:"Ressourcen",slug:"ressourcen",children:[]}],path:"/de/integrations/web3auth.html",pathLocale:"/de/",extraFields:[]},{title:"Accounts",headers:[{level:2,title:"So erstellen Sie ein Systemkonto",slug:"so-erstellen-sie-ein-systemkonto",children:[]},{level:2,title:"So berechnen Sie die Kontokosten",slug:"so-berechnen-sie-die-kontokosten",children:[]},{level:2,title:"So erstellen Sie Konten mit Seeds",slug:"so-erstellen-sie-konten-mit-seeds",children:[{level:3,title:"Generieren",slug:"generieren",children:[]},{level:3,title:"Erstellen",slug:"erstellen",children:[]},{level:3,title:"Transferieren",slug:"transferieren",children:[]}]},{level:2,title:"So erstellen Sie PDAs",slug:"so-erstellen-sie-pdas",children:[{level:3,title:"Generieren Sie einen PDA",slug:"generieren-sie-einen-pda",children:[]},{level:3,title:"Erstellen Sie einen PDA",slug:"erstellen-sie-einen-pda",children:[]}]},{level:2,title:"So signieren Sie mit einem PDA",slug:"so-signieren-sie-mit-einem-pda",children:[{level:3,title:"Programm",slug:"programm",children:[]},{level:3,title:"Client",slug:"client-1",children:[]}]},{level:2,title:"So erhalten Sie Programmkonten",slug:"so-erhalten-sie-programmkonten",children:[]},{level:2,title:"So schlie\xDFen Sie Konten",slug:"so-schlie\xDFen-sie-konten",children:[]},{level:2,title:"So erhalten Sie den Kontostand",slug:"so-erhalten-sie-den-kontostand",children:[]}],path:"/de/references/accounts.html",pathLocale:"/de/",extraFields:[]},{title:"Transaktionen versenden",headers:[{level:2,title:"So senden Sie SPL-Tokens",slug:"so-senden-sie-spl-tokens",children:[]},{level:2,title:"So berechnen Sie die Transaktionskosten",slug:"so-berechnen-sie-die-transaktionskosten",children:[{level:3,title:"getEstimatedFee",slug:"getestimatedfee",children:[]},{level:3,title:"getFeeForMessage",slug:"getfeeformessage",children:[]}]},{level:2,title:"So f\xFCgen Sie einer Transaktion eine Notiz hinzu",slug:"so-fugen-sie-einer-transaktion-eine-notiz-hinzu",children:[]},{level:2,title:"So \xE4ndern Sie das Computing-Budget, die Geb\xFChr & Priorit\xE4t f\xFCr eine Transaktion",slug:"so-andern-sie-das-computing-budget-die-gebuhr-prioritat-fur-eine-transaktion",children:[]}],path:"/de/references/basic-transactions.html",pathLocale:"/de/",extraFields:[]},{title:"Keypairs and Wallets",headers:[{level:2,title:"So generieren Sie ein neues Schl\xFCsselpaar",slug:"so-generieren-sie-ein-neues-schlusselpaar",children:[]},{level:2,title:"So stellen Sie ein Schl\xFCsselpaar aus einem Geheimnis wieder her",slug:"so-stellen-sie-ein-schlusselpaar-aus-einem-geheimnis-wieder-her",children:[]},{level:2,title:"So verifizieren Sie ein Schl\xFCsselpaar",slug:"so-verifizieren-sie-ein-schlusselpaar",children:[]},{level:2,title:"So \xFCberpr\xFCfen Sie, ob ein \xF6ffentlicher Schl\xFCssel einen zugeh\xF6rigen privaten Schl\xFCssel hat",slug:"so-uberprufen-sie-ob-ein-offentlicher-schlussel-einen-zugehorigen-privaten-schlussel-hat",children:[]},{level:2,title:"Wie man eine mnemonische Phrase generiert",slug:"wie-man-eine-mnemonische-phrase-generiert",children:[]},{level:2,title:"So stellen Sie ein Schl\xFCsselpaar aus einer mnemonischen Phrase wieder her",slug:"so-stellen-sie-ein-schlusselpaar-aus-einer-mnemonischen-phrase-wieder-her",children:[]},{level:2,title:"So generieren Sie eine Vanity-Adresse",slug:"so-generieren-sie-eine-vanity-adresse",children:[]},{level:2,title:"So signieren und verifizieren Sie Nachrichten mit Wallets",slug:"so-signieren-und-verifizieren-sie-nachrichten-mit-wallets",children:[]},{level:2,title:"So verbinden Sie sich mit einer Brieftasche",slug:"so-verbinden-sie-sich-mit-einer-brieftasche",children:[{level:3,title:"React",slug:"react",children:[]},{level:3,title:"Vue",slug:"vue",children:[]},{level:3,title:"Svelte",slug:"svelte",children:[]}]}],path:"/de/references/keypairs-and-wallets.html",pathLocale:"/de/",extraFields:[]},{title:"Local Development",headers:[{level:2,title:"Starten eines lokalen Validators",slug:"starten-eines-lokalen-validators",children:[]},{level:2,title:"Verbindung zu Umgebungen",slug:"verbindung-zu-umgebungen",children:[]},{level:2,title:"Abonnieren von Veranstaltungen",slug:"abonnieren-von-veranstaltungen",children:[]},{level:2,title:"Test SOL erhalten",slug:"test-sol-erhalten",children:[]},{level:2,title:"Verwenden von Mainnet-Konten und -Programmen",slug:"verwenden-von-mainnet-konten-und-programmen",children:[{level:3,title:"So laden Sie Konten aus dem Mainnet",slug:"so-laden-sie-konten-aus-dem-mainnet",children:[]},{level:3,title:"So laden Sie Programme aus dem Mainnet",slug:"so-laden-sie-programme-aus-dem-mainnet",children:[]}]}],path:"/de/references/local-development.html",pathLocale:"/de/",extraFields:[]},{title:"Name Service",headers:[{level:2,title:"Namensregister",slug:"namensregister",children:[]},{level:2,title:"SOL-Dom\xE4nen aufl\xF6sen",slug:"sol-domanen-auflosen",children:[]},{level:2,title:"R\xFCckw\xE4rtssuche",slug:"ruckwartssuche",children:[]},{level:2,title:"Subdomain nachschlagen",slug:"subdomain-nachschlagen",children:[]},{level:2,title:"Finden Sie alle Domainnamen, die einem \xF6ffentlichen Schl\xFCssel geh\xF6ren",slug:"finden-sie-alle-domainnamen-die-einem-offentlichen-schlussel-gehoren",children:[]},{level:2,title:"Ein Twitter-Handle aufl\xF6sen",slug:"ein-twitter-handle-auflosen",children:[]},{level:2,title:"Umgekehrte Suche nach einem Twitter-Handle",slug:"umgekehrte-suche-nach-einem-twitter-handle",children:[]}],path:"/de/references/name-service.html",pathLocale:"/de/",extraFields:[]},{title:"NFTs",headers:[{level:2,title:"So erstellen Sie eine NFT",slug:"so-erstellen-sie-eine-nft",children:[{level:3,title:"Upload zu Arweave",slug:"upload-zu-arweave",children:[]},{level:3,title:"Minte das NFT",slug:"minte-das-nft",children:[]}]},{level:2,title:"So erhalten Sie NFT-Metadaten",slug:"so-erhalten-sie-nft-metadaten",children:[]},{level:2,title:"So erhalten Sie den Besitzer eines NFT",slug:"so-erhalten-sie-den-besitzer-eines-nft",children:[]},{level:2,title:"So erhalten Sie NFT Mint-Adressen",slug:"so-erhalten-sie-nft-mint-adressen",children:[{level:3,title:"Candy Machine V1",slug:"candy-machine-v1",children:[]},{level:3,title:"Candy Machine V2",slug:"candy-machine-v2",children:[]}]},{level:2,title:"Wie bekomme ich alle NFTs aus einem Wallet?",slug:"wie-bekomme-ich-alle-nfts-aus-einem-wallet",children:[]},{level:2,title:"Candy Machine v2",slug:"candy-machine-v2-1",children:[{level:3,title:"Wie erstelle ich eine Candy Machine?",slug:"wie-erstelle-ich-eine-candy-machine",children:[]},{level:3,title:"Wie Sie eine Candy Machine l\xF6schen",slug:"wie-sie-eine-candy-machine-loschen",children:[]},{level:3,title:"So finden Sie die Candy Machine Autorit\xE4t",slug:"so-finden-sie-die-candy-machine-autoritat",children:[]},{level:3,title:"So finden Sie Candy Machine mit der Wallet-Adresse",slug:"so-finden-sie-candy-machine-mit-der-wallet-adresse",children:[]},{level:3,title:"So finden Sie Candy Machine anhand seiner Adresse",slug:"so-finden-sie-candy-machine-anhand-seiner-adresse",children:[]},{level:3,title:"So finden Sie gepr\xE4gte NFTs von einer Candy Machine",slug:"so-finden-sie-gepragte-nfts-von-einer-candy-machine",children:[]},{level:3,title:"So f\xFCgen Sie Artikel in einer Candy Machine bei",slug:"so-fugen-sie-artikel-in-einer-candy-machine-bei",children:[]},{level:3,title:"Wie man einen NFT von einer Candy Machine pr\xE4gt",slug:"wie-man-einen-nft-von-einer-candy-machine-pragt",children:[]}]}],path:"/de/references/nfts.html",pathLocale:"/de/",extraFields:[]},{title:"Senden von Offline-Transaktionen",headers:[{level:2,title:"Transaktion unterzeichnen",slug:"transaktion-unterzeichnen",children:[]},{level:2,title:"Transaktion teilweise signieren",slug:"transaktion-teilweise-signieren",children:[]},{level:2,title:"Langlebige Nonce",slug:"langlebige-nonce",children:[{level:3,title:"Erstellen Sie ein Nonce-Konto",slug:"erstellen-sie-ein-nonce-konto",children:[]},{level:3,title:"Holen Sie sich ein Nonce-Konto",slug:"holen-sie-sich-ein-nonce-konto",children:[]},{level:3,title:"Verwenden Sie das Nonce-Konto",slug:"verwenden-sie-das-nonce-konto",children:[]}]}],path:"/de/references/offline-transactions.html",pathLocale:"/de/",extraFields:[]},{title:"Programme schreiben",headers:[{level:2,title:"So \xFCbertragen Sie SOL in einem Programm",slug:"so-ubertragen-sie-sol-in-einem-programm",children:[]},{level:2,title:"Wie bekomme ich die Uhr in ein Programm?",slug:"wie-bekomme-ich-die-uhr-in-ein-programm",children:[{level:3,title:"Passing Clock als Konto innerhalb einer Anweisung",slug:"passing-clock-als-konto-innerhalb-einer-anweisung",children:[]},{level:3,title:"Direkter Zugriff auf die Uhr innerhalb einer Anweisung",slug:"direkter-zugriff-auf-die-uhr-innerhalb-einer-anweisung",children:[]}]},{level:2,title:"So \xE4ndern Sie die Kontogr\xF6\xDFe",slug:"so-andern-sie-die-kontogro\xDFe",children:[]},{level:2,title:"Wie man einen programm\xFCbergreifenden Aufruf durchf\xFChrt",slug:"wie-man-einen-programmubergreifenden-aufruf-durchfuhrt",children:[]},{level:2,title:"So erstellen Sie einen PDA",slug:"so-erstellen-sie-einen-pda",children:[]},{level:2,title:"Wie man Konten liest",slug:"wie-man-konten-liest",children:[]},{level:2,title:"So verifizieren Sie Konten",slug:"so-verifizieren-sie-konten",children:[]},{level:2,title:"So lesen Sie mehrere Anweisungen aus einer Transaktion",slug:"so-lesen-sie-mehrere-anweisungen-aus-einer-transaktion",children:[]}],path:"/de/references/programs.html",pathLocale:"/de/",extraFields:[]},{title:"Staking",headers:[{level:2,title:"Holen Sie sich aktuelle Validatoren",slug:"holen-sie-sich-aktuelle-validatoren",children:[]},{level:2,title:"Einsatzkonto erstellen",slug:"einsatzkonto-erstellen",children:[]},{level:2,title:"Stake delegieren",slug:"stake-delegieren",children:[]},{level:2,title:"Delegator durch Validatoren abrufen",slug:"delegator-durch-validatoren-abrufen",children:[]},{level:2,title:"Stake deaktivieren",slug:"stake-deaktivieren",children:[]},{level:2,title:"Stake Auszahlen",slug:"stake-auszahlen",children:[]}],path:"/de/references/staking.html",pathLocale:"/de/",extraFields:[]},{title:"Interaktion mit Tokens",headers:[{level:2,title:"Was ben\xF6tige ich, um mit SPL-Tokens zu beginnen?",slug:"was-benotige-ich-um-mit-spl-tokens-zu-beginnen",children:[]},{level:2,title:"So erstellen Sie ein neues Token",slug:"so-erstellen-sie-ein-neues-token",children:[]},{level:2,title:"So erhalten Sie eine Token-Minze",slug:"so-erhalten-sie-eine-token-minze",children:[]},{level:2,title:"So erstellen Sie ein Token-Konto",slug:"so-erstellen-sie-ein-token-konto",children:[]},{level:2,title:"So erhalten Sie ein Token-Konto",slug:"so-erhalten-sie-ein-token-konto",children:[]},{level:2,title:"So erhalten Sie das Guthaben eines Token-Kontos",slug:"so-erhalten-sie-das-guthaben-eines-token-kontos",children:[]},{level:2,title:"Wie man Token pr\xE4gt",slug:"wie-man-token-pragt",children:[]},{level:2,title:"So \xFCbertragen Sie Token",slug:"so-ubertragen-sie-token",children:[]},{level:2,title:"Wie man Token verbrennt",slug:"wie-man-token-verbrennt",children:[]},{level:2,title:"So schlie\xDFen Sie Token-Konten",slug:"so-schlie\xDFen-sie-token-konten",children:[]},{level:2,title:"So legen Sie die Autorit\xE4t f\xFCr Token-Konten oder Mints fest",slug:"so-legen-sie-die-autoritat-fur-token-konten-oder-mints-fest",children:[]},{level:2,title:"So genehmigen Sie einen Token-Delegierten",slug:"so-genehmigen-sie-einen-token-delegierten",children:[]},{level:2,title:"So widerrufen Sie einen Token-Delegierten",slug:"so-widerrufen-sie-einen-token-delegierten",children:[]},{level:2,title:"So verwalten Sie verpackte SOL",slug:"so-verwalten-sie-verpackte-sol",children:[{level:3,title:"Token-Konto erstellen",slug:"token-konto-erstellen",children:[]},{level:3,title:"Guthaben hinzuf\xFCgen",slug:"guthaben-hinzufugen",children:[]}]},{level:2,title:"So erhalten Sie alle Token-Konten nach Eigent\xFCmer",slug:"so-erhalten-sie-alle-token-konten-nach-eigentumer",children:[]}],path:"/de/references/token.html",pathLocale:"/de/",extraFields:[]},{title:"Comptes",headers:[{level:2,title:"Faits",slug:"faits",children:[]},{level:2,title:"Examen plus approfondi",slug:"examen-plus-approfondi",children:[{level:3,title:"Le mod\xE8le d'un compte",slug:"le-modele-d-un-compte",children:[]},{level:3,title:"Rente",slug:"rente",children:[]}]},{level:2,title:"Autres Ressources",slug:"autres-ressources",children:[{level:3,title:"Cr\xE9dit",slug:"credit",children:[]}]}],path:"/fr/core-concepts/accounts.html",pathLocale:"/fr/",extraFields:[]},{title:"Adresses d\xE9riv\xE9es de programmes (PDAs)",headers:[{level:2,title:"Faits",slug:"faits",children:[]},{level:2,title:"Examen plus approfondi",slug:"examen-plus-approfondi",children:[{level:3,title:"G\xE9n\xE9ration des PDAs",slug:"generation-des-pdas",children:[]},{level:3,title:"Interaction avec les PDAs",slug:"interaction-avec-les-pdas",children:[]}]},{level:2,title:"Autres Ressources",slug:"autres-ressources",children:[]}],path:"/fr/core-concepts/pdas.html",pathLocale:"/fr/",extraFields:[]},{title:"Programmes",headers:[{level:2,title:"Faits",slug:"faits",children:[]},{level:2,title:"Examen plus approfondi",slug:"examen-plus-approfondi",children:[{level:3,title:"Programmes Natifs & La Biblioth\xE8que des Programmes de Solana (SPL)",slug:"programmes-natifs-la-bibliotheque-des-programmes-de-solana-spl",children:[]},{level:3,title:"Ecrire des programmes",slug:"ecrire-des-programmes",children:[]},{level:3,title:"D\xE9ployer des programmes",slug:"deployer-des-programmes",children:[]}]},{level:2,title:"Autres Ressources",slug:"autres-ressources",children:[]}],path:"/fr/core-concepts/programs.html",pathLocale:"/fr/",extraFields:[]},{title:"Transactions",headers:[{level:2,title:"Faits",slug:"faits",children:[]},{level:2,title:"Examen plus approfondi",slug:"examen-plus-approfondi",children:[{level:3,title:"Frais",slug:"frais",children:[]}]},{level:2,title:"Autres Ressources",slug:"autres-ressources",children:[]}],path:"/fr/core-concepts/transactions.html",pathLocale:"/fr/",extraFields:[]},{title:"Installation",headers:[{level:2,title:"Installer Web3.js",slug:"installer-web3-js",children:[{level:3,title:"Web3.js",slug:"web3-js",children:[]},{level:3,title:"SPL-Token",slug:"spl-token",children:[]},{level:3,title:"Wallet-Adapter",slug:"wallet-adapter",children:[]}]},{level:2,title:"Installer Rust",slug:"installer-rust",children:[]},{level:2,title:"Installer CLI",slug:"installer-cli",children:[{level:3,title:"macOS & Linux",slug:"macos-linux",children:[]},{level:3,title:"Windows",slug:"windows",children:[]},{level:3,title:"Compiler \xE0 partir du code source",slug:"compiler-a-partir-du-code-source",children:[]}]}],path:"/fr/getting-started/installation.html",pathLocale:"/fr/",extraFields:[]},{title:"Maps de Comptes",headers:[{level:2,title:"D\xE9rivation des PDAs",slug:"derivation-des-pdas",children:[]},{level:2,title:"Compte de Map Unique",slug:"compte-de-map-unique",children:[]}],path:"/fr/guides/account-maps.html",pathLocale:"/fr/",extraFields:[]},{title:"Migration des Comptes de Donn\xE9es de Programmes",headers:[{level:2,title:"Comment migrer les comptes de donn\xE9es d'un programme ?",slug:"comment-migrer-les-comptes-de-donnees-d-un-programme",children:[]},{level:2,title:"Sc\xE9nario",slug:"scenario",children:[]},{level:2,title:"Mise \xE0 jour du Compte",slug:"mise-a-jour-du-compte",children:[{level:3,title:"1. Ajouter une logique de conversion de compte",slug:"_1-ajouter-une-logique-de-conversion-de-compte",children:[]}]},{level:2,title:"Ressources",slug:"ressources",children:[]}],path:"/fr/guides/data-migration.html",pathLocale:"/fr/",extraFields:[]},{title:"D\xE9bogage des Programmes Solana",headers:[{level:2,title:"Faits",slug:"faits",children:[]},{level:2,title:"Tests d'Ex\xE9cution et D\xE9bogage dans l'\xE9diteur",slug:"tests-d-execution-et-debogage-dans-l-editeur",children:[]},{level:2,title:"Test avec un N\u0153ud de Validation Local dans l'\xE9diteur",slug:"test-avec-un-n\u0153ud-de-validation-local-dans-l-editeur",children:[]},{level:2,title:"Test avec un N\u0153ud de Validation Local \xE0 partir des Applications Clients",slug:"test-avec-un-n\u0153ud-de-validation-local-a-partir-des-applications-clients",children:[]},{level:2,title:"Ressources",slug:"ressources",children:[]}],path:"/fr/guides/debugging-solana-programs.html",pathLocale:"/fr/",extraFields:[]},{title:"Test de Conformit\xE9 des Fonctionnalit\xE9s",headers:[{level:2,title:"Faits",slug:"faits",children:[]},{level:2,title:"Sc\xE9nario",slug:"scenario",children:[]},{level:2,title:"Statut de la Fonctionnalit\xE9",slug:"statut-de-la-fonctionnalite",children:[]},{level:2,title:"Test de Conformit\xE9",slug:"test-de-conformite",children:[]},{level:2,title:"D\xE9monstration Simple",slug:"demonstration-simple",children:[{level:3,title:"Toutes les fonctionnalit\xE9s activ\xE9es",slug:"toutes-les-fonctionnalites-activees",children:[]},{level:3,title:"Fonctionnalit\xE9s s\xE9lectives d\xE9sactiv\xE9es",slug:"fonctionnalites-selectives-desactivees",children:[]}]},{level:2,title:"Tests de Conformit\xE9 Compl\xE8te",slug:"tests-de-conformite-complete",children:[]},{level:2,title:"Test de Conformit\xE9 Compl\xE8te programm\xE9",slug:"test-de-conformite-complete-programme",children:[]},{level:2,title:"Ressources",slug:"ressources",children:[]}],path:"/fr/guides/feature-parity-testing.html",pathLocale:"/fr/",extraFields:[]},{title:"Obtenir les comptes d'un programme",headers:[{level:2,title:"Faits",slug:"faits",children:[]},{level:2,title:"Examen plus approfondi",slug:"examen-plus-approfondi",children:[{level:3,title:"filters",slug:"filters",children:[]},{level:3,title:"dataSlice",slug:"dataslice",children:[]}]},{level:2,title:"Autres Ressources",slug:"autres-ressources",children:[]}],path:"/fr/guides/get-program-accounts.html",pathLocale:"/fr/",extraFields:[]},{title:"R\xE9essayer des Transactions",headers:[{level:2,title:"Faits",slug:"faits",children:[]},{level:2,title:"Le Voyage d'une Transaction",slug:"le-voyage-d-une-transaction",children:[{level:3,title:"Comment Les Clients Soumettent Les Transactions",slug:"comment-les-clients-soumettent-les-transactions",children:[]},{level:3,title:"Comment Les N\u0153uds RPC Transmettent Les Transactions",slug:"comment-les-n\u0153uds-rpc-transmettent-les-transactions",children:[]}]},{level:2,title:"Comment Les Transactions Sont Rejet\xE9es",slug:"comment-les-transactions-sont-rejetees",children:[{level:3,title:"Avant le traitement d'une transaction",slug:"avant-le-traitement-d-une-transaction",children:[]},{level:3,title:"Apr\xE8s le traitement d'une transaction et avant sa finalisation",slug:"apres-le-traitement-d-une-transaction-et-avant-sa-finalisation",children:[]}]},{level:2,title:"Traitement Des Transactions Rejet\xE9es",slug:"traitement-des-transactions-rejetees",children:[{level:3,title:"Un Examen Approfondi De sendTransaction",slug:"un-examen-approfondi-de-sendtransaction",children:[]}]},{level:2,title:"Personnalisation De La logique De Retransmission",slug:"personnalisation-de-la-logique-de-retransmission",children:[{level:3,title:"Le Co\xFBt de l'Omission Du Contr\xF4le Pr\xE9alable",slug:"le-cout-de-l-omission-du-controle-prealable",children:[]},{level:3,title:"Quand Re-Signer Des Transactions",slug:"quand-re-signer-des-transactions",children:[]}]},{level:2,title:"Remerciements",slug:"remerciements",children:[]}],path:"/fr/guides/retrying-transactions.html",pathLocale:"/fr/",extraFields:[]},{title:"S\xE9rialisation des donn\xE9es",headers:[{level:2,title:"Configuration pour la s\xE9rialisation avec Borsh",slug:"configuration-pour-la-serialisation-avec-borsh",children:[]},{level:2,title:"Comment s\xE9rialiser les donn\xE9es d'instruction c\xF4t\xE9 client",slug:"comment-serialiser-les-donnees-d-instruction-cote-client",children:[]},{level:2,title:"Comment d\xE9s\xE9rialiser les donn\xE9es d'instruction dans le programme",slug:"comment-deserialiser-les-donnees-d-instruction-dans-le-programme",children:[]},{level:2,title:"Comment s\xE9rialiser des donn\xE9es du compte dans le programme",slug:"comment-serialiser-des-donnees-du-compte-dans-le-programme",children:[{level:3,title:"Pack",slug:"pack",children:[]},{level:3,title:"S\xE9rialisation/D\xE9s\xE9rialisation",slug:"serialisation-deserialisation",children:[]},{level:3,title:"Utilisation",slug:"utilisation",children:[]}]},{level:2,title:"Comment d\xE9s\xE9rialisation des donn\xE9es du compte c\xF4t\xE9 client",slug:"comment-deserialisation-des-donnees-du-compte-cote-client",children:[]},{level:2,title:"Mappages courants de Solana TS/JS",slug:"mappages-courants-de-solana-ts-js",children:[]},{level:2,title:"Constructions Avanc\xE9es",slug:"constructions-avancees",children:[{level:3,title:"COption",slug:"coption",children:[]}]},{level:2,title:"Ressources",slug:"ressources",children:[]}],path:"/fr/guides/serialization.html",pathLocale:"/fr/",extraFields:[]},{title:"Transactions Versionn\xE9es",headers:[{level:2,title:"Faits",slug:"faits",children:[]},{level:2,title:"Transaction H\xE9rit\xE9e",slug:"transaction-heritee",children:[]},{level:2,title:"Message H\xE9rit\xE9",slug:"message-herite",children:[{level:3,title:"En-t\xEAte",slug:"en-tete",children:[]},{level:3,title:"Tableau compact d'adresses de comptes",slug:"tableau-compact-d-adresses-de-comptes",children:[]},{level:3,title:"Tableau compact d'instructions",slug:"tableau-compact-d-instructions",children:[]}]},{level:2,title:"Probl\xE8mes li\xE9s aux Transactions H\xE9rit\xE9es",slug:"problemes-lies-aux-transactions-heritees",children:[]},{level:2,title:"Tables de Consultation d'Adresses (LUT)",slug:"tables-de-consultation-d-adresses-lut",children:[]},{level:2,title:"Transactions Versionn\xE9es : TransactionV0",slug:"transactions-versionnees-transactionv0",children:[]},{level:2,title:"MessageV0",slug:"messagev0",children:[{level:3,title:"Tableau compact de consultations de tables d'adresses",slug:"tableau-compact-de-consultations-de-tables-d-adresses",children:[]},{level:3,title:"Tableau compact d'instructions",slug:"tableau-compact-d-instructions-1",children:[]}]},{level:2,title:"Modifications du RPC",slug:"modifications-du-rpc",children:[]},{level:2,title:"Autres Ressources",slug:"autres-ressources",children:[]},{level:2,title:"R\xE9f\xE9rences",slug:"references",children:[]}],path:"/fr/guides/versioned-transactions.html",pathLocale:"/fr/",extraFields:[]},{title:"Pour Commencer",headers:[{level:2,title:"La composabilit\xE9 est Essentielle",slug:"la-composabilite-est-essentielle",children:[]},{level:2,title:"Contribution",slug:"contribution",children:[]}],path:"/fr/integrations/",pathLocale:"/fr/",extraFields:[]},{title:"Jupiter",headers:[{level:3,title:"Installation",slug:"installation",children:[]},{level:3,title:"R\xE9cup\xE9ration de la liste des jetons depuis Jupiter",slug:"recuperation-de-la-liste-des-jetons-depuis-jupiter",children:[]},{level:3,title:"Chargement de l'instance Jupiter",slug:"chargement-de-l-instance-jupiter",children:[]},{level:3,title:"Obtenir le Chemin d'Acc\xE8s (RouteMap)",slug:"obtenir-le-chemin-d-acces-routemap",children:[]},{level:3,title:"Obtention des chemins pour un jeton d'Entr\xE9e et de Sortie donn\xE9",slug:"obtention-des-chemins-pour-un-jeton-d-entree-et-de-sortie-donne",children:[]},{level:3,title:"Ex\xE9cuter l'Echange de Jetons",slug:"executer-l-echange-de-jetons",children:[]},{level:2,title:"Comment utiliser Jupiter dans une application React",slug:"comment-utiliser-jupiter-dans-une-application-react",children:[{level:3,title:"Installation",slug:"installation-1",children:[]},{level:3,title:"Ajout du Provider",slug:"ajout-du-provider",children:[]},{level:3,title:"R\xE9cup\xE9ration de la Liste de Jetons",slug:"recuperation-de-la-liste-de-jetons",children:[]},{level:3,title:"Cr\xE9ation de l'\xC9tat",slug:"creation-de-l-etat",children:[]},{level:3,title:"Utilisation du hook react useJupiter",slug:"utilisation-du-hook-react-usejupiter",children:[]},{level:3,title:"Ex\xE9cution de l'Echange",slug:"execution-de-l-echange",children:[]}]},{level:2,title:"Comment utiliser l'API de Jupiter",slug:"comment-utiliser-l-api-de-jupiter",children:[{level:3,title:"Installation",slug:"installation-2",children:[]},{level:3,title:"Obtention du Chemin d'Acc\xE8s",slug:"obtention-du-chemin-d-acces",children:[]},{level:3,title:"Obtention de la Transaction S\xE9rialis\xE9e pour effectuer le Swap",slug:"obtention-de-la-transaction-serialisee-pour-effectuer-le-swap",children:[]},{level:3,title:"Ex\xE9cution de l'Op\xE9ration d'Echange",slug:"execution-de-l-operation-d-echange",children:[]}]},{level:2,title:"Autres Ressources",slug:"autres-ressources",children:[]}],path:"/fr/integrations/jupiter.html",pathLocale:"/fr/",extraFields:[]},{title:"Mango Markets",headers:[{level:2,title:"Comment r\xE9cup\xE9rer un Groupe Mango",slug:"comment-recuperer-un-groupe-mango",children:[]},{level:2,title:"Comment cr\xE9er un Compte Mango",slug:"comment-creer-un-compte-mango",children:[]},{level:2,title:"Comment d\xE9poser des USDC sur un Compte Mango",slug:"comment-deposer-des-usdc-sur-un-compte-mango",children:[]},{level:2,title:"Comment placer un ordre spot",slug:"comment-placer-un-ordre-spot",children:[]},{level:2,title:"Comment charger les offres",slug:"comment-charger-les-offres",children:[]},{level:2,title:"Comment charger les demandes",slug:"comment-charger-les-demandes",children:[]},{level:2,title:"Autres Ressources",slug:"autres-ressources",children:[]}],path:"/fr/integrations/mango.html",pathLocale:"/fr/",extraFields:[]},{title:"ORAO VRF",headers:[{level:2,title:"Sc\xE9nario d'utilisation de base",slug:"scenario-d-utilisation-de-base",children:[]},{level:2,title:"SDKs",slug:"sdks",children:[]},{level:2,title:"Anatomie d'une requ\xEAte d'al\xE9atoire",slug:"anatomie-d-une-requete-d-aleatoire",children:[]},{level:2,title:"Anatomie d'une configuration VRF",slug:"anatomie-d-une-configuration-vrf",children:[]},{level:2,title:"Exemple Rust-natif",slug:"exemple-rust-natif",children:[{level:3,title:"1. Configurer la connexion",slug:"_1-configurer-la-connexion",children:[]},{level:3,title:"2. Cr\xE9er une requ\xEAte",slug:"_2-creer-une-requete",children:[]},{level:3,title:"3. Attendre le traitement",slug:"_3-attendre-le-traitement",children:[]}]},{level:2,title:"Exemple CPI",slug:"exemple-cpi",children:[{level:3,title:"1. Cr\xE9er le contrat",slug:"_1-creer-le-contrat",children:[]},{level:3,title:"2. Collecter les comptes n\xE9cessaires",slug:"_2-collecter-les-comptes-necessaires",children:[]},{level:3,title:"3. Effectuer un appel CPI",slug:"_3-effectuer-un-appel-cpi",children:[]},{level:3,title:"4. Utiliser le caract\xE8re al\xE9atoire obtenu",slug:"_4-utiliser-le-caractere-aleatoire-obtenu",children:[]}]}],path:"/fr/integrations/orao-vrf.html",pathLocale:"/fr/",extraFields:[]},{title:"Pyth",headers:[{level:2,title:"Comment utiliser Pyth dans le Client",slug:"comment-utiliser-pyth-dans-le-client",children:[]},{level:2,title:"Comment utiliser Pyth dans Anchor",slug:"comment-utiliser-pyth-dans-anchor",children:[]},{level:2,title:"Autres Ressources",slug:"autres-ressources",children:[]}],path:"/fr/integrations/pyth.html",pathLocale:"/fr/",extraFields:[]},{title:"React Native",headers:[{level:2,title:"Comment utiliser @solana/web3.js dans une application React Native",slug:"comment-utiliser-solana-web3-js-dans-une-application-react-native",children:[{level:3,title:"Cr\xE9er une nouvelle application",slug:"creer-une-nouvelle-application",children:[]},{level:3,title:"Installer les d\xE9pendances",slug:"installer-les-dependances",children:[]},{level:3,title:"Corriger Babel pour utiliser les transformations Hermes",slug:"corriger-babel-pour-utiliser-les-transformations-hermes",children:[]},{level:3,title:"Mettre \xE0 jour index.js",slug:"mettre-a-jour-index-js",children:[]},{level:3,title:"Mettre \xE0 jour App.tsx",slug:"mettre-a-jour-app-tsx",children:[]},{level:3,title:"[iOS uniquement] Installer cocoapods",slug:"ios-uniquement-installer-cocoapods",children:[]},{level:3,title:"D\xE9marrer l'application",slug:"demarrer-l-application",children:[]}]},{level:2,title:"Solana DApp Scaffold for React Native",slug:"solana-dapp-scaffold-for-react-native",children:[]},{level:2,title:"Probl\xE8mes courants lors de l'utilisation de biblioth\xE8ques crypto dans une application React Native",slug:"problemes-courants-lors-de-l-utilisation-de-bibliotheques-crypto-dans-une-application-react-native",children:[{level:3,title:"Erreur: Watchman crawl failed",slug:"erreur-watchman-crawl-failed",children:[]},{level:3,title:"Erreur: URL.protocol is not implemented",slug:"erreur-url-protocol-is-not-implemented",children:[]},{level:3,title:"Erreur: crypto.getRandomValues() not supported",slug:"erreur-crypto-getrandomvalues-not-supported",children:[]}]}],path:"/fr/integrations/react-native.html",pathLocale:"/fr/",extraFields:[]},{title:"Serum",headers:[{level:2,title:"Comment obtenir un march\xE9 de Serum",slug:"comment-obtenir-un-marche-de-serum",children:[]},{level:2,title:"Comment obtenir les carnets d'ordres de Serum",slug:"comment-obtenir-les-carnets-d-ordres-de-serum",children:[]},{level:2,title:"Comment obtenir les ordres ouverts actuels",slug:"comment-obtenir-les-ordres-ouverts-actuels",children:[]}],path:"/fr/integrations/serum.html",pathLocale:"/fr/",extraFields:[]},{title:"Strata",headers:[{level:2,title:"Comment cr\xE9er un jeton enti\xE8rement g\xE9r\xE9",slug:"comment-creer-un-jeton-entierement-gere",children:[]},{level:2,title:"Comment acheter et vendre un jeton",slug:"comment-acheter-et-vendre-un-jeton",children:[]},{level:2,title:"Comment initier la liquidit\xE9",slug:"comment-initier-la-liquidite",children:[]},{level:2,title:"Autres Ressources",slug:"autres-ressources",children:[]}],path:"/fr/integrations/strata.html",pathLocale:"/fr/",extraFields:[]},{title:"Switchboard",headers:[{level:2,title:"Flux de Donn\xE9es",slug:"flux-de-donnees",children:[{level:3,title:"Lire les donn\xE9es d'un flux d'agr\xE9gation",slug:"lire-les-donnees-d-un-flux-d-agregation",children:[]},{level:3,title:"Cr\xE9er un nouveau flux d'agr\xE9gation",slug:"creer-un-nouveau-flux-d-agregation",children:[]},{level:3,title:"Lire les donn\xE9es d'un flux d'agr\xE9gation dans un programme",slug:"lire-les-donnees-d-un-flux-d-agregation-dans-un-programme",children:[]},{level:3,title:"Comment Cr\xE9er un Flux \xE0 partir du Publisher",slug:"comment-creer-un-flux-a-partir-du-publisher",children:[]}]},{level:2,title:"Oracles",slug:"oracles",children:[{level:3,title:"Cr\xE9er un oracle",slug:"creer-un-oracle",children:[]},{level:3,title:"Ex\xE9cuter un oracle localement",slug:"executer-un-oracle-localement",children:[]},{level:3,title:"Configuration de l'Oracle",slug:"configuration-de-l-oracle",children:[]}]},{level:2,title:"Fonction Al\xE9atoire V\xE9rifiable(VRF)",slug:"fonction-aleatoire-verifiable-vrf",children:[{level:3,title:"Lire un compte VRF",slug:"lire-un-compte-vrf",children:[]},{level:3,title:"Cr\xE9er un compte VRF",slug:"creer-un-compte-vrf",children:[]},{level:3,title:"Demande de Hasard \xE0 partir d'un compte VRF",slug:"demande-de-hasard-a-partir-d-un-compte-vrf",children:[]}]},{level:2,title:"Ressources",slug:"ressources",children:[{level:3,title:"API et Biblioth\xE8ques",slug:"api-et-bibliotheques",children:[]},{level:3,title:"Exemples",slug:"exemples",children:[]},{level:3,title:"Plus d'Informations",slug:"plus-d-informations",children:[]}]}],path:"/fr/integrations/switchboard.html",pathLocale:"/fr/",extraFields:[]},{title:"web3Auth (Torus Wallet)",headers:[{level:2,title:"Qu'est-ce qu'un portefeuille ?",slug:"qu-est-ce-qu-un-portefeuille",children:[]},{level:2,title:"Connexions Sociales sur Solana",slug:"connexions-sociales-sur-solana",children:[]},{level:2,title:"Guide d'Int\xE9gration",slug:"guide-d-integration",children:[{level:3,title:"Installation des D\xE9pendances",slug:"installation-des-dependances",children:[]},{level:3,title:"Importer le SDK et l'initialiser",slug:"importer-le-sdk-et-l-initialiser",children:[]},{level:3,title:"D\xE9clencher la connexion de l'utilisateur",slug:"declencher-la-connexion-de-l-utilisateur",children:[]},{level:3,title:"Utilisation de l'instance torus pour r\xE9cup\xE9rer les d\xE9tails du compte utilisateur",slug:"utilisation-de-l-instance-torus-pour-recuperer-les-details-du-compte-utilisateur",children:[]},{level:3,title:"Utilisation de l'API Solana de Torus pour signer un message.",slug:"utilisation-de-l-api-solana-de-torus-pour-signer-un-message",children:[]},{level:3,title:"Utilisation de l'API Solana de Torus pour envoyer une transaction.",slug:"utilisation-de-l-api-solana-de-torus-pour-envoyer-une-transaction",children:[]},{level:3,title:"Top-ups\u200B",slug:"top-ups\u200B",children:[]},{level:3,title:"D\xE9connexion",slug:"deconnexion",children:[]}]},{level:2,title:"Ressources",slug:"ressources",children:[]}],path:"/fr/integrations/web3auth.html",pathLocale:"/fr/",extraFields:[]},{title:"Comptes",headers:[{level:2,title:"Comment cr\xE9er un compte de syst\xE8me",slug:"comment-creer-un-compte-de-systeme",children:[]},{level:2,title:"Comment calculer les frais de compte",slug:"comment-calculer-les-frais-de-compte",children:[]},{level:2,title:"Comment cr\xE9er des comptes avec des seeds",slug:"comment-creer-des-comptes-avec-des-seeds",children:[{level:3,title:"G\xE9n\xE9rer",slug:"generer",children:[]},{level:3,title:"Cr\xE9er",slug:"creer",children:[]},{level:3,title:"Transf\xE9rer",slug:"transferer",children:[]}]},{level:2,title:"Comment cr\xE9er des PDAs",slug:"comment-creer-des-pdas",children:[{level:3,title:"G\xE9n\xE9rer un PDA",slug:"generer-un-pda",children:[]},{level:3,title:"Cr\xE9er un PDA",slug:"creer-un-pda",children:[]}]},{level:2,title:"Comment signer avec un PDA",slug:"comment-signer-avec-un-pda",children:[{level:3,title:"Programme",slug:"programme-1",children:[]},{level:3,title:"Client",slug:"client-1",children:[]}]},{level:2,title:"Comment obtenir les comptes du programme",slug:"comment-obtenir-les-comptes-du-programme",children:[]},{level:2,title:"Comment fermer des comptes",slug:"comment-fermer-des-comptes",children:[]},{level:2,title:"Comment obtenir le solde d'un compte",slug:"comment-obtenir-le-solde-d-un-compte",children:[]}],path:"/fr/references/accounts.html",pathLocale:"/fr/",extraFields:[]},{title:"Envoyer des Transactions",headers:[{level:2,title:"Comment envoyer des SOL",slug:"comment-envoyer-des-sol",children:[]},{level:2,title:"Comment envoyer des jetons SPL",slug:"comment-envoyer-des-jetons-spl",children:[]},{level:2,title:"Comment calculer les co\xFBts de transaction",slug:"comment-calculer-les-couts-de-transaction",children:[{level:3,title:"getEstimatedFee",slug:"getestimatedfee",children:[]},{level:3,title:"getFeeForMessage",slug:"getfeeformessage",children:[]}]},{level:2,title:"Comment ajouter un m\xE9mo \xE0 une transaction",slug:"comment-ajouter-un-memo-a-une-transaction",children:[]},{level:2,title:"Comment changer le budget de calcul, les frais, & la priorisation d'une transaction",slug:"comment-changer-le-budget-de-calcul-les-frais-la-priorisation-d-une-transaction",children:[]}],path:"/fr/references/basic-transactions.html",pathLocale:"/fr/",extraFields:[]},{title:"Paires de Cl\xE9s et Portefeuilles",headers:[{level:2,title:"Comment g\xE9n\xE9rer une nouvelle Paire de Cl\xE9s",slug:"comment-generer-une-nouvelle-paire-de-cles",children:[]},{level:2,title:"Comment restaurer une Paire de cl\xE9s \xE0 partir d'une cl\xE9 priv\xE9e",slug:"comment-restaurer-une-paire-de-cles-a-partir-d-une-cle-privee",children:[]},{level:2,title:"Comment v\xE9rifier une Paire de Cl\xE9s",slug:"comment-verifier-une-paire-de-cles",children:[]},{level:2,title:"Comment v\xE9rifier si une cl\xE9 publique a une cl\xE9 priv\xE9e associ\xE9e",slug:"comment-verifier-si-une-cle-publique-a-une-cle-privee-associee",children:[]},{level:2,title:"Comment g\xE9n\xE9rer une phrase mn\xE9monique",slug:"comment-generer-une-phrase-mnemonique",children:[]},{level:2,title:"Comment restaurer une paire de cl\xE9s \xE0 partir d'une phrase mn\xE9monique",slug:"comment-restaurer-une-paire-de-cles-a-partir-d-une-phrase-mnemonique",children:[]},{level:2,title:"Comment g\xE9n\xE9rer une adresse personnalis\xE9e",slug:"comment-generer-une-adresse-personnalisee",children:[]},{level:2,title:"Comment signer et v\xE9rifier des messages avec les portefeuilles",slug:"comment-signer-et-verifier-des-messages-avec-les-portefeuilles",children:[]},{level:2,title:"Comment se connecter \xE0 un portefeuille",slug:"comment-se-connecter-a-un-portefeuille",children:[{level:3,title:"React",slug:"react",children:[]},{level:3,title:"Vue",slug:"vue",children:[]},{level:3,title:"Svelte",slug:"svelte",children:[]}]}],path:"/fr/references/keypairs-and-wallets.html",pathLocale:"/fr/",extraFields:[]},{title:"D\xE9veloppement Local",headers:[{level:2,title:"D\xE9marrer un Validateur Local",slug:"demarrer-un-validateur-local",children:[]},{level:2,title:"Connexion aux Environnements",slug:"connexion-aux-environnements",children:[]},{level:2,title:"Inscription \xE0 des Ev\xE9nements",slug:"inscription-a-des-evenements",children:[]},{level:2,title:"Obtention de SOL pour les Tests",slug:"obtention-de-sol-pour-les-tests",children:[]},{level:2,title:"Utilisation des Comptes et des Programmes du Mainnet",slug:"utilisation-des-comptes-et-des-programmes-du-mainnet",children:[{level:3,title:"Comment charger des comptes depuis le mainnet",slug:"comment-charger-des-comptes-depuis-le-mainnet",children:[]},{level:3,title:"Comment charger des programmes depuis le mainnet",slug:"comment-charger-des-programmes-depuis-le-mainnet",children:[]}]}],path:"/fr/references/local-development.html",pathLocale:"/fr/",extraFields:[]},{title:"Service de Noms",headers:[{level:2,title:"Registre de noms",slug:"registre-de-noms",children:[]},{level:2,title:"R\xE9solution des domaines SOL",slug:"resolution-des-domaines-sol",children:[]},{level:2,title:"Recherche invers\xE9e",slug:"recherche-inversee",children:[]},{level:2,title:"Recherche des sous-domaines",slug:"recherche-des-sous-domaines",children:[]},{level:2,title:"Trouver tous les noms de domaine appartenant \xE0 une cl\xE9 publique",slug:"trouver-tous-les-noms-de-domaine-appartenant-a-une-cle-publique",children:[]},{level:2,title:"R\xE9soudre un pseudo Twitter",slug:"resoudre-un-pseudo-twitter",children:[]},{level:2,title:"Recherche invers\xE9e d'un pseudo Twitter",slug:"recherche-inversee-d-un-pseudo-twitter",children:[]}],path:"/fr/references/name-service.html",pathLocale:"/fr/",extraFields:[]},{title:"NFTs",headers:[{level:2,title:"Comment cr\xE9er un NFT",slug:"comment-creer-un-nft",children:[{level:3,title:"T\xE9l\xE9charger sur Arweave",slug:"telecharger-sur-arweave",children:[]},{level:3,title:"Cr\xE9er le NFT",slug:"creer-le-nft",children:[]}]},{level:2,title:"Comment obtenir les m\xE9tadonn\xE9es des NFTs",slug:"comment-obtenir-les-metadonnees-des-nfts",children:[]},{level:2,title:"Comment obtenir le propri\xE9taire d'un NFT",slug:"comment-obtenir-le-proprietaire-d-un-nft",children:[]},{level:2,title:"Comment obtenir les adresses de cr\xE9ation des NFTs",slug:"comment-obtenir-les-adresses-de-creation-des-nfts",children:[{level:3,title:"Candy Machine V1",slug:"candy-machine-v1",children:[]},{level:3,title:"Candy Machine V2",slug:"candy-machine-v2",children:[]}]},{level:2,title:"Comment r\xE9cup\xE9rer tous les NFTs d'un portefeuille ?",slug:"comment-recuperer-tous-les-nfts-d-un-portefeuille",children:[]}],path:"/fr/references/nfts.html",pathLocale:"/fr/",extraFields:[]},{title:"Envoi de transactions hors connexion",headers:[{level:2,title:"Signer la Transaction",slug:"signer-la-transaction",children:[]},{level:2,title:"Transaction avec Signature Partielle",slug:"transaction-avec-signature-partielle",children:[]},{level:2,title:"Nonce Durable",slug:"nonce-durable",children:[{level:3,title:"Cr\xE9er un Compte de Nonce",slug:"creer-un-compte-de-nonce",children:[]},{level:3,title:"Obtenir le Compte de Nonce",slug:"obtenir-le-compte-de-nonce",children:[]},{level:3,title:"Utiliser le Compte de Nonce",slug:"utiliser-le-compte-de-nonce",children:[]}]}],path:"/fr/references/offline-transactions.html",pathLocale:"/fr/",extraFields:[]},{title:"\xC9crire des Programmes",headers:[{level:2,title:"Comment transf\xE9rer SOL dans un programme",slug:"comment-transferer-sol-dans-un-programme",children:[]},{level:2,title:"Comment obtenir une r\xE9f\xE9rence \xE0 l'horloge dans un programme",slug:"comment-obtenir-une-reference-a-l-horloge-dans-un-programme",children:[{level:3,title:"Passer l'Horloge comme un compte dans une instruction",slug:"passer-l-horloge-comme-un-compte-dans-une-instruction",children:[]},{level:3,title:"Acc\xE9der \xE0 l'horloge directement dans une instruction",slug:"acceder-a-l-horloge-directement-dans-une-instruction",children:[]}]},{level:2,title:"Comment modifier la taille d'un compte",slug:"comment-modifier-la-taille-d-un-compte",children:[]},{level:2,title:"Comment faire l'Invocation de Programme Crois\xE9",slug:"comment-faire-l-invocation-de-programme-croise",children:[]},{level:2,title:"Comment cr\xE9er un PDA",slug:"comment-creer-un-pda",children:[]},{level:2,title:"Comment lire des comptes",slug:"comment-lire-des-comptes",children:[]},{level:2,title:"Comment v\xE9rifier des comptes",slug:"comment-verifier-des-comptes",children:[]},{level:2,title:"Comment lire plusieurs instructions \xE0 partir d'une transaction",slug:"comment-lire-plusieurs-instructions-a-partir-d-une-transaction",children:[]}],path:"/fr/references/programs.html",pathLocale:"/fr/",extraFields:[]},{title:"Staking",headers:[{level:2,title:"Obtenir les Validateurs Actuels",slug:"obtenir-les-validateurs-actuels",children:[]},{level:2,title:"Cr\xE9er un Compte de Stake",slug:"creer-un-compte-de-stake",children:[]},{level:2,title:"D\xE9l\xE9guer un Stake",slug:"deleguer-un-stake",children:[]},{level:2,title:"Obtenir les D\xE9l\xE9gu\xE9s par Validateurs",slug:"obtenir-les-delegues-par-validateurs",children:[]},{level:2,title:"D\xE9sactiver le Stake",slug:"desactiver-le-stake",children:[]},{level:2,title:"Retirer le Stake",slug:"retirer-le-stake",children:[]}],path:"/fr/references/staking.html",pathLocale:"/fr/",extraFields:[]},{title:"Interaction avec les Jetons",headers:[{level:2,title:"De quoi ai-je besoin pour commencer avec SPL-Tokens ?",slug:"de-quoi-ai-je-besoin-pour-commencer-avec-spl-tokens",children:[]},{level:2,title:"Comment cr\xE9er un nouveau Jeton",slug:"comment-creer-un-nouveau-jeton",children:[]},{level:2,title:'Comment obtenir un "mint" de jeton',slug:"comment-obtenir-un-mint-de-jeton",children:[]},{level:2,title:"Comment cr\xE9er un compte de jeton",slug:"comment-creer-un-compte-de-jeton",children:[]},{level:2,title:"Comment obtenir un compte de jetons",slug:"comment-obtenir-un-compte-de-jetons",children:[]},{level:2,title:"Comment obtenir le solde d'un compte de jetons",slug:"comment-obtenir-le-solde-d-un-compte-de-jetons",children:[]},{level:2,title:"Comment cr\xE9er (mint) de nouveaux jetons",slug:"comment-creer-mint-de-nouveaux-jetons",children:[]},{level:2,title:"Comment transf\xE9rer des jetons",slug:"comment-transferer-des-jetons",children:[]},{level:2,title:"Comment br\xFBler des jetons",slug:"comment-bruler-des-jetons",children:[]},{level:2,title:"Comment fermer des comptes de jetons",slug:"comment-fermer-des-comptes-de-jetons",children:[]},{level:2,title:"Comment d\xE9finir l'autorit\xE9 sur les comptes de jetons ou de mints ?",slug:"comment-definir-l-autorite-sur-les-comptes-de-jetons-ou-de-mints",children:[]},{level:2,title:"Comment approuver une d\xE9l\xE9gation de jetons",slug:"comment-approuver-une-delegation-de-jetons",children:[]},{level:2,title:"Comment r\xE9voquer une d\xE9l\xE9gation de jetons",slug:"comment-revoquer-une-delegation-de-jetons",children:[]},{level:2,title:"Comment g\xE9rer les wrapped SOL",slug:"comment-gerer-les-wrapped-sol",children:[{level:3,title:"Cr\xE9er un Compte de Jetons",slug:"creer-un-compte-de-jetons",children:[]},{level:3,title:"Ajouter un solde",slug:"ajouter-un-solde",children:[]}]},{level:2,title:"Comment obtenir tous les comptes de jetons par propri\xE9taire",slug:"comment-obtenir-tous-les-comptes-de-jetons-par-proprietaire",children:[]}],path:"/fr/references/token.html",pathLocale:"/fr/",extraFields:[]},{title:"Instalasi",headers:[{level:2,title:"Unduh Web3.js",slug:"unduh-web3-js",children:[{level:3,title:"Web3.js",slug:"web3-js",children:[]},{level:3,title:"SPL-Token",slug:"spl-token",children:[]},{level:3,title:"Wallet-Adapter",slug:"wallet-adapter",children:[]}]},{level:2,title:"Install Rust",slug:"install-rust",children:[]},{level:2,title:"Install CLI",slug:"install-cli",children:[{level:3,title:"macOS & Linux",slug:"macos-linux",children:[]},{level:3,title:"Windows",slug:"windows",children:[]},{level:3,title:"Membangun dari Source",slug:"membangun-dari-source",children:[]}]}],path:"/id/getting-started/installation.html",pathLocale:"/id/",extraFields:[]},{title:"Peta Akun",headers:[{level:2,title:"Menghasilkan PDA",slug:"menghasilkan-pda",children:[]},{level:2,title:"Akun Peta Tunggal",slug:"akun-peta-tunggal",children:[]}],path:"/id/guides/account-maps.html",pathLocale:"/id/",extraFields:[]},{title:"Migrasi Akun Data Program",headers:[{level:2,title:"Bagaimana cara melakukan migrasi akun data sebuah program?",slug:"bagaimana-cara-melakukan-migrasi-akun-data-sebuah-program",children:[]},{level:2,title:"Skenario",slug:"skenario",children:[]},{level:2,title:"Melakukan upgrade Akun",slug:"melakukan-upgrade-akun",children:[{level:3,title:"1. Tambahkan logika konversi akun",slug:"_1-tambahkan-logika-konversi-akun",children:[]}]},{level:2,title:"Resource",slug:"resource",children:[]}],path:"/id/guides/data-migration.html",pathLocale:"/id/",extraFields:[]},{title:"Debug Program Solana",headers:[{level:2,title:"Fakta",slug:"fakta",children:[]},{level:2,title:"Uji Runtime dan Debugging di editor",slug:"uji-runtime-dan-debugging-di-editor",children:[]},{level:2,title:"Uji Node Validator Lokal di editor",slug:"uji-node-validator-lokal-di-editor",children:[]},{level:2,title:"Uji Node Validator Lokal dari Aplikasi Klien",slug:"uji-node-validator-lokal-dari-aplikasi-klien",children:[]},{level:2,title:"Resources",slug:"resources",children:[]}],path:"/id/guides/debugging-solana-programs.html",pathLocale:"/id/",extraFields:[]},{title:"Pengujian Paritas Fitur",headers:[{level:2,title:"Fakta",slug:"fakta",children:[]},{level:2,title:"Skenario",slug:"skenario",children:[]},{level:2,title:"Status Fitur",slug:"status-fitur",children:[]},{level:2,title:"Uji Paritas",slug:"uji-paritas",children:[]},{level:2,title:"Demonstrasi Sederhana",slug:"demonstrasi-sederhana",children:[{level:3,title:"Semua fitur diaktifkan",slug:"semua-fitur-diaktifkan",children:[]},{level:3,title:"Fitur selektif dinonaktifkan",slug:"fitur-selektif-dinonaktifkan",children:[]}]},{level:2,title:"Uji Paritas Penuh",slug:"uji-paritas-penuh",children:[]},{level:2,title:"Uji Paritas Penuh Secara Terprogram",slug:"uji-paritas-penuh-secara-terprogram",children:[]},{level:2,title:"Resources",slug:"resources",children:[]}],path:"/id/guides/feature-parity-testing.html",pathLocale:"/id/",extraFields:[]},{title:"Mendapatkan Akun Program",headers:[{level:2,title:"Fakta",slug:"fakta",children:[]},{level:2,title:"Memahami lebih dalam",slug:"memahami-lebih-dalam",children:[{level:3,title:"filters",slug:"filters",children:[]},{level:3,title:"dataSlice",slug:"dataslice",children:[]}]},{level:2,title:"Resource lainnya",slug:"resource-lainnya",children:[]}],path:"/id/guides/get-program-accounts.html",pathLocale:"/id/",extraFields:[]},{title:"Mengulang Kembali transaksi",headers:[{level:2,title:"Fakta",slug:"fakta",children:[]},{level:2,title:"Perjalanan dari sebuah Transaksi",slug:"perjalanan-dari-sebuah-transaksi",children:[{level:3,title:"Bagaimana Klien Mengirimkan Transaksi",slug:"bagaimana-klien-mengirimkan-transaksi",children:[]},{level:3,title:"Bagaimana Node RPC melakukan broadcast Transaksi",slug:"bagaimana-node-rpc-melakukan-broadcast-transaksi",children:[]}]},{level:2,title:"Bagaimana Transaksi dapat dibatalkan",slug:"bagaimana-transaksi-dapat-dibatalkan",children:[{level:3,title:"Sebelum transaksi diproses",slug:"sebelum-transaksi-diproses",children:[]},{level:3,title:"Setelah transaksi diproses dan sebelum diselesaikan",slug:"setelah-transaksi-diproses-dan-sebelum-diselesaikan",children:[]}]},{level:2,title:"Menangani Transaksi yang dibatalkan",slug:"menangani-transaksi-yang-dibatalkan",children:[{level:3,title:"Menelusuri lebih dalam mengenai sendTransaction",slug:"menelusuri-lebih-dalam-mengenai-sendtransaction",children:[]}]},{level:2,title:"Menyesuaikan Logika Rebroadcast",slug:"menyesuaikan-logika-rebroadcast",children:[{level:3,title:"Dampak apabila Melewatkan Preflight",slug:"dampak-apabila-melewatkan-preflight",children:[]},{level:3,title:"Kapan Menandatangani  Ulang (Re-Sign) Transaksi",slug:"kapan-menandatangani-ulang-re-sign-transaksi",children:[]}]},{level:2,title:"Ucapan Terima Kasih",slug:"ucapan-terima-kasih",children:[]}],path:"/id/guides/retrying-transactions.html",pathLocale:"/id/",extraFields:[]},{title:"Serialisasi Data",headers:[{level:2,title:"Persiapan untuk Borsh Serialization",slug:"persiapan-untuk-borsh-serialization",children:[]},{level:2,title:"Cara serialize data instruksi pada klien",slug:"cara-serialize-data-instruksi-pada-klien",children:[]},{level:2,title:"Cara deserialisasi data instruksi pada program",slug:"cara-deserialisasi-data-instruksi-pada-program",children:[]},{level:2,title:"Cara serialisasi data akun pada program",slug:"cara-serialisasi-data-akun-pada-program",children:[{level:3,title:"Pack",slug:"pack",children:[]},{level:3,title:"Serialisasi/Deserialisasi",slug:"serialisasi-deserialisasi",children:[]},{level:3,title:"Penggunaan",slug:"penggunaan",children:[]}]},{level:2,title:"Cara deserialisasi data akun pada klien",slug:"cara-deserialisasi-data-akun-pada-klien",children:[]},{level:2,title:"Pemetaan Solana TS/JS Umum",slug:"pemetaan-solana-ts-js-umum",children:[]},{level:2,title:"Metode Lanjutan",slug:"metode-lanjutan",children:[{level:3,title:"COption",slug:"coption",children:[]}]},{level:2,title:"Resource",slug:"resource",children:[]}],path:"/id/guides/serialization.html",pathLocale:"/id/",extraFields:[]},{title:"Memulai",headers:[{level:2,title:"Composability Adalah Kunci",slug:"composability-adalah-kunci",children:[]},{level:2,title:"Kontribusi",slug:"kontribusi",children:[]}],path:"/id/integrations/",pathLocale:"/id/",extraFields:[]},{title:"Jupiter",headers:[{level:3,title:"Instalasi",slug:"instalasi",children:[]},{level:3,title:"Mengambil List  Token dari Jupiter",slug:"mengambil-list-token-dari-jupiter",children:[]},{level:3,title:"Loading instance dari Jupiter",slug:"loading-instance-dari-jupiter",children:[]},{level:3,title:"Mendapatkan RouteMap",slug:"mendapatkan-routemap",children:[]},{level:3,title:"Mendapatkan route dari Input dengan Output token",slug:"mendapatkan-route-dari-input-dengan-output-token",children:[]},{level:3,title:"Ekskusi  Token Swap",slug:"ekskusi-token-swap",children:[]},{level:2,title:"How to use Jupiter in a React Application",slug:"how-to-use-jupiter-in-a-react-application",children:[{level:3,title:"Installation",slug:"installation",children:[]},{level:3,title:"Menambahkan  Provider",slug:"menambahkan-provider",children:[]},{level:3,title:"Mendapatkan  List dari Token",slug:"mendapatkan-list-dari-token",children:[]},{level:3,title:"Seting State",slug:"seting-state",children:[]},{level:3,title:"Menggunakan useJupiter react hook",slug:"menggunakan-usejupiter-react-hook",children:[]},{level:3,title:"Perform Swap",slug:"perform-swap",children:[]}]},{level:2,title:"Cara Menggunakan Jupiter API",slug:"cara-menggunakan-jupiter-api",children:[{level:3,title:"Instalasi",slug:"instalasi-1",children:[]},{level:3,title:"Mendapatkan Route Map",slug:"mendapatkan-route-map",children:[]},{level:3,title:"Mendapatkan Serialisasi Transaksi untuk  perform Swap",slug:"mendapatkan-serialisasi-transaksi-untuk-perform-swap",children:[]},{level:3,title:"Eksekusi Transaksi Swap",slug:"eksekusi-transaksi-swap",children:[]}]},{level:2,title:"Sumber Lainnya",slug:"sumber-lainnya",children:[]}],path:"/id/integrations/jupiter.html",pathLocale:"/id/",extraFields:[]},{title:"Mango Markets",headers:[{level:2,title:"Cara Mendapatkan Mango Group",slug:"cara-mendapatkan-mango-group",children:[]},{level:2,title:"Membuat Akun Mango",slug:"membuat-akun-mango",children:[]},{level:2,title:"Cara Deposit USDC ke Akun Manggo",slug:"cara-deposit-usdc-ke-akun-manggo",children:[]},{level:2,title:"Cara Menempatkan Spot Order",slug:"cara-menempatkan-spot-order",children:[]},{level:2,title:"Cara Load Bids",slug:"cara-load-bids",children:[]},{level:2,title:"Cara Load Asks",slug:"cara-load-asks",children:[]},{level:2,title:"Sumber Lainnya",slug:"sumber-lainnya",children:[]}],path:"/id/integrations/mango.html",pathLocale:"/id/",extraFields:[]},{title:"Pyth",headers:[{level:2,title:"Cara Menggunakan Pyth di Client",slug:"cara-menggunakan-pyth-di-client",children:[]},{level:2,title:"Cara Memakai Pyth di Anchor",slug:"cara-memakai-pyth-di-anchor",children:[]},{level:2,title:"Sumber Lainnya",slug:"sumber-lainnya",children:[]}],path:"/id/integrations/pyth.html",pathLocale:"/id/",extraFields:[]},{title:"React Native",headers:[{level:2,title:"Cara Pakai @solana/web3.js di React Native app",slug:"cara-pakai-solana-web3-js-di-react-native-app",children:[{level:3,title:"Buat aplikasi baru",slug:"buat-aplikasi-baru",children:[]},{level:3,title:"Install dependensi",slug:"install-dependensi",children:[]},{level:3,title:"Update index.js",slug:"update-index-js",children:[]},{level:3,title:"Update metro.config.js",slug:"update-metro-config-js",children:[]},{level:3,title:"Update App.tsx",slug:"update-app-tsx",children:[]},{level:3,title:"Install cocoapods",slug:"install-cocoapods",children:[]},{level:3,title:"Start aplikasi",slug:"start-aplikasi",children:[]}]},{level:2,title:"Solana DApp Scaffold untuk React Native",slug:"solana-dapp-scaffold-untuk-react-native",children:[]},{level:2,title:"Isu Umum ketika menggunakan  @solana/web3.js di aplikasi React Native",slug:"isu-umum-ketika-menggunakan-solana-web3-js-di-aplikasi-react-native",children:[{level:3,title:"Error: While trying to resolve module superstruct from file",slug:"error-while-trying-to-resolve-module-superstruct-from-file",children:[]},{level:3,title:"Error: URL.protocol is not implemented",slug:"error-url-protocol-is-not-implemented",children:[]},{level:3,title:"Error: crypto.getRandomValues() not supported",slug:"error-crypto-getrandomvalues-not-supported",children:[]}]}],path:"/id/integrations/react-native.html",pathLocale:"/id/",extraFields:[]},{title:"Serum",headers:[{level:2,title:"Cara Mendapatkan Serum Market",slug:"cara-mendapatkan-serum-market",children:[]},{level:2,title:"Mendapatkan Serum Order Books",slug:"mendapatkan-serum-order-books",children:[]},{level:2,title:"Cara Mendapatkan Open Orders",slug:"cara-mendapatkan-open-orders",children:[]}],path:"/id/integrations/serum.html",pathLocale:"/id/",extraFields:[]},{title:"Strata",headers:[{level:2,title:"Cara Membuat Token Yang Dikendalikan Penuh",slug:"cara-membuat-token-yang-dikendalikan-penuh",children:[]},{level:2,title:"Cara beli dan jual token",slug:"cara-beli-dan-jual-token",children:[]},{level:2,title:"Cara bootstrap liquidity",slug:"cara-bootstrap-liquidity",children:[]},{level:2,title:"Sumber Lainnya",slug:"sumber-lainnya",children:[]}],path:"/id/integrations/strata.html",pathLocale:"/id/",extraFields:[]},{title:"Switchboard",headers:[{level:2,title:"Data Feeds",slug:"data-feeds",children:[{level:3,title:"Cara Baca Data Dari Aggregator Feeds",slug:"cara-baca-data-dari-aggregator-feeds",children:[]},{level:3,title:"Membuat Aggregator Feed Baru",slug:"membuat-aggregator-feed-baru",children:[]},{level:3,title:"Baca data dari aggregator feeds dalam sebuah program",slug:"baca-data-dari-aggregator-feeds-dalam-sebuah-program",children:[]},{level:3,title:"Cara Membuat a Feeds Dari Publisher",slug:"cara-membuat-a-feeds-dari-publisher",children:[]}]},{level:2,title:"Oracles",slug:"oracles",children:[{level:3,title:"Create an oracle",slug:"create-an-oracle",children:[]},{level:3,title:"Menjalan Oracle di lokal",slug:"menjalan-oracle-di-lokal",children:[]},{level:3,title:"Konfigurasi Oracle",slug:"konfigurasi-oracle",children:[]}]},{level:2,title:"Fungsi Random yang Terverifikasi - Verifiable Random Function(VRF)",slug:"fungsi-random-yang-terverifikasi-verifiable-random-function-vrf",children:[{level:3,title:"Membaca akun VRF",slug:"membaca-akun-vrf",children:[]},{level:3,title:"Membuat Sebuah Akun VRF",slug:"membuat-sebuah-akun-vrf",children:[]},{level:3,title:"Request Randomness dari akun  vrf",slug:"request-randomness-dari-akun-vrf",children:[]}]},{level:2,title:"Sumber",slug:"sumber",children:[{level:3,title:"API dan Librari",slug:"api-dan-librari",children:[]},{level:3,title:"Contoh",slug:"contoh",children:[]},{level:3,title:"Informasi Lebih Lanjut",slug:"informasi-lebih-lanjut",children:[]}]}],path:"/id/integrations/switchboard.html",pathLocale:"/id/",extraFields:[]},{title:"web3Auth (Torus Wallet)",headers:[{level:2,title:"Apakah itu wallet?",slug:"apakah-itu-wallet",children:[]},{level:2,title:"Social Login di Solana",slug:"social-login-di-solana",children:[]},{level:2,title:"Panduan Integrasi",slug:"panduan-integrasi",children:[{level:3,title:"Instal Dependensi",slug:"instal-dependensi",children:[]},{level:3,title:"Import SDK dan initialize",slug:"import-sdk-dan-initialize",children:[]},{level:3,title:"Trigger user login\u200B",slug:"trigger-user-login\u200B",children:[]},{level:3,title:"Menggunakan torus instance untuk mengambil detil akun user",slug:"menggunakan-torus-instance-untuk-mengambil-detil-akun-user",children:[]},{level:3,title:"Menggunakan Torus Solana API untuk sign sebuah pesan.",slug:"menggunakan-torus-solana-api-untuk-sign-sebuah-pesan",children:[]},{level:3,title:"Menggunakan torus Solana API untuk mengirim transaksi.\u200B",slug:"menggunakan-torus-solana-api-untuk-mengirim-transaksi-\u200B",children:[]},{level:3,title:"Topup",slug:"topup",children:[]},{level:3,title:"Logout",slug:"logout",children:[]}]},{level:2,title:"Sumber",slug:"sumber",children:[]}],path:"/id/integrations/web3auth.html",pathLocale:"/id/",extraFields:[]},{title:"Akun",headers:[{level:2,title:"Bagaimana cara membuat sebuah sistem akun",slug:"bagaimana-cara-membuat-sebuah-sistem-akun",children:[]},{level:2,title:"Bagaimana cara mengkalkulasi biaya akun",slug:"bagaimana-cara-mengkalkulasi-biaya-akun",children:[]},{level:2,title:"Bagaimana cara membuat akun dengan seeds",slug:"bagaimana-cara-membuat-akun-dengan-seeds",children:[{level:3,title:"Generate",slug:"generate",children:[]},{level:3,title:"Create",slug:"create",children:[]},{level:3,title:"Transfer",slug:"transfer",children:[]}]},{level:2,title:"Bagaimana cara membuat PDAs",slug:"bagaimana-cara-membuat-pdas",children:[{level:3,title:"Menghasilkan sebuah PDA",slug:"menghasilkan-sebuah-pda",children:[]},{level:3,title:"Membuat sebuah PDA",slug:"membuat-sebuah-pda",children:[]}]},{level:2,title:"Bagaimana cara untuk sign sebuah PDA",slug:"bagaimana-cara-untuk-sign-sebuah-pda",children:[{level:3,title:"Program",slug:"program-1",children:[]},{level:3,title:"Client",slug:"client-1",children:[]}]},{level:2,title:"Bagaimana Cara Mendapatkan Program Akun",slug:"bagaimana-cara-mendapatkan-program-akun",children:[]},{level:2,title:"Bagaimana Cara Menutup Akun",slug:"bagaimana-cara-menutup-akun",children:[]},{level:2,title:"Bagaimana Cara Mendapatkan Balance Akun",slug:"bagaimana-cara-mendapatkan-balance-akun",children:[]}],path:"/id/references/accounts.html",pathLocale:"/id/",extraFields:[]},{title:"Mengirim Transaksi",headers:[{level:2,title:"Bagaimana cara mengirim SOL",slug:"bagaimana-cara-mengirim-sol",children:[]},{level:2,title:"Bagimana cara mengirim SPL-Tokens",slug:"bagimana-cara-mengirim-spl-tokens",children:[]},{level:2,title:"Bagaimana cara mengkalkulasi biaya transaksi",slug:"bagaimana-cara-mengkalkulasi-biaya-transaksi",children:[{level:3,title:"getEstimatedFee",slug:"getestimatedfee",children:[]},{level:3,title:"getFeeForMessage",slug:"getfeeformessage",children:[]}]},{level:2,title:"Bagaimana menambah catatan ke dalam sebuah transaksi",slug:"bagaimana-menambah-catatan-ke-dalam-sebuah-transaksi",children:[]},{level:2,title:"Bagaimana cara merubah perhitungan budget untuk sebuah transaksi",slug:"bagaimana-cara-merubah-perhitungan-budget-untuk-sebuah-transaksi",children:[]}],path:"/id/references/basic-transactions.html",pathLocale:"/id/",extraFields:[]},{title:"Keypairs & Wallets",headers:[{level:2,title:"Bagaimana cara membuat sebuah Keypair baru",slug:"bagaimana-cara-membuat-sebuah-keypair-baru",children:[]},{level:2,title:"Bagaimana cara me-restore sebuah Keypair dari sebuah secret",slug:"bagaimana-cara-me-restore-sebuah-keypair-dari-sebuah-secret",children:[]},{level:2,title:"Bagaimana cara menverifikasi sebuah Keypair",slug:"bagaimana-cara-menverifikasi-sebuah-keypair",children:[]},{level:2,title:"Bagaimana cara untuk check jika sebuah public key telah terhubung dengan sebuah private key",slug:"bagaimana-cara-untuk-check-jika-sebuah-public-key-telah-terhubung-dengan-sebuah-private-key",children:[]},{level:2,title:"Bagaimana cara membuat mnemonic phrase",slug:"bagaimana-cara-membuat-mnemonic-phrase",children:[]},{level:2,title:"Bagaimana cara restore sebuah Keypair dari sebuah mnemonic phrase",slug:"bagaimana-cara-restore-sebuah-keypair-dari-sebuah-mnemonic-phrase",children:[]},{level:2,title:"Bagaimana cara membuat sebuah vanity address",slug:"bagaimana-cara-membuat-sebuah-vanity-address",children:[]},{level:2,title:"Bagaimana cara untuk sign dan menverifikasi messages dalam wallet",slug:"bagaimana-cara-untuk-sign-dan-menverifikasi-messages-dalam-wallet",children:[]},{level:2,title:"Bagaimana cara mengkoneksi ke sebuah wallet",slug:"bagaimana-cara-mengkoneksi-ke-sebuah-wallet",children:[{level:3,title:"React",slug:"react",children:[]},{level:3,title:"Vue",slug:"vue",children:[]},{level:3,title:"Svelte",slug:"svelte",children:[]}]}],path:"/id/references/keypairs-and-wallets.html",pathLocale:"/id/",extraFields:[]},{title:"Development Lokal",headers:[{level:2,title:"Memulai Validator Lokal",slug:"memulai-validator-lokal",children:[]},{level:2,title:"Menghubungkan Ke Environment",slug:"menghubungkan-ke-environment",children:[]},{level:2,title:"Subskripsi Event",slug:"subskripsi-event",children:[]},{level:2,title:"Mendapatkan Tes SOL",slug:"mendapatkan-tes-sol",children:[]},{level:2,title:"Menggunakan Akun dan Program Mainnet",slug:"menggunakan-akun-dan-program-mainnet",children:[{level:3,title:"Cara memuat akun dari mainnet",slug:"cara-memuat-akun-dari-mainnet",children:[]},{level:3,title:"Cara memuat program dari mainnet",slug:"cara-memuat-program-dari-mainnet",children:[]}]}],path:"/id/references/local-development.html",pathLocale:"/id/",extraFields:[]},{title:"Name Service",headers:[{level:2,title:"Name registry",slug:"name-registry",children:[]},{level:2,title:"Resolving SOL domains",slug:"resolving-sol-domains",children:[]},{level:2,title:"Reverse look up",slug:"reverse-look-up",children:[]},{level:2,title:"Subdomain look up",slug:"subdomain-look-up",children:[]},{level:2,title:"Menemukan semua domain name yang dimiliki oleh suatu public key",slug:"menemukan-semua-domain-name-yang-dimiliki-oleh-suatu-public-key",children:[]},{level:2,title:"Resolve Twitter handle",slug:"resolve-twitter-handle",children:[]},{level:2,title:"Reverse look up suatu Twitter handle",slug:"reverse-look-up-suatu-twitter-handle",children:[]}],path:"/id/references/name-service.html",pathLocale:"/id/",extraFields:[]},{title:"NFT",headers:[{level:2,title:"Cara membuat NFT",slug:"cara-membuat-nft",children:[{level:3,title:"Upload to Arweave",slug:"upload-to-arweave",children:[]},{level:3,title:"Mint NFT-nya",slug:"mint-nft-nya",children:[]}]},{level:2,title:"Cara Mendapatkan Metadata NFT",slug:"cara-mendapatkan-metadata-nft",children:[]},{level:2,title:"Cara Mengetahui Pemilik Sebuah NFT",slug:"cara-mengetahui-pemilik-sebuah-nft",children:[]},{level:2,title:"Cara untuk mengambil NFT Mint Addresses",slug:"cara-untuk-mengambil-nft-mint-addresses",children:[{level:3,title:"Candy Machine V1",slug:"candy-machine-v1",children:[]},{level:3,title:"Candy Machine V2",slug:"candy-machine-v2",children:[]}]},{level:2,title:"Cara Mendapatkan Semua NFT dari Suatu Wallet",slug:"cara-mendapatkan-semua-nft-dari-suatu-wallet",children:[]}],path:"/id/references/nfts.html",pathLocale:"/id/",extraFields:[]},{title:"Mengirim Transaksi Offline",headers:[{level:2,title:"Sign Transaksi",slug:"sign-transaksi",children:[]},{level:2,title:"Sign Transaksi Sebagian",slug:"sign-transaksi-sebagian",children:[]},{level:2,title:"Durable Nonce",slug:"durable-nonce",children:[{level:3,title:"Membuat Akun Nonce",slug:"membuat-akun-nonce",children:[]},{level:3,title:"Mendapatkan Akun Nonce",slug:"mendapatkan-akun-nonce",children:[]},{level:3,title:"Menggunakan Akun Nonce",slug:"menggunakan-akun-nonce",children:[]}]}],path:"/id/references/offline-transactions.html",pathLocale:"/id/",extraFields:[]},{title:"Menulis Program",headers:[{level:2,title:"Bagaimana cara mentransfer SOL di dalam sebuah program",slug:"bagaimana-cara-mentransfer-sol-di-dalam-sebuah-program",children:[]},{level:2,title:"Bagaimana cara mendapatkan waktu dalam sebuah program",slug:"bagaimana-cara-mendapatkan-waktu-dalam-sebuah-program",children:[{level:3,title:"Passing Waktu sebagai sebuah account di dalam sebuah instruksi",slug:"passing-waktu-sebagai-sebuah-account-di-dalam-sebuah-instruksi",children:[]},{level:3,title:"Mengakses Waktu secara langsung di dalam sebuah instruksi",slug:"mengakses-waktu-secara-langsung-di-dalam-sebuah-instruksi",children:[]}]},{level:2,title:"Bagaimana cara merubah size akun",slug:"bagaimana-cara-merubah-size-akun",children:[]},{level:2,title:"Bagaimana cara untuk membuat program Cross Invocation",slug:"bagaimana-cara-untuk-membuat-program-cross-invocation",children:[]},{level:2,title:"Bagaimana cara membuat sebuah PDA",slug:"bagaimana-cara-membuat-sebuah-pda",children:[]},{level:2,title:"Bagaimana cara membaca akun",slug:"bagaimana-cara-membaca-akun",children:[]},{level:2,title:"Bagaimana cara men-verifikasi akun",slug:"bagaimana-cara-men-verifikasi-akun",children:[]},{level:2,title:"Bagaimana cara membaca beberapa instruksi dalam sebuah transaksi",slug:"bagaimana-cara-membaca-beberapa-instruksi-dalam-sebuah-transaksi",children:[]}],path:"/id/references/programs.html",pathLocale:"/id/",extraFields:[]},{title:"Staking",headers:[{level:2,title:"Mendapatkan Validators",slug:"mendapatkan-validators",children:[]},{level:2,title:"Membuat Stake Account",slug:"membuat-stake-account",children:[]},{level:2,title:"Mendelegasi Stake",slug:"mendelegasi-stake",children:[]},{level:2,title:"Mendapatkan Delegator dengan Validator",slug:"mendapatkan-delegator-dengan-validator",children:[]},{level:2,title:"Deactivate Stake",slug:"deactivate-stake",children:[]},{level:2,title:"Withdraw Stake",slug:"withdraw-stake",children:[]}],path:"/id/references/staking.html",pathLocale:"/id/",extraFields:[]},{title:"Interaksi dengan Token",headers:[{level:2,title:"Apa yang saya perlukan untuk memulai dengan SPL-Tokens?",slug:"apa-yang-saya-perlukan-untuk-memulai-dengan-spl-tokens",children:[]},{level:2,title:"Bagaimana cara untuk membuat sebuah Token baru",slug:"bagaimana-cara-untuk-membuat-sebuah-token-baru",children:[]},{level:2,title:"Bagaimana cara mendapatkan sebuah token mint",slug:"bagaimana-cara-mendapatkan-sebuah-token-mint",children:[]},{level:2,title:"Bagaimana cara membuat sebuah akun token",slug:"bagaimana-cara-membuat-sebuah-akun-token",children:[]},{level:2,title:"Bagaimana cara mendapatkan sebuah Akun Token",slug:"bagaimana-cara-mendapatkan-sebuah-akun-token",children:[]},{level:2,title:"Bagaimana cara mendapatkan saldo dari akun token",slug:"bagaimana-cara-mendapatkan-saldo-dari-akun-token",children:[]},{level:2,title:"Bagaimana cara untuk me-mint token-token",slug:"bagaimana-cara-untuk-me-mint-token-token",children:[]},{level:2,title:"Bagaimana cara mentransfer token-token",slug:"bagaimana-cara-mentransfer-token-token",children:[]},{level:2,title:"Bagaimana cara membakar token-token",slug:"bagaimana-cara-membakar-token-token",children:[]},{level:2,title:"Bagaimana cara menutup akun-akun token",slug:"bagaimana-cara-menutup-akun-akun-token",children:[]},{level:2,title:"Bagaimana cara untuk men-set authority pada akun-akun token atau mints",slug:"bagaimana-cara-untuk-men-set-authority-pada-akun-akun-token-atau-mints",children:[]},{level:2,title:"Bagaimana cara untuk men-approve delegasi sebuah token",slug:"bagaimana-cara-untuk-men-approve-delegasi-sebuah-token",children:[]},{level:2,title:"Bagaimana cara menarik kembali delegasi token",slug:"bagaimana-cara-menarik-kembali-delegasi-token",children:[]},{level:2,title:"Bagaimana cara mengature wrapped SOL",slug:"bagaimana-cara-mengature-wrapped-sol",children:[{level:3,title:"Membuat Akun Token",slug:"membuat-akun-token",children:[]},{level:3,title:"Menambah Saldo",slug:"menambah-saldo",children:[]}]},{level:2,title:"Bagaimana cara mendapatkan semua akun-akun token sebagai pemilik",slug:"bagaimana-cara-mendapatkan-semua-akun-akun-token-sebagai-pemilik",children:[]}],path:"/id/references/token.html",pathLocale:"/id/",extraFields:[]},{title:"Akun",headers:[{level:2,title:"Fakta-Fakta",slug:"fakta-fakta",children:[]},{level:2,title:"Lebih Dalam",slug:"lebih-dalam",children:[{level:3,title:"Model Akun",slug:"model-akun",children:[]},{level:3,title:"Menyewa",slug:"menyewa",children:[]}]},{level:2,title:"Sumber Lainnya",slug:"sumber-lainnya",children:[{level:3,title:"Credit",slug:"credit",children:[]}]}],path:"/id/core-concepts/accounts.html",pathLocale:"/id/",extraFields:[]},{title:"Program Derived Addresses (PDAs)",headers:[{level:2,title:"Fakta-Fakta",slug:"fakta-fakta",children:[{level:3,title:"Membuat PDA",slug:"membuat-pda",children:[]},{level:3,title:"Berinteraksi dengan PDAs",slug:"berinteraksi-dengan-pdas",children:[]}]},{level:2,title:"Sumber lainnya",slug:"sumber-lainnya",children:[]}],path:"/id/core-concepts/pdas.html",pathLocale:"/id/",extraFields:[]},{title:"Program",headers:[{level:2,title:"Fakta-Fakta",slug:"fakta-fakta",children:[]},{level:2,title:"Lebih Dalam",slug:"lebih-dalam",children:[{level:3,title:"Native Program &  Solana Program Library (SPL)",slug:"native-program-solana-program-library-spl",children:[]},{level:3,title:"Menulis Program",slug:"menulis-program",children:[]},{level:3,title:"Deploy Program",slug:"deploy-program",children:[]}]},{level:2,title:"Sumber Lainnya",slug:"sumber-lainnya",children:[]}],path:"/id/core-concepts/programs.html",pathLocale:"/id/",extraFields:[]},{title:"Transaksi",headers:[{level:2,title:"Fakta-Fakta",slug:"fakta-fakta",children:[]},{level:2,title:"Lebih Dalam",slug:"lebih-dalam",children:[{level:3,title:"Biaya",slug:"biaya",children:[]}]},{level:2,title:"Sumber lainnya",slug:"sumber-lainnya",children:[]}],path:"/id/core-concepts/transactions.html",pathLocale:"/id/",extraFields:[]},{title:"Accounts",headers:[{level:2,title:"Facts",slug:"facts",children:[]},{level:2,title:"Deep Dive",slug:"deep-dive",children:[{level:3,title:"Account Model",slug:"account-model",children:[]},{level:3,title:"Rent",slug:"rent",children:[]}]},{level:2,title:"Other Resources",slug:"other-resources",children:[{level:3,title:"Credit",slug:"credit",children:[]}]}],path:"/kr/core-concepts/accounts.html",pathLocale:"/kr/",extraFields:[]},{title:"Program Derived Addresses (PDAs)",headers:[{level:2,title:"Facts",slug:"facts",children:[]},{level:2,title:"Deep Dive",slug:"deep-dive",children:[{level:3,title:"Generating PDAs",slug:"generating-pdas",children:[]},{level:3,title:"Interacting with PDAs",slug:"interacting-with-pdas",children:[]}]},{level:2,title:"Other Resources",slug:"other-resources",children:[]}],path:"/kr/core-concepts/pdas.html",pathLocale:"/kr/",extraFields:[]},{title:"Programs",headers:[{level:2,title:"Facts",slug:"facts",children:[]},{level:2,title:"Deep Dive",slug:"deep-dive",children:[{level:3,title:"Native Programs & The Solana Program Library (SPL)",slug:"native-programs-the-solana-program-library-spl",children:[]},{level:3,title:"Writing Programs",slug:"writing-programs",children:[]},{level:3,title:"Deploying Programs",slug:"deploying-programs",children:[]}]},{level:2,title:"Other Resources",slug:"other-resources",children:[]}],path:"/kr/core-concepts/programs.html",pathLocale:"/kr/",extraFields:[]},{title:"Transactions",headers:[{level:2,title:"Facts",slug:"facts",children:[]},{level:2,title:"Deep Dive",slug:"deep-dive",children:[{level:3,title:"Fees",slug:"fees",children:[]}]},{level:2,title:"Other Resources",slug:"other-resources",children:[]}],path:"/kr/core-concepts/transactions.html",pathLocale:"/kr/",extraFields:[]},{title:"Installation",headers:[{level:2,title:"Install Web3.js",slug:"install-web3-js",children:[{level:3,title:"Web3.js",slug:"web3-js",children:[]},{level:3,title:"SPL-Token",slug:"spl-token",children:[]},{level:3,title:"Wallet-Adapter",slug:"wallet-adapter",children:[]}]},{level:2,title:"Install Rust",slug:"install-rust",children:[]},{level:2,title:"Install CLI",slug:"install-cli",children:[{level:3,title:"macOS & Linux",slug:"macos-linux",children:[]},{level:3,title:"Windows",slug:"windows",children:[]},{level:3,title:"Build From Source",slug:"build-from-source",children:[]}]}],path:"/kr/getting-started/installation.html",pathLocale:"/kr/",extraFields:[]},{title:"Account Maps",headers:[{level:2,title:"Deriving PDAs",slug:"deriving-pdas",children:[]},{level:2,title:"Single Map Account",slug:"single-map-account",children:[]}],path:"/kr/guides/account-maps.html",pathLocale:"/kr/",extraFields:[]},{title:"Migrating Program Data Accounts",headers:[{level:2,title:"How can you migrate a program's data accounts?",slug:"how-can-you-migrate-a-program-s-data-accounts",children:[]},{level:2,title:"Scenario",slug:"scenario",children:[]},{level:2,title:"Upgrading the Account",slug:"upgrading-the-account",children:[{level:3,title:"1. Add account conversion logic",slug:"_1-add-account-conversion-logic",children:[]}]},{level:2,title:"Resources",slug:"resources",children:[]}],path:"/kr/guides/data-migration.html",pathLocale:"/kr/",extraFields:[]},{title:"Debugging Solana Programs",headers:[{level:2,title:"Facts",slug:"facts",children:[]},{level:2,title:"Runtime Testing and Debugging in editor",slug:"runtime-testing-and-debugging-in-editor",children:[]},{level:2,title:"Local Validator Node Testing in editor",slug:"local-validator-node-testing-in-editor",children:[]},{level:2,title:"Local Validator Node Testing from Client Apps",slug:"local-validator-node-testing-from-client-apps",children:[]},{level:2,title:"Resources",slug:"resources",children:[]}],path:"/kr/guides/debugging-solana-programs.html",pathLocale:"/kr/",extraFields:[]},{title:"Feature Parity Testing",headers:[{level:2,title:"Facts",slug:"facts",children:[]},{level:2,title:"Scenario",slug:"scenario",children:[]},{level:2,title:"Feature Status",slug:"feature-status",children:[]},{level:2,title:"Parity Testing",slug:"parity-testing",children:[]},{level:2,title:"Simple Demonstration",slug:"simple-demonstration",children:[{level:3,title:"All features activated",slug:"all-features-activated",children:[]},{level:3,title:"Selective features deactivated",slug:"selective-features-deactivated",children:[]}]},{level:2,title:"Full Parity Testing",slug:"full-parity-testing",children:[]},{level:2,title:"Full Parity Testing Programmatically",slug:"full-parity-testing-programmatically",children:[]},{level:2,title:"Resources",slug:"resources",children:[]}],path:"/kr/guides/feature-parity-testing.html",pathLocale:"/kr/",extraFields:[]},{title:"Get Program Accounts",headers:[{level:2,title:"Facts",slug:"facts",children:[]},{level:2,title:"Deep Dive",slug:"deep-dive",children:[{level:3,title:"filters",slug:"filters",children:[]},{level:3,title:"dataSlice",slug:"dataslice",children:[]}]},{level:2,title:"Other Resources",slug:"other-resources",children:[]}],path:"/kr/guides/get-program-accounts.html",pathLocale:"/kr/",extraFields:[]},{title:"Retrying Transactions",headers:[{level:2,title:"Facts",slug:"facts",children:[]},{level:2,title:"The Journey of a Transaction",slug:"the-journey-of-a-transaction",children:[{level:3,title:"How Clients Submit Transactions",slug:"how-clients-submit-transactions",children:[]},{level:3,title:"How RPC Nodes Broadcast Transactions",slug:"how-rpc-nodes-broadcast-transactions",children:[]}]},{level:2,title:"How Transactions Get Dropped",slug:"how-transactions-get-dropped",children:[{level:3,title:"Before a transaction is processed",slug:"before-a-transaction-is-processed",children:[]},{level:3,title:"After a transaction is processed and before it is finalized",slug:"after-a-transaction-is-processed-and-before-it-is-finalized",children:[]}]},{level:2,title:"Handling Dropped Transactions",slug:"handling-dropped-transactions",children:[{level:3,title:"An In-Depth Look at sendTransaction",slug:"an-in-depth-look-at-sendtransaction",children:[]}]},{level:2,title:"Customizing Rebroadcast Logic",slug:"customizing-rebroadcast-logic",children:[{level:3,title:"The Cost of Skipping Preflight",slug:"the-cost-of-skipping-preflight",children:[]},{level:3,title:"When to Re-Sign Transactions",slug:"when-to-re-sign-transactions",children:[]}]},{level:2,title:"Acknowledgements",slug:"acknowledgements",children:[]}],path:"/kr/guides/retrying-transactions.html",pathLocale:"/kr/",extraFields:[]},{title:"Serializing Data",headers:[{level:2,title:"Setting up for Borsh Serialization",slug:"setting-up-for-borsh-serialization",children:[]},{level:2,title:"How to serialize instruction data on the client",slug:"how-to-serialize-instruction-data-on-the-client",children:[]},{level:2,title:"How to deserialize instruction data on the program",slug:"how-to-deserialize-instruction-data-on-the-program",children:[]},{level:2,title:"How to serialize account data on the program",slug:"how-to-serialize-account-data-on-the-program",children:[{level:3,title:"Pack",slug:"pack",children:[]},{level:3,title:"Serialization/Deserialization",slug:"serialization-deserialization",children:[]},{level:3,title:"Usage",slug:"usage",children:[]}]},{level:2,title:"How to deserialize account data on the client",slug:"how-to-deserialize-account-data-on-the-client",children:[]},{level:2,title:"Common Solana TS/JS Mappings",slug:"common-solana-ts-js-mappings",children:[]},{level:2,title:"Advanced Constructs",slug:"advanced-constructs",children:[{level:3,title:"COption",slug:"coption",children:[]}]},{level:2,title:"Resources",slug:"resources",children:[]}],path:"/kr/guides/serialization.html",pathLocale:"/kr/",extraFields:[]},{title:"Accounts",headers:[{level:2,title:"How to create a system account",slug:"how-to-create-a-system-account",children:[]},{level:2,title:"How to calculate account cost",slug:"how-to-calculate-account-cost",children:[]},{level:2,title:"How to create accounts with seeds",slug:"how-to-create-accounts-with-seeds",children:[{level:3,title:"Generate",slug:"generate",children:[]},{level:3,title:"Create",slug:"create",children:[]},{level:3,title:"Transfer",slug:"transfer",children:[]}]},{level:2,title:"How to create PDAs",slug:"how-to-create-pdas",children:[{level:3,title:"Generate a PDA",slug:"generate-a-pda",children:[]},{level:3,title:"Create a PDA",slug:"create-a-pda",children:[]}]},{level:2,title:"How to sign with a PDA",slug:"how-to-sign-with-a-pda",children:[{level:3,title:"Program",slug:"program-1",children:[]},{level:3,title:"Client",slug:"client-1",children:[]}]},{level:2,title:"How to get program accounts",slug:"how-to-get-program-accounts",children:[]},{level:2,title:"How to close accounts",slug:"how-to-close-accounts",children:[]},{level:2,title:"How to get account balance",slug:"how-to-get-account-balance",children:[]}],path:"/kr/references/accounts.html",pathLocale:"/kr/",extraFields:[]},{title:"Sending Transactions",headers:[{level:2,title:"How to send SOL",slug:"how-to-send-sol",children:[]},{level:2,title:"How to send SPL-Tokens",slug:"how-to-send-spl-tokens",children:[]},{level:2,title:"How to calculate transaction cost",slug:"how-to-calculate-transaction-cost",children:[{level:3,title:"getEstimatedFee",slug:"getestimatedfee",children:[]},{level:3,title:"getFeeForMessage",slug:"getfeeformessage",children:[]}]},{level:2,title:"How to add a memo to a transaction",slug:"how-to-add-a-memo-to-a-transaction",children:[]},{level:2,title:"How to change compute budget, fee, & priority for a transaction",slug:"how-to-change-compute-budget-fee-priority-for-a-transaction",children:[]}],path:"/kr/references/basic-transactions.html",pathLocale:"/kr/",extraFields:[]},{title:"Keypairs and Wallets",headers:[{level:2,title:"How to generate a new Keypair",slug:"how-to-generate-a-new-keypair",children:[]},{level:2,title:"How to restore a Keypair from a secret",slug:"how-to-restore-a-keypair-from-a-secret",children:[]},{level:2,title:"How to verify a Keypair",slug:"how-to-verify-a-keypair",children:[]},{level:2,title:"How to check if a public key has an associated private key",slug:"how-to-check-if-a-public-key-has-an-associated-private-key",children:[]},{level:2,title:"How to generate a mnemonic phrase",slug:"how-to-generate-a-mnemonic-phrase",children:[]},{level:2,title:"How to restore a Keypair from a mnemonic phrase",slug:"how-to-restore-a-keypair-from-a-mnemonic-phrase",children:[]},{level:2,title:"How to generate a vanity address",slug:"how-to-generate-a-vanity-address",children:[]},{level:2,title:"How to sign and verify messages with wallets",slug:"how-to-sign-and-verify-messages-with-wallets",children:[]},{level:2,title:"How to connect to a wallet",slug:"how-to-connect-to-a-wallet",children:[{level:3,title:"React",slug:"react",children:[]},{level:3,title:"Vue",slug:"vue",children:[]},{level:3,title:"Svelte",slug:"svelte",children:[]}]}],path:"/kr/references/keypairs-and-wallets.html",pathLocale:"/kr/",extraFields:[]},{title:"Local Development",headers:[{level:2,title:"Starting a Local Validator",slug:"starting-a-local-validator",children:[]},{level:2,title:"Connecting to Environments",slug:"connecting-to-environments",children:[]},{level:2,title:"Subscribing to Events",slug:"subscribing-to-events",children:[]},{level:2,title:"Getting Test SOL",slug:"getting-test-sol",children:[]},{level:2,title:"Using Mainnet Accounts and Programs",slug:"using-mainnet-accounts-and-programs",children:[{level:3,title:"How to load accounts from mainnet",slug:"how-to-load-accounts-from-mainnet",children:[]},{level:3,title:"How to load programs from mainnet",slug:"how-to-load-programs-from-mainnet",children:[]}]}],path:"/kr/references/local-development.html",pathLocale:"/kr/",extraFields:[]},{title:"Name Service",headers:[{level:2,title:"Name registry",slug:"name-registry",children:[]},{level:2,title:"Resolving SOL domains",slug:"resolving-sol-domains",children:[]},{level:2,title:"Reverse look up",slug:"reverse-look-up",children:[]},{level:2,title:"Subdomain look up",slug:"subdomain-look-up",children:[]},{level:2,title:"Find all the domain names owned by a public key",slug:"find-all-the-domain-names-owned-by-a-public-key",children:[]},{level:2,title:"Resolve a Twitter handle",slug:"resolve-a-twitter-handle",children:[]},{level:2,title:"Reverse look up of a Twitter handle",slug:"reverse-look-up-of-a-twitter-handle",children:[]}],path:"/kr/references/name-service.html",pathLocale:"/kr/",extraFields:[]},{title:"NFTs",headers:[{level:2,title:"How to create an NFT",slug:"how-to-create-an-nft",children:[{level:3,title:"Upload to Arweave",slug:"upload-to-arweave",children:[]},{level:3,title:"Mint the NFT",slug:"mint-the-nft",children:[]}]},{level:2,title:"How to get NFT Metadata",slug:"how-to-get-nft-metadata",children:[]},{level:2,title:"How to get the owner of an NFT",slug:"how-to-get-the-owner-of-an-nft",children:[]},{level:2,title:"How to get NFT Mint Addresses",slug:"how-to-get-nft-mint-addresses",children:[{level:3,title:"Candy Machine V1",slug:"candy-machine-v1",children:[]},{level:3,title:"Candy Machine V2",slug:"candy-machine-v2",children:[]}]},{level:2,title:"How to get all NFTs from a wallet?",slug:"how-to-get-all-nfts-from-a-wallet",children:[]}],path:"/kr/references/nfts.html",pathLocale:"/kr/",extraFields:[]},{title:"Sending Offline Transactions",headers:[{level:2,title:"Sign Transaction",slug:"sign-transaction",children:[]},{level:2,title:"Partial Sign Transaction",slug:"partial-sign-transaction",children:[]},{level:2,title:"Durable Nonce",slug:"durable-nonce",children:[{level:3,title:"Create Nonce Account",slug:"create-nonce-account",children:[]},{level:3,title:"Get Nonce Account",slug:"get-nonce-account",children:[]},{level:3,title:"Use Nonce Account",slug:"use-nonce-account",children:[]}]}],path:"/kr/references/offline-transactions.html",pathLocale:"/kr/",extraFields:[]},{title:"Writing Programs",headers:[{level:2,title:"How to transfer SOL in a program",slug:"how-to-transfer-sol-in-a-program",children:[]},{level:2,title:"How to get clock in a program",slug:"how-to-get-clock-in-a-program",children:[{level:3,title:"Passing Clock as an account inside an instruction",slug:"passing-clock-as-an-account-inside-an-instruction",children:[]},{level:3,title:"Accessing Clock directly inside an instruction",slug:"accessing-clock-directly-inside-an-instruction",children:[]}]},{level:2,title:"How to change account size",slug:"how-to-change-account-size",children:[]},{level:2,title:"How to do Cross Program Invocation",slug:"how-to-do-cross-program-invocation",children:[]},{level:2,title:"How to create a PDA",slug:"how-to-create-a-pda",children:[]},{level:2,title:"How to read accounts",slug:"how-to-read-accounts",children:[]},{level:2,title:"How to verify accounts",slug:"how-to-verify-accounts",children:[]},{level:2,title:"How to read multiple instructions from a transaction",slug:"how-to-read-multiple-instructions-from-a-transaction",children:[]}],path:"/kr/references/programs.html",pathLocale:"/kr/",extraFields:[]},{title:"Staking",headers:[{level:2,title:"Get Current Validators",slug:"get-current-validators",children:[]},{level:2,title:"Create Stake Account",slug:"create-stake-account",children:[]},{level:2,title:"Delegate Stake",slug:"delegate-stake",children:[]},{level:2,title:"Get Delegator by Validators",slug:"get-delegator-by-validators",children:[]},{level:2,title:"Deactivate Stake",slug:"deactivate-stake",children:[]},{level:2,title:"Withdraw Stake",slug:"withdraw-stake",children:[]}],path:"/kr/references/staking.html",pathLocale:"/kr/",extraFields:[]},{title:"Interacting with Tokens",headers:[{level:2,title:"What do I need to get started with SPL-Tokens?",slug:"what-do-i-need-to-get-started-with-spl-tokens",children:[]},{level:2,title:"How to create a new Token",slug:"how-to-create-a-new-token",children:[]},{level:2,title:"How to get a token mint",slug:"how-to-get-a-token-mint",children:[]},{level:2,title:"How to create a token account",slug:"how-to-create-a-token-account",children:[]},{level:2,title:"How to get a Token Account",slug:"how-to-get-a-token-account",children:[]},{level:2,title:"How to get a token account's balance",slug:"how-to-get-a-token-account-s-balance",children:[]},{level:2,title:"How to mint tokens",slug:"how-to-mint-tokens",children:[]},{level:2,title:"How to transfer tokens",slug:"how-to-transfer-tokens",children:[]},{level:2,title:"How to burn tokens",slug:"how-to-burn-tokens",children:[]},{level:2,title:"How to close token accounts",slug:"how-to-close-token-accounts",children:[]},{level:2,title:"How to set authority on token accounts or mints",slug:"how-to-set-authority-on-token-accounts-or-mints",children:[]},{level:2,title:"How to approve a token delegate",slug:"how-to-approve-a-token-delegate",children:[]},{level:2,title:"How to revoke a token delegate",slug:"how-to-revoke-a-token-delegate",children:[]},{level:2,title:"How to manage wrapped SOL",slug:"how-to-manage-wrapped-sol",children:[{level:3,title:"Create Token Account",slug:"create-token-account",children:[]},{level:3,title:"Add Balance",slug:"add-balance",children:[]}]},{level:2,title:"How to get all token accounts by owner",slug:"how-to-get-all-token-accounts-by-owner",children:[]}],path:"/kr/references/token.html",pathLocale:"/kr/",extraFields:[]},{title:"Accounts",headers:[{level:2,title:"\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49",slug:"\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49",children:[]},{level:2,title:"\u0E25\u0E07\u0E25\u0E36\u0E01",slug:"\u0E25\u0E07\u0E25\u0E36\u0E01",children:[{level:3,title:"Account Model",slug:"account-model",children:[]},{level:3,title:"Rent (\u0E04\u0E48\u0E32\u0E40\u0E0A\u0E48\u0E32)",slug:"rent-\u0E04\u0E48\u0E32\u0E40\u0E0A\u0E48\u0E32",children:[]}]},{level:2,title:"\u0E41\u0E2B\u0E25\u0E48\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19",slug:"\u0E41\u0E2B\u0E25\u0E48\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19",children:[{level:3,title:"Credit",slug:"credit",children:[]}]}],path:"/th/core-concepts/accounts.html",pathLocale:"/th/",extraFields:[]},{title:"Program Derived Addresses (PDAs)",headers:[{level:2,title:"\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49",slug:"\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49",children:[]},{level:2,title:"\u0E25\u0E07\u0E25\u0E36\u0E01",slug:"\u0E25\u0E07\u0E25\u0E36\u0E01",children:[{level:3,title:"\u0E01\u0E32\u0E23\u0E2A\u0E23\u0E49\u0E32\u0E07 PDAs",slug:"\u0E01\u0E32\u0E23\u0E2A\u0E23\u0E49\u0E32\u0E07-pdas",children:[]},{level:3,title:"\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19 PDAs",slug:"\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19-pdas",children:[]}]},{level:2,title:"\u0E41\u0E2B\u0E25\u0E48\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19",slug:"\u0E41\u0E2B\u0E25\u0E48\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19",children:[]}],path:"/th/core-concepts/pdas.html",pathLocale:"/th/",extraFields:[]},{title:"Programs",headers:[{level:2,title:"\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49",slug:"\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49",children:[]},{level:2,title:"\u0E25\u0E07\u0E25\u0E36\u0E01",slug:"\u0E25\u0E07\u0E25\u0E36\u0E01",children:[{level:3,title:"Native Programs \u0E41\u0E25\u0E30 The Solana Program Library (SPL)",slug:"native-programs-\u0E41\u0E25\u0E30-the-solana-program-library-spl",children:[]},{level:3,title:"\u0E40\u0E02\u0E35\u0E22\u0E19 Programs",slug:"\u0E40\u0E02\u0E35\u0E22\u0E19-programs",children:[]},{level:3,title:"Deploying Programs",slug:"deploying-programs",children:[]}]},{level:2,title:"\u0E41\u0E2B\u0E25\u0E48\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19",slug:"\u0E41\u0E2B\u0E25\u0E48\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19",children:[]}],path:"/th/core-concepts/programs.html",pathLocale:"/th/",extraFields:[]},{title:"Transactions",headers:[{level:2,title:"\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49",slug:"\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49",children:[]},{level:2,title:"\u0E25\u0E07\u0E25\u0E36\u0E01",slug:"\u0E25\u0E07\u0E25\u0E36\u0E01",children:[{level:3,title:"\u0E04\u0E48\u0E32\u0E18\u0E23\u0E23\u0E21\u0E40\u0E19\u0E35\u0E22\u0E21 (Fees)",slug:"\u0E04\u0E48\u0E32\u0E18\u0E23\u0E23\u0E21\u0E40\u0E19\u0E35\u0E22\u0E21-fees",children:[]}]},{level:2,title:"\u0E41\u0E2B\u0E25\u0E48\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19",slug:"\u0E41\u0E2B\u0E25\u0E48\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19",children:[]}],path:"/th/core-concepts/transactions.html",pathLocale:"/th/",extraFields:[]},{title:"\u0E01\u0E32\u0E23\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07",headers:[{level:2,title:"\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07 Web3.js",slug:"\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07-web3-js",children:[{level:3,title:"Web3.js",slug:"web3-js",children:[]},{level:3,title:"SPL-Token",slug:"spl-token",children:[]},{level:3,title:"Wallet-Adapter",slug:"wallet-adapter",children:[]}]},{level:2,title:"\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07 Rust",slug:"\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07-rust",children:[]},{level:2,title:"\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07 CLI",slug:"\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07-cli",children:[{level:3,title:"macOS & Linux",slug:"macos-linux",children:[]},{level:3,title:"Windows",slug:"windows",children:[]},{level:3,title:"Build From Source",slug:"build-from-source",children:[]}]}],path:"/th/getting-started/installation.html",pathLocale:"/th/",extraFields:[]},{title:"Account Maps",headers:[{level:2,title:"Deriving PDAs",slug:"deriving-pdas",children:[]},{level:2,title:"Single Map Account",slug:"single-map-account",children:[]}],path:"/th/guides/account-maps.html",pathLocale:"/th/",extraFields:[]},{title:"Migrating Program Data Accounts",headers:[{level:2,title:"\u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 migrate program's data accounts \u0E44\u0E14\u0E49\u0E22\u0E31\u0E07\u0E44\u0E07?",slug:"\u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16-migrate-program-s-data-accounts-\u0E44\u0E14\u0E49\u0E22\u0E31\u0E07\u0E44\u0E07",children:[]},{level:2,title:"\u0E2A\u0E16\u0E32\u0E19\u0E01\u0E32\u0E23\u0E13\u0E4C (Scenario)",slug:"\u0E2A\u0E16\u0E32\u0E19\u0E01\u0E32\u0E23\u0E13\u0E4C-scenario",children:[]},{level:2,title:"Upgrading the Account",slug:"upgrading-the-account",children:[{level:3,title:"1. Add account conversion logic",slug:"_1-add-account-conversion-logic",children:[]}]},{level:2,title:"Resources",slug:"resources",children:[]}],path:"/th/guides/data-migration.html",pathLocale:"/th/",extraFields:[]},{title:"Debugging Solana Programs",headers:[{level:2,title:"\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49",slug:"\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49",children:[]},{level:2,title:"Runtime Testing \u0E41\u0E25\u0E30 Debugging \u0E43\u0E19 editor",slug:"runtime-testing-\u0E41\u0E25\u0E30-debugging-\u0E43\u0E19-editor",children:[]},{level:2,title:"\u0E17\u0E14\u0E2A\u0E2D\u0E1A\u0E14\u0E49\u0E27\u0E22 Local Validator Node \u0E43\u0E19 editor",slug:"\u0E17\u0E14\u0E2A\u0E2D\u0E1A\u0E14\u0E49\u0E27\u0E22-local-validator-node-\u0E43\u0E19-editor",children:[]},{level:2,title:"Local Validator Node Testing from Client Apps",slug:"local-validator-node-testing-from-client-apps",children:[]},{level:2,title:"Resources",slug:"resources",children:[]}],path:"/th/guides/debugging-solana-programs.html",pathLocale:"/th/",extraFields:[]},{title:"Feature Parity Testing",headers:[{level:2,title:"\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49",slug:"\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49",children:[]},{level:2,title:"Scenario",slug:"scenario",children:[]},{level:2,title:"Feature Status",slug:"feature-status",children:[]},{level:2,title:"Parity Testing",slug:"parity-testing",children:[]},{level:2,title:"\u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E07\u0E48\u0E32\u0E22\u0E46",slug:"\u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E07\u0E48\u0E32\u0E22\u0E46",children:[{level:3,title:"\u0E40\u0E1B\u0E34\u0E14\u0E17\u0E38\u0E01 features",slug:"\u0E40\u0E1B\u0E34\u0E14\u0E17\u0E38\u0E01-features",children:[]},{level:3,title:"\u0E40\u0E25\u0E37\u0E2D\u0E01\u0E1B\u0E34\u0E14 features",slug:"\u0E40\u0E25\u0E37\u0E2D\u0E01\u0E1B\u0E34\u0E14-features",children:[]}]},{level:2,title:"Feature Parity Testing",slug:"feature-parity-testing",children:[]},{level:2,title:"Full Parity Testing Programmatically",slug:"full-parity-testing-programmatically",children:[]},{level:2,title:"Resources",slug:"resources",children:[]}],path:"/th/guides/feature-parity-testing.html",pathLocale:"/th/",extraFields:[]},{title:"Get Program Accounts",headers:[{level:2,title:"\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49",slug:"\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49",children:[]},{level:2,title:"\u0E25\u0E07\u0E25\u0E36\u0E01",slug:"\u0E25\u0E07\u0E25\u0E36\u0E01",children:[{level:3,title:"filters",slug:"filters",children:[]},{level:3,title:"dataSlice",slug:"dataslice",children:[]}]},{level:2,title:"\u0E41\u0E2B\u0E25\u0E48\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19",slug:"\u0E41\u0E2B\u0E25\u0E48\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19",children:[]}],path:"/th/guides/get-program-accounts.html",pathLocale:"/th/",extraFields:[]},{title:"Retrying Transactions",headers:[{level:2,title:"\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49",slug:"\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49",children:[]},{level:2,title:"\u0E01\u0E32\u0E23\u0E40\u0E14\u0E34\u0E19\u0E17\u0E32\u0E07\u0E02\u0E2D\u0E07 Transaction",slug:"\u0E01\u0E32\u0E23\u0E40\u0E14\u0E34\u0E19\u0E17\u0E32\u0E07\u0E02\u0E2D\u0E07-transaction",children:[{level:3,title:"Clients Submit Transactions \u0E22\u0E31\u0E07\u0E44\u0E07",slug:"clients-submit-transactions-\u0E22\u0E31\u0E07\u0E44\u0E07",children:[]},{level:3,title:"RPC Nodes Broadcast Transactions \u0E22\u0E31\u0E07\u0E44\u0E07",slug:"rpc-nodes-broadcast-transactions-\u0E22\u0E31\u0E07\u0E44\u0E07",children:[]}]},{level:2,title:"Transactions \u0E16\u0E39\u0E01\u0E17\u0E34\u0E49\u0E07\u0E44\u0E1B\u0E44\u0E14\u0E49\u0E22\u0E31\u0E07\u0E44\u0E07",slug:"transactions-\u0E16\u0E39\u0E01\u0E17\u0E34\u0E49\u0E07\u0E44\u0E1B\u0E44\u0E14\u0E49\u0E22\u0E31\u0E07\u0E44\u0E07",children:[{level:3,title:"\u0E01\u0E48\u0E2D\u0E19 transaction \u0E08\u0E30\u0E1B\u0E23\u0E30\u0E21\u0E27\u0E25\u0E1C\u0E25\u0E40\u0E2A\u0E23\u0E47\u0E08",slug:"\u0E01\u0E48\u0E2D\u0E19-transaction-\u0E08\u0E30\u0E1B\u0E23\u0E30\u0E21\u0E27\u0E25\u0E1C\u0E25\u0E40\u0E2A\u0E23\u0E47\u0E08",children:[]},{level:3,title:"\u0E2B\u0E25\u0E31\u0E07\u0E08\u0E32\u0E01 transaction \u0E1B\u0E23\u0E30\u0E21\u0E27\u0E25\u0E1C\u0E25\u0E40\u0E2A\u0E23\u0E47\u0E08 \u0E41\u0E25\u0E30\u0E01\u0E48\u0E2D\u0E19\u0E08\u0E30 finalized",slug:"\u0E2B\u0E25\u0E31\u0E07\u0E08\u0E32\u0E01-transaction-\u0E1B\u0E23\u0E30\u0E21\u0E27\u0E25\u0E1C\u0E25\u0E40\u0E2A\u0E23\u0E47\u0E08-\u0E41\u0E25\u0E30\u0E01\u0E48\u0E2D\u0E19\u0E08\u0E30-finalized",children:[]}]},{level:2,title:"\u0E08\u0E31\u0E14\u0E01\u0E32\u0E23 Transactions \u0E17\u0E35\u0E48\u0E16\u0E39\u0E01\u0E17\u0E34\u0E49\u0E07",slug:"\u0E08\u0E31\u0E14\u0E01\u0E32\u0E23-transactions-\u0E17\u0E35\u0E48\u0E16\u0E39\u0E01\u0E17\u0E34\u0E49\u0E07",children:[{level:3,title:"sendTransaction \u0E40\u0E0A\u0E34\u0E07\u0E25\u0E36\u0E01",slug:"sendtransaction-\u0E40\u0E0A\u0E34\u0E07\u0E25\u0E36\u0E01",children:[]}]},{level:2,title:"\u0E17\u0E33 Rebroadcast Logic \u0E40\u0E2D\u0E07",slug:"\u0E17\u0E4D\u0E32-rebroadcast-logic-\u0E40\u0E2D\u0E07",children:[{level:3,title:"\u0E08\u0E30\u0E40\u0E01\u0E34\u0E14\u0E2D\u0E30\u0E44\u0E23\u0E02\u0E36\u0E49\u0E19\u0E16\u0E49\u0E32 Skip Preflight",slug:"\u0E08\u0E30\u0E40\u0E01\u0E34\u0E14\u0E2D\u0E30\u0E44\u0E23\u0E02\u0E36\u0E49\u0E19\u0E16\u0E49\u0E32-skip-preflight",children:[]},{level:3,title:"Re-Sign Transactions \u0E40\u0E21\u0E37\u0E48\u0E2D\u0E44\u0E2B\u0E23\u0E48\u0E14\u0E35",slug:"re-sign-transactions-\u0E40\u0E21\u0E37\u0E48\u0E2D\u0E44\u0E2B\u0E23\u0E48\u0E14\u0E35",children:[]}]},{level:2,title:"Acknowledgements",slug:"acknowledgements",children:[]}],path:"/th/guides/retrying-transactions.html",pathLocale:"/th/",extraFields:[]},{title:"Serializing Data",headers:[{level:2,title:"\u0E01\u0E32\u0E23\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A Borsh Serialization",slug:"\u0E01\u0E32\u0E23\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07\u0E2A\u0E4D\u0E32\u0E2B\u0E23\u0E31\u0E1A-borsh-serialization",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35 serialize instruction data \u0E17\u0E35\u0E48 client",slug:"\u0E27\u0E34\u0E18\u0E35-serialize-instruction-data-\u0E17\u0E35\u0E48-client",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35 deserialize instruction data \u0E43\u0E19 program",slug:"\u0E27\u0E34\u0E18\u0E35-deserialize-instruction-data-\u0E43\u0E19-program",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35 serialize account data \u0E43\u0E19 program",slug:"\u0E27\u0E34\u0E18\u0E35-serialize-account-data-\u0E43\u0E19-program",children:[{level:3,title:"Pack",slug:"pack",children:[]},{level:3,title:"Serialization/Deserialization",slug:"serialization-deserialization",children:[]},{level:3,title:"\u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19",slug:"\u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19",children:[]}]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35 deserialize account data \u0E17\u0E35\u0E48 client",slug:"\u0E27\u0E34\u0E18\u0E35-deserialize-account-data-\u0E17\u0E35\u0E48-client",children:[]},{level:2,title:"Solana TS/JS Mappings \u0E17\u0E31\u0E48\u0E27\u0E44\u0E1B",slug:"solana-ts-js-mappings-\u0E17\u0E31\u0E48\u0E27\u0E44\u0E1B",children:[]},{level:2,title:"Advanced Constructs",slug:"advanced-constructs",children:[{level:3,title:"COption",slug:"coption",children:[]}]},{level:2,title:"Resources",slug:"resources",children:[]}],path:"/th/guides/serialization.html",pathLocale:"/th/",extraFields:[]},{title:"Versioned Transactions",headers:[{level:2,title:"Facts (\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49)",slug:"facts-\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49",children:[]},{level:2,title:"Legacy Transaction",slug:"legacy-transaction",children:[]},{level:2,title:"Legacy Message",slug:"legacy-message",children:[{level:3,title:"Header",slug:"header",children:[]},{level:3,title:"Compact-array \u0E02\u0E2D\u0E07 account addresses",slug:"compact-array-\u0E02\u0E2D\u0E07-account-addresses",children:[]},{level:3,title:"Compact array \u0E02\u0E2D\u0E07 instructions",slug:"compact-array-\u0E02\u0E2D\u0E07-instructions",children:[]}]},{level:2,title:"\u0E02\u0E49\u0E2D\u0E08\u0E33\u0E01\u0E31\u0E14\u0E02\u0E2D\u0E07 Legacy Transactions",slug:"\u0E02\u0E49\u0E2D\u0E08\u0E4D\u0E32\u0E01\u0E31\u0E14\u0E02\u0E2D\u0E07-legacy-transactions",children:[]},{level:2,title:"Address Lookup Tables (LUT)",slug:"address-lookup-tables-lut",children:[]},{level:2,title:"Versioned Transactions: TransactionV0",slug:"versioned-transactions-transactionv0",children:[]},{level:2,title:"MessageV0",slug:"messagev0",children:[{level:3,title:"Compact array \u0E02\u0E2D\u0E07 address table lookups",slug:"compact-array-\u0E02\u0E2D\u0E07-address-table-lookups",children:[]},{level:3,title:"Compact array \u0E02\u0E2D\u0E07 instructions",slug:"compact-array-\u0E02\u0E2D\u0E07-instructions-1",children:[]}]},{level:2,title:"RPC Changes",slug:"rpc-changes",children:[]},{level:2,title:"\u0E41\u0E2B\u0E25\u0E48\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19\u0E46",slug:"\u0E41\u0E2B\u0E25\u0E48\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19\u0E46",children:[]},{level:2,title:"\u0E2D\u0E49\u0E32\u0E07\u0E2D\u0E34\u0E07",slug:"\u0E2D\u0E49\u0E32\u0E07\u0E2D\u0E34\u0E07",children:[]}],path:"/th/guides/versioned-transactions.html",pathLocale:"/th/",extraFields:[]},{title:"\u0E40\u0E23\u0E34\u0E48\u0E21\u0E15\u0E49\u0E19",headers:[{level:2,title:"Composability \u0E04\u0E37\u0E2D\u0E2B\u0E31\u0E27\u0E43\u0E08",slug:"composability-\u0E04\u0E37\u0E2D\u0E2B\u0E31\u0E27\u0E43\u0E08",children:[]},{level:2,title:"Contributing",slug:"contributing",children:[]}],path:"/th/integrations/",pathLocale:"/th/",extraFields:[]},{title:"Jupiter",headers:[{level:3,title:"\u0E01\u0E32\u0E23\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07",slug:"\u0E01\u0E32\u0E23\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07",children:[]},{level:3,title:"\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23 Token \u0E08\u0E32\u0E01 Jupiter",slug:"\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23-token-\u0E08\u0E32\u0E01-jupiter",children:[]},{level:3,title:"Loading the Jupiter instance",slug:"loading-the-jupiter-instance",children:[]},{level:3,title:"\u0E2B\u0E32\u0E40\u0E2A\u0E49\u0E19\u0E17\u0E32\u0E07 RouteMap",slug:"\u0E2B\u0E32\u0E40\u0E2A\u0E49\u0E19\u0E17\u0E32\u0E07-routemap",children:[]},{level:3,title:"\u0E2B\u0E32\u0E40\u0E2A\u0E49\u0E19\u0E17\u0E32\u0E07\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A Input \u0E41\u0E25\u0E30 Output token \u0E17\u0E35\u0E48\u0E43\u0E2B\u0E49\u0E21\u0E32",slug:"\u0E2B\u0E32\u0E40\u0E2A\u0E49\u0E19\u0E17\u0E32\u0E07\u0E2A\u0E4D\u0E32\u0E2B\u0E23\u0E31\u0E1A-input-\u0E41\u0E25\u0E30-output-token-\u0E17\u0E35\u0E48\u0E43\u0E2B\u0E49\u0E21\u0E32",children:[]},{level:3,title:"Execute the Token Swap",slug:"execute-the-token-swap",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E43\u0E0A\u0E49 Jupiter \u0E01\u0E31\u0E1A React Application",slug:"\u0E27\u0E34\u0E18\u0E35\u0E43\u0E0A\u0E49-jupiter-\u0E01\u0E31\u0E1A-react-application",children:[{level:3,title:"\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07",slug:"\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07",children:[]},{level:3,title:"\u0E40\u0E1E\u0E34\u0E48\u0E21 Provider",slug:"\u0E40\u0E1E\u0E34\u0E48\u0E21-provider",children:[]},{level:3,title:"\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23 Tokens",slug:"\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23-tokens",children:[]},{level:3,title:"\u0E15\u0E31\u0E49\u0E07\u0E04\u0E48\u0E32 State",slug:"\u0E15\u0E31\u0E49\u0E07\u0E04\u0E48\u0E32-state",children:[]},{level:3,title:"\u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49 react hook useJupiter",slug:"\u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49-react-hook-usejupiter",children:[]},{level:3,title:"\u0E17\u0E33\u0E01\u0E32\u0E23 Swap",slug:"\u0E17\u0E4D\u0E32\u0E01\u0E32\u0E23-swap",children:[]}]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35 use Jupiter API",slug:"\u0E27\u0E34\u0E18\u0E35-use-jupiter-api",children:[{level:3,title:"\u0E01\u0E32\u0E23\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07",slug:"\u0E01\u0E32\u0E23\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07-1",children:[]},{level:3,title:"\u0E2B\u0E32 Route Map",slug:"\u0E2B\u0E32-route-map",children:[]},{level:3,title:"\u0E27\u0E34\u0E18\u0E35\u0E17\u0E33 Serialized Transaction \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E40\u0E2D\u0E32\u0E44\u0E1B Swap",slug:"\u0E27\u0E34\u0E18\u0E35\u0E17\u0E4D\u0E32-serialized-transaction-\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E40\u0E2D\u0E32\u0E44\u0E1B-swap",children:[]},{level:3,title:"\u0E17\u0E33\u0E01\u0E32\u0E23 Swap Transaction",slug:"\u0E17\u0E4D\u0E32\u0E01\u0E32\u0E23-swap-transaction",children:[]}]},{level:2,title:"\u0E41\u0E2B\u0E25\u0E48\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19",slug:"\u0E41\u0E2B\u0E25\u0E48\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19",children:[]}],path:"/th/integrations/jupiter.html",pathLocale:"/th/",extraFields:[]},{title:"Mango Markets",headers:[{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25 Mango Group",slug:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25-mango-group",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07 Mango Account",slug:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07-mango-account",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E1D\u0E32\u0E01 (deposit) USDC \u0E40\u0E02\u0E49\u0E32\u0E44\u0E1B\u0E43\u0E19 Mango Account",slug:"\u0E27\u0E34\u0E18\u0E35\u0E1D\u0E32\u0E01-deposit-usdc-\u0E40\u0E02\u0E49\u0E32\u0E44\u0E1B\u0E43\u0E19-mango-account",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E15\u0E31\u0E49\u0E07 spot order",slug:"\u0E27\u0E34\u0E18\u0E35\u0E15\u0E31\u0E49\u0E07-spot-order",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35 load bids",slug:"\u0E27\u0E34\u0E18\u0E35-load-bids",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E23\u0E32\u0E04\u0E32\u0E02\u0E32\u0E22 (asks)",slug:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E23\u0E32\u0E04\u0E32\u0E02\u0E32\u0E22-asks",children:[]},{level:2,title:"\u0E41\u0E2B\u0E25\u0E48\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19",slug:"\u0E41\u0E2B\u0E25\u0E48\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19",children:[]}],path:"/th/integrations/mango.html",pathLocale:"/th/",extraFields:[]},{title:"Pyth",headers:[{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E43\u0E0A\u0E49 Pyth \u0E08\u0E32\u0E01 Client",slug:"\u0E27\u0E34\u0E18\u0E35\u0E43\u0E0A\u0E49-pyth-\u0E08\u0E32\u0E01-client",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E43\u0E0A\u0E49 Pyth \u0E14\u0E49\u0E27\u0E22 Anchor",slug:"\u0E27\u0E34\u0E18\u0E35\u0E43\u0E0A\u0E49-pyth-\u0E14\u0E49\u0E27\u0E22-anchor",children:[]},{level:2,title:"\u0E41\u0E2B\u0E25\u0E48\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19",slug:"\u0E41\u0E2B\u0E25\u0E48\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19",children:[]}],path:"/th/integrations/pyth.html",pathLocale:"/th/",extraFields:[]},{title:"React Native",headers:[{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E43\u0E0A\u0E49 @solana/web3.js \u0E43\u0E19 React Native app",slug:"\u0E27\u0E34\u0E18\u0E35\u0E43\u0E0A\u0E49-solana-web3-js-\u0E43\u0E19-react-native-app",children:[{level:3,title:"\u0E2A\u0E23\u0E49\u0E32\u0E07 app \u0E43\u0E2B\u0E21\u0E48",slug:"\u0E2A\u0E23\u0E49\u0E32\u0E07-app-\u0E43\u0E2B\u0E21\u0E48",children:[]},{level:3,title:"\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07 dependencies",slug:"\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07-dependencies",children:[]},{level:3,title:"Update index.js",slug:"update-index-js",children:[]},{level:3,title:"Update metro.config.js",slug:"update-metro-config-js",children:[]},{level:3,title:"Update App.tsx",slug:"update-app-tsx",children:[]},{level:3,title:"\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07 cocoapods",slug:"\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07-cocoapods",children:[]},{level:3,title:"Start application",slug:"start-application",children:[]}]},{level:2,title:"Solana DApp Scaffold \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A React Native",slug:"solana-dapp-scaffold-\u0E2A\u0E4D\u0E32\u0E2B\u0E23\u0E31\u0E1A-react-native",children:[]},{level:2,title:"\u0E1B\u0E31\u0E0D\u0E2B\u0E32\u0E17\u0E35\u0E48\u0E40\u0E08\u0E2D\u0E1A\u0E48\u0E2D\u0E22\u0E40\u0E21\u0E37\u0E48\u0E2D\u0E43\u0E0A\u0E49 @solana/web3.js \u0E01\u0E31\u0E1A React Native app",slug:"\u0E1B\u0E31\u0E0D\u0E2B\u0E32\u0E17\u0E35\u0E48\u0E40\u0E08\u0E2D\u0E1A\u0E48\u0E2D\u0E22\u0E40\u0E21\u0E37\u0E48\u0E2D\u0E43\u0E0A\u0E49-solana-web3-js-\u0E01\u0E31\u0E1A-react-native-app",children:[{level:3,title:"Error: While trying to resolve module superstruct from file",slug:"error-while-trying-to-resolve-module-superstruct-from-file",children:[]},{level:3,title:"Error: URL.protocol is not implemented",slug:"error-url-protocol-is-not-implemented",children:[]},{level:3,title:"Error: crypto.getRandomValues() not supported",slug:"error-crypto-getrandomvalues-not-supported",children:[]}]}],path:"/th/integrations/react-native.html",pathLocale:"/th/",extraFields:[]},{title:"Serum",headers:[{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25 Serum market",slug:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25-serum-market",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25 Serum order books",slug:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25-serum-order-books",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25 open orders \u0E43\u0E19\u0E1B\u0E31\u0E08\u0E08\u0E38\u0E1A\u0E31\u0E19",slug:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25-open-orders-\u0E43\u0E19\u0E1B\u0E31\u0E08\u0E08\u0E38\u0E1A\u0E31\u0E19",children:[]}],path:"/th/integrations/serum.html",pathLocale:"/th/",extraFields:[]},{title:"Strata",headers:[{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07 fully managed token",slug:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07-fully-managed-token",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35 buy \u0E41\u0E25\u0E30 sell a token",slug:"\u0E27\u0E34\u0E18\u0E35-buy-\u0E41\u0E25\u0E30-sell-a-token",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35 bootstrap liquidity",slug:"\u0E27\u0E34\u0E18\u0E35-bootstrap-liquidity",children:[]},{level:2,title:"\u0E41\u0E2B\u0E25\u0E48\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19",slug:"\u0E41\u0E2B\u0E25\u0E48\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19",children:[]}],path:"/th/integrations/strata.html",pathLocale:"/th/",extraFields:[]},{title:"Switchboard",headers:[{level:2,title:"Data Feeds",slug:"data-feeds",children:[{level:3,title:"\u0E01\u0E32\u0E23\u0E2D\u0E48\u0E32\u0E19\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E08\u0E32\u0E01 aggregator feed",slug:"\u0E01\u0E32\u0E23\u0E2D\u0E48\u0E32\u0E19\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E08\u0E32\u0E01-aggregator-feed",children:[]},{level:3,title:"Create a new aggregator feed",slug:"create-a-new-aggregator-feed",children:[]},{level:3,title:"Read data from an aggregator feed in program",slug:"read-data-from-an-aggregator-feed-in-program",children:[]},{level:3,title:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07 Feed \u0E08\u0E32\u0E01 Publisher",slug:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07-feed-\u0E08\u0E32\u0E01-publisher",children:[]}]},{level:2,title:"Oracles",slug:"oracles",children:[{level:3,title:"\u0E2A\u0E23\u0E49\u0E32\u0E07 oracle",slug:"\u0E2A\u0E23\u0E49\u0E32\u0E07-oracle",children:[]},{level:3,title:"Run an oracle locally",slug:"run-an-oracle-locally",children:[]},{level:3,title:"Oracle Config",slug:"oracle-config",children:[]}]},{level:2,title:"Verifiable Random Function(VRF)",slug:"verifiable-random-function-vrf",children:[{level:3,title:"\u0E01\u0E32\u0E23\u0E2D\u0E48\u0E32\u0E19 VRF account",slug:"\u0E01\u0E32\u0E23\u0E2D\u0E48\u0E32\u0E19-vrf-account",children:[]},{level:3,title:"Creating a VRF account",slug:"creating-a-vrf-account",children:[]},{level:3,title:"\u0E02\u0E2D Randomness \u0E08\u0E32\u0E01 vrf account",slug:"\u0E02\u0E2D-randomness-\u0E08\u0E32\u0E01-vrf-account",children:[]}]},{level:2,title:"\u0E41\u0E2B\u0E25\u0E48\u0E07\u0E04\u0E27\u0E32\u0E21\u0E23\u0E39\u0E49",slug:"\u0E41\u0E2B\u0E25\u0E48\u0E07\u0E04\u0E27\u0E32\u0E21\u0E23\u0E39\u0E49",children:[{level:3,title:"APIs \u0E41\u0E25\u0E30 Libraries",slug:"apis-\u0E41\u0E25\u0E30-libraries",children:[]},{level:3,title:"\u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07",slug:"\u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07",children:[]},{level:3,title:"\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19\u0E46",slug:"\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19\u0E46",children:[]}]}],path:"/th/integrations/switchboard.html",pathLocale:"/th/",extraFields:[]},{title:"web3Auth (Torus Wallet)",headers:[{level:2,title:"wallet \u0E04\u0E37\u0E2D\u0E2D\u0E30\u0E44\u0E23?",slug:"wallet-\u0E04\u0E37\u0E2D\u0E2D\u0E30\u0E44\u0E23",children:[]},{level:2,title:"Social Logins \u0E1A\u0E19 Solana",slug:"social-logins-\u0E1A\u0E19-solana",children:[]},{level:2,title:"\u0E41\u0E19\u0E27\u0E17\u0E32\u0E07\u0E01\u0E32\u0E23 Integration",slug:"\u0E41\u0E19\u0E27\u0E17\u0E32\u0E07\u0E01\u0E32\u0E23-integration",children:[{level:3,title:"\u0E01\u0E32\u0E23\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07 Dependencies",slug:"\u0E01\u0E32\u0E23\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07-dependencies",children:[]},{level:3,title:"\u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49 SDK \u0E41\u0E25\u0E30 initialize",slug:"\u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49-sdk-\u0E41\u0E25\u0E30-initialize",children:[]},{level:3,title:"Trigger user login\u200B",slug:"trigger-user-login\u200B",children:[]},{level:3,title:"\u0E01\u0E32\u0E23\u0E0A\u0E49 torus instance \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E23\u0E32\u0E22\u0E25\u0E30\u0E40\u0E2D\u0E35\u0E22\u0E14 user account",slug:"\u0E01\u0E32\u0E23\u0E0A\u0E49-torus-instance-\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E23\u0E32\u0E22\u0E25\u0E30\u0E40\u0E2D\u0E35\u0E22\u0E14-user-account",children:[]},{level:3,title:"\u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49 Torus Solana API \u0E40\u0E1E\u0E37\u0E48\u0E2D sign message.",slug:"\u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49-torus-solana-api-\u0E40\u0E1E\u0E37\u0E48\u0E2D-sign-message",children:[]},{level:3,title:"\u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49 torus Solana API \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E2A\u0E48\u0E07 transaction.\u200B",slug:"\u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49-torus-solana-api-\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E2A\u0E48\u0E07-transaction-\u200B",children:[]},{level:3,title:"Top-ups\u200B",slug:"top-ups\u200B",children:[]},{level:3,title:"Logout",slug:"logout",children:[]}]},{level:2,title:"Resources",slug:"resources",children:[]}],path:"/th/integrations/web3auth.html",pathLocale:"/th/",extraFields:[]},{title:"Accounts",headers:[{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07 system account",slug:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07-system-account",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E04\u0E33\u0E19\u0E27\u0E13 account cost",slug:"\u0E27\u0E34\u0E18\u0E35\u0E04\u0E4D\u0E32\u0E19\u0E27\u0E13-account-cost",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07 accounts \u0E14\u0E49\u0E27\u0E22 seeds",slug:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07-accounts-\u0E14\u0E49\u0E27\u0E22-seeds",children:[{level:3,title:"Generate",slug:"generate",children:[]},{level:3,title:"Create",slug:"create",children:[]},{level:3,title:"Transfer",slug:"transfer",children:[]}]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07 PDAs",slug:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07-pdas",children:[{level:3,title:"\u0E01\u0E32\u0E23\u0E2A\u0E23\u0E49\u0E32\u0E07 PDA",slug:"\u0E01\u0E32\u0E23\u0E2A\u0E23\u0E49\u0E32\u0E07-pda",children:[]},{level:3,title:"\u0E28\u0E23\u0E49\u0E32\u0E07 PDA",slug:"\u0E28\u0E23\u0E49\u0E32\u0E07-pda",children:[]}]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35 sign \u0E14\u0E49\u0E27\u0E22 PDA",slug:"\u0E27\u0E34\u0E18\u0E35-sign-\u0E14\u0E49\u0E27\u0E22-pda",children:[{level:3,title:"Program",slug:"program-1",children:[]},{level:3,title:"Client",slug:"client-1",children:[]}]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25 program accounts",slug:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25-program-accounts",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E1B\u0E34\u0E14 accounts",slug:"\u0E27\u0E34\u0E18\u0E35\u0E1B\u0E34\u0E14-accounts",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25 account balance",slug:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25-account-balance",children:[]}],path:"/th/references/accounts.html",pathLocale:"/th/",extraFields:[]},{title:"Sending Transactions",headers:[{level:2,title:"\u0E27\u0E34\u0E18\u0E35 send SOL",slug:"\u0E27\u0E34\u0E18\u0E35-send-sol",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35 send SPL-Tokens",slug:"\u0E27\u0E34\u0E18\u0E35-send-spl-tokens",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E04\u0E33\u0E19\u0E27\u0E13\u0E2B\u0E32 transaction cost",slug:"\u0E27\u0E34\u0E18\u0E35\u0E04\u0E4D\u0E32\u0E19\u0E27\u0E13\u0E2B\u0E32-transaction-cost",children:[{level:3,title:"getEstimatedFee",slug:"getestimatedfee",children:[]},{level:3,title:"getFeeForMessage",slug:"getfeeformessage",children:[]}]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E40\u0E1E\u0E34\u0E48\u0E21 memo \u0E43\u0E19 transaction",slug:"\u0E27\u0E34\u0E18\u0E35\u0E40\u0E1E\u0E34\u0E48\u0E21-memo-\u0E43\u0E19-transaction",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E40\u0E1B\u0E25\u0E35\u0E48\u0E22\u0E19 compute budget \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A transaction",slug:"\u0E27\u0E34\u0E18\u0E35\u0E40\u0E1B\u0E25\u0E35\u0E48\u0E22\u0E19-compute-budget-\u0E2A\u0E4D\u0E32\u0E2B\u0E23\u0E31\u0E1A-transaction",children:[]}],path:"/th/references/basic-transactions.html",pathLocale:"/th/",extraFields:[]},{title:"Keypairs \u0E41\u0E25\u0E30 Wallets",headers:[{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07 Keypair \u0E43\u0E2B\u0E21\u0E48",slug:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07-keypair-\u0E43\u0E2B\u0E21\u0E48",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35 restore a Keypair from a secret",slug:"\u0E27\u0E34\u0E18\u0E35-restore-a-keypair-from-a-secret",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35 verify a Keypair",slug:"\u0E27\u0E34\u0E18\u0E35-verify-a-keypair",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35 check if a public key has an associated private key",slug:"\u0E27\u0E34\u0E18\u0E35-check-if-a-public-key-has-an-associated-private-key",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35 generate a mnemonic phrase",slug:"\u0E27\u0E34\u0E18\u0E35-generate-a-mnemonic-phrase",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E01\u0E39\u0E49 Keypair \u0E08\u0E32\u0E01 mnemonic phrase",slug:"\u0E27\u0E34\u0E18\u0E35\u0E01\u0E39\u0E49-keypair-\u0E08\u0E32\u0E01-mnemonic-phrase",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35 generate a vanity address",slug:"\u0E27\u0E34\u0E18\u0E35-generate-a-vanity-address",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35 sign \u0E41\u0E25\u0E30 verify messages with wallets",slug:"\u0E27\u0E34\u0E18\u0E35-sign-\u0E41\u0E25\u0E30-verify-messages-with-wallets",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E40\u0E0A\u0E37\u0E48\u0E2D\u0E21\u0E15\u0E48\u0E2D\u0E01\u0E31\u0E1A wallet",slug:"\u0E27\u0E34\u0E18\u0E35\u0E40\u0E0A\u0E37\u0E48\u0E2D\u0E21\u0E15\u0E48\u0E2D\u0E01\u0E31\u0E1A-wallet",children:[{level:3,title:"React",slug:"react",children:[]},{level:3,title:"Vue",slug:"vue",children:[]},{level:3,title:"Svelte",slug:"svelte",children:[]}]}],path:"/th/references/keypairs-and-wallets.html",pathLocale:"/th/",extraFields:[]},{title:"Local Development",headers:[{level:2,title:"\u0E40\u0E23\u0E34\u0E48\u0E21\u0E43\u0E0A\u0E49 Local Validator",slug:"\u0E40\u0E23\u0E34\u0E48\u0E21\u0E43\u0E0A\u0E49-local-validator",children:[]},{level:2,title:"Connecting to Environments",slug:"connecting-to-environments",children:[]},{level:2,title:"Subscribing to Events",slug:"subscribing-to-events",children:[]},{level:2,title:"Getting Test SOL",slug:"getting-test-sol",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E43\u0E0A\u0E49 Mainnet Accounts \u0E41\u0E25\u0E30 Programs",slug:"\u0E27\u0E34\u0E18\u0E35\u0E43\u0E0A\u0E49-mainnet-accounts-\u0E41\u0E25\u0E30-programs",children:[{level:3,title:"\u0E27\u0E34\u0E18\u0E35 load accounts \u0E08\u0E32\u0E01 mainnet",slug:"\u0E27\u0E34\u0E18\u0E35-load-accounts-\u0E08\u0E32\u0E01-mainnet",children:[]},{level:3,title:"\u0E27\u0E34\u0E18\u0E35 load programs from mainnet",slug:"\u0E27\u0E34\u0E18\u0E35-load-programs-from-mainnet",children:[]}]}],path:"/th/references/local-development.html",pathLocale:"/th/",extraFields:[]},{title:"Name Service",headers:[{level:2,title:"Name registry",slug:"name-registry",children:[]},{level:2,title:"Resolving SOL domains",slug:"resolving-sol-domains",children:[]},{level:2,title:"Reverse look up",slug:"reverse-look-up",children:[]},{level:2,title:"Subdomain look up",slug:"subdomain-look-up",children:[]},{level:2,title:"\u0E2B\u0E32\u0E17\u0E38\u0E01 domain names \u0E17\u0E35\u0E48 public key \u0E19\u0E35\u0E49\u0E40\u0E1B\u0E47\u0E19\u0E40\u0E08\u0E49\u0E32\u0E02\u0E2D\u0E07",slug:"\u0E2B\u0E32\u0E17\u0E38\u0E01-domain-names-\u0E17\u0E35\u0E48-public-key-\u0E19\u0E35\u0E49\u0E40\u0E1B\u0E47\u0E19\u0E40\u0E08\u0E49\u0E32\u0E02\u0E2D\u0E07",children:[]},{level:2,title:"Resolve a Twitter handle",slug:"resolve-a-twitter-handle",children:[]},{level:2,title:"Reverse look up of a Twitter handle",slug:"reverse-look-up-of-a-twitter-handle",children:[]}],path:"/th/references/name-service.html",pathLocale:"/th/",extraFields:[]},{title:"NFTs",headers:[{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07 an NFT",slug:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07-an-nft",children:[{level:3,title:"Upload to Arweave",slug:"upload-to-arweave",children:[]},{level:3,title:"Mint the NFT",slug:"mint-the-nft",children:[]}]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25 NFT Metadata",slug:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25-nft-metadata",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E40\u0E08\u0E49\u0E32\u0E02\u0E2D\u0E07 (owner) \u0E02\u0E2D\u0E07 NFT",slug:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E40\u0E08\u0E49\u0E32\u0E02\u0E2D\u0E07-owner-\u0E02\u0E2D\u0E07-nft",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25 NFT Mint Addresses",slug:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25-nft-mint-addresses",children:[{level:3,title:"Candy Machine V1",slug:"candy-machine-v1",children:[]},{level:3,title:"Candy Machine V2",slug:"candy-machine-v2",children:[]}]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E17\u0E38\u0E01 NFTs \u0E08\u0E32\u0E01 wallet?",slug:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E17\u0E38\u0E01-nfts-\u0E08\u0E32\u0E01-wallet",children:[]}],path:"/th/references/nfts.html",pathLocale:"/th/",extraFields:[]},{title:"Sending Offline Transactions",headers:[{level:2,title:"Sign Transaction",slug:"sign-transaction",children:[]},{level:2,title:"Partial Sign Transaction",slug:"partial-sign-transaction",children:[]},{level:2,title:"Durable Nonce",slug:"durable-nonce",children:[{level:3,title:"Create Nonce Account",slug:"create-nonce-account",children:[]},{level:3,title:"Get Nonce Account",slug:"get-nonce-account",children:[]},{level:3,title:"Use Nonce Account",slug:"use-nonce-account",children:[]}]}],path:"/th/references/offline-transactions.html",pathLocale:"/th/",extraFields:[]},{title:"\u0E40\u0E02\u0E35\u0E22\u0E19 Programs",headers:[{level:2,title:"\u0E27\u0E34\u0E18\u0E35 transfer SOL in a program",slug:"\u0E27\u0E34\u0E18\u0E35-transfer-sol-in-a-program",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E43\u0E0A\u0E49\u0E19\u0E32\u0E2C\u0E34\u0E01\u0E32 (clock) \u0E43\u0E19 program",slug:"\u0E27\u0E34\u0E18\u0E35\u0E43\u0E0A\u0E49\u0E19\u0E32\u0E2C\u0E34\u0E01\u0E32-clock-\u0E43\u0E19-program",children:[{level:3,title:"\u0E2A\u0E48\u0E07 Clock \u0E43\u0E19\u0E41\u0E1A\u0E1A account \u0E20\u0E32\u0E22\u0E43\u0E19 instruction",slug:"\u0E2A\u0E48\u0E07-clock-\u0E43\u0E19\u0E41\u0E1A\u0E1A-account-\u0E20\u0E32\u0E22\u0E43\u0E19-instruction",children:[]},{level:3,title:"\u0E43\u0E0A\u0E49 Clock \u0E42\u0E14\u0E22\u0E15\u0E23\u0E07\u0E43\u0E19 instruction",slug:"\u0E43\u0E0A\u0E49-clock-\u0E42\u0E14\u0E22\u0E15\u0E23\u0E07\u0E43\u0E19-instruction",children:[]}]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E40\u0E1B\u0E25\u0E35\u0E48\u0E22\u0E19 account size",slug:"\u0E27\u0E34\u0E18\u0E35\u0E40\u0E1B\u0E25\u0E35\u0E48\u0E22\u0E19-account-size",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E17\u0E33 Cross Program Invocation",slug:"\u0E27\u0E34\u0E18\u0E35\u0E17\u0E4D\u0E32-cross-program-invocation",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07 PDA",slug:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07-pda",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E2D\u0E48\u0E32\u0E19 accounts",slug:"\u0E27\u0E34\u0E18\u0E35\u0E2D\u0E48\u0E32\u0E19-accounts",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E15\u0E23\u0E27\u0E08\u0E2A\u0E2D\u0E1A accounts",slug:"\u0E27\u0E34\u0E18\u0E35\u0E15\u0E23\u0E27\u0E08\u0E2A\u0E2D\u0E1A-accounts",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E2D\u0E48\u0E32\u0E19 instructions \u0E2B\u0E25\u0E32\u0E22\u0E46 \u0E15\u0E31\u0E27\u0E08\u0E32\u0E01 transaction",slug:"\u0E27\u0E34\u0E18\u0E35\u0E2D\u0E48\u0E32\u0E19-instructions-\u0E2B\u0E25\u0E32\u0E22\u0E46-\u0E15\u0E31\u0E27\u0E08\u0E32\u0E01-transaction",children:[]}],path:"/th/references/programs.html",pathLocale:"/th/",extraFields:[]},{title:"Staking",headers:[{level:2,title:"\u0E2B\u0E32\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25 Validators \u0E43\u0E19\u0E1B\u0E31\u0E08\u0E08\u0E38\u0E1A\u0E31\u0E19",slug:"\u0E2B\u0E32\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25-validators-\u0E43\u0E19\u0E1B\u0E31\u0E08\u0E08\u0E38\u0E1A\u0E31\u0E19",children:[]},{level:2,title:"\u0E2A\u0E23\u0E49\u0E32\u0E07 Stake Account",slug:"\u0E2A\u0E23\u0E49\u0E32\u0E07-stake-account",children:[]},{level:2,title:"Delegate Stake",slug:"delegate-stake",children:[]},{level:2,title:"\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25 Delegator \u0E14\u0E49\u0E27\u0E22 Validators",slug:"\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25-delegator-\u0E14\u0E49\u0E27\u0E22-validators",children:[]},{level:2,title:"\u0E22\u0E01\u0E40\u0E25\u0E34\u0E01 Stake",slug:"\u0E22\u0E01\u0E40\u0E25\u0E34\u0E01-stake",children:[]},{level:2,title:"\u0E16\u0E2D\u0E19 Stake",slug:"\u0E16\u0E2D\u0E19-stake",children:[]}],path:"/th/references/staking.html",pathLocale:"/th/",extraFields:[]},{title:"\u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19 Tokens",headers:[{level:2,title:"\u0E40\u0E23\u0E32\u0E15\u0E49\u0E2D\u0E07\u0E23\u0E39\u0E49\u0E2D\u0E30\u0E44\u0E23\u0E1A\u0E49\u0E32\u0E07\u0E01\u0E48\u0E2D\u0E19\u0E08\u0E30\u0E44\u0E1B\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19 SPL-Tokens?",slug:"\u0E40\u0E23\u0E32\u0E15\u0E49\u0E2D\u0E07\u0E23\u0E39\u0E49\u0E2D\u0E30\u0E44\u0E23\u0E1A\u0E49\u0E32\u0E07\u0E01\u0E48\u0E2D\u0E19\u0E08\u0E30\u0E44\u0E1B\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19-spl-tokens",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07 Token \u0E43\u0E2B\u0E21\u0E48",slug:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07-token-\u0E43\u0E2B\u0E21\u0E48",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25 token mint",slug:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25-token-mint",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07 token account",slug:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07-token-account",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25 Token Account",slug:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25-token-account",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25 balance \u0E02\u0E2D\u0E07 token account",slug:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25-balance-\u0E02\u0E2D\u0E07-token-account",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35 mint tokens",slug:"\u0E27\u0E34\u0E18\u0E35-mint-tokens",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E48\u0E07 tokens",slug:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E48\u0E07-tokens",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E17\u0E33\u0E25\u0E32\u0E22 (burn) tokens",slug:"\u0E27\u0E34\u0E18\u0E35\u0E17\u0E4D\u0E32\u0E25\u0E32\u0E22-burn-tokens",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E1B\u0E34\u0E14 token accounts",slug:"\u0E27\u0E34\u0E18\u0E35\u0E1B\u0E34\u0E14-token-accounts",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E15\u0E31\u0E49\u0E07 authority \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A token accounts \u0E2B\u0E23\u0E37\u0E2D mints",slug:"\u0E27\u0E34\u0E18\u0E35\u0E15\u0E31\u0E49\u0E07-authority-\u0E2A\u0E4D\u0E32\u0E2B\u0E23\u0E31\u0E1A-token-accounts-\u0E2B\u0E23\u0E37\u0E2D-mints",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E2D\u0E19\u0E38\u0E21\u0E31\u0E15\u0E34 (approve) token \u0E43\u0E2B\u0E49 delegate \u0E44\u0E14\u0E49",slug:"\u0E27\u0E34\u0E18\u0E35\u0E2D\u0E19\u0E38\u0E21\u0E31\u0E15\u0E34-approve-token-\u0E43\u0E2B\u0E49-delegate-\u0E44\u0E14\u0E49",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E22\u0E01\u0E40\u0E25\u0E34\u0E01 (revoke) token \u0E17\u0E35\u0E48 delegate \u0E44\u0E27\u0E49",slug:"\u0E27\u0E34\u0E18\u0E35\u0E22\u0E01\u0E40\u0E25\u0E34\u0E01-revoke-token-\u0E17\u0E35\u0E48-delegate-\u0E44\u0E27\u0E49",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E08\u0E31\u0E14\u0E01\u0E32\u0E23 wrapped SOL",slug:"\u0E27\u0E34\u0E18\u0E35\u0E08\u0E31\u0E14\u0E01\u0E32\u0E23-wrapped-sol",children:[{level:3,title:"\u0E01\u0E32\u0E23\u0E2A\u0E23\u0E49\u0E32\u0E07 Token Account",slug:"\u0E01\u0E32\u0E23\u0E2A\u0E23\u0E49\u0E32\u0E07-token-account",children:[]},{level:3,title:"\u0E40\u0E1E\u0E34\u0E48\u0E21 Balance",slug:"\u0E40\u0E1E\u0E34\u0E48\u0E21-balance",children:[]}]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E17\u0E38\u0E01\u0E46 token accounts \u0E15\u0E32\u0E21 owner",slug:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E17\u0E38\u0E01\u0E46-token-accounts-\u0E15\u0E32\u0E21-owner",children:[]}],path:"/th/references/token.html",pathLocale:"/th/",extraFields:[]},{title:"Accounts (Account\u2019lar)",headers:[{level:2,title:"Facts (\xD6zet Bilgiler)",slug:"facts-ozet-bilgiler",children:[]},{level:2,title:"Deep Dive (Derinlemesine Bak\u0131\u015F)",slug:"deep-dive-derinlemesine-bak\u0131s",children:[{level:3,title:"Account Model (Account Modeli)",slug:"account-model-account-modeli",children:[]},{level:3,title:"Rent",slug:"rent",children:[]}]},{level:2,title:"Other Resources (Di\u011Fer Kaynaklar)",slug:"other-resources-diger-kaynaklar",children:[{level:3,title:"Referans",slug:"referans",children:[]}]}],path:"/tr/core-concepts/accounts.html",pathLocale:"/tr/",extraFields:[]},{title:"Program Derived Addresses (PDAs) (Programdan T\xFCretilmi\u015F Adresler)",headers:[{level:2,title:"Facts (\xD6zet Bilgiler)",slug:"facts-ozet-bilgiler",children:[]},{level:2,title:"Deep Dive (Derinlemesine Bak\u0131\u015F)",slug:"deep-dive-derinlemesine-bak\u0131s",children:[{level:3,title:"Generating PDAs (PDA\u2019lar Olu\u015Fturma)",slug:"generating-pdas-pda-lar-olusturma",children:[]},{level:3,title:"Interacting with PDAs (PDA\u2019lar ile Etkile\u015Fim)",slug:"interacting-with-pdas-pda-lar-ile-etkilesim",children:[]}]},{level:2,title:"Other Resources (Di\u011Fer Kaynaklar)",slug:"other-resources-diger-kaynaklar",children:[]}],path:"/tr/core-concepts/pdas.html",pathLocale:"/tr/",extraFields:[]},{title:"Programs (Programlar)",headers:[{level:2,title:"Facts (\xD6zet Bilgiler)",slug:"facts-ozet-bilgiler",children:[]},{level:2,title:"Deep Dive (Derinlemesine Bak\u0131\u015F)",slug:"deep-dive-derinlemesine-bak\u0131s",children:[{level:3,title:"Native Program\u2019lar & Solana Program Library (SPL)",slug:"native-program-lar-solana-program-library-spl",children:[]},{level:3,title:"Writing Programs (Program Yazma)",slug:"writing-programs-program-yazma",children:[]},{level:3,title:"Deploying Programs (Programlar\u0131 \xC7al\u0131\u015Ft\u0131rma)",slug:"deploying-programs-programlar\u0131-cal\u0131st\u0131rma",children:[]}]},{level:2,title:"Other Resources (Di\u011Fer Kaynaklar)",slug:"other-resources-diger-kaynaklar",children:[]}],path:"/tr/core-concepts/programs.html",pathLocale:"/tr/",extraFields:[]},{title:"Transactions (\u0130\u015Flemler)",headers:[{level:2,title:"Facts (\xD6zet Bilgiler)",slug:"facts-ozet-bilgiler",children:[]},{level:2,title:"Deep Dive (Derinlemesine Bak\u0131\u015F)",slug:"deep-dive-derinlemesine-bak\u0131s",children:[{level:3,title:"Fees (\xDCcretler)",slug:"fees-ucretler",children:[]}]},{level:2,title:"Other Resources (Di\u011Fer Kaynaklar)",slug:"other-resources-diger-kaynaklar",children:[]}],path:"/tr/core-concepts/transactions.html",pathLocale:"/tr/",extraFields:[]},{title:"Installation",headers:[{level:2,title:"Install Web3.js (Web3.js Kurulumu)",slug:"install-web3-js-web3-js-kurulumu",children:[{level:3,title:"Web3.js",slug:"web3-js",children:[]},{level:3,title:"SPL-Token",slug:"spl-token",children:[]},{level:3,title:"Wallet Adapter (C\xFCzdan Adapt\xF6r\xFC)",slug:"wallet-adapter-cuzdan-adaptoru",children:[]}]},{level:2,title:"Install Rust (Rust Kurulumu)",slug:"install-rust-rust-kurulumu",children:[]},{level:2,title:"Install CLI (CLI Kurulumu)",slug:"install-cli-cli-kurulumu",children:[{level:3,title:"macOS & Linux",slug:"macos-linux",children:[]},{level:3,title:"Windows",slug:"windows",children:[]},{level:3,title:"Build From Source (Kaynaktan Derleme)",slug:"build-from-source-kaynaktan-derleme",children:[]}]}],path:"/tr/getting-started/installation.html",pathLocale:"/tr/",extraFields:[]},{title:"Account Maps (Hesap Haritalar\u0131)",headers:[{level:2,title:"Deriving PDAs",slug:"deriving-pdas",children:[]},{level:2,title:"Single Map Account",slug:"single-map-account",children:[]}],path:"/tr/guides/account-maps.html",pathLocale:"/tr/",extraFields:[]},{title:"Migrating a Programs Data Accounts (Programlar\u0131n Data Account\u2019lar\u0131n\u0131 Ta\u015F\u0131ma)",headers:[{level:2,title:"How can you migrate a program's data accounts? (Programlar\u0131n veri account\u2019lar\u0131 nas\u0131l ta\u015F\u0131n\u0131r)",slug:"how-can-you-migrate-a-program-s-data-accounts-programlar\u0131n-veri-account-lar\u0131-nas\u0131l-tas\u0131n\u0131r",children:[]},{level:2,title:"Scenario (Senaryo)",slug:"scenario-senaryo",children:[]},{level:2,title:"Upgrading the Account (Account\u2019\u0131 Y\xFCkseltme)",slug:"upgrading-the-account-account-\u0131-yukseltme",children:[{level:3,title:"1. Add account conversion logic (Hesap d\xF6n\xFC\u015Ft\xFCrme mant\u0131\u011F\u0131 ekleme)",slug:"_1-add-account-conversion-logic-hesap-donusturme-mant\u0131g\u0131-ekleme",children:[]}]},{level:2,title:"Resources",slug:"resources",children:[]}],path:"/tr/guides/data-migration.html",pathLocale:"/tr/",extraFields:[]},{title:"Debugging Solana Programs (Solana Programlar\u0131nda Hata Ay\u0131klama)",headers:[{level:2,title:"Facts (\xD6zet Bilgiler)",slug:"facts-ozet-bilgiler",children:[]},{level:2,title:"Runtime Testing and Debugging in editor (Edit\xF6rde Runtime Test ve Hata Ay\u0131klama)",slug:"runtime-testing-and-debugging-in-editor-editorde-runtime-test-ve-hata-ay\u0131klama",children:[]},{level:2,title:"Local Validator Node Testing in editor (D\xFCzenleyicide Yerel Do\u011Frulay\u0131c\u0131 Node Testi)",slug:"local-validator-node-testing-in-editor-duzenleyicide-yerel-dogrulay\u0131c\u0131-node-testi",children:[]},{level:2,title:"Local Validator Node Testing from Client Apps (Client Uygulamalar\u0131nda Yerel Validator Node Testi)",slug:"local-validator-node-testing-from-client-apps-client-uygulamalar\u0131nda-yerel-validator-node-testi",children:[]},{level:2,title:"Resources",slug:"resources",children:[]}],path:"/tr/guides/debugging-solana-programs.html",pathLocale:"/tr/",extraFields:[]},{title:"Feature Parity Testing (\xD6zellik Parite Testi)",headers:[{level:2,title:"Facts (\xD6zet Bilgiler)",slug:"facts-ozet-bilgiler",children:[]},{level:2,title:"Scenario (Senaryo)",slug:"scenario-senaryo",children:[]},{level:2,title:"Feature Status (\xD6zellik Durumu)",slug:"feature-status-ozellik-durumu",children:[]},{level:2,title:"Parity Testing (Parite Testi)",slug:"parity-testing-parite-testi",children:[]},{level:2,title:"Simple Demonstration (Basit G\xF6sterim)",slug:"simple-demonstration-basit-gosterim",children:[{level:3,title:"All features activated (T\xFCm \xF6zellikler aktifle\u015Ftirildi)",slug:"all-features-activated-tum-ozellikler-aktiflestirildi",children:[]},{level:3,title:"Selective features deactivated (Se\xE7ici \xF6zellikler devre d\u0131\u015F\u0131 b\u0131rak\u0131ld\u0131)",slug:"selective-features-deactivated-secici-ozellikler-devre-d\u0131s\u0131-b\u0131rak\u0131ld\u0131",children:[]}]},{level:2,title:"Full Parity Testing Programmatically (Programl\u0131 Olarak Tam Parite Testi)",slug:"full-parity-testing-programmatically-programl\u0131-olarak-tam-parite-testi",children:[]},{level:2,title:"Resources",slug:"resources",children:[]}],path:"/tr/guides/feature-parity-testing.html",pathLocale:"/tr/",extraFields:[]},{title:"Get Program Accounts",headers:[{level:2,title:"Facts (\xD6zet Bilgiler)",slug:"facts-ozet-bilgiler",children:[]},{level:2,title:"Deep Dive (Derinlemesine Bak\u0131\u015F)",slug:"deep-dive-derinlemesine-bak\u0131s",children:[{level:3,title:"filters",slug:"filters",children:[]},{level:3,title:"dataSlice",slug:"dataslice",children:[]}]},{level:2,title:"Other Resources",slug:"other-resources",children:[]}],path:"/tr/guides/get-program-accounts.html",pathLocale:"/tr/",extraFields:[]},{title:"Retrying Transactions (\u0130\u015Flemleri Yeniden Denemek)",headers:[{level:2,title:"The Journey of a Transaction (Bir \u0130\u015Flemin Yolculu\u011Fu)",slug:"the-journey-of-a-transaction-bir-islemin-yolculugu",children:[{level:3,title:"How Clients Submit Transactions (Client\u2019lar \u0130\u015Flemleri Nas\u0131l G\xF6nderir)",slug:"how-clients-submit-transactions-client-lar-islemleri-nas\u0131l-gonderir",children:[]},{level:3,title:"How RPC Nodes Broadcast Transactions (RPC Node\u2019lar\u0131 \u0130\u015Flemleri Nas\u0131l Yay\u0131nlar)",slug:"how-rpc-nodes-broadcast-transactions-rpc-node-lar\u0131-islemleri-nas\u0131l-yay\u0131nlar",children:[]}]},{level:2,title:"How Transactions Get Dropped (\u0130\u015Flemler Nas\u0131l D\xFC\u015Fer)",slug:"how-transactions-get-dropped-islemler-nas\u0131l-duser",children:[{level:3,title:"Before a transaction is processed (\u0130\u015Flem i\u015Flenmeden \xF6nce)",slug:"before-a-transaction-is-processed-islem-islenmeden-once",children:[]},{level:3,title:"After a transaction is processed and before it is finalized (\u0130\u015Flem i\u015Flendikten sonra ama sonu\xE7lanmadan \xF6nce)",slug:"after-a-transaction-is-processed-and-before-it-is-finalized-islem-islendikten-sonra-ama-sonuclanmadan-once",children:[]}]},{level:2,title:"Handling Dropped Transactions (D\xFC\u015Fen \u0130\u015Flemleri Y\xF6netme)",slug:"handling-dropped-transactions-dusen-islemleri-yonetme",children:[{level:3,title:"An In-Depth Look at sendTransaction (sendTransaction\u2019a Derinden Bak\u0131\u015F)",slug:"an-in-depth-look-at-sendtransaction-sendtransaction-a-derinden-bak\u0131s",children:[]}]},{level:2,title:"Customizing Rebroadcast Logic (Rebroadcast Logic \xD6zelle\u015Ftirme)",slug:"customizing-rebroadcast-logic-rebroadcast-logic-ozellestirme",children:[{level:3,title:"The Cost of Skipping Preflight (\xD6n Kontrol\xFC Atlaman\u0131n Maliyeti)",slug:"the-cost-of-skipping-preflight-on-kontrolu-atlaman\u0131n-maliyeti",children:[]},{level:3,title:"When to Re-Sign Transactions (\u0130\u015Flemler Ne Zaman Yeniden \u0130mzalanmal\u0131)",slug:"when-to-re-sign-transactions-islemler-ne-zaman-yeniden-imzalanmal\u0131",children:[]}]},{level:2,title:"Acknowledgements (Te\u015Fekk\xFCrler)",slug:"acknowledgements-tesekkurler",children:[]}],path:"/tr/guides/retrying-transactions.html",pathLocale:"/tr/",extraFields:[]},{title:"Serializing Data (Serile\u015Ftirme)",headers:[{level:2,title:"Setting up for Borsh Serialization (Borsh Serialization i\xE7in Kurulum)",slug:"setting-up-for-borsh-serialization-borsh-serialization-icin-kurulum",children:[]},{level:2,title:"How to serialize instruction data on the client (Client\u2019taki y\xF6nerge verisi nas\u0131l serile\u015Ftirilir)",slug:"how-to-serialize-instruction-data-on-the-client-client-taki-yonerge-verisi-nas\u0131l-serilestirilir",children:[]},{level:2,title:"How to deserialize instruction data on the program (Instruction data programlarda nas\u0131l deserialize edilir)",slug:"how-to-deserialize-instruction-data-on-the-program-instruction-data-programlarda-nas\u0131l-deserialize-edilir",children:[]},{level:2,title:"How to serialize account data on the program (Programdaki account data nas\u0131l serialize edilir)",slug:"how-to-serialize-account-data-on-the-program-programdaki-account-data-nas\u0131l-serialize-edilir",children:[{level:3,title:"Pack",slug:"pack",children:[]},{level:3,title:"Serialization/Deserialization",slug:"serialization-deserialization",children:[]},{level:3,title:"Usage (Kullan\u0131m)",slug:"usage-kullan\u0131m",children:[]}]},{level:2,title:"How to deserialize account data on the client (Client\u2019ta account data nas\u0131l deserialize edilir)",slug:"how-to-deserialize-account-data-on-the-client-client-ta-account-data-nas\u0131l-deserialize-edilir",children:[]},{level:2,title:"Common Solana TS/JS Mappings (Yayg\u0131n Solana TS/JS E\u015Flemeleri)",slug:"common-solana-ts-js-mappings-yayg\u0131n-solana-ts-js-eslemeleri",children:[]},{level:2,title:"Advanced Constructs (Geli\u015Fmi\u015F Yap\u0131lar)",slug:"advanced-constructs-gelismis-yap\u0131lar",children:[{level:3,title:"COption",slug:"coption",children:[]}]},{level:2,title:"Resources",slug:"resources",children:[]}],path:"/tr/guides/serialization.html",pathLocale:"/tr/",extraFields:[]},{title:"Accounts (Account\u2019lar)",headers:[{level:2,title:"How to create a system account (System account olu\u015Fturma)",slug:"how-to-create-a-system-account-system-account-olusturma",children:[]},{level:2,title:"How to calculate account cost (Account maliyeti hesaplama)",slug:"how-to-calculate-account-cost-account-maliyeti-hesaplama",children:[]},{level:2,title:"How to calculate account cost (Account\u2019lar seed\u2019leri olu\u015Fturma)",slug:"how-to-calculate-account-cost-account-lar-seed-leri-olusturma",children:[{level:3,title:"Generate (\xDCretme)",slug:"generate-uretme",children:[]},{level:3,title:"Create (Olu\u015Fturma)",slug:"create-olusturma",children:[]},{level:3,title:"Transfer (Transfer)",slug:"transfer-transfer",children:[]}]},{level:2,title:"How to create PDAs (PDA\u2019leri olu\u015Fturma)",slug:"how-to-create-pdas-pda-leri-olusturma",children:[{level:3,title:"Generate a PDA (PDA \xFCretme)",slug:"generate-a-pda-pda-uretme",children:[]},{level:3,title:"Create a PDA (PDA olu\u015Fturma)",slug:"create-a-pda-pda-olusturma",children:[]}]},{level:2,title:"How to sign with a PDA (PDA ile imzalama)",slug:"how-to-sign-with-a-pda-pda-ile-imzalama",children:[{level:3,title:"Program",slug:"program-1",children:[]},{level:3,title:"Client",slug:"client-1",children:[]}]},{level:2,title:"How to get program accounts (Program hesaplar\u0131n\u0131 getirme)",slug:"how-to-get-program-accounts-program-hesaplar\u0131n\u0131-getirme",children:[]},{level:2,title:"How to close accounts (Account\u2019lar\u0131 kapatma)",slug:"how-to-close-accounts-account-lar\u0131-kapatma",children:[]},{level:2,title:"How to get account balance (Account bakiyesi getirme)",slug:"how-to-get-account-balance-account-bakiyesi-getirme",children:[]}],path:"/tr/references/accounts.html",pathLocale:"/tr/",extraFields:[]},{title:"Sending Transactions(\u0130\u015Flem G\xF6nderimi)",headers:[{level:2,title:"How to send SOL (SOL nas\u0131l g\xF6nderilir)",slug:"how-to-send-sol-sol-nas\u0131l-gonderilir",children:[]},{level:2,title:"How to send SPL-Tokens (SPL-Token\u2019lar nas\u0131l g\xF6nderilir)",slug:"how-to-send-spl-tokens-spl-token-lar-nas\u0131l-gonderilir",children:[]},{level:2,title:"How to calculate transaction cost (\u0130\u015Flem maliyeti nas\u0131l hesaplan\u0131r)",slug:"how-to-calculate-transaction-cost-islem-maliyeti-nas\u0131l-hesaplan\u0131r",children:[{level:3,title:"getEstimatedFee",slug:"getestimatedfee",children:[]},{level:3,title:"getFeeForMessage",slug:"getfeeformessage",children:[]}]},{level:2,title:"How to add a memo to a transaction (Bir i\u015Fleme mesaj nas\u0131l eklenir)",slug:"how-to-add-a-memo-to-a-transaction-bir-isleme-mesaj-nas\u0131l-eklenir",children:[]},{level:2,title:"How to change compute budget, fee, & priority for a transaction (Bir i\u015Flem i\xE7in i\u015Flem b\xFCt\xE7esi, bedeli ve \xF6nceli\u011Fi nas\u0131l de\u011Fi\u015Ftirilir)",slug:"how-to-change-compute-budget-fee-priority-for-a-transaction-bir-islem-icin-islem-butcesi-bedeli-ve-onceligi-nas\u0131l-degistirilir",children:[]}],path:"/tr/references/basic-transactions.html",pathLocale:"/tr/",extraFields:[]},{title:"Keypairs and Wallets",headers:[{level:2,title:"How to generate a new Keypair (Yeni Keypair nas\u0131l olu\u015Fturulur)",slug:"how-to-generate-a-new-keypair-yeni-keypair-nas\u0131l-olusturulur",children:[]},{level:2,title:"How to verify a Keypair (Keypair nas\u0131l do\u011Frulan\u0131r)",slug:"how-to-verify-a-keypair-keypair-nas\u0131l-dogrulan\u0131r",children:[]},{level:2,title:"How to check if a public key has an associated private key (Bir public key\u2019in ili\u015Fkili private key\u2019e sahip olup olmad\u0131\u011F\u0131 nas\u0131l kontrol edilir)",slug:"how-to-check-if-a-public-key-has-an-associated-private-key-bir-public-key-in-iliskili-private-key-e-sahip-olup-olmad\u0131g\u0131-nas\u0131l-kontrol-edilir",children:[]},{level:2,title:"How to generate a mnemonic phrase (Hat\u0131rlat\u0131c\u0131 bir ifade nas\u0131l olu\u015Fturulur)",slug:"how-to-generate-a-mnemonic-phrase-hat\u0131rlat\u0131c\u0131-bir-ifade-nas\u0131l-olusturulur",children:[]},{level:2,title:"How to restore a Keypair from a mnemonic phrase (An\u0131msat\u0131c\u0131 bir c\xFCmleden Keypair nas\u0131l y\xFCklenir)",slug:"how-to-restore-a-keypair-from-a-mnemonic-phrase-an\u0131msat\u0131c\u0131-bir-cumleden-keypair-nas\u0131l-yuklenir",children:[]},{level:2,title:"How to generate a vanity address (\xD6zel bir adres nas\u0131l olu\u015Fturulur)",slug:"how-to-generate-a-vanity-address-ozel-bir-adres-nas\u0131l-olusturulur",children:[]},{level:2,title:"How to sign and verify messages with wallets (C\xFCzdanlarla mesajlar nas\u0131l imzalan\u0131r ve do\u011Frulan\u0131r)",slug:"how-to-sign-and-verify-messages-with-wallets-cuzdanlarla-mesajlar-nas\u0131l-imzalan\u0131r-ve-dogrulan\u0131r",children:[]},{level:2,title:"How to connect to a wallet (C\xFCzdana nas\u0131l ba\u011Flan\u0131l\u0131r)",slug:"how-to-connect-to-a-wallet-cuzdana-nas\u0131l-baglan\u0131l\u0131r",children:[{level:3,title:"React",slug:"react",children:[]},{level:3,title:"Vue",slug:"vue",children:[]},{level:3,title:"Svelte",slug:"svelte",children:[]}]}],path:"/tr/references/keypairs-and-wallets.html",pathLocale:"/tr/",extraFields:[]},{title:"Local Development (Yerel Geli\u015Ftirme)",headers:[{level:2,title:"Starting a local validator (Yerel validator ba\u015Flatma)",slug:"starting-a-local-validator-yerel-validator-baslatma",children:[]},{level:2,title:"Connecting to Environments (Ortamlara Ba\u011Flanma)",slug:"connecting-to-environments-ortamlara-baglanma",children:[]},{level:2,title:"Subscribing to Events (Event\u2019lere Abone Olma)",slug:"subscribing-to-events-event-lere-abone-olma",children:[]},{level:2,title:"Getting Test SOL (Test SOL Edinme)",slug:"getting-test-sol-test-sol-edinme",children:[]},{level:2,title:"Using Mainnet Accounts and Programs (Mainnet Account ve Programlar\u0131n\u0131 Kullanma)",slug:"using-mainnet-accounts-and-programs-mainnet-account-ve-programlar\u0131n\u0131-kullanma",children:[{level:3,title:"How to load accounts from mainnet (Account\u2019lar mainnet\u2019ten nas\u0131l y\xFCklenir)",slug:"how-to-load-accounts-from-mainnet-account-lar-mainnet-ten-nas\u0131l-yuklenir",children:[]},{level:3,title:"How to load programs from mainnet (Programlar mainnet\u2019ten nas\u0131l y\xFCklenir)",slug:"how-to-load-programs-from-mainnet-programlar-mainnet-ten-nas\u0131l-yuklenir",children:[]}]}],path:"/tr/references/local-development.html",pathLocale:"/tr/",extraFields:[]},{title:"Name Service (Name Servisi)",headers:[{level:2,title:"Name registry (Name kayd\u0131)",slug:"name-registry-name-kayd\u0131",children:[]},{level:2,title:"Resolving SOL domains (SOL alan adlar\u0131n\u0131 \xE7\xF6zme)",slug:"resolving-sol-domains-sol-alan-adlar\u0131n\u0131-cozme",children:[]},{level:2,title:"Reverse lookup (Geriye do\u011Fru arama)",slug:"reverse-lookup-geriye-dogru-arama",children:[]},{level:2,title:"Subdomain lookup (Subdomain arama)",slug:"subdomain-lookup-subdomain-arama",children:[]},{level:2,title:"Find all the domain names owned by a public key (Bir public key\u2019in sahip oldu\u011Fu t\xFCm isimleri bulma)",slug:"find-all-the-domain-names-owned-by-a-public-key-bir-public-key-in-sahip-oldugu-tum-isimleri-bulma",children:[]},{level:2,title:"Resolve a Twitter handle (Twitter handle\u2019\u0131n\u0131 \xE7\xF6zme)",slug:"resolve-a-twitter-handle-twitter-handle-\u0131n\u0131-cozme",children:[]},{level:2,title:"Reverse lookup of a Twitter handle (Twitter handle\u2019\u0131n\u0131 geri aratma)",slug:"reverse-lookup-of-a-twitter-handle-twitter-handle-\u0131n\u0131-geri-aratma",children:[]}],path:"/tr/references/name-service.html",pathLocale:"/tr/",extraFields:[]},{title:"Non Fungible Tokens (NFTs)",headers:[{level:2,title:"How to create an NFT (NFT olu\u015Fturma)",slug:"how-to-create-an-nft-nft-olusturma",children:[{level:3,title:"Upload to Arweave (Arwave\u2019e y\xFCkleme)",slug:"upload-to-arweave-arwave-e-yukleme",children:[]},{level:3,title:"Mint the NFT (NFT Mint)",slug:"mint-the-nft-nft-mint",children:[]}]},{level:2,title:"How to get NFT Metadata (NFT Metadata\u2019y\u0131 getirme)",slug:"how-to-get-nft-metadata-nft-metadata-y\u0131-getirme",children:[]},{level:2,title:"How to get the owner of an NFT (Bir NFT\u2019nin sahibini getirme)",slug:"how-to-get-the-owner-of-an-nft-bir-nft-nin-sahibini-getirme",children:[]},{level:2,title:"How to get NFT Mint Addresses (NFT Mint Adres\u2019lerini getirme)",slug:"how-to-get-nft-mint-addresses-nft-mint-adres-lerini-getirme",children:[{level:3,title:"Candy Machine V1",slug:"candy-machine-v1",children:[]},{level:3,title:"Candy Machine V2",slug:"candy-machine-v2",children:[]}]},{level:2,title:"How to get all NFTs from a wallet? (Bir c\xFCzdandan t\xFCm NFT\u2019leri alma)",slug:"how-to-get-all-nfts-from-a-wallet-bir-cuzdandan-tum-nft-leri-alma",children:[]}],path:"/tr/references/nfts.html",pathLocale:"/tr/",extraFields:[]},{title:"Offline Transaction (\xC7evrimd\u0131\u015F\u0131 i\u015Flem)",headers:[{level:2,title:"Sign Transaction (\u0130\u015Flem \u0130mzalama)",slug:"sign-transaction-islem-imzalama",children:[]},{level:2,title:"Partial Sign Transaction (K\u0131smi \u0130mzalama)",slug:"partial-sign-transaction-k\u0131smi-imzalama",children:[]},{level:2,title:"Durable Nonce(Uzun S\xFCreli Nonce)",slug:"durable-nonce-uzun-sureli-nonce",children:[{level:3,title:"Create Nonce Account (Nonce Account Olu\u015Fturma)",slug:"create-nonce-account-nonce-account-olusturma",children:[]},{level:3,title:"Get Nonce Account (Nonce Account Getirme)",slug:"get-nonce-account-nonce-account-getirme",children:[]},{level:3,title:"Use Nonce Account (Nonce Account Kullanma)",slug:"use-nonce-account-nonce-account-kullanma",children:[]}]}],path:"/tr/references/offline-transactions.html",pathLocale:"/tr/",extraFields:[]},{title:"Writing Programs (Programlar\u0131 Yazma)",headers:[{level:2,title:"How to transfer SOL in a program (Programda SOL aktarma)",slug:"how-to-transfer-sol-in-a-program-programda-sol-aktarma",children:[]},{level:2,title:"How to get clock in a program (Programlarda saat)",slug:"how-to-get-clock-in-a-program-programlarda-saat",children:[{level:3,title:"Passing Clock as an account inside an instruction (Saati bir intstruction i\xE7inde bir hesap olarak ge\xE7irme)",slug:"passing-clock-as-an-account-inside-an-instruction-saati-bir-intstruction-icinde-bir-hesap-olarak-gecirme",children:[]},{level:3,title:"Accessing Clock directly inside an instruction (Saate do\u011Frudan bir instruction i\xE7inden eri\u015Fme)",slug:"accessing-clock-directly-inside-an-instruction-saate-dogrudan-bir-instruction-icinden-erisme",children:[]}]},{level:2,title:"How to change account size (Account boyutu de\u011Fi\u015Ftirme)",slug:"how-to-change-account-size-account-boyutu-degistirme",children:[]},{level:2,title:"How to do Cross Program Invocation (\xC7apraz Program \xC7a\u011F\u0131rma)",slug:"how-to-do-cross-program-invocation-capraz-program-cag\u0131rma",children:[]},{level:2,title:"How to create a PDA (PDA olu\u015Fturma)",slug:"how-to-create-a-pda-pda-olusturma",children:[]},{level:2,title:"How to read accounts (Account\u2019lar\u0131 okuma)",slug:"how-to-read-accounts-account-lar\u0131-okuma",children:[]},{level:2,title:"How to verify accounts (Account\u2019lar\u0131 do\u011Frulama)",slug:"how-to-verify-accounts-account-lar\u0131-dogrulama",children:[]},{level:2,title:"How to read multiple instructions from a transaction (\u0130\u015Flemdeki \xE7oklu talimatlar\u0131 okuma)",slug:"how-to-read-multiple-instructions-from-a-transaction-islemdeki-coklu-talimatlar\u0131-okuma",children:[]}],path:"/tr/references/programs.html",pathLocale:"/tr/",extraFields:[]},{title:"Staking (Stake Etme)",headers:[{level:2,title:"Get Current Validators (Ge\xE7erli Validator\u2019lar\u0131 Getirme)",slug:"get-current-validators-gecerli-validator-lar\u0131-getirme",children:[]},{level:2,title:"Create Stake Account (Stake hesab\u0131 olu\u015Fturma)",slug:"create-stake-account-stake-hesab\u0131-olusturma",children:[]},{level:2,title:"Delegate Stake (Delegate Stake)",slug:"delegate-stake-delegate-stake",children:[]},{level:2,title:"Get Delegator by Validators (Validator account\u2019a stake eden account\u2019lar\u0131 getirme)",slug:"get-delegator-by-validators-validator-account-a-stake-eden-account-lar\u0131-getirme",children:[]},{level:2,title:"Deactivate Stake (Stake\u2019i Devre D\u0131\u015F\u0131 B\u0131rakma)",slug:"deactivate-stake-stake-i-devre-d\u0131s\u0131-b\u0131rakma",children:[]},{level:2,title:"Withdraw Stake (Stake\u2019i \xC7ekme)",slug:"withdraw-stake-stake-i-cekme",children:[]}],path:"/tr/references/staking.html",pathLocale:"/tr/",extraFields:[]},{title:"Interacting with Tokens (Token\u2019lar ile Etkile\u015Fim)",headers:[{level:2,title:"What do I need to get started with SPL-Tokens? (SPL Token\u2019lar\u0131 kullanmaya ba\u015Flamak i\xE7in neye ihtiyac\u0131m\u0131z var?)",slug:"what-do-i-need-to-get-started-with-spl-tokens-spl-token-lar\u0131-kullanmaya-baslamak-icin-neye-ihtiyac\u0131m\u0131z-var",children:[]},{level:2,title:"How to create a new Token (Yeni bir Token olu\u015Fturma)",slug:"how-to-create-a-new-token-yeni-bir-token-olusturma",children:[]},{level:2,title:"How to get a token mint (Token Mint etme)",slug:"how-to-get-a-token-mint-token-mint-etme",children:[]},{level:2,title:"How to create a token account (Token account olu\u015Fturma)",slug:"how-to-create-a-token-account-token-account-olusturma",children:[]},{level:2,title:"How to get a Token Account (Token account\u2019u getirme)",slug:"how-to-get-a-token-account-token-account-u-getirme",children:[]},{level:2,title:"How to get a token account's balance (Token account bakiyesi getirme)",slug:"how-to-get-a-token-account-s-balance-token-account-bakiyesi-getirme",children:[]},{level:2,title:"How to mint tokens (Token mint\u2019leme)",slug:"how-to-mint-tokens-token-mint-leme",children:[]},{level:2,title:"How to transfer tokens (Token transfer etme)",slug:"how-to-transfer-tokens-token-transfer-etme",children:[]},{level:2,title:"How to burn tokens (Token yakma(burn))",slug:"how-to-burn-tokens-token-yakma-burn",children:[]},{level:2,title:"How to close token accounts (Token account\u2019lar\u0131n\u0131 kapatma)",slug:"how-to-close-token-accounts-token-account-lar\u0131n\u0131-kapatma",children:[]},{level:2,title:"How to set authority on token accounts or mints (Token hesaplar\u0131nda ve mint\u2019lerinde yetki belirleme)",slug:"how-to-set-authority-on-token-accounts-or-mints-token-hesaplar\u0131nda-ve-mint-lerinde-yetki-belirleme",children:[]},{level:2,title:"How to approve a token delegate (Token delegate onaylama)",slug:"how-to-approve-a-token-delegate-token-delegate-onaylama",children:[]},{level:2,title:"How to revoke a token delegate (Token delegate iptal etme)",slug:"how-to-revoke-a-token-delegate-token-delegate-iptal-etme",children:[]},{level:2,title:"How to manage wrapped SOL (Wrapped SOL y\xF6netimi)",slug:"how-to-manage-wrapped-sol-wrapped-sol-yonetimi",children:[{level:3,title:"Create Token Account (Token Account Olu\u015Fturma)",slug:"create-token-account-token-account-olusturma",children:[]},{level:3,title:"Add Balance (Bakiye Ekleme)",slug:"add-balance-bakiye-ekleme",children:[]}]},{level:2,title:"How to get all token accounts by owner (T\xFCm token account\u2019lar\u0131 sahibi taraf\u0131ndan nas\u0131l al\u0131n\u0131r?)",slug:"how-to-get-all-token-accounts-by-owner-tum-token-account-lar\u0131-sahibi-taraf\u0131ndan-nas\u0131l-al\u0131n\u0131r",children:[]}],path:"/tr/references/token.html",pathLocale:"/tr/",extraFields:[]},{title:"Accounts",headers:[{level:2,title:"C\xF3 th\u1EC3 b\u1EA1n ch\u01B0a bi\u1EBFt",slug:"co-the-ban-chua-biet",children:[]},{level:2,title:"Chi ti\u1EBFt",slug:"chi-tiet",children:[{level:3,title:"C\u1EA5u tr\xFAc Account",slug:"cau-truc-account",children:[]},{level:3,title:"Thu\xEA",slug:"thue",children:[]}]},{level:2,title:"C\xE1c ngu\u1ED3n t\xE0i li\u1EC7u kh\xE1c",slug:"cac-nguon-tai-lieu-khac",children:[{level:3,title:"L\u1EDDi c\u1EA3m \u01A1n",slug:"loi-cam-on",children:[]}]}],path:"/vi/core-concepts/accounts.html",pathLocale:"/vi/",extraFields:[]},{title:"Program Derived Addresses (PDAs)",headers:[{level:2,title:"C\xF3 th\u1EC3 b\u1EA1n ch\u01B0a bi\u1EBFt",slug:"co-the-ban-chua-biet",children:[{level:3,title:"C\xE1ch sinh PDA",slug:"cach-sinh-pda",children:[]},{level:3,title:"T\u01B0\u01A1ng t\xE1c v\u1EDBi PDAs",slug:"tuong-tac-voi-pdas",children:[]}]},{level:2,title:"C\xE1c ngu\u1ED3n t\xE0i li\u1EC7u kh\xE1c",slug:"cac-nguon-tai-lieu-khac",children:[]}],path:"/vi/core-concepts/pdas.html",pathLocale:"/vi/",extraFields:[]},{title:"Programs",headers:[{level:2,title:"C\xF3 th\u1EC3 b\u1EA1n ch\u01B0a bi\u1EBFt",slug:"co-the-ban-chua-biet",children:[]},{level:2,title:"Chi ti\u1EBFt",slug:"chi-tiet",children:[{level:3,title:"Native Programs & Solana Program Library (SPL) Programs",slug:"native-programs-solana-program-library-spl-programs",children:[]},{level:3,title:"Vi\u1EBFt m\u1ED9t Program",slug:"viet-mot-program",children:[]},{level:3,title:"Tri\u1EC3n khai Program",slug:"trien-khai-program",children:[]}]},{level:2,title:"C\xE1c ngu\u1ED3n t\xE0i li\u1EC7u kh\xE1c",slug:"cac-nguon-tai-lieu-khac",children:[]}],path:"/vi/core-concepts/programs.html",pathLocale:"/vi/",extraFields:[]},{title:"Transactions",headers:[{level:2,title:"C\xF3 th\u1EC3 b\u1EA1n ch\u01B0a bi\u1EBFt",slug:"co-the-ban-chua-biet",children:[]},{level:2,title:"Chi ti\u1EBFt",slug:"chi-tiet",children:[{level:3,title:"Ph\xED",slug:"phi",children:[]}]},{level:2,title:"C\xE1c ngu\u1ED3n t\xE0i li\u1EC7u kh\xE1c",slug:"cac-nguon-tai-lieu-khac",children:[]}],path:"/vi/core-concepts/transactions.html",pathLocale:"/vi/",extraFields:[]},{title:"C\xE0i \u0111\u1EB7t",headers:[{level:2,title:"C\xE0i \u0111\u1EB7t Web3.js",slug:"cai-\u0111at-web3-js",children:[{level:3,title:"Web3.js",slug:"web3-js",children:[]},{level:3,title:"SPL-Token",slug:"spl-token",children:[]},{level:3,title:"Wallet-Adapter",slug:"wallet-adapter",children:[]}]},{level:2,title:"C\xE0i \u0111\u1EB7t Rust",slug:"cai-\u0111at-rust",children:[]},{level:2,title:"C\xE0i \u0111\u1EB7t CLI",slug:"cai-\u0111at-cli",children:[{level:3,title:"macOS & Linux",slug:"macos-linux",children:[]},{level:3,title:"Windows",slug:"windows",children:[]},{level:3,title:"Bi\xEAn d\u1ECBch t\u1EEB m\xE3 ngu\u1ED3n",slug:"bien-dich-tu-ma-nguon",children:[]}]}],path:"/vi/getting-started/installation.html",pathLocale:"/vi/",extraFields:[]},{title:"Account Maps",headers:[{level:2,title:"T\xECm PDA",slug:"tim-pda",children:[]},{level:2,title:"Map b\u1EB1ng Account \u0111\u01A1n",slug:"map-bang-account-\u0111on",children:[]}],path:"/vi/guides/account-maps.html",pathLocale:"/vi/",extraFields:[]},{title:"N\xE2ng c\u1EA5p d\u1EEF li\u1EC7u cho Program Account",headers:[{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 c\xF3 th\u1EC3 n\xE2ng c\u1EA5p d\u1EEF li\u1EC7u trong Program Account?",slug:"lam-the-nao-\u0111e-co-the-nang-cap-du-lieu-trong-program-account",children:[]},{level:2,title:"Ng\u1EEF c\u1EA3nh",slug:"ngu-canh",children:[]},{level:2,title:"N\xE2ng c\u1EA5p Account",slug:"nang-cap-account",children:[{level:3,title:"1. Th\xEAm lu\u1EADn l\xFD \u0111\u1EC3 chuy\u1EC3n \u0111\u1ED5i Account",slug:"_1-them-luan-ly-\u0111e-chuyen-\u0111oi-account",children:[]}]},{level:2,title:"C\xE1c ngu\u1ED3n t\xE0i li\u1EC7u kh\xE1c",slug:"cac-nguon-tai-lieu-khac",children:[]}],path:"/vi/guides/data-migration.html",pathLocale:"/vi/",extraFields:[]},{title:"So\xE1t l\u1ED7i ch\u01B0\u01A1ng tr\xECnh tr\xEAn Solana",headers:[{level:2,title:"C\xF3 th\u1EC3 b\u1EA1n ch\u01B0a bi\u1EBFt",slug:"co-the-ban-chua-biet",children:[]},{level:2,title:"M\xF4i tr\u01B0\u1EDDng ki\u1EC3m th\u1EED v\xE0 so\xE1t l\u1ED7i trong tr\xECnh bi\xEAn t\u1EADp",slug:"moi-truong-kiem-thu-va-soat-loi-trong-trinh-bien-tap",children:[]},{level:2,title:"Ki\u1EC3m th\u1EED b\u1EB1ng n\u1ED1t Local Validator trong tr\xECnh bi\xEAn t\u1EADp",slug:"kiem-thu-bang-not-local-validator-trong-trinh-bien-tap",children:[]},{level:2,title:"Ki\u1EC3m th\u1EED b\u1EB1ng n\u1ED1t Local Validator tr\xEAn \u1EE9ng d\u1EE5ng ng\u01B0\u1EDDi d\xF9ng",slug:"kiem-thu-bang-not-local-validator-tren-ung-dung-nguoi-dung",children:[]},{level:2,title:"C\xE1c ngu\u1ED3n t\xE0i li\u1EC7u kh\xE1c",slug:"cac-nguon-tai-lieu-khac",children:[]}],path:"/vi/guides/debugging-solana-programs.html",pathLocale:"/vi/",extraFields:[]},{title:"\u0110\u1EC1 xu\u1EA5t Ki\u1EC3m th\u1EED Parity",headers:[{level:2,title:"C\xF3 th\u1EC3 b\u1EA1n ch\u01B0a bi\u1EBFt",slug:"co-the-ban-chua-biet",children:[]},{level:2,title:"T\xECnh hu\u1ED1ng gi\u1EA3 \u0111\u1ECBnh",slug:"tinh-huong-gia-\u0111inh",children:[]},{level:2,title:"\u0110\u1EC1 xu\u1EA5t Tr\u1EA1ng th\xE1i",slug:"\u0111e-xuat-trang-thai",children:[]},{level:2,title:"Ki\u1EC3m th\u1EED Parity",slug:"kiem-thu-parity",children:[]},{level:2,title:"V\xED d\u1EE5 \u0111\u01A1n gi\u1EA3n",slug:"vi-du-\u0111on-gian",children:[{level:3,title:"Khi t\u1EA5t c\u1EA3 c\xE1c \u0111\u1EC1 xu\u1EA5t \u0111\u1EC1u k\xEDch ho\u1EA1t",slug:"khi-tat-ca-cac-\u0111e-xuat-\u0111eu-kich-hoat",children:[]},{level:3,title:"V\xF4 hi\u1EC7u m\u1ED9t v\xE0i \u0111\u1EC1 xu\u1EA5t",slug:"vo-hieu-mot-vai-\u0111e-xuat",children:[]}]},{level:2,title:"Ki\u1EC3m th\u1EED Parity \u0110\u1EA7y \u0111\u1EE7",slug:"kiem-thu-parity-\u0111ay-\u0111u",children:[]},{level:2,title:"C\xE0i \u0111\u1EB7t t\u1EF1 \u0111\u1ED9ng cho Ki\u1EC3m th\u1EED Parity \u0110\u1EA7y \u0111\u1EE7",slug:"cai-\u0111at-tu-\u0111ong-cho-kiem-thu-parity-\u0111ay-\u0111u",children:[]},{level:2,title:"C\xE1c ngu\u1ED3n t\xE0i li\u1EC7u kh\xE1c",slug:"cac-nguon-tai-lieu-khac",children:[]}],path:"/vi/guides/feature-parity-testing.html",pathLocale:"/vi/",extraFields:[]},{title:"\u0110\u1ECDc d\u1EEF li\u1EC7u Program Account",headers:[{level:2,title:"C\xF3 th\u1EC3 b\u1EA1n ch\u01B0a bi\u1EBFt",slug:"co-the-ban-chua-biet",children:[]},{level:2,title:"Chi ti\u1EBFt",slug:"chi-tiet",children:[{level:3,title:"filters",slug:"filters",children:[]},{level:3,title:"dataSlice",slug:"dataslice",children:[]}]},{level:2,title:"C\xE1c ngu\u1ED3n t\xE0i li\u1EC7u kh\xE1c",slug:"cac-nguon-tai-lieu-khac",children:[]}],path:"/vi/guides/get-program-accounts.html",pathLocale:"/vi/",extraFields:[]},{title:"Th\u1EED l\u1EA1i Transaction",headers:[{level:2,title:"C\xF3 th\u1EC3 b\u1EA1n ch\u01B0a bi\u1EBFt",slug:"co-the-ban-chua-biet",children:[]},{level:2,title:"H\xE0nh tr\xECnh c\u1EE7a m\u1ED9t Transaction",slug:"hanh-trinh-cua-mot-transaction",children:[{level:3,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 ng\u01B0\u1EDDi d\xF9ng g\u1EEDi Transactions",slug:"lam-the-nao-\u0111e-nguoi-dung-gui-transactions",children:[]},{level:3,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 c\xE1c n\u1ED1t RPC lan truy\u1EC1n Transaction",slug:"lam-the-nao-\u0111e-cac-not-rpc-lan-truyen-transaction",children:[]}]},{level:2,title:"Khi n\xE0o c\xE1c Transaction b\u1ECB hu\u1EF7",slug:"khi-nao-cac-transaction-bi-huy",children:[{level:3,title:"Tr\u01B0\u1EDBc khi Transaction \u0111\u01B0\u1EE3c x\u1EED l\xFD",slug:"truoc-khi-transaction-\u0111uoc-xu-ly",children:[]},{level:3,title:"Sau khi Transaction \u0111\u01B0\u1EE3c x\u1EED l\xFD v\xE0 tr\u01B0\u1EDBc khi \u0111\u01B0\u1EE3c ghi v\xE0o block",slug:"sau-khi-transaction-\u0111uoc-xu-ly-va-truoc-khi-\u0111uoc-ghi-vao-block",children:[]}]},{level:2,title:"X\u1EED tr\xED v\u1EDBi Transaction b\u1ECB hu\u1EF7",slug:"xu-tri-voi-transaction-bi-huy",children:[{level:3,title:"Nghi\xEAn c\u1EE9u sendTransaction",slug:"nghien-cuu-sendtransaction",children:[]}]},{level:2,title:"Tu\u1EF3 ch\u1EC9nh thu\u1EADt to\xE1n lan truy\u1EC1n",slug:"tuy-chinh-thuat-toan-lan-truyen",children:[{level:3,title:"C\xE2n nh\u1EAFc khi b\u1ECF qua Preflight",slug:"can-nhac-khi-bo-qua-preflight",children:[]},{level:3,title:"Khi n\xE0o n\xEAn t\xE1i k\xFD transaction",slug:"khi-nao-nen-tai-ky-transaction",children:[]}]},{level:2,title:"L\u1EDDi c\u1EA3m \u01A1n",slug:"loi-cam-on",children:[]}],path:"/vi/guides/retrying-transactions.html",pathLocale:"/vi/",extraFields:[]},{title:"Tu\u1EA7n t\u1EF1 ho\xE1 d\u1EEF li\u1EC7u",headers:[{level:2,title:"C\xE0i \u0111\u1EB7t Tu\u1EA7n t\u1EF1 ho\xE1 Borsh",slug:"cai-\u0111at-tuan-tu-hoa-borsh",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 tu\u1EA7n t\u1EF1 ho\xE1 d\u1EEF li\u1EC7u c\u1EE7a c\xE1c ch\u1EC9 th\u1ECB t\u1EEB ph\xEDa ng\u01B0\u1EDDi d\xF9ng",slug:"lam-the-nao-\u0111e-tuan-tu-hoa-du-lieu-cua-cac-chi-thi-tu-phia-nguoi-dung",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 phi tu\u1EA7n t\u1EF1 ho\xE1 d\u1EEF li\u1EC7u c\u1EE7a c\xE1c ch\u1EC9 th\u1ECB tr\xEAn Program",slug:"lam-the-nao-\u0111e-phi-tuan-tu-hoa-du-lieu-cua-cac-chi-thi-tren-program",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 tu\u1EA7n t\u1EF1 ho\xE1 d\u1EEF li\u1EC7u Account tr\xEAn Program",slug:"lam-the-nao-\u0111e-tuan-tu-hoa-du-lieu-account-tren-program",children:[{level:3,title:"Pack (\u0110\xF3ng g\xF3i)",slug:"pack-\u0111ong-goi",children:[]},{level:3,title:"Tu\u1EA7n t\u1EF1 ho\xE1 v\xE0 Phi tu\u1EA7n t\u1EF1 ho\xE1",slug:"tuan-tu-hoa-va-phi-tuan-tu-hoa",children:[]},{level:3,title:"C\xE1ch d\xF9ng",slug:"cach-dung",children:[]}]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 tu\u1EA7n ho\xE1 d\u1EEF li\u1EC7u Account \u1EDF ph\xEDa ng\u01B0\u1EDDi d\xF9ng",slug:"lam-the-nao-\u0111e-tuan-hoa-du-lieu-account-o-phia-nguoi-dung",children:[]},{level:2,title:"Mapping c\u01A1 b\u1EA3n b\u1EB1ng TS/JS cho Solana",slug:"mapping-co-ban-bang-ts-js-cho-solana",children:[]},{level:2,title:"Ki\u1EC3u d\u1EEF li\u1EC7u n\xE2ng cao",slug:"kieu-du-lieu-nang-cao",children:[{level:3,title:"COption",slug:"coption",children:[]}]},{level:2,title:"C\xE1c ngu\u1ED3n t\xE0i li\u1EC7u kh\xE1c",slug:"cac-nguon-tai-lieu-khac",children:[]}],path:"/vi/guides/serialization.html",pathLocale:"/vi/",extraFields:[]},{title:"Getting Started",headers:[{level:2,title:"Composability is Key",slug:"composability-is-key",children:[]},{level:2,title:"Contributing",slug:"contributing",children:[]}],path:"/vi/integrations/",pathLocale:"/vi/",extraFields:[]},{title:"Jupiter",headers:[{level:3,title:"Installation",slug:"installation",children:[]},{level:3,title:"Fetching Token list from Jupiter",slug:"fetching-token-list-from-jupiter",children:[]},{level:3,title:"Loading the Jupiter instance",slug:"loading-the-jupiter-instance",children:[]},{level:3,title:"Getting the RouteMap",slug:"getting-the-routemap",children:[]},{level:3,title:"Getting the routes for given Input and Output token",slug:"getting-the-routes-for-given-input-and-output-token",children:[]},{level:3,title:"Execute the Token Swap",slug:"execute-the-token-swap",children:[]},{level:2,title:"How to use Jupiter in a React Application",slug:"how-to-use-jupiter-in-a-react-application",children:[{level:3,title:"Installation",slug:"installation-1",children:[]},{level:3,title:"Adding the Provider",slug:"adding-the-provider",children:[]},{level:3,title:"Fetching the List of Tokens",slug:"fetching-the-list-of-tokens",children:[]},{level:3,title:"Setting up the State",slug:"setting-up-the-state",children:[]},{level:3,title:"Using the useJupiter react hook",slug:"using-the-usejupiter-react-hook",children:[]},{level:3,title:"Performing the Swap",slug:"performing-the-swap",children:[]}]},{level:2,title:"How to use Jupiter API",slug:"how-to-use-jupiter-api",children:[{level:3,title:"Installation",slug:"installation-2",children:[]},{level:3,title:"Getting the Route Map",slug:"getting-the-route-map",children:[]},{level:3,title:"Getting the Serialized Transaction to perform Swap",slug:"getting-the-serialized-transaction-to-perform-swap",children:[]},{level:3,title:"Executing the Swap Transaction",slug:"executing-the-swap-transaction",children:[]}]},{level:2,title:"Other Resources",slug:"other-resources",children:[]}],path:"/vi/integrations/jupiter.html",pathLocale:"/vi/",extraFields:[]},{title:"Mango Markets",headers:[{level:2,title:"How to get a Mango Group",slug:"how-to-get-a-mango-group",children:[]},{level:2,title:"How to create a Mango Account",slug:"how-to-create-a-mango-account",children:[]},{level:2,title:"How to deposit USDC into a Mango Account",slug:"how-to-deposit-usdc-into-a-mango-account",children:[]},{level:2,title:"How to place a spot order",slug:"how-to-place-a-spot-order",children:[]},{level:2,title:"How to load bids",slug:"how-to-load-bids",children:[]},{level:2,title:"How to load asks",slug:"how-to-load-asks",children:[]},{level:2,title:"Other Resources",slug:"other-resources",children:[]}],path:"/vi/integrations/mango.html",pathLocale:"/vi/",extraFields:[]},{title:"Pyth",headers:[{level:2,title:"How to use Pyth in Client",slug:"how-to-use-pyth-in-client",children:[]},{level:2,title:"How to use Pyth in Anchor",slug:"how-to-use-pyth-in-anchor",children:[]},{level:2,title:"Other Resources",slug:"other-resources",children:[]}],path:"/vi/integrations/pyth.html",pathLocale:"/vi/",extraFields:[]},{title:"React Native",headers:[{level:2,title:"How to use @solana/web3.js in a React Native app",slug:"how-to-use-solana-web3-js-in-a-react-native-app",children:[{level:3,title:"Create a new app",slug:"create-a-new-app",children:[]},{level:3,title:"Install dependencies",slug:"install-dependencies",children:[]},{level:3,title:"Update index.js",slug:"update-index-js",children:[]},{level:3,title:"Update metro.config.js",slug:"update-metro-config-js",children:[]},{level:3,title:"Update App.tsx",slug:"update-app-tsx",children:[]},{level:3,title:"Install cocoapods",slug:"install-cocoapods",children:[]},{level:3,title:"Start application",slug:"start-application",children:[]}]},{level:2,title:"Solana DApp Scaffold for React Native",slug:"solana-dapp-scaffold-for-react-native",children:[]},{level:2,title:"Common issues when using @solana/web3.js in a React Native app",slug:"common-issues-when-using-solana-web3-js-in-a-react-native-app",children:[{level:3,title:"Error: While trying to resolve module superstruct from file",slug:"error-while-trying-to-resolve-module-superstruct-from-file",children:[]},{level:3,title:"Error: URL.protocol is not implemented",slug:"error-url-protocol-is-not-implemented",children:[]},{level:3,title:"Error: crypto.getRandomValues() not supported",slug:"error-crypto-getrandomvalues-not-supported",children:[]}]}],path:"/vi/integrations/react-native.html",pathLocale:"/vi/",extraFields:[]},{title:"Serum",headers:[{level:2,title:"How to get a Serum market",slug:"how-to-get-a-serum-market",children:[]},{level:2,title:"How to get Serum order books",slug:"how-to-get-serum-order-books",children:[]},{level:2,title:"How to get current open orders",slug:"how-to-get-current-open-orders",children:[]}],path:"/vi/integrations/serum.html",pathLocale:"/vi/",extraFields:[]},{title:"Strata",headers:[{level:2,title:"How to create a fully managed token",slug:"how-to-create-a-fully-managed-token",children:[]},{level:2,title:"How to buy and sell a token",slug:"how-to-buy-and-sell-a-token",children:[]},{level:2,title:"How to bootstrap liquidity",slug:"how-to-bootstrap-liquidity",children:[]},{level:2,title:"Other Resources",slug:"other-resources",children:[]}],path:"/vi/integrations/strata.html",pathLocale:"/vi/",extraFields:[]},{title:"Switchboard",headers:[{level:2,title:"Data Feeds",slug:"data-feeds",children:[{level:3,title:"Read data from an aggregator feed",slug:"read-data-from-an-aggregator-feed",children:[]},{level:3,title:"Create a new aggregator feed",slug:"create-a-new-aggregator-feed",children:[]},{level:3,title:"Read data from an aggregator feed in program",slug:"read-data-from-an-aggregator-feed-in-program",children:[]},{level:3,title:"How to Create a Feed from the Publisher",slug:"how-to-create-a-feed-from-the-publisher",children:[]}]},{level:2,title:"Oracles",slug:"oracles",children:[{level:3,title:"Create an oracle",slug:"create-an-oracle",children:[]},{level:3,title:"Run an oracle locally",slug:"run-an-oracle-locally",children:[]},{level:3,title:"Oracle Config",slug:"oracle-config",children:[]}]},{level:2,title:"Verifiable Random Function(VRF)",slug:"verifiable-random-function-vrf",children:[{level:3,title:"Reading a VRF account",slug:"reading-a-vrf-account",children:[]},{level:3,title:"Creating a VRF account",slug:"creating-a-vrf-account",children:[]},{level:3,title:"Request Randomness from vrf account",slug:"request-randomness-from-vrf-account",children:[]}]},{level:2,title:"Resources",slug:"resources",children:[{level:3,title:"APIs and Libraries",slug:"apis-and-libraries",children:[]},{level:3,title:"Examples",slug:"examples",children:[]},{level:3,title:"More Information",slug:"more-information",children:[]}]}],path:"/vi/integrations/switchboard.html",pathLocale:"/vi/",extraFields:[]},{title:"web3Auth (Torus Wallet)",headers:[{level:2,title:"What is a wallet?",slug:"what-is-a-wallet",children:[]},{level:2,title:"Social Logins on Solana",slug:"social-logins-on-solana",children:[]},{level:2,title:"Integration Guide",slug:"integration-guide",children:[{level:3,title:"Installing Dependencies",slug:"installing-dependencies",children:[]},{level:3,title:"Import the SDK and initialize",slug:"import-the-sdk-and-initialize",children:[]},{level:3,title:"Trigger user login\u200B",slug:"trigger-user-login\u200B",children:[]},{level:3,title:"Using torus instance to fetch user account detail\u200B",slug:"using-torus-instance-to-fetch-user-account-detail\u200B",children:[]},{level:3,title:"Using Torus Solana API to sign a message.",slug:"using-torus-solana-api-to-sign-a-message",children:[]},{level:3,title:"Using torus Solana API to send a transaction.\u200B",slug:"using-torus-solana-api-to-send-a-transaction-\u200B",children:[]},{level:3,title:"Top-ups\u200B",slug:"top-ups\u200B",children:[]},{level:3,title:"Logout",slug:"logout",children:[]}]},{level:2,title:"Resources",slug:"resources",children:[]}],path:"/vi/integrations/web3auth.html",pathLocale:"/vi/",extraFields:[]},{title:"Accounts",headers:[{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 t\u1EA1o m\u1ED9t System Account",slug:"lam-the-nao-\u0111e-tao-mot-system-account",children:[]},{level:2,title:"T\xEDnh chi ph\xED cho m\u1ED9t account",slug:"tinh-chi-phi-cho-mot-account",children:[]},{level:2,title:"L\xE0m th\u1EBF \xE0o \u0111\u1EC3 t\u1EA1o account v\u1EDBi seeds",slug:"lam-the-ao-\u0111e-tao-account-voi-seeds",children:[{level:3,title:"T\xECm Account",slug:"tim-account",children:[]},{level:3,title:"T\u1EA1o Account",slug:"tao-account",children:[]},{level:3,title:"Chuy\u1EC3n lamports",slug:"chuyen-lamports",children:[]}]},{level:2,title:"C\xE1ch t\u1EA1o PDAs",slug:"cach-tao-pdas",children:[{level:3,title:"Sinh ra m\u1ED9t PDA",slug:"sinh-ra-mot-pda",children:[]},{level:3,title:"T\u1EA1o m\u1ED9t PDA",slug:"tao-mot-pda",children:[]}]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 k\xFD b\u1EB1ng PDA",slug:"lam-the-nao-\u0111e-ky-bang-pda",children:[{level:3,title:"Program",slug:"program-1",children:[]},{level:3,title:"Ng\u01B0\u1EDDi d\xF9ng",slug:"nguoi-dung-1",children:[]}]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 truy v\u1EA5n c\xE1c account c\u1EE7a m\u1ED9t program",slug:"lam-the-nao-\u0111e-truy-van-cac-account-cua-mot-program",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 \u0111\xF3ng account",slug:"lam-the-nao-\u0111e-\u0111ong-account",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 truy v\u1EA5n s\u1ED1 d\u01B0 c\u1EE7a m\u1ED9t account",slug:"lam-the-nao-\u0111e-truy-van-so-du-cua-mot-account",children:[]}],path:"/vi/references/accounts.html",pathLocale:"/vi/",extraFields:[]},{title:"G\u1EEDi Transaction",headers:[{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 g\u1EEDi SOL",slug:"lam-the-nao-\u0111e-gui-sol",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 g\u1EEDi SPL-Tokens",slug:"lam-the-nao-\u0111e-gui-spl-tokens",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 t\xEDnh chi ph\xED g\u1EEDi transaction",slug:"lam-the-nao-\u0111e-tinh-chi-phi-gui-transaction",children:[{level:3,title:"getEstimatedFee",slug:"getestimatedfee",children:[]},{level:3,title:"getFeeForMessage",slug:"getfeeformessage",children:[]}]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 th\xEAm ghi ch\xFA v\xE0 m\u1ED9t transaction",slug:"lam-the-nao-\u0111e-them-ghi-chu-va-mot-transaction",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 thay \u0111\u1ED5i ng\xE2n s\xE1ch t\xEDnh to\xE1n cho m\u1ED9t transaction",slug:"lam-the-nao-\u0111e-thay-\u0111oi-ngan-sach-tinh-toan-cho-mot-transaction",children:[]}],path:"/vi/references/basic-transactions.html",pathLocale:"/vi/",extraFields:[]},{title:"C\u1EB7p kho\xE1 v\xE0 V\xED",headers:[{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 sinh C\u1EB7p kho\xE1",slug:"lam-the-nao-\u0111e-sinh-cap-khoa",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 ph\u1EE5c h\u1ED3i m\u1ED9t C\u1EB7p kho\xE1 t\u1EEB kho\xE1 ri\xEAng t\u01B0",slug:"lam-the-nao-\u0111e-phuc-hoi-mot-cap-khoa-tu-khoa-rieng-tu",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 ki\u1EC3m tra m\u1ED9t c\u1EB7p kho\xE1",slug:"lam-the-nao-\u0111e-kiem-tra-mot-cap-khoa",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 ki\u1EC3m tra n\u1EBFu m\u1ED9t kho\xE1 c\xF4ng khai kh\xF4ng t\u1ED3n t\u1EA1i kho\xE1 ri\xEAng t\u01B0 t\u01B0\u01A1ng \u1EE8ng",slug:"lam-the-nao-\u0111e-kiem-tra-neu-mot-khoa-cong-khai-khong-ton-tai-khoa-rieng-tu-tuong-ung",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 sinh ra c\u1EE5m mnemonic",slug:"lam-the-nao-\u0111e-sinh-ra-cum-mnemonic",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 ph\u1EE5c h\u1ED3i l\u1EA1i c\u1EB7p kho\xE1 t\u1EEB c\u1EE5m mnemonic",slug:"lam-the-nao-\u0111e-phuc-hoi-lai-cap-khoa-tu-cum-mnemonic",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 sinh m\u1ED9t \u0111\u1ECBa ch\u1EC9 danh ngh\u0129a",slug:"lam-the-nao-\u0111e-sinh-mot-\u0111ia-chi-danh-nghia",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o k\xFD v\xE0 ki\u1EC3m tra tinh nh\u1EAFn b\u1EB1ng v\xED",slug:"lam-the-nao-ky-va-kiem-tra-tinh-nhan-bang-vi",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 k\u1EBFt n\u1ED1i v\xED",slug:"lam-the-nao-\u0111e-ket-noi-vi",children:[{level:3,title:"React",slug:"react",children:[]},{level:3,title:"Vue",slug:"vue",children:[]},{level:3,title:"Svelte",slug:"svelte",children:[]}]}],path:"/vi/references/keypairs-and-wallets.html",pathLocale:"/vi/",extraFields:[]},{title:"L\u1EADp tr\xECnh \u1EDF Local",headers:[{level:2,title:"Kh\u1EDFi ch\u1EA1y Local Validator",slug:"khoi-chay-local-validator",children:[]},{level:2,title:"K\u1EBFt n\u1ED1i \u0111\u1EBFn m\xF4i tr\u01B0\u1EDDng",slug:"ket-noi-\u0111en-moi-truong",children:[]},{level:2,title:"L\u1EAFng nghe c\xE1c s\u1EF1 ki\u1EC7n",slug:"lang-nghe-cac-su-kien",children:[]},{level:2,title:"Nh\u1EADn SOL \u0111\u1EC3 ki\u1EC3m th\u1EED",slug:"nhan-sol-\u0111e-kiem-thu",children:[]},{level:2,title:"S\u1EED d\u1EE5ng Accounts v\xE0 Programs tr\xEAn Mainnet",slug:"su-dung-accounts-va-programs-tren-mainnet",children:[{level:3,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 c\xE0i \u0111\u1EB7t accounts t\u1EEB mainnet",slug:"lam-the-nao-\u0111e-cai-\u0111at-accounts-tu-mainnet",children:[]},{level:3,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 c\u1EA3i \u0111\u1EB7t programs t\u1EEB mainnet",slug:"lam-the-nao-\u0111e-cai-\u0111at-programs-tu-mainnet",children:[]}]}],path:"/vi/references/local-development.html",pathLocale:"/vi/",extraFields:[]},{title:"D\u1ECBch v\u1EE5 t\xEAn mi\u1EC1n",headers:[{level:2,title:"D\u1ECBch v\u1EE5 \u0111\u0103ng k\xFD t\xEAn mi\u1EC1n",slug:"dich-vu-\u0111ang-ky-ten-mien",children:[]},{level:2,title:"Ph\xE2n gi\u1EA3i t\xEAn mi\u1EC1n SOL",slug:"phan-giai-ten-mien-sol",children:[]},{level:2,title:"Tra c\u1EE9u ng\u01B0\u1EE3c",slug:"tra-cuu-nguoc",children:[]},{level:2,title:"Tra c\u1EE9u t\xEAn mi\u1EC1n con",slug:"tra-cuu-ten-mien-con",children:[]},{level:2,title:"T\xECm t\u1EA5t c\u1EA3 t\xEAn mi\u1EC1n \u0111\u01B0\u1EE3c s\u1EDF h\u1EEFu b\u1EDFi m\u1ED9t kho\xE1 c\xF4ng khai",slug:"tim-tat-ca-ten-mien-\u0111uoc-so-huu-boi-mot-khoa-cong-khai",children:[]},{level:2,title:"Ph\xE2n gi\u1EA3i m\u1ED9t Twitter Handle",slug:"phan-giai-mot-twitter-handle",children:[]},{level:2,title:"Tra c\u1EE9u ng\u01B0\u1EE3c c\u1EE7a m\u1ED9t Twitter Handle",slug:"tra-cuu-nguoc-cua-mot-twitter-handle",children:[]}],path:"/vi/references/name-service.html",pathLocale:"/vi/",extraFields:[]},{title:"NFTs",headers:[{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 t\u1EA1o m\u1ED9t NFT",slug:"lam-the-nao-\u0111e-tao-mot-nft",children:[{level:3,title:"\u0110\u0103ng t\u1EA3i l\xEAn Arweave",slug:"\u0111ang-tai-len-arweave",children:[]},{level:3,title:"\u0110\xFAc NFT",slug:"\u0111uc-nft",children:[]}]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 truy v\u1EA5n NFT Metadata",slug:"lam-the-nao-\u0111e-truy-van-nft-metadata",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 truy v\u1EA5n ch\u1EE7 s\u1EDF h\u1EEFu c\u1EE7a m\u1ED9t NFTs",slug:"lam-the-nao-\u0111e-truy-van-chu-so-huu-cua-mot-nfts",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 truy v\u1EA5n \u0111\u1ECBa ch\u1EC9 mint c\u1EE7a NFT",slug:"lam-the-nao-\u0111e-truy-van-\u0111ia-chi-mint-cua-nft",children:[{level:3,title:"Candy Machine V1",slug:"candy-machine-v1",children:[]},{level:3,title:"Candy Machine V2",slug:"candy-machine-v2",children:[]}]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 truy v\u1EA5n t\u1EA5t c\u1EA3 NFT t\u1EEB m\u1ED9t v\xED?",slug:"lam-the-nao-\u0111e-truy-van-tat-ca-nft-tu-mot-vi",children:[]}],path:"/vi/references/nfts.html",pathLocale:"/vi/",extraFields:[]},{title:"G\u1EEDi Transactions Ngo\u1EA1i tuy\u1EBFn",headers:[{level:2,title:"K\xFD Transaction",slug:"ky-transaction",children:[]},{level:2,title:"K\xFD m\u1ED9t ph\u1EA7n Transaction",slug:"ky-mot-phan-transaction",children:[]},{level:2,title:"Nonce v\u0129nh vi\u1EC5n",slug:"nonce-vinh-vien",children:[{level:3,title:"T\u1EA1o Nonce Account",slug:"tao-nonce-account",children:[]},{level:3,title:"Truy v\u1EA5n Nonce Account",slug:"truy-van-nonce-account",children:[]},{level:3,title:"S\u1EED d\u1EE5ng Nonce Account",slug:"su-dung-nonce-account",children:[]}]}],path:"/vi/references/offline-transactions.html",pathLocale:"/vi/",extraFields:[]},{title:"X\xE2y d\u1EF1ng Programs",headers:[{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 chuy\u1EC3n SOL trong m\u1ED9t program",slug:"lam-the-nao-\u0111e-chuyen-sol-trong-mot-program",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 l\u1EA5y th\u1EDDi gian trong m\u1ED9t program",slug:"lam-the-nao-\u0111e-lay-thoi-gian-trong-mot-program",children:[{level:3,title:"Truy\u1EC1n Clock nh\u01B0 l\xE0 m\u1ED9t account trong ch\u1EC9 th\u1ECB",slug:"truyen-clock-nhu-la-mot-account-trong-chi-thi",children:[]},{level:3,title:"Truy c\u1EADp Clock tr\u1EF1c ti\u1EBFp b\xEAn trong ch\u1EC9 th\u1ECB",slug:"truy-cap-clock-truc-tiep-ben-trong-chi-thi",children:[]}]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 thay \u0111\u1ED5i k\xEDch th\u01B0\u1EDBc account",slug:"lam-the-nao-\u0111e-thay-\u0111oi-kich-thuoc-account",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 g\u1ECDi gi\u1EEFa c\xE1c program (Cross Program Invocation - CPI)",slug:"lam-the-nao-\u0111e-goi-giua-cac-program-cross-program-invocation-cpi",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 t\u1EA1o PDA",slug:"lam-the-nao-\u0111e-tao-pda",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 \u0111\u1ECDc Account",slug:"lam-the-nao-\u0111e-\u0111oc-account",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 ki\u1EC3m tra account",slug:"lam-the-nao-\u0111e-kiem-tra-account",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 \u0111\u1ECDc nhi\u1EC1u ch\u1EC9 th\u1ECB t\u1EEB m\u1ED9t Transaction",slug:"lam-the-nao-\u0111e-\u0111oc-nhieu-chi-thi-tu-mot-transaction",children:[]}],path:"/vi/references/programs.html",pathLocale:"/vi/",extraFields:[]},{title:"Staking",headers:[{level:2,title:"Truy v\u1EA5n danh s\xE1ch Validators hi\u1EC7n t\u1EA1i",slug:"truy-van-danh-sach-validators-hien-tai",children:[]},{level:2,title:"T\u1EA1o m\u1ED9t Stake Account",slug:"tao-mot-stake-account",children:[]},{level:2,title:"U\u1EF7 quy\u1EC1n Stake",slug:"uy-quyen-stake",children:[]},{level:2,title:"Truy v\u1EA5n c\xE1c nh\xE0 u\u1EF7 quy\u1EC1n b\u1EB1ng validator",slug:"truy-van-cac-nha-uy-quyen-bang-validator",children:[]},{level:2,title:"D\u1EEBng stake",slug:"dung-stake",children:[]},{level:2,title:"R\xFAt Stake",slug:"rut-stake",children:[]}],path:"/vi/references/staking.html",pathLocale:"/vi/",extraFields:[]},{title:"T\u01B0\u01A1ng t\xE1c v\u1EDBi Tokens",headers:[{level:2,title:"T\xF4i n\xEAn c\u1EA7n g\xEC \u0111\u1EC3 b\u1EAFt \u0111\u1EA7u v\u1EDBi SPL-Tokens?",slug:"toi-nen-can-gi-\u0111e-bat-\u0111au-voi-spl-tokens",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 t\u1EA1o m\u1ED9t token m\u1EDBi",slug:"lam-the-nao-\u0111e-tao-mot-token-moi",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 \u0111\u1ECDc truy v\u1EA5n token mint",slug:"lam-the-nao-\u0111e-\u0111oc-truy-van-token-mint",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 t\u1EA1o m\u1ED9t token account",slug:"lam-the-nao-\u0111e-tao-mot-token-account",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 truy v\u1EA5n token acount",slug:"lam-the-nao-\u0111e-truy-van-token-acount",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 truy v\u1EA5n s\u1ED1 d\u01B0 c\u1EE7a token account",slug:"lam-the-nao-\u0111e-truy-van-so-du-cua-token-account",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 d\xFAc token",slug:"lam-the-nao-\u0111e-duc-token",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 chuy\u1EC3n token",slug:"lam-the-nao-\u0111e-chuyen-token",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 \u0111\u1ED1t token",slug:"lam-the-nao-\u0111e-\u0111ot-token",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 \u0111\xF3ng m\u1ED9t token account",slug:"lam-the-nao-\u0111e-\u0111ong-mot-token-account",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 thi\u1EBFt l\u1EADp ch\u1EE7 s\u1EDF h\u1EEFu cho token account v\xE0 mint",slug:"lam-the-nao-\u0111e-thiet-lap-chu-so-huu-cho-token-account-va-mint",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 u\u1EF7 quy\u1EC1n cho m\u1ED9t token \u0111\u1EA1i di\u1EC7n (delegate)",slug:"lam-the-nao-\u0111e-uy-quyen-cho-mot-token-\u0111ai-dien-delegate",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 thu h\u1ED3i m\u1ED9t token \u0111\u1EA1i di\u1EC7n",slug:"lam-the-nao-\u0111e-thu-hoi-mot-token-\u0111ai-dien",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 qu\u1EA3n l\xFD wrapped SOL",slug:"lam-the-nao-\u0111e-quan-ly-wrapped-sol",children:[{level:3,title:"T\u1EA1o token account",slug:"tao-token-account",children:[]},{level:3,title:"Th\xEAm s\u1ED1 d\u01B0",slug:"them-so-du",children:[]}]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 truy v\u1EA5n t\u1EA5t c\u1EA3 token account c\u1EE7a m\u1ED9t Ch\u1EE7",slug:"lam-the-nao-\u0111e-truy-van-tat-ca-token-account-cua-mot-chu",children:[]}],path:"/vi/references/token.html",pathLocale:"/vi/",extraFields:[]},{title:"\u8D26\u6237",headers:[{level:2,title:"\u7EFC\u8FF0",slug:"\u7EFC\u8FF0",children:[]},{level:2,title:"\u6DF1\u5165",slug:"\u6DF1\u5165",children:[{level:3,title:"\u8D26\u6237\u6A21\u578B",slug:"\u8D26\u6237\u6A21\u578B",children:[]},{level:3,title:"\u79DF\u91D1",slug:"\u79DF\u91D1",children:[]}]},{level:2,title:"\u5176\u4ED6\u8D44\u6599",slug:"\u5176\u4ED6\u8D44\u6599",children:[{level:3,title:"\u81F4\u8C22",slug:"\u81F4\u8C22",children:[]}]}],path:"/zh/core-concepts/accounts.html",pathLocale:"/zh/",extraFields:[]},{title:"\u7A0B\u5E8F\u6D3E\u751F\u8D26\u6237 (PDA)",headers:[{level:2,title:"\u7EFC\u8FF0",slug:"\u7EFC\u8FF0",children:[{level:3,title:"\u751F\u6210PDA",slug:"\u751F\u6210pda",children:[]},{level:3,title:"\u4E0EPDA\u4EA4\u4E92",slug:"\u4E0Epda\u4EA4\u4E92",children:[]}]},{level:2,title:"Other Resources",slug:"other-resources",children:[]}],path:"/zh/core-concepts/pdas.html",pathLocale:"/zh/",extraFields:[]},{title:"\u7A0B\u5E8F",headers:[{level:2,title:"\u7EFC\u8FF0",slug:"\u7EFC\u8FF0",children:[]},{level:2,title:"\u6DF1\u5165",slug:"\u6DF1\u5165",children:[{level:3,title:"\u539F\u751F\u7A0B\u5E8F\u548CSolana\u7A0B\u5E8F\u5E93\uFF08SPL\uFF09",slug:"\u539F\u751F\u7A0B\u5E8F\u548Csolana\u7A0B\u5E8F\u5E93-spl",children:[]},{level:3,title:"\u7F16\u5199\u7A0B\u5E8F",slug:"\u7F16\u5199\u7A0B\u5E8F",children:[]},{level:3,title:"\u90E8\u7F72\u7A0B\u5E8F",slug:"\u90E8\u7F72\u7A0B\u5E8F",children:[]}]},{level:2,title:"\u5176\u4ED6\u8D44\u6599",slug:"\u5176\u4ED6\u8D44\u6599",children:[]}],path:"/zh/core-concepts/programs.html",pathLocale:"/zh/",extraFields:[]},{title:"\u4EA4\u6613",headers:[{level:2,title:"\u6982\u8FF0",slug:"\u6982\u8FF0",children:[]},{level:2,title:"\u6DF1\u5165",slug:"\u6DF1\u5165",children:[{level:3,title:"\u8D39\u7528",slug:"\u8D39\u7528",children:[]}]},{level:2,title:"Other Resources",slug:"other-resources",children:[]}],path:"/zh/core-concepts/transactions.html",pathLocale:"/zh/",extraFields:[]},{title:"\u5B89\u88C5",headers:[{level:2,title:"\u5B89\u88C5Web3.js",slug:"\u5B89\u88C5web3-js",children:[{level:3,title:"Web3.js",slug:"web3-js",children:[]},{level:3,title:"SPL\u4EE3\u5E01\uFF08SPL-Token\uFF09",slug:"spl\u4EE3\u5E01-spl-token",children:[]},{level:3,title:"\u94B1\u5305\u9002\u914D\u5668\uFF08Wallet-Adapter\uFF09",slug:"\u94B1\u5305\u9002\u914D\u5668-wallet-adapter",children:[]}]},{level:2,title:"\u5B89\u88C5Rust",slug:"\u5B89\u88C5rust",children:[]},{level:2,title:"\u5B89\u88C5\u547D\u4EE4\u884C\u5DE5\u5177",slug:"\u5B89\u88C5\u547D\u4EE4\u884C\u5DE5\u5177",children:[{level:3,title:"macOS & Linux",slug:"macos-linux",children:[]},{level:3,title:"Windows",slug:"windows",children:[]},{level:3,title:"\u4ECE\u6E90\u7801\u7F16\u8BD1",slug:"\u4ECE\u6E90\u7801\u7F16\u8BD1",children:[]}]}],path:"/zh/getting-started/installation.html",pathLocale:"/zh/",extraFields:[]},{title:"",headers:[],path:"/404.html",pathLocale:"/",extraFields:[]}],Nc=Ee(Cv),xv=()=>Nc;sl.webpackHot&&(__VUE_HMR_RUNTIME__.updateSearchIndex=e=>{Nc.value=e});const Vv=/[^\x00-\x7F]/,Fv=e=>e.split(/\s+/g).map(t=>t.trim()).filter(t=>!!t),Ya=e=>e.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"),Qa=(e,t)=>{const n=t.join(" "),r=Fv(e);if(Vv.test(e))return r.some(a=>n.toLowerCase().indexOf(a)>-1);const l=e.endsWith(" ");return new RegExp(r.map((a,o)=>r.length===o+1&&!l?`(?=.*\\b${Ya(a)})`:`(?=.*\\b${Ya(a)}\\b)`).join("")+".+","gi").test(n)},jv=({searchIndex:e,routeLocale:t,query:n,maxSuggestions:r})=>{const l=_e(()=>e.value.filter(i=>i.pathLocale===t.value));return _e(()=>{const i=n.value.trim().toLowerCase();if(!i)return[];const a=[],o=(s,u)=>{Qa(i,[u.title])&&a.push({link:`${s.path}#${u.slug}`,title:s.title,header:u.title});for(const d of u.children){if(a.length>=r.value)return;o(s,d)}};for(const s of l.value){if(a.length>=r.value)break;if(Qa(i,[s.title,...s.extraFields])){a.push({link:s.path,title:s.title});continue}for(const u of s.headers){if(a.length>=r.value)break;o(s,u)}}return a})},Nv=e=>{const t=Ee(0);return{focusIndex:t,focusNext:()=>{t.value{t.value>0?t.value-=1:t.value=e.value.length-1}}},Mv=ze({name:"SearchBox",props:{locales:{type:Object,required:!1,default:()=>({})},hotKeys:{type:Array,required:!1,default:()=>[]},maxSuggestions:{type:Number,required:!1,default:5}},setup(e){const{locales:t,hotKeys:n,maxSuggestions:r}=kd(e),l=rr(),i=ji(),a=xv(),o=Ee(null),s=Ee(!1),u=Ee(""),d=_e(()=>{var P;return(P=t.value[i.value])!==null&&P!==void 0?P:{}}),m=jv({searchIndex:a,routeLocale:i,query:u,maxSuggestions:r}),{focusIndex:h,focusNext:b,focusPrev:g}=Nv(m);Iv({input:o,hotKeys:n});const _=_e(()=>s.value&&!!m.value.length),f=()=>{!_.value||g()},k=()=>{!_.value||b()},w=P=>{if(!_.value)return;const T=m.value[P];!T||l.push(T.link).then(()=>{u.value="",h.value=0})};return()=>ee("form",{class:"search-box",role:"search"},[ee("input",{ref:o,type:"search",placeholder:d.value.placeholder,autocomplete:"off",spellcheck:!1,value:u.value,onFocus:()=>s.value=!0,onBlur:()=>s.value=!1,onInput:P=>u.value=P.target.value,onKeydown:P=>{switch(P.key){case"ArrowUp":{f();break}case"ArrowDown":{k();break}case"Enter":{P.preventDefault(),w(h.value);break}}}}),_.value&&ee("ul",{class:"suggestions",onMouseleave:()=>h.value=-1},m.value.map(({link:P,title:T,header:D},j)=>ee("li",{class:["suggestion",{focus:h.value===j}],onMouseenter:()=>h.value=j,onMousedown:()=>w(j)},ee("a",{href:P,onClick:L=>L.preventDefault()},[ee("span",{class:"page-title"},T),D&&ee("span",{class:"page-header"},`> ${D}`)]))))])}});const zv={"/":{placeholder:"Search"},"/zh/":{placeholder:"\u641C\u7D22"},"/vi/":{placeholder:"T\xECm ki\u1EBFm"},"/th/":{placeholder:"\u0E04\u0E49\u0E19\u0E2B\u0E32"},"/fr/":{placeholder:"Rechercher"},"/id/":{placeholder:"Cari"},"/kr/":{placeholder:"\uAC80\uC0C9"}},Hv=["s","/"],Bv=10;var Uv=At(({app:e})=>{e.component("SearchBox",t=>ee(Mv,xe({locales:zv,hotKeys:Hv,maxSuggestions:Bv},t)))}),Kv=({app:e})=>{e.component("SolanaCodeGroup",v(()=>c(()=>Promise.resolve().then(function(){return i_}),void 0))),e.component("SolanaCodeGroupItem",v(()=>c(()=>Promise.resolve().then(function(){return u_}),void 0)))};/*! @docsearch/js 3.0.0-alpha.42 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */function Gn(e){return Gn=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Gn(e)}function qv(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Gl(){return Gl=Object.assign||function(e){for(var t=1;t=0||(d[s]=a[s]);return d}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}function Br(e,t){return function(n){if(Array.isArray(n))return n}(e)||function(n,r){if(!(typeof Symbol=="undefined"||!(Symbol.iterator in Object(n)))){var l=[],i=!0,a=!1,o=void 0;try{for(var s,u=n[Symbol.iterator]();!(i=(s=u.next()).done)&&(l.push(s.value),!r||l.length!==r);i=!0);}catch(d){a=!0,o=d}finally{try{i||u.return==null||u.return()}finally{if(a)throw o}}return l}}(e,t)||Mc(e,t)||function(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}function Ur(e){return function(t){if(Array.isArray(t))return Jl(t)}(e)||function(t){if(typeof Symbol!="undefined"&&Symbol.iterator in Object(t))return Array.from(t)}(e)||Mc(e)||function(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}function Mc(e,t){if(e){if(typeof e=="string")return Jl(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set"?Array.from(e):n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Jl(e,t):void 0}}function Jl(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n3)for(n=[n],i=3;i0?zn(b.type,b.props,b.key,null,b.__v):b)!=null){if(b.__=n,b.__b=n.__b+1,(h=k[d])===null||h&&b.key==h.key&&b.type===h.type)k[d]=void 0;else for(m=0;m3)for(n=[n],i=3;i=n.__.length&&n.__.push({}),n.__[e]}function co(e,t,n){var r=Qn(vn++,2);return r.t=e,r.__c||(r.__=[n?n(t):Qc(void 0,t),function(l){var i=r.t(r.__[0],l);r.__[0]!==i&&(r.__=[i,r.__[1]],r.__c.setState({}))}],r.__c=je),r.__}function uo(e,t){var n=Qn(vn++,4);!Z.__s&&Ui(n.__H,t)&&(n.__=e,n.__H=t,je.__h.push(n))}function Er(e,t){var n=Qn(vn++,7);return Ui(n.__H,t)&&(n.__=e(),n.__H=t,n.__h=e),n.__}function Qv(){Ql.forEach(function(e){if(e.__P)try{e.__H.__h.forEach(wr),e.__H.__h.forEach(Zl),e.__H.__h=[]}catch(t){e.__H.__h=[],Z.__e(t,e.__v)}}),Ql=[]}Z.__b=function(e){je=null,lo&&lo(e)},Z.__r=function(e){io&&io(e),vn=0;var t=(je=e.__c).__H;t&&(t.__h.forEach(wr),t.__h.forEach(Zl),t.__h=[])},Z.diffed=function(e){ao&&ao(e);var t=e.__c;t&&t.__H&&t.__H.__h.length&&(Ql.push(t)!==1&&ro===Z.requestAnimationFrame||((ro=Z.requestAnimationFrame)||function(n){var r,l=function(){clearTimeout(i),ho&&cancelAnimationFrame(r),setTimeout(n)},i=setTimeout(l,100);ho&&(r=requestAnimationFrame(l))})(Qv)),je=void 0},Z.__c=function(e,t){t.some(function(n){try{n.__h.forEach(wr),n.__h=n.__h.filter(function(r){return!r.__||Zl(r)})}catch(r){t.some(function(l){l.__h&&(l.__h=[])}),t=[],Z.__e(r,n.__v)}}),oo&&oo(e,t)},Z.unmount=function(e){so&&so(e);var t=e.__c;if(t&&t.__H)try{t.__H.__.forEach(wr)}catch(n){Z.__e(n,t.__v)}};var ho=typeof requestAnimationFrame=="function";function wr(e){var t=je;typeof e.__c=="function"&&e.__c(),je=t}function Zl(e){var t=je;e.__c=e.__(),je=t}function Ui(e,t){return!e||e.length!==t.length||t.some(function(n,r){return n!==e[r]})}function Qc(e,t){return typeof t=="function"?t(e):t}function Zc(e,t){for(var n in t)e[n]=t[n];return e}function Xl(e,t){for(var n in e)if(n!=="__source"&&!(n in t))return!0;for(var r in t)if(r!=="__source"&&e[r]!==t[r])return!0;return!1}function ei(e){this.props=e}(ei.prototype=new at).isPureReactComponent=!0,ei.prototype.shouldComponentUpdate=function(e,t){return Xl(this.props,e)||Xl(this.state,t)};var go=Z.__b;Z.__b=function(e){e.type&&e.type.__f&&e.ref&&(e.props.ref=e.ref,e.ref=null),go&&go(e)};var Zv=typeof Symbol!="undefined"&&Symbol.for&&Symbol.for("react.forward_ref")||3911,mo=function(e,t){return e==null?null:ht(ht(e).map(t))},Xv={map:mo,forEach:mo,count:function(e){return e?ht(e).length:0},only:function(e){var t=ht(e);if(t.length!==1)throw"Children.only";return t[0]},toArray:ht},ep=Z.__e;function Pr(){this.__u=0,this.t=null,this.__b=null}function Xc(e){var t=e.__.__c;return t&&t.__e&&t.__e(e)}function Dn(){this.u=null,this.o=null}Z.__e=function(e,t,n){if(e.then){for(var r,l=t;l=l.__;)if((r=l.__c)&&r.__c)return t.__e==null&&(t.__e=n.__e,t.__k=n.__k),r.__c(e,t)}ep(e,t,n)},(Pr.prototype=new at).__c=function(e,t){var n=t.__c,r=this;r.t==null&&(r.t=[]),r.t.push(n);var l=Xc(r.__v),i=!1,a=function(){i||(i=!0,n.componentWillUnmount=n.__c,l?l(o):o())};n.__c=n.componentWillUnmount,n.componentWillUnmount=function(){a(),n.__c&&n.__c()};var o=function(){if(!--r.__u){if(r.state.__e){var u=r.state.__e;r.__v.__k[0]=function m(h,b,g){return h&&(h.__v=null,h.__k=h.__k&&h.__k.map(function(_){return m(_,b,g)}),h.__c&&h.__c.__P===b&&(h.__e&&g.insertBefore(h.__e,h.__d),h.__c.__e=!0,h.__c.__P=g)),h}(u,u.__c.__P,u.__c.__O)}var d;for(r.setState({__e:r.__b=null});d=r.t.pop();)d.forceUpdate()}},s=t.__h===!0;r.__u++||s||r.setState({__e:r.__b=r.__v.__k[0]}),e.then(a,a)},Pr.prototype.componentWillUnmount=function(){this.t=[]},Pr.prototype.render=function(e,t){if(this.__b){if(this.__v.__k){var n=document.createElement("div"),r=this.__v.__k[0].__c;this.__v.__k[0]=function i(a,o,s){return a&&(a.__c&&a.__c.__H&&(a.__c.__H.__.forEach(function(u){typeof u.__c=="function"&&u.__c()}),a.__c.__H=null),(a=Zc({},a)).__c!=null&&(a.__c.__P===s&&(a.__c.__P=o),a.__c=null),a.__k=a.__k&&a.__k.map(function(u){return i(u,o,s)})),a}(this.__b,n,r.__O=r.__P)}this.__b=null}var l=t.__e&&it(Ot,null,e.fallback);return l&&(l.__h=null),[it(Ot,null,t.__e?null:e.children),l]};var vo=function(e,t,n){if(++n[1]===n[0]&&e.o.delete(t),e.props.revealOrder&&(e.props.revealOrder[0]!=="t"||!e.o.size))for(n=e.u;n;){for(;n.length>3;)n.pop()();if(n[1]>>1,1),t.i.removeChild(r)}}),Yn(it(tp,{context:t.context},e.__v),t.l)):t.l&&t.componentWillUnmount()}function eu(e,t){return it(np,{__v:e,i:t})}(Dn.prototype=new at).__e=function(e){var t=this,n=Xc(t.__v),r=t.o.get(e);return r[0]++,function(l){var i=function(){t.props.revealOrder?(r.push(l),vo(t,e,r)):l()};n?n(i):i()}},Dn.prototype.render=function(e){this.u=null,this.o=new Map;var t=ht(e.children);e.revealOrder&&e.revealOrder[0]==="b"&&t.reverse();for(var n=t.length;n--;)this.o.set(t[n],this.u=[1,0,this.u]);return e.children},Dn.prototype.componentDidUpdate=Dn.prototype.componentDidMount=function(){var e=this;this.o.forEach(function(t,n){vo(e,n,t)})};var tu=typeof Symbol!="undefined"&&Symbol.for&&Symbol.for("react.element")||60103,rp=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|fill|flood|font|glyph(?!R)|horiz|marker(?!H|W|U)|overline|paint|stop|strikethrough|stroke|text(?!L)|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,lp=function(e){return(typeof Symbol!="undefined"&&Gn(Symbol())=="symbol"?/fil|che|rad/i:/fil|che|ra/i).test(e)};function nu(e,t,n){return t.__k==null&&(t.textContent=""),Yn(e,t),typeof n=="function"&&n(),e?e.__c:null}at.prototype.isReactComponent={},["componentWillMount","componentWillReceiveProps","componentWillUpdate"].forEach(function(e){Object.defineProperty(at.prototype,e,{configurable:!0,get:function(){return this["UNSAFE_"+e]},set:function(t){Object.defineProperty(this,e,{configurable:!0,writable:!0,value:t})}})});var po=Z.event;function ip(){}function ap(){return this.cancelBubble}function op(){return this.defaultPrevented}Z.event=function(e){return po&&(e=po(e)),e.persist=ip,e.isPropagationStopped=ap,e.isDefaultPrevented=op,e.nativeEvent=e};var ru,fo={configurable:!0,get:function(){return this.class}},_o=Z.vnode;Z.vnode=function(e){var t=e.type,n=e.props,r=n;if(typeof t=="string"){for(var l in r={},n){var i=n[l];l==="value"&&"defaultValue"in n&&i==null||(l==="defaultValue"&&"value"in n&&n.value==null?l="value":l==="download"&&i===!0?i="":/ondoubleclick/i.test(l)?l="ondblclick":/^onchange(textarea|input)/i.test(l+t)&&!lp(n.type)?l="oninput":/^on(Ani|Tra|Tou|BeforeInp)/.test(l)?l=l.toLowerCase():rp.test(l)?l=l.replace(/[A-Z0-9]/,"-$&").toLowerCase():i===null&&(i=void 0),r[l]=i)}t=="select"&&r.multiple&&Array.isArray(r.value)&&(r.value=ht(n.children).forEach(function(a){a.props.selected=r.value.indexOf(a.props.value)!=-1})),t=="select"&&r.defaultValue!=null&&(r.value=ht(n.children).forEach(function(a){a.props.selected=r.multiple?r.defaultValue.indexOf(a.props.value)!=-1:r.defaultValue==a.props.value})),e.props=r}t&&n.class!=n.className&&(fo.enumerable="className"in n,n.className!=null&&(r.class=n.className),Object.defineProperty(r,"className",fo)),e.$$typeof=tu,_o&&_o(e)};var bo=Z.__r;Z.__r=function(e){bo&&bo(e),ru=e.__c};var sp={ReactCurrentDispatcher:{current:{readContext:function(e){return ru.__n[e.__c].props.value}}}};(typeof performance=="undefined"?"undefined":Gn(performance))=="object"&&typeof performance.now=="function"&&performance.now.bind(performance);function ko(e){return!!e&&e.$$typeof===tu}var E={useState:function(e){return rn=1,co(Qc,e)},useReducer:co,useEffect:function(e,t){var n=Qn(vn++,3);!Z.__s&&Ui(n.__H,t)&&(n.__=e,n.__H=t,je.__H.__h.push(n))},useLayoutEffect:uo,useRef:function(e){return rn=5,Er(function(){return{current:e}},[])},useImperativeHandle:function(e,t,n){rn=6,uo(function(){typeof e=="function"?e(t()):e&&(e.current=t())},n==null?n:n.concat(e))},useMemo:Er,useCallback:function(e,t){return rn=8,Er(function(){return e},t)},useContext:function(e){var t=je.context[e.__c],n=Qn(vn++,9);return n.__c=e,t?(n.__==null&&(n.__=!0,t.sub(je)),t.props.value):e.__},useDebugValue:function(e,t){Z.useDebugValue&&Z.useDebugValue(t?t(e):e)},version:"16.8.0",Children:Xv,render:nu,hydrate:function(e,t,n){return Yc(e,t),typeof n=="function"&&n(),e?e.__c:null},unmountComponentAtNode:function(e){return!!e.__k&&(Yn(null,e),!0)},createPortal:eu,createElement:it,createContext:function(e,t){var n={__c:t="__cC"+Hc++,__:e,Consumer:function(r,l){return r.children(l)},Provider:function(r){var l,i;return this.getChildContext||(l=[],(i={})[t]=this,this.getChildContext=function(){return i},this.shouldComponentUpdate=function(a){this.props.value!==a.value&&l.some(Yl)},this.sub=function(a){l.push(a);var o=a.componentWillUnmount;a.componentWillUnmount=function(){l.splice(l.indexOf(a),1),o&&o.call(a)}}),r.children}};return n.Provider.__=n.Consumer.contextType=n},createFactory:function(e){return it.bind(null,e)},cloneElement:function(e){return ko(e)?Yv.apply(null,arguments):e},createRef:function(){return{current:null}},Fragment:Ot,isValidElement:ko,findDOMNode:function(e){return e&&(e.base||e.nodeType===1&&e)||null},Component:at,PureComponent:ei,memo:function(e,t){function n(l){var i=this.props.ref,a=i==l.ref;return!a&&i&&(i.call?i(null):i.current=null),t?!t(this.props,l)||!a:Xl(this.props,l)}function r(l){return this.shouldComponentUpdate=n,it(e,l)}return r.displayName="Memo("+(e.displayName||e.name)+")",r.prototype.isReactComponent=!0,r.__f=!0,r},forwardRef:function(e){function t(n,r){var l=Zc({},n);return delete l.ref,e(l,(r=n.ref||r)&&(Gn(r)!="object"||"current"in r)?r:null)}return t.$$typeof=Zv,t.render=t,t.prototype.isReactComponent=t.__f=!0,t.displayName="ForwardRef("+(e.displayName||e.name)+")",t},unstable_batchedUpdates:function(e,t){return e(t)},StrictMode:Ot,Suspense:Pr,SuspenseList:Dn,lazy:function(e){var t,n,r;function l(i){if(t||(t=e()).then(function(a){n=a.default||a},function(a){r=a}),r)throw r;if(!n)throw t;return it(n,i)}return l.displayName="Lazy",l.__f=!0,l},__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:sp};function cp(){return E.createElement("svg",{width:"15",height:"15",className:"DocSearch-Control-Key-Icon"},E.createElement("path",{d:"M4.505 4.496h2M5.505 5.496v5M8.216 4.496l.055 5.993M10 7.5c.333.333.5.667.5 1v2M12.326 4.5v5.996M8.384 4.496c1.674 0 2.116 0 2.116 1.5s-.442 1.5-2.116 1.5M3.205 9.303c-.09.448-.277 1.21-1.241 1.203C1 10.5.5 9.513.5 8V7c0-1.57.5-2.5 1.464-2.494.964.006 1.134.598 1.24 1.342M12.553 10.5h1.953",strokeWidth:"1.2",stroke:"currentColor",fill:"none",strokeLinecap:"square"}))}function lu(){return E.createElement("svg",{width:"20",height:"20",className:"DocSearch-Search-Icon",viewBox:"0 0 20 20"},E.createElement("path",{d:"M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"}))}var up=["translations"];function ti(){return ti=Object.assign||function(e){for(var t=1;t=0||(d[s]=a[s]);return d}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}var hp=E.forwardRef(function(e,t){var n=e.translations,r=n===void 0?{}:n,l=dp(e,up),i=r.buttonText,a=i===void 0?"Search":i,o=r.buttonAriaLabel,s=o===void 0?"Search":o,u=Er(function(){return typeof navigator!="undefined"?/(Mac|iPhone|iPod|iPad)/i.test(navigator.platform)?"\u2318":"Ctrl":null},[]);return E.createElement("button",ti({type:"button",className:"DocSearch DocSearch-Button","aria-label":s},l,{ref:t}),E.createElement("span",{className:"DocSearch-Button-Container"},E.createElement(lu,null),E.createElement("span",{className:"DocSearch-Button-Placeholder"},a)),E.createElement("span",{className:"DocSearch-Button-Keys"},u!==null&&E.createElement(E.Fragment,null,E.createElement("span",{className:"DocSearch-Button-Key"},u==="Ctrl"?E.createElement(cp,null):u),E.createElement("span",{className:"DocSearch-Button-Key"},"K"))))});function Zn(e){return e.reduce(function(t,n){return t.concat(n)},[])}var gp=0;function ni(e){return e.collections.length===0?0:e.collections.reduce(function(t,n){return t+n.items.length},0)}var mp=function(){},vp=[{segment:"autocomplete-core",version:"1.5.0"}];function yo(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(l){return Object.getOwnPropertyDescriptor(e,l).enumerable})),n.push.apply(n,r)}return n}function pp(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function fp(e,t,n){var r=t.initialState;return{getState:function(){return r},dispatch:function(l,i){var a=function(o){for(var s=1;s=n?r===null?null:0:l}function Po(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(l){return Object.getOwnPropertyDescriptor(e,l).enumerable})),n.push.apply(n,r)}return n}function bp(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function kp(e,t){var n=[];return Promise.resolve(e(t)).then(function(r){return Promise.all(r.filter(function(l){return Boolean(l)}).map(function(l){if(l.sourceId,n.includes(l.sourceId))throw new Error("[Autocomplete] The `sourceId` ".concat(JSON.stringify(l.sourceId)," is not unique."));n.push(l.sourceId);var i=function(a){for(var o=1;oe.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0||(d[s]=a[s]);return d}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}var Ro,Sl,_r,Tn=null,Io=(Ro=-1,Sl=-1,_r=void 0,function(e){var t=++Ro;return Promise.resolve(e).then(function(n){return _r&&t=0||(d[s]=a[s]);return d}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}var Vp=["props","refresh","store"],Fp=["inputElement","formElement","panelElement"],jp=["inputElement"],Np=["inputElement","maxLength"],Mp=["item","source"];function xo(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(l){return Object.getOwnPropertyDescriptor(e,l).enumerable})),n.push.apply(n,r)}return n}function Ve(e){for(var t=1;t=0||(d[s]=a[s]);return d}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}function Hp(e){var t=e.props,n=e.refresh,r=e.store,l=On(e,Vp);return{getEnvironmentProps:function(i){var a=i.inputElement,o=i.formElement,s=i.panelElement;return Ve({onTouchStart:function(u){r.getState().isOpen!==!1&&u.target!==a&&[o,s].some(function(d){return m=d,h=u.target,m===h||m.contains(h);var m,h})===!1&&r.dispatch("blur",null)},onTouchMove:function(u){r.getState().isOpen!==!1&&a===t.environment.document.activeElement&&u.target!==a&&a.blur()}},On(i,Fp))},getRootProps:function(i){return Ve({role:"combobox","aria-expanded":r.getState().isOpen,"aria-haspopup":"listbox","aria-owns":r.getState().isOpen?"".concat(t.id,"-list"):void 0,"aria-labelledby":"".concat(t.id,"-label")},i)},getFormProps:function(i){return i.inputElement,Ve({action:"",noValidate:!0,role:"search",onSubmit:function(a){var o;a.preventDefault(),t.onSubmit(Ve({event:a,refresh:n,state:r.getState()},l)),r.dispatch("submit",null),(o=i.inputElement)===null||o===void 0||o.blur()},onReset:function(a){var o;a.preventDefault(),t.onReset(Ve({event:a,refresh:n,state:r.getState()},l)),r.dispatch("reset",null),(o=i.inputElement)===null||o===void 0||o.focus()}},On(i,jp))},getLabelProps:function(i){return Ve({htmlFor:"".concat(t.id,"-input"),id:"".concat(t.id,"-label")},i)},getInputProps:function(i){function a(b){(t.openOnFocus||Boolean(r.getState().query))&&nn(Ve({event:b,props:t,query:r.getState().completion||r.getState().query,refresh:n,store:r},l)),r.dispatch("focus",null)}var o="ontouchstart"in t.environment,s=i||{},u=(s.inputElement,s.maxLength),d=u===void 0?512:u,m=On(s,Np),h=ln(r.getState());return Ve({"aria-autocomplete":"both","aria-activedescendant":r.getState().isOpen&&r.getState().activeItemId!==null?"".concat(t.id,"-item-").concat(r.getState().activeItemId):void 0,"aria-controls":r.getState().isOpen?"".concat(t.id,"-list"):void 0,"aria-labelledby":"".concat(t.id,"-label"),value:r.getState().completion||r.getState().query,id:"".concat(t.id,"-input"),autoComplete:"off",autoCorrect:"off",autoCapitalize:"off",enterKeyHint:h!=null&&h.itemUrl?"go":"search",spellCheck:"false",autoFocus:t.autoFocus,placeholder:t.placeholder,maxLength:d,type:"search",onChange:function(b){nn(Ve({event:b,props:t,query:b.currentTarget.value.slice(0,d),refresh:n,store:r},l))},onKeyDown:function(b){(function(g){var _=g.event,f=g.props,k=g.refresh,w=g.store,P=xp(g,Ip);if(_.key==="ArrowUp"||_.key==="ArrowDown"){var T=function(){var W=f.environment.document.getElementById("".concat(f.id,"-item-").concat(w.getState().activeItemId));W&&(W.scrollIntoViewIfNeeded?W.scrollIntoViewIfNeeded(!1):W.scrollIntoView(!1))},D=function(){var W=ln(w.getState());if(w.getState().activeItemId!==null&&W){var A=W.item,H=W.itemInputValue,Q=W.itemUrl,se=W.source;se.onActive(Ct({event:_,item:A,itemInputValue:H,itemUrl:Q,refresh:k,source:se,state:w.getState()},P))}};_.preventDefault(),w.getState().isOpen===!1&&(f.openOnFocus||Boolean(w.getState().query))?nn(Ct({event:_,props:f,query:w.getState().query,refresh:k,store:w},P)).then(function(){w.dispatch(_.key,{nextActiveItemId:f.defaultActiveItemId}),D(),setTimeout(T,0)}):(w.dispatch(_.key,{}),D(),T())}else if(_.key==="Escape")_.preventDefault(),w.dispatch(_.key,null);else if(_.key==="Enter"){if(w.getState().activeItemId===null||w.getState().collections.every(function(W){return W.items.length===0}))return;_.preventDefault();var j=ln(w.getState()),L=j.item,O=j.itemInputValue,K=j.itemUrl,B=j.source;if(_.metaKey||_.ctrlKey)K!==void 0&&(B.onSelect(Ct({event:_,item:L,itemInputValue:O,itemUrl:K,refresh:k,source:B,state:w.getState()},P)),f.navigator.navigateNewTab({itemUrl:K,item:L,state:w.getState()}));else if(_.shiftKey)K!==void 0&&(B.onSelect(Ct({event:_,item:L,itemInputValue:O,itemUrl:K,refresh:k,source:B,state:w.getState()},P)),f.navigator.navigateNewWindow({itemUrl:K,item:L,state:w.getState()}));else if(!_.altKey){if(K!==void 0)return B.onSelect(Ct({event:_,item:L,itemInputValue:O,itemUrl:K,refresh:k,source:B,state:w.getState()},P)),void f.navigator.navigate({itemUrl:K,item:L,state:w.getState()});nn(Ct({event:_,nextState:{isOpen:!1},props:f,query:O,refresh:k,store:w},P)).then(function(){B.onSelect(Ct({event:_,item:L,itemInputValue:O,itemUrl:K,refresh:k,source:B,state:w.getState()},P))})}}})(Ve({event:b,props:t,refresh:n,store:r},l))},onFocus:a,onBlur:function(){o||r.dispatch("blur",null)},onClick:function(b){i.inputElement!==t.environment.document.activeElement||r.getState().isOpen||a(b)}},m)},getPanelProps:function(i){return Ve({onMouseDown:function(a){a.preventDefault()},onMouseLeave:function(){r.dispatch("mouseleave",null)}},i)},getListProps:function(i){return Ve({role:"listbox","aria-labelledby":"".concat(t.id,"-label"),id:"".concat(t.id,"-list")},i)},getItemProps:function(i){var a=i.item,o=i.source,s=On(i,Mp);return Ve({id:"".concat(t.id,"-item-").concat(a.__autocomplete_id),role:"option","aria-selected":r.getState().activeItemId===a.__autocomplete_id,onMouseMove:function(u){if(a.__autocomplete_id!==r.getState().activeItemId){r.dispatch("mousemove",a.__autocomplete_id);var d=ln(r.getState());if(r.getState().activeItemId!==null&&d){var m=d.item,h=d.itemInputValue,b=d.itemUrl,g=d.source;g.onActive(Ve({event:u,item:m,itemInputValue:h,itemUrl:b,refresh:n,source:g,state:r.getState()},l))}}},onMouseDown:function(u){u.preventDefault()},onClick:function(u){var d=o.getItemInputValue({item:a,state:r.getState()}),m=o.getItemUrl({item:a,state:r.getState()});(m?Promise.resolve():nn(Ve({event:u,nextState:{isOpen:!1},props:t,query:d,refresh:n,store:r},l))).then(function(){o.onSelect(Ve({event:u,item:a,itemInputValue:d,itemUrl:m,refresh:n,source:o,state:r.getState()},l))})}},s)}}}function Vo(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(l){return Object.getOwnPropertyDescriptor(e,l).enumerable})),n.push.apply(n,r)}return n}function Bp(e){for(var t=1;t0},reshape:function(h){return h.sources}},o),{},{id:(u=o.id)!==null&&u!==void 0?u:"autocomplete-".concat(gp++),plugins:m,initialState:Qt({activeItemId:null,query:"",completion:null,collections:[],isOpen:!1,status:"idle",context:{}},o.initialState),onStateChange:function(h){var b;(b=o.onStateChange)===null||b===void 0||b.call(o,h),m.forEach(function(g){var _;return(_=g.onStateChange)===null||_===void 0?void 0:_.call(g,h)})},onSubmit:function(h){var b;(b=o.onSubmit)===null||b===void 0||b.call(o,h),m.forEach(function(g){var _;return(_=g.onSubmit)===null||_===void 0?void 0:_.call(g,h)})},onReset:function(h){var b;(b=o.onReset)===null||b===void 0||b.call(o,h),m.forEach(function(g){var _;return(_=g.onReset)===null||_===void 0?void 0:_.call(g,h)})},getSources:function(h){return Promise.all([].concat(Ep(m.map(function(b){return b.getSources})),[o.getSources]).filter(Boolean).map(function(b){return kp(b,h)})).then(function(b){return Zn(b)}).then(function(b){return b.map(function(g){return Qt(Qt({},g),{},{onSelect:function(_){g.onSelect(_),s.forEach(function(f){var k;return(k=f.onSelect)===null||k===void 0?void 0:k.call(f,_)})},onActive:function(_){g.onActive(_),s.forEach(function(f){var k;return(k=f.onActive)===null||k===void 0?void 0:k.call(f,_)})}})})})},navigator:Qt({navigate:function(h){var b=h.itemUrl;d.location.assign(b)},navigateNewTab:function(h){var b=h.itemUrl,g=d.open(b,"_blank","noopener");g==null||g.focus()},navigateNewWindow:function(h){var b=h.itemUrl;d.open(b,"_blank","noopener")}},o.navigator)})}(e,t),r=fp(qp,n,function(o){var s=o.prevState,u=o.state;n.onStateChange(xt({prevState:s,state:u,refresh:a},l))}),l=function(o){var s=o.store;return{setActiveItemId:function(u){s.dispatch("setActiveItemId",u)},setQuery:function(u){s.dispatch("setQuery",u)},setCollections:function(u){var d=0,m=u.map(function(h){return mr(mr({},h),{},{items:Zn(h.items).map(function(b){return mr(mr({},b),{},{__autocomplete_id:d++})})})});s.dispatch("setCollections",m)},setIsOpen:function(u){s.dispatch("setIsOpen",u)},setStatus:function(u){s.dispatch("setStatus",u)},setContext:function(u){s.dispatch("setContext",u)}}}({store:r}),i=Hp(xt({props:n,refresh:a,store:r},l));function a(){return nn(xt({event:new Event("input"),nextState:{isOpen:r.getState().isOpen},props:n,query:r.getState().query,refresh:a,store:r},l))}return n.plugins.forEach(function(o){var s;return(s=o.subscribe)===null||s===void 0?void 0:s.call(o,xt(xt({},l),{},{refresh:a,onSelect:function(u){t.push({onSelect:u})},onActive:function(u){t.push({onActive:u})}}))}),function(o){var s,u=o.metadata,d=o.environment;if(!((s=d.navigator)===null||s===void 0)&&s.userAgent.includes("Algolia Crawler")){var m=d.document.createElement("meta"),h=d.document.querySelector("head");m.name="algolia:metadata",setTimeout(function(){m.content=JSON.stringify(u),h.appendChild(m)},0)}}({metadata:Up({plugins:n.plugins,options:e}),environment:n.environment}),xt(xt({refresh:a},i),l)}function Gp(e){var t=e.translations,n=(t===void 0?{}:t).searchByText,r=n===void 0?"Search by":n;return E.createElement("a",{href:"https://www.algolia.com/docsearch",target:"_blank",rel:"noopener noreferrer"},E.createElement("span",{className:"DocSearch-Label"},r),E.createElement("svg",{width:"77",height:"19"},E.createElement("path",{d:"M2.5067 0h14.0245c1.384.001 2.5058 1.1205 2.5068 2.5017V16.5c-.0014 1.3808-1.1232 2.4995-2.5068 2.5H2.5067C1.1232 18.9995.0014 17.8808 0 16.5V2.4958A2.495 2.495 0 01.735.7294 2.505 2.505 0 012.5068 0zM37.95 15.0695c-3.7068.0168-3.7068-2.986-3.7068-3.4634L34.2372.3576 36.498 0v11.1794c0 .2715 0 1.9889 1.452 1.994v1.8961zm-9.1666-1.8388c.694 0 1.2086-.0397 1.5678-.1088v-2.2934a5.3639 5.3639 0 00-1.3303-.1679 4.8283 4.8283 0 00-.758.0582 2.2845 2.2845 0 00-.688.2024c-.2029.0979-.371.2362-.4919.4142-.1268.1788-.185.2826-.185.5533 0 .5297.185.8359.5205 1.0375.3355.2016.7928.3053 1.365.3053v-.0008zm-.1969-8.1817c.7463 0 1.3768.092 1.8856.2767.5088.1838.9195.4428 1.2204.7717.3068.334.5147.7777.6423 1.251.1327.4723.196.991.196 1.5603v5.798c-.5235.1036-1.05.192-1.5787.2649-.7048.1037-1.4976.156-2.3774.156-.5832 0-1.1215-.0582-1.6016-.167a3.385 3.385 0 01-1.2432-.5364 2.6034 2.6034 0 01-.8037-.9565c-.191-.3922-.29-.9447-.29-1.5208 0-.5533.11-.905.3246-1.2863a2.7351 2.7351 0 01.8849-.9329c.376-.242.8029-.415 1.2948-.5187a7.4517 7.4517 0 011.5381-.156 7.1162 7.1162 0 011.6667.2024V8.886c0-.259-.0296-.5061-.093-.7372a1.5847 1.5847 0 00-.3245-.6158 1.5079 1.5079 0 00-.6119-.4158 2.6788 2.6788 0 00-.966-.173c-.5206 0-.9948.0634-1.4283.1384a6.5481 6.5481 0 00-1.065.259l-.2712-1.849c.2831-.0986.7048-.1964 1.2491-.2943a9.2979 9.2979 0 011.752-.1501v.0008zm44.6597 8.1193c.6947 0 1.2086-.0405 1.567-.1097v-2.2942a5.3743 5.3743 0 00-1.3303-.1679c-.2485 0-.503.0177-.7573.0582a2.2853 2.2853 0 00-.688.2024 1.2333 1.2333 0 00-.4918.4142c-.1268.1788-.1843.2826-.1843.5533 0 .5297.1843.8359.5198 1.0375.3414.2066.7927.3053 1.365.3053v.0009zm-.191-8.1767c.7463 0 1.3768.0912 1.8856.2759.5087.1847.9195.4436 1.2204.7717.3.329.5147.7786.6414 1.251a5.7248 5.7248 0 01.197 1.562v5.7972c-.3466.0742-.874.1602-1.5788.2648-.7049.1038-1.4976.1552-2.3774.1552-.5832 0-1.1215-.0573-1.6016-.167a3.385 3.385 0 01-1.2432-.5356 2.6034 2.6034 0 01-.8038-.9565c-.191-.3922-.2898-.9447-.2898-1.5216 0-.5533.1098-.905.3245-1.2854a2.7373 2.7373 0 01.8849-.9338c.376-.2412.8029-.4141 1.2947-.5178a7.4545 7.4545 0 012.325-.1097c.2781.0287.5672.081.879.156v-.3686a2.7781 2.7781 0 00-.092-.738 1.5788 1.5788 0 00-.3246-.6166 1.5079 1.5079 0 00-.612-.415 2.6797 2.6797 0 00-.966-.1729c-.5205 0-.9947.0633-1.4282.1384a6.5608 6.5608 0 00-1.065.259l-.2712-1.8498c.283-.0979.7048-.1957 1.2491-.2935a9.8597 9.8597 0 011.752-.1494zm-6.79-1.072c-.7576.001-1.373-.6103-1.3759-1.3664 0-.755.6128-1.3664 1.376-1.3664.764 0 1.3775.6115 1.3775 1.3664s-.6195 1.3664-1.3776 1.3664zm1.1393 11.1507h-2.2726V5.3409l2.2734-.3568v10.0845l-.0008.0017zm-3.984 0c-3.707.0168-3.707-2.986-3.707-3.4642L59.7069.3576 61.9685 0v11.1794c0 .2715 0 1.9889 1.452 1.994V15.0703zm-7.3512-4.979c0-.975-.2138-1.7873-.6305-2.3516-.4167-.571-.9998-.852-1.747-.852-.7454 0-1.3302.281-1.7452.852-.4166.5702-.6195 1.3765-.6195 2.3516 0 .9851.208 1.6473.6254 2.2183.4158.576.9998.8587 1.7461.8587.7454 0 1.3303-.2885 1.747-.8595.4158-.5761.6237-1.2315.6237-2.2184v.0009zm2.3132-.006c0 .7609-.1099 1.3361-.3356 1.9654a4.654 4.654 0 01-.9533 1.6076A4.214 4.214 0 0155.613 14.69c-.579.2412-1.4697.3795-1.9143.3795-.4462-.005-1.3303-.1324-1.9033-.3795a4.307 4.307 0 01-1.474-1.0316c-.4115-.4445-.7293-.9801-.9609-1.6076a5.3423 5.3423 0 01-.3465-1.9653c0-.7608.104-1.493.3356-2.1155a4.683 4.683 0 01.9719-1.5958 4.3383 4.3383 0 011.479-1.0257c.5739-.242 1.2043-.3567 1.8864-.3567.6829 0 1.3125.1197 1.8906.3567a4.1245 4.1245 0 011.4816 1.0257 4.7587 4.7587 0 01.9592 1.5958c.2426.6225.3643 1.3547.3643 2.1155zm-17.0198 0c0 .9448.208 1.9932.6238 2.431.4166.4386.955.6579 1.6142.6579.3584 0 .6998-.0523 1.0176-.1502.3186-.0978.5721-.2134.775-.3517V7.0784a8.8706 8.8706 0 00-1.4926-.1906c-.8206-.0236-1.4452.312-1.8847.8468-.4335.5365-.6533 1.476-.6533 2.3516v-.0008zm6.2863 4.4485c0 1.5385-.3938 2.662-1.1866 3.3773-.791.7136-2.0005 1.0712-3.6308 1.0712-.5958 0-1.834-.1156-2.8228-.334l.3643-1.7865c.8282.173 1.9202.2193 2.4932.2193.9077 0 1.555-.1847 1.943-.5533.388-.3686.578-.916.578-1.643v-.3687a6.8289 6.8289 0 01-.8848.3349c-.3634.1096-.786.167-1.261.167-.6246 0-1.1917-.0979-1.7055-.2944a3.5554 3.5554 0 01-1.3244-.8645c-.3642-.3796-.6541-.8579-.8561-1.4289-.2028-.571-.3068-1.59-.3068-2.339 0-.7034.1099-1.5856.3245-2.1735.2198-.5871.5316-1.0949.9542-1.515.4167-.42.9255-.743 1.5213-.98a5.5923 5.5923 0 012.052-.3855c.7353 0 1.4114.092 2.0707.2024.6592.1088 1.2204.2236 1.6776.35v8.945-.0008zM11.5026 4.2418v-.6511c-.0005-.4553-.3704-.8241-.8266-.8241H8.749c-.4561 0-.826.3688-.8265.824v.669c0 .0742.0693.1264.1445.1096a6.0346 6.0346 0 011.6768-.2362 6.125 6.125 0 011.6202.2185.1116.1116 0 00.1386-.1097zm-5.2806.852l-.3296-.3282a.8266.8266 0 00-1.168 0l-.393.3922a.8199.8199 0 000 1.164l.3237.323c.0524.0515.1268.0397.1733-.0117.191-.259.3989-.507.6305-.7372.2374-.2362.48-.4437.7462-.6335.0575-.0354.0634-.1155.017-.1687zm3.5159 2.069v2.818c0 .081.0879.1392.1622.0987l2.5102-1.2964c.0574-.0287.0752-.0987.0464-.1552a3.1237 3.1237 0 00-2.603-1.574c-.0575 0-.115.0456-.115.1097l-.0008-.0009zm.0008 6.789c-2.0933.0005-3.7915-1.6912-3.7947-3.7804C5.9468 8.0821 7.6452 6.39 9.7387 6.391c2.0932-.0005 3.7911 1.6914 3.794 3.7804a3.7783 3.7783 0 01-1.1124 2.675 3.7936 3.7936 0 01-2.6824 1.1054h.0008zM9.738 4.8002c-1.9218 0-3.6975 1.0232-4.6584 2.6841a5.359 5.359 0 000 5.3683c.9609 1.661 2.7366 2.6841 4.6584 2.6841a5.3891 5.3891 0 003.8073-1.5725 5.3675 5.3675 0 001.578-3.7987 5.3574 5.3574 0 00-1.5771-3.797A5.379 5.379 0 009.7387 4.801l-.0008-.0008z",fill:"currentColor",fillRule:"evenodd"})))}function br(e){return E.createElement("svg",{width:"15",height:"15"},E.createElement("g",{fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"1.2"},e.children))}function Jp(e){var t=e.translations,n=t===void 0?{}:t,r=n.selectText,l=r===void 0?"to select":r,i=n.navigateText,a=i===void 0?"to navigate":i,o=n.closeText,s=o===void 0?"to close":o,u=n.searchByText,d=u===void 0?"Search by":u;return E.createElement(E.Fragment,null,E.createElement("div",{className:"DocSearch-Logo"},E.createElement(Gp,{translations:{searchByText:d}})),E.createElement("ul",{className:"DocSearch-Commands"},E.createElement("li",null,E.createElement("span",{className:"DocSearch-Commands-Key"},E.createElement(br,null,E.createElement("path",{d:"M12 3.53088v3c0 1-1 2-2 2H4M7 11.53088l-3-3 3-3"}))),E.createElement("span",{className:"DocSearch-Label"},l)),E.createElement("li",null,E.createElement("span",{className:"DocSearch-Commands-Key"},E.createElement(br,null,E.createElement("path",{d:"M7.5 3.5v8M10.5 8.5l-3 3-3-3"}))),E.createElement("span",{className:"DocSearch-Commands-Key"},E.createElement(br,null,E.createElement("path",{d:"M7.5 11.5v-8M10.5 6.5l-3-3-3 3"}))),E.createElement("span",{className:"DocSearch-Label"},a)),E.createElement("li",null,E.createElement("span",{className:"DocSearch-Commands-Key"},E.createElement(br,null,E.createElement("path",{d:"M13.6167 8.936c-.1065.3583-.6883.962-1.4875.962-.7993 0-1.653-.9165-1.653-2.1258v-.5678c0-1.2548.7896-2.1016 1.653-2.1016.8634 0 1.3601.4778 1.4875 1.0724M9 6c-.1352-.4735-.7506-.9219-1.46-.8972-.7092.0246-1.344.57-1.344 1.2166s.4198.8812 1.3445.9805C8.465 7.3992 8.968 7.9337 9 8.5c.032.5663-.454 1.398-1.4595 1.398C6.6593 9.898 6 9 5.963 8.4851m-1.4748.5368c-.2635.5941-.8099.876-1.5443.876s-1.7073-.6248-1.7073-2.204v-.4603c0-1.0416.721-2.131 1.7073-2.131.9864 0 1.6425 1.031 1.5443 2.2492h-2.956"}))),E.createElement("span",{className:"DocSearch-Label"},s))))}function Yp(e){var t=e.hit,n=e.children;return E.createElement("a",{href:t.url},n)}function Qp(){return E.createElement("svg",{viewBox:"0 0 38 38",stroke:"currentColor",strokeOpacity:".5"},E.createElement("g",{fill:"none",fillRule:"evenodd"},E.createElement("g",{transform:"translate(1 1)",strokeWidth:"2"},E.createElement("circle",{strokeOpacity:".3",cx:"18",cy:"18",r:"18"}),E.createElement("path",{d:"M36 18c0-9.94-8.06-18-18-18"},E.createElement("animateTransform",{attributeName:"transform",type:"rotate",from:"0 18 18",to:"360 18 18",dur:"1s",repeatCount:"indefinite"})))))}function Zp(){return E.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},E.createElement("g",{stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"},E.createElement("path",{d:"M3.18 6.6a8.23 8.23 0 1112.93 9.94h0a8.23 8.23 0 01-11.63 0"}),E.createElement("path",{d:"M6.44 7.25H2.55V3.36M10.45 6v5.6M10.45 11.6L13 13"})))}function ri(){return E.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},E.createElement("path",{d:"M10 10l5.09-5.09L10 10l5.09 5.09L10 10zm0 0L4.91 4.91 10 10l-5.09 5.09L10 10z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"}))}function Xp(){return E.createElement("svg",{className:"DocSearch-Hit-Select-Icon",width:"20",height:"20",viewBox:"0 0 20 20"},E.createElement("g",{stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"},E.createElement("path",{d:"M18 3v4c0 2-2 4-4 4H2"}),E.createElement("path",{d:"M8 17l-6-6 6-6"})))}var ef=function(){return E.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},E.createElement("path",{d:"M17 6v12c0 .52-.2 1-1 1H4c-.7 0-1-.33-1-1V2c0-.55.42-1 1-1h8l5 5zM14 8h-3.13c-.51 0-.87-.34-.87-.87V4",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinejoin:"round"}))};function tf(e){switch(e.type){case"lvl1":return E.createElement(ef,null);case"content":return E.createElement(rf,null);default:return E.createElement(nf,null)}}function nf(){return E.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},E.createElement("path",{d:"M13 13h4-4V8H7v5h6v4-4H7V8H3h4V3v5h6V3v5h4-4v5zm-6 0v4-4H3h4z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"}))}function rf(){return E.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},E.createElement("path",{d:"M17 5H3h14zm0 5H3h14zm0 5H3h14z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinejoin:"round"}))}function Mo(){return E.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},E.createElement("path",{d:"M10 14.2L5 17l1-5.6-4-4 5.5-.7 2.5-5 2.5 5 5.6.8-4 4 .9 5.5z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinejoin:"round"}))}function lf(){return E.createElement("svg",{width:"40",height:"40",viewBox:"0 0 20 20",fill:"none",fillRule:"evenodd",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round"},E.createElement("path",{d:"M19 4.8a16 16 0 00-2-1.2m-3.3-1.2A16 16 0 001.1 4.7M16.7 8a12 12 0 00-2.8-1.4M10 6a12 12 0 00-6.7 2M12.3 14.7a4 4 0 00-4.5 0M14.5 11.4A8 8 0 0010 10M3 16L18 2M10 18h0"}))}function af(){return E.createElement("svg",{width:"40",height:"40",viewBox:"0 0 20 20",fill:"none",fillRule:"evenodd",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round"},E.createElement("path",{d:"M15.5 4.8c2 3 1.7 7-1 9.7h0l4.3 4.3-4.3-4.3a7.8 7.8 0 01-9.8 1m-2.2-2.2A7.8 7.8 0 0113.2 2.4M2 18L18 2"}))}function of(e){var t=e.translations,n=t===void 0?{}:t,r=n.titleText,l=r===void 0?"Unable to fetch results":r,i=n.helpText,a=i===void 0?"You might want to check your network connection.":i;return E.createElement("div",{className:"DocSearch-ErrorScreen"},E.createElement("div",{className:"DocSearch-Screen-Icon"},E.createElement(lf,null)),E.createElement("p",{className:"DocSearch-Title"},l),E.createElement("p",{className:"DocSearch-Help"},a))}var sf=["translations"];function cf(e){return function(t){if(Array.isArray(t))return Tl(t)}(e)||function(t){if(typeof Symbol!="undefined"&&Symbol.iterator in Object(t))return Array.from(t)}(e)||function(t,n){if(!!t){if(typeof t=="string")return Tl(t,n);var r=Object.prototype.toString.call(t).slice(8,-1);if(r==="Object"&&t.constructor&&(r=t.constructor.name),r==="Map"||r==="Set")return Array.from(t);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return Tl(t,n)}}(e)||function(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}function Tl(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0||(d[s]=a[s]);return d}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}function df(e){var t=e.translations,n=t===void 0?{}:t,r=uf(e,sf),l=n.noResultsText,i=l===void 0?"No results for":l,a=n.suggestedQueryText,o=a===void 0?"Try searching for":a,s=n.openIssueText,u=s===void 0?"Believe this query should return results?":s,d=n.openIssueLinkText,m=d===void 0?"Let us know":d,h=r.state.context.searchSuggestions;return E.createElement("div",{className:"DocSearch-NoResults"},E.createElement("div",{className:"DocSearch-Screen-Icon"},E.createElement(af,null)),E.createElement("p",{className:"DocSearch-Title"},i,' "',E.createElement("strong",null,r.state.query),'"'),h&&h.length>0&&E.createElement("div",{className:"DocSearch-NoResults-Prefill-List"},E.createElement("p",{className:"DocSearch-Help"},o,":"),E.createElement("ul",null,h.slice(0,3).reduce(function(b,g){return[].concat(cf(b),[E.createElement("li",{key:g},E.createElement("button",{className:"DocSearch-Prefill",key:g,type:"button",onClick:function(){r.setQuery(g.toLowerCase()+" "),r.refresh(),r.inputRef.current.focus()}},g))])},[]))),E.createElement("p",{className:"DocSearch-Help"},"".concat(u," "),E.createElement("a",{href:"https://github.com/algolia/docsearch-configs/issues/new?template=Missing_results.md&title=[".concat(r.indexName,']+Missing+results+for+query+"').concat(r.state.query,'"'),target:"_blank",rel:"noopener noreferrer"},m),"."))}var hf=["hit","attribute","tagName"];function zo(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(l){return Object.getOwnPropertyDescriptor(e,l).enumerable})),n.push.apply(n,r)}return n}function Ho(e){for(var t=1;t=0||(d[s]=a[s]);return d}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}function Bo(e,t){return t.split(".").reduce(function(n,r){return n!=null&&n[r]?n[r]:null},e)}function Zt(e){var t=e.hit,n=e.attribute,r=e.tagName;return it(r===void 0?"span":r,Ho(Ho({},mf(e,hf)),{},{dangerouslySetInnerHTML:{__html:Bo(t,"_snippetResult.".concat(n,".value"))||Bo(t,n)}}))}function Uo(e,t){return function(n){if(Array.isArray(n))return n}(e)||function(n,r){if(!(typeof Symbol=="undefined"||!(Symbol.iterator in Object(n)))){var l=[],i=!0,a=!1,o=void 0;try{for(var s,u=n[Symbol.iterator]();!(i=(s=u.next()).done)&&(l.push(s.value),!r||l.length!==r);i=!0);}catch(d){a=!0,o=d}finally{try{i||u.return==null||u.return()}finally{if(a)throw o}}return l}}(e,t)||function(n,r){if(!!n){if(typeof n=="string")return Ko(n,r);var l=Object.prototype.toString.call(n).slice(8,-1);if(l==="Object"&&n.constructor&&(l=n.constructor.name),l==="Map"||l==="Set")return Array.from(n);if(l==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(l))return Ko(n,r)}}(e,t)||function(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}function Ko(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n|<\/mark>)/g,ff=RegExp(ou.source);function su(e){var t,n,r,l,i,a=e;if(!a.__docsearch_parent&&!e._highlightResult)return e.hierarchy.lvl0;var o=((a.__docsearch_parent?(t=a.__docsearch_parent)===null||t===void 0||(n=t._highlightResult)===null||n===void 0||(r=n.hierarchy)===null||r===void 0?void 0:r.lvl0:(l=e._highlightResult)===null||l===void 0||(i=l.hierarchy)===null||i===void 0?void 0:i.lvl0)||{}).value;return o&&ff.test(o)?o.replace(ou,""):o}function ii(){return ii=Object.assign||function(e){for(var t=1;t=0||(d[s]=a[s]);return d}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}function yf(e){var t=e.translations,n=t===void 0?{}:t,r=kf(e,bf),l=n.recentSearchesTitle,i=l===void 0?"Recent":l,a=n.noRecentSearchesText,o=a===void 0?"No recent searches":a,s=n.saveRecentSearchButtonTitle,u=s===void 0?"Save this search":s,d=n.removeRecentSearchButtonTitle,m=d===void 0?"Remove this search from history":d,h=n.favoriteSearchesTitle,b=h===void 0?"Favorite":h,g=n.removeFavoriteSearchButtonTitle,_=g===void 0?"Remove this search from favorites":g;return r.state.status==="idle"&&r.hasCollections===!1?r.disableUserPersonalization?null:E.createElement("div",{className:"DocSearch-StartScreen"},E.createElement("p",{className:"DocSearch-Help"},o)):r.hasCollections===!1?null:E.createElement("div",{className:"DocSearch-Dropdown-Container"},E.createElement(li,$r({},r,{title:i,collection:r.state.collections[0],renderIcon:function(){return E.createElement("div",{className:"DocSearch-Hit-icon"},E.createElement(Zp,null))},renderAction:function(f){var k=f.item,w=f.runFavoriteTransition,P=f.runDeleteTransition;return E.createElement(E.Fragment,null,E.createElement("div",{className:"DocSearch-Hit-action"},E.createElement("button",{className:"DocSearch-Hit-action-button",title:u,type:"submit",onClick:function(T){T.preventDefault(),T.stopPropagation(),w(function(){r.favoriteSearches.add(k),r.recentSearches.remove(k),r.refresh()})}},E.createElement(Mo,null))),E.createElement("div",{className:"DocSearch-Hit-action"},E.createElement("button",{className:"DocSearch-Hit-action-button",title:m,type:"submit",onClick:function(T){T.preventDefault(),T.stopPropagation(),P(function(){r.recentSearches.remove(k),r.refresh()})}},E.createElement(ri,null))))}})),E.createElement(li,$r({},r,{title:b,collection:r.state.collections[1],renderIcon:function(){return E.createElement("div",{className:"DocSearch-Hit-icon"},E.createElement(Mo,null))},renderAction:function(f){var k=f.item,w=f.runDeleteTransition;return E.createElement("div",{className:"DocSearch-Hit-action"},E.createElement("button",{className:"DocSearch-Hit-action-button",title:_,type:"submit",onClick:function(P){P.preventDefault(),P.stopPropagation(),w(function(){r.favoriteSearches.remove(k),r.refresh()})}},E.createElement(ri,null)))}})))}var Ef=["translations"];function Gr(){return Gr=Object.assign||function(e){for(var t=1;t=0||(d[s]=a[s]);return d}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}var Pf=E.memo(function(e){var t=e.translations,n=t===void 0?{}:t,r=wf(e,Ef);if(r.state.status==="error")return E.createElement(of,{translations:n==null?void 0:n.errorScreen});var l=r.state.collections.some(function(i){return i.items.length>0});return r.state.query?l===!1?E.createElement(df,Gr({},r,{translations:n==null?void 0:n.noResultsScreen})):E.createElement(_f,r):E.createElement(yf,Gr({},r,{hasCollections:l,translations:n==null?void 0:n.startScreen}))},function(e,t){return t.state.status==="loading"||t.state.status==="stalled"}),Sf=["translations"];function Jr(){return Jr=Object.assign||function(e){for(var t=1;t=0||(d[s]=a[s]);return d}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}function Of(e){var t=e.translations,n=t===void 0?{}:t,r=Tf(e,Sf),l=n.resetButtonTitle,i=l===void 0?"Clear the query":l,a=n.resetButtonAriaLabel,o=a===void 0?"Clear the query":a,s=n.cancelButtonText,u=s===void 0?"Cancel":s,d=n.cancelButtonAriaLabel,m=d===void 0?"Cancel":d,h=r.getFormProps({inputElement:r.inputRef.current}).onReset;return E.useEffect(function(){r.autoFocus&&r.inputRef.current&&r.inputRef.current.focus()},[r.autoFocus,r.inputRef]),E.useEffect(function(){r.isFromSelection&&r.inputRef.current&&r.inputRef.current.select()},[r.isFromSelection,r.inputRef]),E.createElement(E.Fragment,null,E.createElement("form",{className:"DocSearch-Form",onSubmit:function(b){b.preventDefault()},onReset:h},E.createElement("label",Jr({className:"DocSearch-MagnifierLabel"},r.getLabelProps()),E.createElement(lu,null)),E.createElement("div",{className:"DocSearch-LoadingIndicator"},E.createElement(Qp,null)),E.createElement("input",Jr({className:"DocSearch-Input",ref:r.inputRef},r.getInputProps({inputElement:r.inputRef.current,autoFocus:r.autoFocus,maxLength:64}))),E.createElement("button",{type:"reset",title:i,className:"DocSearch-Reset","aria-label":o,hidden:!r.state.query},E.createElement(ri,null))),E.createElement("button",{className:"DocSearch-Cancel",type:"reset","aria-label":m,onClick:r.onClose},u))}var Af=["_highlightResult","_snippetResult"];function Lf(e,t){if(e==null)return{};var n,r,l=function(a,o){if(a==null)return{};var s,u,d={},m=Object.keys(a);for(u=0;u=0||(d[s]=a[s]);return d}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}function Df(e){return function(){var t="__TEST_KEY__";try{return localStorage.setItem(t,""),localStorage.removeItem(t),!0}catch{return!1}}()===!1?{setItem:function(){},getItem:function(){return[]}}:{setItem:function(t){return window.localStorage.setItem(e,JSON.stringify(t))},getItem:function(){var t=window.localStorage.getItem(e);return t?JSON.parse(t):[]}}}function $o(e){var t=e.key,n=e.limit,r=n===void 0?5:n,l=Df(t),i=l.getItem().slice(0,r);return{add:function(a){var o=a,s=(o._highlightResult,o._snippetResult,Lf(o,Af)),u=i.findIndex(function(d){return d.objectID===s.objectID});u>-1&&i.splice(u,1),i.unshift(s),i=i.slice(0,r),l.setItem(i)},remove:function(a){i=i.filter(function(o){return o.objectID!==a.objectID}),l.setItem(i)},getAll:function(){return i}}}var Rf=["facetName","facetQuery"];function If(e){var t,n="algoliasearch-client-js-".concat(e.key),r=function(){return t===void 0&&(t=e.localStorage||window.localStorage),t},l=function(){return JSON.parse(r().getItem(n)||"{}")};return{get:function(i,a){var o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{miss:function(){return Promise.resolve()}};return Promise.resolve().then(function(){var s=JSON.stringify(i),u=l()[s];return Promise.all([u||a(),u!==void 0])}).then(function(s){var u=Br(s,2),d=u[0],m=u[1];return Promise.all([d,m||o.miss(d)])}).then(function(s){return Br(s,1)[0]})},set:function(i,a){return Promise.resolve().then(function(){var o=l();return o[JSON.stringify(i)]=a,r().setItem(n,JSON.stringify(o)),a})},delete:function(i){return Promise.resolve().then(function(){var a=l();delete a[JSON.stringify(i)],r().setItem(n,JSON.stringify(a))})},clear:function(){return Promise.resolve().then(function(){r().removeItem(n)})}}}function Rn(e){var t=Ur(e.caches),n=t.shift();return n===void 0?{get:function(r,l){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{miss:function(){return Promise.resolve()}};return l().then(function(a){return Promise.all([a,i.miss(a)])}).then(function(a){return Br(a,1)[0]})},set:function(r,l){return Promise.resolve(l)},delete:function(r){return Promise.resolve()},clear:function(){return Promise.resolve()}}:{get:function(r,l){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{miss:function(){return Promise.resolve()}};return n.get(r,l,i).catch(function(){return Rn({caches:t}).get(r,l,i)})},set:function(r,l){return n.set(r,l).catch(function(){return Rn({caches:t}).set(r,l)})},delete:function(r){return n.delete(r).catch(function(){return Rn({caches:t}).delete(r)})},clear:function(){return n.clear().catch(function(){return Rn({caches:t}).clear()})}}}function Ol(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{serializable:!0},t={};return{get:function(n,r){var l=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{miss:function(){return Promise.resolve()}},i=JSON.stringify(n);if(i in t)return Promise.resolve(e.serializable?JSON.parse(t[i]):t[i]);var a=r(),o=l&&l.miss||function(){return Promise.resolve()};return a.then(function(s){return o(s)}).then(function(){return a})},set:function(n,r){return t[JSON.stringify(n)]=e.serializable?JSON.stringify(r):r,Promise.resolve(r)},delete:function(n){return delete t[JSON.stringify(n)],Promise.resolve()},clear:function(){return t={},Promise.resolve()}}}function Cf(e){for(var t=e.length-1;t>0;t--){var n=Math.floor(Math.random()*(t+1)),r=e[t];e[t]=e[n],e[n]=r}return e}function cu(e,t){return t&&Object.keys(t).forEach(function(n){e[n]=t[n](e)}),e}function al(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r0?r:void 0,timeout:n.timeout||t,headers:n.headers||{},queryParameters:n.queryParameters||{},cacheable:n.cacheable}}var an={Read:1,Write:2,Any:3},uu=1,xf=2,du=3;function hu(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:uu;return he(he({},e),{},{status:t,lastUpdate:Date.now()})}function gu(e){return typeof e=="string"?{protocol:"https",url:e,accept:an.Any}:{protocol:e.protocol||"https",url:e.url,accept:e.accept||an.Any}}var Jo="GET",ol="POST";function Vf(e,t){return Promise.all(t.map(function(n){return e.get(n,function(){return Promise.resolve(hu(n))})})).then(function(n){var r=n.filter(function(a){return function(o){return o.status===uu||Date.now()-o.lastUpdate>12e4}(a)}),l=n.filter(function(a){return function(o){return o.status===du&&Date.now()-o.lastUpdate<=12e4}(a)}),i=[].concat(Ur(r),Ur(l));return{getTimeout:function(a,o){return(l.length===0&&a===0?1:l.length+3+a)*o},statelessHosts:i.length>0?i.map(function(a){return gu(a)}):t}})}function Yo(e,t,n,r){var l=[],i=function(h,b){if(!(h.method===Jo||h.data===void 0&&b.data===void 0)){var g=Array.isArray(h.data)?h.data:he(he({},h.data),b.data);return JSON.stringify(g)}}(n,r),a=function(h,b){var g=he(he({},h.headers),b.headers),_={};return Object.keys(g).forEach(function(f){var k=g[f];_[f.toLowerCase()]=k}),_}(e,r),o=n.method,s=n.method!==Jo?{}:he(he({},n.data),r.data),u=he(he(he({"x-algolia-agent":e.userAgent.value},e.queryParameters),s),r.queryParameters),d=0,m=function h(b,g){var _=b.pop();if(_===void 0)throw{name:"RetryError",message:"Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.",transporterStackTrace:Qo(l)};var f={data:i,headers:a,method:o,url:jf(_,n.path,u),connectTimeout:g(d,e.timeouts.connect),responseTimeout:g(d,r.timeout)},k=function(P){var T={request:f,response:P,host:_,triesLeft:b.length};return l.push(T),T},w={onSucess:function(P){return function(T){try{return JSON.parse(T.content)}catch(D){throw function(j,L){return{name:"DeserializationError",message:j,response:L}}(D.message,T)}}(P)},onRetry:function(P){var T=k(P);return P.isTimedOut&&d++,Promise.all([e.logger.info("Retryable failure",vu(T)),e.hostsCache.set(_,hu(_,P.isTimedOut?du:xf))]).then(function(){return h(b,g)})},onFail:function(P){throw k(P),function(T,D){var j=T.content,L=T.status,O=j;try{O=JSON.parse(j).message}catch{}return function(K,B,W){return{name:"ApiError",message:K,status:B,transporterStackTrace:W}}(O,L,D)}(P,Qo(l))}};return e.requester.send(f).then(function(P){return function(T,D){return function(j){var L=j.status;return j.isTimedOut||function(O){var K=O.isTimedOut,B=O.status;return!K&&~~B==0}(j)||~~(L/100)!=2&&~~(L/100)!=4}(T)?D.onRetry(T):~~(T.status/100)==2?D.onSucess(T):D.onFail(T)}(P,w)})};return Vf(e.hostsCache,t).then(function(h){return m(Ur(h.statelessHosts).reverse(),h.getTimeout)})}function Ff(e){var t={value:"Algolia for JavaScript (".concat(e,")"),add:function(n){var r="; ".concat(n.segment).concat(n.version!==void 0?" (".concat(n.version,")"):"");return t.value.indexOf(r)===-1&&(t.value="".concat(t.value).concat(r)),t}};return t}function jf(e,t,n){var r=mu(n),l="".concat(e.protocol,"://").concat(e.url,"/").concat(t.charAt(0)==="/"?t.substr(1):t);return r.length&&(l+="?".concat(r)),l}function mu(e){return Object.keys(e).map(function(t){return al("%s=%s",t,(n=e[t],Object.prototype.toString.call(n)==="[object Object]"||Object.prototype.toString.call(n)==="[object Array]"?JSON.stringify(e[t]):e[t]));var n}).join("&")}function Qo(e){return e.map(function(t){return vu(t)})}function vu(e){var t=e.request.headers["x-algolia-api-key"]?{"x-algolia-api-key":"*****"}:{};return he(he({},e),{},{request:he(he({},e.request),{},{headers:he(he({},e.request.headers),t)})})}var Nf=function(e){var t=e.appId,n=function(i,a,o){var s={"x-algolia-api-key":o,"x-algolia-application-id":a};return{headers:function(){return i===Sr.WithinHeaders?s:{}},queryParameters:function(){return i===Sr.WithinQueryParameters?s:{}}}}(e.authMode!==void 0?e.authMode:Sr.WithinHeaders,t,e.apiKey),r=function(i){var a=i.hostsCache,o=i.logger,s=i.requester,u=i.requestsCache,d=i.responsesCache,m=i.timeouts,h=i.userAgent,b=i.hosts,g=i.queryParameters,_={hostsCache:a,logger:o,requester:s,requestsCache:u,responsesCache:d,timeouts:m,userAgent:h,headers:i.headers,queryParameters:g,hosts:b.map(function(f){return gu(f)}),read:function(f,k){var w=Go(k,_.timeouts.read),P=function(){return Yo(_,_.hosts.filter(function(D){return(D.accept&an.Read)!=0}),f,w)};if((w.cacheable!==void 0?w.cacheable:f.cacheable)!==!0)return P();var T={request:f,mappedRequestOptions:w,transporter:{queryParameters:_.queryParameters,headers:_.headers}};return _.responsesCache.get(T,function(){return _.requestsCache.get(T,function(){return _.requestsCache.set(T,P()).then(function(D){return Promise.all([_.requestsCache.delete(T),D])},function(D){return Promise.all([_.requestsCache.delete(T),Promise.reject(D)])}).then(function(D){var j=Br(D,2);return j[0],j[1]})})},{miss:function(D){return _.responsesCache.set(T,D)}})},write:function(f,k){return Yo(_,_.hosts.filter(function(w){return(w.accept&an.Write)!=0}),f,Go(k,_.timeouts.write))}};return _}(he(he({hosts:[{url:"".concat(t,"-dsn.algolia.net"),accept:an.Read},{url:"".concat(t,".algolia.net"),accept:an.Write}].concat(Cf([{url:"".concat(t,"-1.algolianet.com")},{url:"".concat(t,"-2.algolianet.com")},{url:"".concat(t,"-3.algolianet.com")}]))},e),{},{headers:he(he(he({},n.headers()),{"content-type":"application/x-www-form-urlencoded"}),e.headers),queryParameters:he(he({},n.queryParameters()),e.queryParameters)})),l={transporter:r,appId:t,addAlgoliaAgent:function(i,a){r.userAgent.add({segment:i,version:a})},clearCache:function(){return Promise.all([r.requestsCache.clear(),r.responsesCache.clear()]).then(function(){})}};return cu(l,e.methods)},pu=function(e){return function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r={transporter:e.transporter,appId:e.appId,indexName:t};return cu(r,n.methods)}},Zo=function(e){return function(t,n){var r=t.map(function(l){return he(he({},l),{},{params:mu(l.params||{})})});return e.transporter.read({method:ol,path:"1/indexes/*/queries",data:{requests:r},cacheable:!0},n)}},Xo=function(e){return function(t,n){return Promise.all(t.map(function(r){var l=r.params,i=l.facetName,a=l.facetQuery,o=Wv(l,Rf);return pu(e)(r.indexName,{methods:{searchForFacetValues:fu}}).searchForFacetValues(i,a,he(he({},n),o))}))}},Mf=function(e){return function(t,n,r){return e.transporter.read({method:ol,path:al("1/answers/%s/prediction",e.indexName),data:{query:t,queryLanguages:n},cacheable:!0},r)}},zf=function(e){return function(t,n){return e.transporter.read({method:ol,path:al("1/indexes/%s/query",e.indexName),data:{query:t},cacheable:!0},n)}},fu=function(e){return function(t,n,r){return e.transporter.read({method:ol,path:al("1/indexes/%s/facets/%s/query",e.indexName,t),data:{facetQuery:n},cacheable:!0},r)}},Hf=1,Bf=2,Uf=3;function _u(e,t,n){var r,l={appId:e,apiKey:t,timeouts:{connect:1,read:2,write:30},requester:{send:function(i){return new Promise(function(a){var o=new XMLHttpRequest;o.open(i.method,i.url,!0),Object.keys(i.headers).forEach(function(m){return o.setRequestHeader(m,i.headers[m])});var s,u=function(m,h){return setTimeout(function(){o.abort(),a({status:0,content:h,isTimedOut:!0})},1e3*m)},d=u(i.connectTimeout,"Connection timeout");o.onreadystatechange=function(){o.readyState>o.OPENED&&s===void 0&&(clearTimeout(d),s=u(i.responseTimeout,"Socket timeout"))},o.onerror=function(){o.status===0&&(clearTimeout(d),clearTimeout(s),a({content:o.responseText||"Network request failed",status:o.status,isTimedOut:!1}))},o.onload=function(){clearTimeout(d),clearTimeout(s),a({content:o.responseText,status:o.status,isTimedOut:!1})},o.send(i.data)})}},logger:(r=Uf,{debug:function(i,a){return Hf>=r&&console.debug(i,a),Promise.resolve()},info:function(i,a){return Bf>=r&&console.info(i,a),Promise.resolve()},error:function(i,a){return console.error(i,a),Promise.resolve()}}),responsesCache:Ol(),requestsCache:Ol({serializable:!1}),hostsCache:Rn({caches:[If({key:"".concat("4.8.5","-").concat(e)}),Ol()]}),userAgent:Ff("4.8.5").add({segment:"Browser",version:"lite"}),authMode:Sr.WithinQueryParameters};return Nf(he(he(he({},l),n),{},{methods:{search:Zo,searchForFacetValues:Xo,multipleQueries:Zo,multipleSearchForFacetValues:Xo,initIndex:function(i){return function(a){return pu(i)(a,{methods:{search:zf,searchForFacetValues:fu,findAnswers:Mf}})}}}}))}_u.version="4.8.5";var Kf=["footer","searchBox"];function Hn(){return Hn=Object.assign||function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0||(d[s]=a[s]);return d}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}function Gf(e){var t=e.appId,n=t===void 0?"BH4D9OD16A":t,r=e.apiKey,l=e.indexName,i=e.placeholder,a=i===void 0?"Search docs":i,o=e.searchParameters,s=e.onClose,u=s===void 0?pf:s,d=e.transformItems,m=d===void 0?Wo:d,h=e.hitComponent,b=h===void 0?Yp:h,g=e.resultsFooterComponent,_=g===void 0?function(){return null}:g,f=e.navigator,k=e.initialScrollY,w=k===void 0?0:k,P=e.transformSearchClient,T=P===void 0?Wo:P,D=e.disableUserPersonalization,j=D!==void 0&&D,L=e.initialQuery,O=L===void 0?"":L,K=e.translations,B=K===void 0?{}:K,W=B.footer,A=B.searchBox,H=$f(B,Kf),Q=Wf(E.useState({query:"",collections:[],completion:null,context:{},isOpen:!1,activeItemId:null,status:"idle"}),2),se=Q[0],J=Q[1],re=E.useRef(null),le=E.useRef(null),we=E.useRef(null),Te=E.useRef(null),Ae=E.useRef(null),Pe=E.useRef(10),Ie=E.useRef(typeof window!="undefined"?window.getSelection().toString().slice(0,64):"").current,He=E.useRef(O||Ie).current,I=function(p,y,S){return E.useMemo(function(){var R=_u(p,y);return R.addAlgoliaAgent("docsearch","3.0.0-alpha.42"),/docsearch.js \(.*\)/.test(R.transporter.userAgent.value)===!1&&R.addAlgoliaAgent("docsearch-react","3.0.0-alpha.42"),S(R)},[p,y,S])}(n,r,T),U=E.useRef($o({key:"__DOCSEARCH_FAVORITE_SEARCHES__".concat(l),limit:10})).current,N=E.useRef($o({key:"__DOCSEARCH_RECENT_SEARCHES__".concat(l),limit:U.getAll().length===0?7:4})).current,q=E.useCallback(function(p){if(!j){var y=p.type==="content"?p.__docsearch_parent:p;y&&U.getAll().findIndex(function(S){return S.objectID===y.objectID})===-1&&N.add(y)}},[U,N,j]),ue=E.useMemo(function(){return $p({id:"docsearch",defaultActiveItemId:0,placeholder:a,openOnFocus:!0,initialState:{query:He,context:{searchSuggestions:[]}},navigator:f,onStateChange:function(p){J(p.state)},getSources:function(p){var y=p.query,S=p.state,R=p.setContext,C=p.setStatus;return y?I.search([{query:y,indexName:l,params:Al({attributesToRetrieve:["hierarchy.lvl0","hierarchy.lvl1","hierarchy.lvl2","hierarchy.lvl3","hierarchy.lvl4","hierarchy.lvl5","hierarchy.lvl6","content","type","url"],attributesToSnippet:["hierarchy.lvl1:".concat(Pe.current),"hierarchy.lvl2:".concat(Pe.current),"hierarchy.lvl3:".concat(Pe.current),"hierarchy.lvl4:".concat(Pe.current),"hierarchy.lvl5:".concat(Pe.current),"hierarchy.lvl6:".concat(Pe.current),"content:".concat(Pe.current)],snippetEllipsisText:"\u2026",highlightPreTag:"",highlightPostTag:"",hitsPerPage:20},o)}]).catch(function(x){throw x.name==="RetryError"&&C("error"),x}).then(function(x){var M=x.results[0],V=M.hits,z=M.nbHits,F=qo(V,function(Y){return su(Y)});return S.context.searchSuggestions.length0&&(ne(),Ae.current&&Ae.current.focus())},[He,ne]),E.useEffect(function(){function p(){if(le.current){var y=.01*window.innerHeight;le.current.style.setProperty("--docsearch-vh","".concat(y,"px"))}}return p(),window.addEventListener("resize",p),function(){window.removeEventListener("resize",p)}},[]),E.createElement("div",Hn({ref:re},ie({"aria-expanded":!0}),{className:["DocSearch","DocSearch-Container",se.status==="stalled"&&"DocSearch-Container--Stalled",se.status==="error"&&"DocSearch-Container--Errored"].filter(Boolean).join(" "),role:"button",tabIndex:0,onMouseDown:function(p){p.target===p.currentTarget&&u()}}),E.createElement("div",{className:"DocSearch-Modal",ref:le},E.createElement("header",{className:"DocSearch-SearchBar",ref:we},E.createElement(Of,Hn({},ue,{state:se,autoFocus:He.length===0,inputRef:Ae,isFromSelection:Boolean(He)&&He===Ie,translations:A,onClose:u}))),E.createElement("div",{className:"DocSearch-Dropdown",ref:Te},E.createElement(Pf,Hn({},ue,{indexName:l,state:se,hitComponent:b,resultsFooterComponent:_,disableUserPersonalization:j,recentSearches:N,favoriteSearches:U,inputRef:Ae,translations:H,onItemClick:function(p){q(p),u()}}))),E.createElement("footer",{className:"DocSearch-Footer"},E.createElement(Jp,{translations:W}))))}function ai(){return ai=Object.assign||function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n1&&arguments[1]!==void 0?arguments[1]:window;return typeof t=="string"?n.document.querySelector(t):t}(e.container,e.environment))}var bu,oi,ku,Qf=[];function Zf(e,t,n){var r,l,i,a={};for(i in t)i=="key"?r=t[i]:i=="ref"?l=t[i]:a[i]=t[i];if(arguments.length>2&&(a.children=arguments.length>3?bu.call(arguments,2):n),typeof e=="function"&&e.defaultProps!=null)for(i in e.defaultProps)a[i]===void 0&&(a[i]=e.defaultProps[i]);return Xf(e,a,r,l,null)}function Xf(e,t,n,r,l){var i={type:e,props:t,key:n,ref:r,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:l==null?++ku:l};return l==null&&oi.vnode!=null&&oi.vnode(i),i}bu=Qf.slice,oi={__e:function(e,t){for(var n,r,l;t=t.__;)if((n=t.__c)&&!n.__)try{if((r=n.constructor)&&r.getDerivedStateFromError!=null&&(n.setState(r.getDerivedStateFromError(e)),l=n.__d),n.componentDidCatch!=null&&(n.componentDidCatch(e),l=n.__d),l)return n.__E=n}catch(i){e=i}throw e}},ku=0,typeof Promise=="function"&&Promise.prototype.then.bind(Promise.resolve());const e_=e=>e.button===1||e.altKey||e.ctrlKey||e.metaKey||e.shiftKey,t_=()=>{const e=rr(),t=Tc();return{transformItems:n=>n.map(r=>Lt(xe({},r),{url:wm(r.url,t.value.base)})),hitComponent:({hit:n,children:r})=>Zf("a",{href:n.url,onClick:l=>{e_(l)||(l.preventDefault(),e.push(n.url))}},r),navigator:{navigate:({itemUrl:n})=>{e.push(n)}}}};const n_=ze({name:"Docsearch",props:{options:{type:Object,required:!0}},setup(e){const t=ji(),n=Sc(),r=t_(),l=_e(()=>{var o;return xe(xe({},e.options),(o=e.options.locales)===null||o===void 0?void 0:o[t.value])}),i=[],a=()=>{var o,s;const u=(s=(o=l.value.searchParameters)===null||o===void 0?void 0:o.facetFilters)!==null&&s!==void 0?s:[];i.splice(0,i.length,`lang:${n.value}`,...te(u)?u:[u]),Yf(Lt(xe(xe({},r),l.value),{container:"#docsearch-container",searchParameters:Lt(xe({},l.value.searchParameters),{facetFilters:i})}))};return tt(()=>{a(),et([t,l],([o,s],[u,d])=>{o!==u&&JSON.stringify(s)!==JSON.stringify(d)&&a()}),et(n,(o,s)=>{if(o!==s){const u=i.findIndex(d=>d===`lang:${s}`);u>-1&&i.splice(u,1,`lang:${o}`)}})}),()=>ee("div",{id:"docsearch-container"})}}),r_={apiKey:"1831a64a81ffef4f85d5c0aa28cb801f",indexName:"solanacookbook",appId:"QMKSKREFKN",algoliaOptions:{hitsPerPage:10},locales:{"/":{placeholder:"Search",translations:{button:{buttonText:"Search"}}},"/zh/":{placeholder:"\u641C\u7D22\u6587\u6863",translations:{button:{buttonText:"\u641C\u7D22\u6587\u6863"}}},"/vi/":{placeholder:"T\xECm ki\u1EBFm",translations:{button:{buttonText:"T\xECm ki\u1EBFm"}}},"/th/":{placeholder:"\u0E04\u0E49\u0E19\u0E2B\u0E32",translations:{button:{buttonText:"\u0E04\u0E49\u0E19\u0E2B\u0E32"}}},"/fr/":{placeholder:"Rechercher",translations:{button:{buttonText:"Rechercher"}}},"/id/":{placeholder:"Cari",translations:{button:{buttonText:"Cari"}}},"/kr/":{placeholder:"\uAC80\uC0C9",translations:{button:{buttonText:"\uAC80\uC0C9"}}}}};var l_=At(({app:e})=>{e.component("Docsearch",()=>ee(n_,{options:r_}))});const yu=ze({name:"SolanaCodeGroup",setup(e,{slots:t}){var b;const n=Ee(-1),r=Ee([]),l=(g=n.value)=>{g{g>0?n.value=g-1:n.value=r.value.length-1,r.value[n.value].focus()},a=(g,_)=>{g.key===" "||g.key==="Enter"?(g.preventDefault(),n.value=_):g.key==="ArrowRight"?(g.preventDefault(),l(_)):g.key==="ArrowLeft"&&(g.preventDefault(),i(_))},o=((b=t.default)==null?void 0:b.call(t))||[];let s=!1;o.forEach(g=>{Object.keys(g.children).includes("preview")&&(s=!0)});const u=Ee(s),d=()=>{u.value=!u.value};function m(g){return g.map(_=>{var f;return((f=_.props)==null?void 0:f.class)==="line-number"?"":typeof _.children=="string"?_.children:Array.isArray(_.children)?m(_.children):""}).join("")}const h=()=>{let g=o.find((w,P)=>P===n.value),_=u.value?g.children.preview():g.children.default(),f=m(_),k=[new ClipboardItem({"text/plain":new Blob([f],{type:"text/plain"})})];navigator.clipboard.write(k)};return()=>{var _;const g=(((_=t.default)==null?void 0:_.call(t))||[]).map(f=>(f.props===null&&(f.props={preview:u}),f));return g.length===0?null:(n.value<0||n.value>g.length-1?(n.value=g.findIndex(f=>f.props.active===""||f.props.active===!0),n.value===-1&&(n.value=0)):g.forEach((f,k)=>{f.props.active=k===n.value,f.props.preview=u.value}),ee("div",{class:"code-group"},[ee("div",{class:"code-group__nav"},ee("ul",{class:"code-group__ul"},g.map((f,k)=>{const w=k===n.value;return ee("li",{class:"code-group__li"},ee("button",{ref:P=>{P&&(r.value[k]=P)},class:{"code-group__nav-tab":!0,"code-group__nav-tab-active":w},ariaPressed:w,ariaExpanded:w,onClick:()=>n.value=k,onKeydown:P=>a(P,k)},f.props.title))}),ee("li",{class:"flex-grow"}),ee("li",{class:"code-group__li"},ee("button",{class:{"code-group__nav-tab":!0},onClick:()=>d()},ee("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none"},ee("path",{stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":2,d:"M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4"})))),ee("li",{class:"code-group__li"},ee("button",{class:{"code-group__nav-tab":!0},onClick:()=>h()},ee("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none"},ee("path",{stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":2,d:"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"})))))),ee("div",[u.value?ee("div",{class:"code-info-title"},"Press  button to view full source"):null]),g]))}}});var i_=Object.freeze({__proto__:null,[Symbol.toStringTag]:"Module",default:yu});var a_=(e,t)=>{const n=e.__vccOpts||e;for(const[r,l]of t)n[r]=l;return n};const o_={name:"SolanaCodeGroupItem",props:{title:{type:String,required:!0},active:{type:Boolean,required:!1,default:!1},preview:{type:Boolean,required:!1,default:!1}}},s_=["aria-selected"];function c_(e,t,n,r,l,i){return nr(),Ai("div",{class:wt(["code-group-item",{"code-group-item__active":n.active}]),"aria-selected":n.active},[Fr("div",{class:wt({hidden:n.preview})},[jr(e.$slots,"default",{},void 0,!0)],2),Fr("div",{class:wt({hidden:!n.preview})},[jr(e.$slots,"preview",{},void 0,!0)],2)],10,s_)}var Eu=a_(o_,[["render",c_],["__scopeId","data-v-6ae3d40e"]]),u_=Object.freeze({__proto__:null,[Symbol.toStringTag]:"Module",default:Eu});var d_=At(({app:e,router:t,siteData:n})=>{e.component("SolanaCodeGroup",yu),e.component("SolanaCodeGroupItem",Eu)});const h_=[Am,zm,qm,Av,Rv,Uv,Kv,l_,d_];function wu(e,t,n){var r,l,i;t===void 0&&(t=50),n===void 0&&(n={});var a=(r=n.isImmediate)!=null&&r,o=(l=n.callback)!=null&&l,s=n.maxWait,u=Date.now(),d=[];function m(){if(s!==void 0){var b=Date.now()-u;if(b+t>=s)return s-b}return t}var h=function(){var b=[].slice.call(arguments),g=this;return new Promise(function(_,f){var k=a&&i===void 0;if(i!==void 0&&clearTimeout(i),i=setTimeout(function(){if(i=void 0,u=Date.now(),!a){var P=e.apply(g,b);o&&o(P),d.forEach(function(T){return(0,T.resolve)(P)}),d=[]}},m()),k){var w=e.apply(g,b);return o&&o(w),_(w)}d.push({resolve:_,reject:f})})};return h.cancel=function(b){i!==void 0&&clearTimeout(i),d.forEach(function(g){return(0,g.reject)(b)}),d=[]},h}const ls=()=>window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,g_=()=>window.scrollTo({top:0,behavior:"smooth"});const m_=ze({name:"BackToTop",setup(){const e=Ee(0),t=_e(()=>e.value>300),n=wu(()=>{e.value=ls()},100);tt(()=>{e.value=ls(),window.addEventListener("scroll",()=>n())});const r=ee("div",{class:"back-to-top",onClick:g_});return()=>ee(Ii,{name:"back-to-top"},()=>t.value?r:null)}}),v_=[m_],p_=({headerLinkSelector:e,headerAnchorSelector:t,delay:n,offset:r=5})=>{const l=rr(),i=lr(),o=wu(()=>{var s,u,d,m;const h=Array.from(document.querySelectorAll(e)),g=Array.from(document.querySelectorAll(t)).filter(P=>h.some(T=>T.hash===P.hash)),_=Math.max(window.pageYOffset,document.documentElement.scrollTop,document.body.scrollTop),f=window.innerHeight+_,k=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight),w=Math.abs(k-f)=((u=(s=T.parentElement)===null||s===void 0?void 0:s.offsetTop)!==null&&u!==void 0?u:0)-r,O=!D||_<((m=(d=D.parentElement)===null||d===void 0?void 0:d.offsetTop)!==null&&m!==void 0?m:0)-r;if(!(j||L&&O))continue;const B=decodeURIComponent(l.currentRoute.value.hash),W=decodeURIComponent(T.hash);if(B===W)return;if(w){for(let A=P+1;A{o(),window.addEventListener("scroll",o)}),nl(()=>{window.removeEventListener("scroll",o)}),et(()=>i.value.path,o)},f_=async(e,...t)=>{const{scrollBehavior:n}=e.options;e.options.scrollBehavior=void 0,await e.replace(...t).finally(()=>e.options.scrollBehavior=n)},__="a.sidebar-item",b_=".header-anchor",k_=300,y_=5;var E_=Mi(()=>{p_({headerLinkSelector:__,headerAnchorSelector:b_,delay:k_,offset:y_})}),w_=typeof globalThis!="undefined"?globalThis:typeof window!="undefined"?window:typeof global!="undefined"?global:typeof self!="undefined"?self:{},Tr={exports:{}};/* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress
+ * @license MIT */(function(e,t){(function(n,r){e.exports=r()})(w_,function(){var n={};n.version="0.2.0";var r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'
'};n.configure=function(g){var _,f;for(_ in g)f=g[_],f!==void 0&&g.hasOwnProperty(_)&&(r[_]=f);return this},n.status=null,n.set=function(g){var _=n.isStarted();g=l(g,r.minimum,1),n.status=g===1?null:g;var f=n.render(!_),k=f.querySelector(r.barSelector),w=r.speed,P=r.easing;return f.offsetWidth,o(function(T){r.positionUsing===""&&(r.positionUsing=n.getPositioningCSS()),s(k,a(g,w,P)),g===1?(s(f,{transition:"none",opacity:1}),f.offsetWidth,setTimeout(function(){s(f,{transition:"all "+w+"ms linear",opacity:0}),setTimeout(function(){n.remove(),T()},w)},w)):setTimeout(T,w)}),this},n.isStarted=function(){return typeof n.status=="number"},n.start=function(){n.status||n.set(0);var g=function(){setTimeout(function(){!n.status||(n.trickle(),g())},r.trickleSpeed)};return r.trickle&&g(),this},n.done=function(g){return!g&&!n.status?this:n.inc(.3+.5*Math.random()).set(1)},n.inc=function(g){var _=n.status;return _?(typeof g!="number"&&(g=(1-_)*l(Math.random()*_,.1,.95)),_=l(_+g,0,.994),n.set(_)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},function(){var g=0,_=0;n.promise=function(f){return!f||f.state()==="resolved"?this:(_===0&&n.start(),g++,_++,f.always(function(){_--,_===0?(g=0,n.done()):n.set((g-_)/g)}),this)}}(),n.render=function(g){if(n.isRendered())return document.getElementById("nprogress");d(document.documentElement,"nprogress-busy");var _=document.createElement("div");_.id="nprogress",_.innerHTML=r.template;var f=_.querySelector(r.barSelector),k=g?"-100":i(n.status||0),w=document.querySelector(r.parent),P;return s(f,{transition:"all 0 linear",transform:"translate3d("+k+"%,0,0)"}),r.showSpinner||(P=_.querySelector(r.spinnerSelector),P&&b(P)),w!=document.body&&d(w,"nprogress-custom-parent"),w.appendChild(_),_},n.remove=function(){m(document.documentElement,"nprogress-busy"),m(document.querySelector(r.parent),"nprogress-custom-parent");var g=document.getElementById("nprogress");g&&b(g)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var g=document.body.style,_="WebkitTransform"in g?"Webkit":"MozTransform"in g?"Moz":"msTransform"in g?"ms":"OTransform"in g?"O":"";return _+"Perspective"in g?"translate3d":_+"Transform"in g?"translate":"margin"};function l(g,_,f){return g<_?_:g>f?f:g}function i(g){return(-1+g)*100}function a(g,_,f){var k;return r.positionUsing==="translate3d"?k={transform:"translate3d("+i(g)+"%,0,0)"}:r.positionUsing==="translate"?k={transform:"translate("+i(g)+"%,0)"}:k={"margin-left":i(g)+"%"},k.transition="all "+_+"ms "+f,k}var o=function(){var g=[];function _(){var f=g.shift();f&&f(_)}return function(f){g.push(f),g.length==1&&_()}}(),s=function(){var g=["Webkit","O","Moz","ms"],_={};function f(T){return T.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,function(D,j){return j.toUpperCase()})}function k(T){var D=document.body.style;if(T in D)return T;for(var j=g.length,L=T.charAt(0).toUpperCase()+T.slice(1),O;j--;)if(O=g[j]+L,O in D)return O;return T}function w(T){return T=f(T),_[T]||(_[T]=k(T))}function P(T,D,j){D=w(D),T.style[D]=j}return function(T,D){var j=arguments,L,O;if(j.length==2)for(L in D)O=D[L],O!==void 0&&D.hasOwnProperty(L)&&P(T,L,O);else P(T,j[1],j[2])}}();function u(g,_){var f=typeof g=="string"?g:h(g);return f.indexOf(" "+_+" ")>=0}function d(g,_){var f=h(g),k=f+_;u(f,_)||(g.className=k.substring(1))}function m(g,_){var f=h(g),k;!u(g,_)||(k=f.replace(" "+_+" "," "),g.className=k.substring(1,k.length-1))}function h(g){return(" "+(g.className||"")+" ").replace(/\s+/gi," ")}function b(g){g&&g.parentNode&&g.parentNode.removeChild(g)}return n})})(Tr);const P_=()=>{tt(()=>{const e=rr(),t=new Set;t.add(e.currentRoute.value.path),Tr.exports.configure({showSpinner:!1}),e.beforeEach(n=>{t.has(n.path)||Tr.exports.start()}),e.afterEach(n=>{t.add(n.path),Tr.exports.done()})})};var S_=Mi(()=>{P_()}),T_=Mi(()=>{_v(),wv()});const O_=[E_,S_,T_],A_=[["v-8daa1a0e","/",{title:"Cooking with Solana"},["/index.html","/README.md"]],["v-6bf54404","/core-concepts/accounts.html",{title:"Accounts"},["/core-concepts/accounts","/core-concepts/accounts.md"]],["v-5f0a12cc","/core-concepts/cpi.html",{title:"Cross Program Invocations (CPIs)"},["/core-concepts/cpi","/core-concepts/cpi.md"]],["v-130ca978","/core-concepts/pdas.html",{title:"Program Derived Addresses (PDAs)"},["/core-concepts/pdas","/core-concepts/pdas.md"]],["v-882009ca","/core-concepts/programs.html",{title:"Programs"},["/core-concepts/programs","/core-concepts/programs.md"]],["v-63197375","/core-concepts/transactions.html",{title:"Transactions"},["/core-concepts/transactions","/core-concepts/transactions.md"]],["v-2d0a87a8","/es/",{title:"Libro de recetas de Solana"},["/es/index.html","/es/README.md"]],["v-2d0a8235","/de/",{title:"Kochen mit Solana"},["/de/index.html","/de/README.md"]],["v-4e8563af","/getting-started/installation.html",{title:"Installation"},["/getting-started/installation","/getting-started/installation.md"]],["v-76b1e9e3","/guides/account-maps.html",{title:"Account Maps"},["/guides/account-maps","/guides/account-maps.md"]],["v-6da58eef","/guides/data-migration.html",{title:"Migrating Program Data Accounts"},["/guides/data-migration","/guides/data-migration.md"]],["v-4684263f","/guides/debugging-solana-programs.html",{title:"Debugging Solana Programs"},["/guides/debugging-solana-programs","/guides/debugging-solana-programs.md"]],["v-4740871a","/guides/feature-parity-testing.html",{title:"Feature Parity Testing"},["/guides/feature-parity-testing","/guides/feature-parity-testing.md"]],["v-2b9a5458","/guides/get-program-accounts.html",{title:"Get Program Accounts"},["/guides/get-program-accounts","/guides/get-program-accounts.md"]],["v-5a9d5a10","/guides/retrying-transactions.html",{title:"Retrying Transactions"},["/guides/retrying-transactions","/guides/retrying-transactions.md"]],["v-2e379628","/guides/serialization.html",{title:"Serializing Data"},["/guides/serialization","/guides/serialization.md"]],["v-7e81f36f","/guides/versioned-transactions.html",{title:"Versioned Transactions"},["/guides/versioned-transactions","/guides/versioned-transactions.md"]],["v-2d0a8b4a","/fr/",{title:"Solana Cookbook"},["/fr/index.html","/fr/README.md"]],["v-2d0a94db","/id/",{title:"Buku Panduan Solana"},["/id/index.html","/id/README.md"]],["v-100dc897","/integrations/",{title:"Getting Started"},["/integrations/index.html","/integrations/README.md"]],["v-13513bf3","/integrations/jupiter.html",{title:"Jupiter"},["/integrations/jupiter","/integrations/jupiter.md"]],["v-7f12be2e","/integrations/mango.html",{title:"Mango Markets"},["/integrations/mango","/integrations/mango.md"]],["v-0bf487b4","/integrations/orao-vrf.html",{title:"ORAO VRF"},["/integrations/orao-vrf","/integrations/orao-vrf.md"]],["v-6bb05bf6","/integrations/pyth.html",{title:"Pyth"},["/integrations/pyth","/integrations/pyth.md"]],["v-78a2a41d","/integrations/react-native.html",{title:"React Native"},["/integrations/react-native","/integrations/react-native.md"]],["v-0a8f60b8","/integrations/serum.html",{title:"Serum"},["/integrations/serum","/integrations/serum.md"]],["v-402eef45","/integrations/strata.html",{title:"Strata"},["/integrations/strata","/integrations/strata.md"]],["v-4d26b27e","/integrations/switchboard.html",{title:"Switchboard"},["/integrations/switchboard","/integrations/switchboard.md"]],["v-da1de70a","/integrations/web3auth.html",{title:"web3Auth (Torus Wallet)"},["/integrations/web3auth","/integrations/web3auth.md"]],["v-2d0a9e0f","/kr/",{title:"Cooking with Solana"},["/kr/index.html","/kr/README.md"]],["v-6c467d65","/references/accounts.html",{title:"Accounts"},["/references/accounts","/references/accounts.md"]],["v-70f9aa12","/references/basic-transactions.html",{title:"Sending Transactions"},["/references/basic-transactions","/references/basic-transactions.md"]],["v-4dc29afa","/references/keypairs-and-wallets.html",{title:"Keypairs and Wallets"},["/references/keypairs-and-wallets","/references/keypairs-and-wallets.md"]],["v-10b56a2e","/references/local-development.html",{title:"Local Development"},["/references/local-development","/references/local-development.md"]],["v-9eccd210","/references/name-service.html",{title:"Name Service"},["/references/name-service","/references/name-service.md"]],["v-d2aec298","/references/nfts.html",{title:"NFTs"},["/references/nfts","/references/nfts.md"]],["v-f8950628","/references/offline-transactions.html",{title:"Sending Offline Transactions"},["/references/offline-transactions","/references/offline-transactions.md"]],["v-877d9708","/references/programs.html",{title:"Writing Programs"},["/references/programs","/references/programs.md"]],["v-26f90ae0","/references/staking.html",{title:"Staking"},["/references/staking","/references/staking.md"]],["v-0d096f0e","/references/token.html",{title:"Interacting with Tokens"},["/references/token","/references/token.md"]],["v-2d0abea2","/th/",{title:"Cooking \u0E01\u0E31\u0E1A Solana"},["/th/index.html","/th/README.md"]],["v-2d0abfd8","/tr/",{title:"Solana Cookbook"},["/tr/index.html","/tr/README.md"]],["v-2d0ac643","/vi/",{title:"Nh\u1EADp m\xF4n Solana"},["/vi/index.html","/vi/README.md"]],["v-2d0ad528","/zh/",{title:"Solana\u79D8\u7C4D"},["/zh/index.html","/zh/README.md"]],["v-08458c16","/es/core-concepts/accounts.html",{title:"Cuentas"},["/es/core-concepts/accounts","/es/core-concepts/accounts.md"]],["v-79377c96","/es/core-concepts/pdas.html",{title:"Direcciones derivadas de programa (PDAs)"},["/es/core-concepts/pdas","/es/core-concepts/pdas.md"]],["v-4bd7f10c","/es/core-concepts/programs.html",{title:"Programas"},["/es/core-concepts/programs","/es/core-concepts/programs.md"]],["v-314308e6","/es/core-concepts/transactions.html",{title:"Transacciones"},["/es/core-concepts/transactions","/es/core-concepts/transactions.md"]],["v-389f60e0","/es/getting-started/installation.html",{title:"Instalaci\xF3n"},["/es/getting-started/installation","/es/getting-started/installation.md"]],["v-471a2192","/es/guides/account-maps.html",{title:"C\xF3mo usar Map en cuentas"},["/es/guides/account-maps","/es/guides/account-maps.md"]],["v-7642d244","/es/guides/data-migration.html",{title:"Migrando cuentas de datos de programas"},["/es/guides/data-migration","/es/guides/data-migration.md"]],["v-6c0a22f0","/es/guides/debugging-solana-programs.html",{title:"Depurando Programas en Solana"},["/es/guides/debugging-solana-programs","/es/guides/debugging-solana-programs.md"]],["v-35856562","/es/guides/feature-parity-testing.html",{title:"Prueba de paridad de caracter\xEDsticas"},["/es/guides/feature-parity-testing","/es/guides/feature-parity-testing.md"]],["v-3d8822fa","/es/guides/get-program-accounts.html",{title:"Obtener cuentas de programa"},["/es/guides/get-program-accounts","/es/guides/get-program-accounts.md"]],["v-44b75741","/es/guides/retrying-transactions.html",{title:"Reintentando Transacciones"},["/es/guides/retrying-transactions","/es/guides/retrying-transactions.md"]],["v-6ad65459","/es/guides/serialization.html",{title:"Serializando datos"},["/es/guides/serialization","/es/guides/serialization.md"]],["v-3caeb514","/es/references/accounts.html",{title:"Cuentas"},["/es/references/accounts","/es/references/accounts.md"]],["v-20a8d3e6","/es/references/basic-transactions.html",{title:"Enviando transacciones"},["/es/references/basic-transactions","/es/references/basic-transactions.md"]],["v-17bc77ae","/es/references/keypairs-and-wallets.html",{title:"Pares de llaves y billeteras"},["/es/references/keypairs-and-wallets","/es/references/keypairs-and-wallets.md"]],["v-0a613142","/es/references/local-development.html",{title:"Desarrollo en entorno local"},["/es/references/local-development","/es/references/local-development.md"]],["v-1db05f27","/es/references/name-service.html",{title:"Servicio de nombres"},["/es/references/name-service","/es/references/name-service.md"]],["v-6f8605e3","/es/references/nfts.html",{title:"NFTs"},["/es/references/nfts","/es/references/nfts.md"]],["v-2a14a61b","/es/references/offline-transactions.html",{title:"Enviando transacciones offline"},["/es/references/offline-transactions","/es/references/offline-transactions.md"]],["v-e6ad27aa","/es/references/programs.html",{title:"Escribiendo Programas"},["/es/references/programs","/es/references/programs.md"]],["v-8d23ddfe","/es/references/staking.html",{title:"Staking"},["/es/references/staking","/es/references/staking.md"]],["v-4fd8edbf","/es/references/token.html",{title:"Interactuando con tokens"},["/es/references/token","/es/references/token.md"]],["v-8e5be170","/de/core-concepts/accounts.html",{title:"Accounts"},["/de/core-concepts/accounts","/de/core-concepts/accounts.md"]],["v-f2328ef0","/de/core-concepts/pdas.html",{title:"Programmabgeleitete Adressen (PDAs)"},["/de/core-concepts/pdas","/de/core-concepts/pdas.md"]],["v-08ccc65f","/de/core-concepts/programs.html",{title:"Programme"},["/de/core-concepts/programs","/de/core-concepts/programs.md"]],["v-1256fcb9","/de/core-concepts/transactions.html",{title:"Transaktionen"},["/de/core-concepts/transactions","/de/core-concepts/transactions.md"]],["v-2485abf3","/de/getting-started/installation.html",{title:"Installation"},["/de/getting-started/installation","/de/getting-started/installation.md"]],["v-1832f5c2","/de/guides/account-maps.html",{title:"Kontozuordnungen"},["/de/guides/account-maps","/de/guides/account-maps.md"]],["v-70204b2b","/de/guides/data-migration.html",{title:"Migrieren von Programmdatenkonten"},["/de/guides/data-migration","/de/guides/data-migration.md"]],["v-16deac83","/de/guides/debugging-solana-programs.html",{title:"Debuggen von Solana-Programmen"},["/de/guides/debugging-solana-programs","/de/guides/debugging-solana-programs.md"]],["v-732f06a2","/de/guides/feature-parity-testing.html",{title:"Funktionsparit\xE4tstest"},["/de/guides/feature-parity-testing","/de/guides/feature-parity-testing.md"]],["v-22a67510","/de/guides/get-program-accounts.html",{title:"Programmkonten Abfragen"},["/de/guides/get-program-accounts","/de/guides/get-program-accounts.md"]],["v-309da254","/de/guides/retrying-transactions.html",{title:"Transaktionen Wiederholen"},["/de/guides/retrying-transactions","/de/guides/retrying-transactions.md"]],["v-5796626c","/de/guides/serialization.html",{title:"Serialisieren von Daten"},["/de/guides/serialization","/de/guides/serialization.md"]],["v-1bac4a4a","/de/integrations/",{title:"Getting Started"},["/de/integrations/index.html","/de/integrations/README.md"]],["v-3cb00837","/de/integrations/jupiter.html",{title:"Jupiter"},["/de/integrations/jupiter","/de/integrations/jupiter.md"]],["v-0f7fcb72","/de/integrations/mango.html",{title:"Mango Markets"},["/de/integrations/mango","/de/integrations/mango.md"]],["v-0e6f43f0","/de/integrations/orao-vrf.html",{title:"ORAO VRF"},["/de/integrations/orao-vrf","/de/integrations/orao-vrf.md"]],["v-d5fbe77e","/de/integrations/pyth.html",{title:"Pyth"},["/de/integrations/pyth","/de/integrations/pyth.md"]],["v-0aace259","/de/integrations/react-native.html",{title:"React Native"},["/de/integrations/react-native","/de/integrations/react-native.md"]],["v-ca072408","/de/integrations/serum.html",{title:"Serum"},["/de/integrations/serum","/de/integrations/serum.md"]],["v-8538eafe","/de/integrations/strata.html",{title:"Strata"},["/de/integrations/strata","/de/integrations/strata.md"]],["v-5404867c","/de/integrations/switchboard.html",{title:"Switchboard"},["/de/integrations/switchboard","/de/integrations/switchboard.md"]],["v-d5286e92","/de/integrations/web3auth.html",{title:"web3Auth (Torus Wallet)"},["/de/integrations/web3auth","/de/integrations/web3auth.md"]],["v-2d09cebe","/de/references/accounts.html",{title:"Accounts"},["/de/references/accounts","/de/references/accounts.md"]],["v-9ce8299a","/de/references/basic-transactions.html",{title:"Transaktionen versenden"},["/de/references/basic-transactions","/de/references/basic-transactions.md"]],["v-4ec78794","/de/references/keypairs-and-wallets.html",{title:"Keypairs and Wallets"},["/de/references/keypairs-and-wallets","/de/references/keypairs-and-wallets.md"]],["v-32949b1c","/de/references/local-development.html",{title:"Local Development"},["/de/references/local-development","/de/references/local-development.md"]],["v-01539798","/de/references/name-service.html",{title:"Name Service"},["/de/references/name-service","/de/references/name-service.md"]],["v-6bf79020","/de/references/nfts.html",{title:"NFTs"},["/de/references/nfts","/de/references/nfts.md"]],["v-0e8f1e28","/de/references/offline-transactions.html",{title:"Senden von Offline-Transaktionen"},["/de/references/offline-transactions","/de/references/offline-transactions.md"]],["v-3975cfb8","/de/references/programs.html",{title:"Programme schreiben"},["/de/references/programs","/de/references/programs.md"]],["v-7cf087d4","/de/references/staking.html",{title:"Staking"},["/de/references/staking","/de/references/staking.md"]],["v-4520fd52","/de/references/token.html",{title:"Interaktion mit Tokens"},["/de/references/token","/de/references/token.md"]],["v-598bfdda","/fr/core-concepts/accounts.html",{title:"Comptes"},["/fr/core-concepts/accounts","/fr/core-concepts/accounts.md"]],["v-410d47d3","/fr/core-concepts/pdas.html",{title:"Adresses d\xE9riv\xE9es de programmes (PDAs)"},["/fr/core-concepts/pdas","/fr/core-concepts/pdas.md"]],["v-2334b82a","/fr/core-concepts/programs.html",{title:"Programmes"},["/fr/core-concepts/programs","/fr/core-concepts/programs.md"]],["v-1ee9ddf8","/fr/core-concepts/transactions.html",{title:"Transactions"},["/fr/core-concepts/transactions","/fr/core-concepts/transactions.md"]],["v-4605d97e","/fr/getting-started/installation.html",{title:"Installation"},["/fr/getting-started/installation","/fr/getting-started/installation.md"]],["v-7e91df34","/fr/guides/account-maps.html",{title:"Maps de Comptes"},["/fr/guides/account-maps","/fr/guides/account-maps.md"]],["v-05451800","/fr/guides/data-migration.html",{title:"Migration des Comptes de Donn\xE9es de Programmes"},["/fr/guides/data-migration","/fr/guides/data-migration.md"]],["v-0bb1c6e4","/fr/guides/debugging-solana-programs.html",{title:"D\xE9bogage des Programmes Solana"},["/fr/guides/debugging-solana-programs","/fr/guides/debugging-solana-programs.md"]],["v-5623fef8","/fr/guides/feature-parity-testing.html",{title:"Test de Conformit\xE9 des Fonctionnalit\xE9s"},["/fr/guides/feature-parity-testing","/fr/guides/feature-parity-testing.md"]],["v-0af4ea25","/fr/guides/get-program-accounts.html",{title:"Obtenir les comptes d'un programme"},["/fr/guides/get-program-accounts","/fr/guides/get-program-accounts.md"]],["v-521dcfdf","/fr/guides/retrying-transactions.html",{title:"R\xE9essayer des Transactions"},["/fr/guides/retrying-transactions","/fr/guides/retrying-transactions.md"]],["v-22564af7","/fr/guides/serialization.html",{title:"S\xE9rialisation des donn\xE9es"},["/fr/guides/serialization","/fr/guides/serialization.md"]],["v-77103780","/fr/guides/versioned-transactions.html",{title:"Transactions Versionn\xE9es"},["/fr/guides/versioned-transactions","/fr/guides/versioned-transactions.md"]],["v-4571fbe6","/fr/integrations/",{title:"Pour Commencer"},["/fr/integrations/index.html","/fr/integrations/README.md"]],["v-076ff0c2","/fr/integrations/jupiter.html",{title:"Jupiter"},["/fr/integrations/jupiter","/fr/integrations/jupiter.md"]],["v-6cb34a86","/fr/integrations/mango.html",{title:"Mango Markets"},["/fr/integrations/mango","/fr/integrations/mango.md"]],["v-c8a72676","/fr/integrations/orao-vrf.html",{title:"ORAO VRF"},["/fr/integrations/orao-vrf","/fr/integrations/orao-vrf.md"]],["v-6976e796","/fr/integrations/pyth.html",{title:"Pyth"},["/fr/integrations/pyth","/fr/integrations/pyth.md"]],["v-1e60cea4","/fr/integrations/react-native.html",{title:"React Native"},["/fr/integrations/react-native","/fr/integrations/react-native.md"]],["v-5522fd47","/fr/integrations/serum.html",{title:"Serum"},["/fr/integrations/serum","/fr/integrations/serum.md"]],["v-480ee496","/fr/integrations/strata.html",{title:"Strata"},["/fr/integrations/strata","/fr/integrations/strata.md"]],["v-139f3066","/fr/integrations/switchboard.html",{title:"Switchboard"},["/fr/integrations/switchboard","/fr/integrations/switchboard.md"]],["v-22a8f18c","/fr/integrations/web3auth.html",{title:"web3Auth (Torus Wallet)"},["/fr/integrations/web3auth","/fr/integrations/web3auth.md"]],["v-742672b6","/fr/references/accounts.html",{title:"Comptes"},["/fr/references/accounts","/fr/references/accounts.md"]],["v-7fdd21f0","/fr/references/basic-transactions.html",{title:"Envoyer des Transactions"},["/fr/references/basic-transactions","/fr/references/basic-transactions.md"]],["v-5bd01ecb","/fr/references/keypairs-and-wallets.html",{title:"Paires de Cl\xE9s et Portefeuilles"},["/fr/references/keypairs-and-wallets","/fr/references/keypairs-and-wallets.md"]],["v-0835dffd","/fr/references/local-development.html",{title:"D\xE9veloppement Local"},["/fr/references/local-development","/fr/references/local-development.md"]],["v-31ec7bc9","/fr/references/name-service.html",{title:"Service de Noms"},["/fr/references/name-service","/fr/references/name-service.md"]],["v-3331e485","/fr/references/nfts.html",{title:"NFTs"},["/fr/references/nfts","/fr/references/nfts.md"]],["v-dc79fe86","/fr/references/offline-transactions.html",{title:"Envoi de transactions hors connexion"},["/fr/references/offline-transactions","/fr/references/offline-transactions.md"]],["v-77bdac66","/fr/references/programs.html",{title:"\xC9crire des Programmes"},["/fr/references/programs","/fr/references/programs.md"]],["v-3717171f","/fr/references/staking.html",{title:"Staking"},["/fr/references/staking","/fr/references/staking.md"]],["v-01a8e35d","/fr/references/token.html",{title:"Interaction avec les Jetons"},["/fr/references/token","/fr/references/token.md"]],["v-02e9060d","/id/getting-started/installation.html",{title:"Instalasi"},["/id/getting-started/installation","/id/getting-started/installation.md"]],["v-10a285c5","/id/guides/account-maps.html",{title:"Peta Akun"},["/id/guides/account-maps","/id/guides/account-maps.md"]],["v-4ddeba51","/id/guides/data-migration.html",{title:"Migrasi Akun Data Program"},["/id/guides/data-migration","/id/guides/data-migration.md"]],["v-0173699d","/id/guides/debugging-solana-programs.html",{title:"Debug Program Solana"},["/id/guides/debugging-solana-programs","/id/guides/debugging-solana-programs.md"]],["v-971f3456","/id/guides/feature-parity-testing.html",{title:"Pengujian Paritas Fitur"},["/id/guides/feature-parity-testing","/id/guides/feature-parity-testing.md"]],["v-307b2094","/id/guides/get-program-accounts.html",{title:"Mendapatkan Akun Program"},["/id/guides/get-program-accounts","/id/guides/get-program-accounts.md"]],["v-0f00fc6e","/id/guides/retrying-transactions.html",{title:"Mengulang Kembali transaksi"},["/id/guides/retrying-transactions","/id/guides/retrying-transactions.md"]],["v-5b4b12f4","/id/guides/serialization.html",{title:"Serialisasi Data"},["/id/guides/serialization","/id/guides/serialization.md"]],["v-0027c5f5","/id/integrations/",{title:"Memulai"},["/id/integrations/index.html","/id/integrations/README.md"]],["v-9117c75e","/id/integrations/jupiter.html",{title:"Jupiter"},["/id/integrations/jupiter","/id/integrations/jupiter.md"]],["v-d6e3c3e8","/id/integrations/mango.html",{title:"Mango Markets"},["/id/integrations/mango","/id/integrations/mango.md"]],["v-2df1fe67","/id/integrations/pyth.html",{title:"Pyth"},["/id/integrations/pyth","/id/integrations/pyth.md"]],["v-10996302","/id/integrations/react-native.html",{title:"React Native"},["/id/integrations/react-native","/id/integrations/react-native.md"]],["v-200ac096","/id/integrations/serum.html",{title:"Serum"},["/id/integrations/serum","/id/integrations/serum.md"]],["v-4bc0e9b2","/id/integrations/strata.html",{title:"Strata"},["/id/integrations/strata","/id/integrations/strata.md"]],["v-6a0633dc","/id/integrations/switchboard.html",{title:"Switchboard"},["/id/integrations/switchboard","/id/integrations/switchboard.md"]],["v-732a37dd","/id/integrations/web3auth.html",{title:"web3Auth (Torus Wallet)"},["/id/integrations/web3auth","/id/integrations/web3auth.md"]],["v-06371947","/id/references/accounts.html",{title:"Akun"},["/id/references/accounts","/id/references/accounts.md"]],["v-c0d8574e","/id/references/basic-transactions.html",{title:"Mengirim Transaksi"},["/id/references/basic-transactions","/id/references/basic-transactions.md"]],["v-644e73dc","/id/references/keypairs-and-wallets.html",{title:"Keypairs & Wallets"},["/id/references/keypairs-and-wallets","/id/references/keypairs-and-wallets.md"]],["v-75cde6e8","/id/references/local-development.html",{title:"Development Lokal"},["/id/references/local-development","/id/references/local-development.md"]],["v-673571da","/id/references/name-service.html",{title:"Name Service"},["/id/references/name-service","/id/references/name-service.md"]],["v-931308d4","/id/references/nfts.html",{title:"NFT"},["/id/references/nfts","/id/references/nfts.md"]],["v-cb7d5464","/id/references/offline-transactions.html",{title:"Mengirim Transaksi Offline"},["/id/references/offline-transactions","/id/references/offline-transactions.md"]],["v-5631d05e","/id/references/programs.html",{title:"Menulis Program"},["/id/references/programs","/id/references/programs.md"]],["v-01feda6e","/id/references/staking.html",{title:"Staking"},["/id/references/staking","/id/references/staking.md"]],["v-3211a328","/id/references/token.html",{title:"Interaksi dengan Token"},["/id/references/token","/id/references/token.md"]],["v-da3cf63c","/id/core-concepts/accounts.html",{title:"Akun"},["/id/core-concepts/accounts","/id/core-concepts/accounts.md"]],["v-0bf50b22","/id/core-concepts/pdas.html",{title:"Program Derived Addresses (PDAs)"},["/id/core-concepts/pdas","/id/core-concepts/pdas.md"]],["v-3a47880e","/id/core-concepts/programs.html",{title:"Program"},["/id/core-concepts/programs","/id/core-concepts/programs.md"]],["v-73c3d55a","/id/core-concepts/transactions.html",{title:"Transaksi"},["/id/core-concepts/transactions","/id/core-concepts/transactions.md"]],["v-52cd49a4","/kr/core-concepts/accounts.html",{title:"Accounts"},["/kr/core-concepts/accounts","/kr/core-concepts/accounts.md"]],["v-4a4be76e","/kr/core-concepts/pdas.html",{title:"Program Derived Addresses (PDAs)"},["/kr/core-concepts/pdas","/kr/core-concepts/pdas.md"]],["v-26941245","/kr/core-concepts/programs.html",{title:"Programs"},["/kr/core-concepts/programs","/kr/core-concepts/programs.md"]],["v-2229e59f","/kr/core-concepts/transactions.html",{title:"Transactions"},["/kr/core-concepts/transactions","/kr/core-concepts/transactions.md"]],["v-e97c194e","/kr/getting-started/installation.html",{title:"Installation"},["/kr/getting-started/installation","/kr/getting-started/installation.md"]],["v-c5b19a0e","/kr/guides/account-maps.html",{title:"Account Maps"},["/kr/guides/account-maps","/kr/guides/account-maps.md"]],["v-68262af6","/kr/guides/data-migration.html",{title:"Migrating Program Data Accounts"},["/kr/guides/data-migration","/kr/guides/data-migration.md"]],["v-a4865e2e","/kr/guides/debugging-solana-programs.html",{title:"Debugging Solana Programs"},["/kr/guides/debugging-solana-programs","/kr/guides/debugging-solana-programs.md"]],["v-37352209","/kr/guides/feature-parity-testing.html",{title:"Feature Parity Testing"},["/kr/guides/feature-parity-testing","/kr/guides/feature-parity-testing.md"]],["v-0d30a8ea","/kr/guides/get-program-accounts.html",{title:"Get Program Accounts"},["/kr/guides/get-program-accounts","/kr/guides/get-program-accounts.md"]],["v-d14c2c8c","/kr/guides/retrying-transactions.html",{title:"Retrying Transactions"},["/kr/guides/retrying-transactions","/kr/guides/retrying-transactions.md"]],["v-5329205c","/kr/guides/serialization.html",{title:"Serializing Data"},["/kr/guides/serialization","/kr/guides/serialization.md"]],["v-da88730a","/kr/references/accounts.html",{title:"Accounts"},["/kr/references/accounts","/kr/references/accounts.md"]],["v-2258908d","/kr/references/basic-transactions.html",{title:"Sending Transactions"},["/kr/references/basic-transactions","/kr/references/basic-transactions.md"]],["v-48d4f310","/kr/references/keypairs-and-wallets.html",{title:"Keypairs and Wallets"},["/kr/references/keypairs-and-wallets","/kr/references/keypairs-and-wallets.md"]],["v-4d71f9d8","/kr/references/local-development.html",{title:"Local Development"},["/kr/references/local-development","/kr/references/local-development.md"]],["v-cb0f35e4","/kr/references/name-service.html",{title:"Name Service"},["/kr/references/name-service","/kr/references/name-service.md"]],["v-b3ac3a6c","/kr/references/nfts.html",{title:"NFTs"},["/kr/references/nfts","/kr/references/nfts.md"]],["v-7ec7d502","/kr/references/offline-transactions.html",{title:"Sending Offline Transactions"},["/kr/references/offline-transactions","/kr/references/offline-transactions.md"]],["v-3a9304dc","/kr/references/programs.html",{title:"Writing Programs"},["/kr/references/programs","/kr/references/programs.md"]],["v-4055b6ba","/kr/references/staking.html",{title:"Staking"},["/kr/references/staking","/kr/references/staking.md"]],["v-249ea490","/kr/references/token.html",{title:"Interacting with Tokens"},["/kr/references/token","/kr/references/token.md"]],["v-3f8c76bb","/th/core-concepts/accounts.html",{title:"Accounts"},["/th/core-concepts/accounts","/th/core-concepts/accounts.md"]],["v-310cd17b","/th/core-concepts/pdas.html",{title:"Program Derived Addresses (PDAs)"},["/th/core-concepts/pdas","/th/core-concepts/pdas.md"]],["v-e0f1a45c","/th/core-concepts/programs.html",{title:"Programs"},["/th/core-concepts/programs","/th/core-concepts/programs.md"]],["v-5dda72ac","/th/core-concepts/transactions.html",{title:"Transactions"},["/th/core-concepts/transactions","/th/core-concepts/transactions.md"]],["v-c5f91db4","/th/getting-started/installation.html",{title:"\u0E01\u0E32\u0E23\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07"},["/th/getting-started/installation","/th/getting-started/installation.md"]],["v-e2f8eae8","/th/guides/account-maps.html",{title:"Account Maps"},["/th/guides/account-maps","/th/guides/account-maps.md"]],["v-50dcad50","/th/guides/data-migration.html",{title:"Migrating Program Data Accounts"},["/th/guides/data-migration","/th/guides/data-migration.md"]],["v-387ebf94","/th/guides/debugging-solana-programs.html",{title:"Debugging Solana Programs"},["/th/guides/debugging-solana-programs","/th/guides/debugging-solana-programs.md"]],["v-5da35ddc","/th/guides/feature-parity-testing.html",{title:"Feature Parity Testing"},["/th/guides/feature-parity-testing","/th/guides/feature-parity-testing.md"]],["v-4791bd7d","/th/guides/get-program-accounts.html",{title:"Get Program Accounts"},["/th/guides/get-program-accounts","/th/guides/get-program-accounts.md"]],["v-adc930f2","/th/guides/retrying-transactions.html",{title:"Retrying Transactions"},["/th/guides/retrying-transactions","/th/guides/retrying-transactions.md"]],["v-109a0a9f","/th/guides/serialization.html",{title:"Serializing Data"},["/th/guides/serialization","/th/guides/serialization.md"]],["v-0074d650","/th/guides/versioned-transactions.html",{title:"Versioned Transactions"},["/th/guides/versioned-transactions","/th/guides/versioned-transactions.md"]],["v-18d9f78e","/th/integrations/",{title:"\u0E40\u0E23\u0E34\u0E48\u0E21\u0E15\u0E49\u0E19"},["/th/integrations/index.html","/th/integrations/README.md"]],["v-14989f2c","/th/integrations/jupiter.html",{title:"Jupiter"},["/th/integrations/jupiter","/th/integrations/jupiter.md"]],["v-8cb43736","/th/integrations/mango.html",{title:"Mango Markets"},["/th/integrations/mango","/th/integrations/mango.md"]],["v-67e8ee24","/th/integrations/pyth.html",{title:"Pyth"},["/th/integrations/pyth","/th/integrations/pyth.md"]],["v-fe8d3bf4","/th/integrations/react-native.html",{title:"React Native"},["/th/integrations/react-native","/th/integrations/react-native.md"]],["v-452286ef","/th/integrations/serum.html",{title:"Serum"},["/th/integrations/serum","/th/integrations/serum.md"]],["v-58008fee","/th/integrations/strata.html",{title:"Strata"},["/th/integrations/strata","/th/integrations/strata.md"]],["v-d087d916","/th/integrations/switchboard.html",{title:"Switchboard"},["/th/integrations/switchboard","/th/integrations/switchboard.md"]],["v-0645b238","/th/integrations/web3auth.html",{title:"web3Auth (Torus Wallet)"},["/th/integrations/web3auth","/th/integrations/web3auth.md"]],["v-f7cfc3e4","/th/references/accounts.html",{title:"Accounts"},["/th/references/accounts","/th/references/accounts.md"]],["v-48c6cc60","/th/references/basic-transactions.html",{title:"Sending Transactions"},["/th/references/basic-transactions","/th/references/basic-transactions.md"]],["v-e6b8f3ba","/th/references/keypairs-and-wallets.html",{title:"Keypairs \u0E41\u0E25\u0E30 Wallets"},["/th/references/keypairs-and-wallets","/th/references/keypairs-and-wallets.md"]],["v-5f3377a5","/th/references/local-development.html",{title:"Local Development"},["/th/references/local-development","/th/references/local-development.md"]],["v-4fe8bb21","/th/references/name-service.html",{title:"Name Service"},["/th/references/name-service","/th/references/name-service.md"]],["v-00aefbdd","/th/references/nfts.html",{title:"NFTs"},["/th/references/nfts","/th/references/nfts.md"]],["v-7ad32fd6","/th/references/offline-transactions.html",{title:"Sending Offline Transactions"},["/th/references/offline-transactions","/th/references/offline-transactions.md"]],["v-57da55b6","/th/references/programs.html",{title:"\u0E40\u0E02\u0E35\u0E22\u0E19 Programs"},["/th/references/programs","/th/references/programs.md"]],["v-2716a0c7","/th/references/staking.html",{title:"Staking"},["/th/references/staking","/th/references/staking.md"]],["v-386291f6","/th/references/token.html",{title:"\u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19 Tokens"},["/th/references/token","/th/references/token.md"]],["v-46a93876","/tr/core-concepts/accounts.html",{title:"Accounts (Account\u2019lar)"},["/tr/core-concepts/accounts","/tr/core-concepts/accounts.md"]],["v-5aefd385","/tr/core-concepts/pdas.html",{title:"Program Derived Addresses (PDAs) (Programdan T\xFCretilmi\u015F Adresler)"},["/tr/core-concepts/pdas","/tr/core-concepts/pdas.md"]],["v-2ca61adc","/tr/core-concepts/programs.html",{title:"Programs (Programlar)"},["/tr/core-concepts/programs","/tr/core-concepts/programs.md"]],["v-4847cab6","/tr/core-concepts/transactions.html",{title:"Transactions (\u0130\u015Flemler)"},["/tr/core-concepts/transactions","/tr/core-concepts/transactions.md"]],["v-bd0a22a0","/tr/getting-started/installation.html",{title:"Installation"},["/tr/getting-started/installation","/tr/getting-started/installation.md"]],["v-bdfe6c7c","/tr/guides/account-maps.html",{title:"Account Maps (Hesap Haritalar\u0131)"},["/tr/guides/account-maps","/tr/guides/account-maps.md"]],["v-3fbbf30e","/tr/guides/data-migration.html",{title:"Migrating a Programs Data Accounts (Programlar\u0131n Data Account\u2019lar\u0131n\u0131 Ta\u015F\u0131ma)"},["/tr/guides/data-migration","/tr/guides/data-migration.md"]],["v-846b6e80","/tr/guides/debugging-solana-programs.html",{title:"Debugging Solana Programs (Solana Programlar\u0131nda Hata Ay\u0131klama)"},["/tr/guides/debugging-solana-programs","/tr/guides/debugging-solana-programs.md"]],["v-2fc8dcdc","/tr/guides/feature-parity-testing.html",{title:"Feature Parity Testing (\xD6zellik Parite Testi)"},["/tr/guides/feature-parity-testing","/tr/guides/feature-parity-testing.md"]],["v-aa61329a","/tr/guides/get-program-accounts.html",{title:"Get Program Accounts"},["/tr/guides/get-program-accounts","/tr/guides/get-program-accounts.md"]],["v-a4da35de","/tr/guides/retrying-transactions.html",{title:"Retrying Transactions (\u0130\u015Flemleri Yeniden Denemek)"},["/tr/guides/retrying-transactions","/tr/guides/retrying-transactions.md"]],["v-4dc4b229","/tr/guides/serialization.html",{title:"Serializing Data (Serile\u015Ftirme)"},["/tr/guides/serialization","/tr/guides/serialization.md"]],["v-d2d54578","/tr/references/accounts.html",{title:"Accounts (Account\u2019lar)"},["/tr/references/accounts","/tr/references/accounts.md"]],["v-5981ffd4","/tr/references/basic-transactions.html",{title:"Sending Transactions(\u0130\u015Flem G\xF6nderimi)"},["/tr/references/basic-transactions","/tr/references/basic-transactions.md"]],["v-59dda459","/tr/references/keypairs-and-wallets.html",{title:"Keypairs and Wallets"},["/tr/references/keypairs-and-wallets","/tr/references/keypairs-and-wallets.md"]],["v-63aaf52f","/tr/references/local-development.html",{title:"Local Development (Yerel Geli\u015Ftirme)"},["/tr/references/local-development","/tr/references/local-development.md"]],["v-56a76f57","/tr/references/name-service.html",{title:"Name Service (Name Servisi)"},["/tr/references/name-service","/tr/references/name-service.md"]],["v-41e84613","/tr/references/nfts.html",{title:"Non Fungible Tokens (NFTs)"},["/tr/references/nfts","/tr/references/nfts.md"]],["v-e05ef36a","/tr/references/offline-transactions.html",{title:"Offline Transaction (\xC7evrimd\u0131\u015F\u0131 i\u015Flem)"},["/tr/references/offline-transactions","/tr/references/offline-transactions.md"]],["v-32dfd74a","/tr/references/programs.html",{title:"Writing Programs (Programlar\u0131 Yazma)"},["/tr/references/programs","/tr/references/programs.md"]],["v-50f9a2d1","/tr/references/staking.html",{title:"Staking (Stake Etme)"},["/tr/references/staking","/tr/references/staking.md"]],["v-6c8298e2","/tr/references/token.html",{title:"Interacting with Tokens (Token\u2019lar ile Etkile\u015Fim)"},["/tr/references/token","/tr/references/token.md"]],["v-6a35b27a","/vi/core-concepts/accounts.html",{title:"Accounts"},["/vi/core-concepts/accounts","/vi/core-concepts/accounts.md"]],["v-8e20768c","/vi/core-concepts/pdas.html",{title:"Program Derived Addresses (PDAs)"},["/vi/core-concepts/pdas","/vi/core-concepts/pdas.md"]],["v-8b9f2cde","/vi/core-concepts/programs.html",{title:"Programs"},["/vi/core-concepts/programs","/vi/core-concepts/programs.md"]],["v-55f1b6eb","/vi/core-concepts/transactions.html",{title:"Transactions"},["/vi/core-concepts/transactions","/vi/core-concepts/transactions.md"]],["v-274abcb6","/vi/getting-started/installation.html",{title:"C\xE0i \u0111\u1EB7t"},["/vi/getting-started/installation","/vi/getting-started/installation.md"]],["v-02feff2d","/vi/guides/account-maps.html",{title:"Account Maps"},["/vi/guides/account-maps","/vi/guides/account-maps.md"]],["v-1b0279b9","/vi/guides/data-migration.html",{title:"N\xE2ng c\u1EA5p d\u1EEF li\u1EC7u cho Program Account"},["/vi/guides/data-migration","/vi/guides/data-migration.md"]],["v-5afd7935","/vi/guides/debugging-solana-programs.html",{title:"So\xE1t l\u1ED7i ch\u01B0\u01A1ng tr\xECnh tr\xEAn Solana"},["/vi/guides/debugging-solana-programs","/vi/guides/debugging-solana-programs.md"]],["v-0d9b8586","/vi/guides/feature-parity-testing.html",{title:"\u0110\u1EC1 xu\u1EA5t Ki\u1EC3m th\u1EED Parity"},["/vi/guides/feature-parity-testing","/vi/guides/feature-parity-testing.md"]],["v-5263011e","/vi/guides/get-program-accounts.html",{title:"\u0110\u1ECDc d\u1EEF li\u1EC7u Program Account"},["/vi/guides/get-program-accounts","/vi/guides/get-program-accounts.md"]],["v-0f1acff4","/vi/guides/retrying-transactions.html",{title:"Th\u1EED l\u1EA1i Transaction"},["/vi/guides/retrying-transactions","/vi/guides/retrying-transactions.md"]],["v-2b8d2a1e","/vi/guides/serialization.html",{title:"Tu\u1EA7n t\u1EF1 ho\xE1 d\u1EEF li\u1EC7u"},["/vi/guides/serialization","/vi/guides/serialization.md"]],["v-35d91d8d","/vi/integrations/",{title:"Getting Started"},["/vi/integrations/index.html","/vi/integrations/README.md"]],["v-10a6cfe9","/vi/integrations/jupiter.html",{title:"Jupiter"},["/vi/integrations/jupiter","/vi/integrations/jupiter.md"]],["v-4188d7a4","/vi/integrations/mango.html",{title:"Mango Markets"},["/vi/integrations/mango","/vi/integrations/mango.md"]],["v-5f249c62","/vi/integrations/pyth.html",{title:"Pyth"},["/vi/integrations/pyth","/vi/integrations/pyth.md"]],["v-049919e7","/vi/integrations/react-native.html",{title:"React Native"},["/vi/integrations/react-native","/vi/integrations/react-native.md"]],["v-65f50ba4","/vi/integrations/serum.html",{title:"Serum"},["/vi/integrations/serum","/vi/integrations/serum.md"]],["v-6707f6e2","/vi/integrations/strata.html",{title:"Strata"},["/vi/integrations/strata","/vi/integrations/strata.md"]],["v-85f54918","/vi/integrations/switchboard.html",{title:"Switchboard"},["/vi/integrations/switchboard","/vi/integrations/switchboard.md"]],["v-404df745","/vi/integrations/web3auth.html",{title:"web3Auth (Torus Wallet)"},["/vi/integrations/web3auth","/vi/integrations/web3auth.md"]],["v-0ed8daa2","/vi/references/accounts.html",{title:"Accounts"},["/vi/references/accounts","/vi/references/accounts.md"]],["v-3754a87e","/vi/references/basic-transactions.html",{title:"G\u1EEDi Transaction"},["/vi/references/basic-transactions","/vi/references/basic-transactions.md"]],["v-7ff81144","/vi/references/keypairs-and-wallets.html",{title:"C\u1EB7p kho\xE1 v\xE0 V\xED"},["/vi/references/keypairs-and-wallets","/vi/references/keypairs-and-wallets.md"]],["v-a2eaafb8","/vi/references/local-development.html",{title:"L\u1EADp tr\xECnh \u1EDF Local"},["/vi/references/local-development","/vi/references/local-development.md"]],["v-7a66f742","/vi/references/name-service.html",{title:"D\u1ECBch v\u1EE5 t\xEAn mi\u1EC1n"},["/vi/references/name-service","/vi/references/name-service.md"]],["v-1b97e8fe","/vi/references/nfts.html",{title:"NFTs"},["/vi/references/nfts","/vi/references/nfts.md"]],["v-942a1994","/vi/references/offline-transactions.html",{title:"G\u1EEDi Transactions Ngo\u1EA1i tuy\u1EBFn"},["/vi/references/offline-transactions","/vi/references/offline-transactions.md"]],["v-488e49c6","/vi/references/programs.html",{title:"X\xE2y d\u1EF1ng Programs"},["/vi/references/programs","/vi/references/programs.md"]],["v-a20cd7f4","/vi/references/staking.html",{title:"Staking"},["/vi/references/staking","/vi/references/staking.md"]],["v-26036e04","/vi/references/token.html",{title:"T\u01B0\u01A1ng t\xE1c v\u1EDBi Tokens"},["/vi/references/token","/vi/references/token.md"]],["v-43987c75","/zh/core-concepts/accounts.html",{title:"\u8D26\u6237"},["/zh/core-concepts/accounts","/zh/core-concepts/accounts.md"]],["v-3c24c435","/zh/core-concepts/pdas.html",{title:"\u7A0B\u5E8F\u6D3E\u751F\u8D26\u6237 (PDA)"},["/zh/core-concepts/pdas","/zh/core-concepts/pdas.md"]],["v-d8d998e8","/zh/core-concepts/programs.html",{title:"\u7A0B\u5E8F"},["/zh/core-concepts/programs","/zh/core-concepts/programs.md"]],["v-66cde934","/zh/core-concepts/transactions.html",{title:"\u4EA4\u6613"},["/zh/core-concepts/transactions","/zh/core-concepts/transactions.md"]],["v-567ec360","/zh/getting-started/installation.html",{title:"\u5B89\u88C5"},["/zh/getting-started/installation","/zh/getting-started/installation.md"]],["v-3706649a","/404.html",{title:""},["/404"]]],L_=A_.reduce((e,[t,n,r,l])=>(e.push({name:t,path:n,component:Ba,meta:r},...l.map(i=>({path:i,redirect:n}))),e),[{name:"404",path:"/:catchAll(.*)",component:Ba}]),D_=wg,R_=()=>{const e=am({history:D_(ym(Et.value.base)),routes:L_,scrollBehavior:(t,n,r)=>r||(t.hash?{el:t.hash}:{top:0})});return e.beforeResolve(async(t,n)=>{var r;(t.path!==n.path||n===st)&&([ut.value]=await Promise.all([Ft.resolvePageData(t.name),(r=bc[t.name])===null||r===void 0?void 0:r.__asyncLoader()]))}),e},I_=e=>{e.component("ClientOnly",sm),e.component("Content",Ni)},C_=(e,t)=>{const n=_e(()=>Ft.resolveRouteLocale(Et.value.locales,t.currentRoute.value.path)),r=_e(()=>Ft.resolveSiteLocaleData(Et.value,n.value)),l=_e(()=>Ft.resolvePageFrontmatter(ut.value)),i=_e(()=>Ft.resolvePageHeadTitle(ut.value,r.value)),a=_e(()=>Ft.resolvePageHead(i.value,l.value,r.value)),o=_e(()=>Ft.resolvePageLang(ut.value));return e.provide(Fi,n),e.provide(Oc,r),e.provide(Ec,l),e.provide(mm,i),e.provide(wc,a),e.provide(Pc,o),Object.defineProperties(e.config.globalProperties,{$frontmatter:{get:()=>l.value},$head:{get:()=>a.value},$headTitle:{get:()=>i.value},$lang:{get:()=>o.value},$page:{get:()=>ut.value},$routeLocale:{get:()=>n.value},$site:{get:()=>Et.value},$siteLocale:{get:()=>r.value},$withBase:{get:()=>Pm}}),{pageData:ut,pageFrontmatter:l,pageHead:a,pageHeadTitle:i,pageLang:o,routeLocale:n,siteData:Et,siteLocaleData:r}},x_=()=>{const e=Vi(),t=gm(),n=Sc(),r=Ee([]),l=()=>{t.value.forEach(a=>{const o=V_(a);o&&r.value.push(o)})},i=()=>{document.documentElement.lang=n.value,r.value.forEach(a=>{a.parentNode===document.head&&document.head.removeChild(a)}),r.value.splice(0,r.value.length),t.value.forEach(a=>{const o=F_(a);o!==null&&(document.head.appendChild(o),r.value.push(o))})};Ut(pm,i),tt(()=>{l(),i(),et(()=>e.path,()=>i())})},V_=([e,t,n=""])=>{const r=Object.entries(t).map(([o,s])=>be(s)?`[${o}="${s}"]`:s===!0?`[${o}]`:"").join(""),l=`head > ${e}${r}`;return Array.from(document.querySelectorAll(l)).find(o=>o.innerText===n)||null},F_=([e,t,n])=>{if(!be(e))return null;const r=document.createElement(e);return Ac(t)&&Object.entries(t).forEach(([l,i])=>{be(i)?r.setAttribute(l,i):i===!0&&r.setAttribute(l,"")}),be(n)&&r.appendChild(document.createTextNode(n)),r},j_=rg,N_=async()=>{const e=j_({name:"VuepressApp",setup(){x_();for(const n of O_)n();return()=>[ee(_c),...v_.map(n=>ee(n))]}}),t=R_();I_(e),C_(e,t);for(const n of h_)await n({app:e,router:t,siteData:Et});return e.use(t),{app:e,router:t}};N_().then(({app:e,router:t})=>{t.isReady().then(()=>{e.mount("#app")})});export{Tc as A,W_ as B,J_ as C,ee as D,Pm as E,Me as F,sm as G,wt as H,Ee as I,et as J,z_ as K,q_ as L,Em as M,ym as N,rr as O,be as P,kv as Q,tt as R,Yr as S,Ii as T,lr as U,Y_ as V,Ac as W,K_ as X,Ti as Y,Ev as Z,a_ as _,Fr as a,Se as b,Ai as c,N_ as createVueApp,Li as d,H_ as e,ze as f,jc as g,Bt as h,hm as i,_e as j,te as k,U_ as l,B_ as m,Vi as n,nr as o,kd as p,ec as q,gh as r,bh as s,xu as t,ji as u,jr as v,Rd as w,km as x,$_ as y,G_ as z}; diff --git a/docs/.vuepress/dist/assets/app.cfdf84e7.js b/docs/.vuepress/dist/assets/app.cfdf84e7.js deleted file mode 100644 index a6bb8661f..000000000 --- a/docs/.vuepress/dist/assets/app.cfdf84e7.js +++ /dev/null @@ -1,20 +0,0 @@ -var Pu=Object.defineProperty,Su=Object.defineProperties;var Ou=Object.getOwnPropertyDescriptors;var $i=Object.getOwnPropertySymbols;var Au=Object.prototype.hasOwnProperty,Tu=Object.prototype.propertyIsEnumerable;var Gi=(e,t,n)=>t in e?Pu(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,xe=(e,t)=>{for(var n in t||(t={}))Au.call(t,n)&&Gi(e,n,t[n]);if($i)for(var n of $i(t))Tu.call(t,n)&&Gi(e,n,t[n]);return e},Lt=(e,t)=>Su(e,Ou(t));const sl={};function si(e,t){const n=Object.create(null),r=e.split(",");for(let l=0;l!!n[l.toLowerCase()]:l=>!!n[l]}const Lu="itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly",Du=si(Lu);function is(e){return!!e||e===""}function Yr(e){if(te(e)){const t={};for(let n=0;n{if(n){const r=n.split(Iu);r.length>1&&(t[r[0].trim()]=r[1].trim())}}),t}function wt(e){let t="";if(be(e))t=e;else if(te(e))for(let n=0;nbe(e)?e:e==null?"":te(e)||Ae(e)&&(e.toString===cs||!ae(e.toString))?JSON.stringify(e,as,2):String(e),as=(e,t)=>t&&t.__v_isRef?as(e,t.value):sn(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[r,l])=>(n[`${r} =>`]=l,n),{})}:os(t)?{[`Set(${t.size})`]:[...t.values()]}:Ae(t)&&!te(t)&&!us(t)?String(t):t,fe={},on=[],Xe=()=>{},Vu=()=>!1,Fu=/^on[^a-z]/,Xn=e=>Fu.test(e),ci=e=>e.startsWith("onUpdate:"),Ce=Object.assign,ui=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},ju=Object.prototype.hasOwnProperty,de=(e,t)=>ju.call(e,t),te=Array.isArray,sn=e=>Qr(e)==="[object Map]",os=e=>Qr(e)==="[object Set]",ae=e=>typeof e=="function",be=e=>typeof e=="string",di=e=>typeof e=="symbol",Ae=e=>e!==null&&typeof e=="object",ss=e=>Ae(e)&&ae(e.then)&&ae(e.catch),cs=Object.prototype.toString,Qr=e=>cs.call(e),Nu=e=>Qr(e).slice(8,-1),us=e=>Qr(e)==="[object Object]",hi=e=>be(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,In=si(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Zr=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},Mu=/-(\w)/g,ot=Zr(e=>e.replace(Mu,(t,n)=>n?n.toUpperCase():"")),zu=/\B([A-Z])/g,Wt=Zr(e=>e.replace(zu,"-$1").toLowerCase()),Xr=Zr(e=>e.charAt(0).toUpperCase()+e.slice(1)),cl=Zr(e=>e?`on${Xr(e)}`:""),Bn=(e,t)=>!Object.is(e,t),ul=(e,t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})},ds=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let Ji;const Hu=()=>Ji||(Ji=typeof globalThis!="undefined"?globalThis:typeof self!="undefined"?self:typeof window!="undefined"?window:typeof global!="undefined"?global:{});let Ge;class Bu{constructor(t=!1){this.active=!0,this.effects=[],this.cleanups=[],!t&&Ge&&(this.parent=Ge,this.index=(Ge.scopes||(Ge.scopes=[])).push(this)-1)}run(t){if(this.active)try{return Ge=this,t()}finally{Ge=this.parent}}on(){Ge=this}off(){Ge=this.parent}stop(t){if(this.active){let n,r;for(n=0,r=this.effects.length;n{const t=new Set(e);return t.w=0,t.n=0,t},hs=e=>(e.w&Ot)>0,gs=e=>(e.n&Ot)>0,Wu=({deps:e})=>{if(e.length)for(let t=0;t{const{deps:t}=e;if(t.length){let n=0;for(let r=0;r{(u==="length"||u>=r)&&o.push(s)});else switch(n!==void 0&&o.push(a.get(n)),t){case"add":te(e)?hi(n)&&o.push(a.get("length")):(o.push(a.get(Ht)),sn(e)&&o.push(a.get(Rl)));break;case"delete":te(e)||(o.push(a.get(Ht)),sn(e)&&o.push(a.get(Rl)));break;case"set":sn(e)&&o.push(a.get(Ht));break}if(o.length===1)o[0]&&Il(o[0]);else{const s=[];for(const u of o)u&&s.push(...u);Il(gi(s))}}function Il(e,t){for(const n of te(e)?e:[...e])(n!==lt||n.allowRecurse)&&(n.scheduler?n.scheduler():n.run())}const Gu=si("__proto__,__v_isRef,__isVue"),vs=new Set(Object.getOwnPropertyNames(Symbol).map(e=>Symbol[e]).filter(di)),Ju=pi(),Yu=pi(!1,!0),Qu=pi(!0),Qi=Zu();function Zu(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...n){const r=ge(this);for(let i=0,a=this.length;i{e[t]=function(...n){vn();const r=ge(this)[t].apply(this,n);return fn(),r}}),e}function pi(e=!1,t=!1){return function(r,l,i){if(l==="__v_isReactive")return!e;if(l==="__v_isReadonly")return e;if(l==="__v_isShallow")return t;if(l==="__v_raw"&&i===(e?t?md:ys:t?ks:bs).get(r))return r;const a=te(r);if(!e&&a&&de(Qi,l))return Reflect.get(Qi,l,i);const o=Reflect.get(r,l,i);return(di(l)?vs.has(l):Gu(l))||(e||qe(r,"get",l),t)?o:De(o)?!a||!hi(l)?o.value:o:Ae(o)?e?_i(o):_n(o):o}}const Xu=fs(),ed=fs(!0);function fs(e=!1){return function(n,r,l,i){let a=n[r];if(Un(a)&&De(a)&&!De(l))return!1;if(!e&&!Un(l)&&(Es(l)||(l=ge(l),a=ge(a)),!te(n)&&De(a)&&!De(l)))return a.value=l,!0;const o=te(n)&&hi(r)?Number(r)e,el=e=>Reflect.getPrototypeOf(e);function ar(e,t,n=!1,r=!1){e=e.__v_raw;const l=ge(e),i=ge(t);t!==i&&!n&&qe(l,"get",t),!n&&qe(l,"get",i);const{has:a}=el(l),o=r?vi:n?ki:Kn;if(a.call(l,t))return o(e.get(t));if(a.call(l,i))return o(e.get(i));e!==l&&e.get(t)}function or(e,t=!1){const n=this.__v_raw,r=ge(n),l=ge(e);return e!==l&&!t&&qe(r,"has",e),!t&&qe(r,"has",l),e===l?n.has(e):n.has(e)||n.has(l)}function sr(e,t=!1){return e=e.__v_raw,!t&&qe(ge(e),"iterate",Ht),Reflect.get(e,"size",e)}function Zi(e){e=ge(e);const t=ge(this);return el(t).has.call(t,e)||(t.add(e),gt(t,"add",e,e)),this}function Xi(e,t){t=ge(t);const n=ge(this),{has:r,get:l}=el(n);let i=r.call(n,e);i||(e=ge(e),i=r.call(n,e));const a=l.call(n,e);return n.set(e,t),i?Bn(t,a)&>(n,"set",e,t):gt(n,"add",e,t),this}function ea(e){const t=ge(this),{has:n,get:r}=el(t);let l=n.call(t,e);l||(e=ge(e),l=n.call(t,e)),r&&r.call(t,e);const i=t.delete(e);return l&>(t,"delete",e,void 0),i}function ta(){const e=ge(this),t=e.size!==0,n=e.clear();return t&>(e,"clear",void 0,void 0),n}function cr(e,t){return function(r,l){const i=this,a=i.__v_raw,o=ge(a),s=t?vi:e?ki:Kn;return!e&&qe(o,"iterate",Ht),a.forEach((u,d)=>r.call(l,s(u),s(d),i))}}function ur(e,t,n){return function(...r){const l=this.__v_raw,i=ge(l),a=sn(i),o=e==="entries"||e===Symbol.iterator&&a,s=e==="keys"&&a,u=l[e](...r),d=n?vi:t?ki:Kn;return!t&&qe(i,"iterate",s?Rl:Ht),{next(){const{value:m,done:h}=u.next();return h?{value:m,done:h}:{value:o?[d(m[0]),d(m[1])]:d(m),done:h}},[Symbol.iterator](){return this}}}}function pt(e){return function(...t){return e==="delete"?!1:this}}function ad(){const e={get(i){return ar(this,i)},get size(){return sr(this)},has:or,add:Zi,set:Xi,delete:ea,clear:ta,forEach:cr(!1,!1)},t={get(i){return ar(this,i,!1,!0)},get size(){return sr(this)},has:or,add:Zi,set:Xi,delete:ea,clear:ta,forEach:cr(!1,!0)},n={get(i){return ar(this,i,!0)},get size(){return sr(this,!0)},has(i){return or.call(this,i,!0)},add:pt("add"),set:pt("set"),delete:pt("delete"),clear:pt("clear"),forEach:cr(!0,!1)},r={get(i){return ar(this,i,!0,!0)},get size(){return sr(this,!0)},has(i){return or.call(this,i,!0)},add:pt("add"),set:pt("set"),delete:pt("delete"),clear:pt("clear"),forEach:cr(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(i=>{e[i]=ur(i,!1,!1),n[i]=ur(i,!0,!1),t[i]=ur(i,!1,!0),r[i]=ur(i,!0,!0)}),[e,n,t,r]}const[od,sd,cd,ud]=ad();function fi(e,t){const n=t?e?ud:cd:e?sd:od;return(r,l,i)=>l==="__v_isReactive"?!e:l==="__v_isReadonly"?e:l==="__v_raw"?r:Reflect.get(de(n,l)&&l in r?n:r,l,i)}const dd={get:fi(!1,!1)},hd={get:fi(!1,!0)},gd={get:fi(!0,!1)},bs=new WeakMap,ks=new WeakMap,ys=new WeakMap,md=new WeakMap;function pd(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function vd(e){return e.__v_skip||!Object.isExtensible(e)?0:pd(Nu(e))}function _n(e){return Un(e)?e:bi(e,!1,_s,dd,bs)}function fd(e){return bi(e,!1,id,hd,ks)}function _i(e){return bi(e,!0,ld,gd,ys)}function bi(e,t,n,r,l){if(!Ae(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const i=l.get(e);if(i)return i;const a=vd(e);if(a===0)return e;const o=new Proxy(e,a===2?r:n);return l.set(e,o),o}function cn(e){return Un(e)?cn(e.__v_raw):!!(e&&e.__v_isReactive)}function Un(e){return!!(e&&e.__v_isReadonly)}function Es(e){return!!(e&&e.__v_isShallow)}function ws(e){return cn(e)||Un(e)}function ge(e){const t=e&&e.__v_raw;return t?ge(t):e}function Ps(e){return Ar(e,"__v_skip",!0),e}const Kn=e=>Ae(e)?_n(e):e,ki=e=>Ae(e)?_i(e):e;function Ss(e){Pt&<&&(e=ge(e),ps(e.dep||(e.dep=gi())))}function Os(e,t){e=ge(e),e.dep&&Il(e.dep)}function De(e){return!!(e&&e.__v_isRef===!0)}function Ee(e){return Ts(e,!1)}function As(e){return Ts(e,!0)}function Ts(e,t){return De(e)?e:new _d(e,t)}class _d{constructor(t,n){this.__v_isShallow=n,this.dep=void 0,this.__v_isRef=!0,this._rawValue=n?t:ge(t),this._value=n?t:Kn(t)}get value(){return Ss(this),this._value}set value(t){t=this.__v_isShallow?t:ge(t),Bn(t,this._rawValue)&&(this._rawValue=t,this._value=this.__v_isShallow?t:Kn(t),Os(this))}}function Bt(e){return De(e)?e.value:e}const bd={get:(e,t,n)=>Bt(Reflect.get(e,t,n)),set:(e,t,n,r)=>{const l=e[t];return De(l)&&!De(n)?(l.value=n,!0):Reflect.set(e,t,n,r)}};function Ls(e){return cn(e)?e:new Proxy(e,bd)}function kd(e){const t=te(e)?new Array(e.length):{};for(const n in e)t[n]=Ed(e,n);return t}class yd{constructor(t,n,r){this._object=t,this._key=n,this._defaultValue=r,this.__v_isRef=!0}get value(){const t=this._object[this._key];return t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}}function Ed(e,t,n){const r=e[t];return De(r)?r:new yd(e,t,n)}class wd{constructor(t,n,r,l){this._setter=n,this.dep=void 0,this.__v_isRef=!0,this._dirty=!0,this.effect=new mi(t,()=>{this._dirty||(this._dirty=!0,Os(this))}),this.effect.computed=this,this.effect.active=this._cacheable=!l,this.__v_isReadonly=r}get value(){const t=ge(this);return Ss(t),(t._dirty||!t._cacheable)&&(t._dirty=!1,t._value=t.effect.run()),t._value}set value(t){this._setter(t)}}function Pd(e,t,n=!1){let r,l;const i=ae(e);return i?(r=e,l=Xe):(r=e.get,l=e.set),new wd(r,l,i||!l,n)}Promise.resolve();function St(e,t,n,r){let l;try{l=r?e(...r):e()}catch(i){er(i,t,n)}return l}function Je(e,t,n,r){if(ae(e)){const i=St(e,t,n,r);return i&&ss(i)&&i.catch(a=>{er(a,t,n)}),i}const l=[];for(let i=0;i>>1;qn(Ue[r])ct&&Ue.splice(t,1)}function Is(e,t,n,r){te(e)?n.push(...e):(!t||!t.includes(e,e.allowRecurse?r+1:r))&&n.push(e),Rs()}function Td(e){Is(e,Ln,Cn,Xt)}function Ld(e){Is(e,bt,xn,en)}function Pi(e,t=null){if(Cn.length){for(xl=t,Ln=[...new Set(Cn)],Cn.length=0,Xt=0;Xtqn(n)-qn(r)),en=0;ene.id==null?1/0:e.id;function Cs(e){Cl=!1,Tr=!0,Pi(e),Ue.sort((n,r)=>qn(n)-qn(r));const t=Xe;try{for(ct=0;ctb.trim()):m&&(l=n.map(ds))}let o,s=r[o=cl(t)]||r[o=cl(ot(t))];!s&&i&&(s=r[o=cl(Wt(t))]),s&&Je(s,e,6,l);const u=r[o+"Once"];if(u){if(!e.emitted)e.emitted={};else if(e.emitted[o])return;e.emitted[o]=!0,Je(u,e,6,l)}}function xs(e,t,n=!1){const r=t.emitsCache,l=r.get(e);if(l!==void 0)return l;const i=e.emits;let a={},o=!1;if(!ae(e)){const s=u=>{const d=xs(u,t,!0);d&&(o=!0,Ce(a,d))};!n&&t.mixins.length&&t.mixins.forEach(s),e.extends&&s(e.extends),e.mixins&&e.mixins.forEach(s)}return!i&&!o?(r.set(e,null),null):(te(i)?i.forEach(s=>a[s]=null):Ce(a,i),r.set(e,a),a)}function Si(e,t){return!e||!Xn(t)?!1:(t=t.slice(2).replace(/Once$/,""),de(e,t[0].toLowerCase()+t.slice(1))||de(e,Wt(t))||de(e,t))}let Ke=null,Vs=null;function Dr(e){const t=Ke;return Ke=e,Vs=e&&e.type.__scopeId||null,t}function Rd(e,t=Ke,n){if(!t||e._n)return e;const r=(...l)=>{r._d&&ha(-1);const i=Dr(t),a=e(...l);return Dr(i),r._d&&ha(1),a};return r._n=!0,r._c=!0,r._d=!0,r}function dl(e){const{type:t,vnode:n,proxy:r,withProxy:l,props:i,propsOptions:[a],slots:o,attrs:s,emit:u,render:d,renderCache:m,data:h,setupState:b,ctx:g,inheritAttrs:_}=e;let f,k;const w=Dr(e);try{if(n.shapeFlag&4){const O=l||r;f=Ze(d.call(O,O,m,i,b,h,g)),k=s}else{const O=t;f=Ze(O.length>1?O(i,{attrs:s,slots:o,emit:u}):O(i,null)),k=t.props?s:Id(s)}}catch(O){Fn.length=0,er(O,e,1),f=Se(Ye)}let P=f;if(k&&_!==!1){const O=Object.keys(k),{shapeFlag:D}=P;O.length&&D&7&&(a&&O.some(ci)&&(k=Cd(k,a)),P=un(P,k))}return n.dirs&&(P.dirs=P.dirs?P.dirs.concat(n.dirs):n.dirs),n.transition&&(P.transition=n.transition),f=P,Dr(w),f}const Id=e=>{let t;for(const n in e)(n==="class"||n==="style"||Xn(n))&&((t||(t={}))[n]=e[n]);return t},Cd=(e,t)=>{const n={};for(const r in e)(!ci(r)||!(r.slice(9)in t))&&(n[r]=e[r]);return n};function xd(e,t,n){const{props:r,children:l,component:i}=e,{props:a,children:o,patchFlag:s}=t,u=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&s>=0){if(s&1024)return!0;if(s&16)return r?na(r,a,u):!!a;if(s&8){const d=t.dynamicProps;for(let m=0;me.__isSuspense;function Fs(e,t){t&&t.pendingBranch?te(e)?t.effects.push(...e):t.effects.push(e):Ld(e)}function Ut(e,t){if(Le){let n=Le.provides;const r=Le.parent&&Le.parent.provides;r===n&&(n=Le.provides=Object.create(r)),n[e]=t}}function Re(e,t,n=!1){const r=Le||Ke;if(r){const l=r.parent==null?r.vnode.appContext&&r.vnode.appContext.provides:r.parent.provides;if(l&&e in l)return l[e];if(arguments.length>1)return n&&ae(t)?t.call(r.proxy):t}}const ra={};function et(e,t,n){return js(e,t,n)}function js(e,t,{immediate:n,deep:r,flush:l,onTrack:i,onTrigger:a}=fe){const o=Le;let s,u=!1,d=!1;if(De(e)?(s=()=>e.value,u=Es(e)):cn(e)?(s=()=>e,r=!0):te(e)?(d=!0,u=e.some(cn),s=()=>e.map(k=>{if(De(k))return k.value;if(cn(k))return zt(k);if(ae(k))return St(k,o,2)})):ae(e)?t?s=()=>St(e,o,2):s=()=>{if(!(o&&o.isUnmounted))return m&&m(),Je(e,o,3,[h])}:s=Xe,t&&r){const k=s;s=()=>zt(k())}let m,h=k=>{m=f.onStop=()=>{St(k,o,4)}};if(hn)return h=Xe,t?n&&Je(t,o,3,[s(),d?[]:void 0,h]):s(),Xe;let b=d?[]:ra;const g=()=>{if(!!f.active)if(t){const k=f.run();(r||u||(d?k.some((w,P)=>Bn(w,b[P])):Bn(k,b)))&&(m&&m(),Je(t,o,3,[k,b===ra?void 0:b,h]),b=k)}else f.run()};g.allowRecurse=!!t;let _;l==="sync"?_=g:l==="post"?_=()=>Ne(g,o&&o.suspense):_=()=>{!o||o.isMounted?Td(g):g()};const f=new mi(s,_);return t?n?g():b=f.run():l==="post"?Ne(f.run.bind(f),o&&o.suspense):f.run(),()=>{f.stop(),o&&o.scope&&ui(o.scope.effects,f)}}function jd(e,t,n){const r=this.proxy,l=be(e)?e.includes(".")?Ns(r,e):()=>r[e]:e.bind(r,r);let i;ae(t)?i=t:(i=t.handler,n=t);const a=Le;dn(this);const o=js(l,i.bind(r),n);return a?dn(a):qt(),o}function Ns(e,t){const n=t.split(".");return()=>{let r=e;for(let l=0;l{zt(n,t)});else if(us(e))for(const n in e)zt(e[n],t);return e}function Nd(){const e={isMounted:!1,isLeaving:!1,isUnmounting:!1,leavingVNodes:new Map};return tt(()=>{e.isMounted=!0}),nl(()=>{e.isUnmounting=!0}),e}const We=[Function,Array],Md={name:"BaseTransition",props:{mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:We,onEnter:We,onAfterEnter:We,onEnterCancelled:We,onBeforeLeave:We,onLeave:We,onAfterLeave:We,onLeaveCancelled:We,onBeforeAppear:We,onAppear:We,onAfterAppear:We,onAppearCancelled:We},setup(e,{slots:t}){const n=rc(),r=Nd();let l;return()=>{const i=t.default&&Hs(t.default(),!0);if(!i||!i.length)return;const a=ge(e),{mode:o}=a,s=i[0];if(r.isLeaving)return hl(s);const u=la(s);if(!u)return hl(s);const d=Vl(u,a,r,n);Fl(u,d);const m=n.subTree,h=m&&la(m);let b=!1;const{getTransitionKey:g}=u.type;if(g){const _=g();l===void 0?l=_:_!==l&&(l=_,b=!0)}if(h&&h.type!==Ye&&(!Nt(u,h)||b)){const _=Vl(h,a,r,n);if(Fl(h,_),o==="out-in")return r.isLeaving=!0,_.afterLeave=()=>{r.isLeaving=!1,n.update()},hl(s);o==="in-out"&&u.type!==Ye&&(_.delayLeave=(f,k,w)=>{const P=zs(r,h);P[String(h.key)]=h,f._leaveCb=()=>{k(),f._leaveCb=void 0,delete d.delayedLeave},d.delayedLeave=w})}return s}}},Ms=Md;function zs(e,t){const{leavingVNodes:n}=e;let r=n.get(t.type);return r||(r=Object.create(null),n.set(t.type,r)),r}function Vl(e,t,n,r){const{appear:l,mode:i,persisted:a=!1,onBeforeEnter:o,onEnter:s,onAfterEnter:u,onEnterCancelled:d,onBeforeLeave:m,onLeave:h,onAfterLeave:b,onLeaveCancelled:g,onBeforeAppear:_,onAppear:f,onAfterAppear:k,onAppearCancelled:w}=t,P=String(e.key),O=zs(n,e),D=(L,A)=>{L&&Je(L,r,9,A)},j={mode:i,persisted:a,beforeEnter(L){let A=o;if(!n.isMounted)if(l)A=_||o;else return;L._leaveCb&&L._leaveCb(!0);const K=O[P];K&&Nt(e,K)&&K.el._leaveCb&&K.el._leaveCb(),D(A,[L])},enter(L){let A=s,K=u,B=d;if(!n.isMounted)if(l)A=f||s,K=k||u,B=w||d;else return;let W=!1;const T=L._enterCb=H=>{W||(W=!0,H?D(B,[L]):D(K,[L]),j.delayedLeave&&j.delayedLeave(),L._enterCb=void 0)};A?(A(L,T),A.length<=1&&T()):T()},leave(L,A){const K=String(e.key);if(L._enterCb&&L._enterCb(!0),n.isUnmounting)return A();D(m,[L]);let B=!1;const W=L._leaveCb=T=>{B||(B=!0,A(),T?D(g,[L]):D(b,[L]),L._leaveCb=void 0,O[K]===e&&delete O[K])};O[K]=e,h?(h(L,W),h.length<=1&&W()):W()},clone(L){return Vl(L,t,n,r)}};return j}function hl(e){if(tr(e))return e=un(e),e.children=null,e}function la(e){return tr(e)?e.children?e.children[0]:void 0:e}function Fl(e,t){e.shapeFlag&6&&e.component?Fl(e.component.subTree,t):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Hs(e,t=!1){let n=[],r=0;for(let l=0;l1)for(let l=0;l!!e.type.__asyncLoader;function v(e){ae(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:r,delay:l=200,timeout:i,suspensible:a=!0,onError:o}=e;let s=null,u,d=0;const m=()=>(d++,s=null,h()),h=()=>{let b;return s||(b=s=t().catch(g=>{if(g=g instanceof Error?g:new Error(String(g)),o)return new Promise((_,f)=>{o(g,()=>_(m()),()=>f(g),d+1)});throw g}).then(g=>b!==s&&s?s:(g&&(g.__esModule||g[Symbol.toStringTag]==="Module")&&(g=g.default),u=g,g)))};return ze({name:"AsyncComponentWrapper",__asyncLoader:h,get __asyncResolved(){return u},setup(){const b=Le;if(u)return()=>gl(u,b);const g=w=>{s=null,er(w,b,13,!r)};if(a&&b.suspense||hn)return h().then(w=>()=>gl(w,b)).catch(w=>(g(w),()=>r?Se(r,{error:w}):null));const _=Ee(!1),f=Ee(),k=Ee(!!l);return l&&setTimeout(()=>{k.value=!1},l),i!=null&&setTimeout(()=>{if(!_.value&&!f.value){const w=new Error(`Async component timed out after ${i}ms.`);g(w),f.value=w}},i),h().then(()=>{_.value=!0,b.parent&&tr(b.parent.vnode)&&wi(b.parent.update)}).catch(w=>{g(w),f.value=w}),()=>{if(_.value&&u)return gl(u,b);if(f.value&&r)return Se(r,{error:f.value});if(n&&!k.value)return Se(n)}}})}function gl(e,{vnode:{ref:t,props:n,children:r}}){const l=Se(e,n,r);return l.ref=t,l}const tr=e=>e.type.__isKeepAlive;function zd(e,t){Bs(e,"a",t)}function Hd(e,t){Bs(e,"da",t)}function Bs(e,t,n=Le){const r=e.__wdc||(e.__wdc=()=>{let l=n;for(;l;){if(l.isDeactivated)return;l=l.parent}return e()});if(tl(t,r,n),n){let l=n.parent;for(;l&&l.parent;)tr(l.parent.vnode)&&Bd(r,t,n,l),l=l.parent}}function Bd(e,t,n,r){const l=tl(t,e,r,!0);Oi(()=>{ui(r[t],l)},n)}function tl(e,t,n=Le,r=!1){if(n){const l=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...a)=>{if(n.isUnmounted)return;vn(),dn(n);const o=Je(t,n,e,a);return qt(),fn(),o});return r?l.unshift(i):l.push(i),i}}const mt=e=>(t,n=Le)=>(!hn||e==="sp")&&tl(e,t,n),Ud=mt("bm"),tt=mt("m"),Kd=mt("bu"),qd=mt("u"),nl=mt("bum"),Oi=mt("um"),Wd=mt("sp"),$d=mt("rtg"),Gd=mt("rtc");function Jd(e,t=Le){tl("ec",e,t)}let jl=!0;function Yd(e){const t=Ks(e),n=e.proxy,r=e.ctx;jl=!1,t.beforeCreate&&ia(t.beforeCreate,e,"bc");const{data:l,computed:i,methods:a,watch:o,provide:s,inject:u,created:d,beforeMount:m,mounted:h,beforeUpdate:b,updated:g,activated:_,deactivated:f,beforeDestroy:k,beforeUnmount:w,destroyed:P,unmounted:O,render:D,renderTracked:j,renderTriggered:L,errorCaptured:A,serverPrefetch:K,expose:B,inheritAttrs:W,components:T,directives:H,filters:Q}=t;if(u&&Qd(u,r,null,e.appContext.config.unwrapInjectedRef),a)for(const re in a){const le=a[re];ae(le)&&(r[re]=le.bind(n))}if(l){const re=l.call(n,n);Ae(re)&&(e.data=_n(re))}if(jl=!0,i)for(const re in i){const le=i[re],we=ae(le)?le.bind(n,n):ae(le.get)?le.get.bind(n,n):Xe,Oe=!ae(le)&&ae(le.set)?le.set.bind(n):Xe,Te=_e({get:we,set:Oe});Object.defineProperty(r,re,{enumerable:!0,configurable:!0,get:()=>Te.value,set:Pe=>Te.value=Pe})}if(o)for(const re in o)Us(o[re],r,n,re);if(s){const re=ae(s)?s.call(n):s;Reflect.ownKeys(re).forEach(le=>{Ut(le,re[le])})}d&&ia(d,e,"c");function J(re,le){te(le)?le.forEach(we=>re(we.bind(n))):le&&re(le.bind(n))}if(J(Ud,m),J(tt,h),J(Kd,b),J(qd,g),J(zd,_),J(Hd,f),J(Jd,A),J(Gd,j),J($d,L),J(nl,w),J(Oi,O),J(Wd,K),te(B))if(B.length){const re=e.exposed||(e.exposed={});B.forEach(le=>{Object.defineProperty(re,le,{get:()=>n[le],set:we=>n[le]=we})})}else e.exposed||(e.exposed={});D&&e.render===Xe&&(e.render=D),W!=null&&(e.inheritAttrs=W),T&&(e.components=T),H&&(e.directives=H)}function Qd(e,t,n=Xe,r=!1){te(e)&&(e=Nl(e));for(const l in e){const i=e[l];let a;Ae(i)?"default"in i?a=Re(i.from||l,i.default,!0):a=Re(i.from||l):a=Re(i),De(a)&&r?Object.defineProperty(t,l,{enumerable:!0,configurable:!0,get:()=>a.value,set:o=>a.value=o}):t[l]=a}}function ia(e,t,n){Je(te(e)?e.map(r=>r.bind(t.proxy)):e.bind(t.proxy),t,n)}function Us(e,t,n,r){const l=r.includes(".")?Ns(n,r):()=>n[r];if(be(e)){const i=t[e];ae(i)&&et(l,i)}else if(ae(e))et(l,e.bind(n));else if(Ae(e))if(te(e))e.forEach(i=>Us(i,t,n,r));else{const i=ae(e.handler)?e.handler.bind(n):t[e.handler];ae(i)&&et(l,i,e)}}function Ks(e){const t=e.type,{mixins:n,extends:r}=t,{mixins:l,optionsCache:i,config:{optionMergeStrategies:a}}=e.appContext,o=i.get(t);let s;return o?s=o:!l.length&&!n&&!r?s=t:(s={},l.length&&l.forEach(u=>Ir(s,u,a,!0)),Ir(s,t,a)),i.set(t,s),s}function Ir(e,t,n,r=!1){const{mixins:l,extends:i}=t;i&&Ir(e,i,n,!0),l&&l.forEach(a=>Ir(e,a,n,!0));for(const a in t)if(!(r&&a==="expose")){const o=Zd[a]||n&&n[a];e[a]=o?o(e[a],t[a]):t[a]}return e}const Zd={data:aa,props:Vt,emits:Vt,methods:Vt,computed:Vt,beforeCreate:Fe,created:Fe,beforeMount:Fe,mounted:Fe,beforeUpdate:Fe,updated:Fe,beforeDestroy:Fe,beforeUnmount:Fe,destroyed:Fe,unmounted:Fe,activated:Fe,deactivated:Fe,errorCaptured:Fe,serverPrefetch:Fe,components:Vt,directives:Vt,watch:eh,provide:aa,inject:Xd};function aa(e,t){return t?e?function(){return Ce(ae(e)?e.call(this,this):e,ae(t)?t.call(this,this):t)}:t:e}function Xd(e,t){return Vt(Nl(e),Nl(t))}function Nl(e){if(te(e)){const t={};for(let n=0;n0)&&!(a&16)){if(a&8){const d=e.vnode.dynamicProps;for(let m=0;m{s=!0;const[h,b]=Ws(m,t,!0);Ce(a,h),b&&o.push(...b)};!n&&t.mixins.length&&t.mixins.forEach(d),e.extends&&d(e.extends),e.mixins&&e.mixins.forEach(d)}if(!i&&!s)return r.set(e,on),on;if(te(i))for(let d=0;d-1,b[1]=_<0||g<_,(g>-1||de(b,"default"))&&o.push(m)}}}const u=[a,o];return r.set(e,u),u}function oa(e){return e[0]!=="$"}function sa(e){const t=e&&e.toString().match(/^\s*function (\w+)/);return t?t[1]:e===null?"null":""}function ca(e,t){return sa(e)===sa(t)}function ua(e,t){return te(t)?t.findIndex(n=>ca(n,e)):ae(t)&&ca(t,e)?0:-1}const $s=e=>e[0]==="_"||e==="$stable",Ai=e=>te(e)?e.map(Ze):[Ze(e)],rh=(e,t,n)=>{const r=Rd((...l)=>Ai(t(...l)),n);return r._c=!1,r},Gs=(e,t,n)=>{const r=e._ctx;for(const l in e){if($s(l))continue;const i=e[l];if(ae(i))t[l]=rh(l,i,r);else if(i!=null){const a=Ai(i);t[l]=()=>a}}},Js=(e,t)=>{const n=Ai(t);e.slots.default=()=>n},lh=(e,t)=>{if(e.vnode.shapeFlag&32){const n=t._;n?(e.slots=ge(t),Ar(t,"_",n)):Gs(t,e.slots={})}else e.slots={},t&&Js(e,t);Ar(e.slots,rl,1)},ih=(e,t,n)=>{const{vnode:r,slots:l}=e;let i=!0,a=fe;if(r.shapeFlag&32){const o=t._;o?n&&o===1?i=!1:(Ce(l,t),!n&&o===1&&delete l._):(i=!t.$stable,Gs(t,l)),a=t}else t&&(Js(e,t),a={default:1});if(i)for(const o in l)!$s(o)&&!(o in a)&&delete l[o]};function z_(e,t){const n=Ke;if(n===null)return e;const r=n.proxy,l=e.dirs||(e.dirs=[]);for(let i=0;iCr(h,t&&(te(t)?t[b]:t),n,r,l));return}if(Rr(r)&&!l)return;const i=r.shapeFlag&4?Ri(r.component)||r.component.proxy:r.el,a=l?null:i,{i:o,r:s}=e,u=t&&t.r,d=o.refs===fe?o.refs={}:o.refs,m=o.setupState;if(u!=null&&u!==s&&(be(u)?(d[u]=null,de(m,u)&&(m[u]=null)):De(u)&&(u.value=null)),ae(s))St(s,o,12,[a,d]);else{const h=be(s),b=De(s);if(h||b){const g=()=>{if(e.f){const _=h?d[s]:s.value;l?te(_)&&ui(_,i):te(_)?_.includes(i)||_.push(i):h?d[s]=[i]:(s.value=[i],e.k&&(d[e.k]=s.value))}else h?(d[s]=a,de(m,s)&&(m[s]=a)):De(s)&&(s.value=a,e.k&&(d[e.k]=a))};a?(g.id=-1,Ne(g,n)):g()}}}let vt=!1;const dr=e=>/svg/.test(e.namespaceURI)&&e.tagName!=="foreignObject",ml=e=>e.nodeType===8;function sh(e){const{mt:t,p:n,o:{patchProp:r,nextSibling:l,parentNode:i,remove:a,insert:o,createComment:s}}=e,u=(f,k)=>{if(!k.hasChildNodes()){n(null,f,k),Lr();return}vt=!1,d(k.firstChild,f,null,null,null),Lr(),vt&&console.error("Hydration completed but contains mismatches.")},d=(f,k,w,P,O,D=!1)=>{const j=ml(f)&&f.data==="[",L=()=>g(f,k,w,P,O,j),{type:A,ref:K,shapeFlag:B}=k,W=f.nodeType;k.el=f;let T=null;switch(A){case Wn:W!==3?T=L():(f.data!==k.children&&(vt=!0,f.data=k.children),T=l(f));break;case Ye:W!==8||j?T=L():T=l(f);break;case Vn:if(W!==1)T=L();else{T=f;const H=!k.children.length;for(let Q=0;Q{D=D||!!k.dynamicChildren;const{type:j,props:L,patchFlag:A,shapeFlag:K,dirs:B}=k,W=j==="input"&&B||j==="option";if(W||A!==-1){if(B&&rt(k,null,w,"created"),L)if(W||!D||A&48)for(const H in L)(W&&H.endsWith("value")||Xn(H)&&!In(H))&&r(f,H,null,L[H],!1,void 0,w);else L.onClick&&r(f,"onClick",null,L.onClick,!1,void 0,w);let T;if((T=L&&L.onVnodeBeforeMount)&&$e(T,w,k),B&&rt(k,null,w,"beforeMount"),((T=L&&L.onVnodeMounted)||B)&&Fs(()=>{T&&$e(T,w,k),B&&rt(k,null,w,"mounted")},P),K&16&&!(L&&(L.innerHTML||L.textContent))){let H=h(f.firstChild,k,f,w,P,O,D);for(;H;){vt=!0;const Q=H;H=H.nextSibling,a(Q)}}else K&8&&f.textContent!==k.children&&(vt=!0,f.textContent=k.children)}return f.nextSibling},h=(f,k,w,P,O,D,j)=>{j=j||!!k.dynamicChildren;const L=k.children,A=L.length;for(let K=0;K{const{slotScopeIds:j}=k;j&&(O=O?O.concat(j):j);const L=i(f),A=h(l(f),k,L,w,P,O,D);return A&&ml(A)&&A.data==="]"?l(k.anchor=A):(vt=!0,o(k.anchor=s("]"),L,A),A)},g=(f,k,w,P,O,D)=>{if(vt=!0,k.el=null,D){const A=_(f);for(;;){const K=l(f);if(K&&K!==A)a(K);else break}}const j=l(f),L=i(f);return a(f),n(null,k,L,j,w,P,dr(L),O),j},_=f=>{let k=0;for(;f;)if(f=l(f),f&&ml(f)&&(f.data==="["&&k++,f.data==="]")){if(k===0)return l(f);k--}return f};return[u,d]}const Ne=Fs;function ch(e){return uh(e,sh)}function uh(e,t){const n=Hu();n.__VUE__=!0;const{insert:r,remove:l,patchProp:i,createElement:a,createText:o,createComment:s,setText:u,setElementText:d,parentNode:m,nextSibling:h,setScopeId:b=Xe,cloneNode:g,insertStaticContent:_}=e,f=(p,y,S,R=null,C=null,x=null,M=!1,V=null,z=!!y.dynamicChildren)=>{if(p===y)return;p&&!Nt(p,y)&&(R=q(p),Ie(p,C,x,!0),p=null),y.patchFlag===-2&&(z=!1,y.dynamicChildren=null);const{type:F,ref:Y,shapeFlag:G}=y;switch(F){case Wn:k(p,y,S,R);break;case Ye:w(p,y,S,R);break;case Vn:p==null&&P(y,S,R,M);break;case Me:H(p,y,S,R,C,x,M,V,z);break;default:G&1?j(p,y,S,R,C,x,M,V,z):G&6?Q(p,y,S,R,C,x,M,V,z):(G&64||G&128)&&F.process(p,y,S,R,C,x,M,V,z,me)}Y!=null&&C&&Cr(Y,p&&p.ref,x,y||p,!y)},k=(p,y,S,R)=>{if(p==null)r(y.el=o(y.children),S,R);else{const C=y.el=p.el;y.children!==p.children&&u(C,y.children)}},w=(p,y,S,R)=>{p==null?r(y.el=s(y.children||""),S,R):y.el=p.el},P=(p,y,S,R)=>{[p.el,p.anchor]=_(p.children,y,S,R,p.el,p.anchor)},O=({el:p,anchor:y},S,R)=>{let C;for(;p&&p!==y;)C=h(p),r(p,S,R),p=C;r(y,S,R)},D=({el:p,anchor:y})=>{let S;for(;p&&p!==y;)S=h(p),l(p),p=S;l(y)},j=(p,y,S,R,C,x,M,V,z)=>{M=M||y.type==="svg",p==null?L(y,S,R,C,x,M,V,z):B(p,y,C,x,M,V,z)},L=(p,y,S,R,C,x,M,V)=>{let z,F;const{type:Y,props:G,shapeFlag:$,transition:X,patchFlag:oe,dirs:ye}=p;if(p.el&&g!==void 0&&oe===-1)z=p.el=g(p.el);else{if(z=p.el=a(p.type,x,G&&G.is,G),$&8?d(z,p.children):$&16&&K(p.children,z,null,R,C,x&&Y!=="foreignObject",M,V),ye&&rt(p,null,R,"created"),G){for(const ke in G)ke!=="value"&&!In(ke)&&i(z,ke,null,G[ke],x,p.children,R,C,N);"value"in G&&i(z,"value",null,G.value),(F=G.onVnodeBeforeMount)&&$e(F,R,p)}A(z,p,p.scopeId,M,R)}ye&&rt(p,null,R,"beforeMount");const pe=(!C||C&&!C.pendingBranch)&&X&&!X.persisted;pe&&X.beforeEnter(z),r(z,y,S),((F=G&&G.onVnodeMounted)||pe||ye)&&Ne(()=>{F&&$e(F,R,p),pe&&X.enter(z),ye&&rt(p,null,R,"mounted")},C)},A=(p,y,S,R,C)=>{if(S&&b(p,S),R)for(let x=0;x{for(let F=z;F{const V=y.el=p.el;let{patchFlag:z,dynamicChildren:F,dirs:Y}=y;z|=p.patchFlag&16;const G=p.props||fe,$=y.props||fe;let X;S&&Dt(S,!1),(X=$.onVnodeBeforeUpdate)&&$e(X,S,y,p),Y&&rt(y,p,S,"beforeUpdate"),S&&Dt(S,!0);const oe=C&&y.type!=="foreignObject";if(F?W(p.dynamicChildren,F,V,S,R,oe,x):M||we(p,y,V,null,S,R,oe,x,!1),z>0){if(z&16)T(V,y,G,$,S,R,C);else if(z&2&&G.class!==$.class&&i(V,"class",null,$.class,C),z&4&&i(V,"style",G.style,$.style,C),z&8){const ye=y.dynamicProps;for(let pe=0;pe{X&&$e(X,S,y,p),Y&&rt(y,p,S,"updated")},R)},W=(p,y,S,R,C,x,M)=>{for(let V=0;V{if(S!==R){for(const V in R){if(In(V))continue;const z=R[V],F=S[V];z!==F&&V!=="value"&&i(p,V,F,z,M,y.children,C,x,N)}if(S!==fe)for(const V in S)!In(V)&&!(V in R)&&i(p,V,S[V],null,M,y.children,C,x,N);"value"in R&&i(p,"value",S.value,R.value)}},H=(p,y,S,R,C,x,M,V,z)=>{const F=y.el=p?p.el:o(""),Y=y.anchor=p?p.anchor:o("");let{patchFlag:G,dynamicChildren:$,slotScopeIds:X}=y;X&&(V=V?V.concat(X):X),p==null?(r(F,S,R),r(Y,S,R),K(y.children,S,Y,C,x,M,V,z)):G>0&&G&64&&$&&p.dynamicChildren?(W(p.dynamicChildren,$,S,C,x,M,V),(y.key!=null||C&&y===C.subTree)&&Qs(p,y,!0)):we(p,y,S,Y,C,x,M,V,z)},Q=(p,y,S,R,C,x,M,V,z)=>{y.slotScopeIds=V,p==null?y.shapeFlag&512?C.ctx.activate(y,S,R,M,z):se(y,S,R,C,x,M,z):J(p,y,z)},se=(p,y,S,R,C,x,M)=>{const V=p.component=wh(p,R,C);if(tr(p)&&(V.ctx.renderer=me),Ph(V),V.asyncDep){if(C&&C.registerDep(V,re),!p.el){const z=V.subTree=Se(Ye);w(null,z,y,S)}return}re(V,p,y,S,C,x,M)},J=(p,y,S)=>{const R=y.component=p.component;if(xd(p,y,S))if(R.asyncDep&&!R.asyncResolved){le(R,y,S);return}else R.next=y,Ad(R.update),R.update();else y.component=p.component,y.el=p.el,R.vnode=y},re=(p,y,S,R,C,x,M)=>{const V=()=>{if(p.isMounted){let{next:Y,bu:G,u:$,parent:X,vnode:oe}=p,ye=Y,pe;Dt(p,!1),Y?(Y.el=oe.el,le(p,Y,M)):Y=oe,G&&ul(G),(pe=Y.props&&Y.props.onVnodeBeforeUpdate)&&$e(pe,X,Y,oe),Dt(p,!0);const ke=dl(p),Qe=p.subTree;p.subTree=ke,f(Qe,ke,m(Qe.el),q(Qe),p,C,x),Y.el=ke.el,ye===null&&Vd(p,ke.el),$&&Ne($,C),(pe=Y.props&&Y.props.onVnodeUpdated)&&Ne(()=>$e(pe,X,Y,oe),C)}else{let Y;const{el:G,props:$}=y,{bm:X,m:oe,parent:ye}=p,pe=Rr(y);if(Dt(p,!1),X&&ul(X),!pe&&(Y=$&&$.onVnodeBeforeMount)&&$e(Y,ye,y),Dt(p,!0),G&&ne){const ke=()=>{p.subTree=dl(p),ne(G,p.subTree,p,C,null)};pe?y.type.__asyncLoader().then(()=>!p.isUnmounted&&ke()):ke()}else{const ke=p.subTree=dl(p);f(null,ke,S,R,p,C,x),y.el=ke.el}if(oe&&Ne(oe,C),!pe&&(Y=$&&$.onVnodeMounted)){const ke=y;Ne(()=>$e(Y,ye,ke),C)}y.shapeFlag&256&&p.a&&Ne(p.a,C),p.isMounted=!0,y=S=R=null}},z=p.effect=new mi(V,()=>wi(p.update),p.scope),F=p.update=z.run.bind(z);F.id=p.uid,Dt(p,!0),F()},le=(p,y,S)=>{y.component=p;const R=p.vnode.props;p.vnode=y,p.next=null,nh(p,y.props,R,S),ih(p,y.children,S),vn(),Pi(void 0,p.update),fn()},we=(p,y,S,R,C,x,M,V,z=!1)=>{const F=p&&p.children,Y=p?p.shapeFlag:0,G=y.children,{patchFlag:$,shapeFlag:X}=y;if($>0){if($&128){Te(F,G,S,R,C,x,M,V,z);return}else if($&256){Oe(F,G,S,R,C,x,M,V,z);return}}X&8?(Y&16&&N(F,C,x),G!==F&&d(S,G)):Y&16?X&16?Te(F,G,S,R,C,x,M,V,z):N(F,C,x,!0):(Y&8&&d(S,""),X&16&&K(G,S,R,C,x,M,V,z))},Oe=(p,y,S,R,C,x,M,V,z)=>{p=p||on,y=y||on;const F=p.length,Y=y.length,G=Math.min(F,Y);let $;for($=0;$Y?N(p,C,x,!0,!1,G):K(y,S,R,C,x,M,V,z,G)},Te=(p,y,S,R,C,x,M,V,z)=>{let F=0;const Y=y.length;let G=p.length-1,$=Y-1;for(;F<=G&&F<=$;){const X=p[F],oe=y[F]=z?kt(y[F]):Ze(y[F]);if(Nt(X,oe))f(X,oe,S,null,C,x,M,V,z);else break;F++}for(;F<=G&&F<=$;){const X=p[G],oe=y[$]=z?kt(y[$]):Ze(y[$]);if(Nt(X,oe))f(X,oe,S,null,C,x,M,V,z);else break;G--,$--}if(F>G){if(F<=$){const X=$+1,oe=X$)for(;F<=G;)Ie(p[F],C,x,!0),F++;else{const X=F,oe=F,ye=new Map;for(F=oe;F<=$;F++){const Be=y[F]=z?kt(y[F]):Ze(y[F]);Be.key!=null&&ye.set(Be.key,F)}let pe,ke=0;const Qe=$-oe+1;let $t=!1,Ki=0;const kn=new Array(Qe);for(F=0;F=Qe){Ie(Be,C,x,!0);continue}let nt;if(Be.key!=null)nt=ye.get(Be.key);else for(pe=oe;pe<=$;pe++)if(kn[pe-oe]===0&&Nt(Be,y[pe])){nt=pe;break}nt===void 0?Ie(Be,C,x,!0):(kn[nt-oe]=F+1,nt>=Ki?Ki=nt:$t=!0,f(Be,y[nt],S,null,C,x,M,V,z),ke++)}const qi=$t?dh(kn):on;for(pe=qi.length-1,F=Qe-1;F>=0;F--){const Be=oe+F,nt=y[Be],Wi=Be+1{const{el:x,type:M,transition:V,children:z,shapeFlag:F}=p;if(F&6){Pe(p.component.subTree,y,S,R);return}if(F&128){p.suspense.move(y,S,R);return}if(F&64){M.move(p,y,S,me);return}if(M===Me){r(x,y,S);for(let G=0;GV.enter(x),C);else{const{leave:G,delayLeave:$,afterLeave:X}=V,oe=()=>r(x,y,S),ye=()=>{G(x,()=>{oe(),X&&X()})};$?$(x,oe,ye):ye()}else r(x,y,S)},Ie=(p,y,S,R=!1,C=!1)=>{const{type:x,props:M,ref:V,children:z,dynamicChildren:F,shapeFlag:Y,patchFlag:G,dirs:$}=p;if(V!=null&&Cr(V,null,S,p,!0),Y&256){y.ctx.deactivate(p);return}const X=Y&1&&$,oe=!Rr(p);let ye;if(oe&&(ye=M&&M.onVnodeBeforeUnmount)&&$e(ye,y,p),Y&6)U(p.component,S,R);else{if(Y&128){p.suspense.unmount(S,R);return}X&&rt(p,null,y,"beforeUnmount"),Y&64?p.type.remove(p,y,S,C,me,R):F&&(x!==Me||G>0&&G&64)?N(F,y,S,!1,!0):(x===Me&&G&384||!C&&Y&16)&&N(z,y,S),R&&He(p)}(oe&&(ye=M&&M.onVnodeUnmounted)||X)&&Ne(()=>{ye&&$e(ye,y,p),X&&rt(p,null,y,"unmounted")},S)},He=p=>{const{type:y,el:S,anchor:R,transition:C}=p;if(y===Me){I(S,R);return}if(y===Vn){D(p);return}const x=()=>{l(S),C&&!C.persisted&&C.afterLeave&&C.afterLeave()};if(p.shapeFlag&1&&C&&!C.persisted){const{leave:M,delayLeave:V}=C,z=()=>M(S,x);V?V(p.el,x,z):z()}else x()},I=(p,y)=>{let S;for(;p!==y;)S=h(p),l(p),p=S;l(y)},U=(p,y,S)=>{const{bum:R,scope:C,update:x,subTree:M,um:V}=p;R&&ul(R),C.stop(),x&&(x.active=!1,Ie(M,p,y,S)),V&&Ne(V,y),Ne(()=>{p.isUnmounted=!0},y),y&&y.pendingBranch&&!y.isUnmounted&&p.asyncDep&&!p.asyncResolved&&p.suspenseId===y.pendingId&&(y.deps--,y.deps===0&&y.resolve())},N=(p,y,S,R=!1,C=!1,x=0)=>{for(let M=x;Mp.shapeFlag&6?q(p.component.subTree):p.shapeFlag&128?p.suspense.next():h(p.anchor||p.el),ue=(p,y,S)=>{p==null?y._vnode&&Ie(y._vnode,null,null,!0):f(y._vnode||null,p,y,null,null,null,S),Lr(),y._vnode=p},me={p:f,um:Ie,m:Pe,r:He,mt:se,mc:K,pc:we,pbc:W,n:q,o:e};let ie,ne;return t&&([ie,ne]=t(me)),{render:ue,hydrate:ie,createApp:oh(ue,ie)}}function Dt({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function Qs(e,t,n=!1){const r=e.children,l=t.children;if(te(r)&&te(l))for(let i=0;i>1,e[n[o]]0&&(t[r]=n[i-1]),n[i]=r)}}for(i=n.length,a=n[i-1];i-- >0;)n[i]=a,a=t[a];return n}const hh=e=>e.__isTeleport,Zs="components";function gh(e,t){return ph(Zs,e,!0,t)||e}const mh=Symbol();function ph(e,t,n=!0,r=!1){const l=Ke||Le;if(l){const i=l.type;if(e===Zs){const o=Th(i);if(o&&(o===t||o===ot(t)||o===Xr(ot(t))))return i}const a=da(l[e]||i[e],t)||da(l.appContext[e],t);return!a&&r?i:a}}function da(e,t){return e&&(e[t]||e[ot(t)]||e[Xr(ot(t))])}const Me=Symbol(void 0),Wn=Symbol(void 0),Ye=Symbol(void 0),Vn=Symbol(void 0),Fn=[];let Kt=null;function nr(e=!1){Fn.push(Kt=e?null:[])}function vh(){Fn.pop(),Kt=Fn[Fn.length-1]||null}let xr=1;function ha(e){xr+=e}function Xs(e){return e.dynamicChildren=xr>0?Kt||on:null,vh(),xr>0&&Kt&&Kt.push(e),e}function Ti(e,t,n,r,l,i){return Xs(Fr(e,t,n,r,l,i,!0))}function ec(e,t,n,r,l){return Xs(Se(e,t,n,r,l,!0))}function Vr(e){return e?e.__v_isVNode===!0:!1}function Nt(e,t){return e.type===t.type&&e.key===t.key}const rl="__vInternal",tc=({key:e})=>e!=null?e:null,kr=({ref:e,ref_key:t,ref_for:n})=>e!=null?be(e)||De(e)||ae(e)?{i:Ke,r:e,k:t,f:!!n}:e:null;function Fr(e,t=null,n=null,r=0,l=null,i=e===Me?0:1,a=!1,o=!1){const s={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&tc(t),ref:t&&kr(t),scopeId:Vs,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:r,dynamicProps:l,dynamicChildren:null,appContext:null};return o?(Di(s,n),i&128&&e.normalize(s)):n&&(s.shapeFlag|=be(n)?8:16),xr>0&&!a&&Kt&&(s.patchFlag>0||i&6)&&s.patchFlag!==32&&Kt.push(s),s}const Se=fh;function fh(e,t=null,n=null,r=0,l=null,i=!1){if((!e||e===mh)&&(e=Ye),Vr(e)){const o=un(e,t,!0);return n&&Di(o,n),o}if(Lh(e)&&(e=e.__vccOpts),t){t=_h(t);let{class:o,style:s}=t;o&&!be(o)&&(t.class=wt(o)),Ae(s)&&(ws(s)&&!te(s)&&(s=Ce({},s)),t.style=Yr(s))}const a=be(e)?1:Fd(e)?128:hh(e)?64:Ae(e)?4:ae(e)?2:0;return Fr(e,t,n,r,l,a,i,!0)}function _h(e){return e?ws(e)||rl in e?Ce({},e):e:null}function un(e,t,n=!1){const{props:r,ref:l,patchFlag:i,children:a}=e,o=t?bh(r||{},t):r;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:o,key:o&&tc(o),ref:t&&t.ref?n&&l?te(l)?l.concat(kr(t)):[l,kr(t)]:kr(t):l,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:a,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Me?i===-1?16:i|16:i,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&un(e.ssContent),ssFallback:e.ssFallback&&un(e.ssFallback),el:e.el,anchor:e.anchor}}function Li(e=" ",t=0){return Se(Wn,null,e,t)}function H_(e,t){const n=Se(Vn,null,e);return n.staticCount=t,n}function B_(e="",t=!1){return t?(nr(),ec(Ye,null,e)):Se(Ye,null,e)}function Ze(e){return e==null||typeof e=="boolean"?Se(Ye):te(e)?Se(Me,null,e.slice()):typeof e=="object"?kt(e):Se(Wn,null,String(e))}function kt(e){return e.el===null||e.memo?e:un(e)}function Di(e,t){let n=0;const{shapeFlag:r}=e;if(t==null)t=null;else if(te(t))n=16;else if(typeof t=="object")if(r&65){const l=t.default;l&&(l._c&&(l._d=!1),Di(e,l()),l._c&&(l._d=!0));return}else{n=32;const l=t._;!l&&!(rl in t)?t._ctx=Ke:l===3&&Ke&&(Ke.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else ae(t)?(t={default:t,_ctx:Ke},n=32):(t=String(t),r&64?(n=16,t=[Li(t)]):n=8);e.children=t,e.shapeFlag|=n}function bh(...e){const t={};for(let n=0;nt(a,o,void 0,i&&i[o]));else{const a=Object.keys(e);l=new Array(a.length);for(let o=0,s=a.length;oVr(t)?!(t.type===Ye||t.type===Me&&!nc(t.children)):!0)?e:null}const zl=e=>e?lc(e)?Ri(e)||e.proxy:zl(e.parent):null,Nr=Ce(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>zl(e.parent),$root:e=>zl(e.root),$emit:e=>e.emit,$options:e=>Ks(e),$forceUpdate:e=>()=>wi(e.update),$nextTick:e=>Ei.bind(e.proxy),$watch:e=>jd.bind(e)}),kh={get({_:e},t){const{ctx:n,setupState:r,data:l,props:i,accessCache:a,type:o,appContext:s}=e;let u;if(t[0]!=="$"){const b=a[t];if(b!==void 0)switch(b){case 1:return r[t];case 2:return l[t];case 4:return n[t];case 3:return i[t]}else{if(r!==fe&&de(r,t))return a[t]=1,r[t];if(l!==fe&&de(l,t))return a[t]=2,l[t];if((u=e.propsOptions[0])&&de(u,t))return a[t]=3,i[t];if(n!==fe&&de(n,t))return a[t]=4,n[t];jl&&(a[t]=0)}}const d=Nr[t];let m,h;if(d)return t==="$attrs"&&qe(e,"get",t),d(e);if((m=o.__cssModules)&&(m=m[t]))return m;if(n!==fe&&de(n,t))return a[t]=4,n[t];if(h=s.config.globalProperties,de(h,t))return h[t]},set({_:e},t,n){const{data:r,setupState:l,ctx:i}=e;return l!==fe&&de(l,t)?(l[t]=n,!0):r!==fe&&de(r,t)?(r[t]=n,!0):de(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:r,appContext:l,propsOptions:i}},a){let o;return!!n[a]||e!==fe&&de(e,a)||t!==fe&&de(t,a)||(o=i[0])&&de(o,a)||de(r,a)||de(Nr,a)||de(l.config.globalProperties,a)},defineProperty(e,t,n){return n.get!=null?this.set(e,t,n.get(),null):n.value!=null&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}},yh=Ys();let Eh=0;function wh(e,t,n){const r=e.type,l=(t?t.appContext:e.appContext)||yh,i={uid:Eh++,vnode:e,type:r,parent:t,appContext:l,root:null,next:null,subTree:null,effect:null,update:null,scope:new Bu(!0),render:null,proxy:null,exposed:null,exposeProxy:null,withProxy:null,provides:t?t.provides:Object.create(l.provides),accessCache:null,renderCache:[],components:null,directives:null,propsOptions:Ws(r,l),emitsOptions:xs(r,l),emit:null,emitted:null,propsDefaults:fe,inheritAttrs:r.inheritAttrs,ctx:fe,data:fe,props:fe,attrs:fe,slots:fe,refs:fe,setupState:fe,setupContext:null,suspense:n,suspenseId:n?n.pendingId:0,asyncDep:null,asyncResolved:!1,isMounted:!1,isUnmounted:!1,isDeactivated:!1,bc:null,c:null,bm:null,m:null,bu:null,u:null,um:null,bum:null,da:null,a:null,rtg:null,rtc:null,ec:null,sp:null};return i.ctx={_:i},i.root=t?t.root:i,i.emit=Dd.bind(null,i),e.ce&&e.ce(i),i}let Le=null;const rc=()=>Le||Ke,dn=e=>{Le=e,e.scope.on()},qt=()=>{Le&&Le.scope.off(),Le=null};function lc(e){return e.vnode.shapeFlag&4}let hn=!1;function Ph(e,t=!1){hn=t;const{props:n,children:r}=e.vnode,l=lc(e);th(e,n,l,t),lh(e,r);const i=l?Sh(e,t):void 0;return hn=!1,i}function Sh(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=Ps(new Proxy(e.ctx,kh));const{setup:r}=n;if(r){const l=e.setupContext=r.length>1?Ah(e):null;dn(e),vn();const i=St(r,e,0,[e.props,l]);if(fn(),qt(),ss(i)){if(i.then(qt,qt),t)return i.then(a=>{ga(e,a,t)}).catch(a=>{er(a,e,0)});e.asyncDep=i}else ga(e,i,t)}else ic(e,t)}function ga(e,t,n){ae(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:Ae(t)&&(e.setupState=Ls(t)),ic(e,n)}let ma;function ic(e,t,n){const r=e.type;if(!e.render){if(!t&&ma&&!r.render){const l=r.template;if(l){const{isCustomElement:i,compilerOptions:a}=e.appContext.config,{delimiters:o,compilerOptions:s}=r,u=Ce(Ce({isCustomElement:i,delimiters:o},a),s);r.render=ma(l,u)}}e.render=r.render||Xe}dn(e),vn(),Yd(e),fn(),qt()}function Oh(e){return new Proxy(e.attrs,{get(t,n){return qe(e,"get","$attrs"),t[n]}})}function Ah(e){const t=r=>{e.exposed=r||{}};let n;return{get attrs(){return n||(n=Oh(e))},slots:e.slots,emit:e.emit,expose:t}}function Ri(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(Ls(Ps(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Nr)return Nr[n](e)}}))}function Th(e){return ae(e)&&e.displayName||e.name}function Lh(e){return ae(e)&&"__vccOpts"in e}const _e=(e,t)=>Pd(e,t,hn);function ee(e,t,n){const r=arguments.length;return r===2?Ae(t)&&!te(t)?Vr(t)?Se(e,null,[t]):Se(e,t):Se(e,null,t):(r>3?n=Array.prototype.slice.call(arguments,2):r===3&&Vr(n)&&(n=[n]),Se(e,t,n))}const Dh="3.2.31",Rh="http://www.w3.org/2000/svg",Mt=typeof document!="undefined"?document:null,pa=Mt&&Mt.createElement("template"),Ih={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,r)=>{const l=t?Mt.createElementNS(Rh,e):Mt.createElement(e,n?{is:n}:void 0);return e==="select"&&r&&r.multiple!=null&&l.setAttribute("multiple",r.multiple),l},createText:e=>Mt.createTextNode(e),createComment:e=>Mt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Mt.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},cloneNode(e){const t=e.cloneNode(!0);return"_value"in e&&(t._value=e._value),t},insertStaticContent(e,t,n,r,l,i){const a=n?n.previousSibling:t.lastChild;if(l&&(l===i||l.nextSibling))for(;t.insertBefore(l.cloneNode(!0),n),!(l===i||!(l=l.nextSibling)););else{pa.innerHTML=r?`${e}`:e;const o=pa.content;if(r){const s=o.firstChild;for(;s.firstChild;)o.appendChild(s.firstChild);o.removeChild(s)}t.insertBefore(o,n)}return[a?a.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}};function Ch(e,t,n){const r=e._vtc;r&&(t=(t?[t,...r]:[...r]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}function xh(e,t,n){const r=e.style,l=be(n);if(n&&!l){for(const i in n)Hl(r,i,n[i]);if(t&&!be(t))for(const i in t)n[i]==null&&Hl(r,i,"")}else{const i=r.display;l?t!==n&&(r.cssText=n):t&&e.removeAttribute("style"),"_vod"in e&&(r.display=i)}}const va=/\s*!important$/;function Hl(e,t,n){if(te(n))n.forEach(r=>Hl(e,t,r));else if(t.startsWith("--"))e.setProperty(t,n);else{const r=Vh(e,t);va.test(n)?e.setProperty(Wt(r),n.replace(va,""),"important"):e[r]=n}}const fa=["Webkit","Moz","ms"],pl={};function Vh(e,t){const n=pl[t];if(n)return n;let r=ot(t);if(r!=="filter"&&r in e)return pl[t]=r;r=Xr(r);for(let l=0;ldocument.createEvent("Event").timeStamp&&(Mr=()=>performance.now());const e=navigator.userAgent.match(/firefox\/(\d+)/i);ac=!!(e&&Number(e[1])<=53)}let Bl=0;const Nh=Promise.resolve(),Mh=()=>{Bl=0},zh=()=>Bl||(Nh.then(Mh),Bl=Mr());function Hh(e,t,n,r){e.addEventListener(t,n,r)}function Bh(e,t,n,r){e.removeEventListener(t,n,r)}function Uh(e,t,n,r,l=null){const i=e._vei||(e._vei={}),a=i[t];if(r&&a)a.value=r;else{const[o,s]=Kh(t);if(r){const u=i[t]=qh(r,l);Hh(e,o,u,s)}else a&&(Bh(e,o,a,s),i[t]=void 0)}}const ba=/(?:Once|Passive|Capture)$/;function Kh(e){let t;if(ba.test(e)){t={};let n;for(;n=e.match(ba);)e=e.slice(0,e.length-n[0].length),t[n[0].toLowerCase()]=!0}return[Wt(e.slice(2)),t]}function qh(e,t){const n=r=>{const l=r.timeStamp||Mr();(ac||l>=n.attached-1)&&Je(Wh(r,n.value),t,5,[r])};return n.value=e,n.attached=zh(),n}function Wh(e,t){if(te(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(r=>l=>!l._stopped&&r&&r(l))}else return t}const ka=/^on[a-z]/,$h=(e,t,n,r,l=!1,i,a,o,s)=>{t==="class"?Ch(e,r,l):t==="style"?xh(e,n,r):Xn(t)?ci(t)||Uh(e,t,n,r,a):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Gh(e,t,r,l))?jh(e,t,r,i,a,o,s):(t==="true-value"?e._trueValue=r:t==="false-value"&&(e._falseValue=r),Fh(e,t,r,l))};function Gh(e,t,n,r){return r?!!(t==="innerHTML"||t==="textContent"||t in e&&ka.test(t)&&ae(n)):t==="spellcheck"||t==="draggable"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA"||ka.test(t)&&be(n)?!1:t in e}const ft="transition",yn="animation",Ii=(e,{slots:t})=>ee(Ms,Jh(e),t);Ii.displayName="Transition";const oc={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String};Ii.props=Ce({},Ms.props,oc);const Rt=(e,t=[])=>{te(e)?e.forEach(n=>n(...t)):e&&e(...t)},ya=e=>e?te(e)?e.some(t=>t.length>1):e.length>1:!1;function Jh(e){const t={};for(const T in e)T in oc||(t[T]=e[T]);if(e.css===!1)return t;const{name:n="v",type:r,duration:l,enterFromClass:i=`${n}-enter-from`,enterActiveClass:a=`${n}-enter-active`,enterToClass:o=`${n}-enter-to`,appearFromClass:s=i,appearActiveClass:u=a,appearToClass:d=o,leaveFromClass:m=`${n}-leave-from`,leaveActiveClass:h=`${n}-leave-active`,leaveToClass:b=`${n}-leave-to`}=e,g=Yh(l),_=g&&g[0],f=g&&g[1],{onBeforeEnter:k,onEnter:w,onEnterCancelled:P,onLeave:O,onLeaveCancelled:D,onBeforeAppear:j=k,onAppear:L=w,onAppearCancelled:A=P}=t,K=(T,H,Q)=>{Gt(T,H?d:o),Gt(T,H?u:a),Q&&Q()},B=(T,H)=>{Gt(T,b),Gt(T,h),H&&H()},W=T=>(H,Q)=>{const se=T?L:w,J=()=>K(H,T,Q);Rt(se,[H,J]),Ea(()=>{Gt(H,T?s:i),_t(H,T?d:o),ya(se)||wa(H,r,_,J)})};return Ce(t,{onBeforeEnter(T){Rt(k,[T]),_t(T,i),_t(T,a)},onBeforeAppear(T){Rt(j,[T]),_t(T,s),_t(T,u)},onEnter:W(!1),onAppear:W(!0),onLeave(T,H){const Q=()=>B(T,H);_t(T,m),Xh(),_t(T,h),Ea(()=>{Gt(T,m),_t(T,b),ya(O)||wa(T,r,f,Q)}),Rt(O,[T,Q])},onEnterCancelled(T){K(T,!1),Rt(P,[T])},onAppearCancelled(T){K(T,!0),Rt(A,[T])},onLeaveCancelled(T){B(T),Rt(D,[T])}})}function Yh(e){if(e==null)return null;if(Ae(e))return[vl(e.enter),vl(e.leave)];{const t=vl(e);return[t,t]}}function vl(e){return ds(e)}function _t(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e._vtc||(e._vtc=new Set)).add(t)}function Gt(e,t){t.split(/\s+/).forEach(r=>r&&e.classList.remove(r));const{_vtc:n}=e;n&&(n.delete(t),n.size||(e._vtc=void 0))}function Ea(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let Qh=0;function wa(e,t,n,r){const l=e._endId=++Qh,i=()=>{l===e._endId&&r()};if(n)return setTimeout(i,n);const{type:a,timeout:o,propCount:s}=Zh(e,t);if(!a)return r();const u=a+"end";let d=0;const m=()=>{e.removeEventListener(u,h),i()},h=b=>{b.target===e&&++d>=s&&m()};setTimeout(()=>{d(n[g]||"").split(", "),l=r(ft+"Delay"),i=r(ft+"Duration"),a=Pa(l,i),o=r(yn+"Delay"),s=r(yn+"Duration"),u=Pa(o,s);let d=null,m=0,h=0;t===ft?a>0&&(d=ft,m=a,h=i.length):t===yn?u>0&&(d=yn,m=u,h=s.length):(m=Math.max(a,u),d=m>0?a>u?ft:yn:null,h=d?d===ft?i.length:s.length:0);const b=d===ft&&/\b(transform|all)(,|$)/.test(n[ft+"Property"]);return{type:d,timeout:m,propCount:h,hasTransform:b}}function Pa(e,t){for(;e.lengthSa(n)+Sa(e[r])))}function Sa(e){return Number(e.slice(0,-1).replace(",","."))*1e3}function Xh(){return document.body.offsetHeight}const eg={esc:"escape",space:" ",up:"arrow-up",left:"arrow-left",right:"arrow-right",down:"arrow-down",delete:"backspace"},K_=(e,t)=>n=>{if(!("key"in n))return;const r=Wt(n.key);if(t.some(l=>l===r||eg[l]===r))return e(n)},q_={beforeMount(e,{value:t},{transition:n}){e._vod=e.style.display==="none"?"":e.style.display,n&&t?n.beforeEnter(e):En(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:r}){!t!=!n&&(r?t?(r.beforeEnter(e),En(e,!0),r.enter(e)):r.leave(e,()=>{En(e,!1)}):En(e,t))},beforeUnmount(e,{value:t}){En(e,t)}};function En(e,t){e.style.display=t?e._vod:"none"}const tg=Ce({patchProp:$h},Ih);let fl,Oa=!1;function ng(){return fl=Oa?fl:ch(tg),Oa=!0,fl}const rg=(...e)=>{const t=ng().createApp(...e),{mount:n}=t;return t.mount=r=>{const l=lg(r);if(l)return n(l,!0,l instanceof SVGElement)},t};function lg(e){return be(e)?document.querySelector(e):e}/*! - * vue-router v4.0.12 - * (c) 2021 Eduardo San Martin Morote - * @license MIT - */const sc=typeof Symbol=="function"&&typeof Symbol.toStringTag=="symbol",bn=e=>sc?Symbol(e):"_vr_"+e,ig=bn("rvlm"),Aa=bn("rvd"),ll=bn("r"),Ci=bn("rl"),Ul=bn("rvl"),tn=typeof window!="undefined";function ag(e){return e.__esModule||sc&&e[Symbol.toStringTag]==="Module"}const ve=Object.assign;function _l(e,t){const n={};for(const r in t){const l=t[r];n[r]=Array.isArray(l)?l.map(e):e(l)}return n}const jn=()=>{},og=/\/$/,sg=e=>e.replace(og,"");function bl(e,t,n="/"){let r,l={},i="",a="";const o=t.indexOf("?"),s=t.indexOf("#",o>-1?o:0);return o>-1&&(r=t.slice(0,o),i=t.slice(o+1,s>-1?s:t.length),l=e(i)),s>-1&&(r=r||t.slice(0,s),a=t.slice(s,t.length)),r=hg(r!=null?r:t,n),{fullPath:r+(i&&"?")+i+a,path:r,query:l,hash:a}}function cg(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function Ta(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function ug(e,t,n){const r=t.matched.length-1,l=n.matched.length-1;return r>-1&&r===l&&gn(t.matched[r],n.matched[l])&&cc(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function gn(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function cc(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const n in e)if(!dg(e[n],t[n]))return!1;return!0}function dg(e,t){return Array.isArray(e)?La(e,t):Array.isArray(t)?La(t,e):e===t}function La(e,t){return Array.isArray(t)?e.length===t.length&&e.every((n,r)=>n===t[r]):e.length===1&&e[0]===t}function hg(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),r=e.split("/");let l=n.length-1,i,a;for(i=0;i({left:window.pageXOffset,top:window.pageYOffset});function fg(e){let t;if("el"in e){const n=e.el,r=typeof n=="string"&&n.startsWith("#"),l=typeof n=="string"?r?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!l)return;t=vg(l,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.pageXOffset,t.top!=null?t.top:window.pageYOffset)}function Da(e,t){return(history.state?history.state.position-t:-1)+e}const Kl=new Map;function _g(e,t){Kl.set(e,t)}function bg(e){const t=Kl.get(e);return Kl.delete(e),t}let kg=()=>location.protocol+"//"+location.host;function uc(e,t){const{pathname:n,search:r,hash:l}=t,i=e.indexOf("#");if(i>-1){let o=l.includes(e.slice(i))?e.slice(i).length:1,s=l.slice(o);return s[0]!=="/"&&(s="/"+s),Ta(s,"")}return Ta(n,e)+r+l}function yg(e,t,n,r){let l=[],i=[],a=null;const o=({state:h})=>{const b=uc(e,location),g=n.value,_=t.value;let f=0;if(h){if(n.value=b,t.value=h,a&&a===g){a=null;return}f=_?h.position-_.position:0}else r(b);l.forEach(k=>{k(n.value,g,{delta:f,type:$n.pop,direction:f?f>0?Nn.forward:Nn.back:Nn.unknown})})};function s(){a=n.value}function u(h){l.push(h);const b=()=>{const g=l.indexOf(h);g>-1&&l.splice(g,1)};return i.push(b),b}function d(){const{history:h}=window;!h.state||h.replaceState(ve({},h.state,{scroll:il()}),"")}function m(){for(const h of i)h();i=[],window.removeEventListener("popstate",o),window.removeEventListener("beforeunload",d)}return window.addEventListener("popstate",o),window.addEventListener("beforeunload",d),{pauseListeners:s,listen:u,destroy:m}}function Ra(e,t,n,r=!1,l=!1){return{back:e,current:t,forward:n,replaced:r,position:window.history.length,scroll:l?il():null}}function Eg(e){const{history:t,location:n}=window,r={value:uc(e,n)},l={value:t.state};l.value||i(r.value,{back:null,current:r.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function i(s,u,d){const m=e.indexOf("#"),h=m>-1?(n.host&&document.querySelector("base")?e:e.slice(m))+s:kg()+e+s;try{t[d?"replaceState":"pushState"](u,"",h),l.value=u}catch(b){console.error(b),n[d?"replace":"assign"](h)}}function a(s,u){const d=ve({},t.state,Ra(l.value.back,s,l.value.forward,!0),u,{position:l.value.position});i(s,d,!0),r.value=s}function o(s,u){const d=ve({},l.value,t.state,{forward:s,scroll:il()});i(d.current,d,!0);const m=ve({},Ra(r.value,s,null),{position:d.position+1},u);i(s,m,!1),r.value=s}return{location:r,state:l,push:o,replace:a}}function wg(e){e=gg(e);const t=Eg(e),n=yg(e,t.state,t.location,t.replace);function r(i,a=!0){a||n.pauseListeners(),history.go(i)}const l=ve({location:"",base:e,go:r,createHref:pg.bind(null,e)},t,n);return Object.defineProperty(l,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(l,"state",{enumerable:!0,get:()=>t.state.value}),l}function Pg(e){return typeof e=="string"||e&&typeof e=="object"}function dc(e){return typeof e=="string"||typeof e=="symbol"}const st={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0},hc=bn("nf");var Ia;(function(e){e[e.aborted=4]="aborted",e[e.cancelled=8]="cancelled",e[e.duplicated=16]="duplicated"})(Ia||(Ia={}));function mn(e,t){return ve(new Error,{type:e,[hc]:!0},t)}function It(e,t){return e instanceof Error&&hc in e&&(t==null||!!(e.type&t))}const Ca="[^/]+?",Sg={sensitive:!1,strict:!1,start:!0,end:!0},Og=/[.+*?^${}()[\]/\\]/g;function Ag(e,t){const n=ve({},Sg,t),r=[];let l=n.start?"^":"";const i=[];for(const u of e){const d=u.length?[]:[90];n.strict&&!u.length&&(l+="/");for(let m=0;mt.length?t.length===1&&t[0]===40+40?1:-1:0}function Lg(e,t){let n=0;const r=e.score,l=t.score;for(;n1&&(s==="*"||s==="+")&&t(`A repeatable param (${u}) must be alone in its segment. eg: '/:ids+.`),i.push({type:1,value:u,regexp:d,repeatable:s==="*"||s==="+",optional:s==="*"||s==="?"})):t("Invalid state to consume buffer"),u="")}function h(){u+=s}for(;o{a(w)}:jn}function a(d){if(dc(d)){const m=r.get(d);m&&(r.delete(d),n.splice(n.indexOf(m),1),m.children.forEach(a),m.alias.forEach(a))}else{const m=n.indexOf(d);m>-1&&(n.splice(m,1),d.record.name&&r.delete(d.record.name),d.children.forEach(a),d.alias.forEach(a))}}function o(){return n}function s(d){let m=0;for(;m=0;)m++;n.splice(m,0,d),d.record.name&&!xa(d)&&r.set(d.record.name,d)}function u(d,m){let h,b={},g,_;if("name"in d&&d.name){if(h=r.get(d.name),!h)throw mn(1,{location:d});_=h.record.name,b=ve(Vg(m.params,h.keys.filter(w=>!w.optional).map(w=>w.name)),d.params),g=h.stringify(b)}else if("path"in d)g=d.path,h=n.find(w=>w.re.test(g)),h&&(b=h.parse(g),_=h.record.name);else{if(h=m.name?r.get(m.name):n.find(w=>w.re.test(m.path)),!h)throw mn(1,{location:d,currentLocation:m});_=h.record.name,b=ve({},m.params,d.params),g=h.stringify(b)}const f=[];let k=h;for(;k;)f.unshift(k.record),k=k.parent;return{name:_,path:g,params:b,matched:f,meta:Ng(f)}}return e.forEach(d=>i(d)),{addRoute:i,resolve:u,removeRoute:a,getRoutes:o,getRecordMatcher:l}}function Vg(e,t){const n={};for(const r of t)r in e&&(n[r]=e[r]);return n}function Fg(e){return{path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:void 0,beforeEnter:e.beforeEnter,props:jg(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||{}:{default:e.component}}}function jg(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const r in e.components)t[r]=typeof n=="boolean"?n:n[r];return t}function xa(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function Ng(e){return e.reduce((t,n)=>ve(t,n.meta),{})}function Va(e,t){const n={};for(const r in e)n[r]=r in t?t[r]:e[r];return n}const gc=/#/g,Mg=/&/g,zg=/\//g,Hg=/=/g,Bg=/\?/g,mc=/\+/g,Ug=/%5B/g,Kg=/%5D/g,pc=/%5E/g,qg=/%60/g,vc=/%7B/g,Wg=/%7C/g,fc=/%7D/g,$g=/%20/g;function xi(e){return encodeURI(""+e).replace(Wg,"|").replace(Ug,"[").replace(Kg,"]")}function Gg(e){return xi(e).replace(vc,"{").replace(fc,"}").replace(pc,"^")}function ql(e){return xi(e).replace(mc,"%2B").replace($g,"+").replace(gc,"%23").replace(Mg,"%26").replace(qg,"`").replace(vc,"{").replace(fc,"}").replace(pc,"^")}function Jg(e){return ql(e).replace(Hg,"%3D")}function Yg(e){return xi(e).replace(gc,"%23").replace(Bg,"%3F")}function Qg(e){return e==null?"":Yg(e).replace(zg,"%2F")}function zr(e){try{return decodeURIComponent(""+e)}catch{}return""+e}function Zg(e){const t={};if(e===""||e==="?")return t;const r=(e[0]==="?"?e.slice(1):e).split("&");for(let l=0;li&&ql(i)):[r&&ql(r)]).forEach(i=>{i!==void 0&&(t+=(t.length?"&":"")+n,i!=null&&(t+="="+i))})}return t}function Xg(e){const t={};for(const n in e){const r=e[n];r!==void 0&&(t[n]=Array.isArray(r)?r.map(l=>l==null?null:""+l):r==null?r:""+r)}return t}function wn(){let e=[];function t(r){return e.push(r),()=>{const l=e.indexOf(r);l>-1&&e.splice(l,1)}}function n(){e=[]}return{add:t,list:()=>e,reset:n}}function yt(e,t,n,r,l){const i=r&&(r.enterCallbacks[l]=r.enterCallbacks[l]||[]);return()=>new Promise((a,o)=>{const s=m=>{m===!1?o(mn(4,{from:n,to:t})):m instanceof Error?o(m):Pg(m)?o(mn(2,{from:t,to:m})):(i&&r.enterCallbacks[l]===i&&typeof m=="function"&&i.push(m),a())},u=e.call(r&&r.instances[l],t,n,s);let d=Promise.resolve(u);e.length<3&&(d=d.then(s)),d.catch(m=>o(m))})}function kl(e,t,n,r){const l=[];for(const i of e)for(const a in i.components){let o=i.components[a];if(!(t!=="beforeRouteEnter"&&!i.instances[a]))if(em(o)){const u=(o.__vccOpts||o)[t];u&&l.push(yt(u,n,r,i,a))}else{let s=o();l.push(()=>s.then(u=>{if(!u)return Promise.reject(new Error(`Couldn't resolve component "${a}" at "${i.path}"`));const d=ag(u)?u.default:u;i.components[a]=d;const h=(d.__vccOpts||d)[t];return h&&yt(h,n,r,i,a)()}))}}return l}function em(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function ja(e){const t=Re(ll),n=Re(Ci),r=_e(()=>t.resolve(Bt(e.to))),l=_e(()=>{const{matched:s}=r.value,{length:u}=s,d=s[u-1],m=n.matched;if(!d||!m.length)return-1;const h=m.findIndex(gn.bind(null,d));if(h>-1)return h;const b=Na(s[u-2]);return u>1&&Na(d)===b&&m[m.length-1].path!==b?m.findIndex(gn.bind(null,s[u-2])):h}),i=_e(()=>l.value>-1&&lm(n.params,r.value.params)),a=_e(()=>l.value>-1&&l.value===n.matched.length-1&&cc(n.params,r.value.params));function o(s={}){return rm(s)?t[Bt(e.replace)?"replace":"push"](Bt(e.to)).catch(jn):Promise.resolve()}return{route:r,href:_e(()=>r.value.href),isActive:i,isExactActive:a,navigate:o}}const tm=ze({name:"RouterLink",props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"}},useLink:ja,setup(e,{slots:t}){const n=_n(ja(e)),{options:r}=Re(ll),l=_e(()=>({[Ma(e.activeClass,r.linkActiveClass,"router-link-active")]:n.isActive,[Ma(e.exactActiveClass,r.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const i=t.default&&t.default(n);return e.custom?i:ee("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:l.value},i)}}}),nm=tm;function rm(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function lm(e,t){for(const n in t){const r=t[n],l=e[n];if(typeof r=="string"){if(r!==l)return!1}else if(!Array.isArray(l)||l.length!==r.length||r.some((i,a)=>i!==l[a]))return!1}return!0}function Na(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const Ma=(e,t,n)=>e!=null?e:t!=null?t:n,im=ze({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},setup(e,{attrs:t,slots:n}){const r=Re(Ul),l=_e(()=>e.route||r.value),i=Re(Aa,0),a=_e(()=>l.value.matched[i]);Ut(Aa,i+1),Ut(ig,a),Ut(Ul,l);const o=Ee();return et(()=>[o.value,a.value,e.name],([s,u,d],[m,h,b])=>{u&&(u.instances[d]=s,h&&h!==u&&s&&s===m&&(u.leaveGuards.size||(u.leaveGuards=h.leaveGuards),u.updateGuards.size||(u.updateGuards=h.updateGuards))),s&&u&&(!h||!gn(u,h)||!m)&&(u.enterCallbacks[d]||[]).forEach(g=>g(s))},{flush:"post"}),()=>{const s=l.value,u=a.value,d=u&&u.components[e.name],m=e.name;if(!d)return za(n.default,{Component:d,route:s});const h=u.props[e.name],b=h?h===!0?s.params:typeof h=="function"?h(s):h:null,_=ee(d,ve({},b,t,{onVnodeUnmounted:f=>{f.component.isUnmounted&&(u.instances[m]=null)},ref:o}));return za(n.default,{Component:_,route:s})||_}}});function za(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const _c=im;function am(e){const t=xg(e.routes,e),n=e.parseQuery||Zg,r=e.stringifyQuery||Fa,l=e.history,i=wn(),a=wn(),o=wn(),s=As(st);let u=st;tn&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const d=_l.bind(null,I=>""+I),m=_l.bind(null,Qg),h=_l.bind(null,zr);function b(I,U){let N,q;return dc(I)?(N=t.getRecordMatcher(I),q=U):q=I,t.addRoute(q,N)}function g(I){const U=t.getRecordMatcher(I);U&&t.removeRoute(U)}function _(){return t.getRoutes().map(I=>I.record)}function f(I){return!!t.getRecordMatcher(I)}function k(I,U){if(U=ve({},U||s.value),typeof I=="string"){const ne=bl(n,I,U.path),p=t.resolve({path:ne.path},U),y=l.createHref(ne.fullPath);return ve(ne,p,{params:h(p.params),hash:zr(ne.hash),redirectedFrom:void 0,href:y})}let N;if("path"in I)N=ve({},I,{path:bl(n,I.path,U.path).path});else{const ne=ve({},I.params);for(const p in ne)ne[p]==null&&delete ne[p];N=ve({},I,{params:m(I.params)}),U.params=m(U.params)}const q=t.resolve(N,U),ue=I.hash||"";q.params=d(h(q.params));const me=cg(r,ve({},I,{hash:Gg(ue),path:q.path})),ie=l.createHref(me);return ve({fullPath:me,hash:ue,query:r===Fa?Xg(I.query):I.query||{}},q,{redirectedFrom:void 0,href:ie})}function w(I){return typeof I=="string"?bl(n,I,s.value.path):ve({},I)}function P(I,U){if(u!==I)return mn(8,{from:U,to:I})}function O(I){return L(I)}function D(I){return O(ve(w(I),{replace:!0}))}function j(I){const U=I.matched[I.matched.length-1];if(U&&U.redirect){const{redirect:N}=U;let q=typeof N=="function"?N(I):N;return typeof q=="string"&&(q=q.includes("?")||q.includes("#")?q=w(q):{path:q},q.params={}),ve({query:I.query,hash:I.hash,params:I.params},q)}}function L(I,U){const N=u=k(I),q=s.value,ue=I.state,me=I.force,ie=I.replace===!0,ne=j(N);if(ne)return L(ve(w(ne),{state:ue,force:me,replace:ie}),U||N);const p=N;p.redirectedFrom=U;let y;return!me&&ug(r,q,N)&&(y=mn(16,{to:p,from:q}),Oe(q,q,!0,!1)),(y?Promise.resolve(y):K(p,q)).catch(S=>It(S)?S:re(S,p,q)).then(S=>{if(S){if(It(S,2))return L(ve(w(S.to),{state:ue,force:me,replace:ie}),U||p)}else S=W(p,q,!0,ie,ue);return B(p,q,S),S})}function A(I,U){const N=P(I,U);return N?Promise.reject(N):Promise.resolve()}function K(I,U){let N;const[q,ue,me]=om(I,U);N=kl(q.reverse(),"beforeRouteLeave",I,U);for(const ne of q)ne.leaveGuards.forEach(p=>{N.push(yt(p,I,U))});const ie=A.bind(null,I,U);return N.push(ie),Jt(N).then(()=>{N=[];for(const ne of i.list())N.push(yt(ne,I,U));return N.push(ie),Jt(N)}).then(()=>{N=kl(ue,"beforeRouteUpdate",I,U);for(const ne of ue)ne.updateGuards.forEach(p=>{N.push(yt(p,I,U))});return N.push(ie),Jt(N)}).then(()=>{N=[];for(const ne of I.matched)if(ne.beforeEnter&&!U.matched.includes(ne))if(Array.isArray(ne.beforeEnter))for(const p of ne.beforeEnter)N.push(yt(p,I,U));else N.push(yt(ne.beforeEnter,I,U));return N.push(ie),Jt(N)}).then(()=>(I.matched.forEach(ne=>ne.enterCallbacks={}),N=kl(me,"beforeRouteEnter",I,U),N.push(ie),Jt(N))).then(()=>{N=[];for(const ne of a.list())N.push(yt(ne,I,U));return N.push(ie),Jt(N)}).catch(ne=>It(ne,8)?ne:Promise.reject(ne))}function B(I,U,N){for(const q of o.list())q(I,U,N)}function W(I,U,N,q,ue){const me=P(I,U);if(me)return me;const ie=U===st,ne=tn?history.state:{};N&&(q||ie?l.replace(I.fullPath,ve({scroll:ie&&ne&&ne.scroll},ue)):l.push(I.fullPath,ue)),s.value=I,Oe(I,U,N,ie),we()}let T;function H(){T=l.listen((I,U,N)=>{const q=k(I),ue=j(q);if(ue){L(ve(ue,{replace:!0}),q).catch(jn);return}u=q;const me=s.value;tn&&_g(Da(me.fullPath,N.delta),il()),K(q,me).catch(ie=>It(ie,12)?ie:It(ie,2)?(L(ie.to,q).then(ne=>{It(ne,20)&&!N.delta&&N.type===$n.pop&&l.go(-1,!1)}).catch(jn),Promise.reject()):(N.delta&&l.go(-N.delta,!1),re(ie,q,me))).then(ie=>{ie=ie||W(q,me,!1),ie&&(N.delta?l.go(-N.delta,!1):N.type===$n.pop&&It(ie,20)&&l.go(-1,!1)),B(q,me,ie)}).catch(jn)})}let Q=wn(),se=wn(),J;function re(I,U,N){we(I);const q=se.list();return q.length?q.forEach(ue=>ue(I,U,N)):console.error(I),Promise.reject(I)}function le(){return J&&s.value!==st?Promise.resolve():new Promise((I,U)=>{Q.add([I,U])})}function we(I){J||(J=!0,H(),Q.list().forEach(([U,N])=>I?N(I):U()),Q.reset())}function Oe(I,U,N,q){const{scrollBehavior:ue}=e;if(!tn||!ue)return Promise.resolve();const me=!N&&bg(Da(I.fullPath,0))||(q||!N)&&history.state&&history.state.scroll||null;return Ei().then(()=>ue(I,U,me)).then(ie=>ie&&fg(ie)).catch(ie=>re(ie,I,U))}const Te=I=>l.go(I);let Pe;const Ie=new Set;return{currentRoute:s,addRoute:b,removeRoute:g,hasRoute:f,getRoutes:_,resolve:k,options:e,push:O,replace:D,go:Te,back:()=>Te(-1),forward:()=>Te(1),beforeEach:i.add,beforeResolve:a.add,afterEach:o.add,onError:se.add,isReady:le,install(I){const U=this;I.component("RouterLink",nm),I.component("RouterView",_c),I.config.globalProperties.$router=U,Object.defineProperty(I.config.globalProperties,"$route",{enumerable:!0,get:()=>Bt(s)}),tn&&!Pe&&s.value===st&&(Pe=!0,O(l.location).catch(ue=>{}));const N={};for(const ue in st)N[ue]=_e(()=>s.value[ue]);I.provide(ll,U),I.provide(Ci,_n(N)),I.provide(Ul,s);const q=I.unmount;Ie.add(I),I.unmount=function(){Ie.delete(I),Ie.size<1&&(u=st,T&&T(),s.value=st,Pe=!1,J=!1),q()}}}}function Jt(e){return e.reduce((t,n)=>t.then(()=>n()),Promise.resolve())}function om(e,t){const n=[],r=[],l=[],i=Math.max(t.matched.length,e.matched.length);for(let a=0;agn(u,o))?r.push(o):n.push(o));const s=e.matched[a];s&&(t.matched.find(u=>gn(u,s))||l.push(s))}return[n,r,l]}function rr(){return Re(ll)}function Vi(){return Re(Ci)}const sm=ze({setup(e,t){const n=Ee(!1);return tt(()=>{n.value=!0}),()=>{var r,l;return n.value?(l=(r=t.slots).default)===null||l===void 0?void 0:l.call(r):null}}}),cm="modulepreload",Ha={},um="/",c=function(t,n){return!n||n.length===0?t():Promise.all(n.map(r=>{if(r=`${um}${r}`,r in Ha)return;Ha[r]=!0;const l=r.endsWith(".css"),i=l?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${r}"]${i}`))return;const a=document.createElement("link");if(a.rel=l?"stylesheet":cm,l||(a.as="script",a.crossOrigin=""),a.href=r,document.head.appendChild(a),l)return new Promise((o,s)=>{a.addEventListener("load",o),a.addEventListener("error",()=>s(new Error(`Unable to preload CSS for ${r}`)))})})).then(()=>t())},bc={"v-8daa1a0e":v(()=>c(()=>import("./index.html.ecd28216.js"),[])),"v-2d0a87a8":v(()=>c(()=>import("./index.html.82721a2d.js"),[])),"v-6bf54404":v(()=>c(()=>import("./accounts.html.fe2f1a83.js"),[])),"v-130ca978":v(()=>c(()=>import("./pdas.html.f8f48210.js"),[])),"v-882009ca":v(()=>c(()=>import("./programs.html.1c9a5bba.js"),[])),"v-63197375":v(()=>c(()=>import("./transactions.html.7a46c0fe.js"),[])),"v-2d0a8b4a":v(()=>c(()=>import("./index.html.6fd36f57.js"),[])),"v-4e8563af":v(()=>c(()=>import("./installation.html.f5c7f7bc.js"),[])),"v-2d0a8235":v(()=>c(()=>import("./index.html.5e3fbbf4.js"),[])),"v-76b1e9e3":v(()=>c(()=>import("./account-maps.html.dfbc4d79.js"),[])),"v-6da58eef":v(()=>c(()=>import("./data-migration.html.3477b282.js"),[])),"v-4684263f":v(()=>c(()=>import("./debugging-solana-programs.html.cec3cad7.js"),[])),"v-4740871a":v(()=>c(()=>import("./feature-parity-testing.html.76e9437b.js"),[])),"v-2b9a5458":v(()=>c(()=>import("./get-program-accounts.html.d1f66188.js"),[])),"v-5a9d5a10":v(()=>c(()=>import("./retrying-transactions.html.5bd8a8b2.js"),[])),"v-2e379628":v(()=>c(()=>import("./serialization.html.514ce1b1.js"),[])),"v-7e81f36f":v(()=>c(()=>import("./versioned-transactions.html.c555dcb8.js"),[])),"v-2d0a94db":v(()=>c(()=>import("./index.html.a23efb61.js"),[])),"v-2d0a9e0f":v(()=>c(()=>import("./index.html.275d1bb5.js"),[])),"v-100dc897":v(()=>c(()=>import("./index.html.d31f668a.js"),[])),"v-13513bf3":v(()=>c(()=>import("./jupiter.html.9e0c6bae.js"),[])),"v-7f12be2e":v(()=>c(()=>import("./mango.html.166e3fcf.js"),[])),"v-0bf487b4":v(()=>c(()=>import("./orao-vrf.html.17c85dd9.js"),[])),"v-6bb05bf6":v(()=>c(()=>import("./pyth.html.993a62c0.js"),[])),"v-78a2a41d":v(()=>c(()=>import("./react-native.html.86a2f8e1.js"),[])),"v-0a8f60b8":v(()=>c(()=>import("./serum.html.35f8591c.js"),[])),"v-402eef45":v(()=>c(()=>import("./strata.html.134e705d.js"),[])),"v-4d26b27e":v(()=>c(()=>import("./switchboard.html.db9555dc.js"),[])),"v-da1de70a":v(()=>c(()=>import("./web3auth.html.dde1c3ec.js"),[])),"v-6c467d65":v(()=>c(()=>import("./accounts.html.41870cda.js"),[])),"v-70f9aa12":v(()=>c(()=>import("./basic-transactions.html.4474fa4b.js"),[])),"v-4dc29afa":v(()=>c(()=>import("./keypairs-and-wallets.html.cc722935.js"),[])),"v-10b56a2e":v(()=>c(()=>import("./local-development.html.9b37113f.js"),[])),"v-9eccd210":v(()=>c(()=>import("./name-service.html.37c928e5.js"),[])),"v-d2aec298":v(()=>c(()=>import("./nfts.html.c8b1398e.js"),[])),"v-f8950628":v(()=>c(()=>import("./offline-transactions.html.f52ab286.js"),[])),"v-877d9708":v(()=>c(()=>import("./programs.html.e835864a.js"),[])),"v-26f90ae0":v(()=>c(()=>import("./staking.html.e4486924.js"),[])),"v-0d096f0e":v(()=>c(()=>import("./token.html.002323ce.js"),[])),"v-2d0abea2":v(()=>c(()=>import("./index.html.6b3ea85a.js"),[])),"v-2d0abfd8":v(()=>c(()=>import("./index.html.10417c8b.js"),[])),"v-2d0ac643":v(()=>c(()=>import("./index.html.22281a94.js"),[])),"v-2d0ad528":v(()=>c(()=>import("./index.html.88cacb56.js"),[])),"v-08458c16":v(()=>c(()=>import("./accounts.html.90aaa4be.js"),[])),"v-79377c96":v(()=>c(()=>import("./pdas.html.163126cb.js"),[])),"v-4bd7f10c":v(()=>c(()=>import("./programs.html.d3118fa5.js"),[])),"v-314308e6":v(()=>c(()=>import("./transactions.html.603e9adb.js"),[])),"v-389f60e0":v(()=>c(()=>import("./installation.html.95199e24.js"),[])),"v-471a2192":v(()=>c(()=>import("./account-maps.html.3c23b24c.js"),[])),"v-7642d244":v(()=>c(()=>import("./data-migration.html.a88f0c92.js"),[])),"v-6c0a22f0":v(()=>c(()=>import("./debugging-solana-programs.html.fd232a1a.js"),[])),"v-35856562":v(()=>c(()=>import("./feature-parity-testing.html.950f6b4c.js"),[])),"v-3d8822fa":v(()=>c(()=>import("./get-program-accounts.html.708590f7.js"),[])),"v-44b75741":v(()=>c(()=>import("./retrying-transactions.html.2d40edb6.js"),[])),"v-6ad65459":v(()=>c(()=>import("./serialization.html.6d8ae2d4.js"),[])),"v-3caeb514":v(()=>c(()=>import("./accounts.html.cbe5f8e8.js"),[])),"v-20a8d3e6":v(()=>c(()=>import("./basic-transactions.html.214020d5.js"),[])),"v-17bc77ae":v(()=>c(()=>import("./keypairs-and-wallets.html.2edd4832.js"),[])),"v-0a613142":v(()=>c(()=>import("./local-development.html.60ae4d26.js"),[])),"v-1db05f27":v(()=>c(()=>import("./name-service.html.a7a53060.js"),[])),"v-6f8605e3":v(()=>c(()=>import("./nfts.html.1b410d22.js"),[])),"v-2a14a61b":v(()=>c(()=>import("./offline-transactions.html.84c823af.js"),[])),"v-e6ad27aa":v(()=>c(()=>import("./programs.html.c3f30078.js"),[])),"v-8d23ddfe":v(()=>c(()=>import("./staking.html.e91c71dd.js"),[])),"v-4fd8edbf":v(()=>c(()=>import("./token.html.43349d24.js"),[])),"v-598bfdda":v(()=>c(()=>import("./accounts.html.24bd40ca.js"),[])),"v-410d47d3":v(()=>c(()=>import("./pdas.html.8c232bd3.js"),[])),"v-2334b82a":v(()=>c(()=>import("./programs.html.ae1c022e.js"),[])),"v-1ee9ddf8":v(()=>c(()=>import("./transactions.html.ac3b5113.js"),[])),"v-4605d97e":v(()=>c(()=>import("./installation.html.25b29443.js"),[])),"v-7e91df34":v(()=>c(()=>import("./account-maps.html.c5508c2f.js"),[])),"v-05451800":v(()=>c(()=>import("./data-migration.html.cfc60b01.js"),[])),"v-0bb1c6e4":v(()=>c(()=>import("./debugging-solana-programs.html.af3c7a13.js"),[])),"v-5623fef8":v(()=>c(()=>import("./feature-parity-testing.html.68575bff.js"),[])),"v-0af4ea25":v(()=>c(()=>import("./get-program-accounts.html.61cd06d7.js"),[])),"v-521dcfdf":v(()=>c(()=>import("./retrying-transactions.html.a91ac37c.js"),[])),"v-22564af7":v(()=>c(()=>import("./serialization.html.0c2dd08b.js"),[])),"v-4571fbe6":v(()=>c(()=>import("./index.html.9d01b529.js"),[])),"v-076ff0c2":v(()=>c(()=>import("./jupiter.html.c93aacae.js"),[])),"v-6cb34a86":v(()=>c(()=>import("./mango.html.ae5b2527.js"),[])),"v-6976e796":v(()=>c(()=>import("./pyth.html.06a5a080.js"),[])),"v-1e60cea4":v(()=>c(()=>import("./react-native.html.c1e070c2.js"),[])),"v-5522fd47":v(()=>c(()=>import("./serum.html.78e40a76.js"),[])),"v-480ee496":v(()=>c(()=>import("./strata.html.ac51818e.js"),[])),"v-139f3066":v(()=>c(()=>import("./switchboard.html.2ea924f1.js"),[])),"v-22a8f18c":v(()=>c(()=>import("./web3auth.html.28d61b3d.js"),[])),"v-742672b6":v(()=>c(()=>import("./accounts.html.e95b991d.js"),[])),"v-7fdd21f0":v(()=>c(()=>import("./basic-transactions.html.6ddce83b.js"),[])),"v-5bd01ecb":v(()=>c(()=>import("./keypairs-and-wallets.html.16cf5a1d.js"),[])),"v-0835dffd":v(()=>c(()=>import("./local-development.html.58549e45.js"),[])),"v-31ec7bc9":v(()=>c(()=>import("./name-service.html.6ced8cd6.js"),[])),"v-3331e485":v(()=>c(()=>import("./nfts.html.83f8c371.js"),[])),"v-dc79fe86":v(()=>c(()=>import("./offline-transactions.html.889f35c4.js"),[])),"v-77bdac66":v(()=>c(()=>import("./programs.html.8c3223e3.js"),[])),"v-3717171f":v(()=>c(()=>import("./staking.html.2985c0ca.js"),[])),"v-01a8e35d":v(()=>c(()=>import("./token.html.343389bd.js"),[])),"v-8e5be170":v(()=>c(()=>import("./accounts.html.a1cddf8a.js"),[])),"v-f2328ef0":v(()=>c(()=>import("./pdas.html.cbdf3a70.js"),[])),"v-08ccc65f":v(()=>c(()=>import("./programs.html.ceb14559.js"),[])),"v-1256fcb9":v(()=>c(()=>import("./transactions.html.658251de.js"),[])),"v-2485abf3":v(()=>c(()=>import("./installation.html.3b572ae4.js"),[])),"v-1832f5c2":v(()=>c(()=>import("./account-maps.html.de214c67.js"),[])),"v-70204b2b":v(()=>c(()=>import("./data-migration.html.a197b291.js"),[])),"v-16deac83":v(()=>c(()=>import("./debugging-solana-programs.html.f4f20b1d.js"),[])),"v-732f06a2":v(()=>c(()=>import("./feature-parity-testing.html.589ec2f3.js"),[])),"v-22a67510":v(()=>c(()=>import("./get-program-accounts.html.0070c92d.js"),[])),"v-309da254":v(()=>c(()=>import("./retrying-transactions.html.d46f8106.js"),[])),"v-5796626c":v(()=>c(()=>import("./serialization.html.683418b8.js"),[])),"v-1bac4a4a":v(()=>c(()=>import("./index.html.092a4e8b.js"),[])),"v-3cb00837":v(()=>c(()=>import("./jupiter.html.87aeb51a.js"),[])),"v-0f7fcb72":v(()=>c(()=>import("./mango.html.8d40c307.js"),[])),"v-0e6f43f0":v(()=>c(()=>import("./orao-vrf.html.8b763313.js"),[])),"v-d5fbe77e":v(()=>c(()=>import("./pyth.html.436ae8b9.js"),[])),"v-0aace259":v(()=>c(()=>import("./react-native.html.bc9438a7.js"),[])),"v-ca072408":v(()=>c(()=>import("./serum.html.6ba897c2.js"),[])),"v-8538eafe":v(()=>c(()=>import("./strata.html.83f9132b.js"),[])),"v-5404867c":v(()=>c(()=>import("./switchboard.html.157173ca.js"),[])),"v-d5286e92":v(()=>c(()=>import("./web3auth.html.1e8a2baf.js"),[])),"v-2d09cebe":v(()=>c(()=>import("./accounts.html.777a7eb8.js"),[])),"v-9ce8299a":v(()=>c(()=>import("./basic-transactions.html.e3e3e3e0.js"),[])),"v-4ec78794":v(()=>c(()=>import("./keypairs-and-wallets.html.9ebf8bd5.js"),[])),"v-32949b1c":v(()=>c(()=>import("./local-development.html.eb498122.js"),[])),"v-01539798":v(()=>c(()=>import("./name-service.html.b798c4d1.js"),[])),"v-6bf79020":v(()=>c(()=>import("./nfts.html.d4ba8157.js"),[])),"v-0e8f1e28":v(()=>c(()=>import("./offline-transactions.html.2bae496b.js"),[])),"v-3975cfb8":v(()=>c(()=>import("./programs.html.bd94c517.js"),[])),"v-7cf087d4":v(()=>c(()=>import("./staking.html.350e1ee5.js"),[])),"v-4520fd52":v(()=>c(()=>import("./token.html.2099653c.js"),[])),"v-da3cf63c":v(()=>c(()=>import("./accounts.html.ed5f030f.js"),[])),"v-0bf50b22":v(()=>c(()=>import("./pdas.html.7441bbc1.js"),[])),"v-3a47880e":v(()=>c(()=>import("./programs.html.4884ba4b.js"),[])),"v-73c3d55a":v(()=>c(()=>import("./transactions.html.e89c78f1.js"),[])),"v-02e9060d":v(()=>c(()=>import("./installation.html.78e7153a.js"),[])),"v-10a285c5":v(()=>c(()=>import("./account-maps.html.85869834.js"),[])),"v-4ddeba51":v(()=>c(()=>import("./data-migration.html.0210e747.js"),[])),"v-0173699d":v(()=>c(()=>import("./debugging-solana-programs.html.fcdb1779.js"),[])),"v-971f3456":v(()=>c(()=>import("./feature-parity-testing.html.20df7fb3.js"),[])),"v-307b2094":v(()=>c(()=>import("./get-program-accounts.html.2ee0e5f9.js"),[])),"v-0f00fc6e":v(()=>c(()=>import("./retrying-transactions.html.8a1dcb9d.js"),[])),"v-5b4b12f4":v(()=>c(()=>import("./serialization.html.c8c0bb87.js"),[])),"v-0027c5f5":v(()=>c(()=>import("./index.html.4db135f1.js"),[])),"v-9117c75e":v(()=>c(()=>import("./jupiter.html.06066588.js"),[])),"v-d6e3c3e8":v(()=>c(()=>import("./mango.html.e4329f42.js"),[])),"v-2df1fe67":v(()=>c(()=>import("./pyth.html.f216b027.js"),[])),"v-10996302":v(()=>c(()=>import("./react-native.html.6e38f883.js"),[])),"v-200ac096":v(()=>c(()=>import("./serum.html.299c0148.js"),[])),"v-4bc0e9b2":v(()=>c(()=>import("./strata.html.0fc9f9d8.js"),[])),"v-6a0633dc":v(()=>c(()=>import("./switchboard.html.5d81e6aa.js"),[])),"v-732a37dd":v(()=>c(()=>import("./web3auth.html.f7f5a51b.js"),[])),"v-06371947":v(()=>c(()=>import("./accounts.html.6fe629f9.js"),[])),"v-c0d8574e":v(()=>c(()=>import("./basic-transactions.html.6a4d58f4.js"),[])),"v-644e73dc":v(()=>c(()=>import("./keypairs-and-wallets.html.4fbbb166.js"),[])),"v-75cde6e8":v(()=>c(()=>import("./local-development.html.39b4fef9.js"),[])),"v-673571da":v(()=>c(()=>import("./name-service.html.c6b6592b.js"),[])),"v-931308d4":v(()=>c(()=>import("./nfts.html.2f110120.js"),[])),"v-cb7d5464":v(()=>c(()=>import("./offline-transactions.html.80b1d49c.js"),[])),"v-5631d05e":v(()=>c(()=>import("./programs.html.f5be05d7.js"),[])),"v-01feda6e":v(()=>c(()=>import("./staking.html.be6c8f38.js"),[])),"v-3211a328":v(()=>c(()=>import("./token.html.c4c325c8.js"),[])),"v-52cd49a4":v(()=>c(()=>import("./accounts.html.66496e06.js"),[])),"v-4a4be76e":v(()=>c(()=>import("./pdas.html.219650a1.js"),[])),"v-26941245":v(()=>c(()=>import("./programs.html.f461f5d0.js"),[])),"v-2229e59f":v(()=>c(()=>import("./transactions.html.e622419d.js"),[])),"v-e97c194e":v(()=>c(()=>import("./installation.html.a4055925.js"),[])),"v-c5b19a0e":v(()=>c(()=>import("./account-maps.html.eacf2c55.js"),[])),"v-68262af6":v(()=>c(()=>import("./data-migration.html.c6889026.js"),[])),"v-a4865e2e":v(()=>c(()=>import("./debugging-solana-programs.html.1ed38a08.js"),[])),"v-37352209":v(()=>c(()=>import("./feature-parity-testing.html.14463cda.js"),[])),"v-0d30a8ea":v(()=>c(()=>import("./get-program-accounts.html.fd913f0b.js"),[])),"v-d14c2c8c":v(()=>c(()=>import("./retrying-transactions.html.34486519.js"),[])),"v-5329205c":v(()=>c(()=>import("./serialization.html.c97fc14e.js"),[])),"v-da88730a":v(()=>c(()=>import("./accounts.html.dd62e52e.js"),[])),"v-2258908d":v(()=>c(()=>import("./basic-transactions.html.1048ebf0.js"),[])),"v-48d4f310":v(()=>c(()=>import("./keypairs-and-wallets.html.65225507.js"),[])),"v-4d71f9d8":v(()=>c(()=>import("./local-development.html.30644647.js"),[])),"v-cb0f35e4":v(()=>c(()=>import("./name-service.html.5db01ac9.js"),[])),"v-b3ac3a6c":v(()=>c(()=>import("./nfts.html.5030148a.js"),[])),"v-7ec7d502":v(()=>c(()=>import("./offline-transactions.html.d168f4a1.js"),[])),"v-3a9304dc":v(()=>c(()=>import("./programs.html.0b307755.js"),[])),"v-4055b6ba":v(()=>c(()=>import("./staking.html.b27c769d.js"),[])),"v-249ea490":v(()=>c(()=>import("./token.html.1cdd0ba1.js"),[])),"v-3f8c76bb":v(()=>c(()=>import("./accounts.html.110556a0.js"),[])),"v-310cd17b":v(()=>c(()=>import("./pdas.html.4250b3b0.js"),[])),"v-e0f1a45c":v(()=>c(()=>import("./programs.html.53ea3f69.js"),[])),"v-5dda72ac":v(()=>c(()=>import("./transactions.html.5dbc422d.js"),[])),"v-c5f91db4":v(()=>c(()=>import("./installation.html.29527d20.js"),[])),"v-e2f8eae8":v(()=>c(()=>import("./account-maps.html.ffc7268f.js"),[])),"v-50dcad50":v(()=>c(()=>import("./data-migration.html.14bc1e29.js"),[])),"v-387ebf94":v(()=>c(()=>import("./debugging-solana-programs.html.8b1997bb.js"),[])),"v-5da35ddc":v(()=>c(()=>import("./feature-parity-testing.html.a8aab496.js"),[])),"v-4791bd7d":v(()=>c(()=>import("./get-program-accounts.html.9564cc92.js"),[])),"v-adc930f2":v(()=>c(()=>import("./retrying-transactions.html.01743c84.js"),[])),"v-109a0a9f":v(()=>c(()=>import("./serialization.html.0dcb6ac4.js"),[])),"v-18d9f78e":v(()=>c(()=>import("./index.html.7a1de989.js"),[])),"v-14989f2c":v(()=>c(()=>import("./jupiter.html.de31abc5.js"),[])),"v-8cb43736":v(()=>c(()=>import("./mango.html.a74bd6fd.js"),[])),"v-67e8ee24":v(()=>c(()=>import("./pyth.html.e5157e23.js"),[])),"v-fe8d3bf4":v(()=>c(()=>import("./react-native.html.b2340292.js"),[])),"v-452286ef":v(()=>c(()=>import("./serum.html.ed3537fa.js"),[])),"v-58008fee":v(()=>c(()=>import("./strata.html.aa4e8f16.js"),[])),"v-d087d916":v(()=>c(()=>import("./switchboard.html.5ddc737d.js"),[])),"v-0645b238":v(()=>c(()=>import("./web3auth.html.918e8853.js"),[])),"v-f7cfc3e4":v(()=>c(()=>import("./accounts.html.27dab1e8.js"),[])),"v-48c6cc60":v(()=>c(()=>import("./basic-transactions.html.859da652.js"),[])),"v-e6b8f3ba":v(()=>c(()=>import("./keypairs-and-wallets.html.3f5d6e5f.js"),[])),"v-5f3377a5":v(()=>c(()=>import("./local-development.html.0b35df29.js"),[])),"v-4fe8bb21":v(()=>c(()=>import("./name-service.html.c7d86855.js"),[])),"v-00aefbdd":v(()=>c(()=>import("./nfts.html.fc0f9ff3.js"),[])),"v-7ad32fd6":v(()=>c(()=>import("./offline-transactions.html.07190946.js"),[])),"v-57da55b6":v(()=>c(()=>import("./programs.html.434be993.js"),[])),"v-2716a0c7":v(()=>c(()=>import("./staking.html.6f06e74b.js"),[])),"v-386291f6":v(()=>c(()=>import("./token.html.98a84493.js"),[])),"v-46a93876":v(()=>c(()=>import("./accounts.html.2308a218.js"),[])),"v-5aefd385":v(()=>c(()=>import("./pdas.html.895cff94.js"),[])),"v-2ca61adc":v(()=>c(()=>import("./programs.html.3037de5a.js"),[])),"v-4847cab6":v(()=>c(()=>import("./transactions.html.3d289101.js"),[])),"v-bd0a22a0":v(()=>c(()=>import("./installation.html.3f75d0b0.js"),[])),"v-bdfe6c7c":v(()=>c(()=>import("./account-maps.html.420a011d.js"),[])),"v-3fbbf30e":v(()=>c(()=>import("./data-migration.html.6f422d8c.js"),[])),"v-846b6e80":v(()=>c(()=>import("./debugging-solana-programs.html.f89c2a6e.js"),[])),"v-2fc8dcdc":v(()=>c(()=>import("./feature-parity-testing.html.7a1e13ef.js"),[])),"v-aa61329a":v(()=>c(()=>import("./get-program-accounts.html.8b25ee70.js"),[])),"v-a4da35de":v(()=>c(()=>import("./retrying-transactions.html.a90e9b02.js"),[])),"v-4dc4b229":v(()=>c(()=>import("./serialization.html.1cfbc21e.js"),[])),"v-d2d54578":v(()=>c(()=>import("./accounts.html.60e994e8.js"),[])),"v-5981ffd4":v(()=>c(()=>import("./basic-transactions.html.d8a43b8d.js"),[])),"v-59dda459":v(()=>c(()=>import("./keypairs-and-wallets.html.507ff925.js"),[])),"v-63aaf52f":v(()=>c(()=>import("./local-development.html.ce38d019.js"),[])),"v-56a76f57":v(()=>c(()=>import("./name-service.html.d680e7da.js"),[])),"v-41e84613":v(()=>c(()=>import("./nfts.html.9ae3e88e.js"),[])),"v-e05ef36a":v(()=>c(()=>import("./offline-transactions.html.b7d17f59.js"),[])),"v-32dfd74a":v(()=>c(()=>import("./programs.html.533f07a3.js"),[])),"v-50f9a2d1":v(()=>c(()=>import("./staking.html.c0d58ac7.js"),[])),"v-6c8298e2":v(()=>c(()=>import("./token.html.1c90d8cc.js"),[])),"v-6a35b27a":v(()=>c(()=>import("./accounts.html.41ccbfe0.js"),[])),"v-8e20768c":v(()=>c(()=>import("./pdas.html.44474a60.js"),[])),"v-8b9f2cde":v(()=>c(()=>import("./programs.html.de342ed2.js"),[])),"v-55f1b6eb":v(()=>c(()=>import("./transactions.html.f0ff60a1.js"),[])),"v-274abcb6":v(()=>c(()=>import("./installation.html.d44a3a59.js"),[])),"v-02feff2d":v(()=>c(()=>import("./account-maps.html.ba36ebf8.js"),[])),"v-1b0279b9":v(()=>c(()=>import("./data-migration.html.17e2db7e.js"),[])),"v-5afd7935":v(()=>c(()=>import("./debugging-solana-programs.html.c5b0871c.js"),[])),"v-0d9b8586":v(()=>c(()=>import("./feature-parity-testing.html.0bfcadb8.js"),[])),"v-5263011e":v(()=>c(()=>import("./get-program-accounts.html.8bc16d43.js"),[])),"v-0f1acff4":v(()=>c(()=>import("./retrying-transactions.html.b36ecf68.js"),[])),"v-2b8d2a1e":v(()=>c(()=>import("./serialization.html.036935e3.js"),[])),"v-35d91d8d":v(()=>c(()=>import("./index.html.fc6cfc86.js"),[])),"v-10a6cfe9":v(()=>c(()=>import("./jupiter.html.7de8c4db.js"),[])),"v-4188d7a4":v(()=>c(()=>import("./mango.html.b427f409.js"),[])),"v-5f249c62":v(()=>c(()=>import("./pyth.html.bd384ffa.js"),[])),"v-049919e7":v(()=>c(()=>import("./react-native.html.453fd391.js"),[])),"v-65f50ba4":v(()=>c(()=>import("./serum.html.c2509ca4.js"),[])),"v-6707f6e2":v(()=>c(()=>import("./strata.html.c6b22229.js"),[])),"v-85f54918":v(()=>c(()=>import("./switchboard.html.1e632500.js"),[])),"v-404df745":v(()=>c(()=>import("./web3auth.html.5eb909b6.js"),[])),"v-0ed8daa2":v(()=>c(()=>import("./accounts.html.f2bc2200.js"),[])),"v-3754a87e":v(()=>c(()=>import("./basic-transactions.html.e7c883d2.js"),[])),"v-7ff81144":v(()=>c(()=>import("./keypairs-and-wallets.html.014763d1.js"),[])),"v-a2eaafb8":v(()=>c(()=>import("./local-development.html.da89da5e.js"),[])),"v-7a66f742":v(()=>c(()=>import("./name-service.html.18e9d43d.js"),[])),"v-1b97e8fe":v(()=>c(()=>import("./nfts.html.68f60f1e.js"),[])),"v-942a1994":v(()=>c(()=>import("./offline-transactions.html.07ed428d.js"),[])),"v-488e49c6":v(()=>c(()=>import("./programs.html.abac7a7f.js"),[])),"v-a20cd7f4":v(()=>c(()=>import("./staking.html.ba5f3b69.js"),[])),"v-26036e04":v(()=>c(()=>import("./token.html.80a1f130.js"),[])),"v-43987c75":v(()=>c(()=>import("./accounts.html.21ad9e29.js"),[])),"v-3c24c435":v(()=>c(()=>import("./pdas.html.b3265701.js"),[])),"v-d8d998e8":v(()=>c(()=>import("./programs.html.6e4947b0.js"),[])),"v-66cde934":v(()=>c(()=>import("./transactions.html.53129791.js"),[])),"v-567ec360":v(()=>c(()=>import("./installation.html.e7d898bf.js"),[])),"v-3706649a":v(()=>c(()=>import("./404.html.75990c3f.js"),[]))},dm={"v-8daa1a0e":()=>c(()=>import("./index.html.88acc20a.js"),[]).then(({data:e})=>e),"v-2d0a87a8":()=>c(()=>import("./index.html.6fc3a0cb.js"),[]).then(({data:e})=>e),"v-6bf54404":()=>c(()=>import("./accounts.html.38770ed8.js"),[]).then(({data:e})=>e),"v-130ca978":()=>c(()=>import("./pdas.html.86f433ac.js"),[]).then(({data:e})=>e),"v-882009ca":()=>c(()=>import("./programs.html.019b1de0.js"),[]).then(({data:e})=>e),"v-63197375":()=>c(()=>import("./transactions.html.2e85ce0d.js"),[]).then(({data:e})=>e),"v-2d0a8b4a":()=>c(()=>import("./index.html.d2939d6d.js"),[]).then(({data:e})=>e),"v-4e8563af":()=>c(()=>import("./installation.html.10d7fe9c.js"),[]).then(({data:e})=>e),"v-2d0a8235":()=>c(()=>import("./index.html.63d0712f.js"),[]).then(({data:e})=>e),"v-76b1e9e3":()=>c(()=>import("./account-maps.html.7f566c97.js"),[]).then(({data:e})=>e),"v-6da58eef":()=>c(()=>import("./data-migration.html.0c96e815.js"),[]).then(({data:e})=>e),"v-4684263f":()=>c(()=>import("./debugging-solana-programs.html.43c480ed.js"),[]).then(({data:e})=>e),"v-4740871a":()=>c(()=>import("./feature-parity-testing.html.b11197fa.js"),[]).then(({data:e})=>e),"v-2b9a5458":()=>c(()=>import("./get-program-accounts.html.43c89426.js"),[]).then(({data:e})=>e),"v-5a9d5a10":()=>c(()=>import("./retrying-transactions.html.6a79ffcd.js"),[]).then(({data:e})=>e),"v-2e379628":()=>c(()=>import("./serialization.html.8e1be4b7.js"),[]).then(({data:e})=>e),"v-7e81f36f":()=>c(()=>import("./versioned-transactions.html.47eafff9.js"),[]).then(({data:e})=>e),"v-2d0a94db":()=>c(()=>import("./index.html.e934385c.js"),[]).then(({data:e})=>e),"v-2d0a9e0f":()=>c(()=>import("./index.html.84352b13.js"),[]).then(({data:e})=>e),"v-100dc897":()=>c(()=>import("./index.html.081f67f1.js"),[]).then(({data:e})=>e),"v-13513bf3":()=>c(()=>import("./jupiter.html.93e3a081.js"),[]).then(({data:e})=>e),"v-7f12be2e":()=>c(()=>import("./mango.html.924479dc.js"),[]).then(({data:e})=>e),"v-0bf487b4":()=>c(()=>import("./orao-vrf.html.b785628d.js"),[]).then(({data:e})=>e),"v-6bb05bf6":()=>c(()=>import("./pyth.html.033fc713.js"),[]).then(({data:e})=>e),"v-78a2a41d":()=>c(()=>import("./react-native.html.6b3df8c5.js"),[]).then(({data:e})=>e),"v-0a8f60b8":()=>c(()=>import("./serum.html.b2b0fa44.js"),[]).then(({data:e})=>e),"v-402eef45":()=>c(()=>import("./strata.html.7eec772e.js"),[]).then(({data:e})=>e),"v-4d26b27e":()=>c(()=>import("./switchboard.html.48465e15.js"),[]).then(({data:e})=>e),"v-da1de70a":()=>c(()=>import("./web3auth.html.92e98604.js"),[]).then(({data:e})=>e),"v-6c467d65":()=>c(()=>import("./accounts.html.873d703f.js"),[]).then(({data:e})=>e),"v-70f9aa12":()=>c(()=>import("./basic-transactions.html.660a3a4e.js"),[]).then(({data:e})=>e),"v-4dc29afa":()=>c(()=>import("./keypairs-and-wallets.html.767bf812.js"),[]).then(({data:e})=>e),"v-10b56a2e":()=>c(()=>import("./local-development.html.b0030542.js"),[]).then(({data:e})=>e),"v-9eccd210":()=>c(()=>import("./name-service.html.3fcbdad5.js"),[]).then(({data:e})=>e),"v-d2aec298":()=>c(()=>import("./nfts.html.5905d36e.js"),[]).then(({data:e})=>e),"v-f8950628":()=>c(()=>import("./offline-transactions.html.06b84d27.js"),[]).then(({data:e})=>e),"v-877d9708":()=>c(()=>import("./programs.html.3a39cb44.js"),[]).then(({data:e})=>e),"v-26f90ae0":()=>c(()=>import("./staking.html.46023113.js"),[]).then(({data:e})=>e),"v-0d096f0e":()=>c(()=>import("./token.html.48d29609.js"),[]).then(({data:e})=>e),"v-2d0abea2":()=>c(()=>import("./index.html.1a914276.js"),[]).then(({data:e})=>e),"v-2d0abfd8":()=>c(()=>import("./index.html.44b0d9b7.js"),[]).then(({data:e})=>e),"v-2d0ac643":()=>c(()=>import("./index.html.bc355c58.js"),[]).then(({data:e})=>e),"v-2d0ad528":()=>c(()=>import("./index.html.9cc338cd.js"),[]).then(({data:e})=>e),"v-08458c16":()=>c(()=>import("./accounts.html.fc9a7c5a.js"),[]).then(({data:e})=>e),"v-79377c96":()=>c(()=>import("./pdas.html.e450b8ed.js"),[]).then(({data:e})=>e),"v-4bd7f10c":()=>c(()=>import("./programs.html.c37386e2.js"),[]).then(({data:e})=>e),"v-314308e6":()=>c(()=>import("./transactions.html.cc7273b2.js"),[]).then(({data:e})=>e),"v-389f60e0":()=>c(()=>import("./installation.html.84c588eb.js"),[]).then(({data:e})=>e),"v-471a2192":()=>c(()=>import("./account-maps.html.2c69a16b.js"),[]).then(({data:e})=>e),"v-7642d244":()=>c(()=>import("./data-migration.html.5d5702f7.js"),[]).then(({data:e})=>e),"v-6c0a22f0":()=>c(()=>import("./debugging-solana-programs.html.d1a3770c.js"),[]).then(({data:e})=>e),"v-35856562":()=>c(()=>import("./feature-parity-testing.html.19e2bbaa.js"),[]).then(({data:e})=>e),"v-3d8822fa":()=>c(()=>import("./get-program-accounts.html.bd8162fb.js"),[]).then(({data:e})=>e),"v-44b75741":()=>c(()=>import("./retrying-transactions.html.b2a6e828.js"),[]).then(({data:e})=>e),"v-6ad65459":()=>c(()=>import("./serialization.html.3bdc505f.js"),[]).then(({data:e})=>e),"v-3caeb514":()=>c(()=>import("./accounts.html.b2e4d9ac.js"),[]).then(({data:e})=>e),"v-20a8d3e6":()=>c(()=>import("./basic-transactions.html.05f47ad8.js"),[]).then(({data:e})=>e),"v-17bc77ae":()=>c(()=>import("./keypairs-and-wallets.html.86f82e90.js"),[]).then(({data:e})=>e),"v-0a613142":()=>c(()=>import("./local-development.html.e8263adc.js"),[]).then(({data:e})=>e),"v-1db05f27":()=>c(()=>import("./name-service.html.04a7e09f.js"),[]).then(({data:e})=>e),"v-6f8605e3":()=>c(()=>import("./nfts.html.acfd8117.js"),[]).then(({data:e})=>e),"v-2a14a61b":()=>c(()=>import("./offline-transactions.html.b1bf1d38.js"),[]).then(({data:e})=>e),"v-e6ad27aa":()=>c(()=>import("./programs.html.55a34056.js"),[]).then(({data:e})=>e),"v-8d23ddfe":()=>c(()=>import("./staking.html.caff0a8a.js"),[]).then(({data:e})=>e),"v-4fd8edbf":()=>c(()=>import("./token.html.d67112e7.js"),[]).then(({data:e})=>e),"v-598bfdda":()=>c(()=>import("./accounts.html.ca784cf3.js"),[]).then(({data:e})=>e),"v-410d47d3":()=>c(()=>import("./pdas.html.336dcdba.js"),[]).then(({data:e})=>e),"v-2334b82a":()=>c(()=>import("./programs.html.f710045a.js"),[]).then(({data:e})=>e),"v-1ee9ddf8":()=>c(()=>import("./transactions.html.9356bb2a.js"),[]).then(({data:e})=>e),"v-4605d97e":()=>c(()=>import("./installation.html.8bef868a.js"),[]).then(({data:e})=>e),"v-7e91df34":()=>c(()=>import("./account-maps.html.a30e994d.js"),[]).then(({data:e})=>e),"v-05451800":()=>c(()=>import("./data-migration.html.a840baeb.js"),[]).then(({data:e})=>e),"v-0bb1c6e4":()=>c(()=>import("./debugging-solana-programs.html.1a1e9843.js"),[]).then(({data:e})=>e),"v-5623fef8":()=>c(()=>import("./feature-parity-testing.html.9234e626.js"),[]).then(({data:e})=>e),"v-0af4ea25":()=>c(()=>import("./get-program-accounts.html.98d258d1.js"),[]).then(({data:e})=>e),"v-521dcfdf":()=>c(()=>import("./retrying-transactions.html.259b8c70.js"),[]).then(({data:e})=>e),"v-22564af7":()=>c(()=>import("./serialization.html.a920b8f0.js"),[]).then(({data:e})=>e),"v-4571fbe6":()=>c(()=>import("./index.html.0bcc3780.js"),[]).then(({data:e})=>e),"v-076ff0c2":()=>c(()=>import("./jupiter.html.deab8bb3.js"),[]).then(({data:e})=>e),"v-6cb34a86":()=>c(()=>import("./mango.html.70776e15.js"),[]).then(({data:e})=>e),"v-6976e796":()=>c(()=>import("./pyth.html.9a5120ae.js"),[]).then(({data:e})=>e),"v-1e60cea4":()=>c(()=>import("./react-native.html.e7e69a2a.js"),[]).then(({data:e})=>e),"v-5522fd47":()=>c(()=>import("./serum.html.bc158364.js"),[]).then(({data:e})=>e),"v-480ee496":()=>c(()=>import("./strata.html.3c228f93.js"),[]).then(({data:e})=>e),"v-139f3066":()=>c(()=>import("./switchboard.html.dee9bb14.js"),[]).then(({data:e})=>e),"v-22a8f18c":()=>c(()=>import("./web3auth.html.487e25b6.js"),[]).then(({data:e})=>e),"v-742672b6":()=>c(()=>import("./accounts.html.55154bf6.js"),[]).then(({data:e})=>e),"v-7fdd21f0":()=>c(()=>import("./basic-transactions.html.cc3970da.js"),[]).then(({data:e})=>e),"v-5bd01ecb":()=>c(()=>import("./keypairs-and-wallets.html.94f55e5a.js"),[]).then(({data:e})=>e),"v-0835dffd":()=>c(()=>import("./local-development.html.0e2e2e16.js"),[]).then(({data:e})=>e),"v-31ec7bc9":()=>c(()=>import("./name-service.html.ce4ae0ce.js"),[]).then(({data:e})=>e),"v-3331e485":()=>c(()=>import("./nfts.html.7516a777.js"),[]).then(({data:e})=>e),"v-dc79fe86":()=>c(()=>import("./offline-transactions.html.8fd7e979.js"),[]).then(({data:e})=>e),"v-77bdac66":()=>c(()=>import("./programs.html.953ebfba.js"),[]).then(({data:e})=>e),"v-3717171f":()=>c(()=>import("./staking.html.1c45d356.js"),[]).then(({data:e})=>e),"v-01a8e35d":()=>c(()=>import("./token.html.fbd48861.js"),[]).then(({data:e})=>e),"v-8e5be170":()=>c(()=>import("./accounts.html.0afa202e.js"),[]).then(({data:e})=>e),"v-f2328ef0":()=>c(()=>import("./pdas.html.2ca6de13.js"),[]).then(({data:e})=>e),"v-08ccc65f":()=>c(()=>import("./programs.html.737227bf.js"),[]).then(({data:e})=>e),"v-1256fcb9":()=>c(()=>import("./transactions.html.f78fedbc.js"),[]).then(({data:e})=>e),"v-2485abf3":()=>c(()=>import("./installation.html.0b6e50b0.js"),[]).then(({data:e})=>e),"v-1832f5c2":()=>c(()=>import("./account-maps.html.ae4094c6.js"),[]).then(({data:e})=>e),"v-70204b2b":()=>c(()=>import("./data-migration.html.800e226a.js"),[]).then(({data:e})=>e),"v-16deac83":()=>c(()=>import("./debugging-solana-programs.html.8edbc7c0.js"),[]).then(({data:e})=>e),"v-732f06a2":()=>c(()=>import("./feature-parity-testing.html.223015c2.js"),[]).then(({data:e})=>e),"v-22a67510":()=>c(()=>import("./get-program-accounts.html.769423d1.js"),[]).then(({data:e})=>e),"v-309da254":()=>c(()=>import("./retrying-transactions.html.b49a7fa7.js"),[]).then(({data:e})=>e),"v-5796626c":()=>c(()=>import("./serialization.html.2d743db8.js"),[]).then(({data:e})=>e),"v-1bac4a4a":()=>c(()=>import("./index.html.f465b4b8.js"),[]).then(({data:e})=>e),"v-3cb00837":()=>c(()=>import("./jupiter.html.e8544b6c.js"),[]).then(({data:e})=>e),"v-0f7fcb72":()=>c(()=>import("./mango.html.b6c7b10b.js"),[]).then(({data:e})=>e),"v-0e6f43f0":()=>c(()=>import("./orao-vrf.html.b1229ca4.js"),[]).then(({data:e})=>e),"v-d5fbe77e":()=>c(()=>import("./pyth.html.64733ceb.js"),[]).then(({data:e})=>e),"v-0aace259":()=>c(()=>import("./react-native.html.4720ff7b.js"),[]).then(({data:e})=>e),"v-ca072408":()=>c(()=>import("./serum.html.ebcb81e0.js"),[]).then(({data:e})=>e),"v-8538eafe":()=>c(()=>import("./strata.html.894a5ce9.js"),[]).then(({data:e})=>e),"v-5404867c":()=>c(()=>import("./switchboard.html.9889916b.js"),[]).then(({data:e})=>e),"v-d5286e92":()=>c(()=>import("./web3auth.html.8ccbd135.js"),[]).then(({data:e})=>e),"v-2d09cebe":()=>c(()=>import("./accounts.html.2456efd3.js"),[]).then(({data:e})=>e),"v-9ce8299a":()=>c(()=>import("./basic-transactions.html.0fafe6bd.js"),[]).then(({data:e})=>e),"v-4ec78794":()=>c(()=>import("./keypairs-and-wallets.html.c1de8482.js"),[]).then(({data:e})=>e),"v-32949b1c":()=>c(()=>import("./local-development.html.4e40c888.js"),[]).then(({data:e})=>e),"v-01539798":()=>c(()=>import("./name-service.html.3fd74674.js"),[]).then(({data:e})=>e),"v-6bf79020":()=>c(()=>import("./nfts.html.2be37d95.js"),[]).then(({data:e})=>e),"v-0e8f1e28":()=>c(()=>import("./offline-transactions.html.1cf02fbe.js"),[]).then(({data:e})=>e),"v-3975cfb8":()=>c(()=>import("./programs.html.cebbf111.js"),[]).then(({data:e})=>e),"v-7cf087d4":()=>c(()=>import("./staking.html.4f6e8106.js"),[]).then(({data:e})=>e),"v-4520fd52":()=>c(()=>import("./token.html.0e36c987.js"),[]).then(({data:e})=>e),"v-da3cf63c":()=>c(()=>import("./accounts.html.0313f31c.js"),[]).then(({data:e})=>e),"v-0bf50b22":()=>c(()=>import("./pdas.html.c5d8c58d.js"),[]).then(({data:e})=>e),"v-3a47880e":()=>c(()=>import("./programs.html.398d0985.js"),[]).then(({data:e})=>e),"v-73c3d55a":()=>c(()=>import("./transactions.html.789955d2.js"),[]).then(({data:e})=>e),"v-02e9060d":()=>c(()=>import("./installation.html.659560ce.js"),[]).then(({data:e})=>e),"v-10a285c5":()=>c(()=>import("./account-maps.html.5f8e99d8.js"),[]).then(({data:e})=>e),"v-4ddeba51":()=>c(()=>import("./data-migration.html.52b8fb7b.js"),[]).then(({data:e})=>e),"v-0173699d":()=>c(()=>import("./debugging-solana-programs.html.bca8cf7f.js"),[]).then(({data:e})=>e),"v-971f3456":()=>c(()=>import("./feature-parity-testing.html.559273e4.js"),[]).then(({data:e})=>e),"v-307b2094":()=>c(()=>import("./get-program-accounts.html.917c7c6a.js"),[]).then(({data:e})=>e),"v-0f00fc6e":()=>c(()=>import("./retrying-transactions.html.51722db4.js"),[]).then(({data:e})=>e),"v-5b4b12f4":()=>c(()=>import("./serialization.html.1e543ecb.js"),[]).then(({data:e})=>e),"v-0027c5f5":()=>c(()=>import("./index.html.96afeed1.js"),[]).then(({data:e})=>e),"v-9117c75e":()=>c(()=>import("./jupiter.html.a69ee874.js"),[]).then(({data:e})=>e),"v-d6e3c3e8":()=>c(()=>import("./mango.html.8f1af944.js"),[]).then(({data:e})=>e),"v-2df1fe67":()=>c(()=>import("./pyth.html.f99e7c1c.js"),[]).then(({data:e})=>e),"v-10996302":()=>c(()=>import("./react-native.html.e9a79d40.js"),[]).then(({data:e})=>e),"v-200ac096":()=>c(()=>import("./serum.html.18bd0c8d.js"),[]).then(({data:e})=>e),"v-4bc0e9b2":()=>c(()=>import("./strata.html.8bba2b83.js"),[]).then(({data:e})=>e),"v-6a0633dc":()=>c(()=>import("./switchboard.html.268deb26.js"),[]).then(({data:e})=>e),"v-732a37dd":()=>c(()=>import("./web3auth.html.bf152da7.js"),[]).then(({data:e})=>e),"v-06371947":()=>c(()=>import("./accounts.html.7fb9a899.js"),[]).then(({data:e})=>e),"v-c0d8574e":()=>c(()=>import("./basic-transactions.html.c005de00.js"),[]).then(({data:e})=>e),"v-644e73dc":()=>c(()=>import("./keypairs-and-wallets.html.933c28c3.js"),[]).then(({data:e})=>e),"v-75cde6e8":()=>c(()=>import("./local-development.html.e7d6218e.js"),[]).then(({data:e})=>e),"v-673571da":()=>c(()=>import("./name-service.html.c894a74d.js"),[]).then(({data:e})=>e),"v-931308d4":()=>c(()=>import("./nfts.html.fef66637.js"),[]).then(({data:e})=>e),"v-cb7d5464":()=>c(()=>import("./offline-transactions.html.41ad40f9.js"),[]).then(({data:e})=>e),"v-5631d05e":()=>c(()=>import("./programs.html.b57b7fd6.js"),[]).then(({data:e})=>e),"v-01feda6e":()=>c(()=>import("./staking.html.bb940893.js"),[]).then(({data:e})=>e),"v-3211a328":()=>c(()=>import("./token.html.c5c0d562.js"),[]).then(({data:e})=>e),"v-52cd49a4":()=>c(()=>import("./accounts.html.25d1da4d.js"),[]).then(({data:e})=>e),"v-4a4be76e":()=>c(()=>import("./pdas.html.d436a692.js"),[]).then(({data:e})=>e),"v-26941245":()=>c(()=>import("./programs.html.8e390c72.js"),[]).then(({data:e})=>e),"v-2229e59f":()=>c(()=>import("./transactions.html.ae0e0a34.js"),[]).then(({data:e})=>e),"v-e97c194e":()=>c(()=>import("./installation.html.78755c51.js"),[]).then(({data:e})=>e),"v-c5b19a0e":()=>c(()=>import("./account-maps.html.1449aec7.js"),[]).then(({data:e})=>e),"v-68262af6":()=>c(()=>import("./data-migration.html.d42f0ca8.js"),[]).then(({data:e})=>e),"v-a4865e2e":()=>c(()=>import("./debugging-solana-programs.html.5bfbbe91.js"),[]).then(({data:e})=>e),"v-37352209":()=>c(()=>import("./feature-parity-testing.html.144de85a.js"),[]).then(({data:e})=>e),"v-0d30a8ea":()=>c(()=>import("./get-program-accounts.html.3120791e.js"),[]).then(({data:e})=>e),"v-d14c2c8c":()=>c(()=>import("./retrying-transactions.html.7bf63f72.js"),[]).then(({data:e})=>e),"v-5329205c":()=>c(()=>import("./serialization.html.19baa9d0.js"),[]).then(({data:e})=>e),"v-da88730a":()=>c(()=>import("./accounts.html.384f4db7.js"),[]).then(({data:e})=>e),"v-2258908d":()=>c(()=>import("./basic-transactions.html.6649f70c.js"),[]).then(({data:e})=>e),"v-48d4f310":()=>c(()=>import("./keypairs-and-wallets.html.08dc2fba.js"),[]).then(({data:e})=>e),"v-4d71f9d8":()=>c(()=>import("./local-development.html.ccde500b.js"),[]).then(({data:e})=>e),"v-cb0f35e4":()=>c(()=>import("./name-service.html.b4effe44.js"),[]).then(({data:e})=>e),"v-b3ac3a6c":()=>c(()=>import("./nfts.html.57180f5a.js"),[]).then(({data:e})=>e),"v-7ec7d502":()=>c(()=>import("./offline-transactions.html.949a36e4.js"),[]).then(({data:e})=>e),"v-3a9304dc":()=>c(()=>import("./programs.html.b41c0d46.js"),[]).then(({data:e})=>e),"v-4055b6ba":()=>c(()=>import("./staking.html.89a43dc2.js"),[]).then(({data:e})=>e),"v-249ea490":()=>c(()=>import("./token.html.4683cbb3.js"),[]).then(({data:e})=>e),"v-3f8c76bb":()=>c(()=>import("./accounts.html.50a23d38.js"),[]).then(({data:e})=>e),"v-310cd17b":()=>c(()=>import("./pdas.html.5971b691.js"),[]).then(({data:e})=>e),"v-e0f1a45c":()=>c(()=>import("./programs.html.4dd8a111.js"),[]).then(({data:e})=>e),"v-5dda72ac":()=>c(()=>import("./transactions.html.d12c3b53.js"),[]).then(({data:e})=>e),"v-c5f91db4":()=>c(()=>import("./installation.html.0916f190.js"),[]).then(({data:e})=>e),"v-e2f8eae8":()=>c(()=>import("./account-maps.html.44488805.js"),[]).then(({data:e})=>e),"v-50dcad50":()=>c(()=>import("./data-migration.html.47e0a19b.js"),[]).then(({data:e})=>e),"v-387ebf94":()=>c(()=>import("./debugging-solana-programs.html.b90ccbbd.js"),[]).then(({data:e})=>e),"v-5da35ddc":()=>c(()=>import("./feature-parity-testing.html.e5e8561b.js"),[]).then(({data:e})=>e),"v-4791bd7d":()=>c(()=>import("./get-program-accounts.html.860edbe4.js"),[]).then(({data:e})=>e),"v-adc930f2":()=>c(()=>import("./retrying-transactions.html.52526203.js"),[]).then(({data:e})=>e),"v-109a0a9f":()=>c(()=>import("./serialization.html.9401658c.js"),[]).then(({data:e})=>e),"v-18d9f78e":()=>c(()=>import("./index.html.a85cc6a2.js"),[]).then(({data:e})=>e),"v-14989f2c":()=>c(()=>import("./jupiter.html.7c798e83.js"),[]).then(({data:e})=>e),"v-8cb43736":()=>c(()=>import("./mango.html.1d2c7c84.js"),[]).then(({data:e})=>e),"v-67e8ee24":()=>c(()=>import("./pyth.html.2620ca31.js"),[]).then(({data:e})=>e),"v-fe8d3bf4":()=>c(()=>import("./react-native.html.585666c2.js"),[]).then(({data:e})=>e),"v-452286ef":()=>c(()=>import("./serum.html.6b46a49c.js"),[]).then(({data:e})=>e),"v-58008fee":()=>c(()=>import("./strata.html.a9175fcc.js"),[]).then(({data:e})=>e),"v-d087d916":()=>c(()=>import("./switchboard.html.ec4ae728.js"),[]).then(({data:e})=>e),"v-0645b238":()=>c(()=>import("./web3auth.html.0966486b.js"),[]).then(({data:e})=>e),"v-f7cfc3e4":()=>c(()=>import("./accounts.html.28d1454a.js"),[]).then(({data:e})=>e),"v-48c6cc60":()=>c(()=>import("./basic-transactions.html.4cdcf2ee.js"),[]).then(({data:e})=>e),"v-e6b8f3ba":()=>c(()=>import("./keypairs-and-wallets.html.c8b5fdf9.js"),[]).then(({data:e})=>e),"v-5f3377a5":()=>c(()=>import("./local-development.html.83f21871.js"),[]).then(({data:e})=>e),"v-4fe8bb21":()=>c(()=>import("./name-service.html.61d03b32.js"),[]).then(({data:e})=>e),"v-00aefbdd":()=>c(()=>import("./nfts.html.78141b5d.js"),[]).then(({data:e})=>e),"v-7ad32fd6":()=>c(()=>import("./offline-transactions.html.cedd0b42.js"),[]).then(({data:e})=>e),"v-57da55b6":()=>c(()=>import("./programs.html.12ac4236.js"),[]).then(({data:e})=>e),"v-2716a0c7":()=>c(()=>import("./staking.html.8fc974f1.js"),[]).then(({data:e})=>e),"v-386291f6":()=>c(()=>import("./token.html.a2c3a237.js"),[]).then(({data:e})=>e),"v-46a93876":()=>c(()=>import("./accounts.html.07c4a3ad.js"),[]).then(({data:e})=>e),"v-5aefd385":()=>c(()=>import("./pdas.html.7737299f.js"),[]).then(({data:e})=>e),"v-2ca61adc":()=>c(()=>import("./programs.html.b501d38a.js"),[]).then(({data:e})=>e),"v-4847cab6":()=>c(()=>import("./transactions.html.f5d7f074.js"),[]).then(({data:e})=>e),"v-bd0a22a0":()=>c(()=>import("./installation.html.9ee3bdcf.js"),[]).then(({data:e})=>e),"v-bdfe6c7c":()=>c(()=>import("./account-maps.html.97fa12d3.js"),[]).then(({data:e})=>e),"v-3fbbf30e":()=>c(()=>import("./data-migration.html.2f3fdd46.js"),[]).then(({data:e})=>e),"v-846b6e80":()=>c(()=>import("./debugging-solana-programs.html.2e01332a.js"),[]).then(({data:e})=>e),"v-2fc8dcdc":()=>c(()=>import("./feature-parity-testing.html.6f5d0fac.js"),[]).then(({data:e})=>e),"v-aa61329a":()=>c(()=>import("./get-program-accounts.html.24883fcb.js"),[]).then(({data:e})=>e),"v-a4da35de":()=>c(()=>import("./retrying-transactions.html.37e02212.js"),[]).then(({data:e})=>e),"v-4dc4b229":()=>c(()=>import("./serialization.html.dc1446cb.js"),[]).then(({data:e})=>e),"v-d2d54578":()=>c(()=>import("./accounts.html.6569d379.js"),[]).then(({data:e})=>e),"v-5981ffd4":()=>c(()=>import("./basic-transactions.html.c9f0e983.js"),[]).then(({data:e})=>e),"v-59dda459":()=>c(()=>import("./keypairs-and-wallets.html.47c28600.js"),[]).then(({data:e})=>e),"v-63aaf52f":()=>c(()=>import("./local-development.html.f3763675.js"),[]).then(({data:e})=>e),"v-56a76f57":()=>c(()=>import("./name-service.html.0b6ff97a.js"),[]).then(({data:e})=>e),"v-41e84613":()=>c(()=>import("./nfts.html.cf00b226.js"),[]).then(({data:e})=>e),"v-e05ef36a":()=>c(()=>import("./offline-transactions.html.9c1ce8f1.js"),[]).then(({data:e})=>e),"v-32dfd74a":()=>c(()=>import("./programs.html.9eb1d5be.js"),[]).then(({data:e})=>e),"v-50f9a2d1":()=>c(()=>import("./staking.html.00ec96e2.js"),[]).then(({data:e})=>e),"v-6c8298e2":()=>c(()=>import("./token.html.f322a148.js"),[]).then(({data:e})=>e),"v-6a35b27a":()=>c(()=>import("./accounts.html.9ee344c8.js"),[]).then(({data:e})=>e),"v-8e20768c":()=>c(()=>import("./pdas.html.b2f32d6d.js"),[]).then(({data:e})=>e),"v-8b9f2cde":()=>c(()=>import("./programs.html.36150b0a.js"),[]).then(({data:e})=>e),"v-55f1b6eb":()=>c(()=>import("./transactions.html.813aef7d.js"),[]).then(({data:e})=>e),"v-274abcb6":()=>c(()=>import("./installation.html.b994e720.js"),[]).then(({data:e})=>e),"v-02feff2d":()=>c(()=>import("./account-maps.html.01e3e678.js"),[]).then(({data:e})=>e),"v-1b0279b9":()=>c(()=>import("./data-migration.html.19adc0d7.js"),[]).then(({data:e})=>e),"v-5afd7935":()=>c(()=>import("./debugging-solana-programs.html.3cd18bd7.js"),[]).then(({data:e})=>e),"v-0d9b8586":()=>c(()=>import("./feature-parity-testing.html.69ff629a.js"),[]).then(({data:e})=>e),"v-5263011e":()=>c(()=>import("./get-program-accounts.html.75179e0c.js"),[]).then(({data:e})=>e),"v-0f1acff4":()=>c(()=>import("./retrying-transactions.html.fcb1cee2.js"),[]).then(({data:e})=>e),"v-2b8d2a1e":()=>c(()=>import("./serialization.html.e845cfb4.js"),[]).then(({data:e})=>e),"v-35d91d8d":()=>c(()=>import("./index.html.0c85b258.js"),[]).then(({data:e})=>e),"v-10a6cfe9":()=>c(()=>import("./jupiter.html.c2fdbdaf.js"),[]).then(({data:e})=>e),"v-4188d7a4":()=>c(()=>import("./mango.html.931f8a01.js"),[]).then(({data:e})=>e),"v-5f249c62":()=>c(()=>import("./pyth.html.88ef18a8.js"),[]).then(({data:e})=>e),"v-049919e7":()=>c(()=>import("./react-native.html.7bf57c65.js"),[]).then(({data:e})=>e),"v-65f50ba4":()=>c(()=>import("./serum.html.8079c62c.js"),[]).then(({data:e})=>e),"v-6707f6e2":()=>c(()=>import("./strata.html.4c9e956b.js"),[]).then(({data:e})=>e),"v-85f54918":()=>c(()=>import("./switchboard.html.e55e7630.js"),[]).then(({data:e})=>e),"v-404df745":()=>c(()=>import("./web3auth.html.fde4af14.js"),[]).then(({data:e})=>e),"v-0ed8daa2":()=>c(()=>import("./accounts.html.b148d429.js"),[]).then(({data:e})=>e),"v-3754a87e":()=>c(()=>import("./basic-transactions.html.31e740e7.js"),[]).then(({data:e})=>e),"v-7ff81144":()=>c(()=>import("./keypairs-and-wallets.html.f48d6797.js"),[]).then(({data:e})=>e),"v-a2eaafb8":()=>c(()=>import("./local-development.html.6ddccf34.js"),[]).then(({data:e})=>e),"v-7a66f742":()=>c(()=>import("./name-service.html.a0666392.js"),[]).then(({data:e})=>e),"v-1b97e8fe":()=>c(()=>import("./nfts.html.6f7be66d.js"),[]).then(({data:e})=>e),"v-942a1994":()=>c(()=>import("./offline-transactions.html.6f0a6ca2.js"),[]).then(({data:e})=>e),"v-488e49c6":()=>c(()=>import("./programs.html.615f54c9.js"),[]).then(({data:e})=>e),"v-a20cd7f4":()=>c(()=>import("./staking.html.740e3b00.js"),[]).then(({data:e})=>e),"v-26036e04":()=>c(()=>import("./token.html.a3662525.js"),[]).then(({data:e})=>e),"v-43987c75":()=>c(()=>import("./accounts.html.efa5c970.js"),[]).then(({data:e})=>e),"v-3c24c435":()=>c(()=>import("./pdas.html.c425715e.js"),[]).then(({data:e})=>e),"v-d8d998e8":()=>c(()=>import("./programs.html.de4b5596.js"),[]).then(({data:e})=>e),"v-66cde934":()=>c(()=>import("./transactions.html.d8f9ea08.js"),[]).then(({data:e})=>e),"v-567ec360":()=>c(()=>import("./installation.html.4b980212.js"),[]).then(({data:e})=>e),"v-3706649a":()=>c(()=>import("./404.html.f166316b.js"),[]).then(({data:e})=>e)},kc=Ee(dm),yc=_i({key:"",path:"",title:"",lang:"",frontmatter:{},excerpt:"",headers:[]}),ut=Ee(yc),lr=()=>ut;sl.webpackHot&&(__VUE_HMR_RUNTIME__.updatePageData=e=>{kc.value[e.key]=()=>Promise.resolve(e),e.key===ut.value.key&&(ut.value=e)});const Ec=Symbol(""),hm=()=>{const e=Re(Ec);if(!e)throw new Error("usePageFrontmatter() is called without provider.");return e},wc=Symbol(""),gm=()=>{const e=Re(wc);if(!e)throw new Error("usePageHead() is called without provider.");return e},mm=Symbol(""),Pc=Symbol(""),Sc=()=>{const e=Re(Pc);if(!e)throw new Error("usePageLang() is called without provider.");return e},Fi=Symbol(""),ji=()=>{const e=Re(Fi);if(!e)throw new Error("useRouteLocale() is called without provider.");return e},pm={base:"/",lang:"en-US",title:"Solana Cookbook",description:"",head:[["link",{rel:"icon",href:"/solana_cookbook_lightmode.svg"}],["script",{"data-domain":"solanacookbook.com",src:"https://plausible.io/js/plausible.js"}]],locales:{"/":{lang:"en-US",title:"Solana Cookbook"},"/zh/":{lang:"zh-CN",title:"Solana\u79D8\u7C4D"},"/es/":{lang:"es",title:"Solana Cookbook"},"/de/":{lang:"de-DE",title:"Solana Cookbook"},"/vi/":{lang:"vi-VN",title:"To\xE0n t\u1EADp Solana"},"/th/":{lang:"th-TH",title:"\u0E04\u0E39\u0E48\u0E21\u0E37\u0E2D Solana"},"/fr/":{lang:"fr-FR",title:"Solana Cookbook"},"/id/":{lang:"id-ID",title:"Buku Panduan Solana"},"/kr/":{lang:"kr-KR",title:"Solana Cookbook"},"/tr/":{lang:"tr-TR",title:"Solana Cookbook"}}},Et=Ee(pm),Oc=()=>Et;sl.webpackHot&&(__VUE_HMR_RUNTIME__.updateSiteData=e=>{Et.value=e});const Ac=Symbol(""),W_=()=>{const e=Re(Ac);if(!e)throw new Error("useSiteLocaleData() is called without provider.");return e},vm=Symbol(""),Ni=e=>{let t;e.pageKey?t=e.pageKey:t=lr().value.key;const n=bc[t];return n?ee(n):ee("div","404 Not Found")};Ni.displayName="Content";Ni.props={pageKey:{type:String,required:!1}};const fm={"404":v(()=>c(()=>import("./404.7b7f0c1b.js"),[])),Layout:v(()=>c(()=>import("./Layout.e58914e6.js"),[]))},_m=([e,t,n])=>e==="meta"&&t.name?`${e}.${t.name}`:["title","base"].includes(e)?e:e==="template"&&t.id?`${e}.${t.id}`:JSON.stringify([e,t,n]),bm=e=>{const t=new Set,n=[];return e.forEach(r=>{const l=_m(r);t.has(l)||(t.add(l),n.push(r))}),n},km=e=>/^(https?:)?\/\//.test(e),$_=e=>/^mailto:/.test(e),G_=e=>/^tel:/.test(e),Tc=e=>Object.prototype.toString.call(e)==="[object Object]",ym=e=>e.replace(/\/$/,""),Em=e=>e.replace(/^\//,""),Lc=(e,t)=>{const n=Object.keys(e).sort((r,l)=>{const i=l.split("/").length-r.split("/").length;return i!==0?i:l.length-r.length});for(const r of n)if(t.startsWith(r))return r;return"/"},wm=(e,t="/")=>e.replace(/^(https?:)?\/\/[^/]*/,"").replace(new RegExp(`^${t}`),"/"),Ba=ze({name:"Vuepress",setup(){const e=lr(),t=_e(()=>{let n;if(e.value.path){const r=e.value.frontmatter.layout;be(r)?n=r:n="Layout"}else n="404";return fm[n]||gh(n,!1)});return()=>ee(t.value)}}),Tt=e=>e,Mi=e=>e,Pm=e=>km(e)?e:`${Oc().value.base}${Em(e)}`,Ft=_n({resolvePageData:async e=>{const t=kc.value[e],n=await(t==null?void 0:t());return n!=null?n:yc},resolvePageFrontmatter:e=>e.frontmatter,resolvePageHead:(e,t,n)=>{const r=be(t.description)?t.description:n.description,l=[...te(t.head)?t.head:[],...n.head,["title",{},e],["meta",{name:"description",content:r}]];return bm(l)},resolvePageHeadTitle:(e,t)=>`${e.title?`${e.title} | `:""}${t.title}`,resolvePageLang:e=>e.lang||"en",resolveRouteLocale:(e,t)=>Lc(e,t),resolveSiteLocaleData:(e,t)=>xe(xe({},e),e.locales[t])});const Sm=ee("svg",{class:"external-link-icon",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",x:"0px",y:"0px",viewBox:"0 0 100 100",width:"15",height:"15"},[ee("path",{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}),ee("polygon",{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"})]),Om=ze({name:"ExternalLinkIcon",props:{locales:{type:Object,required:!1,default:()=>({})}},setup(e){const t=ji(),n=_e(()=>{var r;return(r=e.locales[t.value])!==null&&r!==void 0?r:{openInNewWindow:"open in new window"}});return()=>ee("span",[Sm,ee("span",{class:"external-link-icon-sr-only"},n.value.openInNewWindow)])}}),Am={"/":{openInNewWindow:"open in new window"},"/zh/":{openInNewWindow:"open in new window"},"/es/":{openInNewWindow:"open in new window"},"/de/":{openInNewWindow:"open in new window"},"/vi/":{openInNewWindow:"open in new window"},"/th/":{openInNewWindow:"open in new window"},"/fr/":{openInNewWindow:"open in new window"},"/id/":{openInNewWindow:"open in new window"},"/tr/":{openInNewWindow:"open in new window"},"/kr/":{openInNewWindow:"open in new window"}};var Tm=Tt(({app:e})=>{e.component("ExternalLinkIcon",ee(Om,{locales:Am}))});/*! medium-zoom 1.0.6 | MIT License | https://github.com/francoischalifour/medium-zoom */var jt=Object.assign||function(e){for(var t=1;t1&&arguments[1]!==void 0?arguments[1]:{},r=window.Promise||function(T){function H(){}T(H,H)},l=function(T){var H=T.target;if(H===K){g();return}P.indexOf(H)!==-1&&_({target:H})},i=function(){if(!(D||!A.original)){var T=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0;Math.abs(j-T)>L.scrollOffset&&setTimeout(g,150)}},a=function(T){var H=T.key||T.keyCode;(H==="Escape"||H==="Esc"||H===27)&&g()},o=function(){var T=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},H=T;if(T.background&&(K.style.background=T.background),T.container&&T.container instanceof Object&&(H.container=jt({},L.container,T.container)),T.template){var Q=yr(T.template)?T.template:document.querySelector(T.template);H.template=Q}return L=jt({},L,H),P.forEach(function(se){se.dispatchEvent(Yt("medium-zoom:update",{detail:{zoom:B}}))}),B},s=function(){var T=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return e(jt({},L,T))},u=function(){for(var T=arguments.length,H=Array(T),Q=0;Q0?H.reduce(function(J,re){return[].concat(J,Ka(re))},[]):P;return se.forEach(function(J){J.classList.remove("medium-zoom-image"),J.dispatchEvent(Yt("medium-zoom:detach",{detail:{zoom:B}}))}),P=P.filter(function(J){return se.indexOf(J)===-1}),B},m=function(T,H){var Q=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return P.forEach(function(se){se.addEventListener("medium-zoom:"+T,H,Q)}),O.push({type:"medium-zoom:"+T,listener:H,options:Q}),B},h=function(T,H){var Q=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return P.forEach(function(se){se.removeEventListener("medium-zoom:"+T,H,Q)}),O=O.filter(function(se){return!(se.type==="medium-zoom:"+T&&se.listener.toString()===H.toString())}),B},b=function(){var T=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},H=T.target,Q=function(){var J={width:document.documentElement.clientWidth,height:document.documentElement.clientHeight,left:0,top:0,right:0,bottom:0},re=void 0,le=void 0;if(L.container)if(L.container instanceof Object)J=jt({},J,L.container),re=J.width-J.left-J.right-L.margin*2,le=J.height-J.top-J.bottom-L.margin*2;else{var we=yr(L.container)?L.container:document.querySelector(L.container),Oe=we.getBoundingClientRect(),Te=Oe.width,Pe=Oe.height,Ie=Oe.left,He=Oe.top;J=jt({},J,{width:Te,height:Pe,left:Ie,top:He})}re=re||J.width-L.margin*2,le=le||J.height-L.margin*2;var I=A.zoomedHd||A.original,U=Ua(I)?re:I.naturalWidth||re,N=Ua(I)?le:I.naturalHeight||le,q=I.getBoundingClientRect(),ue=q.top,me=q.left,ie=q.width,ne=q.height,p=Math.min(U,re)/ie,y=Math.min(N,le)/ne,S=Math.min(p,y),R=(-me+(re-ie)/2+L.margin+J.left)/S,C=(-ue+(le-ne)/2+L.margin+J.top)/S,x="scale("+S+") translate3d("+R+"px, "+C+"px, 0)";A.zoomed.style.transform=x,A.zoomedHd&&(A.zoomedHd.style.transform=x)};return new r(function(se){if(H&&P.indexOf(H)===-1){se(B);return}var J=function Te(){D=!1,A.zoomed.removeEventListener("transitionend",Te),A.original.dispatchEvent(Yt("medium-zoom:opened",{detail:{zoom:B}})),se(B)};if(A.zoomed){se(B);return}if(H)A.original=H;else if(P.length>0){var re=P;A.original=re[0]}else{se(B);return}if(A.original.dispatchEvent(Yt("medium-zoom:open",{detail:{zoom:B}})),j=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,D=!0,A.zoomed=Rm(A.original),document.body.appendChild(K),L.template){var le=yr(L.template)?L.template:document.querySelector(L.template);A.template=document.createElement("div"),A.template.appendChild(le.content.cloneNode(!0)),document.body.appendChild(A.template)}if(document.body.appendChild(A.zoomed),window.requestAnimationFrame(function(){document.body.classList.add("medium-zoom--opened")}),A.original.classList.add("medium-zoom-image--hidden"),A.zoomed.classList.add("medium-zoom-image--opened"),A.zoomed.addEventListener("click",g),A.zoomed.addEventListener("transitionend",J),A.original.getAttribute("data-zoom-src")){A.zoomedHd=A.zoomed.cloneNode(),A.zoomedHd.removeAttribute("srcset"),A.zoomedHd.removeAttribute("sizes"),A.zoomedHd.src=A.zoomed.getAttribute("data-zoom-src"),A.zoomedHd.onerror=function(){clearInterval(we),console.warn("Unable to reach the zoom image target "+A.zoomedHd.src),A.zoomedHd=null,Q()};var we=setInterval(function(){A.zoomedHd.complete&&(clearInterval(we),A.zoomedHd.classList.add("medium-zoom-image--opened"),A.zoomedHd.addEventListener("click",g),document.body.appendChild(A.zoomedHd),Q())},10)}else if(A.original.hasAttribute("srcset")){A.zoomedHd=A.zoomed.cloneNode(),A.zoomedHd.removeAttribute("sizes"),A.zoomedHd.removeAttribute("loading");var Oe=A.zoomedHd.addEventListener("load",function(){A.zoomedHd.removeEventListener("load",Oe),A.zoomedHd.classList.add("medium-zoom-image--opened"),A.zoomedHd.addEventListener("click",g),document.body.appendChild(A.zoomedHd),Q()})}else Q()})},g=function(){return new r(function(T){if(D||!A.original){T(B);return}var H=function Q(){A.original.classList.remove("medium-zoom-image--hidden"),document.body.removeChild(A.zoomed),A.zoomedHd&&document.body.removeChild(A.zoomedHd),document.body.removeChild(K),A.zoomed.classList.remove("medium-zoom-image--opened"),A.template&&document.body.removeChild(A.template),D=!1,A.zoomed.removeEventListener("transitionend",Q),A.original.dispatchEvent(Yt("medium-zoom:closed",{detail:{zoom:B}})),A.original=null,A.zoomed=null,A.zoomedHd=null,A.template=null,T(B)};D=!0,document.body.classList.remove("medium-zoom--opened"),A.zoomed.style.transform="",A.zoomedHd&&(A.zoomedHd.style.transform=""),A.template&&(A.template.style.transition="opacity 150ms",A.template.style.opacity=0),A.original.dispatchEvent(Yt("medium-zoom:close",{detail:{zoom:B}})),A.zoomed.addEventListener("transitionend",H)})},_=function(){var T=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},H=T.target;return A.original?g():b({target:H})},f=function(){return L},k=function(){return P},w=function(){return A.original},P=[],O=[],D=!1,j=0,L=n,A={original:null,zoomed:null,zoomedHd:null,template:null};Object.prototype.toString.call(t)==="[object Object]"?L=t:(t||typeof t=="string")&&u(t),L=jt({margin:0,background:"#fff",scrollOffset:40,container:null,template:null},L);var K=Dm(L.background);document.addEventListener("click",l),document.addEventListener("keyup",a),document.addEventListener("scroll",i),window.addEventListener("resize",g);var B={open:b,close:g,toggle:_,update:o,clone:s,attach:u,detach:d,on:m,off:h,getOptions:f,getImages:k,getZoomedImage:w};return B};function Cm(e,t){t===void 0&&(t={});var n=t.insertAt;if(!(!e||typeof document=="undefined")){var r=document.head||document.getElementsByTagName("head")[0],l=document.createElement("style");l.type="text/css",n==="top"&&r.firstChild?r.insertBefore(l,r.firstChild):r.appendChild(l),l.styleSheet?l.styleSheet.cssText=e:l.appendChild(document.createTextNode(e))}}var xm=".medium-zoom-overlay{position:fixed;top:0;right:0;bottom:0;left:0;opacity:0;transition:opacity .3s;will-change:opacity}.medium-zoom--opened .medium-zoom-overlay{cursor:pointer;cursor:zoom-out;opacity:1}.medium-zoom-image{cursor:pointer;cursor:zoom-in;transition:transform .3s cubic-bezier(.2,0,.2,1)!important}.medium-zoom-image--hidden{visibility:hidden}.medium-zoom-image--opened{position:relative;cursor:pointer;cursor:zoom-out;will-change:transform}";Cm(xm);var Vm=Im;const Fm=Symbol("mediumZoom");const jm=".theme-default-content > img, .theme-default-content :not(a) > img",Nm={},Mm=300;var zm=Tt(({app:e,router:t})=>{const n=Vm(Nm);n.refresh=(r=jm)=>{n.detach(),n.attach(r)},e.provide(Fm,n),t.afterEach(()=>{setTimeout(()=>n.refresh(),Mm)})});const Hm={logo:"/solana_cookbook_lightmode.svg",logoDark:"/solana_cookbook_darkmode.svg",contributors:!1,algolia:{apiKey:"1831a64a81ffef4f85d5c0aa28cb801f",indexName:"solanacookbook",appId:"QMKSKREFKN",algoliaOptions:{hitsPerPage:10}},locales:{"/":{navbar:[{text:"Contribute",link:"https://github.com/solana-developers/solana-cookbook"},{text:"Integrations",link:"/integrations"}],sidebar:{"/":[{text:"Getting Started",children:["/","/getting-started/installation.md"]},{text:"Core Concepts",children:["/core-concepts/accounts.md","/core-concepts/programs.md","/core-concepts/transactions.md","/core-concepts/pdas.md"]},{text:"Guides",children:["/guides/get-program-accounts.md","/guides/serialization.md","/guides/data-migration.md","/guides/account-maps.md","/guides/retrying-transactions.md","/guides/debugging-solana-programs.md","/guides/feature-parity-testing.md","/guides/versioned-transactions.md"]},{text:"References",children:["/references/local-development.md","/references/keypairs-and-wallets.md","/references/basic-transactions.md","/references/accounts.md","/references/programs.md","/references/token.md","/references/staking.md","/references/nfts.md","/references/offline-transactions.md","/references/name-service.md"]}],"/integrations":[{text:"Integrations",children:["/integrations","/integrations/serum.md","/integrations/pyth.md","/integrations/switchboard.md","/integrations/mango.md","/integrations/strata.md","/integrations/web3auth.md","/integrations/react-native.md","/integrations/jupiter.md","/integrations/orao-vrf.md"]}]},selectLanguageName:"English"},"/zh/":{selectLanguageName:"\u4E2D\u6587",navbar:[{text:"\u8D21\u732E\u4EE3\u7801",link:"https://github.com/solana-developers/solana-cookbook"}],sidebar:[{text:"\u5F00\u59CB\u4F7F\u7528",children:["/zh/","/zh/getting-started/installation.md"]},{text:"\u6838\u5FC3\u6982\u5FF5",children:["/zh/core-concepts/accounts.md","/zh/core-concepts/programs.md","/zh/core-concepts/transactions.md","/zh/core-concepts/pdas.md"]},{text:"\u6307\u5357",children:[]},{text:"\u53C2\u8003",children:[]}]},"/es/":{selectLanguageName:"Spanish",navbar:[{text:"Contribuir",link:"https://github.com/solana-developers/solana-cookbook"}],sidebar:{"/":[{text:"Primeros pasos",children:["/es/","/es/getting-started/installation.md"]},{text:"Conceptos clave",children:["/es/core-concepts/accounts.md","/es/core-concepts/programs.md","/es/core-concepts/transactions.md","/es/core-concepts/pdas.md"]},{text:"Gu\xEDas",children:["/es/guides/get-program-accounts.md","/es/guides/serialization.md","/es/guides/data-migration.md","/es/guides/account-maps.md","/es/guides/retrying-transactions.md","/es/guides/debugging-solana-programs.md","/es/guides/feature-parity-testing.md"]},{text:"Referencias",children:["/es/references/local-development.md","/es/references/keypairs-and-wallets.md","/es/references/basic-transactions.md","/es/references/accounts.md","/es/references/programs.md","/es/references/token.md","/es/references/staking.md","/es/references/nfts.md","/es/references/offline-transactions.md","/es/references/name-service.md"]}]}},"/de/":{selectLanguageName:"Deutsch",navbar:[{text:"Kontributor",link:"https://github.com/solana-developers/solana-cookbook"},{text:"Integrationen",link:"/de/integrations"}],sidebar:{"/":[{text:"F\xFCr Beginner",children:["/de/","/de/getting-started/installation.md"]},{text:"Fundamentale Konzepte",children:["/de/core-concepts/accounts.md","/de/core-concepts/programs.md","/de/core-concepts/transactions.md","/de/core-concepts/pdas.md"]},{text:"Guides",children:["/de/guides/get-program-accounts.md","/de/guides/serialization.md","/de/guides/data-migration.md","/de/guides/account-maps.md","/de/guides/retrying-transactions.md","/de/guides/debugging-solana-programs.md","/de/guides/feature-parity-testing.md"]},{text:"Referenzen",children:["/de/references/local-development.md","/de/references/keypairs-and-wallets.md","/de/references/basic-transactions.md","/de/references/accounts.md","/de/references/programs.md","/de/references/token.md","/de/references/staking.md","/de/references/nfts.md","/de/references/offline-transactions.md","/de/references/name-service.md"]}],"/de/integrations":[{text:"Integrationen",children:["/de/integrations","/de/integrations/serum.md","/de/integrations/pyth.md","/de/integrations/switchboard.md","/de/integrations/mango.md","/de/integrations/strata.md","/de/integrations/web3auth.md","/de/integrations/react-native.md","/de/integrations/jupiter.md"]}]}},"/vi/":{selectLanguageName:"Ti\u1EBFng Vi\u1EC7t",navbar:[{text:"\u0110\xF3ng g\xF3p",link:"https://github.com/solana-developers/solana-cookbook"},{text:"T\xEDch h\u1EE3p",link:"/vi/integrations"}],sidebar:{"/vi/":[{text:"M\u1EDF \u0111\u1EA7u",children:["/vi/","/vi/getting-started/installation.md"]},{text:"Kh\xE1i ni\u1EC7m c\u0103n b\u1EA3n",children:["/vi/core-concepts/accounts.md","/vi/core-concepts/programs.md","/vi/core-concepts/transactions.md","/vi/core-concepts/pdas.md"]},{text:"H\u01B0\u1EDBng d\u1EABn",children:["/vi/guides/get-program-accounts.md","/vi/guides/serialization.md","/vi/guides/data-migration.md","/vi/guides/account-maps.md","/vi/guides/retrying-transactions.md","/vi/guides/debugging-solana-programs.md","/vi/guides/feature-parity-testing.md"]},{text:"Tham kh\u1EA3o",children:["/vi/references/local-development.md","/vi/references/keypairs-and-wallets.md","/vi/references/basic-transactions.md","/vi/references/accounts.md","/vi/references/programs.md","/vi/references/token.md","/vi/references/staking.md","/vi/references/nfts.md","/vi/references/offline-transactions.md","/vi/references/name-service.md"]}],"/vi/integrations":[{text:"T\xEDch h\u1EE3p",children:["/vi/integrations","/vi/integrations/serum.md","/vi/integrations/pyth.md","/vi/integrations/switchboard.md","/vi/integrations/mango.md","/vi/integrations/strata.md","/vi/integrations/web3auth.md","/vi/integrations/react-native.md","/vi/integrations/jupiter.md"]}]}},"/th/":{selectLanguageName:"\u0E44\u0E17\u0E22",navbar:[{text:"\u0E23\u0E48\u0E27\u0E21\u0E01\u0E31\u0E19\u0E40\u0E02\u0E35\u0E22\u0E19",link:"https://github.com/solana-developers/solana-cookbook"},{text:"\u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19",link:"/th/integrations"}],sidebar:{"/th/":[{text:"\u0E40\u0E23\u0E34\u0E48\u0E21\u0E15\u0E49\u0E19",children:["/th/","/th/getting-started/installation.md"]},{text:"\u0E41\u0E19\u0E27\u0E04\u0E27\u0E32\u0E21\u0E04\u0E34\u0E14\u0E2B\u0E25\u0E31\u0E01",children:["/th/core-concepts/accounts.md","/th/core-concepts/programs.md","/th/core-concepts/transactions.md","/th/core-concepts/pdas.md"]},{text:"\u0E41\u0E19\u0E27\u0E17\u0E32\u0E07",children:["/th/guides/get-program-accounts.md","/th/guides/serialization.md","/th/guides/data-migration.md","/th/guides/account-maps.md","/th/guides/retrying-transactions.md","/th/guides/debugging-solana-programs.md","/th/guides/feature-parity-testing.md"]},{text:"\u0E2D\u0E49\u0E32\u0E07\u0E2D\u0E34\u0E07",children:["/th/references/local-development.md","/th/references/keypairs-and-wallets.md","/th/references/basic-transactions.md","/th/references/accounts.md","/th/references/programs.md","/th/references/token.md","/th/references/staking.md","/th/references/nfts.md","/th/references/offline-transactions.md","/th/references/name-service.md"]}],"/th/integrations":[{text:"\u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19",children:["/th/integrations","/th/integrations/serum.md","/th/integrations/pyth.md","/th/integrations/switchboard.md","/th/integrations/mango.md","/th/integrations/strata.md","/th/integrations/web3auth.md","/th/integrations/react-native.md","/th/integrations/jupiter.md"]}]}},"/fr/":{selectLanguageName:"Fran\xE7ais",navbar:[{text:"Contribuer",link:"https://github.com/solana-developers/solana-cookbook"},{text:"Int\xE9grations",link:"/fr/integrations"}],sidebar:{"/fr/":[{text:"Pour Commencer",children:["/fr/","/fr/getting-started/installation.md"]},{text:"Concepts Fondamentaux",children:["/fr/core-concepts/accounts.md","/fr/core-concepts/programs.md","/fr/core-concepts/transactions.md","/fr/core-concepts/pdas.md"]},{text:"Guides",children:["/fr/guides/get-program-accounts.md","/fr/guides/serialization.md","/fr/guides/data-migration.md","/fr/guides/account-maps.md","/fr/guides/retrying-transactions.md","/fr/guides/debugging-solana-programs.md","/fr/guides/feature-parity-testing.md"]},{text:"R\xE9f\xE9rences",children:["/fr/references/local-development.md","/fr/references/keypairs-and-wallets.md","/fr/references/basic-transactions.md","/fr/references/accounts.md","/fr/references/programs.md","/fr/references/token.md","/fr/references/staking.md","/fr/references/nfts.md","/fr/references/offline-transactions.md","/fr/references/name-service.md"]}],"/fr/integrations":[{text:"Int\xE9grations",children:["/fr/integrations","/fr/integrations/serum.md","/fr/integrations/pyth.md","/fr/integrations/switchboard.md","/fr/integrations/mango.md","/fr/integrations/strata.md","/fr/integrations/web3auth.md","/fr/integrations/react-native.md","/fr/integrations/jupiter.md"]}]}},"/id/":{selectLanguageName:"Bahasa Indonesia",navbar:[{text:"Kontribusi",link:"https://github.com/solana-developers/solana-cookbook"},{text:"Integrasi",link:"/id/integrations"}],sidebar:{"/":[{text:"Memulai",children:["/id/","/id/getting-started/installation.md"]},{text:"Konsep Utama",children:["/id/core-concepts/accounts.md","/id/core-concepts/programs.md","/id/core-concepts/transactions.md","/id/core-concepts/pdas.md"]},{text:"Panduan",children:["/id/guides/get-program-accounts.md","/id/guides/serialization.md","/id/guides/data-migration.md","/id/guides/account-maps.md","/id/guides/retrying-transactions.md","/id/guides/debugging-solana-programs.md","/id/guides/feature-parity-testing.md"]},{text:"Referensi",children:["/id/references/local-development.md","/id/references/keypairs-and-wallets.md","/id/references/basic-transactions.md","/id/references/accounts.md","/id/references/programs.md","/id/references/token.md","/id/references/staking.md","/id/references/nfts.md","/id/references/offline-transactions.md","/id/references/name-service.md"]}],"/id/integrations":[{text:"Integrasi",children:["/id/integrations","/id/integrations/serum.md","/id/integrations/pyth.md","/id/integrations/switchboard.md","/id/integrations/mango.md","/id/integrations/strata.md","/id/integrations/web3auth.md","/id/integrations/react-native.md","/id/integrations/jupiter.md"]}]}},"/tr/":{selectLanguageName:"T\xFCrk\xE7e",navbar:[{text:"Katk\u0131 yapmak",link:"https://github.com/solana-developers/solana-cookbook"}],sidebar:{"/tr/":[{text:"Ba\u015Flarken",children:["/tr/","/tr/getting-started/installation.md"]},{text:"Temel Kavramlar",children:["/tr/core-concepts/accounts.md","/tr/core-concepts/programs.md","/tr/core-concepts/transactions.md","/tr/core-concepts/pdas.md"]},{text:"K\u0131lavuzlar",children:["/tr/guides/get-program-accounts.md","/tr/guides/serialization.md","/tr/guides/data-migration.md","/tr/guides/account-maps.md","/tr/guides/retrying-transactions.md","/tr/guides/debugging-solana-programs.md","/tr/guides/feature-parity-testing.md"]},{text:"Referanslar",children:["/tr/references/local-development.md","/tr/references/keypairs-and-wallets.md","/tr/references/basic-transactions.md","/tr/references/accounts.md","/tr/references/programs.md","/tr/references/token.md","/tr/references/staking.md","/tr/references/nfts.md","/tr/references/offline-transactions.md","/tr/references/name-service.md"]}]}},"/kr/":{selectLanguageName:"\uD55C\uAD6D\uC5B4",navbar:[{text:"Contribute",link:"https://github.com/solana-developers/solana-cookbook"},{text:"Integrations",link:"/integrations"}],sidebar:{"/":[{text:"Getting Started",children:["/kr/","/kr/getting-started/installation.md"]},{text:"Core Concepts",children:["/kr/core-concepts/accounts.md","/kr/core-concepts/programs.md","/kr/core-concepts/transactions.md","/kr/core-concepts/pdas.md"]},{text:"Guides",children:["/kr/guides/get-program-accounts.md","/kr/guides/serialization.md","/kr/guides/data-migration.md","/kr/guides/account-maps.md","/kr/guides/retrying-transactions.md","/kr/guides/debugging-solana-programs.md","/kr/guides/feature-parity-testing.md"]},{text:"References",children:["/kr/references/local-development.md","/kr/references/keypairs-and-wallets.md","/kr/references/basic-transactions.md","/kr/references/accounts.md","/kr/references/programs.md","/kr/references/token.md","/kr/references/staking.md","/kr/references/nfts.md","/kr/references/offline-transactions.md","/kr/references/name-service.md"]}],"/integrations":[{text:"Integrations",children:["/integrations","/integrations/serum.md","/integrations/pyth.md","/integrations/switchboard.md","/integrations/mango.md","/integrations/strata.md","/integrations/web3auth.md","/integrations/react-native.md","/integrations/jupiter.md"]}]}}},navbar:[],darkMode:!0,repo:null,selectLanguageText:"Languages",selectLanguageAriaLabel:"Select language",sidebar:"auto",sidebarDepth:2,editLink:!0,editLinkText:"Edit this page",lastUpdated:!0,lastUpdatedText:"Last Updated",contributorsText:"Contributors",notFound:["There's nothing here.","How did we get here?","That's a Four-Oh-Four.","Looks like we've got some broken links."],backToHome:"Take me home",openInNewWindow:"open in new window",toggleDarkMode:"toggle dark mode",toggleSidebar:"toggle sidebar"},Dc=Ee(Hm),Bm=()=>Dc;sl.webpackHot&&(__VUE_HMR_RUNTIME__.updateThemeData=e=>{Dc.value=e});const Rc=Symbol(""),Um=()=>{const e=Re(Rc);if(!e)throw new Error("useThemeLocaleData() is called without provider.");return e},Km=(e,t)=>{var n;return xe(xe({},e),(n=e.locales)===null||n===void 0?void 0:n[t])};var qm=Tt(({app:e})=>{const t=Bm(),n=e._context.provides[Fi],r=_e(()=>Km(t.value,n.value));e.provide(Rc,r),Object.defineProperties(e.config.globalProperties,{$theme:{get(){return t.value}},$themeLocale:{get(){return r.value}}})});const Wm=ze({props:{type:{type:String,required:!1,default:"tip"},text:{type:String,required:!1,default:""},vertical:{type:String,required:!1,default:void 0}},setup(e){return(t,n)=>(nr(),Ti("span",{class:wt(["badge",e.type]),style:Yr({verticalAlign:e.vertical})},[jr(t.$slots,"default",{},()=>[Li(xu(e.text),1)])],6))}});var $m=ze({name:"CodeGroup",setup(e,{slots:t}){const n=Ee(-1),r=Ee([]),l=(o=n.value)=>{o{o>0?n.value=o-1:n.value=r.value.length-1,r.value[n.value].focus()},a=(o,s)=>{o.key===" "||o.key==="Enter"?(o.preventDefault(),n.value=s):o.key==="ArrowRight"?(o.preventDefault(),l(s)):o.key==="ArrowLeft"&&(o.preventDefault(),i(s))};return()=>{var o;const s=(((o=t.default)===null||o===void 0?void 0:o.call(t))||[]).filter(u=>u.type.name==="CodeGroupItem").map(u=>(u.props===null&&(u.props={}),u));return s.length===0?null:(n.value<0||n.value>s.length-1?(n.value=s.findIndex(u=>u.props.active===""||u.props.active===!0),n.value===-1&&(n.value=0)):s.forEach((u,d)=>{u.props.active=d===n.value}),ee("div",{class:"code-group"},[ee("div",{class:"code-group__nav"},ee("ul",{class:"code-group__ul"},s.map((u,d)=>{const m=d===n.value;return ee("li",{class:"code-group__li"},ee("button",{ref:h=>{h&&(r.value[d]=h)},class:{"code-group__nav-tab":!0,"code-group__nav-tab-active":m},ariaPressed:m,ariaExpanded:m,onClick:()=>n.value=d,onKeydown:h=>a(h,d)},u.props.title))}))),s]))}}});const Gm=["aria-selected"],Jm=ze({name:"CodeGroupItem"}),Ym=ze(Lt(xe({},Jm),{props:{title:{type:String,required:!0},active:{type:Boolean,required:!1,default:!1}},setup(e){return(t,n)=>(nr(),Ti("div",{class:wt(["code-group-item",{"code-group-item__active":e.active}]),"aria-selected":e.active},[jr(t.$slots,"default")],10,Gm))}}));function Ic(e){return Ku()?(qu(e),!0):!1}const ir=typeof window!="undefined",Qm=e=>typeof e=="string",yl=()=>{};function Zm(e,t){function n(...r){e(()=>t.apply(this,r),{fn:t,thisArg:this,args:r})}return n}const Xm=e=>e();var qa=Object.getOwnPropertySymbols,ep=Object.prototype.hasOwnProperty,tp=Object.prototype.propertyIsEnumerable,np=(e,t)=>{var n={};for(var r in e)ep.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&qa)for(var r of qa(e))t.indexOf(r)<0&&tp.call(e,r)&&(n[r]=e[r]);return n};function rp(e,t,n={}){const r=n,{eventFilter:l=Xm}=r,i=np(r,["eventFilter"]);return et(e,Zm(l,t),i)}function lp(e,t=!0){rc()?tt(e):t?e():Ei(e)}const Hr=ir?window:void 0;ir&&window.document;ir&&window.navigator;ir&&window.location;function ip(...e){let t,n,r,l;if(Qm(e[0])?([n,r,l]=e,t=Hr):[t,n,r,l]=e,!t)return yl;let i=yl;const a=et(()=>Bt(t),s=>{i(),s&&(s.addEventListener(n,r,l),i=()=>{s.removeEventListener(n,r,l),i=yl})},{immediate:!0,flush:"post"}),o=()=>{a(),i()};return Ic(o),o}function ap(e,t={}){const{window:n=Hr}=t;let r;const l=Ee(!1),i=()=>{!n||(r||(r=n.matchMedia(e)),l.value=r.matches)};return lp(()=>{i(),r&&("addEventListener"in r?r.addEventListener("change",i):r.addListener(i),Ic(()=>{"removeEventListener"in i?r.removeEventListener("change",i):r.removeListener(i)}))}),l}const Wl=typeof globalThis!="undefined"?globalThis:typeof window!="undefined"?window:typeof global!="undefined"?global:typeof self!="undefined"?self:{},$l="__vueuse_ssr_handlers__";Wl[$l]=Wl[$l]||{};const op=Wl[$l];function sp(e,t){return op[e]||t}function cp(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"||Array.isArray(e)?"object":Number.isNaN(e)?"any":"number"}const up={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))}};function dp(e,t,n,r={}){var l;const{flush:i="pre",deep:a=!0,listenToStorageChanges:o=!0,writeDefaults:s=!0,shallow:u,window:d=Hr,eventFilter:m,onError:h=w=>{console.error(w)}}=r,b=Bt(t),g=cp(b),_=(u?As:Ee)(t),f=(l=r.serializer)!=null?l:up[g];if(!n)try{n=sp("getDefaultStorage",()=>{var w;return(w=Hr)==null?void 0:w.localStorage})()}catch(w){h(w)}function k(w){if(!(!n||w&&w.key!==e))try{const P=w?w.newValue:n.getItem(e);P==null?(_.value=b,s&&b!==null&&n.setItem(e,f.write(b))):typeof P!="string"?_.value=P:_.value=f.read(P)}catch(P){h(P)}}return k(),d&&o&&ip(d,"storage",w=>setTimeout(()=>k(w),0)),n&&rp(_,()=>{try{_.value==null?n.removeItem(e):n.setItem(e,f.write(_.value))}catch(w){h(w)}},{flush:i,deep:a,eventFilter:m}),_}function hp(e){return ap("(prefers-color-scheme: dark)",e)}var Wa,$a;ir&&(window==null?void 0:window.navigator)&&((Wa=window==null?void 0:window.navigator)==null?void 0:Wa.platform)&&/iP(ad|hone|od)/.test(($a=window==null?void 0:window.navigator)==null?void 0:$a.platform);var gp=Object.defineProperty,Ga=Object.getOwnPropertySymbols,mp=Object.prototype.hasOwnProperty,pp=Object.prototype.propertyIsEnumerable,Ja=(e,t,n)=>t in e?gp(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,vp=(e,t)=>{for(var n in t||(t={}))mp.call(t,n)&&Ja(e,n,t[n]);if(Ga)for(var n of Ga(t))pp.call(t,n)&&Ja(e,n,t[n]);return e};const fp={top:0,left:0,bottom:0,right:0,height:0,width:0};vp({text:""},fp);const Cc=Symbol(""),J_=()=>{const e=Re(Cc);if(!e)throw new Error("useDarkMode() is called without provider.");return e},_p=()=>{const e=jc(),t=hp(),n=dp("vuepress-color-scheme","auto"),r=_e({get(){return e.value.darkMode?n.value==="auto"?t.value:n.value==="dark":!1},set(l){l===t.value?n.value="auto":n.value=l?"dark":"light"}});Ut(Cc,r),bp(r)},bp=e=>{const t=(n=e.value)=>{const r=window==null?void 0:window.document.querySelector("html");r==null||r.classList.toggle("dark",n)};tt(()=>{et(e,t,{immediate:!0})}),Oi(()=>t())},xc=(...e)=>{const n=rr().resolve(...e),r=n.matched[n.matched.length-1];if(!(r!=null&&r.redirect))return n;const{redirect:l}=r,i=ae(l)?l(n):l,a=be(i)?{path:i}:i;return xc(xe({hash:n.hash,query:n.query,params:n.params},a))},kp=e=>{const t=xc(e);return{text:t.meta.title||e,link:t.name==="404"?e:t.fullPath}};let El=null,Pn=null;const yp={wait:()=>El,pending:()=>{El=new Promise(e=>Pn=e)},resolve:()=>{Pn==null||Pn(),El=null,Pn=null}},Ep=()=>yp,Vc=Symbol("sidebarItems"),Y_=()=>{const e=Re(Vc);if(!e)throw new Error("useSidebarItems() is called without provider.");return e},wp=()=>{const e=jc(),t=hm(),n=_e(()=>Pp(t.value,e.value));Ut(Vc,n)},Pp=(e,t)=>{var n,r,l,i;const a=(r=(n=e.sidebar)!==null&&n!==void 0?n:t.sidebar)!==null&&r!==void 0?r:"auto",o=(i=(l=e.sidebarDepth)!==null&&l!==void 0?l:t.sidebarDepth)!==null&&i!==void 0?i:2;return e.home||a===!1?[]:a==="auto"?Op(o):te(a)?Fc(a,o):Tc(a)?Ap(a,o):[]},Sp=(e,t)=>({text:e.title,link:`#${e.slug}`,children:zi(e.children,t)}),zi=(e,t)=>t>0?e.map(n=>Sp(n,t-1)):[],Op=e=>{const t=lr();return[{text:t.value.title,children:zi(t.value.headers,e)}]},Fc=(e,t)=>{const n=Vi(),r=lr(),l=i=>{var a;let o;if(be(i)?o=kp(i):o=i,o.children)return Lt(xe({},o),{children:o.children.map(s=>l(s))});if(o.link===n.path){const s=((a=r.value.headers[0])===null||a===void 0?void 0:a.level)===1?r.value.headers[0].children:r.value.headers;return Lt(xe({},o),{children:zi(s,t)})}return o};return e.map(i=>l(i))},Ap=(e,t)=>{var n;const r=Vi(),l=Lc(e,r.path),i=(n=e[l])!==null&&n!==void 0?n:[];return Fc(i,t)},jc=()=>Um();var Tp=Tt(({app:e,router:t})=>{e.component("Badge",Wm),e.component("CodeGroup",$m),e.component("CodeGroupItem",Ym),e.component("NavbarSearch",()=>{const r=e.component("Docsearch")||e.component("SearchBox");return r?ee(r):null});const n=t.options.scrollBehavior;t.options.scrollBehavior=async(...r)=>(await Ep().wait(),n(...r))});const Lp=e=>{if(window.dataLayer&&window.gtag)return;const t=document.createElement("script");t.src=`https://www.googletagmanager.com/gtag/js?id=${e}`,t.async=!0,document.head.appendChild(t),window.dataLayer=window.dataLayer||[],window.gtag=function(){dataLayer.push(arguments)},gtag("js",new Date),gtag("config",e)},Dp="UA-213843360-1";var Rp=Tt(()=>{Lp(Dp)});const Ip=({input:e,hotKeys:t})=>{const n=r=>{!e.value||t.value.length===0||r.target===document.body&&t.value.includes(r.key)&&(e.value.focus(),r.preventDefault())};tt(()=>{document.addEventListener("keydown",n)}),nl(()=>{document.removeEventListener("keydown",n)})},Cp=[{title:"Cooking with Solana",headers:[{level:2,title:"Contributing",slug:"contributing",children:[]},{level:2,title:"How to Read the Cookbook",slug:"how-to-read-the-cookbook",children:[]}],path:"/",pathLocale:"/",extraFields:[]},{title:"Libro de recetas de Solana",headers:[{level:2,title:"Contribuyendo",slug:"contribuyendo",children:[]},{level:2,title:"Como Leer el Cookbook",slug:"como-leer-el-cookbook",children:[]}],path:"/es/",pathLocale:"/es/",extraFields:[]},{title:"Accounts",headers:[{level:2,title:"Facts",slug:"facts",children:[]},{level:2,title:"Deep Dive",slug:"deep-dive",children:[{level:3,title:"Account Model",slug:"account-model",children:[]},{level:3,title:"Rent",slug:"rent",children:[]}]},{level:2,title:"Other Resources",slug:"other-resources",children:[{level:3,title:"Credit",slug:"credit",children:[]}]}],path:"/core-concepts/accounts.html",pathLocale:"/",extraFields:[]},{title:"Program Derived Addresses (PDAs)",headers:[{level:2,title:"Facts",slug:"facts",children:[]},{level:2,title:"Deep Dive",slug:"deep-dive",children:[{level:3,title:"Generating PDAs",slug:"generating-pdas",children:[]},{level:3,title:"Interacting with PDAs",slug:"interacting-with-pdas",children:[]}]},{level:2,title:"Other Resources",slug:"other-resources",children:[]}],path:"/core-concepts/pdas.html",pathLocale:"/",extraFields:[]},{title:"Programs",headers:[{level:2,title:"Facts",slug:"facts",children:[]},{level:2,title:"Deep Dive",slug:"deep-dive",children:[{level:3,title:"Native Programs & The Solana Program Library (SPL)",slug:"native-programs-the-solana-program-library-spl",children:[]},{level:3,title:"Writing Programs",slug:"writing-programs",children:[]},{level:3,title:"Deploying Programs",slug:"deploying-programs",children:[]}]},{level:2,title:"Other Resources",slug:"other-resources",children:[]}],path:"/core-concepts/programs.html",pathLocale:"/",extraFields:[]},{title:"Transactions",headers:[{level:2,title:"Facts",slug:"facts",children:[]},{level:2,title:"Deep Dive",slug:"deep-dive",children:[{level:3,title:"Fees",slug:"fees",children:[]}]},{level:2,title:"Other Resources",slug:"other-resources",children:[]}],path:"/core-concepts/transactions.html",pathLocale:"/",extraFields:[]},{title:"Solana Cookbook",headers:[{level:2,title:"Contribution",slug:"contribution",children:[]},{level:2,title:"Comment lire le Cookbook",slug:"comment-lire-le-cookbook",children:[]}],path:"/fr/",pathLocale:"/fr/",extraFields:[]},{title:"Installation",headers:[{level:2,title:"Install Web3.js",slug:"install-web3-js",children:[{level:3,title:"Web3.js",slug:"web3-js",children:[]},{level:3,title:"SPL-Token",slug:"spl-token",children:[]},{level:3,title:"Wallet-Adapter",slug:"wallet-adapter",children:[]}]},{level:2,title:"Install Rust",slug:"install-rust",children:[]},{level:2,title:"Install CLI",slug:"install-cli",children:[{level:3,title:"macOS & Linux",slug:"macos-linux",children:[]},{level:3,title:"Windows",slug:"windows",children:[]},{level:3,title:"Build From Source",slug:"build-from-source",children:[]}]}],path:"/getting-started/installation.html",pathLocale:"/",extraFields:[]},{title:"Kochen mit Solana",headers:[{level:2,title:"Beitragen",slug:"beitragen",children:[]},{level:2,title:"Wie man das Kochbuch liest",slug:"wie-man-das-kochbuch-liest",children:[]}],path:"/de/",pathLocale:"/de/",extraFields:[]},{title:"Account Maps",headers:[{level:2,title:"Deriving PDAs",slug:"deriving-pdas",children:[]},{level:2,title:"Single Map Account",slug:"single-map-account",children:[]}],path:"/guides/account-maps.html",pathLocale:"/",extraFields:[]},{title:"Migrating Program Data Accounts",headers:[{level:2,title:"How can you migrate a program's data accounts?",slug:"how-can-you-migrate-a-program-s-data-accounts",children:[]},{level:2,title:"Scenario",slug:"scenario",children:[]},{level:2,title:"Upgrading the Account",slug:"upgrading-the-account",children:[{level:3,title:"1. Add account conversion logic",slug:"_1-add-account-conversion-logic",children:[]}]},{level:2,title:"Resources",slug:"resources",children:[]}],path:"/guides/data-migration.html",pathLocale:"/",extraFields:[]},{title:"Debugging Solana Programs",headers:[{level:2,title:"Facts",slug:"facts",children:[]},{level:2,title:"Runtime Testing and Debugging in editor",slug:"runtime-testing-and-debugging-in-editor",children:[]},{level:2,title:"Local Validator Node Testing in editor",slug:"local-validator-node-testing-in-editor",children:[]},{level:2,title:"Local Validator Node Testing from Client Apps",slug:"local-validator-node-testing-from-client-apps",children:[]},{level:2,title:"Resources",slug:"resources",children:[]}],path:"/guides/debugging-solana-programs.html",pathLocale:"/",extraFields:[]},{title:"Feature Parity Testing",headers:[{level:2,title:"Facts",slug:"facts",children:[]},{level:2,title:"Scenario",slug:"scenario",children:[]},{level:2,title:"Feature Status",slug:"feature-status",children:[]},{level:2,title:"Parity Testing",slug:"parity-testing",children:[]},{level:2,title:"Simple Demonstration",slug:"simple-demonstration",children:[{level:3,title:"All features activated",slug:"all-features-activated",children:[]},{level:3,title:"Selective features deactivated",slug:"selective-features-deactivated",children:[]}]},{level:2,title:"Full Parity Testing",slug:"full-parity-testing",children:[]},{level:2,title:"Full Parity Testing Programmatically",slug:"full-parity-testing-programmatically",children:[]},{level:2,title:"Resources",slug:"resources",children:[]}],path:"/guides/feature-parity-testing.html",pathLocale:"/",extraFields:[]},{title:"Get Program Accounts",headers:[{level:2,title:"Facts",slug:"facts",children:[]},{level:2,title:"Deep Dive",slug:"deep-dive",children:[{level:3,title:"filters",slug:"filters",children:[]},{level:3,title:"dataSlice",slug:"dataslice",children:[]}]},{level:2,title:"Other Resources",slug:"other-resources",children:[]}],path:"/guides/get-program-accounts.html",pathLocale:"/",extraFields:[]},{title:"Retrying Transactions",headers:[{level:2,title:"Facts",slug:"facts",children:[]},{level:2,title:"The Journey of a Transaction",slug:"the-journey-of-a-transaction",children:[{level:3,title:"How Clients Submit Transactions",slug:"how-clients-submit-transactions",children:[]},{level:3,title:"How RPC Nodes Broadcast Transactions",slug:"how-rpc-nodes-broadcast-transactions",children:[]}]},{level:2,title:"How Transactions Get Dropped",slug:"how-transactions-get-dropped",children:[{level:3,title:"Before a transaction is processed",slug:"before-a-transaction-is-processed",children:[]},{level:3,title:"After a transaction is processed and before it is finalized",slug:"after-a-transaction-is-processed-and-before-it-is-finalized",children:[]}]},{level:2,title:"Handling Dropped Transactions",slug:"handling-dropped-transactions",children:[{level:3,title:"An In-Depth Look at sendTransaction",slug:"an-in-depth-look-at-sendtransaction",children:[]}]},{level:2,title:"Customizing Rebroadcast Logic",slug:"customizing-rebroadcast-logic",children:[{level:3,title:"The Cost of Skipping Preflight",slug:"the-cost-of-skipping-preflight",children:[]},{level:3,title:"When to Re-Sign Transactions",slug:"when-to-re-sign-transactions",children:[]}]},{level:2,title:"Acknowledgements",slug:"acknowledgements",children:[]}],path:"/guides/retrying-transactions.html",pathLocale:"/",extraFields:[]},{title:"Serializing Data",headers:[{level:2,title:"Setting up for Borsh Serialization",slug:"setting-up-for-borsh-serialization",children:[]},{level:2,title:"How to serialize instruction data on the client",slug:"how-to-serialize-instruction-data-on-the-client",children:[]},{level:2,title:"How to deserialize instruction data on the program",slug:"how-to-deserialize-instruction-data-on-the-program",children:[]},{level:2,title:"How to serialize account data on the program",slug:"how-to-serialize-account-data-on-the-program",children:[{level:3,title:"Pack",slug:"pack",children:[]},{level:3,title:"Serialization/Deserialization",slug:"serialization-deserialization",children:[]},{level:3,title:"Usage",slug:"usage",children:[]}]},{level:2,title:"How to deserialize account data on the client",slug:"how-to-deserialize-account-data-on-the-client",children:[]},{level:2,title:"Common Solana TS/JS Mappings",slug:"common-solana-ts-js-mappings",children:[]},{level:2,title:"Advanced Constructs",slug:"advanced-constructs",children:[{level:3,title:"COption",slug:"coption",children:[]}]},{level:2,title:"Resources",slug:"resources",children:[]}],path:"/guides/serialization.html",pathLocale:"/",extraFields:[]},{title:"Versioned Transactions",headers:[{level:2,title:"Facts",slug:"facts",children:[]},{level:2,title:"Legacy Transaction",slug:"legacy-transaction",children:[]},{level:2,title:"Legacy Message",slug:"legacy-message",children:[{level:3,title:"Header",slug:"header",children:[]},{level:3,title:"Compact-array of account addresses",slug:"compact-array-of-account-addresses",children:[]},{level:3,title:"Compact array of instructions",slug:"compact-array-of-instructions",children:[]}]},{level:2,title:"Issues with Legacy Transactions",slug:"issues-with-legacy-transactions",children:[]},{level:2,title:"Address Lookup Tables (LUT)",slug:"address-lookup-tables-lut",children:[]},{level:2,title:"Versioned Transactions: TransactionV0",slug:"versioned-transactions-transactionv0",children:[]},{level:2,title:"MessageV0",slug:"messagev0",children:[{level:3,title:"Compact array of address table lookups",slug:"compact-array-of-address-table-lookups",children:[]},{level:3,title:"Compact array of instructions",slug:"compact-array-of-instructions-1",children:[]}]},{level:2,title:"RPC Changes",slug:"rpc-changes",children:[]},{level:2,title:"Other Resources",slug:"other-resources",children:[]},{level:2,title:"References",slug:"references",children:[]}],path:"/guides/versioned-transactions.html",pathLocale:"/",extraFields:[]},{title:"Buku Panduan Solana",headers:[{level:2,title:"Cara untuk berkontribusi",slug:"cara-untuk-berkontribusi",children:[]},{level:2,title:"Cara untuk membaca Buku Panduan",slug:"cara-untuk-membaca-buku-panduan",children:[]}],path:"/id/",pathLocale:"/id/",extraFields:[]},{title:"Cooking with Solana",headers:[{level:2,title:"Contributing",slug:"contributing",children:[]},{level:2,title:"How to Read the Cookbook",slug:"how-to-read-the-cookbook",children:[]}],path:"/kr/",pathLocale:"/kr/",extraFields:[]},{title:"Getting Started",headers:[{level:2,title:"Composability is Key",slug:"composability-is-key",children:[]},{level:2,title:"Contributing",slug:"contributing",children:[]}],path:"/integrations/",pathLocale:"/",extraFields:[]},{title:"Jupiter",headers:[{level:3,title:"Installation",slug:"installation",children:[]},{level:3,title:"Fetching Token list from Jupiter",slug:"fetching-token-list-from-jupiter",children:[]},{level:3,title:"Loading the Jupiter instance",slug:"loading-the-jupiter-instance",children:[]},{level:3,title:"Getting the RouteMap",slug:"getting-the-routemap",children:[]},{level:3,title:"Getting the routes for given Input and Output token",slug:"getting-the-routes-for-given-input-and-output-token",children:[]},{level:3,title:"Execute the Token Swap",slug:"execute-the-token-swap",children:[]},{level:2,title:"How to use Jupiter in a React Application",slug:"how-to-use-jupiter-in-a-react-application",children:[{level:3,title:"Installation",slug:"installation-1",children:[]},{level:3,title:"Adding the Provider",slug:"adding-the-provider",children:[]},{level:3,title:"Fetching the List of Tokens",slug:"fetching-the-list-of-tokens",children:[]},{level:3,title:"Setting up the State",slug:"setting-up-the-state",children:[]},{level:3,title:"Using the useJupiter react hook",slug:"using-the-usejupiter-react-hook",children:[]},{level:3,title:"Performing the Swap",slug:"performing-the-swap",children:[]}]},{level:2,title:"How to use Jupiter API",slug:"how-to-use-jupiter-api",children:[{level:3,title:"Installation",slug:"installation-2",children:[]},{level:3,title:"Getting the Route Map",slug:"getting-the-route-map",children:[]},{level:3,title:"Getting the Serialized Transaction to perform Swap",slug:"getting-the-serialized-transaction-to-perform-swap",children:[]},{level:3,title:"Executing the Swap Transaction",slug:"executing-the-swap-transaction",children:[]}]},{level:2,title:"Other Resources",slug:"other-resources",children:[]}],path:"/integrations/jupiter.html",pathLocale:"/",extraFields:[]},{title:"Mango Markets",headers:[{level:2,title:"How to get a Mango Group",slug:"how-to-get-a-mango-group",children:[]},{level:2,title:"How to create a Mango Account",slug:"how-to-create-a-mango-account",children:[]},{level:2,title:"How to deposit USDC into a Mango Account",slug:"how-to-deposit-usdc-into-a-mango-account",children:[]},{level:2,title:"How to place a spot order",slug:"how-to-place-a-spot-order",children:[]},{level:2,title:"How to load bids",slug:"how-to-load-bids",children:[]},{level:2,title:"How to load asks",slug:"how-to-load-asks",children:[]},{level:2,title:"Other Resources",slug:"other-resources",children:[]}],path:"/integrations/mango.html",pathLocale:"/",extraFields:[]},{title:"ORAO VRF",headers:[{level:2,title:"Basic usage scenario",slug:"basic-usage-scenario",children:[]},{level:2,title:"SDKs",slug:"sdks",children:[]},{level:2,title:"Anatomy of a randomness request",slug:"anatomy-of-a-randomness-request",children:[]},{level:2,title:"Anatomy of a VRF configuration",slug:"anatomy-of-a-vrf-configuration",children:[]},{level:2,title:"Rust-native example",slug:"rust-native-example",children:[{level:3,title:"1. Setup the connection",slug:"_1-setup-the-connection",children:[]},{level:3,title:"2. Create a request",slug:"_2-create-a-request",children:[]},{level:3,title:"3. Wait for fulfillment",slug:"_3-wait-for-fulfillment",children:[]}]},{level:2,title:"CPI Example",slug:"cpi-example",children:[{level:3,title:"1. Create the contract",slug:"_1-create-the-contract",children:[]},{level:3,title:"2. Collect the necessary accounts",slug:"_2-collect-the-necessary-accounts",children:[]},{level:3,title:"3. Perform a CPI call",slug:"_3-perform-a-cpi-call",children:[]},{level:3,title:"4. Use the fulfilled randomness",slug:"_4-use-the-fulfilled-randomness",children:[]}]}],path:"/integrations/orao-vrf.html",pathLocale:"/",extraFields:[]},{title:"Pyth",headers:[{level:2,title:"How to use Pyth in Client",slug:"how-to-use-pyth-in-client",children:[]},{level:2,title:"How to use Pyth in Anchor",slug:"how-to-use-pyth-in-anchor",children:[]},{level:2,title:"Other Resources",slug:"other-resources",children:[]}],path:"/integrations/pyth.html",pathLocale:"/",extraFields:[]},{title:"React Native",headers:[{level:2,title:"How to use @solana/web3.js in a React Native app",slug:"how-to-use-solana-web3-js-in-a-react-native-app",children:[{level:3,title:"Create a new app",slug:"create-a-new-app",children:[]},{level:3,title:"Install dependencies",slug:"install-dependencies",children:[]},{level:3,title:"Patch Babel to use the Hermes transforms",slug:"patch-babel-to-use-the-hermes-transforms",children:[]},{level:3,title:"Update index.js",slug:"update-index-js",children:[]},{level:3,title:"Update App.tsx",slug:"update-app-tsx",children:[]},{level:3,title:"[iOS only] Install cocoapods",slug:"ios-only-install-cocoapods",children:[]},{level:3,title:"Start application",slug:"start-application",children:[]}]},{level:2,title:"Solana DApp Scaffold for React Native",slug:"solana-dapp-scaffold-for-react-native",children:[]},{level:2,title:"Common issues when using crypto libraries in a React Native app",slug:"common-issues-when-using-crypto-libraries-in-a-react-native-app",children:[{level:3,title:"Error: Watchman crawl failed",slug:"error-watchman-crawl-failed",children:[]},{level:3,title:"Error: URL.protocol is not implemented",slug:"error-url-protocol-is-not-implemented",children:[]},{level:3,title:"Error: crypto.getRandomValues() not supported",slug:"error-crypto-getrandomvalues-not-supported",children:[]}]}],path:"/integrations/react-native.html",pathLocale:"/",extraFields:[]},{title:"Serum",headers:[{level:2,title:"How to get a Serum market",slug:"how-to-get-a-serum-market",children:[]},{level:2,title:"How to get Serum order books",slug:"how-to-get-serum-order-books",children:[]},{level:2,title:"How to get current open orders",slug:"how-to-get-current-open-orders",children:[]}],path:"/integrations/serum.html",pathLocale:"/",extraFields:[]},{title:"Strata",headers:[{level:2,title:"How to create a fully managed token",slug:"how-to-create-a-fully-managed-token",children:[]},{level:2,title:"How to buy and sell a token",slug:"how-to-buy-and-sell-a-token",children:[]},{level:2,title:"How to bootstrap liquidity",slug:"how-to-bootstrap-liquidity",children:[]},{level:2,title:"Other Resources",slug:"other-resources",children:[]}],path:"/integrations/strata.html",pathLocale:"/",extraFields:[]},{title:"Switchboard",headers:[{level:2,title:"Data Feeds",slug:"data-feeds",children:[{level:3,title:"Read data from an aggregator feed",slug:"read-data-from-an-aggregator-feed",children:[]},{level:3,title:"Create a new aggregator feed",slug:"create-a-new-aggregator-feed",children:[]},{level:3,title:"Read data from an aggregator feed in program",slug:"read-data-from-an-aggregator-feed-in-program",children:[]},{level:3,title:"How to Create a Feed from the Publisher",slug:"how-to-create-a-feed-from-the-publisher",children:[]}]},{level:2,title:"Oracles",slug:"oracles",children:[{level:3,title:"Create an oracle",slug:"create-an-oracle",children:[]},{level:3,title:"Run an oracle locally",slug:"run-an-oracle-locally",children:[]},{level:3,title:"Oracle Config",slug:"oracle-config",children:[]}]},{level:2,title:"Verifiable Random Function(VRF)",slug:"verifiable-random-function-vrf",children:[{level:3,title:"Reading a VRF account",slug:"reading-a-vrf-account",children:[]},{level:3,title:"Creating a VRF account",slug:"creating-a-vrf-account",children:[]},{level:3,title:"Request Randomness from vrf account",slug:"request-randomness-from-vrf-account",children:[]}]},{level:2,title:"Resources",slug:"resources",children:[{level:3,title:"APIs and Libraries",slug:"apis-and-libraries",children:[]},{level:3,title:"Examples",slug:"examples",children:[]},{level:3,title:"More Information",slug:"more-information",children:[]}]}],path:"/integrations/switchboard.html",pathLocale:"/",extraFields:[]},{title:"web3Auth (Torus Wallet)",headers:[{level:2,title:"What is a wallet?",slug:"what-is-a-wallet",children:[]},{level:2,title:"Social Logins on Solana",slug:"social-logins-on-solana",children:[]},{level:2,title:"Integration Guide",slug:"integration-guide",children:[{level:3,title:"Installing Dependencies",slug:"installing-dependencies",children:[]},{level:3,title:"Import the SDK and initialize",slug:"import-the-sdk-and-initialize",children:[]},{level:3,title:"Trigger user login\u200B",slug:"trigger-user-login\u200B",children:[]},{level:3,title:"Using torus instance to fetch user account detail\u200B",slug:"using-torus-instance-to-fetch-user-account-detail\u200B",children:[]},{level:3,title:"Using Torus Solana API to sign a message.",slug:"using-torus-solana-api-to-sign-a-message",children:[]},{level:3,title:"Using torus Solana API to send a transaction.\u200B",slug:"using-torus-solana-api-to-send-a-transaction-\u200B",children:[]},{level:3,title:"Top-ups\u200B",slug:"top-ups\u200B",children:[]},{level:3,title:"Logout",slug:"logout",children:[]}]},{level:2,title:"Resources",slug:"resources",children:[]}],path:"/integrations/web3auth.html",pathLocale:"/",extraFields:[]},{title:"Accounts",headers:[{level:2,title:"How to create a system account",slug:"how-to-create-a-system-account",children:[]},{level:2,title:"How to calculate account cost",slug:"how-to-calculate-account-cost",children:[]},{level:2,title:"How to create accounts with seeds",slug:"how-to-create-accounts-with-seeds",children:[{level:3,title:"Generate",slug:"generate",children:[]},{level:3,title:"Create",slug:"create",children:[]},{level:3,title:"Transfer",slug:"transfer",children:[]}]},{level:2,title:"How to create PDAs",slug:"how-to-create-pdas",children:[{level:3,title:"Generate a PDA",slug:"generate-a-pda",children:[]},{level:3,title:"Create a PDA",slug:"create-a-pda",children:[]}]},{level:2,title:"How to sign with a PDA",slug:"how-to-sign-with-a-pda",children:[{level:3,title:"Program",slug:"program-1",children:[]},{level:3,title:"Client",slug:"client-1",children:[]}]},{level:2,title:"How to get program accounts",slug:"how-to-get-program-accounts",children:[]},{level:2,title:"How to close accounts",slug:"how-to-close-accounts",children:[]},{level:2,title:"How to get account balance",slug:"how-to-get-account-balance",children:[]}],path:"/references/accounts.html",pathLocale:"/",extraFields:[]},{title:"Sending Transactions",headers:[{level:2,title:"How to send SOL",slug:"how-to-send-sol",children:[]},{level:2,title:"How to send SPL-Tokens",slug:"how-to-send-spl-tokens",children:[]},{level:2,title:"How to calculate transaction cost",slug:"how-to-calculate-transaction-cost",children:[{level:3,title:"getEstimatedFee",slug:"getestimatedfee",children:[]},{level:3,title:"getFeeForMessage",slug:"getfeeformessage",children:[]}]},{level:2,title:"How to add a memo to a transaction",slug:"how-to-add-a-memo-to-a-transaction",children:[]},{level:2,title:"How to change compute budget, fee, & priority for a transaction",slug:"how-to-change-compute-budget-fee-priority-for-a-transaction",children:[]}],path:"/references/basic-transactions.html",pathLocale:"/",extraFields:[]},{title:"Keypairs and Wallets",headers:[{level:2,title:"How to generate a new Keypair",slug:"how-to-generate-a-new-keypair",children:[]},{level:2,title:"How to restore a Keypair from a secret",slug:"how-to-restore-a-keypair-from-a-secret",children:[]},{level:2,title:"How to verify a Keypair",slug:"how-to-verify-a-keypair",children:[]},{level:2,title:"How to check if a public key has an associated private key",slug:"how-to-check-if-a-public-key-has-an-associated-private-key",children:[]},{level:2,title:"How to generate a mnemonic phrase",slug:"how-to-generate-a-mnemonic-phrase",children:[]},{level:2,title:"How to restore a Keypair from a mnemonic phrase",slug:"how-to-restore-a-keypair-from-a-mnemonic-phrase",children:[]},{level:2,title:"How to generate a vanity address",slug:"how-to-generate-a-vanity-address",children:[]},{level:2,title:"How to sign and verify messages with wallets",slug:"how-to-sign-and-verify-messages-with-wallets",children:[]},{level:2,title:"How to connect to a wallet",slug:"how-to-connect-to-a-wallet",children:[{level:3,title:"React",slug:"react",children:[]},{level:3,title:"Vue",slug:"vue",children:[]},{level:3,title:"Svelte",slug:"svelte",children:[]}]}],path:"/references/keypairs-and-wallets.html",pathLocale:"/",extraFields:[]},{title:"Local Development",headers:[{level:2,title:"Starting a Local Validator",slug:"starting-a-local-validator",children:[]},{level:2,title:"Connecting to Environments",slug:"connecting-to-environments",children:[]},{level:2,title:"Subscribing to Events",slug:"subscribing-to-events",children:[]},{level:2,title:"Getting Test SOL",slug:"getting-test-sol",children:[]},{level:2,title:"Using Mainnet Accounts and Programs",slug:"using-mainnet-accounts-and-programs",children:[{level:3,title:"How to load accounts from mainnet",slug:"how-to-load-accounts-from-mainnet",children:[]},{level:3,title:"How to load programs from mainnet",slug:"how-to-load-programs-from-mainnet",children:[]}]}],path:"/references/local-development.html",pathLocale:"/",extraFields:[]},{title:"Name Service",headers:[{level:2,title:"Name registry",slug:"name-registry",children:[]},{level:2,title:"Resolving SOL domains",slug:"resolving-sol-domains",children:[]},{level:2,title:"Reverse look up",slug:"reverse-look-up",children:[]},{level:2,title:"Subdomain look up",slug:"subdomain-look-up",children:[]},{level:2,title:"Find all the domain names owned by a public key",slug:"find-all-the-domain-names-owned-by-a-public-key",children:[]},{level:2,title:"Resolve a Twitter handle",slug:"resolve-a-twitter-handle",children:[]},{level:2,title:"Reverse look up of a Twitter handle",slug:"reverse-look-up-of-a-twitter-handle",children:[]}],path:"/references/name-service.html",pathLocale:"/",extraFields:[]},{title:"NFTs",headers:[{level:2,title:"How to create an NFT",slug:"how-to-create-an-nft",children:[{level:3,title:"Upload to Arweave",slug:"upload-to-arweave",children:[]},{level:3,title:"Mint the NFT",slug:"mint-the-nft",children:[]}]},{level:2,title:"How to get NFT Metadata",slug:"how-to-get-nft-metadata",children:[]},{level:2,title:"How to get the owner of an NFT",slug:"how-to-get-the-owner-of-an-nft",children:[]},{level:2,title:"How to get NFT Mint Addresses",slug:"how-to-get-nft-mint-addresses",children:[{level:3,title:"Candy Machine V1",slug:"candy-machine-v1",children:[]},{level:3,title:"Candy Machine V2",slug:"candy-machine-v2",children:[]}]},{level:2,title:"How to get all NFTs from a wallet?",slug:"how-to-get-all-nfts-from-a-wallet",children:[]},{level:2,title:"Candy Machine v2",slug:"candy-machine-v2-1",children:[{level:3,title:"How to create a Candy Machine",slug:"how-to-create-a-candy-machine",children:[]},{level:3,title:"How to delete a Candy Machine",slug:"how-to-delete-a-candy-machine",children:[]},{level:3,title:"How to find Candy Machine via authority",slug:"how-to-find-candy-machine-via-authority",children:[]},{level:3,title:"How to find Candy Machine using wallet address",slug:"how-to-find-candy-machine-using-wallet-address",children:[]},{level:3,title:"How to find Candy Machine using its address",slug:"how-to-find-candy-machine-using-its-address",children:[]},{level:3,title:"How to find minted NFTs from a Candy Machine",slug:"how-to-find-minted-nfts-from-a-candy-machine",children:[]},{level:3,title:"How to insert items into a Candy Machine",slug:"how-to-insert-items-into-a-candy-machine",children:[]},{level:3,title:"How to mint an NFT from a Candy Machine",slug:"how-to-mint-an-nft-from-a-candy-machine",children:[]}]}],path:"/references/nfts.html",pathLocale:"/",extraFields:[]},{title:"Sending Offline Transactions",headers:[{level:2,title:"Sign Transaction",slug:"sign-transaction",children:[]},{level:2,title:"Partial Sign Transaction",slug:"partial-sign-transaction",children:[]},{level:2,title:"Durable Nonce",slug:"durable-nonce",children:[{level:3,title:"Create Nonce Account",slug:"create-nonce-account",children:[]},{level:3,title:"Get Nonce Account",slug:"get-nonce-account",children:[]},{level:3,title:"Use Nonce Account",slug:"use-nonce-account",children:[]}]}],path:"/references/offline-transactions.html",pathLocale:"/",extraFields:[]},{title:"Writing Programs",headers:[{level:2,title:"How to transfer SOL in a program",slug:"how-to-transfer-sol-in-a-program",children:[]},{level:2,title:"How to get clock in a program",slug:"how-to-get-clock-in-a-program",children:[{level:3,title:"Passing Clock as an account inside an instruction",slug:"passing-clock-as-an-account-inside-an-instruction",children:[]},{level:3,title:"Accessing Clock directly inside an instruction",slug:"accessing-clock-directly-inside-an-instruction",children:[]}]},{level:2,title:"How to change account size",slug:"how-to-change-account-size",children:[]},{level:2,title:"How to do Cross Program Invocation",slug:"how-to-do-cross-program-invocation",children:[]},{level:2,title:"How to create a PDA",slug:"how-to-create-a-pda",children:[]},{level:2,title:"How to read accounts",slug:"how-to-read-accounts",children:[]},{level:2,title:"How to verify accounts",slug:"how-to-verify-accounts",children:[]},{level:2,title:"How to read multiple instructions from a transaction",slug:"how-to-read-multiple-instructions-from-a-transaction",children:[]}],path:"/references/programs.html",pathLocale:"/",extraFields:[]},{title:"Staking",headers:[{level:2,title:"Get Current Validators",slug:"get-current-validators",children:[]},{level:2,title:"Create Stake Account",slug:"create-stake-account",children:[]},{level:2,title:"Delegate Stake",slug:"delegate-stake",children:[]},{level:2,title:"Get Delegator by Validators",slug:"get-delegator-by-validators",children:[]},{level:2,title:"Deactivate Stake",slug:"deactivate-stake",children:[]},{level:2,title:"Withdraw Stake",slug:"withdraw-stake",children:[]}],path:"/references/staking.html",pathLocale:"/",extraFields:[]},{title:"Interacting with Tokens",headers:[{level:2,title:"What do I need to get started with SPL-Tokens?",slug:"what-do-i-need-to-get-started-with-spl-tokens",children:[]},{level:2,title:"How to create a new Token",slug:"how-to-create-a-new-token",children:[]},{level:2,title:"How to get a token mint",slug:"how-to-get-a-token-mint",children:[]},{level:2,title:"How to create a token account",slug:"how-to-create-a-token-account",children:[]},{level:2,title:"How to get a Token Account",slug:"how-to-get-a-token-account",children:[]},{level:2,title:"How to get a token account's balance",slug:"how-to-get-a-token-account-s-balance",children:[]},{level:2,title:"How to mint tokens",slug:"how-to-mint-tokens",children:[]},{level:2,title:"How to transfer tokens",slug:"how-to-transfer-tokens",children:[]},{level:2,title:"How to burn tokens",slug:"how-to-burn-tokens",children:[]},{level:2,title:"How to close token accounts",slug:"how-to-close-token-accounts",children:[]},{level:2,title:"How to set authority on token accounts or mints",slug:"how-to-set-authority-on-token-accounts-or-mints",children:[]},{level:2,title:"How to approve a token delegate",slug:"how-to-approve-a-token-delegate",children:[]},{level:2,title:"How to revoke a token delegate",slug:"how-to-revoke-a-token-delegate",children:[]},{level:2,title:"How to manage wrapped SOL",slug:"how-to-manage-wrapped-sol",children:[{level:3,title:"Create Token Account",slug:"create-token-account",children:[]},{level:3,title:"Add Balance",slug:"add-balance",children:[]}]},{level:2,title:"How to get all token accounts by owner",slug:"how-to-get-all-token-accounts-by-owner",children:[]}],path:"/references/token.html",pathLocale:"/",extraFields:[]},{title:"Cooking \u0E01\u0E31\u0E1A Solana",headers:[{level:2,title:"\u0E23\u0E48\u0E27\u0E21\u0E01\u0E31\u0E19\u0E40\u0E02\u0E35\u0E22\u0E19",slug:"\u0E23\u0E48\u0E27\u0E21\u0E01\u0E31\u0E19\u0E40\u0E02\u0E35\u0E22\u0E19",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E2D\u0E48\u0E32\u0E19\u0E04\u0E39\u0E48\u0E21\u0E37\u0E2D",slug:"\u0E27\u0E34\u0E18\u0E35\u0E2D\u0E48\u0E32\u0E19\u0E04\u0E39\u0E48\u0E21\u0E37\u0E2D",children:[]}],path:"/th/",pathLocale:"/th/",extraFields:[]},{title:"Solana Cookbook",headers:[{level:2,title:"Contributing (Nas\u0131l Katk\u0131 Verebilirsiniz?)",slug:"contributing-nas\u0131l-katk\u0131-verebilirsiniz",children:[]},{level:2,title:"How to Read the Cookbook (Cookbook Nas\u0131l Okunur?)",slug:"how-to-read-the-cookbook-cookbook-nas\u0131l-okunur",children:[]}],path:"/tr/",pathLocale:"/tr/",extraFields:[]},{title:"Nh\u1EADp m\xF4n Solana",headers:[{level:2,title:"\u0110\xF3ng g\xF3p",slug:"\u0111ong-gop",children:[]},{level:2,title:"C\u1EA5u tr\xFAc c\u1EE7a To\xE0n t\u1EADp Solana",slug:"cau-truc-cua-toan-tap-solana",children:[]},{level:2,title:"L\u1EDDi c\u1EE7a d\u1ECBch gi\u1EA3",slug:"loi-cua-dich-gia",children:[]}],path:"/vi/",pathLocale:"/vi/",extraFields:[]},{title:"Solana\u79D8\u7C4D",headers:[{level:2,title:"\u8D21\u732E\u4EE3\u7801",slug:"\u8D21\u732E\u4EE3\u7801",children:[]},{level:2,title:"\u5982\u4F55\u9605\u8BFBSolana\u79D8\u7C4D",slug:"\u5982\u4F55\u9605\u8BFBsolana\u79D8\u7C4D",children:[]}],path:"/zh/",pathLocale:"/zh/",extraFields:[]},{title:"Cuentas",headers:[{level:2,title:"Hechos",slug:"hechos",children:[]},{level:2,title:"Un vistazo m\xE1s profundo",slug:"un-vistazo-mas-profundo",children:[{level:3,title:"El modelo de una cuenta",slug:"el-modelo-de-una-cuenta",children:[]},{level:3,title:"Renta",slug:"renta",children:[]}]},{level:2,title:"Otros recursos",slug:"otros-recursos",children:[{level:3,title:"Creditos",slug:"creditos",children:[]}]}],path:"/es/core-concepts/accounts.html",pathLocale:"/es/",extraFields:[]},{title:"Direcciones derivadas de programa (PDAs)",headers:[{level:2,title:"Hechos",slug:"hechos",children:[{level:3,title:"Generando PDAs",slug:"generando-pdas",children:[]},{level:3,title:"Interactuando con PDAs",slug:"interactuando-con-pdas",children:[]}]},{level:2,title:"Other Resources",slug:"other-resources",children:[]}],path:"/es/core-concepts/pdas.html",pathLocale:"/es/",extraFields:[]},{title:"Programas",headers:[{level:2,title:"Hechos",slug:"hechos",children:[]},{level:2,title:"Un vistazo m\xE1s profundo",slug:"un-vistazo-mas-profundo",children:[{level:3,title:"Programas nativos & La librer\xEDa de Programas de Solana (SPL)",slug:"programas-nativos-la-libreria-de-programas-de-solana-spl",children:[]},{level:3,title:"Escribiendo programas",slug:"escribiendo-programas",children:[]},{level:3,title:"Desplegando Programas",slug:"desplegando-programas",children:[]}]},{level:2,title:"Other Resources",slug:"other-resources",children:[]}],path:"/es/core-concepts/programs.html",pathLocale:"/es/",extraFields:[]},{title:"Transacciones",headers:[{level:2,title:"Hechos",slug:"hechos",children:[]},{level:2,title:"Un vistazo m\xE1s profundo",slug:"un-vistazo-mas-profundo",children:[{level:3,title:"Cargos (fees)",slug:"cargos-fees",children:[]}]},{level:2,title:"Other Resources",slug:"other-resources",children:[]}],path:"/es/core-concepts/transactions.html",pathLocale:"/es/",extraFields:[]},{title:"Instalaci\xF3n",headers:[{level:2,title:"Instalaci\xF3n de Web3.js",slug:"instalacion-de-web3-js",children:[{level:3,title:"Web3.js",slug:"web3-js",children:[]},{level:3,title:"SPL-Token",slug:"spl-token",children:[]},{level:3,title:"Wallet-Adapter",slug:"wallet-adapter",children:[]}]},{level:2,title:"Instalaci\xF3n de Rust",slug:"instalacion-de-rust",children:[]},{level:2,title:"Instalaci\xF3n de CLI",slug:"instalacion-de-cli",children:[{level:3,title:"macOS & Linux",slug:"macos-linux",children:[]},{level:3,title:"Windows",slug:"windows",children:[]},{level:3,title:"Compilaci\xF3n desde el C\xF3digo Fuente",slug:"compilacion-desde-el-codigo-fuente",children:[]}]}],path:"/es/getting-started/installation.html",pathLocale:"/es/",extraFields:[]},{title:"C\xF3mo usar Map en cuentas",headers:[{level:2,title:"Derivando PDAs",slug:"derivando-pdas",children:[]},{level:2,title:"Map simple",slug:"map-simple",children:[]}],path:"/es/guides/account-maps.html",pathLocale:"/es/",extraFields:[]},{title:"Migrando cuentas de datos de programas",headers:[{level:2,title:"\xBFC\xF3mo se pueden migrar las cuentas de datos de un programa?",slug:"\xBFcomo-se-pueden-migrar-las-cuentas-de-datos-de-un-programa",children:[]},{level:2,title:"Escenario",slug:"escenario",children:[]},{level:2,title:"Actualizando la cuenta",slug:"actualizando-la-cuenta",children:[{level:3,title:"1. Agregar la l\xF3gica de conversi\xF3n de cuenta",slug:"_1-agregar-la-logica-de-conversion-de-cuenta",children:[]}]},{level:2,title:"Resources",slug:"resources",children:[]}],path:"/es/guides/data-migration.html",pathLocale:"/es/",extraFields:[]},{title:"Depurando Programas en Solana",headers:[{level:2,title:"Hechos",slug:"hechos",children:[]},{level:2,title:"Pruebas de tiempo de ejecuci\xF3n y depuraci\xF3n en el editor",slug:"pruebas-de-tiempo-de-ejecucion-y-depuracion-en-el-editor",children:[]},{level:2,title:"Pruebas de nodo de validaci\xF3n local en el editor (Local Validator)",slug:"pruebas-de-nodo-de-validacion-local-en-el-editor-local-validator",children:[]},{level:2,title:"Pruebas de nodos de validadores locales desde aplicaciones cliente",slug:"pruebas-de-nodos-de-validadores-locales-desde-aplicaciones-cliente",children:[]},{level:2,title:"Recursos",slug:"recursos",children:[]}],path:"/es/guides/debugging-solana-programs.html",pathLocale:"/es/",extraFields:[]},{title:"Prueba de paridad de caracter\xEDsticas",headers:[{level:2,title:"Hechos",slug:"hechos",children:[]},{level:2,title:"Escenario",slug:"escenario",children:[]},{level:2,title:"Estado de la funci\xF3n",slug:"estado-de-la-funcion",children:[]},{level:2,title:"Pruebas de paridad",slug:"pruebas-de-paridad",children:[]},{level:2,title:"Demostraci\xF3n sencilla",slug:"demostracion-sencilla",children:[{level:3,title:"Todas las funciones activadas",slug:"todas-las-funciones-activadas",children:[]},{level:3,title:"Funciones selectivas desactivadas",slug:"funciones-selectivas-desactivadas",children:[]}]},{level:2,title:"Pruebas de paridad completa",slug:"pruebas-de-paridad-completa",children:[]},{level:2,title:"Pruebas de paridad completa program\xE1ticamente",slug:"pruebas-de-paridad-completa-programaticamente",children:[]},{level:2,title:"Recursos",slug:"recursos",children:[]}],path:"/es/guides/feature-parity-testing.html",pathLocale:"/es/",extraFields:[]},{title:"Obtener cuentas de programa",headers:[{level:2,title:"Hechos",slug:"hechos",children:[]},{level:2,title:"Un vistazo m\xE1s profundo",slug:"un-vistazo-mas-profundo",children:[{level:3,title:"dataSlice",slug:"dataslice",children:[]}]},{level:2,title:"Otros recursos",slug:"otros-recursos",children:[]}],path:"/es/guides/get-program-accounts.html",pathLocale:"/es/",extraFields:[]},{title:"Reintentando Transacciones",headers:[{level:2,title:"Hechos",slug:"hechos",children:[]},{level:2,title:"El viaje de una transacci\xF3n",slug:"el-viaje-de-una-transaccion",children:[{level:3,title:"C\xF3mo los clientes env\xEDan transacciones",slug:"como-los-clientes-envian-transacciones",children:[]},{level:3,title:"C\xF3mo transmiten las transacciones los nodos RPC",slug:"como-transmiten-las-transacciones-los-nodos-rpc",children:[]}]},{level:2,title:"C\xF3mo se caen las transacciones",slug:"como-se-caen-las-transacciones",children:[{level:3,title:"Antes de que se procese una transacci\xF3n",slug:"antes-de-que-se-procese-una-transaccion",children:[]},{level:3,title:"Despu\xE9s de que se procese una transacci\xF3n y antes de que finalice",slug:"despues-de-que-se-procese-una-transaccion-y-antes-de-que-finalice",children:[]}]},{level:2,title:"Manejo de transacciones descartadas",slug:"manejo-de-transacciones-descartadas",children:[{level:3,title:"Una mirada en profundidad a sendTransaction",slug:"una-mirada-en-profundidad-a-sendtransaction",children:[]}]},{level:2,title:"Personalizaci\xF3n de la l\xF3gica de retransmisi\xF3n",slug:"personalizacion-de-la-logica-de-retransmision",children:[{level:3,title:"El costo de omitir la verificaci\xF3n previa",slug:"el-costo-de-omitir-la-verificacion-previa",children:[]},{level:3,title:"Cu\xE1ndo volver a firmar transacciones",slug:"cuando-volver-a-firmar-transacciones",children:[]}]},{level:2,title:"Agradecimientos",slug:"agradecimientos",children:[]}],path:"/es/guides/retrying-transactions.html",pathLocale:"/es/",extraFields:[]},{title:"Serializando datos",headers:[{level:2,title:"Configuraci\xF3n para la serializaci\xF3n con Borsh",slug:"configuracion-para-la-serializacion-con-borsh",children:[]},{level:2,title:"C\xF3mo serializar datos de instrucciones en el cliente",slug:"como-serializar-datos-de-instrucciones-en-el-cliente",children:[]},{level:2,title:"How to deserialize instruction data on the program",slug:"how-to-deserialize-instruction-data-on-the-program",children:[]},{level:2,title:"C\xF3mo serializar los datos de la cuenta en el programa",slug:"como-serializar-los-datos-de-la-cuenta-en-el-programa",children:[{level:3,title:"Pack",slug:"pack",children:[]},{level:3,title:"Serializaci\xF3n/Deserealizaci\xF3n",slug:"serializacion-deserealizacion",children:[]},{level:3,title:"Usage",slug:"usage",children:[]}]},{level:2,title:"C\xF3mo deserializar los datos de la cuenta en el cliente",slug:"como-deserializar-los-datos-de-la-cuenta-en-el-cliente",children:[]},{level:2,title:"Mappins comunes de Solana TS/JS",slug:"mappins-comunes-de-solana-ts-js",children:[]},{level:2,title:"Construcciones avanzadas",slug:"construcciones-avanzadas",children:[{level:3,title:"COption",slug:"coption",children:[]}]},{level:2,title:"Recursos",slug:"recursos",children:[]}],path:"/es/guides/serialization.html",pathLocale:"/es/",extraFields:[]},{title:"Cuentas",headers:[{level:2,title:"C\xF3mo crear una cuenta del sistema",slug:"como-crear-una-cuenta-del-sistema",children:[]},{level:2,title:"C\xF3mo calcular el costo de una cuenta",slug:"como-calcular-el-costo-de-una-cuenta",children:[]},{level:2,title:"C\xF3mo crear cuentas con semillas",slug:"como-crear-cuentas-con-semillas",children:[{level:3,title:"Generar",slug:"generar",children:[]},{level:3,title:"Crear",slug:"crear",children:[]},{level:3,title:"Transferir",slug:"transferir",children:[]}]},{level:2,title:"C\xF3mo crear PDAs",slug:"como-crear-pdas",children:[{level:3,title:"Generar una cuenta derivada de programa (PDA)",slug:"generar-una-cuenta-derivada-de-programa-pda",children:[]},{level:3,title:"Crear una cuenta derivada de programa (PDA)",slug:"crear-una-cuenta-derivada-de-programa-pda",children:[]}]},{level:2,title:"C\xF3mo firmar con una cuenta derivada de programa (PDA)",slug:"como-firmar-con-una-cuenta-derivada-de-programa-pda",children:[{level:3,title:"Programa",slug:"programa-1",children:[]},{level:3,title:"Cliente",slug:"cliente-1",children:[]}]},{level:2,title:"C\xF3mo obtener cuentas de programas",slug:"como-obtener-cuentas-de-programas",children:[]},{level:2,title:"C\xF3mo cerrar cuentas",slug:"como-cerrar-cuentas",children:[]},{level:2,title:"C\xF3mo obtener el balance de una cuenta",slug:"como-obtener-el-balance-de-una-cuenta",children:[]}],path:"/es/references/accounts.html",pathLocale:"/es/",extraFields:[]},{title:"Enviando transacciones",headers:[{level:2,title:"C\xF3mo enviar SOL",slug:"como-enviar-sol",children:[]},{level:2,title:"How to send SPL-Tokens",slug:"how-to-send-spl-tokens",children:[]},{level:2,title:"C\xF3mo calcular el costo de una transacci\xF3n",slug:"como-calcular-el-costo-de-una-transaccion",children:[{level:3,title:"getEstimatedFee",slug:"getestimatedfee",children:[]},{level:3,title:"getFeeForMessage",slug:"getfeeformessage",children:[]}]},{level:2,title:"C\xF3mo agregar un memo en una transacci\xF3n",slug:"como-agregar-un-memo-en-una-transaccion",children:[]},{level:2,title:"C\xF3mo cambiar el presupuesto de c\xF3mputo para una transacci\xF3n",slug:"como-cambiar-el-presupuesto-de-computo-para-una-transaccion",children:[]}],path:"/es/references/basic-transactions.html",pathLocale:"/es/",extraFields:[]},{title:"Pares de llaves y billeteras",headers:[{level:2,title:"C\xF3mo generar un nuevo Keypair (par de llaves)",slug:"como-generar-un-nuevo-keypair-par-de-llaves",children:[]},{level:2,title:"C\xF3mo restaurar un par de llaves a partir de una llave privada",slug:"como-restaurar-un-par-de-llaves-a-partir-de-una-llave-privada",children:[]},{level:2,title:"C\xF3mo verificar un par de llaves",slug:"como-verificar-un-par-de-llaves",children:[]},{level:2,title:"C\xF3mo comprobar si una llave p\xFAblica tiene una llave privada asociada",slug:"como-comprobar-si-una-llave-publica-tiene-una-llave-privada-asociada",children:[]},{level:2,title:"C\xF3mo generar una frase semilla (mnemonic)",slug:"como-generar-una-frase-semilla-mnemonic",children:[]},{level:2,title:"C\xF3mo restaurar un par de llaves desde una frase semilla",slug:"como-restaurar-un-par-de-llaves-desde-una-frase-semilla",children:[]},{level:2,title:"C\xF3mo generar una direcci\xF3n personalizada",slug:"como-generar-una-direccion-personalizada",children:[]},{level:2,title:"C\xF3mo firmar y verificar mensajes con wallets",slug:"como-firmar-y-verificar-mensajes-con-wallets",children:[]},{level:2,title:"C\xF3mo conectar una wallet",slug:"como-conectar-una-wallet",children:[{level:3,title:"React",slug:"react",children:[]},{level:3,title:"Vue",slug:"vue",children:[]},{level:3,title:"Svelte",slug:"svelte",children:[]}]}],path:"/es/references/keypairs-and-wallets.html",pathLocale:"/es/",extraFields:[]},{title:"Desarrollo en entorno local",headers:[{level:2,title:"Iniciando un validador",slug:"iniciando-un-validador",children:[]},{level:2,title:"Conect\xE1ndote con los diferentes entornos",slug:"conectandote-con-los-diferentes-entornos",children:[]},{level:2,title:"Suscripci\xF3n a eventos",slug:"suscripcion-a-eventos",children:[]},{level:2,title:"Obteniendo SOL para pruebas",slug:"obteniendo-sol-para-pruebas",children:[]},{level:2,title:"Usando cuentas de mainnet y programas",slug:"usando-cuentas-de-mainnet-y-programas",children:[{level:3,title:"C\xF3mo cargar cuentas de mainnet",slug:"como-cargar-cuentas-de-mainnet",children:[]},{level:3,title:"C\xF3mo cargar programas de mainnet",slug:"como-cargar-programas-de-mainnet",children:[]}]}],path:"/es/references/local-development.html",pathLocale:"/es/",extraFields:[]},{title:"Servicio de nombres",headers:[{level:2,title:"Registro de nombres",slug:"registro-de-nombres",children:[]},{level:2,title:"Resolviendo dominios SOL",slug:"resolviendo-dominios-sol",children:[]},{level:2,title:"B\xFAsqueda inversa",slug:"busqueda-inversa",children:[]},{level:2,title:"B\xFAsqueda de subdominios",slug:"busqueda-de-subdominios",children:[]},{level:2,title:"Encuentre todos los nombres de dominio que pertenecen a una clave p\xFAblica",slug:"encuentre-todos-los-nombres-de-dominio-que-pertenecen-a-una-clave-publica",children:[]},{level:2,title:"Resolver un identificador de Twitter",slug:"resolver-un-identificador-de-twitter",children:[]},{level:2,title:"B\xFAsqueda inversa de un identificador de Twitter",slug:"busqueda-inversa-de-un-identificador-de-twitter",children:[]}],path:"/es/references/name-service.html",pathLocale:"/es/",extraFields:[]},{title:"NFTs",headers:[{level:2,title:"\xBFC\xF3mo crear un NFT?",slug:"\xBFcomo-crear-un-nft",children:[{level:3,title:"Subir a Arweave",slug:"subir-a-arweave",children:[]},{level:3,title:"Crear (mint) el NFT",slug:"crear-mint-el-nft",children:[]}]},{level:2,title:"\xBFC\xF3mo obtener metadatos de un NFT?",slug:"\xBFcomo-obtener-metadatos-de-un-nft",children:[]},{level:2,title:"\xBFC\xF3mo obtener el due\xF1o de un NFT?",slug:"\xBFcomo-obtener-el-dueno-de-un-nft",children:[]},{level:2,title:"\xBFC\xF3mo obtener direcciones de mint de NFT?",slug:"\xBFcomo-obtener-direcciones-de-mint-de-nft",children:[{level:3,title:"Candy Machine V1",slug:"candy-machine-v1",children:[]},{level:3,title:"Candy Machine V2",slug:"candy-machine-v2",children:[]}]},{level:2,title:"\xBFC\xF3mo obtener todos los NFT de una billetera?",slug:"\xBFcomo-obtener-todos-los-nft-de-una-billetera",children:[]}],path:"/es/references/nfts.html",pathLocale:"/es/",extraFields:[]},{title:"Enviando transacciones offline",headers:[{level:2,title:"Firmar una transacci\xF3n",slug:"firmar-una-transaccion",children:[]},{level:2,title:"Firma parcial de una transacci\xF3n",slug:"firma-parcial-de-una-transaccion",children:[]},{level:2,title:"Nonce de larga duraci\xF3n (Durable Nonce)",slug:"nonce-de-larga-duracion-durable-nonce",children:[{level:3,title:"Crear una cuenta nonce",slug:"crear-una-cuenta-nonce",children:[]},{level:3,title:"Obtener una cuenta nonce",slug:"obtener-una-cuenta-nonce",children:[]},{level:3,title:"Usar una cuenta nonce",slug:"usar-una-cuenta-nonce",children:[]}]}],path:"/es/references/offline-transactions.html",pathLocale:"/es/",extraFields:[]},{title:"Escribiendo Programas",headers:[{level:2,title:"C\xF3mo transferir SOL a un programa",slug:"como-transferir-sol-a-un-programa",children:[]},{level:2,title:"C\xF3mo obtener una referencia al reloj en un programa",slug:"como-obtener-una-referencia-al-reloj-en-un-programa",children:[{level:3,title:"Enviando Clock c\xF3mo una cuenta dentro de una instrucci\xF3n",slug:"enviando-clock-como-una-cuenta-dentro-de-una-instruccion",children:[]},{level:3,title:"Accediendo al reloj directamente dentro de una instrucci\xF3n",slug:"accediendo-al-reloj-directamente-dentro-de-una-instruccion",children:[]}]},{level:2,title:"C\xF3mo cambiar el tama\xF1o de una cuenta",slug:"como-cambiar-el-tamano-de-una-cuenta",children:[]},{level:2,title:"C\xF3mo hacer una invocaci\xF3n entre programas (Cross Program Invocation)",slug:"como-hacer-una-invocacion-entre-programas-cross-program-invocation",children:[]},{level:2,title:"C\xF3mo crear una cuenta derivada de programa (PDA)",slug:"como-crear-una-cuenta-derivada-de-programa-pda",children:[]},{level:2,title:"C\xF3mo leer cuentas",slug:"como-leer-cuentas",children:[]},{level:2,title:"C\xF3mo verificar cuentas",slug:"como-verificar-cuentas",children:[]},{level:2,title:"C\xF3mo leer m\xFAltiples instrucciones de una transacci\xF3n",slug:"como-leer-multiples-instrucciones-de-una-transaccion",children:[]}],path:"/es/references/programs.html",pathLocale:"/es/",extraFields:[]},{title:"Staking",headers:[{level:2,title:"Obtener los validadores actuales",slug:"obtener-los-validadores-actuales",children:[]},{level:2,title:"\xBFCrear una cuenta de stake?",slug:"\xBFcrear-una-cuenta-de-stake",children:[]},{level:2,title:"Delegar Stake",slug:"delegar-stake",children:[]},{level:2,title:"Obtener el delegador por los validadores",slug:"obtener-el-delegador-por-los-validadores",children:[]},{level:2,title:"Desactivar Stake",slug:"desactivar-stake",children:[]},{level:2,title:"Retirar Stake",slug:"retirar-stake",children:[]}],path:"/es/references/staking.html",pathLocale:"/es/",extraFields:[]},{title:"Interactuando con tokens",headers:[{level:2,title:"\xBFQu\xE9 necesito para comenzar a trabajar con SPL-Tokens?",slug:"\xBFque-necesito-para-comenzar-a-trabajar-con-spl-tokens",children:[]},{level:2,title:"\xBFC\xF3mo crear un nuevo token?",slug:"\xBFcomo-crear-un-nuevo-token",children:[]},{level:2,title:'\xBFC\xF3mo obtener un token "mint"?',slug:"\xBFcomo-obtener-un-token-mint",children:[]},{level:2,title:"\xBFC\xF3mo crear una cuenta de token?",slug:"\xBFcomo-crear-una-cuenta-de-token",children:[]},{level:2,title:"\xBFC\xF3mo obtener un cuenta de token?",slug:"\xBFcomo-obtener-un-cuenta-de-token",children:[]},{level:2,title:"\xBFC\xF3mo obtener el saldo de una cuenta token?",slug:"\xBFcomo-obtener-el-saldo-de-una-cuenta-token",children:[]},{level:2,title:"\xBFC\xF3mo crear (mint) nuevos tokens?",slug:"\xBFcomo-crear-mint-nuevos-tokens",children:[]},{level:2,title:"\xBFC\xF3mo transferir tokens?",slug:"\xBFcomo-transferir-tokens",children:[]},{level:2,title:"\xBFC\xF3mo quemar tokens?",slug:"\xBFcomo-quemar-tokens",children:[]},{level:2,title:"\xBFC\xF3mo cerrar cuentas de token?",slug:"\xBFcomo-cerrar-cuentas-de-token",children:[]},{level:2,title:"\xBFC\xF3mo establecer la autoridad en cuentas de tokens o mints?",slug:"\xBFcomo-establecer-la-autoridad-en-cuentas-de-tokens-o-mints",children:[]},{level:2,title:"\xBFC\xF3mo aprobar una delegaci\xF3n de token?",slug:"\xBFcomo-aprobar-una-delegacion-de-token",children:[]},{level:2,title:"\xBFC\xF3mo revocar una delegaci\xF3n de token?",slug:"\xBFcomo-revocar-una-delegacion-de-token",children:[]},{level:2,title:"\xBFC\xF3mo manejar Wrapped SOL?",slug:"\xBFcomo-manejar-wrapped-sol",children:[{level:3,title:"Crear una cuenta de token",slug:"crear-una-cuenta-de-token",children:[]},{level:3,title:"Agregar saldo",slug:"agregar-saldo",children:[]}]},{level:2,title:"\xBFC\xF3mo obtener todas las cuentas de token por propietario?",slug:"\xBFcomo-obtener-todas-las-cuentas-de-token-por-propietario",children:[]}],path:"/es/references/token.html",pathLocale:"/es/",extraFields:[]},{title:"Comptes",headers:[{level:2,title:"Faits",slug:"faits",children:[]},{level:2,title:"Examen plus approfondi",slug:"examen-plus-approfondi",children:[{level:3,title:"Le mod\xE8le d'un compte",slug:"le-modele-d-un-compte",children:[]},{level:3,title:"Rente",slug:"rente",children:[]}]},{level:2,title:"Autres Ressources",slug:"autres-ressources",children:[{level:3,title:"Cr\xE9dit",slug:"credit",children:[]}]}],path:"/fr/core-concepts/accounts.html",pathLocale:"/fr/",extraFields:[]},{title:"Adresses d\xE9riv\xE9es de programmes (PDAs)",headers:[{level:2,title:"Faits",slug:"faits",children:[]},{level:2,title:"Examen plus approfondi",slug:"examen-plus-approfondi",children:[{level:3,title:"G\xE9n\xE9ration des PDAs",slug:"generation-des-pdas",children:[]},{level:3,title:"Interaction avec les PDAs",slug:"interaction-avec-les-pdas",children:[]}]},{level:2,title:"Autres Ressources",slug:"autres-ressources",children:[]}],path:"/fr/core-concepts/pdas.html",pathLocale:"/fr/",extraFields:[]},{title:"Programmes",headers:[{level:2,title:"Faits",slug:"faits",children:[]},{level:2,title:"Examen plus approfondi",slug:"examen-plus-approfondi",children:[{level:3,title:"Programmes Natifs & La Biblioth\xE8que des Programmes de Solana (SPL)",slug:"programmes-natifs-la-bibliotheque-des-programmes-de-solana-spl",children:[]},{level:3,title:"Ecrire des programmes",slug:"ecrire-des-programmes",children:[]},{level:3,title:"D\xE9ployer des programmes",slug:"deployer-des-programmes",children:[]}]},{level:2,title:"Autres Ressources",slug:"autres-ressources",children:[]}],path:"/fr/core-concepts/programs.html",pathLocale:"/fr/",extraFields:[]},{title:"Transactions",headers:[{level:2,title:"Faits",slug:"faits",children:[]},{level:2,title:"Examen plus approfondi",slug:"examen-plus-approfondi",children:[{level:3,title:"Frais",slug:"frais",children:[]}]},{level:2,title:"Autres Ressources",slug:"autres-ressources",children:[]}],path:"/fr/core-concepts/transactions.html",pathLocale:"/fr/",extraFields:[]},{title:"Installation",headers:[{level:2,title:"Installer Web3.js",slug:"installer-web3-js",children:[{level:3,title:"Web3.js",slug:"web3-js",children:[]},{level:3,title:"SPL-Token",slug:"spl-token",children:[]},{level:3,title:"Wallet-Adapter",slug:"wallet-adapter",children:[]}]},{level:2,title:"Installer Rust",slug:"installer-rust",children:[]},{level:2,title:"Installer CLI",slug:"installer-cli",children:[{level:3,title:"macOS & Linux",slug:"macos-linux",children:[]},{level:3,title:"Windows",slug:"windows",children:[]},{level:3,title:"Compiler \xE0 partir du code source",slug:"compiler-a-partir-du-code-source",children:[]}]}],path:"/fr/getting-started/installation.html",pathLocale:"/fr/",extraFields:[]},{title:"Maps de Comptes",headers:[{level:2,title:"D\xE9rivation des PDAs",slug:"derivation-des-pdas",children:[]},{level:2,title:"Compte de Map Unique",slug:"compte-de-map-unique",children:[]}],path:"/fr/guides/account-maps.html",pathLocale:"/fr/",extraFields:[]},{title:"Migration des Comptes de Donn\xE9es de Programmes",headers:[{level:2,title:"Comment migrer les comptes de donn\xE9es d'un programme ?",slug:"comment-migrer-les-comptes-de-donnees-d-un-programme",children:[]},{level:2,title:"Sc\xE9nario",slug:"scenario",children:[]},{level:2,title:"Mise \xE0 jour du Compte",slug:"mise-a-jour-du-compte",children:[{level:3,title:"1. Ajouter une logique de conversion de compte",slug:"_1-ajouter-une-logique-de-conversion-de-compte",children:[]}]},{level:2,title:"Ressources",slug:"ressources",children:[]}],path:"/fr/guides/data-migration.html",pathLocale:"/fr/",extraFields:[]},{title:"D\xE9bogage des Programmes Solana",headers:[{level:2,title:"Faits",slug:"faits",children:[]},{level:2,title:"Tests d'Ex\xE9cution et D\xE9bogage dans l'\xE9diteur",slug:"tests-d-execution-et-debogage-dans-l-editeur",children:[]},{level:2,title:"Test avec un N\u0153ud de Validation Local dans l'\xE9diteur",slug:"test-avec-un-n\u0153ud-de-validation-local-dans-l-editeur",children:[]},{level:2,title:"Test avec un N\u0153ud de Validation Local \xE0 partir des Applications Clients",slug:"test-avec-un-n\u0153ud-de-validation-local-a-partir-des-applications-clients",children:[]},{level:2,title:"Ressources",slug:"ressources",children:[]}],path:"/fr/guides/debugging-solana-programs.html",pathLocale:"/fr/",extraFields:[]},{title:"Test de Conformit\xE9 des Fonctionnalit\xE9s",headers:[{level:2,title:"Faits",slug:"faits",children:[]},{level:2,title:"Sc\xE9nario",slug:"scenario",children:[]},{level:2,title:"Statut de la Fonctionnalit\xE9",slug:"statut-de-la-fonctionnalite",children:[]},{level:2,title:"Test de Conformit\xE9",slug:"test-de-conformite",children:[]},{level:2,title:"D\xE9monstration Simple",slug:"demonstration-simple",children:[{level:3,title:"Toutes les fonctionnalit\xE9s activ\xE9es",slug:"toutes-les-fonctionnalites-activees",children:[]},{level:3,title:"Fonctionnalit\xE9s s\xE9lectives d\xE9sactiv\xE9es",slug:"fonctionnalites-selectives-desactivees",children:[]}]},{level:2,title:"Tests de Conformit\xE9 Compl\xE8te",slug:"tests-de-conformite-complete",children:[]},{level:2,title:"Test de Conformit\xE9 Compl\xE8te programm\xE9",slug:"test-de-conformite-complete-programme",children:[]},{level:2,title:"Ressources",slug:"ressources",children:[]}],path:"/fr/guides/feature-parity-testing.html",pathLocale:"/fr/",extraFields:[]},{title:"Obtenir les comptes d'un programme",headers:[{level:2,title:"Faits",slug:"faits",children:[]},{level:2,title:"Examen plus approfondi",slug:"examen-plus-approfondi",children:[{level:3,title:"filters",slug:"filters",children:[]},{level:3,title:"dataSlice",slug:"dataslice",children:[]}]},{level:2,title:"Autres Ressources",slug:"autres-ressources",children:[]}],path:"/fr/guides/get-program-accounts.html",pathLocale:"/fr/",extraFields:[]},{title:"R\xE9essayer des Transactions",headers:[{level:2,title:"Faits",slug:"faits",children:[]},{level:2,title:"Le Voyage d'une Transaction",slug:"le-voyage-d-une-transaction",children:[{level:3,title:"Comment Les Clients Soumettent Les Transactions",slug:"comment-les-clients-soumettent-les-transactions",children:[]},{level:3,title:"Comment Les N\u0153uds RPC Transmettent Les Transactions",slug:"comment-les-n\u0153uds-rpc-transmettent-les-transactions",children:[]}]},{level:2,title:"Comment Les Transactions Sont Rejet\xE9es",slug:"comment-les-transactions-sont-rejetees",children:[{level:3,title:"Avant le traitement d'une transaction",slug:"avant-le-traitement-d-une-transaction",children:[]},{level:3,title:"Apr\xE8s le traitement d'une transaction et avant sa finalisation",slug:"apres-le-traitement-d-une-transaction-et-avant-sa-finalisation",children:[]}]},{level:2,title:"Traitement Des Transactions Rejet\xE9es",slug:"traitement-des-transactions-rejetees",children:[{level:3,title:"Un Examen Approfondi De sendTransaction",slug:"un-examen-approfondi-de-sendtransaction",children:[]}]},{level:2,title:"Personnalisation De La logique De Retransmission",slug:"personnalisation-de-la-logique-de-retransmission",children:[{level:3,title:"Le Co\xFBt de l'Omission Du Contr\xF4le Pr\xE9alable",slug:"le-cout-de-l-omission-du-controle-prealable",children:[]},{level:3,title:"Quand Re-Signer Des Transactions",slug:"quand-re-signer-des-transactions",children:[]}]},{level:2,title:"Remerciements",slug:"remerciements",children:[]}],path:"/fr/guides/retrying-transactions.html",pathLocale:"/fr/",extraFields:[]},{title:"S\xE9rialisation des donn\xE9es",headers:[{level:2,title:"Configuration pour la s\xE9rialisation avec Borsh",slug:"configuration-pour-la-serialisation-avec-borsh",children:[]},{level:2,title:"Comment s\xE9rialiser les donn\xE9es d'instruction c\xF4t\xE9 client",slug:"comment-serialiser-les-donnees-d-instruction-cote-client",children:[]},{level:2,title:"Comment d\xE9s\xE9rialiser les donn\xE9es d'instruction dans le programme",slug:"comment-deserialiser-les-donnees-d-instruction-dans-le-programme",children:[]},{level:2,title:"Comment s\xE9rialiser des donn\xE9es du compte dans le programme",slug:"comment-serialiser-des-donnees-du-compte-dans-le-programme",children:[{level:3,title:"Pack",slug:"pack",children:[]},{level:3,title:"S\xE9rialisation/D\xE9s\xE9rialisation",slug:"serialisation-deserialisation",children:[]},{level:3,title:"Utilisation",slug:"utilisation",children:[]}]},{level:2,title:"Comment d\xE9s\xE9rialisation des donn\xE9es du compte c\xF4t\xE9 client",slug:"comment-deserialisation-des-donnees-du-compte-cote-client",children:[]},{level:2,title:"Mappages courants de Solana TS/JS",slug:"mappages-courants-de-solana-ts-js",children:[]},{level:2,title:"Constructions Avanc\xE9es",slug:"constructions-avancees",children:[{level:3,title:"COption",slug:"coption",children:[]}]},{level:2,title:"Ressources",slug:"ressources",children:[]}],path:"/fr/guides/serialization.html",pathLocale:"/fr/",extraFields:[]},{title:"Pour Commencer",headers:[{level:2,title:"La composabilit\xE9 est Essentielle",slug:"la-composabilite-est-essentielle",children:[]},{level:2,title:"Contribution",slug:"contribution",children:[]}],path:"/fr/integrations/",pathLocale:"/fr/",extraFields:[]},{title:"Jupiter",headers:[{level:3,title:"Installation",slug:"installation",children:[]},{level:3,title:"R\xE9cup\xE9ration de la liste des jetons depuis Jupiter",slug:"recuperation-de-la-liste-des-jetons-depuis-jupiter",children:[]},{level:3,title:"Chargement de l'instance Jupiter",slug:"chargement-de-l-instance-jupiter",children:[]},{level:3,title:"Obtenir le Chemin d'Acc\xE8s (RouteMap)",slug:"obtenir-le-chemin-d-acces-routemap",children:[]},{level:3,title:"Obtention des chemins pour un jeton d'Entr\xE9e et de Sortie donn\xE9",slug:"obtention-des-chemins-pour-un-jeton-d-entree-et-de-sortie-donne",children:[]},{level:3,title:"Ex\xE9cuter l'Echange de Jetons",slug:"executer-l-echange-de-jetons",children:[]},{level:2,title:"Comment utiliser Jupiter dans une application React",slug:"comment-utiliser-jupiter-dans-une-application-react",children:[{level:3,title:"Installation",slug:"installation-1",children:[]},{level:3,title:"Ajout du Provider",slug:"ajout-du-provider",children:[]},{level:3,title:"R\xE9cup\xE9ration de la Liste de Jetons",slug:"recuperation-de-la-liste-de-jetons",children:[]},{level:3,title:"Cr\xE9ation de l'\xC9tat",slug:"creation-de-l-etat",children:[]},{level:3,title:"Utilisation du hook react useJupiter",slug:"utilisation-du-hook-react-usejupiter",children:[]},{level:3,title:"Ex\xE9cution de l'Echange",slug:"execution-de-l-echange",children:[]}]},{level:2,title:"Comment utiliser l'API de Jupiter",slug:"comment-utiliser-l-api-de-jupiter",children:[{level:3,title:"Installation",slug:"installation-2",children:[]},{level:3,title:"Obtention du Chemin d'Acc\xE8s",slug:"obtention-du-chemin-d-acces",children:[]},{level:3,title:"Obtention de la Transaction S\xE9rialis\xE9e pour effectuer le Swap",slug:"obtention-de-la-transaction-serialisee-pour-effectuer-le-swap",children:[]},{level:3,title:"Ex\xE9cution de l'Op\xE9ration d'Echange",slug:"execution-de-l-operation-d-echange",children:[]}]},{level:2,title:"Autres Ressources",slug:"autres-ressources",children:[]}],path:"/fr/integrations/jupiter.html",pathLocale:"/fr/",extraFields:[]},{title:"Mango Markets",headers:[{level:2,title:"Comment r\xE9cup\xE9rer un Groupe Mango",slug:"comment-recuperer-un-groupe-mango",children:[]},{level:2,title:"Comment cr\xE9er un Compte Mango",slug:"comment-creer-un-compte-mango",children:[]},{level:2,title:"Comment d\xE9poser des USDC sur un Compte Mango",slug:"comment-deposer-des-usdc-sur-un-compte-mango",children:[]},{level:2,title:"Comment placer un ordre spot",slug:"comment-placer-un-ordre-spot",children:[]},{level:2,title:"Comment charger les offres",slug:"comment-charger-les-offres",children:[]},{level:2,title:"Comment charger les demandes",slug:"comment-charger-les-demandes",children:[]},{level:2,title:"Autres Ressources",slug:"autres-ressources",children:[]}],path:"/fr/integrations/mango.html",pathLocale:"/fr/",extraFields:[]},{title:"Pyth",headers:[{level:2,title:"Comment utiliser Pyth dans le Client",slug:"comment-utiliser-pyth-dans-le-client",children:[]},{level:2,title:"Comment utiliser Pyth dans Anchor",slug:"comment-utiliser-pyth-dans-anchor",children:[]},{level:2,title:"Autres Ressources",slug:"autres-ressources",children:[]}],path:"/fr/integrations/pyth.html",pathLocale:"/fr/",extraFields:[]},{title:"React Native",headers:[{level:2,title:"Comment utiliser @solana/web3.js dans une application React Native",slug:"comment-utiliser-solana-web3-js-dans-une-application-react-native",children:[{level:3,title:"Cr\xE9er une nouvelle application",slug:"creer-une-nouvelle-application",children:[]},{level:3,title:"Installer les d\xE9pendances",slug:"installer-les-dependances",children:[]},{level:3,title:"Corriger Babel pour utiliser les transformations Hermes",slug:"corriger-babel-pour-utiliser-les-transformations-hermes",children:[]},{level:3,title:"Mettre \xE0 jour index.js",slug:"mettre-a-jour-index-js",children:[]},{level:3,title:"Mettre \xE0 jour App.tsx",slug:"mettre-a-jour-app-tsx",children:[]},{level:3,title:"[iOS uniquement] Installer cocoapods",slug:"ios-uniquement-installer-cocoapods",children:[]},{level:3,title:"D\xE9marrer l'application",slug:"demarrer-l-application",children:[]}]},{level:2,title:"Solana DApp Scaffold for React Native",slug:"solana-dapp-scaffold-for-react-native",children:[]},{level:2,title:"Probl\xE8mes courants lors de l'utilisation de biblioth\xE8ques crypto dans une application React Native",slug:"problemes-courants-lors-de-l-utilisation-de-bibliotheques-crypto-dans-une-application-react-native",children:[{level:3,title:"Erreur: Watchman crawl failed",slug:"erreur-watchman-crawl-failed",children:[]},{level:3,title:"Erreur: URL.protocol is not implemented",slug:"erreur-url-protocol-is-not-implemented",children:[]},{level:3,title:"Erreur: crypto.getRandomValues() not supported",slug:"erreur-crypto-getrandomvalues-not-supported",children:[]}]}],path:"/fr/integrations/react-native.html",pathLocale:"/fr/",extraFields:[]},{title:"Serum",headers:[{level:2,title:"Comment obtenir un march\xE9 de Serum",slug:"comment-obtenir-un-marche-de-serum",children:[]},{level:2,title:"Comment obtenir les carnets d'ordres de Serum",slug:"comment-obtenir-les-carnets-d-ordres-de-serum",children:[]},{level:2,title:"Comment obtenir les ordres ouverts actuels",slug:"comment-obtenir-les-ordres-ouverts-actuels",children:[]}],path:"/fr/integrations/serum.html",pathLocale:"/fr/",extraFields:[]},{title:"Strata",headers:[{level:2,title:"Comment cr\xE9er un jeton enti\xE8rement g\xE9r\xE9",slug:"comment-creer-un-jeton-entierement-gere",children:[]},{level:2,title:"Comment acheter et vendre un jeton",slug:"comment-acheter-et-vendre-un-jeton",children:[]},{level:2,title:"Comment initier la liquidit\xE9",slug:"comment-initier-la-liquidite",children:[]},{level:2,title:"Autres Ressources",slug:"autres-ressources",children:[]}],path:"/fr/integrations/strata.html",pathLocale:"/fr/",extraFields:[]},{title:"Switchboard",headers:[{level:2,title:"Flux de Donn\xE9es",slug:"flux-de-donnees",children:[{level:3,title:"Lire les donn\xE9es d'un flux d'agr\xE9gation",slug:"lire-les-donnees-d-un-flux-d-agregation",children:[]},{level:3,title:"Cr\xE9er un nouveau flux d'agr\xE9gation",slug:"creer-un-nouveau-flux-d-agregation",children:[]},{level:3,title:"Lire les donn\xE9es d'un flux d'agr\xE9gation dans un programme",slug:"lire-les-donnees-d-un-flux-d-agregation-dans-un-programme",children:[]},{level:3,title:"Comment Cr\xE9er un Flux \xE0 partir du Publisher",slug:"comment-creer-un-flux-a-partir-du-publisher",children:[]}]},{level:2,title:"Oracles",slug:"oracles",children:[{level:3,title:"Cr\xE9er un oracle",slug:"creer-un-oracle",children:[]},{level:3,title:"Ex\xE9cuter un oracle localement",slug:"executer-un-oracle-localement",children:[]},{level:3,title:"Configuration de l'Oracle",slug:"configuration-de-l-oracle",children:[]}]},{level:2,title:"Fonction Al\xE9atoire V\xE9rifiable(VRF)",slug:"fonction-aleatoire-verifiable-vrf",children:[{level:3,title:"Lire un compte VRF",slug:"lire-un-compte-vrf",children:[]},{level:3,title:"Cr\xE9er un compte VRF",slug:"creer-un-compte-vrf",children:[]},{level:3,title:"Demande de Hasard \xE0 partir d'un compte VRF",slug:"demande-de-hasard-a-partir-d-un-compte-vrf",children:[]}]},{level:2,title:"Ressources",slug:"ressources",children:[{level:3,title:"API et Biblioth\xE8ques",slug:"api-et-bibliotheques",children:[]},{level:3,title:"Exemples",slug:"exemples",children:[]},{level:3,title:"Plus d'Informations",slug:"plus-d-informations",children:[]}]}],path:"/fr/integrations/switchboard.html",pathLocale:"/fr/",extraFields:[]},{title:"web3Auth (Torus Wallet)",headers:[{level:2,title:"Qu'est-ce qu'un portefeuille ?",slug:"qu-est-ce-qu-un-portefeuille",children:[]},{level:2,title:"Connexions Sociales sur Solana",slug:"connexions-sociales-sur-solana",children:[]},{level:2,title:"Guide d'Int\xE9gration",slug:"guide-d-integration",children:[{level:3,title:"Installation des D\xE9pendances",slug:"installation-des-dependances",children:[]},{level:3,title:"Importer le SDK et l'initialiser",slug:"importer-le-sdk-et-l-initialiser",children:[]},{level:3,title:"D\xE9clencher la connexion de l'utilisateur",slug:"declencher-la-connexion-de-l-utilisateur",children:[]},{level:3,title:"Utilisation de l'instance torus pour r\xE9cup\xE9rer les d\xE9tails du compte utilisateur",slug:"utilisation-de-l-instance-torus-pour-recuperer-les-details-du-compte-utilisateur",children:[]},{level:3,title:"Utilisation de l'API Solana de Torus pour signer un message.",slug:"utilisation-de-l-api-solana-de-torus-pour-signer-un-message",children:[]},{level:3,title:"Utilisation de l'API Solana de Torus pour envoyer une transaction.",slug:"utilisation-de-l-api-solana-de-torus-pour-envoyer-une-transaction",children:[]},{level:3,title:"Top-ups\u200B",slug:"top-ups\u200B",children:[]},{level:3,title:"D\xE9connexion",slug:"deconnexion",children:[]}]},{level:2,title:"Ressources",slug:"ressources",children:[]}],path:"/fr/integrations/web3auth.html",pathLocale:"/fr/",extraFields:[]},{title:"Comptes",headers:[{level:2,title:"Comment cr\xE9er un compte de syst\xE8me",slug:"comment-creer-un-compte-de-systeme",children:[]},{level:2,title:"Comment calculer les frais de compte",slug:"comment-calculer-les-frais-de-compte",children:[]},{level:2,title:"Comment cr\xE9er des comptes avec des seeds",slug:"comment-creer-des-comptes-avec-des-seeds",children:[{level:3,title:"G\xE9n\xE9rer",slug:"generer",children:[]},{level:3,title:"Cr\xE9er",slug:"creer",children:[]},{level:3,title:"Transf\xE9rer",slug:"transferer",children:[]}]},{level:2,title:"Comment cr\xE9er des PDAs",slug:"comment-creer-des-pdas",children:[{level:3,title:"G\xE9n\xE9rer un PDA",slug:"generer-un-pda",children:[]},{level:3,title:"Cr\xE9er un PDA",slug:"creer-un-pda",children:[]}]},{level:2,title:"Comment signer avec un PDA",slug:"comment-signer-avec-un-pda",children:[{level:3,title:"Programme",slug:"programme-1",children:[]},{level:3,title:"Client",slug:"client-1",children:[]}]},{level:2,title:"Comment obtenir les comptes du programme",slug:"comment-obtenir-les-comptes-du-programme",children:[]},{level:2,title:"Comment fermer des comptes",slug:"comment-fermer-des-comptes",children:[]},{level:2,title:"Comment obtenir le solde d'un compte",slug:"comment-obtenir-le-solde-d-un-compte",children:[]}],path:"/fr/references/accounts.html",pathLocale:"/fr/",extraFields:[]},{title:"Envoyer des Transactions",headers:[{level:2,title:"Comment envoyer des SOL",slug:"comment-envoyer-des-sol",children:[]},{level:2,title:"Comment envoyer des jetons SPL",slug:"comment-envoyer-des-jetons-spl",children:[]},{level:2,title:"Comment calculer les co\xFBts de transaction",slug:"comment-calculer-les-couts-de-transaction",children:[{level:3,title:"getEstimatedFee",slug:"getestimatedfee",children:[]},{level:3,title:"getFeeForMessage",slug:"getfeeformessage",children:[]}]},{level:2,title:"Comment ajouter un m\xE9mo \xE0 une transaction",slug:"comment-ajouter-un-memo-a-une-transaction",children:[]},{level:2,title:"Comment changer le budget de calcul, les frais, & ; la priorisation d'une transaction",slug:"comment-changer-le-budget-de-calcul-les-frais-amp-la-priorisation-d-une-transaction",children:[]}],path:"/fr/references/basic-transactions.html",pathLocale:"/fr/",extraFields:[]},{title:"Paires de Cl\xE9s et Portefeuilles",headers:[{level:2,title:"Comment g\xE9n\xE9rer une nouvelle Paire de Cl\xE9s",slug:"comment-generer-une-nouvelle-paire-de-cles",children:[]},{level:2,title:"Comment restaurer une Paire de cl\xE9s \xE0 partir d'une cl\xE9 priv\xE9e",slug:"comment-restaurer-une-paire-de-cles-a-partir-d-une-cle-privee",children:[]},{level:2,title:"Comment v\xE9rifier une Paire de Cl\xE9s",slug:"comment-verifier-une-paire-de-cles",children:[]},{level:2,title:"Comment v\xE9rifier si une cl\xE9 publique a une cl\xE9 priv\xE9e associ\xE9e",slug:"comment-verifier-si-une-cle-publique-a-une-cle-privee-associee",children:[]},{level:2,title:"Comment g\xE9n\xE9rer une phrase mn\xE9monique",slug:"comment-generer-une-phrase-mnemonique",children:[]},{level:2,title:"Comment restaurer une paire de cl\xE9s \xE0 partir d'une phrase mn\xE9monique",slug:"comment-restaurer-une-paire-de-cles-a-partir-d-une-phrase-mnemonique",children:[]},{level:2,title:"Comment g\xE9n\xE9rer une adresse personnalis\xE9e",slug:"comment-generer-une-adresse-personnalisee",children:[]},{level:2,title:"Comment signer et v\xE9rifier des messages avec les portefeuilles",slug:"comment-signer-et-verifier-des-messages-avec-les-portefeuilles",children:[]},{level:2,title:"Comment se connecter \xE0 un portefeuille",slug:"comment-se-connecter-a-un-portefeuille",children:[{level:3,title:"React",slug:"react",children:[]},{level:3,title:"Vue",slug:"vue",children:[]},{level:3,title:"Svelte",slug:"svelte",children:[]}]}],path:"/fr/references/keypairs-and-wallets.html",pathLocale:"/fr/",extraFields:[]},{title:"D\xE9veloppement Local",headers:[{level:2,title:"D\xE9marrer un Validateur Local",slug:"demarrer-un-validateur-local",children:[]},{level:2,title:"Connexion aux Environnements",slug:"connexion-aux-environnements",children:[]},{level:2,title:"Inscription \xE0 des Ev\xE9nements",slug:"inscription-a-des-evenements",children:[]},{level:2,title:"Obtention de SOL pour les Tests",slug:"obtention-de-sol-pour-les-tests",children:[]},{level:2,title:"Utilisation des Comptes et des Programmes du Mainnet",slug:"utilisation-des-comptes-et-des-programmes-du-mainnet",children:[{level:3,title:"Comment charger des comptes depuis le mainnet",slug:"comment-charger-des-comptes-depuis-le-mainnet",children:[]},{level:3,title:"Comment charger des programmes depuis le mainnet",slug:"comment-charger-des-programmes-depuis-le-mainnet",children:[]}]}],path:"/fr/references/local-development.html",pathLocale:"/fr/",extraFields:[]},{title:"Service de Noms",headers:[{level:2,title:"Registre de noms",slug:"registre-de-noms",children:[]},{level:2,title:"R\xE9solution des domaines SOL",slug:"resolution-des-domaines-sol",children:[]},{level:2,title:"Recherche invers\xE9e",slug:"recherche-inversee",children:[]},{level:2,title:"Recherche des sous-domaines",slug:"recherche-des-sous-domaines",children:[]},{level:2,title:"Trouver tous les noms de domaine appartenant \xE0 une cl\xE9 publique",slug:"trouver-tous-les-noms-de-domaine-appartenant-a-une-cle-publique",children:[]},{level:2,title:"R\xE9soudre un pseudo Twitter",slug:"resoudre-un-pseudo-twitter",children:[]},{level:2,title:"Recherche invers\xE9e d'un pseudo Twitter",slug:"recherche-inversee-d-un-pseudo-twitter",children:[]}],path:"/fr/references/name-service.html",pathLocale:"/fr/",extraFields:[]},{title:"NFTs",headers:[{level:2,title:"Comment cr\xE9er un NFT",slug:"comment-creer-un-nft",children:[{level:3,title:"T\xE9l\xE9charger sur Arweave",slug:"telecharger-sur-arweave",children:[]},{level:3,title:"Cr\xE9er le NFT",slug:"creer-le-nft",children:[]}]},{level:2,title:"Comment obtenir les m\xE9tadonn\xE9es des NFTs",slug:"comment-obtenir-les-metadonnees-des-nfts",children:[]},{level:2,title:"Comment obtenir le propri\xE9taire d'un NFT",slug:"comment-obtenir-le-proprietaire-d-un-nft",children:[]},{level:2,title:"Comment obtenir les adresses de cr\xE9ation des NFTs",slug:"comment-obtenir-les-adresses-de-creation-des-nfts",children:[{level:3,title:"Candy Machine V1",slug:"candy-machine-v1",children:[]},{level:3,title:"Candy Machine V2",slug:"candy-machine-v2",children:[]}]},{level:2,title:"Comment r\xE9cup\xE9rer tous les NFTs d'un portefeuille ?",slug:"comment-recuperer-tous-les-nfts-d-un-portefeuille",children:[]}],path:"/fr/references/nfts.html",pathLocale:"/fr/",extraFields:[]},{title:"Envoi de transactions hors connexion",headers:[{level:2,title:"Signer la Transaction",slug:"signer-la-transaction",children:[]},{level:2,title:"Transaction avec Signature Partielle",slug:"transaction-avec-signature-partielle",children:[]},{level:2,title:"Nonce Durable",slug:"nonce-durable",children:[{level:3,title:"Cr\xE9er un Compte de Nonce",slug:"creer-un-compte-de-nonce",children:[]},{level:3,title:"Obtenir le Compte de Nonce",slug:"obtenir-le-compte-de-nonce",children:[]},{level:3,title:"Utiliser le Compte de Nonce",slug:"utiliser-le-compte-de-nonce",children:[]}]}],path:"/fr/references/offline-transactions.html",pathLocale:"/fr/",extraFields:[]},{title:"\xC9crire des Programmes",headers:[{level:2,title:"Comment transf\xE9rer SOL dans un programme",slug:"comment-transferer-sol-dans-un-programme",children:[]},{level:2,title:"Comment obtenir une r\xE9f\xE9rence \xE0 l'horloge dans un programme",slug:"comment-obtenir-une-reference-a-l-horloge-dans-un-programme",children:[{level:3,title:"Passer l'Horloge comme un compte dans une instruction",slug:"passer-l-horloge-comme-un-compte-dans-une-instruction",children:[]},{level:3,title:"Acc\xE9der \xE0 l'horloge directement dans une instruction",slug:"acceder-a-l-horloge-directement-dans-une-instruction",children:[]}]},{level:2,title:"Comment modifier la taille d'un compte",slug:"comment-modifier-la-taille-d-un-compte",children:[]},{level:2,title:"Comment faire l'Invocation de Programme Crois\xE9",slug:"comment-faire-l-invocation-de-programme-croise",children:[]},{level:2,title:"Comment cr\xE9er un PDA",slug:"comment-creer-un-pda",children:[]},{level:2,title:"Comment lire des comptes",slug:"comment-lire-des-comptes",children:[]},{level:2,title:"Comment v\xE9rifier des comptes",slug:"comment-verifier-des-comptes",children:[]},{level:2,title:"Comment lire plusieurs instructions \xE0 partir d'une transaction",slug:"comment-lire-plusieurs-instructions-a-partir-d-une-transaction",children:[]}],path:"/fr/references/programs.html",pathLocale:"/fr/",extraFields:[]},{title:"Staking",headers:[{level:2,title:"Obtenir les Validateurs Actuels",slug:"obtenir-les-validateurs-actuels",children:[]},{level:2,title:"Cr\xE9er un Compte de Stake",slug:"creer-un-compte-de-stake",children:[]},{level:2,title:"D\xE9l\xE9guer un Stake",slug:"deleguer-un-stake",children:[]},{level:2,title:"Obtenir les D\xE9l\xE9gu\xE9s par Validateurs",slug:"obtenir-les-delegues-par-validateurs",children:[]},{level:2,title:"D\xE9sactiver le Stake",slug:"desactiver-le-stake",children:[]},{level:2,title:"Retirer le Stake",slug:"retirer-le-stake",children:[]}],path:"/fr/references/staking.html",pathLocale:"/fr/",extraFields:[]},{title:"Interaction avec les Jetons",headers:[{level:2,title:"De quoi ai-je besoin pour commencer avec SPL-Tokens ?",slug:"de-quoi-ai-je-besoin-pour-commencer-avec-spl-tokens",children:[]},{level:2,title:"Comment cr\xE9er un nouveau Jeton",slug:"comment-creer-un-nouveau-jeton",children:[]},{level:2,title:'Comment obtenir un "mint" de jeton',slug:"comment-obtenir-un-mint-de-jeton",children:[]},{level:2,title:"Comment cr\xE9er un compte de jeton",slug:"comment-creer-un-compte-de-jeton",children:[]},{level:2,title:"Comment obtenir un compte de jetons",slug:"comment-obtenir-un-compte-de-jetons",children:[]},{level:2,title:"Comment obtenir le solde d'un compte de jetons",slug:"comment-obtenir-le-solde-d-un-compte-de-jetons",children:[]},{level:2,title:"Comment cr\xE9er (mint) de nouveaux jetons",slug:"comment-creer-mint-de-nouveaux-jetons",children:[]},{level:2,title:"Comment transf\xE9rer des jetons",slug:"comment-transferer-des-jetons",children:[]},{level:2,title:"Comment br\xFBler des jetons",slug:"comment-bruler-des-jetons",children:[]},{level:2,title:"Comment fermer des comptes de jetons",slug:"comment-fermer-des-comptes-de-jetons",children:[]},{level:2,title:"Comment d\xE9finir l'autorit\xE9 sur les comptes de jetons ou de mints ?",slug:"comment-definir-l-autorite-sur-les-comptes-de-jetons-ou-de-mints",children:[]},{level:2,title:"Comment approuver une d\xE9l\xE9gation de jetons",slug:"comment-approuver-une-delegation-de-jetons",children:[]},{level:2,title:"Comment r\xE9voquer une d\xE9l\xE9gation de jetons",slug:"comment-revoquer-une-delegation-de-jetons",children:[]},{level:2,title:"Comment g\xE9rer les wrapped SOL",slug:"comment-gerer-les-wrapped-sol",children:[{level:3,title:"Cr\xE9er un Compte de Jetons",slug:"creer-un-compte-de-jetons",children:[]},{level:3,title:"Ajouter un solde",slug:"ajouter-un-solde",children:[]}]},{level:2,title:"Comment obtenir tous les comptes de jetons par propri\xE9taire",slug:"comment-obtenir-tous-les-comptes-de-jetons-par-proprietaire",children:[]}],path:"/fr/references/token.html",pathLocale:"/fr/",extraFields:[]},{title:"Accounts",headers:[{level:2,title:"Fakten",slug:"fakten",children:[]},{level:2,title:"Deep Dive",slug:"deep-dive",children:[{level:3,title:"Accounts Model",slug:"accounts-model",children:[]},{level:3,title:"Miete",slug:"miete",children:[]}]},{level:2,title:"Andere Ressourcen",slug:"andere-ressourcen",children:[{level:3,title:"Credit",slug:"credit",children:[]}]}],path:"/de/core-concepts/accounts.html",pathLocale:"/de/",extraFields:[]},{title:"Programmabgeleitete Adressen (PDAs)",headers:[{level:2,title:"Fakten",slug:"fakten",children:[]},{level:2,title:"Deep Dive",slug:"deep-dive",children:[{level:3,title:"Generating PDAs",slug:"generating-pdas",children:[]},{level:3,title:"Interaktion mit PDAs",slug:"interaktion-mit-pdas",children:[]}]},{level:2,title:"Andere Quellen",slug:"andere-quellen",children:[]}],path:"/de/core-concepts/pdas.html",pathLocale:"/de/",extraFields:[]},{title:"Programme",headers:[{level:2,title:"Facts",slug:"facts",children:[]},{level:2,title:"Deep Dive",slug:"deep-dive",children:[{level:3,title:"Native Programme & Die Solana Programm Bibliothek (SPL - Solana Program Library)",slug:"native-programme-die-solana-programm-bibliothek-spl-solana-program-library",children:[]},{level:3,title:"Writing Programs",slug:"writing-programs",children:[]},{level:3,title:"Bereitstellen von Programmen",slug:"bereitstellen-von-programmen",children:[]}]},{level:2,title:"Weitere Quellen",slug:"weitere-quellen",children:[]}],path:"/de/core-concepts/programs.html",pathLocale:"/de/",extraFields:[]},{title:"Transaktionen",headers:[{level:2,title:"Fakten",slug:"fakten",children:[]},{level:2,title:"Deep Dive",slug:"deep-dive",children:[{level:3,title:"Geb\xFChren",slug:"gebuhren",children:[]}]},{level:2,title:"Other Resources",slug:"other-resources",children:[]}],path:"/de/core-concepts/transactions.html",pathLocale:"/de/",extraFields:[]},{title:"Installation",headers:[{level:2,title:"Installieren von Web3.js",slug:"installieren-von-web3-js",children:[{level:3,title:"Web3.js",slug:"web3-js",children:[]},{level:3,title:"SPL-Token",slug:"spl-token",children:[]},{level:3,title:"Wallet-Adapter",slug:"wallet-adapter",children:[]}]},{level:2,title:"Install Rust",slug:"install-rust",children:[]},{level:2,title:"Install CLI",slug:"install-cli",children:[{level:3,title:"macOS & Linux",slug:"macos-linux",children:[]},{level:3,title:"Windows",slug:"windows",children:[]},{level:3,title:"Aus Quelle erstellen",slug:"aus-quelle-erstellen",children:[]}]}],path:"/de/getting-started/installation.html",pathLocale:"/de/",extraFields:[]},{title:"Kontozuordnungen",headers:[{level:2,title:"Ableitende PDAs",slug:"ableitende-pdas",children:[]},{level:2,title:"Einzelnes Kartenkonto",slug:"einzelnes-kartenkonto",children:[]}],path:"/de/guides/account-maps.html",pathLocale:"/de/",extraFields:[]},{title:"Migrieren von Programmdatenkonten",headers:[{level:2,title:"Wie k\xF6nnen Sie die Datenkonten eines Programms migrieren?",slug:"wie-konnen-sie-die-datenkonten-eines-programms-migrieren",children:[]},{level:2,title:"Szenario",slug:"szenario",children:[]},{level:2,title:"Upgrade des Kontos",slug:"upgrade-des-kontos",children:[{level:3,title:"1. Kontoumwandlungslogik hinzuf\xFCgen",slug:"_1-kontoumwandlungslogik-hinzufugen",children:[]}]},{level:2,title:"Resources",slug:"resources",children:[]}],path:"/de/guides/data-migration.html",pathLocale:"/de/",extraFields:[]},{title:"Debuggen von Solana-Programmen",headers:[{level:2,title:"Fakten",slug:"fakten",children:[]},{level:2,title:"Laufzeittests und Debugging im Editor",slug:"laufzeittests-und-debugging-im-editor",children:[]},{level:2,title:"Testen des lokalen Validator-Knotens im Editor",slug:"testen-des-lokalen-validator-knotens-im-editor",children:[]},{level:2,title:"Testen lokaler Validator-Knoten von Client-Apps",slug:"testen-lokaler-validator-knoten-von-client-apps",children:[]},{level:2,title:"Ressourcen",slug:"ressourcen",children:[]}],path:"/de/guides/debugging-solana-programs.html",pathLocale:"/de/",extraFields:[]},{title:"Funktionsparit\xE4tstest",headers:[{level:2,title:"Fakten",slug:"fakten",children:[]},{level:2,title:"Szenario",slug:"szenario",children:[]},{level:2,title:"Feature Status",slug:"feature-status",children:[]},{level:2,title:"Parit\xE4tstest",slug:"paritatstest",children:[]},{level:2,title:"Einfache Vorf\xFChrung",slug:"einfache-vorfuhrung",children:[{level:3,title:"Alle Funktionen aktiviert",slug:"alle-funktionen-aktiviert",children:[]},{level:3,title:"Selektive Funktionen deaktiviert",slug:"selektive-funktionen-deaktiviert",children:[]}]},{level:2,title:"Vollst\xE4ndiger Parit\xE4tstest",slug:"vollstandiger-paritatstest",children:[]},{level:2,title:"Vollst\xE4ndiger Parit\xE4tstest programmgesteuert",slug:"vollstandiger-paritatstest-programmgesteuert",children:[]},{level:2,title:"Ressourcen",slug:"ressourcen",children:[]}],path:"/de/guides/feature-parity-testing.html",pathLocale:"/de/",extraFields:[]},{title:"Programmkonten Abfragen",headers:[{level:2,title:"Fakten",slug:"fakten",children:[]},{level:2,title:"Deep Dive",slug:"deep-dive",children:[{level:3,title:"filters",slug:"filters",children:[]},{level:3,title:"dataSlice",slug:"dataslice",children:[]}]},{level:2,title:"Other Resources",slug:"other-resources",children:[]}],path:"/de/guides/get-program-accounts.html",pathLocale:"/de/",extraFields:[]},{title:"Transaktionen Wiederholen",headers:[{level:2,title:"Fakten",slug:"fakten",children:[]},{level:2,title:"Die Reise einer Transaktion",slug:"die-reise-einer-transaktion-1",children:[{level:3,title:"Wie Anwender Transaktionen \xFCbermitteln",slug:"wie-anwender-transaktionen-ubermitteln",children:[]},{level:3,title:"Wie RPC-Knoten Transaktionen senden",slug:"wie-rpc-knoten-transaktionen-senden",children:[]}]},{level:2,title:"Wie Transaktionen verworfen werden",slug:"wie-transaktionen-verworfen-werden",children:[{level:3,title:"Bevor eine Transaktion verarbeitet wird",slug:"bevor-eine-transaktion-verarbeitet-wird",children:[]},{level:3,title:"Nachdem eine Transaktion verarbeitet wurde und bevor sie abgeschlossen wird",slug:"nachdem-eine-transaktion-verarbeitet-wurde-und-bevor-sie-abgeschlossen-wird",children:[]}]},{level:2,title:"Umgang mit abgebrochenen Transaktionen",slug:"umgang-mit-abgebrochenen-transaktionen",children:[{level:3,title:"Ein eingehender Blick in sendTransaction",slug:"ein-eingehender-blick-in-sendtransaction",children:[]}]},{level:2,title:"Anpassen der Reroadcast-Logik",slug:"anpassen-der-reroadcast-logik",children:[{level:3,title:"Die Kosten f\xFCr das \xDCberspringen des Preflights",slug:"die-kosten-fur-das-uberspringen-des-preflights",children:[]},{level:3,title:"Wann Transaktionen neu signiert werden m\xFCssen",slug:"wann-transaktionen-neu-signiert-werden-mussen",children:[]}]},{level:2,title:"Danksagungen",slug:"danksagungen",children:[]}],path:"/de/guides/retrying-transactions.html",pathLocale:"/de/",extraFields:[]},{title:"Serialisieren von Daten",headers:[{level:2,title:"Einrichten der Borsh-Serialisierung",slug:"einrichten-der-borsh-serialisierung",children:[]},{level:2,title:"So serialisieren Sie Anweisungsdaten auf dem Client",slug:"so-serialisieren-sie-anweisungsdaten-auf-dem-client",children:[]},{level:2,title:"So deserialisieren Sie Befehlsdaten im Programm",slug:"so-deserialisieren-sie-befehlsdaten-im-programm",children:[]},{level:2,title:"So serialisieren Sie Kontodaten im Programm",slug:"so-serialisieren-sie-kontodaten-im-programm",children:[{level:3,title:"Pack",slug:"pack",children:[]},{level:3,title:"Serialisierung/Deserialisierung",slug:"serialisierung-deserialisierung",children:[]},{level:3,title:"Usage",slug:"usage",children:[]}]},{level:2,title:"So deserialisieren Sie Kontodaten auf dem Client",slug:"so-deserialisieren-sie-kontodaten-auf-dem-client",children:[]},{level:2,title:"Common Solana TS/JS Mappings",slug:"common-solana-ts-js-mappings",children:[]},{level:2,title:"Fortgeschrittene Konstrukte",slug:"fortgeschrittene-konstrukte",children:[{level:3,title:"COption",slug:"coption",children:[]}]},{level:2,title:"Ressourcen",slug:"ressourcen",children:[]}],path:"/de/guides/serialization.html",pathLocale:"/de/",extraFields:[]},{title:"Getting Started",headers:[{level:2,title:"Composability is Key",slug:"composability-is-key",children:[]},{level:2,title:"Contributing",slug:"contributing",children:[]}],path:"/de/integrations/",pathLocale:"/de/",extraFields:[]},{title:"Jupiter",headers:[{level:2,title:"Installation",slug:"installation",children:[{level:3,title:"Abrufen der Token-Liste von Jupiter",slug:"abrufen-der-token-liste-von-jupiter",children:[]},{level:3,title:"Laden der Jupiter-Instanz",slug:"laden-der-jupiter-instanz",children:[]},{level:3,title:"Abrufen der RouteMap",slug:"abrufen-der-routemap",children:[]},{level:3,title:"Abrufen der Routen f\xFCr gegebene Input- und Output-Token",slug:"abrufen-der-routen-fur-gegebene-input-und-output-token",children:[]},{level:3,title:"F\xFChren Sie den Token-Tausch durch",slug:"fuhren-sie-den-token-tausch-durch",children:[]}]},{level:2,title:"So verwenden Sie Jupiter in einer React-Anwendung",slug:"so-verwenden-sie-jupiter-in-einer-react-anwendung",children:[{level:3,title:"Installation",slug:"installation-1",children:[]},{level:3,title:"Anbieter hinzuf\xFCgen",slug:"anbieter-hinzufugen",children:[]},{level:3,title:"Abrufen der Token-Liste",slug:"abrufen-der-token-liste",children:[]},{level:3,title:"Aufbau des Staates",slug:"aufbau-des-staates",children:[]},{level:3,title:"Verwenden des useJupiter-Reaktionshooks",slug:"verwenden-des-usejupiter-reaktionshooks",children:[]},{level:3,title:"Durchf\xFChrung des Swaps",slug:"durchfuhrung-des-swaps",children:[]}]},{level:2,title:"So verwenden Sie die Jupiter-API",slug:"so-verwenden-sie-die-jupiter-api",children:[{level:3,title:"Installation",slug:"installation-2",children:[]},{level:3,title:"Abrufen der Routenkarte",slug:"abrufen-der-routenkarte",children:[]},{level:3,title:"Abrufen der serialisierten Transaktion zum Ausf\xFChren von Swap",slug:"abrufen-der-serialisierten-transaktion-zum-ausfuhren-von-swap",children:[]},{level:3,title:"Ausf\xFChrung der Swap-Transaktion",slug:"ausfuhrung-der-swap-transaktion",children:[]}]},{level:2,title:"Other Resources",slug:"other-resources",children:[]}],path:"/de/integrations/jupiter.html",pathLocale:"/de/",extraFields:[]},{title:"Mango Markets",headers:[{level:2,title:"So erhalten Sie eine Mango-Gruppe",slug:"so-erhalten-sie-eine-mango-gruppe",children:[]},{level:2,title:"So erstellen Sie ein Mango-Konto",slug:"so-erstellen-sie-ein-mango-konto",children:[]},{level:2,title:"So zahlen Sie USDC auf ein Mango-Konto ein",slug:"so-zahlen-sie-usdc-auf-ein-mango-konto-ein",children:[]},{level:2,title:"So platzieren Sie eine Spot-Order",slug:"so-platzieren-sie-eine-spot-order",children:[]},{level:2,title:"So laden Sie Gebote",slug:"so-laden-sie-gebote",children:[]},{level:2,title:"How to load asks",slug:"how-to-load-asks",children:[]},{level:2,title:"Andere Ressourcen",slug:"andere-ressourcen",children:[]}],path:"/de/integrations/mango.html",pathLocale:"/de/",extraFields:[]},{title:"ORAO VRF",headers:[{level:2,title:"Grundlegendes Nutzungsszenario",slug:"grundlegendes-nutzungsszenario",children:[]},{level:2,title:"SDKs (Software Developer Kits - Software-entwicklungs-packet)",slug:"sdks-software-developer-kits-software-entwicklungs-packet",children:[]},{level:2,title:"Anatomie einer Zuf\xE4lligkeitsanforderung",slug:"anatomie-einer-zufalligkeitsanforderung",children:[]},{level:2,title:"Anatomie einer VRF-Konfiguration",slug:"anatomie-einer-vrf-konfiguration",children:[]},{level:2,title:"Rust-natives Beispiel",slug:"rust-natives-beispiel",children:[{level:3,title:"1. Stellen Sie die Verbindung her",slug:"_1-stellen-sie-die-verbindung-her",children:[]},{level:3,title:"2. Erstellen Sie eine Anfrage",slug:"_2-erstellen-sie-eine-anfrage",children:[]},{level:3,title:"3. Warte auf die Erf\xFCllung",slug:"_3-warte-auf-die-erfullung",children:[]}]},{level:2,title:"CPI-Beispiel",slug:"cpi-beispiel",children:[{level:3,title:"1. Erstellen Sie den Vertrag",slug:"_1-erstellen-sie-den-vertrag",children:[]},{level:3,title:"2. Sammeln Sie die erforderlichen Konten",slug:"_2-sammeln-sie-die-erforderlichen-konten",children:[]},{level:3,title:"3. F\xFChren Sie einen CPI-Aufruf durch",slug:"_3-fuhren-sie-einen-cpi-aufruf-durch",children:[]},{level:3,title:"4. Nutzen Sie die erf\xFCllte Zuf\xE4lligkeit",slug:"_4-nutzen-sie-die-erfullte-zufalligkeit",children:[]}]}],path:"/de/integrations/orao-vrf.html",pathLocale:"/de/",extraFields:[]},{title:"Pyth",headers:[{level:2,title:"Verwendung von Pyth im Client",slug:"verwendung-von-pyth-im-client",children:[]},{level:2,title:"Verwendung von Pyth in Anchor",slug:"verwendung-von-pyth-in-anchor",children:[]},{level:2,title:"Other Resources",slug:"other-resources",children:[]}],path:"/de/integrations/pyth.html",pathLocale:"/de/",extraFields:[]},{title:"React Native",headers:[{level:2,title:"How to use @solana/web3.js in a React Native app",slug:"how-to-use-solana-web3-js-in-a-react-native-app",children:[{level:3,title:"Erstellen Sie eine neue Anwendung",slug:"erstellen-sie-eine-neue-anwendung",children:[]},{level:3,title:"Abh\xE4ngigkeiten installieren",slug:"abhangigkeiten-installieren",children:[]},{level:3,title:"Patchen Sie Babel, um die Hermes-Transformationen zu verwenden",slug:"patchen-sie-babel-um-die-hermes-transformationen-zu-verwenden",children:[]},{level:3,title:"Aktualisieren Sie \u201Eindex.js\u201C",slug:"aktualisieren-sie-\u201Eindex-js",children:[]},{level:3,title:"Aktualisieren Sie \u201EApp.tsx\u201C",slug:"aktualisieren-sie-\u201Eapp-tsx",children:[]},{level:3,title:"[iOS only] Install cocoapods",slug:"ios-only-install-cocoapods",children:[]},{level:3,title:"Anwendung starten",slug:"anwendung-starten",children:[]}]},{level:2,title:"Solana DApp Scaffold f\xFCr React Native",slug:"solana-dapp-scaffold-fur-react-native",children:[]},{level:2,title:"H\xE4ufige Probleme bei der Verwendung von Kryptobibliotheken in einer React Native-App",slug:"haufige-probleme-bei-der-verwendung-von-kryptobibliotheken-in-einer-react-native-app",children:[{level:3,title:"Fehler: \u201EWatchman-Crawling fehlgeschlagen\u201C.",slug:"fehler-\u201Ewatchman-crawling-fehlgeschlagen",children:[]},{level:3,title:"Fehler: URL.protocol ist nicht implementiert",slug:"fehler-url-protocol-ist-nicht-implementiert",children:[]},{level:3,title:"Fehler: crypto.getRandomValues() wird nicht unterst\xFCtzt",slug:"fehler-crypto-getrandomvalues-wird-nicht-unterstutzt",children:[]}]}],path:"/de/integrations/react-native.html",pathLocale:"/de/",extraFields:[]},{title:"Serum",headers:[{level:2,title:"So erhalten Sie einen Serummarkt",slug:"so-erhalten-sie-einen-serummarkt",children:[]},{level:2,title:"So erhalten Sie Serum-Bestellb\xFCcher",slug:"so-erhalten-sie-serum-bestellbucher",children:[]},{level:2,title:"So erhalten Sie aktuelle offene Bestellungen",slug:"so-erhalten-sie-aktuelle-offene-bestellungen",children:[]}],path:"/de/integrations/serum.html",pathLocale:"/de/",extraFields:[]},{title:"Strata",headers:[{level:2,title:"So erstellen Sie ein vollst\xE4ndig verwaltetes Token",slug:"so-erstellen-sie-ein-vollstandig-verwaltetes-token",children:[]},{level:2,title:"Wie man einen Token kauft und verkauft",slug:"wie-man-einen-token-kauft-und-verkauft",children:[]},{level:2,title:"Wie man Liquidit\xE4t aufbaut",slug:"wie-man-liquiditat-aufbaut",children:[]},{level:2,title:"Other Resources",slug:"other-resources",children:[]}],path:"/de/integrations/strata.html",pathLocale:"/de/",extraFields:[]},{title:"Switchboard",headers:[{level:2,title:"Daten Feeds",slug:"daten-feeds",children:[{level:3,title:"Daten aus einem Aggregator-Feed lesen",slug:"daten-aus-einem-aggregator-feed-lesen",children:[]},{level:3,title:"Erstellen eines neuen Aggregator-Feed",slug:"erstellen-eines-neuen-aggregator-feed",children:[]},{level:3,title:"Lesen Sie Daten aus einem Aggregator-Feed-in-Programm",slug:"lesen-sie-daten-aus-einem-aggregator-feed-in-programm",children:[]},{level:3,title:"So erstellen Sie einen Feed vom Publisher",slug:"so-erstellen-sie-einen-feed-vom-publisher",children:[]}]},{level:2,title:"Oracles",slug:"oracles",children:[{level:3,title:"Erstelen eines Oracle",slug:"erstelen-eines-oracle",children:[]},{level:3,title:"Ausf\xFChren eines lokalen Oracle",slug:"ausfuhren-eines-lokalen-oracle",children:[]},{level:3,title:"Oracle Config",slug:"oracle-config",children:[]}]},{level:2,title:"Verifizierbare Zufallsfunktion (VRF)",slug:"verifizierbare-zufallsfunktion-vrf",children:[{level:3,title:"Lesen eines VRF-Kontos",slug:"lesen-eines-vrf-kontos",children:[]},{level:3,title:"Erstellen eines VRF-Kontos",slug:"erstellen-eines-vrf-kontos",children:[]},{level:3,title:"Fordern von Zuf\xE4lligkeit vom vrf-Konto",slug:"fordern-von-zufalligkeit-vom-vrf-konto",children:[]}]},{level:2,title:"Resources",slug:"resources",children:[{level:3,title:"APIs and Libraries",slug:"apis-and-libraries",children:[]},{level:3,title:"Examples",slug:"examples",children:[]},{level:3,title:"More Information",slug:"more-information",children:[]}]}],path:"/de/integrations/switchboard.html",pathLocale:"/de/",extraFields:[]},{title:"web3Auth (Torus Wallet)",headers:[{level:2,title:"Was ist eine Brieftasche?",slug:"was-ist-eine-brieftasche",children:[]},{level:2,title:"Soziale Logins auf Solana",slug:"soziale-logins-auf-solana",children:[]},{level:2,title:"Integrationsleitfaden",slug:"integrationsleitfaden",children:[{level:3,title:"Abh\xE4ngigkeiten installieren",slug:"abhangigkeiten-installieren",children:[]},{level:3,title:"Importieren Sie das SDK und initialisieren Sie es",slug:"importieren-sie-das-sdk-und-initialisieren-sie-es",children:[]},{level:3,title:"Benutzeranmeldung ausl\xF6sen",slug:"benutzeranmeldung-auslosen",children:[]},{level:3,title:"Verwenden der Torus-Instanz zum Abrufen von Benutzerkontodetails",slug:"verwenden-der-torus-instanz-zum-abrufen-von-benutzerkontodetails",children:[]},{level:3,title:"Verwenden der Torus Solana-API zum Signieren einer Nachricht.",slug:"verwenden-der-torus-solana-api-zum-signieren-einer-nachricht",children:[]},{level:3,title:"Verwenden der Torus Solana-API zum Senden einer Transaktion",slug:"verwenden-der-torus-solana-api-zum-senden-einer-transaktion",children:[]},{level:3,title:"Aufladungen",slug:"aufladungen",children:[]},{level:3,title:"Ausloggen",slug:"ausloggen",children:[]}]},{level:2,title:"Ressourcen",slug:"ressourcen",children:[]}],path:"/de/integrations/web3auth.html",pathLocale:"/de/",extraFields:[]},{title:"Accounts",headers:[{level:2,title:"So erstellen Sie ein Systemkonto",slug:"so-erstellen-sie-ein-systemkonto",children:[]},{level:2,title:"So berechnen Sie die Kontokosten",slug:"so-berechnen-sie-die-kontokosten",children:[]},{level:2,title:"So erstellen Sie Konten mit Seeds",slug:"so-erstellen-sie-konten-mit-seeds",children:[{level:3,title:"Generieren",slug:"generieren",children:[]},{level:3,title:"Erstellen",slug:"erstellen",children:[]},{level:3,title:"Transferieren",slug:"transferieren",children:[]}]},{level:2,title:"So erstellen Sie PDAs",slug:"so-erstellen-sie-pdas",children:[{level:3,title:"Generieren Sie einen PDA",slug:"generieren-sie-einen-pda",children:[]},{level:3,title:"Erstellen Sie einen PDA",slug:"erstellen-sie-einen-pda",children:[]}]},{level:2,title:"So signieren Sie mit einem PDA",slug:"so-signieren-sie-mit-einem-pda",children:[{level:3,title:"Programm",slug:"programm",children:[]},{level:3,title:"Client",slug:"client-1",children:[]}]},{level:2,title:"So erhalten Sie Programmkonten",slug:"so-erhalten-sie-programmkonten",children:[]},{level:2,title:"So schlie\xDFen Sie Konten",slug:"so-schlie\xDFen-sie-konten",children:[]},{level:2,title:"So erhalten Sie den Kontostand",slug:"so-erhalten-sie-den-kontostand",children:[]}],path:"/de/references/accounts.html",pathLocale:"/de/",extraFields:[]},{title:"Transaktionen versenden",headers:[{level:2,title:"So senden Sie SPL-Tokens",slug:"so-senden-sie-spl-tokens",children:[]},{level:2,title:"So berechnen Sie die Transaktionskosten",slug:"so-berechnen-sie-die-transaktionskosten",children:[{level:3,title:"getEstimatedFee",slug:"getestimatedfee",children:[]},{level:3,title:"getFeeForMessage",slug:"getfeeformessage",children:[]}]},{level:2,title:"So f\xFCgen Sie einer Transaktion eine Notiz hinzu",slug:"so-fugen-sie-einer-transaktion-eine-notiz-hinzu",children:[]},{level:2,title:"So \xE4ndern Sie das Computing-Budget, die Geb\xFChr & Priorit\xE4t f\xFCr eine Transaktion",slug:"so-andern-sie-das-computing-budget-die-gebuhr-prioritat-fur-eine-transaktion",children:[]}],path:"/de/references/basic-transactions.html",pathLocale:"/de/",extraFields:[]},{title:"Keypairs and Wallets",headers:[{level:2,title:"So generieren Sie ein neues Schl\xFCsselpaar",slug:"so-generieren-sie-ein-neues-schlusselpaar",children:[]},{level:2,title:"So stellen Sie ein Schl\xFCsselpaar aus einem Geheimnis wieder her",slug:"so-stellen-sie-ein-schlusselpaar-aus-einem-geheimnis-wieder-her",children:[]},{level:2,title:"So verifizieren Sie ein Schl\xFCsselpaar",slug:"so-verifizieren-sie-ein-schlusselpaar",children:[]},{level:2,title:"So \xFCberpr\xFCfen Sie, ob ein \xF6ffentlicher Schl\xFCssel einen zugeh\xF6rigen privaten Schl\xFCssel hat",slug:"so-uberprufen-sie-ob-ein-offentlicher-schlussel-einen-zugehorigen-privaten-schlussel-hat",children:[]},{level:2,title:"Wie man eine mnemonische Phrase generiert",slug:"wie-man-eine-mnemonische-phrase-generiert",children:[]},{level:2,title:"So stellen Sie ein Schl\xFCsselpaar aus einer mnemonischen Phrase wieder her",slug:"so-stellen-sie-ein-schlusselpaar-aus-einer-mnemonischen-phrase-wieder-her",children:[]},{level:2,title:"So generieren Sie eine Vanity-Adresse",slug:"so-generieren-sie-eine-vanity-adresse",children:[]},{level:2,title:"So signieren und verifizieren Sie Nachrichten mit Wallets",slug:"so-signieren-und-verifizieren-sie-nachrichten-mit-wallets",children:[]},{level:2,title:"So verbinden Sie sich mit einer Brieftasche",slug:"so-verbinden-sie-sich-mit-einer-brieftasche",children:[{level:3,title:"React",slug:"react",children:[]},{level:3,title:"Vue",slug:"vue",children:[]},{level:3,title:"Svelte",slug:"svelte",children:[]}]}],path:"/de/references/keypairs-and-wallets.html",pathLocale:"/de/",extraFields:[]},{title:"Local Development",headers:[{level:2,title:"Starten eines lokalen Validators",slug:"starten-eines-lokalen-validators",children:[]},{level:2,title:"Verbindung zu Umgebungen",slug:"verbindung-zu-umgebungen",children:[]},{level:2,title:"Abonnieren von Veranstaltungen",slug:"abonnieren-von-veranstaltungen",children:[]},{level:2,title:"Test SOL erhalten",slug:"test-sol-erhalten",children:[]},{level:2,title:"Verwenden von Mainnet-Konten und -Programmen",slug:"verwenden-von-mainnet-konten-und-programmen",children:[{level:3,title:"So laden Sie Konten aus dem Mainnet",slug:"so-laden-sie-konten-aus-dem-mainnet",children:[]},{level:3,title:"So laden Sie Programme aus dem Mainnet",slug:"so-laden-sie-programme-aus-dem-mainnet",children:[]}]}],path:"/de/references/local-development.html",pathLocale:"/de/",extraFields:[]},{title:"Name Service",headers:[{level:2,title:"Namensregister",slug:"namensregister",children:[]},{level:2,title:"SOL-Dom\xE4nen aufl\xF6sen",slug:"sol-domanen-auflosen",children:[]},{level:2,title:"R\xFCckw\xE4rtssuche",slug:"ruckwartssuche",children:[]},{level:2,title:"Subdomain nachschlagen",slug:"subdomain-nachschlagen",children:[]},{level:2,title:"Finden Sie alle Domainnamen, die einem \xF6ffentlichen Schl\xFCssel geh\xF6ren",slug:"finden-sie-alle-domainnamen-die-einem-offentlichen-schlussel-gehoren",children:[]},{level:2,title:"Ein Twitter-Handle aufl\xF6sen",slug:"ein-twitter-handle-auflosen",children:[]},{level:2,title:"Umgekehrte Suche nach einem Twitter-Handle",slug:"umgekehrte-suche-nach-einem-twitter-handle",children:[]}],path:"/de/references/name-service.html",pathLocale:"/de/",extraFields:[]},{title:"NFTs",headers:[{level:2,title:"So erstellen Sie eine NFT",slug:"so-erstellen-sie-eine-nft",children:[{level:3,title:"Upload zu Arweave",slug:"upload-zu-arweave",children:[]},{level:3,title:"Minte das NFT",slug:"minte-das-nft",children:[]}]},{level:2,title:"So erhalten Sie NFT-Metadaten",slug:"so-erhalten-sie-nft-metadaten",children:[]},{level:2,title:"So erhalten Sie den Besitzer eines NFT",slug:"so-erhalten-sie-den-besitzer-eines-nft",children:[]},{level:2,title:"So erhalten Sie NFT Mint-Adressen",slug:"so-erhalten-sie-nft-mint-adressen",children:[{level:3,title:"Candy Machine V1",slug:"candy-machine-v1",children:[]},{level:3,title:"Candy Machine V2",slug:"candy-machine-v2",children:[]}]},{level:2,title:"Wie bekomme ich alle NFTs aus einem Wallet?",slug:"wie-bekomme-ich-alle-nfts-aus-einem-wallet",children:[]},{level:2,title:"Candy Machine v2",slug:"candy-machine-v2-1",children:[{level:3,title:"Wie erstelle ich eine Candy Machine?",slug:"wie-erstelle-ich-eine-candy-machine",children:[]},{level:3,title:"Wie Sie eine Candy Machine l\xF6schen",slug:"wie-sie-eine-candy-machine-loschen",children:[]},{level:3,title:"So finden Sie die Candy Machine Autorit\xE4t",slug:"so-finden-sie-die-candy-machine-autoritat",children:[]},{level:3,title:"So finden Sie Candy Machine mit der Wallet-Adresse",slug:"so-finden-sie-candy-machine-mit-der-wallet-adresse",children:[]},{level:3,title:"So finden Sie Candy Machine anhand seiner Adresse",slug:"so-finden-sie-candy-machine-anhand-seiner-adresse",children:[]},{level:3,title:"So finden Sie gepr\xE4gte NFTs von einer Candy Machine",slug:"so-finden-sie-gepragte-nfts-von-einer-candy-machine",children:[]},{level:3,title:"So f\xFCgen Sie Artikel in einer Candy Machine bei",slug:"so-fugen-sie-artikel-in-einer-candy-machine-bei",children:[]},{level:3,title:"Wie man einen NFT von einer Candy Machine pr\xE4gt",slug:"wie-man-einen-nft-von-einer-candy-machine-pragt",children:[]}]}],path:"/de/references/nfts.html",pathLocale:"/de/",extraFields:[]},{title:"Senden von Offline-Transaktionen",headers:[{level:2,title:"Transaktion unterzeichnen",slug:"transaktion-unterzeichnen",children:[]},{level:2,title:"Transaktion teilweise signieren",slug:"transaktion-teilweise-signieren",children:[]},{level:2,title:"Langlebige Nonce",slug:"langlebige-nonce",children:[{level:3,title:"Erstellen Sie ein Nonce-Konto",slug:"erstellen-sie-ein-nonce-konto",children:[]},{level:3,title:"Holen Sie sich ein Nonce-Konto",slug:"holen-sie-sich-ein-nonce-konto",children:[]},{level:3,title:"Verwenden Sie das Nonce-Konto",slug:"verwenden-sie-das-nonce-konto",children:[]}]}],path:"/de/references/offline-transactions.html",pathLocale:"/de/",extraFields:[]},{title:"Programme schreiben",headers:[{level:2,title:"So \xFCbertragen Sie SOL in einem Programm",slug:"so-ubertragen-sie-sol-in-einem-programm",children:[]},{level:2,title:"Wie bekomme ich die Uhr in ein Programm?",slug:"wie-bekomme-ich-die-uhr-in-ein-programm",children:[{level:3,title:"Passing Clock als Konto innerhalb einer Anweisung",slug:"passing-clock-als-konto-innerhalb-einer-anweisung",children:[]},{level:3,title:"Direkter Zugriff auf die Uhr innerhalb einer Anweisung",slug:"direkter-zugriff-auf-die-uhr-innerhalb-einer-anweisung",children:[]}]},{level:2,title:"So \xE4ndern Sie die Kontogr\xF6\xDFe",slug:"so-andern-sie-die-kontogro\xDFe",children:[]},{level:2,title:"Wie man einen programm\xFCbergreifenden Aufruf durchf\xFChrt",slug:"wie-man-einen-programmubergreifenden-aufruf-durchfuhrt",children:[]},{level:2,title:"So erstellen Sie einen PDA",slug:"so-erstellen-sie-einen-pda",children:[]},{level:2,title:"Wie man Konten liest",slug:"wie-man-konten-liest",children:[]},{level:2,title:"So verifizieren Sie Konten",slug:"so-verifizieren-sie-konten",children:[]},{level:2,title:"So lesen Sie mehrere Anweisungen aus einer Transaktion",slug:"so-lesen-sie-mehrere-anweisungen-aus-einer-transaktion",children:[]}],path:"/de/references/programs.html",pathLocale:"/de/",extraFields:[]},{title:"Staking",headers:[{level:2,title:"Holen Sie sich aktuelle Validatoren",slug:"holen-sie-sich-aktuelle-validatoren",children:[]},{level:2,title:"Einsatzkonto erstellen",slug:"einsatzkonto-erstellen",children:[]},{level:2,title:"Stake delegieren",slug:"stake-delegieren",children:[]},{level:2,title:"Delegator durch Validatoren abrufen",slug:"delegator-durch-validatoren-abrufen",children:[]},{level:2,title:"Stake deaktivieren",slug:"stake-deaktivieren",children:[]},{level:2,title:"Stake Auszahlen",slug:"stake-auszahlen",children:[]}],path:"/de/references/staking.html",pathLocale:"/de/",extraFields:[]},{title:"Interaktion mit Tokens",headers:[{level:2,title:"Was ben\xF6tige ich, um mit SPL-Tokens zu beginnen?",slug:"was-benotige-ich-um-mit-spl-tokens-zu-beginnen",children:[]},{level:2,title:"So erstellen Sie ein neues Token",slug:"so-erstellen-sie-ein-neues-token",children:[]},{level:2,title:"So erhalten Sie eine Token-Minze",slug:"so-erhalten-sie-eine-token-minze",children:[]},{level:2,title:"So erstellen Sie ein Token-Konto",slug:"so-erstellen-sie-ein-token-konto",children:[]},{level:2,title:"So erhalten Sie ein Token-Konto",slug:"so-erhalten-sie-ein-token-konto",children:[]},{level:2,title:"So erhalten Sie das Guthaben eines Token-Kontos",slug:"so-erhalten-sie-das-guthaben-eines-token-kontos",children:[]},{level:2,title:"Wie man Token pr\xE4gt",slug:"wie-man-token-pragt",children:[]},{level:2,title:"So \xFCbertragen Sie Token",slug:"so-ubertragen-sie-token",children:[]},{level:2,title:"Wie man Token verbrennt",slug:"wie-man-token-verbrennt",children:[]},{level:2,title:"So schlie\xDFen Sie Token-Konten",slug:"so-schlie\xDFen-sie-token-konten",children:[]},{level:2,title:"So legen Sie die Autorit\xE4t f\xFCr Token-Konten oder Mints fest",slug:"so-legen-sie-die-autoritat-fur-token-konten-oder-mints-fest",children:[]},{level:2,title:"So genehmigen Sie einen Token-Delegierten",slug:"so-genehmigen-sie-einen-token-delegierten",children:[]},{level:2,title:"So widerrufen Sie einen Token-Delegierten",slug:"so-widerrufen-sie-einen-token-delegierten",children:[]},{level:2,title:"So verwalten Sie verpackte SOL",slug:"so-verwalten-sie-verpackte-sol",children:[{level:3,title:"Token-Konto erstellen",slug:"token-konto-erstellen",children:[]},{level:3,title:"Guthaben hinzuf\xFCgen",slug:"guthaben-hinzufugen",children:[]}]},{level:2,title:"So erhalten Sie alle Token-Konten nach Eigent\xFCmer",slug:"so-erhalten-sie-alle-token-konten-nach-eigentumer",children:[]}],path:"/de/references/token.html",pathLocale:"/de/",extraFields:[]},{title:"Akun",headers:[{level:2,title:"Fakta-Fakta",slug:"fakta-fakta",children:[]},{level:2,title:"Lebih Dalam",slug:"lebih-dalam",children:[{level:3,title:"Model Akun",slug:"model-akun",children:[]},{level:3,title:"Menyewa",slug:"menyewa",children:[]}]},{level:2,title:"Sumber Lainnya",slug:"sumber-lainnya",children:[{level:3,title:"Credit",slug:"credit",children:[]}]}],path:"/id/core-concepts/accounts.html",pathLocale:"/id/",extraFields:[]},{title:"Program Derived Addresses (PDAs)",headers:[{level:2,title:"Fakta-Fakta",slug:"fakta-fakta",children:[{level:3,title:"Membuat PDA",slug:"membuat-pda",children:[]},{level:3,title:"Berinteraksi dengan PDAs",slug:"berinteraksi-dengan-pdas",children:[]}]},{level:2,title:"Sumber lainnya",slug:"sumber-lainnya",children:[]}],path:"/id/core-concepts/pdas.html",pathLocale:"/id/",extraFields:[]},{title:"Program",headers:[{level:2,title:"Fakta-Fakta",slug:"fakta-fakta",children:[]},{level:2,title:"Lebih Dalam",slug:"lebih-dalam",children:[{level:3,title:"Native Program & Solana Program Library (SPL)",slug:"native-program-solana-program-library-spl",children:[]},{level:3,title:"Menulis Program",slug:"menulis-program",children:[]},{level:3,title:"Deploy Program",slug:"deploy-program",children:[]}]},{level:2,title:"Sumber Lainnya",slug:"sumber-lainnya",children:[]}],path:"/id/core-concepts/programs.html",pathLocale:"/id/",extraFields:[]},{title:"Transaksi",headers:[{level:2,title:"Fakta-Fakta",slug:"fakta-fakta",children:[]},{level:2,title:"Lebih Dalam",slug:"lebih-dalam",children:[{level:3,title:"Biaya",slug:"biaya",children:[]}]},{level:2,title:"Sumber lainnya",slug:"sumber-lainnya",children:[]}],path:"/id/core-concepts/transactions.html",pathLocale:"/id/",extraFields:[]},{title:"Instalasi",headers:[{level:2,title:"Unduh Web3.js",slug:"unduh-web3-js",children:[{level:3,title:"Web3.js",slug:"web3-js",children:[]},{level:3,title:"SPL-Token",slug:"spl-token",children:[]},{level:3,title:"Wallet-Adapter",slug:"wallet-adapter",children:[]}]},{level:2,title:"Install Rust",slug:"install-rust",children:[]},{level:2,title:"Install CLI",slug:"install-cli",children:[{level:3,title:"macOS & Linux",slug:"macos-linux",children:[]},{level:3,title:"Windows",slug:"windows",children:[]},{level:3,title:"Membangun dari Source",slug:"membangun-dari-source",children:[]}]}],path:"/id/getting-started/installation.html",pathLocale:"/id/",extraFields:[]},{title:"Peta Akun",headers:[{level:2,title:"Menghasilkan PDA",slug:"menghasilkan-pda",children:[]},{level:2,title:"Akun Peta Tunggal",slug:"akun-peta-tunggal",children:[]}],path:"/id/guides/account-maps.html",pathLocale:"/id/",extraFields:[]},{title:"Migrasi Akun Data Program",headers:[{level:2,title:"Bagaimana cara melakukan migrasi akun data sebuah program?",slug:"bagaimana-cara-melakukan-migrasi-akun-data-sebuah-program",children:[]},{level:2,title:"Skenario",slug:"skenario",children:[]},{level:2,title:"Melakukan upgrade Akun",slug:"melakukan-upgrade-akun",children:[{level:3,title:"1. Tambahkan logika konversi akun",slug:"_1-tambahkan-logika-konversi-akun",children:[]}]},{level:2,title:"Resource",slug:"resource",children:[]}],path:"/id/guides/data-migration.html",pathLocale:"/id/",extraFields:[]},{title:"Debug Program Solana",headers:[{level:2,title:"Fakta",slug:"fakta",children:[]},{level:2,title:"Uji Runtime dan Debugging di editor",slug:"uji-runtime-dan-debugging-di-editor",children:[]},{level:2,title:"Uji Node Validator Lokal di editor",slug:"uji-node-validator-lokal-di-editor",children:[]},{level:2,title:"Uji Node Validator Lokal dari Aplikasi Klien",slug:"uji-node-validator-lokal-dari-aplikasi-klien",children:[]},{level:2,title:"Resources",slug:"resources",children:[]}],path:"/id/guides/debugging-solana-programs.html",pathLocale:"/id/",extraFields:[]},{title:"Pengujian Paritas Fitur",headers:[{level:2,title:"Fakta",slug:"fakta",children:[]},{level:2,title:"Skenario",slug:"skenario",children:[]},{level:2,title:"Status Fitur",slug:"status-fitur",children:[]},{level:2,title:"Uji Paritas",slug:"uji-paritas",children:[]},{level:2,title:"Demonstrasi Sederhana",slug:"demonstrasi-sederhana",children:[{level:3,title:"Semua fitur diaktifkan",slug:"semua-fitur-diaktifkan",children:[]},{level:3,title:"Fitur selektif dinonaktifkan",slug:"fitur-selektif-dinonaktifkan",children:[]}]},{level:2,title:"Uji Paritas Penuh",slug:"uji-paritas-penuh",children:[]},{level:2,title:"Uji Paritas Penuh Secara Terprogram",slug:"uji-paritas-penuh-secara-terprogram",children:[]},{level:2,title:"Resources",slug:"resources",children:[]}],path:"/id/guides/feature-parity-testing.html",pathLocale:"/id/",extraFields:[]},{title:"Mendapatkan Akun Program",headers:[{level:2,title:"Fakta",slug:"fakta",children:[]},{level:2,title:"Memahami lebih dalam",slug:"memahami-lebih-dalam",children:[{level:3,title:"filters",slug:"filters",children:[]},{level:3,title:"dataSlice",slug:"dataslice",children:[]}]},{level:2,title:"Resource lainnya",slug:"resource-lainnya",children:[]}],path:"/id/guides/get-program-accounts.html",pathLocale:"/id/",extraFields:[]},{title:"Mengulang Kembali transaksi",headers:[{level:2,title:"Fakta",slug:"fakta",children:[]},{level:2,title:"Perjalanan dari sebuah Transaksi",slug:"perjalanan-dari-sebuah-transaksi",children:[{level:3,title:"Bagaimana Klien Mengirimkan Transaksi",slug:"bagaimana-klien-mengirimkan-transaksi",children:[]},{level:3,title:"Bagaimana Node RPC melakukan broadcast Transaksi",slug:"bagaimana-node-rpc-melakukan-broadcast-transaksi",children:[]}]},{level:2,title:"Bagaimana Transaksi dapat dibatalkan",slug:"bagaimana-transaksi-dapat-dibatalkan",children:[{level:3,title:"Sebelum transaksi diproses",slug:"sebelum-transaksi-diproses",children:[]},{level:3,title:"Setelah transaksi diproses dan sebelum diselesaikan",slug:"setelah-transaksi-diproses-dan-sebelum-diselesaikan",children:[]}]},{level:2,title:"Menangani Transaksi yang dibatalkan",slug:"menangani-transaksi-yang-dibatalkan",children:[{level:3,title:"Menelusuri lebih dalam mengenai sendTransaction",slug:"menelusuri-lebih-dalam-mengenai-sendtransaction",children:[]}]},{level:2,title:"Menyesuaikan Logika Rebroadcast",slug:"menyesuaikan-logika-rebroadcast",children:[{level:3,title:"Dampak apabila Melewatkan Preflight",slug:"dampak-apabila-melewatkan-preflight",children:[]},{level:3,title:"Kapan Menandatangani Ulang (Re-Sign) Transaksi",slug:"kapan-menandatangani-ulang-re-sign-transaksi",children:[]}]},{level:2,title:"Ucapan Terima Kasih",slug:"ucapan-terima-kasih",children:[]}],path:"/id/guides/retrying-transactions.html",pathLocale:"/id/",extraFields:[]},{title:"Serialisasi Data",headers:[{level:2,title:"Persiapan untuk Borsh Serialization",slug:"persiapan-untuk-borsh-serialization",children:[]},{level:2,title:"Cara serialize data instruksi pada klien",slug:"cara-serialize-data-instruksi-pada-klien",children:[]},{level:2,title:"Cara deserialisasi data instruksi pada program",slug:"cara-deserialisasi-data-instruksi-pada-program",children:[]},{level:2,title:"Cara serialisasi data akun pada program",slug:"cara-serialisasi-data-akun-pada-program",children:[{level:3,title:"Pack",slug:"pack",children:[]},{level:3,title:"Serialisasi/Deserialisasi",slug:"serialisasi-deserialisasi",children:[]},{level:3,title:"Penggunaan",slug:"penggunaan",children:[]}]},{level:2,title:"Cara deserialisasi data akun pada klien",slug:"cara-deserialisasi-data-akun-pada-klien",children:[]},{level:2,title:"Pemetaan Solana TS/JS Umum",slug:"pemetaan-solana-ts-js-umum",children:[]},{level:2,title:"Metode Lanjutan",slug:"metode-lanjutan",children:[{level:3,title:"COption",slug:"coption",children:[]}]},{level:2,title:"Resource",slug:"resource",children:[]}],path:"/id/guides/serialization.html",pathLocale:"/id/",extraFields:[]},{title:"Memulai",headers:[{level:2,title:"Composability Adalah Kunci",slug:"composability-adalah-kunci",children:[]},{level:2,title:"Kontribusi",slug:"kontribusi",children:[]}],path:"/id/integrations/",pathLocale:"/id/",extraFields:[]},{title:"Jupiter",headers:[{level:3,title:"Instalasi",slug:"instalasi",children:[]},{level:3,title:"Mengambil List Token dari Jupiter",slug:"mengambil-list-token-dari-jupiter",children:[]},{level:3,title:"Loading instance dari Jupiter",slug:"loading-instance-dari-jupiter",children:[]},{level:3,title:"Mendapatkan RouteMap",slug:"mendapatkan-routemap",children:[]},{level:3,title:"Mendapatkan route dari Input dengan Output token",slug:"mendapatkan-route-dari-input-dengan-output-token",children:[]},{level:3,title:"Ekskusi Token Swap",slug:"ekskusi-token-swap",children:[]},{level:2,title:"How to use Jupiter in a React Application",slug:"how-to-use-jupiter-in-a-react-application",children:[{level:3,title:"Installation",slug:"installation",children:[]},{level:3,title:"Menambahkan Provider",slug:"menambahkan-provider",children:[]},{level:3,title:"Mendapatkan List dari Token",slug:"mendapatkan-list-dari-token",children:[]},{level:3,title:"Seting State",slug:"seting-state",children:[]},{level:3,title:"Menggunakan useJupiter react hook",slug:"menggunakan-usejupiter-react-hook",children:[]},{level:3,title:"Perform Swap",slug:"perform-swap",children:[]}]},{level:2,title:"Cara Menggunakan Jupiter API",slug:"cara-menggunakan-jupiter-api",children:[{level:3,title:"Instalasi",slug:"instalasi-1",children:[]},{level:3,title:"Mendapatkan Route Map",slug:"mendapatkan-route-map",children:[]},{level:3,title:"Mendapatkan Serialisasi Transaksi untuk perform Swap",slug:"mendapatkan-serialisasi-transaksi-untuk-perform-swap",children:[]},{level:3,title:"Eksekusi Transaksi Swap",slug:"eksekusi-transaksi-swap",children:[]}]},{level:2,title:"Sumber Lainnya",slug:"sumber-lainnya",children:[]}],path:"/id/integrations/jupiter.html",pathLocale:"/id/",extraFields:[]},{title:"Mango Markets",headers:[{level:2,title:"Cara Mendapatkan Mango Group",slug:"cara-mendapatkan-mango-group",children:[]},{level:2,title:"Membuat Akun Mango",slug:"membuat-akun-mango",children:[]},{level:2,title:"Cara Deposit USDC ke Akun Manggo",slug:"cara-deposit-usdc-ke-akun-manggo",children:[]},{level:2,title:"Cara Menempatkan Spot Order",slug:"cara-menempatkan-spot-order",children:[]},{level:2,title:"Cara Load Bids",slug:"cara-load-bids",children:[]},{level:2,title:"Cara Load Asks",slug:"cara-load-asks",children:[]},{level:2,title:"Sumber Lainnya",slug:"sumber-lainnya",children:[]}],path:"/id/integrations/mango.html",pathLocale:"/id/",extraFields:[]},{title:"Pyth",headers:[{level:2,title:"Cara Menggunakan Pyth di Client",slug:"cara-menggunakan-pyth-di-client",children:[]},{level:2,title:"Cara Memakai Pyth di Anchor",slug:"cara-memakai-pyth-di-anchor",children:[]},{level:2,title:"Sumber Lainnya",slug:"sumber-lainnya",children:[]}],path:"/id/integrations/pyth.html",pathLocale:"/id/",extraFields:[]},{title:"React Native",headers:[{level:2,title:"Cara Pakai @solana/web3.js di React Native app",slug:"cara-pakai-solana-web3-js-di-react-native-app",children:[{level:3,title:"Buat aplikasi baru",slug:"buat-aplikasi-baru",children:[]},{level:3,title:"Install dependensi",slug:"install-dependensi",children:[]},{level:3,title:"Update index.js",slug:"update-index-js",children:[]},{level:3,title:"Update metro.config.js",slug:"update-metro-config-js",children:[]},{level:3,title:"Update App.tsx",slug:"update-app-tsx",children:[]},{level:3,title:"Install cocoapods",slug:"install-cocoapods",children:[]},{level:3,title:"Start aplikasi",slug:"start-aplikasi",children:[]}]},{level:2,title:"Solana DApp Scaffold untuk React Native",slug:"solana-dapp-scaffold-untuk-react-native",children:[]},{level:2,title:"Isu Umum ketika menggunakan @solana/web3.js di aplikasi React Native",slug:"isu-umum-ketika-menggunakan-solana-web3-js-di-aplikasi-react-native",children:[{level:3,title:"Error: While trying to resolve module superstruct from file",slug:"error-while-trying-to-resolve-module-superstruct-from-file",children:[]},{level:3,title:"Error: URL.protocol is not implemented",slug:"error-url-protocol-is-not-implemented",children:[]},{level:3,title:"Error: crypto.getRandomValues() not supported",slug:"error-crypto-getrandomvalues-not-supported",children:[]}]}],path:"/id/integrations/react-native.html",pathLocale:"/id/",extraFields:[]},{title:"Serum",headers:[{level:2,title:"Cara Mendapatkan Serum Market",slug:"cara-mendapatkan-serum-market",children:[]},{level:2,title:"Mendapatkan Serum Order Books",slug:"mendapatkan-serum-order-books",children:[]},{level:2,title:"Cara Mendapatkan Open Orders",slug:"cara-mendapatkan-open-orders",children:[]}],path:"/id/integrations/serum.html",pathLocale:"/id/",extraFields:[]},{title:"Strata",headers:[{level:2,title:"Cara Membuat Token Yang Dikendalikan Penuh",slug:"cara-membuat-token-yang-dikendalikan-penuh",children:[]},{level:2,title:"Cara beli dan jual token",slug:"cara-beli-dan-jual-token",children:[]},{level:2,title:"Cara bootstrap liquidity",slug:"cara-bootstrap-liquidity",children:[]},{level:2,title:"Sumber Lainnya",slug:"sumber-lainnya",children:[]}],path:"/id/integrations/strata.html",pathLocale:"/id/",extraFields:[]},{title:"Switchboard",headers:[{level:2,title:"Data Feeds",slug:"data-feeds",children:[{level:3,title:"Cara Baca Data Dari Aggregator Feeds",slug:"cara-baca-data-dari-aggregator-feeds",children:[]},{level:3,title:"Membuat Aggregator Feed Baru",slug:"membuat-aggregator-feed-baru",children:[]},{level:3,title:"Baca data dari aggregator feeds dalam sebuah program",slug:"baca-data-dari-aggregator-feeds-dalam-sebuah-program",children:[]},{level:3,title:"Cara Membuat a Feeds Dari Publisher",slug:"cara-membuat-a-feeds-dari-publisher",children:[]}]},{level:2,title:"Oracles",slug:"oracles",children:[{level:3,title:"Create an oracle",slug:"create-an-oracle",children:[]},{level:3,title:"Menjalan Oracle di lokal",slug:"menjalan-oracle-di-lokal",children:[]},{level:3,title:"Konfigurasi Oracle",slug:"konfigurasi-oracle",children:[]}]},{level:2,title:"Fungsi Random yang Terverifikasi - Verifiable Random Function(VRF)",slug:"fungsi-random-yang-terverifikasi-verifiable-random-function-vrf",children:[{level:3,title:"Membaca akun VRF",slug:"membaca-akun-vrf",children:[]},{level:3,title:"Membuat Sebuah Akun VRF",slug:"membuat-sebuah-akun-vrf",children:[]},{level:3,title:"Request Randomness dari akun vrf",slug:"request-randomness-dari-akun-vrf",children:[]}]},{level:2,title:"Sumber",slug:"sumber",children:[{level:3,title:"API dan Librari",slug:"api-dan-librari",children:[]},{level:3,title:"Contoh",slug:"contoh",children:[]},{level:3,title:"Informasi Lebih Lanjut",slug:"informasi-lebih-lanjut",children:[]}]}],path:"/id/integrations/switchboard.html",pathLocale:"/id/",extraFields:[]},{title:"web3Auth (Torus Wallet)",headers:[{level:2,title:"Apakah itu wallet?",slug:"apakah-itu-wallet",children:[]},{level:2,title:"Social Login di Solana",slug:"social-login-di-solana",children:[]},{level:2,title:"Panduan Integrasi",slug:"panduan-integrasi",children:[{level:3,title:"Instal Dependensi",slug:"instal-dependensi",children:[]},{level:3,title:"Import SDK dan initialize",slug:"import-sdk-dan-initialize",children:[]},{level:3,title:"Trigger user login\u200B",slug:"trigger-user-login\u200B",children:[]},{level:3,title:"Menggunakan torus instance untuk mengambil detil akun user",slug:"menggunakan-torus-instance-untuk-mengambil-detil-akun-user",children:[]},{level:3,title:"Menggunakan Torus Solana API untuk sign sebuah pesan.",slug:"menggunakan-torus-solana-api-untuk-sign-sebuah-pesan",children:[]},{level:3,title:"Menggunakan torus Solana API untuk mengirim transaksi.\u200B",slug:"menggunakan-torus-solana-api-untuk-mengirim-transaksi-\u200B",children:[]},{level:3,title:"Topup",slug:"topup",children:[]},{level:3,title:"Logout",slug:"logout",children:[]}]},{level:2,title:"Sumber",slug:"sumber",children:[]}],path:"/id/integrations/web3auth.html",pathLocale:"/id/",extraFields:[]},{title:"Akun",headers:[{level:2,title:"Bagaimana cara membuat sebuah sistem akun",slug:"bagaimana-cara-membuat-sebuah-sistem-akun",children:[]},{level:2,title:"Bagaimana cara mengkalkulasi biaya akun",slug:"bagaimana-cara-mengkalkulasi-biaya-akun",children:[]},{level:2,title:"Bagaimana cara membuat akun dengan seeds",slug:"bagaimana-cara-membuat-akun-dengan-seeds",children:[{level:3,title:"Generate",slug:"generate",children:[]},{level:3,title:"Create",slug:"create",children:[]},{level:3,title:"Transfer",slug:"transfer",children:[]}]},{level:2,title:"Bagaimana cara membuat PDAs",slug:"bagaimana-cara-membuat-pdas",children:[{level:3,title:"Menghasilkan sebuah PDA",slug:"menghasilkan-sebuah-pda",children:[]},{level:3,title:"Membuat sebuah PDA",slug:"membuat-sebuah-pda",children:[]}]},{level:2,title:"Bagaimana cara untuk sign sebuah PDA",slug:"bagaimana-cara-untuk-sign-sebuah-pda",children:[{level:3,title:"Program",slug:"program-1",children:[]},{level:3,title:"Client",slug:"client-1",children:[]}]},{level:2,title:"Bagaimana Cara Mendapatkan Program Akun",slug:"bagaimana-cara-mendapatkan-program-akun",children:[]},{level:2,title:"Bagaimana Cara Menutup Akun",slug:"bagaimana-cara-menutup-akun",children:[]},{level:2,title:"Bagaimana Cara Mendapatkan Balance Akun",slug:"bagaimana-cara-mendapatkan-balance-akun",children:[]}],path:"/id/references/accounts.html",pathLocale:"/id/",extraFields:[]},{title:"Mengirim Transaksi",headers:[{level:2,title:"Bagaimana cara mengirim SOL",slug:"bagaimana-cara-mengirim-sol",children:[]},{level:2,title:"Bagimana cara mengirim SPL-Tokens",slug:"bagimana-cara-mengirim-spl-tokens",children:[]},{level:2,title:"Bagaimana cara mengkalkulasi biaya transaksi",slug:"bagaimana-cara-mengkalkulasi-biaya-transaksi",children:[{level:3,title:"getEstimatedFee",slug:"getestimatedfee",children:[]},{level:3,title:"getFeeForMessage",slug:"getfeeformessage",children:[]}]},{level:2,title:"Bagaimana menambah catatan ke dalam sebuah transaksi",slug:"bagaimana-menambah-catatan-ke-dalam-sebuah-transaksi",children:[]},{level:2,title:"Bagaimana cara merubah perhitungan budget untuk sebuah transaksi",slug:"bagaimana-cara-merubah-perhitungan-budget-untuk-sebuah-transaksi",children:[]}],path:"/id/references/basic-transactions.html",pathLocale:"/id/",extraFields:[]},{title:"Keypairs & Wallets",headers:[{level:2,title:"Bagaimana cara membuat sebuah Keypair baru",slug:"bagaimana-cara-membuat-sebuah-keypair-baru",children:[]},{level:2,title:"Bagaimana cara me-restore sebuah Keypair dari sebuah secret",slug:"bagaimana-cara-me-restore-sebuah-keypair-dari-sebuah-secret",children:[]},{level:2,title:"Bagaimana cara menverifikasi sebuah Keypair",slug:"bagaimana-cara-menverifikasi-sebuah-keypair",children:[]},{level:2,title:"Bagaimana cara untuk check jika sebuah public key telah terhubung dengan sebuah private key",slug:"bagaimana-cara-untuk-check-jika-sebuah-public-key-telah-terhubung-dengan-sebuah-private-key",children:[]},{level:2,title:"Bagaimana cara membuat mnemonic phrase",slug:"bagaimana-cara-membuat-mnemonic-phrase",children:[]},{level:2,title:"Bagaimana cara restore sebuah Keypair dari sebuah mnemonic phrase",slug:"bagaimana-cara-restore-sebuah-keypair-dari-sebuah-mnemonic-phrase",children:[]},{level:2,title:"Bagaimana cara membuat sebuah vanity address",slug:"bagaimana-cara-membuat-sebuah-vanity-address",children:[]},{level:2,title:"Bagaimana cara untuk sign dan menverifikasi messages dalam wallet",slug:"bagaimana-cara-untuk-sign-dan-menverifikasi-messages-dalam-wallet",children:[]},{level:2,title:"Bagaimana cara mengkoneksi ke sebuah wallet",slug:"bagaimana-cara-mengkoneksi-ke-sebuah-wallet",children:[{level:3,title:"React",slug:"react",children:[]},{level:3,title:"Vue",slug:"vue",children:[]},{level:3,title:"Svelte",slug:"svelte",children:[]}]}],path:"/id/references/keypairs-and-wallets.html",pathLocale:"/id/",extraFields:[]},{title:"Development Lokal",headers:[{level:2,title:"Memulai Validator Lokal",slug:"memulai-validator-lokal",children:[]},{level:2,title:"Menghubungkan Ke Environment",slug:"menghubungkan-ke-environment",children:[]},{level:2,title:"Subskripsi Event",slug:"subskripsi-event",children:[]},{level:2,title:"Mendapatkan Tes SOL",slug:"mendapatkan-tes-sol",children:[]},{level:2,title:"Menggunakan Akun dan Program Mainnet",slug:"menggunakan-akun-dan-program-mainnet",children:[{level:3,title:"Cara memuat akun dari mainnet",slug:"cara-memuat-akun-dari-mainnet",children:[]},{level:3,title:"Cara memuat program dari mainnet",slug:"cara-memuat-program-dari-mainnet",children:[]}]}],path:"/id/references/local-development.html",pathLocale:"/id/",extraFields:[]},{title:"Name Service",headers:[{level:2,title:"Name registry",slug:"name-registry",children:[]},{level:2,title:"Resolving SOL domains",slug:"resolving-sol-domains",children:[]},{level:2,title:"Reverse look up",slug:"reverse-look-up",children:[]},{level:2,title:"Subdomain look up",slug:"subdomain-look-up",children:[]},{level:2,title:"Menemukan semua domain name yang dimiliki oleh suatu public key",slug:"menemukan-semua-domain-name-yang-dimiliki-oleh-suatu-public-key",children:[]},{level:2,title:"Resolve Twitter handle",slug:"resolve-twitter-handle",children:[]},{level:2,title:"Reverse look up suatu Twitter handle",slug:"reverse-look-up-suatu-twitter-handle",children:[]}],path:"/id/references/name-service.html",pathLocale:"/id/",extraFields:[]},{title:"NFT",headers:[{level:2,title:"Cara membuat NFT",slug:"cara-membuat-nft",children:[{level:3,title:"Upload to Arweave",slug:"upload-to-arweave",children:[]},{level:3,title:"Mint NFT-nya",slug:"mint-nft-nya",children:[]}]},{level:2,title:"Cara Mendapatkan Metadata NFT",slug:"cara-mendapatkan-metadata-nft",children:[]},{level:2,title:"Cara Mengetahui Pemilik Sebuah NFT",slug:"cara-mengetahui-pemilik-sebuah-nft",children:[]},{level:2,title:"Cara untuk mengambil NFT Mint Addresses",slug:"cara-untuk-mengambil-nft-mint-addresses",children:[{level:3,title:"Candy Machine V1",slug:"candy-machine-v1",children:[]},{level:3,title:"Candy Machine V2",slug:"candy-machine-v2",children:[]}]},{level:2,title:"Cara Mendapatkan Semua NFT dari Suatu Wallet",slug:"cara-mendapatkan-semua-nft-dari-suatu-wallet",children:[]}],path:"/id/references/nfts.html",pathLocale:"/id/",extraFields:[]},{title:"Mengirim Transaksi Offline",headers:[{level:2,title:"Sign Transaksi",slug:"sign-transaksi",children:[]},{level:2,title:"Sign Transaksi Sebagian",slug:"sign-transaksi-sebagian",children:[]},{level:2,title:"Durable Nonce",slug:"durable-nonce",children:[{level:3,title:"Membuat Akun Nonce",slug:"membuat-akun-nonce",children:[]},{level:3,title:"Mendapatkan Akun Nonce",slug:"mendapatkan-akun-nonce",children:[]},{level:3,title:"Menggunakan Akun Nonce",slug:"menggunakan-akun-nonce",children:[]}]}],path:"/id/references/offline-transactions.html",pathLocale:"/id/",extraFields:[]},{title:"Menulis Program",headers:[{level:2,title:"Bagaimana cara mentransfer SOL di dalam sebuah program",slug:"bagaimana-cara-mentransfer-sol-di-dalam-sebuah-program",children:[]},{level:2,title:"Bagaimana cara mendapatkan waktu dalam sebuah program",slug:"bagaimana-cara-mendapatkan-waktu-dalam-sebuah-program",children:[{level:3,title:"Passing Waktu sebagai sebuah account di dalam sebuah instruksi",slug:"passing-waktu-sebagai-sebuah-account-di-dalam-sebuah-instruksi",children:[]},{level:3,title:"Mengakses Waktu secara langsung di dalam sebuah instruksi",slug:"mengakses-waktu-secara-langsung-di-dalam-sebuah-instruksi",children:[]}]},{level:2,title:"Bagaimana cara merubah size akun",slug:"bagaimana-cara-merubah-size-akun",children:[]},{level:2,title:"Bagaimana cara untuk membuat program Cross Invocation",slug:"bagaimana-cara-untuk-membuat-program-cross-invocation",children:[]},{level:2,title:"Bagaimana cara membuat sebuah PDA",slug:"bagaimana-cara-membuat-sebuah-pda",children:[]},{level:2,title:"Bagaimana cara membaca akun",slug:"bagaimana-cara-membaca-akun",children:[]},{level:2,title:"Bagaimana cara men-verifikasi akun",slug:"bagaimana-cara-men-verifikasi-akun",children:[]},{level:2,title:"Bagaimana cara membaca beberapa instruksi dalam sebuah transaksi",slug:"bagaimana-cara-membaca-beberapa-instruksi-dalam-sebuah-transaksi",children:[]}],path:"/id/references/programs.html",pathLocale:"/id/",extraFields:[]},{title:"Staking",headers:[{level:2,title:"Mendapatkan Validators",slug:"mendapatkan-validators",children:[]},{level:2,title:"Membuat Stake Account",slug:"membuat-stake-account",children:[]},{level:2,title:"Mendelegasi Stake",slug:"mendelegasi-stake",children:[]},{level:2,title:"Mendapatkan Delegator dengan Validator",slug:"mendapatkan-delegator-dengan-validator",children:[]},{level:2,title:"Deactivate Stake",slug:"deactivate-stake",children:[]},{level:2,title:"Withdraw Stake",slug:"withdraw-stake",children:[]}],path:"/id/references/staking.html",pathLocale:"/id/",extraFields:[]},{title:"Interaksi dengan Token",headers:[{level:2,title:"Apa yang saya perlukan untuk memulai dengan SPL-Tokens?",slug:"apa-yang-saya-perlukan-untuk-memulai-dengan-spl-tokens",children:[]},{level:2,title:"Bagaimana cara untuk membuat sebuah Token baru",slug:"bagaimana-cara-untuk-membuat-sebuah-token-baru",children:[]},{level:2,title:"Bagaimana cara mendapatkan sebuah token mint",slug:"bagaimana-cara-mendapatkan-sebuah-token-mint",children:[]},{level:2,title:"Bagaimana cara membuat sebuah akun token",slug:"bagaimana-cara-membuat-sebuah-akun-token",children:[]},{level:2,title:"Bagaimana cara mendapatkan sebuah Akun Token",slug:"bagaimana-cara-mendapatkan-sebuah-akun-token",children:[]},{level:2,title:"Bagaimana cara mendapatkan saldo dari akun token",slug:"bagaimana-cara-mendapatkan-saldo-dari-akun-token",children:[]},{level:2,title:"Bagaimana cara untuk me-mint token-token",slug:"bagaimana-cara-untuk-me-mint-token-token",children:[]},{level:2,title:"Bagaimana cara mentransfer token-token",slug:"bagaimana-cara-mentransfer-token-token",children:[]},{level:2,title:"Bagaimana cara membakar token-token",slug:"bagaimana-cara-membakar-token-token",children:[]},{level:2,title:"Bagaimana cara menutup akun-akun token",slug:"bagaimana-cara-menutup-akun-akun-token",children:[]},{level:2,title:"Bagaimana cara untuk men-set authority pada akun-akun token atau mints",slug:"bagaimana-cara-untuk-men-set-authority-pada-akun-akun-token-atau-mints",children:[]},{level:2,title:"Bagaimana cara untuk men-approve delegasi sebuah token",slug:"bagaimana-cara-untuk-men-approve-delegasi-sebuah-token",children:[]},{level:2,title:"Bagaimana cara menarik kembali delegasi token",slug:"bagaimana-cara-menarik-kembali-delegasi-token",children:[]},{level:2,title:"Bagaimana cara mengature wrapped SOL",slug:"bagaimana-cara-mengature-wrapped-sol",children:[{level:3,title:"Membuat Akun Token",slug:"membuat-akun-token",children:[]},{level:3,title:"Menambah Saldo",slug:"menambah-saldo",children:[]}]},{level:2,title:"Bagaimana cara mendapatkan semua akun-akun token sebagai pemilik",slug:"bagaimana-cara-mendapatkan-semua-akun-akun-token-sebagai-pemilik",children:[]}],path:"/id/references/token.html",pathLocale:"/id/",extraFields:[]},{title:"Accounts",headers:[{level:2,title:"Facts",slug:"facts",children:[]},{level:2,title:"Deep Dive",slug:"deep-dive",children:[{level:3,title:"Account Model",slug:"account-model",children:[]},{level:3,title:"Rent",slug:"rent",children:[]}]},{level:2,title:"Other Resources",slug:"other-resources",children:[{level:3,title:"Credit",slug:"credit",children:[]}]}],path:"/kr/core-concepts/accounts.html",pathLocale:"/kr/",extraFields:[]},{title:"Program Derived Addresses (PDAs)",headers:[{level:2,title:"Facts",slug:"facts",children:[]},{level:2,title:"Deep Dive",slug:"deep-dive",children:[{level:3,title:"Generating PDAs",slug:"generating-pdas",children:[]},{level:3,title:"Interacting with PDAs",slug:"interacting-with-pdas",children:[]}]},{level:2,title:"Other Resources",slug:"other-resources",children:[]}],path:"/kr/core-concepts/pdas.html",pathLocale:"/kr/",extraFields:[]},{title:"Programs",headers:[{level:2,title:"Facts",slug:"facts",children:[]},{level:2,title:"Deep Dive",slug:"deep-dive",children:[{level:3,title:"Native Programs & The Solana Program Library (SPL)",slug:"native-programs-the-solana-program-library-spl",children:[]},{level:3,title:"Writing Programs",slug:"writing-programs",children:[]},{level:3,title:"Deploying Programs",slug:"deploying-programs",children:[]}]},{level:2,title:"Other Resources",slug:"other-resources",children:[]}],path:"/kr/core-concepts/programs.html",pathLocale:"/kr/",extraFields:[]},{title:"Transactions",headers:[{level:2,title:"Facts",slug:"facts",children:[]},{level:2,title:"Deep Dive",slug:"deep-dive",children:[{level:3,title:"Fees",slug:"fees",children:[]}]},{level:2,title:"Other Resources",slug:"other-resources",children:[]}],path:"/kr/core-concepts/transactions.html",pathLocale:"/kr/",extraFields:[]},{title:"Installation",headers:[{level:2,title:"Install Web3.js",slug:"install-web3-js",children:[{level:3,title:"Web3.js",slug:"web3-js",children:[]},{level:3,title:"SPL-Token",slug:"spl-token",children:[]},{level:3,title:"Wallet-Adapter",slug:"wallet-adapter",children:[]}]},{level:2,title:"Install Rust",slug:"install-rust",children:[]},{level:2,title:"Install CLI",slug:"install-cli",children:[{level:3,title:"macOS & Linux",slug:"macos-linux",children:[]},{level:3,title:"Windows",slug:"windows",children:[]},{level:3,title:"Build From Source",slug:"build-from-source",children:[]}]}],path:"/kr/getting-started/installation.html",pathLocale:"/kr/",extraFields:[]},{title:"Account Maps",headers:[{level:2,title:"Deriving PDAs",slug:"deriving-pdas",children:[]},{level:2,title:"Single Map Account",slug:"single-map-account",children:[]}],path:"/kr/guides/account-maps.html",pathLocale:"/kr/",extraFields:[]},{title:"Migrating Program Data Accounts",headers:[{level:2,title:"How can you migrate a program's data accounts?",slug:"how-can-you-migrate-a-program-s-data-accounts",children:[]},{level:2,title:"Scenario",slug:"scenario",children:[]},{level:2,title:"Upgrading the Account",slug:"upgrading-the-account",children:[{level:3,title:"1. Add account conversion logic",slug:"_1-add-account-conversion-logic",children:[]}]},{level:2,title:"Resources",slug:"resources",children:[]}],path:"/kr/guides/data-migration.html",pathLocale:"/kr/",extraFields:[]},{title:"Debugging Solana Programs",headers:[{level:2,title:"Facts",slug:"facts",children:[]},{level:2,title:"Runtime Testing and Debugging in editor",slug:"runtime-testing-and-debugging-in-editor",children:[]},{level:2,title:"Local Validator Node Testing in editor",slug:"local-validator-node-testing-in-editor",children:[]},{level:2,title:"Local Validator Node Testing from Client Apps",slug:"local-validator-node-testing-from-client-apps",children:[]},{level:2,title:"Resources",slug:"resources",children:[]}],path:"/kr/guides/debugging-solana-programs.html",pathLocale:"/kr/",extraFields:[]},{title:"Feature Parity Testing",headers:[{level:2,title:"Facts",slug:"facts",children:[]},{level:2,title:"Scenario",slug:"scenario",children:[]},{level:2,title:"Feature Status",slug:"feature-status",children:[]},{level:2,title:"Parity Testing",slug:"parity-testing",children:[]},{level:2,title:"Simple Demonstration",slug:"simple-demonstration",children:[{level:3,title:"All features activated",slug:"all-features-activated",children:[]},{level:3,title:"Selective features deactivated",slug:"selective-features-deactivated",children:[]}]},{level:2,title:"Full Parity Testing",slug:"full-parity-testing",children:[]},{level:2,title:"Full Parity Testing Programmatically",slug:"full-parity-testing-programmatically",children:[]},{level:2,title:"Resources",slug:"resources",children:[]}],path:"/kr/guides/feature-parity-testing.html",pathLocale:"/kr/",extraFields:[]},{title:"Get Program Accounts",headers:[{level:2,title:"Facts",slug:"facts",children:[]},{level:2,title:"Deep Dive",slug:"deep-dive",children:[{level:3,title:"filters",slug:"filters",children:[]},{level:3,title:"dataSlice",slug:"dataslice",children:[]}]},{level:2,title:"Other Resources",slug:"other-resources",children:[]}],path:"/kr/guides/get-program-accounts.html",pathLocale:"/kr/",extraFields:[]},{title:"Retrying Transactions",headers:[{level:2,title:"Facts",slug:"facts",children:[]},{level:2,title:"The Journey of a Transaction",slug:"the-journey-of-a-transaction",children:[{level:3,title:"How Clients Submit Transactions",slug:"how-clients-submit-transactions",children:[]},{level:3,title:"How RPC Nodes Broadcast Transactions",slug:"how-rpc-nodes-broadcast-transactions",children:[]}]},{level:2,title:"How Transactions Get Dropped",slug:"how-transactions-get-dropped",children:[{level:3,title:"Before a transaction is processed",slug:"before-a-transaction-is-processed",children:[]},{level:3,title:"After a transaction is processed and before it is finalized",slug:"after-a-transaction-is-processed-and-before-it-is-finalized",children:[]}]},{level:2,title:"Handling Dropped Transactions",slug:"handling-dropped-transactions",children:[{level:3,title:"An In-Depth Look at sendTransaction",slug:"an-in-depth-look-at-sendtransaction",children:[]}]},{level:2,title:"Customizing Rebroadcast Logic",slug:"customizing-rebroadcast-logic",children:[{level:3,title:"The Cost of Skipping Preflight",slug:"the-cost-of-skipping-preflight",children:[]},{level:3,title:"When to Re-Sign Transactions",slug:"when-to-re-sign-transactions",children:[]}]},{level:2,title:"Acknowledgements",slug:"acknowledgements",children:[]}],path:"/kr/guides/retrying-transactions.html",pathLocale:"/kr/",extraFields:[]},{title:"Serializing Data",headers:[{level:2,title:"Setting up for Borsh Serialization",slug:"setting-up-for-borsh-serialization",children:[]},{level:2,title:"How to serialize instruction data on the client",slug:"how-to-serialize-instruction-data-on-the-client",children:[]},{level:2,title:"How to deserialize instruction data on the program",slug:"how-to-deserialize-instruction-data-on-the-program",children:[]},{level:2,title:"How to serialize account data on the program",slug:"how-to-serialize-account-data-on-the-program",children:[{level:3,title:"Pack",slug:"pack",children:[]},{level:3,title:"Serialization/Deserialization",slug:"serialization-deserialization",children:[]},{level:3,title:"Usage",slug:"usage",children:[]}]},{level:2,title:"How to deserialize account data on the client",slug:"how-to-deserialize-account-data-on-the-client",children:[]},{level:2,title:"Common Solana TS/JS Mappings",slug:"common-solana-ts-js-mappings",children:[]},{level:2,title:"Advanced Constructs",slug:"advanced-constructs",children:[{level:3,title:"COption",slug:"coption",children:[]}]},{level:2,title:"Resources",slug:"resources",children:[]}],path:"/kr/guides/serialization.html",pathLocale:"/kr/",extraFields:[]},{title:"Accounts",headers:[{level:2,title:"How to create a system account",slug:"how-to-create-a-system-account",children:[]},{level:2,title:"How to calculate account cost",slug:"how-to-calculate-account-cost",children:[]},{level:2,title:"How to create accounts with seeds",slug:"how-to-create-accounts-with-seeds",children:[{level:3,title:"Generate",slug:"generate",children:[]},{level:3,title:"Create",slug:"create",children:[]},{level:3,title:"Transfer",slug:"transfer",children:[]}]},{level:2,title:"How to create PDAs",slug:"how-to-create-pdas",children:[{level:3,title:"Generate a PDA",slug:"generate-a-pda",children:[]},{level:3,title:"Create a PDA",slug:"create-a-pda",children:[]}]},{level:2,title:"How to sign with a PDA",slug:"how-to-sign-with-a-pda",children:[{level:3,title:"Program",slug:"program-1",children:[]},{level:3,title:"Client",slug:"client-1",children:[]}]},{level:2,title:"How to get program accounts",slug:"how-to-get-program-accounts",children:[]},{level:2,title:"How to close accounts",slug:"how-to-close-accounts",children:[]},{level:2,title:"How to get account balance",slug:"how-to-get-account-balance",children:[]}],path:"/kr/references/accounts.html",pathLocale:"/kr/",extraFields:[]},{title:"Sending Transactions",headers:[{level:2,title:"How to send SOL",slug:"how-to-send-sol",children:[]},{level:2,title:"How to send SPL-Tokens",slug:"how-to-send-spl-tokens",children:[]},{level:2,title:"How to calculate transaction cost",slug:"how-to-calculate-transaction-cost",children:[{level:3,title:"getEstimatedFee",slug:"getestimatedfee",children:[]},{level:3,title:"getFeeForMessage",slug:"getfeeformessage",children:[]}]},{level:2,title:"How to add a memo to a transaction",slug:"how-to-add-a-memo-to-a-transaction",children:[]},{level:2,title:"How to change compute budget, fee, & priority for a transaction",slug:"how-to-change-compute-budget-fee-priority-for-a-transaction",children:[]}],path:"/kr/references/basic-transactions.html",pathLocale:"/kr/",extraFields:[]},{title:"Keypairs and Wallets",headers:[{level:2,title:"How to generate a new Keypair",slug:"how-to-generate-a-new-keypair",children:[]},{level:2,title:"How to restore a Keypair from a secret",slug:"how-to-restore-a-keypair-from-a-secret",children:[]},{level:2,title:"How to verify a Keypair",slug:"how-to-verify-a-keypair",children:[]},{level:2,title:"How to check if a public key has an associated private key",slug:"how-to-check-if-a-public-key-has-an-associated-private-key",children:[]},{level:2,title:"How to generate a mnemonic phrase",slug:"how-to-generate-a-mnemonic-phrase",children:[]},{level:2,title:"How to restore a Keypair from a mnemonic phrase",slug:"how-to-restore-a-keypair-from-a-mnemonic-phrase",children:[]},{level:2,title:"How to generate a vanity address",slug:"how-to-generate-a-vanity-address",children:[]},{level:2,title:"How to sign and verify messages with wallets",slug:"how-to-sign-and-verify-messages-with-wallets",children:[]},{level:2,title:"How to connect to a wallet",slug:"how-to-connect-to-a-wallet",children:[{level:3,title:"React",slug:"react",children:[]},{level:3,title:"Vue",slug:"vue",children:[]},{level:3,title:"Svelte",slug:"svelte",children:[]}]}],path:"/kr/references/keypairs-and-wallets.html",pathLocale:"/kr/",extraFields:[]},{title:"Local Development",headers:[{level:2,title:"Starting a Local Validator",slug:"starting-a-local-validator",children:[]},{level:2,title:"Connecting to Environments",slug:"connecting-to-environments",children:[]},{level:2,title:"Subscribing to Events",slug:"subscribing-to-events",children:[]},{level:2,title:"Getting Test SOL",slug:"getting-test-sol",children:[]},{level:2,title:"Using Mainnet Accounts and Programs",slug:"using-mainnet-accounts-and-programs",children:[{level:3,title:"How to load accounts from mainnet",slug:"how-to-load-accounts-from-mainnet",children:[]},{level:3,title:"How to load programs from mainnet",slug:"how-to-load-programs-from-mainnet",children:[]}]}],path:"/kr/references/local-development.html",pathLocale:"/kr/",extraFields:[]},{title:"Name Service",headers:[{level:2,title:"Name registry",slug:"name-registry",children:[]},{level:2,title:"Resolving SOL domains",slug:"resolving-sol-domains",children:[]},{level:2,title:"Reverse look up",slug:"reverse-look-up",children:[]},{level:2,title:"Subdomain look up",slug:"subdomain-look-up",children:[]},{level:2,title:"Find all the domain names owned by a public key",slug:"find-all-the-domain-names-owned-by-a-public-key",children:[]},{level:2,title:"Resolve a Twitter handle",slug:"resolve-a-twitter-handle",children:[]},{level:2,title:"Reverse look up of a Twitter handle",slug:"reverse-look-up-of-a-twitter-handle",children:[]}],path:"/kr/references/name-service.html",pathLocale:"/kr/",extraFields:[]},{title:"NFTs",headers:[{level:2,title:"How to create an NFT",slug:"how-to-create-an-nft",children:[{level:3,title:"Upload to Arweave",slug:"upload-to-arweave",children:[]},{level:3,title:"Mint the NFT",slug:"mint-the-nft",children:[]}]},{level:2,title:"How to get NFT Metadata",slug:"how-to-get-nft-metadata",children:[]},{level:2,title:"How to get the owner of an NFT",slug:"how-to-get-the-owner-of-an-nft",children:[]},{level:2,title:"How to get NFT Mint Addresses",slug:"how-to-get-nft-mint-addresses",children:[{level:3,title:"Candy Machine V1",slug:"candy-machine-v1",children:[]},{level:3,title:"Candy Machine V2",slug:"candy-machine-v2",children:[]}]},{level:2,title:"How to get all NFTs from a wallet?",slug:"how-to-get-all-nfts-from-a-wallet",children:[]}],path:"/kr/references/nfts.html",pathLocale:"/kr/",extraFields:[]},{title:"Sending Offline Transactions",headers:[{level:2,title:"Sign Transaction",slug:"sign-transaction",children:[]},{level:2,title:"Partial Sign Transaction",slug:"partial-sign-transaction",children:[]},{level:2,title:"Durable Nonce",slug:"durable-nonce",children:[{level:3,title:"Create Nonce Account",slug:"create-nonce-account",children:[]},{level:3,title:"Get Nonce Account",slug:"get-nonce-account",children:[]},{level:3,title:"Use Nonce Account",slug:"use-nonce-account",children:[]}]}],path:"/kr/references/offline-transactions.html",pathLocale:"/kr/",extraFields:[]},{title:"Writing Programs",headers:[{level:2,title:"How to transfer SOL in a program",slug:"how-to-transfer-sol-in-a-program",children:[]},{level:2,title:"How to get clock in a program",slug:"how-to-get-clock-in-a-program",children:[{level:3,title:"Passing Clock as an account inside an instruction",slug:"passing-clock-as-an-account-inside-an-instruction",children:[]},{level:3,title:"Accessing Clock directly inside an instruction",slug:"accessing-clock-directly-inside-an-instruction",children:[]}]},{level:2,title:"How to change account size",slug:"how-to-change-account-size",children:[]},{level:2,title:"How to do Cross Program Invocation",slug:"how-to-do-cross-program-invocation",children:[]},{level:2,title:"How to create a PDA",slug:"how-to-create-a-pda",children:[]},{level:2,title:"How to read accounts",slug:"how-to-read-accounts",children:[]},{level:2,title:"How to verify accounts",slug:"how-to-verify-accounts",children:[]},{level:2,title:"How to read multiple instructions from a transaction",slug:"how-to-read-multiple-instructions-from-a-transaction",children:[]}],path:"/kr/references/programs.html",pathLocale:"/kr/",extraFields:[]},{title:"Staking",headers:[{level:2,title:"Get Current Validators",slug:"get-current-validators",children:[]},{level:2,title:"Create Stake Account",slug:"create-stake-account",children:[]},{level:2,title:"Delegate Stake",slug:"delegate-stake",children:[]},{level:2,title:"Get Delegator by Validators",slug:"get-delegator-by-validators",children:[]},{level:2,title:"Deactivate Stake",slug:"deactivate-stake",children:[]},{level:2,title:"Withdraw Stake",slug:"withdraw-stake",children:[]}],path:"/kr/references/staking.html",pathLocale:"/kr/",extraFields:[]},{title:"Interacting with Tokens",headers:[{level:2,title:"What do I need to get started with SPL-Tokens?",slug:"what-do-i-need-to-get-started-with-spl-tokens",children:[]},{level:2,title:"How to create a new Token",slug:"how-to-create-a-new-token",children:[]},{level:2,title:"How to get a token mint",slug:"how-to-get-a-token-mint",children:[]},{level:2,title:"How to create a token account",slug:"how-to-create-a-token-account",children:[]},{level:2,title:"How to get a Token Account",slug:"how-to-get-a-token-account",children:[]},{level:2,title:"How to get a token account's balance",slug:"how-to-get-a-token-account-s-balance",children:[]},{level:2,title:"How to mint tokens",slug:"how-to-mint-tokens",children:[]},{level:2,title:"How to transfer tokens",slug:"how-to-transfer-tokens",children:[]},{level:2,title:"How to burn tokens",slug:"how-to-burn-tokens",children:[]},{level:2,title:"How to close token accounts",slug:"how-to-close-token-accounts",children:[]},{level:2,title:"How to set authority on token accounts or mints",slug:"how-to-set-authority-on-token-accounts-or-mints",children:[]},{level:2,title:"How to approve a token delegate",slug:"how-to-approve-a-token-delegate",children:[]},{level:2,title:"How to revoke a token delegate",slug:"how-to-revoke-a-token-delegate",children:[]},{level:2,title:"How to manage wrapped SOL",slug:"how-to-manage-wrapped-sol",children:[{level:3,title:"Create Token Account",slug:"create-token-account",children:[]},{level:3,title:"Add Balance",slug:"add-balance",children:[]}]},{level:2,title:"How to get all token accounts by owner",slug:"how-to-get-all-token-accounts-by-owner",children:[]}],path:"/kr/references/token.html",pathLocale:"/kr/",extraFields:[]},{title:"Accounts",headers:[{level:2,title:"\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49",slug:"\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49",children:[]},{level:2,title:"\u0E25\u0E07\u0E25\u0E36\u0E01",slug:"\u0E25\u0E07\u0E25\u0E36\u0E01",children:[{level:3,title:"Account Model",slug:"account-model",children:[]},{level:3,title:"Rent (\u0E04\u0E48\u0E32\u0E40\u0E0A\u0E48\u0E32)",slug:"rent-\u0E04\u0E48\u0E32\u0E40\u0E0A\u0E48\u0E32",children:[]}]},{level:2,title:"\u0E41\u0E2B\u0E25\u0E48\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19",slug:"\u0E41\u0E2B\u0E25\u0E48\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19",children:[{level:3,title:"Credit",slug:"credit",children:[]}]}],path:"/th/core-concepts/accounts.html",pathLocale:"/th/",extraFields:[]},{title:"Program Derived Addresses (PDAs)",headers:[{level:2,title:"\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49",slug:"\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49",children:[]},{level:2,title:"\u0E25\u0E07\u0E25\u0E36\u0E01",slug:"\u0E25\u0E07\u0E25\u0E36\u0E01",children:[{level:3,title:"\u0E01\u0E32\u0E23\u0E2A\u0E23\u0E49\u0E32\u0E07 PDAs",slug:"\u0E01\u0E32\u0E23\u0E2A\u0E23\u0E49\u0E32\u0E07-pdas",children:[]},{level:3,title:"\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19 PDAs",slug:"\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19-pdas",children:[]}]},{level:2,title:"\u0E41\u0E2B\u0E25\u0E48\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19",slug:"\u0E41\u0E2B\u0E25\u0E48\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19",children:[]}],path:"/th/core-concepts/pdas.html",pathLocale:"/th/",extraFields:[]},{title:"Programs",headers:[{level:2,title:"\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49",slug:"\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49",children:[]},{level:2,title:"\u0E25\u0E07\u0E25\u0E36\u0E01",slug:"\u0E25\u0E07\u0E25\u0E36\u0E01",children:[{level:3,title:"Native Programs \u0E41\u0E25\u0E30 The Solana Program Library (SPL)",slug:"native-programs-\u0E41\u0E25\u0E30-the-solana-program-library-spl",children:[]},{level:3,title:"\u0E40\u0E02\u0E35\u0E22\u0E19 Programs",slug:"\u0E40\u0E02\u0E35\u0E22\u0E19-programs",children:[]},{level:3,title:"Deploying Programs",slug:"deploying-programs",children:[]}]},{level:2,title:"\u0E41\u0E2B\u0E25\u0E48\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19",slug:"\u0E41\u0E2B\u0E25\u0E48\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19",children:[]}],path:"/th/core-concepts/programs.html",pathLocale:"/th/",extraFields:[]},{title:"Transactions",headers:[{level:2,title:"\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49",slug:"\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49",children:[]},{level:2,title:"\u0E25\u0E07\u0E25\u0E36\u0E01",slug:"\u0E25\u0E07\u0E25\u0E36\u0E01",children:[{level:3,title:"\u0E04\u0E48\u0E32\u0E18\u0E23\u0E23\u0E21\u0E40\u0E19\u0E35\u0E22\u0E21 (Fees)",slug:"\u0E04\u0E48\u0E32\u0E18\u0E23\u0E23\u0E21\u0E40\u0E19\u0E35\u0E22\u0E21-fees",children:[]}]},{level:2,title:"\u0E41\u0E2B\u0E25\u0E48\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19",slug:"\u0E41\u0E2B\u0E25\u0E48\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19",children:[]}],path:"/th/core-concepts/transactions.html",pathLocale:"/th/",extraFields:[]},{title:"\u0E01\u0E32\u0E23\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07",headers:[{level:2,title:"\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07 Web3.js",slug:"\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07-web3-js",children:[{level:3,title:"Web3.js",slug:"web3-js",children:[]},{level:3,title:"SPL-Token",slug:"spl-token",children:[]},{level:3,title:"Wallet-Adapter",slug:"wallet-adapter",children:[]}]},{level:2,title:"\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07 Rust",slug:"\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07-rust",children:[]},{level:2,title:"\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07 CLI",slug:"\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07-cli",children:[{level:3,title:"macOS & Linux",slug:"macos-linux",children:[]},{level:3,title:"Windows",slug:"windows",children:[]},{level:3,title:"Build From Source",slug:"build-from-source",children:[]}]}],path:"/th/getting-started/installation.html",pathLocale:"/th/",extraFields:[]},{title:"Account Maps",headers:[{level:2,title:"Deriving PDAs",slug:"deriving-pdas",children:[]},{level:2,title:"Single Map Account",slug:"single-map-account",children:[]}],path:"/th/guides/account-maps.html",pathLocale:"/th/",extraFields:[]},{title:"Migrating Program Data Accounts",headers:[{level:2,title:"\u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 migrate program's data accounts \u0E44\u0E14\u0E49\u0E22\u0E31\u0E07\u0E44\u0E07?",slug:"\u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16-migrate-program-s-data-accounts-\u0E44\u0E14\u0E49\u0E22\u0E31\u0E07\u0E44\u0E07",children:[]},{level:2,title:"\u0E2A\u0E16\u0E32\u0E19\u0E01\u0E32\u0E23\u0E13\u0E4C (Scenario)",slug:"\u0E2A\u0E16\u0E32\u0E19\u0E01\u0E32\u0E23\u0E13\u0E4C-scenario",children:[]},{level:2,title:"Upgrading the Account",slug:"upgrading-the-account",children:[{level:3,title:"1. Add account conversion logic",slug:"_1-add-account-conversion-logic",children:[]}]},{level:2,title:"Resources",slug:"resources",children:[]}],path:"/th/guides/data-migration.html",pathLocale:"/th/",extraFields:[]},{title:"Debugging Solana Programs",headers:[{level:2,title:"\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49",slug:"\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49",children:[]},{level:2,title:"Runtime Testing \u0E41\u0E25\u0E30 Debugging \u0E43\u0E19 editor",slug:"runtime-testing-\u0E41\u0E25\u0E30-debugging-\u0E43\u0E19-editor",children:[]},{level:2,title:"\u0E17\u0E14\u0E2A\u0E2D\u0E1A\u0E14\u0E49\u0E27\u0E22 Local Validator Node \u0E43\u0E19 editor",slug:"\u0E17\u0E14\u0E2A\u0E2D\u0E1A\u0E14\u0E49\u0E27\u0E22-local-validator-node-\u0E43\u0E19-editor",children:[]},{level:2,title:"Local Validator Node Testing from Client Apps",slug:"local-validator-node-testing-from-client-apps",children:[]},{level:2,title:"Resources",slug:"resources",children:[]}],path:"/th/guides/debugging-solana-programs.html",pathLocale:"/th/",extraFields:[]},{title:"Feature Parity Testing",headers:[{level:2,title:"\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49",slug:"\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49",children:[]},{level:2,title:"Scenario",slug:"scenario",children:[]},{level:2,title:"Feature Status",slug:"feature-status",children:[]},{level:2,title:"Parity Testing",slug:"parity-testing",children:[]},{level:2,title:"\u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E07\u0E48\u0E32\u0E22\u0E46",slug:"\u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E07\u0E48\u0E32\u0E22\u0E46",children:[{level:3,title:"\u0E40\u0E1B\u0E34\u0E14\u0E17\u0E38\u0E01 features",slug:"\u0E40\u0E1B\u0E34\u0E14\u0E17\u0E38\u0E01-features",children:[]},{level:3,title:"\u0E40\u0E25\u0E37\u0E2D\u0E01\u0E1B\u0E34\u0E14 features",slug:"\u0E40\u0E25\u0E37\u0E2D\u0E01\u0E1B\u0E34\u0E14-features",children:[]}]},{level:2,title:"Feature Parity Testing",slug:"feature-parity-testing",children:[]},{level:2,title:"Full Parity Testing Programmatically",slug:"full-parity-testing-programmatically",children:[]},{level:2,title:"Resources",slug:"resources",children:[]}],path:"/th/guides/feature-parity-testing.html",pathLocale:"/th/",extraFields:[]},{title:"Get Program Accounts",headers:[{level:2,title:"\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49",slug:"\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49",children:[]},{level:2,title:"\u0E25\u0E07\u0E25\u0E36\u0E01",slug:"\u0E25\u0E07\u0E25\u0E36\u0E01",children:[{level:3,title:"filters",slug:"filters",children:[]},{level:3,title:"dataSlice",slug:"dataslice",children:[]}]},{level:2,title:"\u0E41\u0E2B\u0E25\u0E48\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19",slug:"\u0E41\u0E2B\u0E25\u0E48\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19",children:[]}],path:"/th/guides/get-program-accounts.html",pathLocale:"/th/",extraFields:[]},{title:"Retrying Transactions",headers:[{level:2,title:"\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49",slug:"\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49",children:[]},{level:2,title:"\u0E01\u0E32\u0E23\u0E40\u0E14\u0E34\u0E19\u0E17\u0E32\u0E07\u0E02\u0E2D\u0E07 Transaction",slug:"\u0E01\u0E32\u0E23\u0E40\u0E14\u0E34\u0E19\u0E17\u0E32\u0E07\u0E02\u0E2D\u0E07-transaction",children:[{level:3,title:"Clients Submit Transactions \u0E22\u0E31\u0E07\u0E44\u0E07",slug:"clients-submit-transactions-\u0E22\u0E31\u0E07\u0E44\u0E07",children:[]},{level:3,title:"RPC Nodes Broadcast Transactions \u0E22\u0E31\u0E07\u0E44\u0E07",slug:"rpc-nodes-broadcast-transactions-\u0E22\u0E31\u0E07\u0E44\u0E07",children:[]}]},{level:2,title:"Transactions \u0E16\u0E39\u0E01\u0E17\u0E34\u0E49\u0E07\u0E44\u0E1B\u0E44\u0E14\u0E49\u0E22\u0E31\u0E07\u0E44\u0E07",slug:"transactions-\u0E16\u0E39\u0E01\u0E17\u0E34\u0E49\u0E07\u0E44\u0E1B\u0E44\u0E14\u0E49\u0E22\u0E31\u0E07\u0E44\u0E07",children:[{level:3,title:"\u0E01\u0E48\u0E2D\u0E19 transaction \u0E08\u0E30\u0E1B\u0E23\u0E30\u0E21\u0E27\u0E25\u0E1C\u0E25\u0E40\u0E2A\u0E23\u0E47\u0E08",slug:"\u0E01\u0E48\u0E2D\u0E19-transaction-\u0E08\u0E30\u0E1B\u0E23\u0E30\u0E21\u0E27\u0E25\u0E1C\u0E25\u0E40\u0E2A\u0E23\u0E47\u0E08",children:[]},{level:3,title:"\u0E2B\u0E25\u0E31\u0E07\u0E08\u0E32\u0E01 transaction \u0E1B\u0E23\u0E30\u0E21\u0E27\u0E25\u0E1C\u0E25\u0E40\u0E2A\u0E23\u0E47\u0E08 \u0E41\u0E25\u0E30\u0E01\u0E48\u0E2D\u0E19\u0E08\u0E30 finalized",slug:"\u0E2B\u0E25\u0E31\u0E07\u0E08\u0E32\u0E01-transaction-\u0E1B\u0E23\u0E30\u0E21\u0E27\u0E25\u0E1C\u0E25\u0E40\u0E2A\u0E23\u0E47\u0E08-\u0E41\u0E25\u0E30\u0E01\u0E48\u0E2D\u0E19\u0E08\u0E30-finalized",children:[]}]},{level:2,title:"\u0E08\u0E31\u0E14\u0E01\u0E32\u0E23 Transactions \u0E17\u0E35\u0E48\u0E16\u0E39\u0E01\u0E17\u0E34\u0E49\u0E07",slug:"\u0E08\u0E31\u0E14\u0E01\u0E32\u0E23-transactions-\u0E17\u0E35\u0E48\u0E16\u0E39\u0E01\u0E17\u0E34\u0E49\u0E07",children:[{level:3,title:"sendTransaction \u0E40\u0E0A\u0E34\u0E07\u0E25\u0E36\u0E01",slug:"sendtransaction-\u0E40\u0E0A\u0E34\u0E07\u0E25\u0E36\u0E01",children:[]}]},{level:2,title:"\u0E17\u0E33 Rebroadcast Logic \u0E40\u0E2D\u0E07",slug:"\u0E17\u0E4D\u0E32-rebroadcast-logic-\u0E40\u0E2D\u0E07",children:[{level:3,title:"\u0E08\u0E30\u0E40\u0E01\u0E34\u0E14\u0E2D\u0E30\u0E44\u0E23\u0E02\u0E36\u0E49\u0E19\u0E16\u0E49\u0E32 Skip Preflight",slug:"\u0E08\u0E30\u0E40\u0E01\u0E34\u0E14\u0E2D\u0E30\u0E44\u0E23\u0E02\u0E36\u0E49\u0E19\u0E16\u0E49\u0E32-skip-preflight",children:[]},{level:3,title:"Re-Sign Transactions \u0E40\u0E21\u0E37\u0E48\u0E2D\u0E44\u0E2B\u0E23\u0E48\u0E14\u0E35",slug:"re-sign-transactions-\u0E40\u0E21\u0E37\u0E48\u0E2D\u0E44\u0E2B\u0E23\u0E48\u0E14\u0E35",children:[]}]},{level:2,title:"Acknowledgements",slug:"acknowledgements",children:[]}],path:"/th/guides/retrying-transactions.html",pathLocale:"/th/",extraFields:[]},{title:"Serializing Data",headers:[{level:2,title:"\u0E01\u0E32\u0E23\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A Borsh Serialization",slug:"\u0E01\u0E32\u0E23\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07\u0E2A\u0E4D\u0E32\u0E2B\u0E23\u0E31\u0E1A-borsh-serialization",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35 serialize instruction data \u0E17\u0E35\u0E48 client",slug:"\u0E27\u0E34\u0E18\u0E35-serialize-instruction-data-\u0E17\u0E35\u0E48-client",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35 deserialize instruction data \u0E43\u0E19 program",slug:"\u0E27\u0E34\u0E18\u0E35-deserialize-instruction-data-\u0E43\u0E19-program",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35 serialize account data \u0E43\u0E19 program",slug:"\u0E27\u0E34\u0E18\u0E35-serialize-account-data-\u0E43\u0E19-program",children:[{level:3,title:"Pack",slug:"pack",children:[]},{level:3,title:"Serialization/Deserialization",slug:"serialization-deserialization",children:[]},{level:3,title:"\u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19",slug:"\u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19",children:[]}]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35 deserialize account data \u0E17\u0E35\u0E48 client",slug:"\u0E27\u0E34\u0E18\u0E35-deserialize-account-data-\u0E17\u0E35\u0E48-client",children:[]},{level:2,title:"Solana TS/JS Mappings \u0E17\u0E31\u0E48\u0E27\u0E44\u0E1B",slug:"solana-ts-js-mappings-\u0E17\u0E31\u0E48\u0E27\u0E44\u0E1B",children:[]},{level:2,title:"Advanced Constructs",slug:"advanced-constructs",children:[{level:3,title:"COption",slug:"coption",children:[]}]},{level:2,title:"Resources",slug:"resources",children:[]}],path:"/th/guides/serialization.html",pathLocale:"/th/",extraFields:[]},{title:"\u0E40\u0E23\u0E34\u0E48\u0E21\u0E15\u0E49\u0E19",headers:[{level:2,title:"Composability \u0E04\u0E37\u0E2D\u0E2B\u0E31\u0E27\u0E43\u0E08",slug:"composability-\u0E04\u0E37\u0E2D\u0E2B\u0E31\u0E27\u0E43\u0E08",children:[]},{level:2,title:"Contributing",slug:"contributing",children:[]}],path:"/th/integrations/",pathLocale:"/th/",extraFields:[]},{title:"Jupiter",headers:[{level:3,title:"\u0E01\u0E32\u0E23\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07",slug:"\u0E01\u0E32\u0E23\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07",children:[]},{level:3,title:"\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23 Token \u0E08\u0E32\u0E01 Jupiter",slug:"\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23-token-\u0E08\u0E32\u0E01-jupiter",children:[]},{level:3,title:"Loading the Jupiter instance",slug:"loading-the-jupiter-instance",children:[]},{level:3,title:"\u0E2B\u0E32\u0E40\u0E2A\u0E49\u0E19\u0E17\u0E32\u0E07 RouteMap",slug:"\u0E2B\u0E32\u0E40\u0E2A\u0E49\u0E19\u0E17\u0E32\u0E07-routemap",children:[]},{level:3,title:"\u0E2B\u0E32\u0E40\u0E2A\u0E49\u0E19\u0E17\u0E32\u0E07\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A Input \u0E41\u0E25\u0E30 Output token \u0E17\u0E35\u0E48\u0E43\u0E2B\u0E49\u0E21\u0E32",slug:"\u0E2B\u0E32\u0E40\u0E2A\u0E49\u0E19\u0E17\u0E32\u0E07\u0E2A\u0E4D\u0E32\u0E2B\u0E23\u0E31\u0E1A-input-\u0E41\u0E25\u0E30-output-token-\u0E17\u0E35\u0E48\u0E43\u0E2B\u0E49\u0E21\u0E32",children:[]},{level:3,title:"Execute the Token Swap",slug:"execute-the-token-swap",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E43\u0E0A\u0E49 Jupiter \u0E01\u0E31\u0E1A React Application",slug:"\u0E27\u0E34\u0E18\u0E35\u0E43\u0E0A\u0E49-jupiter-\u0E01\u0E31\u0E1A-react-application",children:[{level:3,title:"\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07",slug:"\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07",children:[]},{level:3,title:"\u0E40\u0E1E\u0E34\u0E48\u0E21 Provider",slug:"\u0E40\u0E1E\u0E34\u0E48\u0E21-provider",children:[]},{level:3,title:"\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23 Tokens",slug:"\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23-tokens",children:[]},{level:3,title:"\u0E15\u0E31\u0E49\u0E07\u0E04\u0E48\u0E32 State",slug:"\u0E15\u0E31\u0E49\u0E07\u0E04\u0E48\u0E32-state",children:[]},{level:3,title:"\u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49 react hook useJupiter",slug:"\u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49-react-hook-usejupiter",children:[]},{level:3,title:"\u0E17\u0E33\u0E01\u0E32\u0E23 Swap",slug:"\u0E17\u0E4D\u0E32\u0E01\u0E32\u0E23-swap",children:[]}]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35 use Jupiter API",slug:"\u0E27\u0E34\u0E18\u0E35-use-jupiter-api",children:[{level:3,title:"\u0E01\u0E32\u0E23\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07",slug:"\u0E01\u0E32\u0E23\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07-1",children:[]},{level:3,title:"\u0E2B\u0E32 Route Map",slug:"\u0E2B\u0E32-route-map",children:[]},{level:3,title:"\u0E27\u0E34\u0E18\u0E35\u0E17\u0E33 Serialized Transaction \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E40\u0E2D\u0E32\u0E44\u0E1B Swap",slug:"\u0E27\u0E34\u0E18\u0E35\u0E17\u0E4D\u0E32-serialized-transaction-\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E40\u0E2D\u0E32\u0E44\u0E1B-swap",children:[]},{level:3,title:"\u0E17\u0E33\u0E01\u0E32\u0E23 Swap Transaction",slug:"\u0E17\u0E4D\u0E32\u0E01\u0E32\u0E23-swap-transaction",children:[]}]},{level:2,title:"\u0E41\u0E2B\u0E25\u0E48\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19",slug:"\u0E41\u0E2B\u0E25\u0E48\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19",children:[]}],path:"/th/integrations/jupiter.html",pathLocale:"/th/",extraFields:[]},{title:"Mango Markets",headers:[{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25 Mango Group",slug:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25-mango-group",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07 Mango Account",slug:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07-mango-account",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E1D\u0E32\u0E01 (deposit) USDC \u0E40\u0E02\u0E49\u0E32\u0E44\u0E1B\u0E43\u0E19 Mango Account",slug:"\u0E27\u0E34\u0E18\u0E35\u0E1D\u0E32\u0E01-deposit-usdc-\u0E40\u0E02\u0E49\u0E32\u0E44\u0E1B\u0E43\u0E19-mango-account",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E15\u0E31\u0E49\u0E07 spot order",slug:"\u0E27\u0E34\u0E18\u0E35\u0E15\u0E31\u0E49\u0E07-spot-order",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35 load bids",slug:"\u0E27\u0E34\u0E18\u0E35-load-bids",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E23\u0E32\u0E04\u0E32\u0E02\u0E32\u0E22 (asks)",slug:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E23\u0E32\u0E04\u0E32\u0E02\u0E32\u0E22-asks",children:[]},{level:2,title:"\u0E41\u0E2B\u0E25\u0E48\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19",slug:"\u0E41\u0E2B\u0E25\u0E48\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19",children:[]}],path:"/th/integrations/mango.html",pathLocale:"/th/",extraFields:[]},{title:"Pyth",headers:[{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E43\u0E0A\u0E49 Pyth \u0E08\u0E32\u0E01 Client",slug:"\u0E27\u0E34\u0E18\u0E35\u0E43\u0E0A\u0E49-pyth-\u0E08\u0E32\u0E01-client",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E43\u0E0A\u0E49 Pyth \u0E14\u0E49\u0E27\u0E22 Anchor",slug:"\u0E27\u0E34\u0E18\u0E35\u0E43\u0E0A\u0E49-pyth-\u0E14\u0E49\u0E27\u0E22-anchor",children:[]},{level:2,title:"\u0E41\u0E2B\u0E25\u0E48\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19",slug:"\u0E41\u0E2B\u0E25\u0E48\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19",children:[]}],path:"/th/integrations/pyth.html",pathLocale:"/th/",extraFields:[]},{title:"React Native",headers:[{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E43\u0E0A\u0E49 @solana/web3.js \u0E43\u0E19 React Native app",slug:"\u0E27\u0E34\u0E18\u0E35\u0E43\u0E0A\u0E49-solana-web3-js-\u0E43\u0E19-react-native-app",children:[{level:3,title:"\u0E2A\u0E23\u0E49\u0E32\u0E07 app \u0E43\u0E2B\u0E21\u0E48",slug:"\u0E2A\u0E23\u0E49\u0E32\u0E07-app-\u0E43\u0E2B\u0E21\u0E48",children:[]},{level:3,title:"\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07 dependencies",slug:"\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07-dependencies",children:[]},{level:3,title:"Update index.js",slug:"update-index-js",children:[]},{level:3,title:"Update metro.config.js",slug:"update-metro-config-js",children:[]},{level:3,title:"Update App.tsx",slug:"update-app-tsx",children:[]},{level:3,title:"\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07 cocoapods",slug:"\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07-cocoapods",children:[]},{level:3,title:"Start application",slug:"start-application",children:[]}]},{level:2,title:"Solana DApp Scaffold \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A React Native",slug:"solana-dapp-scaffold-\u0E2A\u0E4D\u0E32\u0E2B\u0E23\u0E31\u0E1A-react-native",children:[]},{level:2,title:"\u0E1B\u0E31\u0E0D\u0E2B\u0E32\u0E17\u0E35\u0E48\u0E40\u0E08\u0E2D\u0E1A\u0E48\u0E2D\u0E22\u0E40\u0E21\u0E37\u0E48\u0E2D\u0E43\u0E0A\u0E49 @solana/web3.js \u0E01\u0E31\u0E1A React Native app",slug:"\u0E1B\u0E31\u0E0D\u0E2B\u0E32\u0E17\u0E35\u0E48\u0E40\u0E08\u0E2D\u0E1A\u0E48\u0E2D\u0E22\u0E40\u0E21\u0E37\u0E48\u0E2D\u0E43\u0E0A\u0E49-solana-web3-js-\u0E01\u0E31\u0E1A-react-native-app",children:[{level:3,title:"Error: While trying to resolve module superstruct from file",slug:"error-while-trying-to-resolve-module-superstruct-from-file",children:[]},{level:3,title:"Error: URL.protocol is not implemented",slug:"error-url-protocol-is-not-implemented",children:[]},{level:3,title:"Error: crypto.getRandomValues() not supported",slug:"error-crypto-getrandomvalues-not-supported",children:[]}]}],path:"/th/integrations/react-native.html",pathLocale:"/th/",extraFields:[]},{title:"Serum",headers:[{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25 Serum market",slug:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25-serum-market",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25 Serum order books",slug:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25-serum-order-books",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25 open orders \u0E43\u0E19\u0E1B\u0E31\u0E08\u0E08\u0E38\u0E1A\u0E31\u0E19",slug:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25-open-orders-\u0E43\u0E19\u0E1B\u0E31\u0E08\u0E08\u0E38\u0E1A\u0E31\u0E19",children:[]}],path:"/th/integrations/serum.html",pathLocale:"/th/",extraFields:[]},{title:"Strata",headers:[{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07 fully managed token",slug:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07-fully-managed-token",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35 buy \u0E41\u0E25\u0E30 sell a token",slug:"\u0E27\u0E34\u0E18\u0E35-buy-\u0E41\u0E25\u0E30-sell-a-token",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35 bootstrap liquidity",slug:"\u0E27\u0E34\u0E18\u0E35-bootstrap-liquidity",children:[]},{level:2,title:"\u0E41\u0E2B\u0E25\u0E48\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19",slug:"\u0E41\u0E2B\u0E25\u0E48\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19",children:[]}],path:"/th/integrations/strata.html",pathLocale:"/th/",extraFields:[]},{title:"Switchboard",headers:[{level:2,title:"Data Feeds",slug:"data-feeds",children:[{level:3,title:"\u0E01\u0E32\u0E23\u0E2D\u0E48\u0E32\u0E19\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E08\u0E32\u0E01 aggregator feed",slug:"\u0E01\u0E32\u0E23\u0E2D\u0E48\u0E32\u0E19\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E08\u0E32\u0E01-aggregator-feed",children:[]},{level:3,title:"Create a new aggregator feed",slug:"create-a-new-aggregator-feed",children:[]},{level:3,title:"Read data from an aggregator feed in program",slug:"read-data-from-an-aggregator-feed-in-program",children:[]},{level:3,title:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07 Feed \u0E08\u0E32\u0E01 Publisher",slug:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07-feed-\u0E08\u0E32\u0E01-publisher",children:[]}]},{level:2,title:"Oracles",slug:"oracles",children:[{level:3,title:"\u0E2A\u0E23\u0E49\u0E32\u0E07 oracle",slug:"\u0E2A\u0E23\u0E49\u0E32\u0E07-oracle",children:[]},{level:3,title:"Run an oracle locally",slug:"run-an-oracle-locally",children:[]},{level:3,title:"Oracle Config",slug:"oracle-config",children:[]}]},{level:2,title:"Verifiable Random Function(VRF)",slug:"verifiable-random-function-vrf",children:[{level:3,title:"\u0E01\u0E32\u0E23\u0E2D\u0E48\u0E32\u0E19 VRF account",slug:"\u0E01\u0E32\u0E23\u0E2D\u0E48\u0E32\u0E19-vrf-account",children:[]},{level:3,title:"Creating a VRF account",slug:"creating-a-vrf-account",children:[]},{level:3,title:"\u0E02\u0E2D Randomness \u0E08\u0E32\u0E01 vrf account",slug:"\u0E02\u0E2D-randomness-\u0E08\u0E32\u0E01-vrf-account",children:[]}]},{level:2,title:"\u0E41\u0E2B\u0E25\u0E48\u0E07\u0E04\u0E27\u0E32\u0E21\u0E23\u0E39\u0E49",slug:"\u0E41\u0E2B\u0E25\u0E48\u0E07\u0E04\u0E27\u0E32\u0E21\u0E23\u0E39\u0E49",children:[{level:3,title:"APIs \u0E41\u0E25\u0E30 Libraries",slug:"apis-\u0E41\u0E25\u0E30-libraries",children:[]},{level:3,title:"\u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07",slug:"\u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07",children:[]},{level:3,title:"\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19\u0E46",slug:"\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19\u0E46",children:[]}]}],path:"/th/integrations/switchboard.html",pathLocale:"/th/",extraFields:[]},{title:"web3Auth (Torus Wallet)",headers:[{level:2,title:"wallet \u0E04\u0E37\u0E2D\u0E2D\u0E30\u0E44\u0E23?",slug:"wallet-\u0E04\u0E37\u0E2D\u0E2D\u0E30\u0E44\u0E23",children:[]},{level:2,title:"Social Logins \u0E1A\u0E19 Solana",slug:"social-logins-\u0E1A\u0E19-solana",children:[]},{level:2,title:"\u0E41\u0E19\u0E27\u0E17\u0E32\u0E07\u0E01\u0E32\u0E23 Integration",slug:"\u0E41\u0E19\u0E27\u0E17\u0E32\u0E07\u0E01\u0E32\u0E23-integration",children:[{level:3,title:"\u0E01\u0E32\u0E23\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07 Dependencies",slug:"\u0E01\u0E32\u0E23\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07-dependencies",children:[]},{level:3,title:"\u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49 SDK \u0E41\u0E25\u0E30 initialize",slug:"\u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49-sdk-\u0E41\u0E25\u0E30-initialize",children:[]},{level:3,title:"Trigger user login\u200B",slug:"trigger-user-login\u200B",children:[]},{level:3,title:"\u0E01\u0E32\u0E23\u0E0A\u0E49 torus instance \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E23\u0E32\u0E22\u0E25\u0E30\u0E40\u0E2D\u0E35\u0E22\u0E14 user account",slug:"\u0E01\u0E32\u0E23\u0E0A\u0E49-torus-instance-\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E23\u0E32\u0E22\u0E25\u0E30\u0E40\u0E2D\u0E35\u0E22\u0E14-user-account",children:[]},{level:3,title:"\u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49 Torus Solana API \u0E40\u0E1E\u0E37\u0E48\u0E2D sign message.",slug:"\u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49-torus-solana-api-\u0E40\u0E1E\u0E37\u0E48\u0E2D-sign-message",children:[]},{level:3,title:"\u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49 torus Solana API \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E2A\u0E48\u0E07 transaction.\u200B",slug:"\u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49-torus-solana-api-\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E2A\u0E48\u0E07-transaction-\u200B",children:[]},{level:3,title:"Top-ups\u200B",slug:"top-ups\u200B",children:[]},{level:3,title:"Logout",slug:"logout",children:[]}]},{level:2,title:"Resources",slug:"resources",children:[]}],path:"/th/integrations/web3auth.html",pathLocale:"/th/",extraFields:[]},{title:"Accounts",headers:[{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07 system account",slug:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07-system-account",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E04\u0E33\u0E19\u0E27\u0E13 account cost",slug:"\u0E27\u0E34\u0E18\u0E35\u0E04\u0E4D\u0E32\u0E19\u0E27\u0E13-account-cost",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07 accounts \u0E14\u0E49\u0E27\u0E22 seeds",slug:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07-accounts-\u0E14\u0E49\u0E27\u0E22-seeds",children:[{level:3,title:"Generate",slug:"generate",children:[]},{level:3,title:"Create",slug:"create",children:[]},{level:3,title:"Transfer",slug:"transfer",children:[]}]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07 PDAs",slug:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07-pdas",children:[{level:3,title:"\u0E01\u0E32\u0E23\u0E2A\u0E23\u0E49\u0E32\u0E07 PDA",slug:"\u0E01\u0E32\u0E23\u0E2A\u0E23\u0E49\u0E32\u0E07-pda",children:[]},{level:3,title:"\u0E28\u0E23\u0E49\u0E32\u0E07 PDA",slug:"\u0E28\u0E23\u0E49\u0E32\u0E07-pda",children:[]}]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35 sign \u0E14\u0E49\u0E27\u0E22 PDA",slug:"\u0E27\u0E34\u0E18\u0E35-sign-\u0E14\u0E49\u0E27\u0E22-pda",children:[{level:3,title:"Program",slug:"program-1",children:[]},{level:3,title:"Client",slug:"client-1",children:[]}]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25 program accounts",slug:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25-program-accounts",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E1B\u0E34\u0E14 accounts",slug:"\u0E27\u0E34\u0E18\u0E35\u0E1B\u0E34\u0E14-accounts",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25 account balance",slug:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25-account-balance",children:[]}],path:"/th/references/accounts.html",pathLocale:"/th/",extraFields:[]},{title:"Sending Transactions",headers:[{level:2,title:"\u0E27\u0E34\u0E18\u0E35 send SOL",slug:"\u0E27\u0E34\u0E18\u0E35-send-sol",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35 send SPL-Tokens",slug:"\u0E27\u0E34\u0E18\u0E35-send-spl-tokens",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E04\u0E33\u0E19\u0E27\u0E13\u0E2B\u0E32 transaction cost",slug:"\u0E27\u0E34\u0E18\u0E35\u0E04\u0E4D\u0E32\u0E19\u0E27\u0E13\u0E2B\u0E32-transaction-cost",children:[{level:3,title:"getEstimatedFee",slug:"getestimatedfee",children:[]},{level:3,title:"getFeeForMessage",slug:"getfeeformessage",children:[]}]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E40\u0E1E\u0E34\u0E48\u0E21 memo \u0E43\u0E19 transaction",slug:"\u0E27\u0E34\u0E18\u0E35\u0E40\u0E1E\u0E34\u0E48\u0E21-memo-\u0E43\u0E19-transaction",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E40\u0E1B\u0E25\u0E35\u0E48\u0E22\u0E19 compute budget \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A transaction",slug:"\u0E27\u0E34\u0E18\u0E35\u0E40\u0E1B\u0E25\u0E35\u0E48\u0E22\u0E19-compute-budget-\u0E2A\u0E4D\u0E32\u0E2B\u0E23\u0E31\u0E1A-transaction",children:[]}],path:"/th/references/basic-transactions.html",pathLocale:"/th/",extraFields:[]},{title:"Keypairs \u0E41\u0E25\u0E30 Wallets",headers:[{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07 Keypair \u0E43\u0E2B\u0E21\u0E48",slug:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07-keypair-\u0E43\u0E2B\u0E21\u0E48",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35 restore a Keypair from a secret",slug:"\u0E27\u0E34\u0E18\u0E35-restore-a-keypair-from-a-secret",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35 verify a Keypair",slug:"\u0E27\u0E34\u0E18\u0E35-verify-a-keypair",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35 check if a public key has an associated private key",slug:"\u0E27\u0E34\u0E18\u0E35-check-if-a-public-key-has-an-associated-private-key",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35 generate a mnemonic phrase",slug:"\u0E27\u0E34\u0E18\u0E35-generate-a-mnemonic-phrase",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E01\u0E39\u0E49 Keypair \u0E08\u0E32\u0E01 mnemonic phrase",slug:"\u0E27\u0E34\u0E18\u0E35\u0E01\u0E39\u0E49-keypair-\u0E08\u0E32\u0E01-mnemonic-phrase",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35 generate a vanity address",slug:"\u0E27\u0E34\u0E18\u0E35-generate-a-vanity-address",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35 sign \u0E41\u0E25\u0E30 verify messages with wallets",slug:"\u0E27\u0E34\u0E18\u0E35-sign-\u0E41\u0E25\u0E30-verify-messages-with-wallets",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E40\u0E0A\u0E37\u0E48\u0E2D\u0E21\u0E15\u0E48\u0E2D\u0E01\u0E31\u0E1A wallet",slug:"\u0E27\u0E34\u0E18\u0E35\u0E40\u0E0A\u0E37\u0E48\u0E2D\u0E21\u0E15\u0E48\u0E2D\u0E01\u0E31\u0E1A-wallet",children:[{level:3,title:"React",slug:"react",children:[]},{level:3,title:"Vue",slug:"vue",children:[]},{level:3,title:"Svelte",slug:"svelte",children:[]}]}],path:"/th/references/keypairs-and-wallets.html",pathLocale:"/th/",extraFields:[]},{title:"Local Development",headers:[{level:2,title:"\u0E40\u0E23\u0E34\u0E48\u0E21\u0E43\u0E0A\u0E49 Local Validator",slug:"\u0E40\u0E23\u0E34\u0E48\u0E21\u0E43\u0E0A\u0E49-local-validator",children:[]},{level:2,title:"Connecting to Environments",slug:"connecting-to-environments",children:[]},{level:2,title:"Subscribing to Events",slug:"subscribing-to-events",children:[]},{level:2,title:"Getting Test SOL",slug:"getting-test-sol",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E43\u0E0A\u0E49 Mainnet Accounts \u0E41\u0E25\u0E30 Programs",slug:"\u0E27\u0E34\u0E18\u0E35\u0E43\u0E0A\u0E49-mainnet-accounts-\u0E41\u0E25\u0E30-programs",children:[{level:3,title:"\u0E27\u0E34\u0E18\u0E35 load accounts \u0E08\u0E32\u0E01 mainnet",slug:"\u0E27\u0E34\u0E18\u0E35-load-accounts-\u0E08\u0E32\u0E01-mainnet",children:[]},{level:3,title:"\u0E27\u0E34\u0E18\u0E35 load programs from mainnet",slug:"\u0E27\u0E34\u0E18\u0E35-load-programs-from-mainnet",children:[]}]}],path:"/th/references/local-development.html",pathLocale:"/th/",extraFields:[]},{title:"Name Service",headers:[{level:2,title:"Name registry",slug:"name-registry",children:[]},{level:2,title:"Resolving SOL domains",slug:"resolving-sol-domains",children:[]},{level:2,title:"Reverse look up",slug:"reverse-look-up",children:[]},{level:2,title:"Subdomain look up",slug:"subdomain-look-up",children:[]},{level:2,title:"\u0E2B\u0E32\u0E17\u0E38\u0E01 domain names \u0E17\u0E35\u0E48 public key \u0E19\u0E35\u0E49\u0E40\u0E1B\u0E47\u0E19\u0E40\u0E08\u0E49\u0E32\u0E02\u0E2D\u0E07",slug:"\u0E2B\u0E32\u0E17\u0E38\u0E01-domain-names-\u0E17\u0E35\u0E48-public-key-\u0E19\u0E35\u0E49\u0E40\u0E1B\u0E47\u0E19\u0E40\u0E08\u0E49\u0E32\u0E02\u0E2D\u0E07",children:[]},{level:2,title:"Resolve a Twitter handle",slug:"resolve-a-twitter-handle",children:[]},{level:2,title:"Reverse look up of a Twitter handle",slug:"reverse-look-up-of-a-twitter-handle",children:[]}],path:"/th/references/name-service.html",pathLocale:"/th/",extraFields:[]},{title:"NFTs",headers:[{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07 an NFT",slug:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07-an-nft",children:[{level:3,title:"Upload to Arweave",slug:"upload-to-arweave",children:[]},{level:3,title:"Mint the NFT",slug:"mint-the-nft",children:[]}]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25 NFT Metadata",slug:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25-nft-metadata",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E40\u0E08\u0E49\u0E32\u0E02\u0E2D\u0E07 (owner) \u0E02\u0E2D\u0E07 NFT",slug:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E40\u0E08\u0E49\u0E32\u0E02\u0E2D\u0E07-owner-\u0E02\u0E2D\u0E07-nft",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25 NFT Mint Addresses",slug:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25-nft-mint-addresses",children:[{level:3,title:"Candy Machine V1",slug:"candy-machine-v1",children:[]},{level:3,title:"Candy Machine V2",slug:"candy-machine-v2",children:[]}]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E17\u0E38\u0E01 NFTs \u0E08\u0E32\u0E01 wallet?",slug:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E17\u0E38\u0E01-nfts-\u0E08\u0E32\u0E01-wallet",children:[]}],path:"/th/references/nfts.html",pathLocale:"/th/",extraFields:[]},{title:"Sending Offline Transactions",headers:[{level:2,title:"Sign Transaction",slug:"sign-transaction",children:[]},{level:2,title:"Partial Sign Transaction",slug:"partial-sign-transaction",children:[]},{level:2,title:"Durable Nonce",slug:"durable-nonce",children:[{level:3,title:"Create Nonce Account",slug:"create-nonce-account",children:[]},{level:3,title:"Get Nonce Account",slug:"get-nonce-account",children:[]},{level:3,title:"Use Nonce Account",slug:"use-nonce-account",children:[]}]}],path:"/th/references/offline-transactions.html",pathLocale:"/th/",extraFields:[]},{title:"\u0E40\u0E02\u0E35\u0E22\u0E19 Programs",headers:[{level:2,title:"\u0E27\u0E34\u0E18\u0E35 transfer SOL in a program",slug:"\u0E27\u0E34\u0E18\u0E35-transfer-sol-in-a-program",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E43\u0E0A\u0E49\u0E19\u0E32\u0E2C\u0E34\u0E01\u0E32 (clock) \u0E43\u0E19 program",slug:"\u0E27\u0E34\u0E18\u0E35\u0E43\u0E0A\u0E49\u0E19\u0E32\u0E2C\u0E34\u0E01\u0E32-clock-\u0E43\u0E19-program",children:[{level:3,title:"\u0E2A\u0E48\u0E07 Clock \u0E43\u0E19\u0E41\u0E1A\u0E1A account \u0E20\u0E32\u0E22\u0E43\u0E19 instruction",slug:"\u0E2A\u0E48\u0E07-clock-\u0E43\u0E19\u0E41\u0E1A\u0E1A-account-\u0E20\u0E32\u0E22\u0E43\u0E19-instruction",children:[]},{level:3,title:"\u0E43\u0E0A\u0E49 Clock \u0E42\u0E14\u0E22\u0E15\u0E23\u0E07\u0E43\u0E19 instruction",slug:"\u0E43\u0E0A\u0E49-clock-\u0E42\u0E14\u0E22\u0E15\u0E23\u0E07\u0E43\u0E19-instruction",children:[]}]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E40\u0E1B\u0E25\u0E35\u0E48\u0E22\u0E19 account size",slug:"\u0E27\u0E34\u0E18\u0E35\u0E40\u0E1B\u0E25\u0E35\u0E48\u0E22\u0E19-account-size",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E17\u0E33 Cross Program Invocation",slug:"\u0E27\u0E34\u0E18\u0E35\u0E17\u0E4D\u0E32-cross-program-invocation",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07 PDA",slug:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07-pda",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E2D\u0E48\u0E32\u0E19 accounts",slug:"\u0E27\u0E34\u0E18\u0E35\u0E2D\u0E48\u0E32\u0E19-accounts",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E15\u0E23\u0E27\u0E08\u0E2A\u0E2D\u0E1A accounts",slug:"\u0E27\u0E34\u0E18\u0E35\u0E15\u0E23\u0E27\u0E08\u0E2A\u0E2D\u0E1A-accounts",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E2D\u0E48\u0E32\u0E19 instructions \u0E2B\u0E25\u0E32\u0E22\u0E46 \u0E15\u0E31\u0E27\u0E08\u0E32\u0E01 transaction",slug:"\u0E27\u0E34\u0E18\u0E35\u0E2D\u0E48\u0E32\u0E19-instructions-\u0E2B\u0E25\u0E32\u0E22\u0E46-\u0E15\u0E31\u0E27\u0E08\u0E32\u0E01-transaction",children:[]}],path:"/th/references/programs.html",pathLocale:"/th/",extraFields:[]},{title:"Staking",headers:[{level:2,title:"\u0E2B\u0E32\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25 Validators \u0E43\u0E19\u0E1B\u0E31\u0E08\u0E08\u0E38\u0E1A\u0E31\u0E19",slug:"\u0E2B\u0E32\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25-validators-\u0E43\u0E19\u0E1B\u0E31\u0E08\u0E08\u0E38\u0E1A\u0E31\u0E19",children:[]},{level:2,title:"\u0E2A\u0E23\u0E49\u0E32\u0E07 Stake Account",slug:"\u0E2A\u0E23\u0E49\u0E32\u0E07-stake-account",children:[]},{level:2,title:"Delegate Stake",slug:"delegate-stake",children:[]},{level:2,title:"\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25 Delegator \u0E14\u0E49\u0E27\u0E22 Validators",slug:"\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25-delegator-\u0E14\u0E49\u0E27\u0E22-validators",children:[]},{level:2,title:"\u0E22\u0E01\u0E40\u0E25\u0E34\u0E01 Stake",slug:"\u0E22\u0E01\u0E40\u0E25\u0E34\u0E01-stake",children:[]},{level:2,title:"\u0E16\u0E2D\u0E19 Stake",slug:"\u0E16\u0E2D\u0E19-stake",children:[]}],path:"/th/references/staking.html",pathLocale:"/th/",extraFields:[]},{title:"\u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19 Tokens",headers:[{level:2,title:"\u0E40\u0E23\u0E32\u0E15\u0E49\u0E2D\u0E07\u0E23\u0E39\u0E49\u0E2D\u0E30\u0E44\u0E23\u0E1A\u0E49\u0E32\u0E07\u0E01\u0E48\u0E2D\u0E19\u0E08\u0E30\u0E44\u0E1B\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19 SPL-Tokens?",slug:"\u0E40\u0E23\u0E32\u0E15\u0E49\u0E2D\u0E07\u0E23\u0E39\u0E49\u0E2D\u0E30\u0E44\u0E23\u0E1A\u0E49\u0E32\u0E07\u0E01\u0E48\u0E2D\u0E19\u0E08\u0E30\u0E44\u0E1B\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19-spl-tokens",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07 Token \u0E43\u0E2B\u0E21\u0E48",slug:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07-token-\u0E43\u0E2B\u0E21\u0E48",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25 token mint",slug:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25-token-mint",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07 token account",slug:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07-token-account",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25 Token Account",slug:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25-token-account",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25 balance \u0E02\u0E2D\u0E07 token account",slug:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25-balance-\u0E02\u0E2D\u0E07-token-account",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35 mint tokens",slug:"\u0E27\u0E34\u0E18\u0E35-mint-tokens",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E48\u0E07 tokens",slug:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E48\u0E07-tokens",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E17\u0E33\u0E25\u0E32\u0E22 (burn) tokens",slug:"\u0E27\u0E34\u0E18\u0E35\u0E17\u0E4D\u0E32\u0E25\u0E32\u0E22-burn-tokens",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E1B\u0E34\u0E14 token accounts",slug:"\u0E27\u0E34\u0E18\u0E35\u0E1B\u0E34\u0E14-token-accounts",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E15\u0E31\u0E49\u0E07 authority \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A token accounts \u0E2B\u0E23\u0E37\u0E2D mints",slug:"\u0E27\u0E34\u0E18\u0E35\u0E15\u0E31\u0E49\u0E07-authority-\u0E2A\u0E4D\u0E32\u0E2B\u0E23\u0E31\u0E1A-token-accounts-\u0E2B\u0E23\u0E37\u0E2D-mints",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E2D\u0E19\u0E38\u0E21\u0E31\u0E15\u0E34 (approve) token \u0E43\u0E2B\u0E49 delegate \u0E44\u0E14\u0E49",slug:"\u0E27\u0E34\u0E18\u0E35\u0E2D\u0E19\u0E38\u0E21\u0E31\u0E15\u0E34-approve-token-\u0E43\u0E2B\u0E49-delegate-\u0E44\u0E14\u0E49",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E22\u0E01\u0E40\u0E25\u0E34\u0E01 (revoke) token \u0E17\u0E35\u0E48 delegate \u0E44\u0E27\u0E49",slug:"\u0E27\u0E34\u0E18\u0E35\u0E22\u0E01\u0E40\u0E25\u0E34\u0E01-revoke-token-\u0E17\u0E35\u0E48-delegate-\u0E44\u0E27\u0E49",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E08\u0E31\u0E14\u0E01\u0E32\u0E23 wrapped SOL",slug:"\u0E27\u0E34\u0E18\u0E35\u0E08\u0E31\u0E14\u0E01\u0E32\u0E23-wrapped-sol",children:[{level:3,title:"\u0E01\u0E32\u0E23\u0E2A\u0E23\u0E49\u0E32\u0E07 Token Account",slug:"\u0E01\u0E32\u0E23\u0E2A\u0E23\u0E49\u0E32\u0E07-token-account",children:[]},{level:3,title:"\u0E40\u0E1E\u0E34\u0E48\u0E21 Balance",slug:"\u0E40\u0E1E\u0E34\u0E48\u0E21-balance",children:[]}]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E17\u0E38\u0E01\u0E46 token accounts \u0E15\u0E32\u0E21 owner",slug:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E17\u0E38\u0E01\u0E46-token-accounts-\u0E15\u0E32\u0E21-owner",children:[]}],path:"/th/references/token.html",pathLocale:"/th/",extraFields:[]},{title:"Accounts (Account\u2019lar)",headers:[{level:2,title:"Facts (\xD6zet Bilgiler)",slug:"facts-ozet-bilgiler",children:[]},{level:2,title:"Deep Dive (Derinlemesine Bak\u0131\u015F)",slug:"deep-dive-derinlemesine-bak\u0131s",children:[{level:3,title:"Account Model (Account Modeli)",slug:"account-model-account-modeli",children:[]},{level:3,title:"Rent",slug:"rent",children:[]}]},{level:2,title:"Other Resources (Di\u011Fer Kaynaklar)",slug:"other-resources-diger-kaynaklar",children:[{level:3,title:"Referans",slug:"referans",children:[]}]}],path:"/tr/core-concepts/accounts.html",pathLocale:"/tr/",extraFields:[]},{title:"Program Derived Addresses (PDAs) (Programdan T\xFCretilmi\u015F Adresler)",headers:[{level:2,title:"Facts (\xD6zet Bilgiler)",slug:"facts-ozet-bilgiler",children:[]},{level:2,title:"Deep Dive (Derinlemesine Bak\u0131\u015F)",slug:"deep-dive-derinlemesine-bak\u0131s",children:[{level:3,title:"Generating PDAs (PDA\u2019lar Olu\u015Fturma)",slug:"generating-pdas-pda-lar-olusturma",children:[]},{level:3,title:"Interacting with PDAs (PDA\u2019lar ile Etkile\u015Fim)",slug:"interacting-with-pdas-pda-lar-ile-etkilesim",children:[]}]},{level:2,title:"Other Resources (Di\u011Fer Kaynaklar)",slug:"other-resources-diger-kaynaklar",children:[]}],path:"/tr/core-concepts/pdas.html",pathLocale:"/tr/",extraFields:[]},{title:"Programs (Programlar)",headers:[{level:2,title:"Facts (\xD6zet Bilgiler)",slug:"facts-ozet-bilgiler",children:[]},{level:2,title:"Deep Dive (Derinlemesine Bak\u0131\u015F)",slug:"deep-dive-derinlemesine-bak\u0131s",children:[{level:3,title:"Native Program\u2019lar & Solana Program Library (SPL)",slug:"native-program-lar-solana-program-library-spl",children:[]},{level:3,title:"Writing Programs (Program Yazma)",slug:"writing-programs-program-yazma",children:[]},{level:3,title:"Deploying Programs (Programlar\u0131 \xC7al\u0131\u015Ft\u0131rma)",slug:"deploying-programs-programlar\u0131-cal\u0131st\u0131rma",children:[]}]},{level:2,title:"Other Resources (Di\u011Fer Kaynaklar)",slug:"other-resources-diger-kaynaklar",children:[]}],path:"/tr/core-concepts/programs.html",pathLocale:"/tr/",extraFields:[]},{title:"Transactions (\u0130\u015Flemler)",headers:[{level:2,title:"Facts (\xD6zet Bilgiler)",slug:"facts-ozet-bilgiler",children:[]},{level:2,title:"Deep Dive (Derinlemesine Bak\u0131\u015F)",slug:"deep-dive-derinlemesine-bak\u0131s",children:[{level:3,title:"Fees (\xDCcretler)",slug:"fees-ucretler",children:[]}]},{level:2,title:"Other Resources (Di\u011Fer Kaynaklar)",slug:"other-resources-diger-kaynaklar",children:[]}],path:"/tr/core-concepts/transactions.html",pathLocale:"/tr/",extraFields:[]},{title:"Installation",headers:[{level:2,title:"Install Web3.js (Web3.js Kurulumu)",slug:"install-web3-js-web3-js-kurulumu",children:[{level:3,title:"Web3.js",slug:"web3-js",children:[]},{level:3,title:"SPL-Token",slug:"spl-token",children:[]},{level:3,title:"Wallet Adapter (C\xFCzdan Adapt\xF6r\xFC)",slug:"wallet-adapter-cuzdan-adaptoru",children:[]}]},{level:2,title:"Install Rust (Rust Kurulumu)",slug:"install-rust-rust-kurulumu",children:[]},{level:2,title:"Install CLI (CLI Kurulumu)",slug:"install-cli-cli-kurulumu",children:[{level:3,title:"macOS & Linux",slug:"macos-linux",children:[]},{level:3,title:"Windows",slug:"windows",children:[]},{level:3,title:"Build From Source (Kaynaktan Derleme)",slug:"build-from-source-kaynaktan-derleme",children:[]}]}],path:"/tr/getting-started/installation.html",pathLocale:"/tr/",extraFields:[]},{title:"Account Maps (Hesap Haritalar\u0131)",headers:[{level:2,title:"Deriving PDAs",slug:"deriving-pdas",children:[]},{level:2,title:"Single Map Account",slug:"single-map-account",children:[]}],path:"/tr/guides/account-maps.html",pathLocale:"/tr/",extraFields:[]},{title:"Migrating a Programs Data Accounts (Programlar\u0131n Data Account\u2019lar\u0131n\u0131 Ta\u015F\u0131ma)",headers:[{level:2,title:"How can you migrate a program's data accounts? (Programlar\u0131n veri account\u2019lar\u0131 nas\u0131l ta\u015F\u0131n\u0131r)",slug:"how-can-you-migrate-a-program-s-data-accounts-programlar\u0131n-veri-account-lar\u0131-nas\u0131l-tas\u0131n\u0131r",children:[]},{level:2,title:"Scenario (Senaryo)",slug:"scenario-senaryo",children:[]},{level:2,title:"Upgrading the Account (Account\u2019\u0131 Y\xFCkseltme)",slug:"upgrading-the-account-account-\u0131-yukseltme",children:[{level:3,title:"1. Add account conversion logic (Hesap d\xF6n\xFC\u015Ft\xFCrme mant\u0131\u011F\u0131 ekleme)",slug:"_1-add-account-conversion-logic-hesap-donusturme-mant\u0131g\u0131-ekleme",children:[]}]},{level:2,title:"Resources",slug:"resources",children:[]}],path:"/tr/guides/data-migration.html",pathLocale:"/tr/",extraFields:[]},{title:"Debugging Solana Programs (Solana Programlar\u0131nda Hata Ay\u0131klama)",headers:[{level:2,title:"Facts (\xD6zet Bilgiler)",slug:"facts-ozet-bilgiler",children:[]},{level:2,title:"Runtime Testing and Debugging in editor (Edit\xF6rde Runtime Test ve Hata Ay\u0131klama)",slug:"runtime-testing-and-debugging-in-editor-editorde-runtime-test-ve-hata-ay\u0131klama",children:[]},{level:2,title:"Local Validator Node Testing in editor (D\xFCzenleyicide Yerel Do\u011Frulay\u0131c\u0131 Node Testi)",slug:"local-validator-node-testing-in-editor-duzenleyicide-yerel-dogrulay\u0131c\u0131-node-testi",children:[]},{level:2,title:"Local Validator Node Testing from Client Apps (Client Uygulamalar\u0131nda Yerel Validator Node Testi)",slug:"local-validator-node-testing-from-client-apps-client-uygulamalar\u0131nda-yerel-validator-node-testi",children:[]},{level:2,title:"Resources",slug:"resources",children:[]}],path:"/tr/guides/debugging-solana-programs.html",pathLocale:"/tr/",extraFields:[]},{title:"Feature Parity Testing (\xD6zellik Parite Testi)",headers:[{level:2,title:"Facts (\xD6zet Bilgiler)",slug:"facts-ozet-bilgiler",children:[]},{level:2,title:"Scenario (Senaryo)",slug:"scenario-senaryo",children:[]},{level:2,title:"Feature Status (\xD6zellik Durumu)",slug:"feature-status-ozellik-durumu",children:[]},{level:2,title:"Parity Testing (Parite Testi)",slug:"parity-testing-parite-testi",children:[]},{level:2,title:"Simple Demonstration (Basit G\xF6sterim)",slug:"simple-demonstration-basit-gosterim",children:[{level:3,title:"All features activated (T\xFCm \xF6zellikler aktifle\u015Ftirildi)",slug:"all-features-activated-tum-ozellikler-aktiflestirildi",children:[]},{level:3,title:"Selective features deactivated (Se\xE7ici \xF6zellikler devre d\u0131\u015F\u0131 b\u0131rak\u0131ld\u0131)",slug:"selective-features-deactivated-secici-ozellikler-devre-d\u0131s\u0131-b\u0131rak\u0131ld\u0131",children:[]}]},{level:2,title:"Full Parity Testing Programmatically (Programl\u0131 Olarak Tam Parite Testi)",slug:"full-parity-testing-programmatically-programl\u0131-olarak-tam-parite-testi",children:[]},{level:2,title:"Resources",slug:"resources",children:[]}],path:"/tr/guides/feature-parity-testing.html",pathLocale:"/tr/",extraFields:[]},{title:"Get Program Accounts",headers:[{level:2,title:"Facts (\xD6zet Bilgiler)",slug:"facts-ozet-bilgiler",children:[]},{level:2,title:"Deep Dive (Derinlemesine Bak\u0131\u015F)",slug:"deep-dive-derinlemesine-bak\u0131s",children:[{level:3,title:"filters",slug:"filters",children:[]},{level:3,title:"dataSlice",slug:"dataslice",children:[]}]},{level:2,title:"Other Resources",slug:"other-resources",children:[]}],path:"/tr/guides/get-program-accounts.html",pathLocale:"/tr/",extraFields:[]},{title:"Retrying Transactions (\u0130\u015Flemleri Yeniden Denemek)",headers:[{level:2,title:"The Journey of a Transaction (Bir \u0130\u015Flemin Yolculu\u011Fu)",slug:"the-journey-of-a-transaction-bir-islemin-yolculugu",children:[{level:3,title:"How Clients Submit Transactions (Client\u2019lar \u0130\u015Flemleri Nas\u0131l G\xF6nderir)",slug:"how-clients-submit-transactions-client-lar-islemleri-nas\u0131l-gonderir",children:[]},{level:3,title:"How RPC Nodes Broadcast Transactions (RPC Node\u2019lar\u0131 \u0130\u015Flemleri Nas\u0131l Yay\u0131nlar)",slug:"how-rpc-nodes-broadcast-transactions-rpc-node-lar\u0131-islemleri-nas\u0131l-yay\u0131nlar",children:[]}]},{level:2,title:"How Transactions Get Dropped (\u0130\u015Flemler Nas\u0131l D\xFC\u015Fer)",slug:"how-transactions-get-dropped-islemler-nas\u0131l-duser",children:[{level:3,title:"Before a transaction is processed (\u0130\u015Flem i\u015Flenmeden \xF6nce)",slug:"before-a-transaction-is-processed-islem-islenmeden-once",children:[]},{level:3,title:"After a transaction is processed and before it is finalized (\u0130\u015Flem i\u015Flendikten sonra ama sonu\xE7lanmadan \xF6nce)",slug:"after-a-transaction-is-processed-and-before-it-is-finalized-islem-islendikten-sonra-ama-sonuclanmadan-once",children:[]}]},{level:2,title:"Handling Dropped Transactions (D\xFC\u015Fen \u0130\u015Flemleri Y\xF6netme)",slug:"handling-dropped-transactions-dusen-islemleri-yonetme",children:[{level:3,title:"An In-Depth Look at sendTransaction (sendTransaction\u2019a Derinden Bak\u0131\u015F)",slug:"an-in-depth-look-at-sendtransaction-sendtransaction-a-derinden-bak\u0131s",children:[]}]},{level:2,title:"Customizing Rebroadcast Logic (Rebroadcast Logic \xD6zelle\u015Ftirme)",slug:"customizing-rebroadcast-logic-rebroadcast-logic-ozellestirme",children:[{level:3,title:"The Cost of Skipping Preflight (\xD6n Kontrol\xFC Atlaman\u0131n Maliyeti)",slug:"the-cost-of-skipping-preflight-on-kontrolu-atlaman\u0131n-maliyeti",children:[]},{level:3,title:"When to Re-Sign Transactions (\u0130\u015Flemler Ne Zaman Yeniden \u0130mzalanmal\u0131)",slug:"when-to-re-sign-transactions-islemler-ne-zaman-yeniden-imzalanmal\u0131",children:[]}]},{level:2,title:"Acknowledgements (Te\u015Fekk\xFCrler)",slug:"acknowledgements-tesekkurler",children:[]}],path:"/tr/guides/retrying-transactions.html",pathLocale:"/tr/",extraFields:[]},{title:"Serializing Data (Serile\u015Ftirme)",headers:[{level:2,title:"Setting up for Borsh Serialization (Borsh Serialization i\xE7in Kurulum)",slug:"setting-up-for-borsh-serialization-borsh-serialization-icin-kurulum",children:[]},{level:2,title:"How to serialize instruction data on the client (Client\u2019taki y\xF6nerge verisi nas\u0131l serile\u015Ftirilir)",slug:"how-to-serialize-instruction-data-on-the-client-client-taki-yonerge-verisi-nas\u0131l-serilestirilir",children:[]},{level:2,title:"How to deserialize instruction data on the program (Instruction data programlarda nas\u0131l deserialize edilir)",slug:"how-to-deserialize-instruction-data-on-the-program-instruction-data-programlarda-nas\u0131l-deserialize-edilir",children:[]},{level:2,title:"How to serialize account data on the program (Programdaki account data nas\u0131l serialize edilir)",slug:"how-to-serialize-account-data-on-the-program-programdaki-account-data-nas\u0131l-serialize-edilir",children:[{level:3,title:"Pack",slug:"pack",children:[]},{level:3,title:"Serialization/Deserialization",slug:"serialization-deserialization",children:[]},{level:3,title:"Usage (Kullan\u0131m)",slug:"usage-kullan\u0131m",children:[]}]},{level:2,title:"How to deserialize account data on the client (Client\u2019ta account data nas\u0131l deserialize edilir)",slug:"how-to-deserialize-account-data-on-the-client-client-ta-account-data-nas\u0131l-deserialize-edilir",children:[]},{level:2,title:"Common Solana TS/JS Mappings (Yayg\u0131n Solana TS/JS E\u015Flemeleri)",slug:"common-solana-ts-js-mappings-yayg\u0131n-solana-ts-js-eslemeleri",children:[]},{level:2,title:"Advanced Constructs (Geli\u015Fmi\u015F Yap\u0131lar)",slug:"advanced-constructs-gelismis-yap\u0131lar",children:[{level:3,title:"COption",slug:"coption",children:[]}]},{level:2,title:"Resources",slug:"resources",children:[]}],path:"/tr/guides/serialization.html",pathLocale:"/tr/",extraFields:[]},{title:"Accounts (Account\u2019lar)",headers:[{level:2,title:"How to create a system account (System account olu\u015Fturma)",slug:"how-to-create-a-system-account-system-account-olusturma",children:[]},{level:2,title:"How to calculate account cost (Account maliyeti hesaplama)",slug:"how-to-calculate-account-cost-account-maliyeti-hesaplama",children:[]},{level:2,title:"How to calculate account cost (Account\u2019lar seed\u2019leri olu\u015Fturma)",slug:"how-to-calculate-account-cost-account-lar-seed-leri-olusturma",children:[{level:3,title:"Generate (\xDCretme)",slug:"generate-uretme",children:[]},{level:3,title:"Create (Olu\u015Fturma)",slug:"create-olusturma",children:[]},{level:3,title:"Transfer (Transfer)",slug:"transfer-transfer",children:[]}]},{level:2,title:"How to create PDAs (PDA\u2019leri olu\u015Fturma)",slug:"how-to-create-pdas-pda-leri-olusturma",children:[{level:3,title:"Generate a PDA (PDA \xFCretme)",slug:"generate-a-pda-pda-uretme",children:[]},{level:3,title:"Create a PDA (PDA olu\u015Fturma)",slug:"create-a-pda-pda-olusturma",children:[]}]},{level:2,title:"How to sign with a PDA (PDA ile imzalama)",slug:"how-to-sign-with-a-pda-pda-ile-imzalama",children:[{level:3,title:"Program",slug:"program-1",children:[]},{level:3,title:"Client",slug:"client-1",children:[]}]},{level:2,title:"How to get program accounts (Program hesaplar\u0131n\u0131 getirme)",slug:"how-to-get-program-accounts-program-hesaplar\u0131n\u0131-getirme",children:[]},{level:2,title:"How to close accounts (Account\u2019lar\u0131 kapatma)",slug:"how-to-close-accounts-account-lar\u0131-kapatma",children:[]},{level:2,title:"How to get account balance (Account bakiyesi getirme)",slug:"how-to-get-account-balance-account-bakiyesi-getirme",children:[]}],path:"/tr/references/accounts.html",pathLocale:"/tr/",extraFields:[]},{title:"Sending Transactions(\u0130\u015Flem G\xF6nderimi)",headers:[{level:2,title:"How to send SOL (SOL nas\u0131l g\xF6nderilir)",slug:"how-to-send-sol-sol-nas\u0131l-gonderilir",children:[]},{level:2,title:"How to send SPL-Tokens (SPL-Token\u2019lar nas\u0131l g\xF6nderilir)",slug:"how-to-send-spl-tokens-spl-token-lar-nas\u0131l-gonderilir",children:[]},{level:2,title:"How to calculate transaction cost (\u0130\u015Flem maliyeti nas\u0131l hesaplan\u0131r)",slug:"how-to-calculate-transaction-cost-islem-maliyeti-nas\u0131l-hesaplan\u0131r",children:[{level:3,title:"getEstimatedFee",slug:"getestimatedfee",children:[]},{level:3,title:"getFeeForMessage",slug:"getfeeformessage",children:[]}]},{level:2,title:"How to add a memo to a transaction (Bir i\u015Fleme mesaj nas\u0131l eklenir)",slug:"how-to-add-a-memo-to-a-transaction-bir-isleme-mesaj-nas\u0131l-eklenir",children:[]},{level:2,title:"How to change compute budget, fee, & priority for a transaction (Bir i\u015Flem i\xE7in i\u015Flem b\xFCt\xE7esi, bedeli ve \xF6nceli\u011Fi nas\u0131l de\u011Fi\u015Ftirilir)",slug:"how-to-change-compute-budget-fee-priority-for-a-transaction-bir-islem-icin-islem-butcesi-bedeli-ve-onceligi-nas\u0131l-degistirilir",children:[]}],path:"/tr/references/basic-transactions.html",pathLocale:"/tr/",extraFields:[]},{title:"Keypairs and Wallets",headers:[{level:2,title:"How to generate a new Keypair (Yeni Keypair nas\u0131l olu\u015Fturulur)",slug:"how-to-generate-a-new-keypair-yeni-keypair-nas\u0131l-olusturulur",children:[]},{level:2,title:"How to verify a Keypair (Keypair nas\u0131l do\u011Frulan\u0131r)",slug:"how-to-verify-a-keypair-keypair-nas\u0131l-dogrulan\u0131r",children:[]},{level:2,title:"How to check if a public key has an associated private key (Bir public key\u2019in ili\u015Fkili private key\u2019e sahip olup olmad\u0131\u011F\u0131 nas\u0131l kontrol edilir)",slug:"how-to-check-if-a-public-key-has-an-associated-private-key-bir-public-key-in-iliskili-private-key-e-sahip-olup-olmad\u0131g\u0131-nas\u0131l-kontrol-edilir",children:[]},{level:2,title:"How to generate a mnemonic phrase (Hat\u0131rlat\u0131c\u0131 bir ifade nas\u0131l olu\u015Fturulur)",slug:"how-to-generate-a-mnemonic-phrase-hat\u0131rlat\u0131c\u0131-bir-ifade-nas\u0131l-olusturulur",children:[]},{level:2,title:"How to restore a Keypair from a mnemonic phrase (An\u0131msat\u0131c\u0131 bir c\xFCmleden Keypair nas\u0131l y\xFCklenir)",slug:"how-to-restore-a-keypair-from-a-mnemonic-phrase-an\u0131msat\u0131c\u0131-bir-cumleden-keypair-nas\u0131l-yuklenir",children:[]},{level:2,title:"How to generate a vanity address (\xD6zel bir adres nas\u0131l olu\u015Fturulur)",slug:"how-to-generate-a-vanity-address-ozel-bir-adres-nas\u0131l-olusturulur",children:[]},{level:2,title:"How to sign and verify messages with wallets (C\xFCzdanlarla mesajlar nas\u0131l imzalan\u0131r ve do\u011Frulan\u0131r)",slug:"how-to-sign-and-verify-messages-with-wallets-cuzdanlarla-mesajlar-nas\u0131l-imzalan\u0131r-ve-dogrulan\u0131r",children:[]},{level:2,title:"How to connect to a wallet (C\xFCzdana nas\u0131l ba\u011Flan\u0131l\u0131r)",slug:"how-to-connect-to-a-wallet-cuzdana-nas\u0131l-baglan\u0131l\u0131r",children:[{level:3,title:"React",slug:"react",children:[]},{level:3,title:"Vue",slug:"vue",children:[]},{level:3,title:"Svelte",slug:"svelte",children:[]}]}],path:"/tr/references/keypairs-and-wallets.html",pathLocale:"/tr/",extraFields:[]},{title:"Local Development (Yerel Geli\u015Ftirme)",headers:[{level:2,title:"Starting a local validator (Yerel validator ba\u015Flatma)",slug:"starting-a-local-validator-yerel-validator-baslatma",children:[]},{level:2,title:"Connecting to Environments (Ortamlara Ba\u011Flanma)",slug:"connecting-to-environments-ortamlara-baglanma",children:[]},{level:2,title:"Subscribing to Events (Event\u2019lere Abone Olma)",slug:"subscribing-to-events-event-lere-abone-olma",children:[]},{level:2,title:"Getting Test SOL (Test SOL Edinme)",slug:"getting-test-sol-test-sol-edinme",children:[]},{level:2,title:"Using Mainnet Accounts and Programs (Mainnet Account ve Programlar\u0131n\u0131 Kullanma)",slug:"using-mainnet-accounts-and-programs-mainnet-account-ve-programlar\u0131n\u0131-kullanma",children:[{level:3,title:"How to load accounts from mainnet (Account\u2019lar mainnet\u2019ten nas\u0131l y\xFCklenir)",slug:"how-to-load-accounts-from-mainnet-account-lar-mainnet-ten-nas\u0131l-yuklenir",children:[]},{level:3,title:"How to load programs from mainnet (Programlar mainnet\u2019ten nas\u0131l y\xFCklenir)",slug:"how-to-load-programs-from-mainnet-programlar-mainnet-ten-nas\u0131l-yuklenir",children:[]}]}],path:"/tr/references/local-development.html",pathLocale:"/tr/",extraFields:[]},{title:"Name Service (Name Servisi)",headers:[{level:2,title:"Name registry (Name kayd\u0131)",slug:"name-registry-name-kayd\u0131",children:[]},{level:2,title:"Resolving SOL domains (SOL alan adlar\u0131n\u0131 \xE7\xF6zme)",slug:"resolving-sol-domains-sol-alan-adlar\u0131n\u0131-cozme",children:[]},{level:2,title:"Reverse lookup (Geriye do\u011Fru arama)",slug:"reverse-lookup-geriye-dogru-arama",children:[]},{level:2,title:"Subdomain lookup (Subdomain arama)",slug:"subdomain-lookup-subdomain-arama",children:[]},{level:2,title:"Find all the domain names owned by a public key (Bir public key\u2019in sahip oldu\u011Fu t\xFCm isimleri bulma)",slug:"find-all-the-domain-names-owned-by-a-public-key-bir-public-key-in-sahip-oldugu-tum-isimleri-bulma",children:[]},{level:2,title:"Resolve a Twitter handle (Twitter handle\u2019\u0131n\u0131 \xE7\xF6zme)",slug:"resolve-a-twitter-handle-twitter-handle-\u0131n\u0131-cozme",children:[]},{level:2,title:"Reverse lookup of a Twitter handle (Twitter handle\u2019\u0131n\u0131 geri aratma)",slug:"reverse-lookup-of-a-twitter-handle-twitter-handle-\u0131n\u0131-geri-aratma",children:[]}],path:"/tr/references/name-service.html",pathLocale:"/tr/",extraFields:[]},{title:"Non Fungible Tokens (NFTs)",headers:[{level:2,title:"How to create an NFT (NFT olu\u015Fturma)",slug:"how-to-create-an-nft-nft-olusturma",children:[{level:3,title:"Upload to Arweave (Arwave\u2019e y\xFCkleme)",slug:"upload-to-arweave-arwave-e-yukleme",children:[]},{level:3,title:"Mint the NFT (NFT Mint)",slug:"mint-the-nft-nft-mint",children:[]}]},{level:2,title:"How to get NFT Metadata (NFT Metadata\u2019y\u0131 getirme)",slug:"how-to-get-nft-metadata-nft-metadata-y\u0131-getirme",children:[]},{level:2,title:"How to get the owner of an NFT (Bir NFT\u2019nin sahibini getirme)",slug:"how-to-get-the-owner-of-an-nft-bir-nft-nin-sahibini-getirme",children:[]},{level:2,title:"How to get NFT Mint Addresses (NFT Mint Adres\u2019lerini getirme)",slug:"how-to-get-nft-mint-addresses-nft-mint-adres-lerini-getirme",children:[{level:3,title:"Candy Machine V1",slug:"candy-machine-v1",children:[]},{level:3,title:"Candy Machine V2",slug:"candy-machine-v2",children:[]}]},{level:2,title:"How to get all NFTs from a wallet? (Bir c\xFCzdandan t\xFCm NFT\u2019leri alma)",slug:"how-to-get-all-nfts-from-a-wallet-bir-cuzdandan-tum-nft-leri-alma",children:[]}],path:"/tr/references/nfts.html",pathLocale:"/tr/",extraFields:[]},{title:"Offline Transaction (\xC7evrimd\u0131\u015F\u0131 i\u015Flem)",headers:[{level:2,title:"Sign Transaction (\u0130\u015Flem \u0130mzalama)",slug:"sign-transaction-islem-imzalama",children:[]},{level:2,title:"Partial Sign Transaction (K\u0131smi \u0130mzalama)",slug:"partial-sign-transaction-k\u0131smi-imzalama",children:[]},{level:2,title:"Durable Nonce(Uzun S\xFCreli Nonce)",slug:"durable-nonce-uzun-sureli-nonce",children:[{level:3,title:"Create Nonce Account (Nonce Account Olu\u015Fturma)",slug:"create-nonce-account-nonce-account-olusturma",children:[]},{level:3,title:"Get Nonce Account (Nonce Account Getirme)",slug:"get-nonce-account-nonce-account-getirme",children:[]},{level:3,title:"Use Nonce Account (Nonce Account Kullanma)",slug:"use-nonce-account-nonce-account-kullanma",children:[]}]}],path:"/tr/references/offline-transactions.html",pathLocale:"/tr/",extraFields:[]},{title:"Writing Programs (Programlar\u0131 Yazma)",headers:[{level:2,title:"How to transfer SOL in a program (Programda SOL aktarma)",slug:"how-to-transfer-sol-in-a-program-programda-sol-aktarma",children:[]},{level:2,title:"How to get clock in a program (Programlarda saat)",slug:"how-to-get-clock-in-a-program-programlarda-saat",children:[{level:3,title:"Passing Clock as an account inside an instruction (Saati bir intstruction i\xE7inde bir hesap olarak ge\xE7irme)",slug:"passing-clock-as-an-account-inside-an-instruction-saati-bir-intstruction-icinde-bir-hesap-olarak-gecirme",children:[]},{level:3,title:"Accessing Clock directly inside an instruction (Saate do\u011Frudan bir instruction i\xE7inden eri\u015Fme)",slug:"accessing-clock-directly-inside-an-instruction-saate-dogrudan-bir-instruction-icinden-erisme",children:[]}]},{level:2,title:"How to change account size (Account boyutu de\u011Fi\u015Ftirme)",slug:"how-to-change-account-size-account-boyutu-degistirme",children:[]},{level:2,title:"How to do Cross Program Invocation (\xC7apraz Program \xC7a\u011F\u0131rma)",slug:"how-to-do-cross-program-invocation-capraz-program-cag\u0131rma",children:[]},{level:2,title:"How to create a PDA (PDA olu\u015Fturma)",slug:"how-to-create-a-pda-pda-olusturma",children:[]},{level:2,title:"How to read accounts (Account\u2019lar\u0131 okuma)",slug:"how-to-read-accounts-account-lar\u0131-okuma",children:[]},{level:2,title:"How to verify accounts (Account\u2019lar\u0131 do\u011Frulama)",slug:"how-to-verify-accounts-account-lar\u0131-dogrulama",children:[]},{level:2,title:"How to read multiple instructions from a transaction (\u0130\u015Flemdeki \xE7oklu talimatlar\u0131 okuma)",slug:"how-to-read-multiple-instructions-from-a-transaction-islemdeki-coklu-talimatlar\u0131-okuma",children:[]}],path:"/tr/references/programs.html",pathLocale:"/tr/",extraFields:[]},{title:"Staking (Stake Etme)",headers:[{level:2,title:"Get Current Validators (Ge\xE7erli Validator\u2019lar\u0131 Getirme)",slug:"get-current-validators-gecerli-validator-lar\u0131-getirme",children:[]},{level:2,title:"Create Stake Account (Stake hesab\u0131 olu\u015Fturma)",slug:"create-stake-account-stake-hesab\u0131-olusturma",children:[]},{level:2,title:"Delegate Stake (Delegate Stake)",slug:"delegate-stake-delegate-stake",children:[]},{level:2,title:"Get Delegator by Validators (Validator account\u2019a stake eden account\u2019lar\u0131 getirme)",slug:"get-delegator-by-validators-validator-account-a-stake-eden-account-lar\u0131-getirme",children:[]},{level:2,title:"Deactivate Stake (Stake\u2019i Devre D\u0131\u015F\u0131 B\u0131rakma)",slug:"deactivate-stake-stake-i-devre-d\u0131s\u0131-b\u0131rakma",children:[]},{level:2,title:"Withdraw Stake (Stake\u2019i \xC7ekme)",slug:"withdraw-stake-stake-i-cekme",children:[]}],path:"/tr/references/staking.html",pathLocale:"/tr/",extraFields:[]},{title:"Interacting with Tokens (Token\u2019lar ile Etkile\u015Fim)",headers:[{level:2,title:"What do I need to get started with SPL-Tokens? (SPL Token\u2019lar\u0131 kullanmaya ba\u015Flamak i\xE7in neye ihtiyac\u0131m\u0131z var?)",slug:"what-do-i-need-to-get-started-with-spl-tokens-spl-token-lar\u0131-kullanmaya-baslamak-icin-neye-ihtiyac\u0131m\u0131z-var",children:[]},{level:2,title:"How to create a new Token (Yeni bir Token olu\u015Fturma)",slug:"how-to-create-a-new-token-yeni-bir-token-olusturma",children:[]},{level:2,title:"How to get a token mint (Token Mint etme)",slug:"how-to-get-a-token-mint-token-mint-etme",children:[]},{level:2,title:"How to create a token account (Token account olu\u015Fturma)",slug:"how-to-create-a-token-account-token-account-olusturma",children:[]},{level:2,title:"How to get a Token Account (Token account\u2019u getirme)",slug:"how-to-get-a-token-account-token-account-u-getirme",children:[]},{level:2,title:"How to get a token account's balance (Token account bakiyesi getirme)",slug:"how-to-get-a-token-account-s-balance-token-account-bakiyesi-getirme",children:[]},{level:2,title:"How to mint tokens (Token mint\u2019leme)",slug:"how-to-mint-tokens-token-mint-leme",children:[]},{level:2,title:"How to transfer tokens (Token transfer etme)",slug:"how-to-transfer-tokens-token-transfer-etme",children:[]},{level:2,title:"How to burn tokens (Token yakma(burn))",slug:"how-to-burn-tokens-token-yakma-burn",children:[]},{level:2,title:"How to close token accounts (Token account\u2019lar\u0131n\u0131 kapatma)",slug:"how-to-close-token-accounts-token-account-lar\u0131n\u0131-kapatma",children:[]},{level:2,title:"How to set authority on token accounts or mints (Token hesaplar\u0131nda ve mint\u2019lerinde yetki belirleme)",slug:"how-to-set-authority-on-token-accounts-or-mints-token-hesaplar\u0131nda-ve-mint-lerinde-yetki-belirleme",children:[]},{level:2,title:"How to approve a token delegate (Token delegate onaylama)",slug:"how-to-approve-a-token-delegate-token-delegate-onaylama",children:[]},{level:2,title:"How to revoke a token delegate (Token delegate iptal etme)",slug:"how-to-revoke-a-token-delegate-token-delegate-iptal-etme",children:[]},{level:2,title:"How to manage wrapped SOL (Wrapped SOL y\xF6netimi)",slug:"how-to-manage-wrapped-sol-wrapped-sol-yonetimi",children:[{level:3,title:"Create Token Account (Token Account Olu\u015Fturma)",slug:"create-token-account-token-account-olusturma",children:[]},{level:3,title:"Add Balance (Bakiye Ekleme)",slug:"add-balance-bakiye-ekleme",children:[]}]},{level:2,title:"How to get all token accounts by owner (T\xFCm token account\u2019lar\u0131 sahibi taraf\u0131ndan nas\u0131l al\u0131n\u0131r?)",slug:"how-to-get-all-token-accounts-by-owner-tum-token-account-lar\u0131-sahibi-taraf\u0131ndan-nas\u0131l-al\u0131n\u0131r",children:[]}],path:"/tr/references/token.html",pathLocale:"/tr/",extraFields:[]},{title:"Accounts",headers:[{level:2,title:"C\xF3 th\u1EC3 b\u1EA1n ch\u01B0a bi\u1EBFt",slug:"co-the-ban-chua-biet",children:[]},{level:2,title:"Chi ti\u1EBFt",slug:"chi-tiet",children:[{level:3,title:"C\u1EA5u tr\xFAc Account",slug:"cau-truc-account",children:[]},{level:3,title:"Thu\xEA",slug:"thue",children:[]}]},{level:2,title:"C\xE1c ngu\u1ED3n t\xE0i li\u1EC7u kh\xE1c",slug:"cac-nguon-tai-lieu-khac",children:[{level:3,title:"L\u1EDDi c\u1EA3m \u01A1n",slug:"loi-cam-on",children:[]}]}],path:"/vi/core-concepts/accounts.html",pathLocale:"/vi/",extraFields:[]},{title:"Program Derived Addresses (PDAs)",headers:[{level:2,title:"C\xF3 th\u1EC3 b\u1EA1n ch\u01B0a bi\u1EBFt",slug:"co-the-ban-chua-biet",children:[{level:3,title:"C\xE1ch sinh PDA",slug:"cach-sinh-pda",children:[]},{level:3,title:"T\u01B0\u01A1ng t\xE1c v\u1EDBi PDAs",slug:"tuong-tac-voi-pdas",children:[]}]},{level:2,title:"C\xE1c ngu\u1ED3n t\xE0i li\u1EC7u kh\xE1c",slug:"cac-nguon-tai-lieu-khac",children:[]}],path:"/vi/core-concepts/pdas.html",pathLocale:"/vi/",extraFields:[]},{title:"Programs",headers:[{level:2,title:"C\xF3 th\u1EC3 b\u1EA1n ch\u01B0a bi\u1EBFt",slug:"co-the-ban-chua-biet",children:[]},{level:2,title:"Chi ti\u1EBFt",slug:"chi-tiet",children:[{level:3,title:"Native Programs & Solana Program Library (SPL) Programs",slug:"native-programs-solana-program-library-spl-programs",children:[]},{level:3,title:"Vi\u1EBFt m\u1ED9t Program",slug:"viet-mot-program",children:[]},{level:3,title:"Tri\u1EC3n khai Program",slug:"trien-khai-program",children:[]}]},{level:2,title:"C\xE1c ngu\u1ED3n t\xE0i li\u1EC7u kh\xE1c",slug:"cac-nguon-tai-lieu-khac",children:[]}],path:"/vi/core-concepts/programs.html",pathLocale:"/vi/",extraFields:[]},{title:"Transactions",headers:[{level:2,title:"C\xF3 th\u1EC3 b\u1EA1n ch\u01B0a bi\u1EBFt",slug:"co-the-ban-chua-biet",children:[]},{level:2,title:"Chi ti\u1EBFt",slug:"chi-tiet",children:[{level:3,title:"Ph\xED",slug:"phi",children:[]}]},{level:2,title:"C\xE1c ngu\u1ED3n t\xE0i li\u1EC7u kh\xE1c",slug:"cac-nguon-tai-lieu-khac",children:[]}],path:"/vi/core-concepts/transactions.html",pathLocale:"/vi/",extraFields:[]},{title:"C\xE0i \u0111\u1EB7t",headers:[{level:2,title:"C\xE0i \u0111\u1EB7t Web3.js",slug:"cai-\u0111at-web3-js",children:[{level:3,title:"Web3.js",slug:"web3-js",children:[]},{level:3,title:"SPL-Token",slug:"spl-token",children:[]},{level:3,title:"Wallet-Adapter",slug:"wallet-adapter",children:[]}]},{level:2,title:"C\xE0i \u0111\u1EB7t Rust",slug:"cai-\u0111at-rust",children:[]},{level:2,title:"C\xE0i \u0111\u1EB7t CLI",slug:"cai-\u0111at-cli",children:[{level:3,title:"macOS & Linux",slug:"macos-linux",children:[]},{level:3,title:"Windows",slug:"windows",children:[]},{level:3,title:"Bi\xEAn d\u1ECBch t\u1EEB m\xE3 ngu\u1ED3n",slug:"bien-dich-tu-ma-nguon",children:[]}]}],path:"/vi/getting-started/installation.html",pathLocale:"/vi/",extraFields:[]},{title:"Account Maps",headers:[{level:2,title:"T\xECm PDA",slug:"tim-pda",children:[]},{level:2,title:"Map b\u1EB1ng Account \u0111\u01A1n",slug:"map-bang-account-\u0111on",children:[]}],path:"/vi/guides/account-maps.html",pathLocale:"/vi/",extraFields:[]},{title:"N\xE2ng c\u1EA5p d\u1EEF li\u1EC7u cho Program Account",headers:[{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 c\xF3 th\u1EC3 n\xE2ng c\u1EA5p d\u1EEF li\u1EC7u trong Program Account?",slug:"lam-the-nao-\u0111e-co-the-nang-cap-du-lieu-trong-program-account",children:[]},{level:2,title:"Ng\u1EEF c\u1EA3nh",slug:"ngu-canh",children:[]},{level:2,title:"N\xE2ng c\u1EA5p Account",slug:"nang-cap-account",children:[{level:3,title:"1. Th\xEAm lu\u1EADn l\xFD \u0111\u1EC3 chuy\u1EC3n \u0111\u1ED5i Account",slug:"_1-them-luan-ly-\u0111e-chuyen-\u0111oi-account",children:[]}]},{level:2,title:"C\xE1c ngu\u1ED3n t\xE0i li\u1EC7u kh\xE1c",slug:"cac-nguon-tai-lieu-khac",children:[]}],path:"/vi/guides/data-migration.html",pathLocale:"/vi/",extraFields:[]},{title:"So\xE1t l\u1ED7i ch\u01B0\u01A1ng tr\xECnh tr\xEAn Solana",headers:[{level:2,title:"C\xF3 th\u1EC3 b\u1EA1n ch\u01B0a bi\u1EBFt",slug:"co-the-ban-chua-biet",children:[]},{level:2,title:"M\xF4i tr\u01B0\u1EDDng ki\u1EC3m th\u1EED v\xE0 so\xE1t l\u1ED7i trong tr\xECnh bi\xEAn t\u1EADp",slug:"moi-truong-kiem-thu-va-soat-loi-trong-trinh-bien-tap",children:[]},{level:2,title:"Ki\u1EC3m th\u1EED b\u1EB1ng n\u1ED1t Local Validator trong tr\xECnh bi\xEAn t\u1EADp",slug:"kiem-thu-bang-not-local-validator-trong-trinh-bien-tap",children:[]},{level:2,title:"Ki\u1EC3m th\u1EED b\u1EB1ng n\u1ED1t Local Validator tr\xEAn \u1EE9ng d\u1EE5ng ng\u01B0\u1EDDi d\xF9ng",slug:"kiem-thu-bang-not-local-validator-tren-ung-dung-nguoi-dung",children:[]},{level:2,title:"C\xE1c ngu\u1ED3n t\xE0i li\u1EC7u kh\xE1c",slug:"cac-nguon-tai-lieu-khac",children:[]}],path:"/vi/guides/debugging-solana-programs.html",pathLocale:"/vi/",extraFields:[]},{title:"\u0110\u1EC1 xu\u1EA5t Ki\u1EC3m th\u1EED Parity",headers:[{level:2,title:"C\xF3 th\u1EC3 b\u1EA1n ch\u01B0a bi\u1EBFt",slug:"co-the-ban-chua-biet",children:[]},{level:2,title:"T\xECnh hu\u1ED1ng gi\u1EA3 \u0111\u1ECBnh",slug:"tinh-huong-gia-\u0111inh",children:[]},{level:2,title:"\u0110\u1EC1 xu\u1EA5t Tr\u1EA1ng th\xE1i",slug:"\u0111e-xuat-trang-thai",children:[]},{level:2,title:"Ki\u1EC3m th\u1EED Parity",slug:"kiem-thu-parity",children:[]},{level:2,title:"V\xED d\u1EE5 \u0111\u01A1n gi\u1EA3n",slug:"vi-du-\u0111on-gian",children:[{level:3,title:"Khi t\u1EA5t c\u1EA3 c\xE1c \u0111\u1EC1 xu\u1EA5t \u0111\u1EC1u k\xEDch ho\u1EA1t",slug:"khi-tat-ca-cac-\u0111e-xuat-\u0111eu-kich-hoat",children:[]},{level:3,title:"V\xF4 hi\u1EC7u m\u1ED9t v\xE0i \u0111\u1EC1 xu\u1EA5t",slug:"vo-hieu-mot-vai-\u0111e-xuat",children:[]}]},{level:2,title:"Ki\u1EC3m th\u1EED Parity \u0110\u1EA7y \u0111\u1EE7",slug:"kiem-thu-parity-\u0111ay-\u0111u",children:[]},{level:2,title:"C\xE0i \u0111\u1EB7t t\u1EF1 \u0111\u1ED9ng cho Ki\u1EC3m th\u1EED Parity \u0110\u1EA7y \u0111\u1EE7",slug:"cai-\u0111at-tu-\u0111ong-cho-kiem-thu-parity-\u0111ay-\u0111u",children:[]},{level:2,title:"C\xE1c ngu\u1ED3n t\xE0i li\u1EC7u kh\xE1c",slug:"cac-nguon-tai-lieu-khac",children:[]}],path:"/vi/guides/feature-parity-testing.html",pathLocale:"/vi/",extraFields:[]},{title:"\u0110\u1ECDc d\u1EEF li\u1EC7u Program Account",headers:[{level:2,title:"C\xF3 th\u1EC3 b\u1EA1n ch\u01B0a bi\u1EBFt",slug:"co-the-ban-chua-biet",children:[]},{level:2,title:"Chi ti\u1EBFt",slug:"chi-tiet",children:[{level:3,title:"filters",slug:"filters",children:[]},{level:3,title:"dataSlice",slug:"dataslice",children:[]}]},{level:2,title:"C\xE1c ngu\u1ED3n t\xE0i li\u1EC7u kh\xE1c",slug:"cac-nguon-tai-lieu-khac",children:[]}],path:"/vi/guides/get-program-accounts.html",pathLocale:"/vi/",extraFields:[]},{title:"Th\u1EED l\u1EA1i Transaction",headers:[{level:2,title:"C\xF3 th\u1EC3 b\u1EA1n ch\u01B0a bi\u1EBFt",slug:"co-the-ban-chua-biet",children:[]},{level:2,title:"H\xE0nh tr\xECnh c\u1EE7a m\u1ED9t Transaction",slug:"hanh-trinh-cua-mot-transaction",children:[{level:3,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 ng\u01B0\u1EDDi d\xF9ng g\u1EEDi Transactions",slug:"lam-the-nao-\u0111e-nguoi-dung-gui-transactions",children:[]},{level:3,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 c\xE1c n\u1ED1t RPC lan truy\u1EC1n Transaction",slug:"lam-the-nao-\u0111e-cac-not-rpc-lan-truyen-transaction",children:[]}]},{level:2,title:"Khi n\xE0o c\xE1c Transaction b\u1ECB hu\u1EF7",slug:"khi-nao-cac-transaction-bi-huy",children:[{level:3,title:"Tr\u01B0\u1EDBc khi Transaction \u0111\u01B0\u1EE3c x\u1EED l\xFD",slug:"truoc-khi-transaction-\u0111uoc-xu-ly",children:[]},{level:3,title:"Sau khi Transaction \u0111\u01B0\u1EE3c x\u1EED l\xFD nh\u01B0nh tr\u01B0\u1EDBc khi \u0111\u01B0\u1EE3c ghi v\xE0o block",slug:"sau-khi-transaction-\u0111uoc-xu-ly-nhunh-truoc-khi-\u0111uoc-ghi-vao-block",children:[]}]},{level:2,title:"X\u1EED tr\xED v\u1EDBi Transaction b\u1ECB hu\u1EF7",slug:"xu-tri-voi-transaction-bi-huy",children:[{level:3,title:"Nghi\xEAn c\u1EE9u sendTransaction",slug:"nghien-cuu-sendtransaction",children:[]}]},{level:2,title:"Tu\u1EF3 ch\u1EC9nh thu\u1EADt to\xE1n lan truy\u1EC1n",slug:"tuy-chinh-thuat-toan-lan-truyen",children:[{level:3,title:"C\xE2n nh\u1EAFc khi b\u1ECF qua Preflight",slug:"can-nhac-khi-bo-qua-preflight",children:[]},{level:3,title:"Khi n\xE0o n\xEAn t\xE1i k\xFD transaction",slug:"khi-nao-nen-tai-ky-transaction",children:[]}]},{level:2,title:"L\u1EDDi c\u1EA3m \u01A1n",slug:"loi-cam-on",children:[]}],path:"/vi/guides/retrying-transactions.html",pathLocale:"/vi/",extraFields:[]},{title:"Tu\u1EA7n t\u1EF1 ho\xE1 d\u1EEF li\u1EC7u",headers:[{level:2,title:"C\xE0i \u0111\u1EB7t Tu\u1EA7n t\u1EF1 ho\xE1 Borsh",slug:"cai-\u0111at-tuan-tu-hoa-borsh",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 tu\u1EA7n t\u1EF1 ho\xE1 d\u1EEF li\u1EC7u c\u1EE7a c\xE1c ch\u1EC9 th\u1ECB t\u1EEB ph\xEDa ng\u01B0\u1EDDi d\xF9ng",slug:"lam-the-nao-\u0111e-tuan-tu-hoa-du-lieu-cua-cac-chi-thi-tu-phia-nguoi-dung",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 phi tu\u1EA7n t\u1EF1 ho\xE1 d\u1EEF li\u1EC7u c\u1EE7a c\xE1c ch\u1EC9 th\u1ECB tr\xEAn Program",slug:"lam-the-nao-\u0111e-phi-tuan-tu-hoa-du-lieu-cua-cac-chi-thi-tren-program",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 tu\u1EA7n t\u1EF1 ho\xE1 d\u1EEF li\u1EC7u Account tr\xEAn Program",slug:"lam-the-nao-\u0111e-tuan-tu-hoa-du-lieu-account-tren-program",children:[{level:3,title:"Pack (\u0110\xF3ng g\xF3i)",slug:"pack-\u0111ong-goi",children:[]},{level:3,title:"Tu\u1EA7n t\u1EF1 ho\xE1 v\xE0 Phi tu\u1EA7n t\u1EF1 ho\xE1",slug:"tuan-tu-hoa-va-phi-tuan-tu-hoa",children:[]},{level:3,title:"C\xE1ch d\xF9ng",slug:"cach-dung",children:[]}]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 tu\u1EA7n ho\xE1 d\u1EEF li\u1EC7u Account \u1EDF ph\xEDa ng\u01B0\u1EDDi d\xF9ng",slug:"lam-the-nao-\u0111e-tuan-hoa-du-lieu-account-o-phia-nguoi-dung",children:[]},{level:2,title:"Mapping c\u01A1 b\u1EA3n b\u1EB1ng TS/JS cho Solana",slug:"mapping-co-ban-bang-ts-js-cho-solana",children:[]},{level:2,title:"Ki\u1EC3u d\u1EEF li\u1EC7u n\xE2ng cao",slug:"kieu-du-lieu-nang-cao",children:[{level:3,title:"COption",slug:"coption",children:[]}]},{level:2,title:"C\xE1c ngu\u1ED3n t\xE0i li\u1EC7u kh\xE1c",slug:"cac-nguon-tai-lieu-khac",children:[]}],path:"/vi/guides/serialization.html",pathLocale:"/vi/",extraFields:[]},{title:"Getting Started",headers:[{level:2,title:"Composability is Key",slug:"composability-is-key",children:[]},{level:2,title:"Contributing",slug:"contributing",children:[]}],path:"/vi/integrations/",pathLocale:"/vi/",extraFields:[]},{title:"Jupiter",headers:[{level:3,title:"Installation",slug:"installation",children:[]},{level:3,title:"Fetching Token list from Jupiter",slug:"fetching-token-list-from-jupiter",children:[]},{level:3,title:"Loading the Jupiter instance",slug:"loading-the-jupiter-instance",children:[]},{level:3,title:"Getting the RouteMap",slug:"getting-the-routemap",children:[]},{level:3,title:"Getting the routes for given Input and Output token",slug:"getting-the-routes-for-given-input-and-output-token",children:[]},{level:3,title:"Execute the Token Swap",slug:"execute-the-token-swap",children:[]},{level:2,title:"How to use Jupiter in a React Application",slug:"how-to-use-jupiter-in-a-react-application",children:[{level:3,title:"Installation",slug:"installation-1",children:[]},{level:3,title:"Adding the Provider",slug:"adding-the-provider",children:[]},{level:3,title:"Fetching the List of Tokens",slug:"fetching-the-list-of-tokens",children:[]},{level:3,title:"Setting up the State",slug:"setting-up-the-state",children:[]},{level:3,title:"Using the useJupiter react hook",slug:"using-the-usejupiter-react-hook",children:[]},{level:3,title:"Performing the Swap",slug:"performing-the-swap",children:[]}]},{level:2,title:"How to use Jupiter API",slug:"how-to-use-jupiter-api",children:[{level:3,title:"Installation",slug:"installation-2",children:[]},{level:3,title:"Getting the Route Map",slug:"getting-the-route-map",children:[]},{level:3,title:"Getting the Serialized Transaction to perform Swap",slug:"getting-the-serialized-transaction-to-perform-swap",children:[]},{level:3,title:"Executing the Swap Transaction",slug:"executing-the-swap-transaction",children:[]}]},{level:2,title:"Other Resources",slug:"other-resources",children:[]}],path:"/vi/integrations/jupiter.html",pathLocale:"/vi/",extraFields:[]},{title:"Mango Markets",headers:[{level:2,title:"How to get a Mango Group",slug:"how-to-get-a-mango-group",children:[]},{level:2,title:"How to create a Mango Account",slug:"how-to-create-a-mango-account",children:[]},{level:2,title:"How to deposit USDC into a Mango Account",slug:"how-to-deposit-usdc-into-a-mango-account",children:[]},{level:2,title:"How to place a spot order",slug:"how-to-place-a-spot-order",children:[]},{level:2,title:"How to load bids",slug:"how-to-load-bids",children:[]},{level:2,title:"How to load asks",slug:"how-to-load-asks",children:[]},{level:2,title:"Other Resources",slug:"other-resources",children:[]}],path:"/vi/integrations/mango.html",pathLocale:"/vi/",extraFields:[]},{title:"Pyth",headers:[{level:2,title:"How to use Pyth in Client",slug:"how-to-use-pyth-in-client",children:[]},{level:2,title:"How to use Pyth in Anchor",slug:"how-to-use-pyth-in-anchor",children:[]},{level:2,title:"Other Resources",slug:"other-resources",children:[]}],path:"/vi/integrations/pyth.html",pathLocale:"/vi/",extraFields:[]},{title:"React Native",headers:[{level:2,title:"How to use @solana/web3.js in a React Native app",slug:"how-to-use-solana-web3-js-in-a-react-native-app",children:[{level:3,title:"Create a new app",slug:"create-a-new-app",children:[]},{level:3,title:"Install dependencies",slug:"install-dependencies",children:[]},{level:3,title:"Update index.js",slug:"update-index-js",children:[]},{level:3,title:"Update metro.config.js",slug:"update-metro-config-js",children:[]},{level:3,title:"Update App.tsx",slug:"update-app-tsx",children:[]},{level:3,title:"Install cocoapods",slug:"install-cocoapods",children:[]},{level:3,title:"Start application",slug:"start-application",children:[]}]},{level:2,title:"Solana DApp Scaffold for React Native",slug:"solana-dapp-scaffold-for-react-native",children:[]},{level:2,title:"Common issues when using @solana/web3.js in a React Native app",slug:"common-issues-when-using-solana-web3-js-in-a-react-native-app",children:[{level:3,title:"Error: While trying to resolve module superstruct from file",slug:"error-while-trying-to-resolve-module-superstruct-from-file",children:[]},{level:3,title:"Error: URL.protocol is not implemented",slug:"error-url-protocol-is-not-implemented",children:[]},{level:3,title:"Error: crypto.getRandomValues() not supported",slug:"error-crypto-getrandomvalues-not-supported",children:[]}]}],path:"/vi/integrations/react-native.html",pathLocale:"/vi/",extraFields:[]},{title:"Serum",headers:[{level:2,title:"How to get a Serum market",slug:"how-to-get-a-serum-market",children:[]},{level:2,title:"How to get Serum order books",slug:"how-to-get-serum-order-books",children:[]},{level:2,title:"How to get current open orders",slug:"how-to-get-current-open-orders",children:[]}],path:"/vi/integrations/serum.html",pathLocale:"/vi/",extraFields:[]},{title:"Strata",headers:[{level:2,title:"How to create a fully managed token",slug:"how-to-create-a-fully-managed-token",children:[]},{level:2,title:"How to buy and sell a token",slug:"how-to-buy-and-sell-a-token",children:[]},{level:2,title:"How to bootstrap liquidity",slug:"how-to-bootstrap-liquidity",children:[]},{level:2,title:"Other Resources",slug:"other-resources",children:[]}],path:"/vi/integrations/strata.html",pathLocale:"/vi/",extraFields:[]},{title:"Switchboard",headers:[{level:2,title:"Data Feeds",slug:"data-feeds",children:[{level:3,title:"Read data from an aggregator feed",slug:"read-data-from-an-aggregator-feed",children:[]},{level:3,title:"Create a new aggregator feed",slug:"create-a-new-aggregator-feed",children:[]},{level:3,title:"Read data from an aggregator feed in program",slug:"read-data-from-an-aggregator-feed-in-program",children:[]},{level:3,title:"How to Create a Feed from the Publisher",slug:"how-to-create-a-feed-from-the-publisher",children:[]}]},{level:2,title:"Oracles",slug:"oracles",children:[{level:3,title:"Create an oracle",slug:"create-an-oracle",children:[]},{level:3,title:"Run an oracle locally",slug:"run-an-oracle-locally",children:[]},{level:3,title:"Oracle Config",slug:"oracle-config",children:[]}]},{level:2,title:"Verifiable Random Function(VRF)",slug:"verifiable-random-function-vrf",children:[{level:3,title:"Reading a VRF account",slug:"reading-a-vrf-account",children:[]},{level:3,title:"Creating a VRF account",slug:"creating-a-vrf-account",children:[]},{level:3,title:"Request Randomness from vrf account",slug:"request-randomness-from-vrf-account",children:[]}]},{level:2,title:"Resources",slug:"resources",children:[{level:3,title:"APIs and Libraries",slug:"apis-and-libraries",children:[]},{level:3,title:"Examples",slug:"examples",children:[]},{level:3,title:"More Information",slug:"more-information",children:[]}]}],path:"/vi/integrations/switchboard.html",pathLocale:"/vi/",extraFields:[]},{title:"web3Auth (Torus Wallet)",headers:[{level:2,title:"What is a wallet?",slug:"what-is-a-wallet",children:[]},{level:2,title:"Social Logins on Solana",slug:"social-logins-on-solana",children:[]},{level:2,title:"Integration Guide",slug:"integration-guide",children:[{level:3,title:"Installing Dependencies",slug:"installing-dependencies",children:[]},{level:3,title:"Import the SDK and initialize",slug:"import-the-sdk-and-initialize",children:[]},{level:3,title:"Trigger user login\u200B",slug:"trigger-user-login\u200B",children:[]},{level:3,title:"Using torus instance to fetch user account detail\u200B",slug:"using-torus-instance-to-fetch-user-account-detail\u200B",children:[]},{level:3,title:"Using Torus Solana API to sign a message.",slug:"using-torus-solana-api-to-sign-a-message",children:[]},{level:3,title:"Using torus Solana API to send a transaction.\u200B",slug:"using-torus-solana-api-to-send-a-transaction-\u200B",children:[]},{level:3,title:"Top-ups\u200B",slug:"top-ups\u200B",children:[]},{level:3,title:"Logout",slug:"logout",children:[]}]},{level:2,title:"Resources",slug:"resources",children:[]}],path:"/vi/integrations/web3auth.html",pathLocale:"/vi/",extraFields:[]},{title:"Accounts",headers:[{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 t\u1EA1o m\u1ED9t System Account",slug:"lam-the-nao-\u0111e-tao-mot-system-account",children:[]},{level:2,title:"T\xEDnh chi ph\xED cho m\u1ED9t account",slug:"tinh-chi-phi-cho-mot-account",children:[]},{level:2,title:"L\xE0m th\u1EBF \xE0o \u0111\u1EC3 t\u1EA1o account v\u1EDBi seeds",slug:"lam-the-ao-\u0111e-tao-account-voi-seeds",children:[{level:3,title:"T\xECm Account",slug:"tim-account",children:[]},{level:3,title:"T\u1EA1o Account",slug:"tao-account",children:[]},{level:3,title:"Chuy\u1EC3n lamports",slug:"chuyen-lamports",children:[]}]},{level:2,title:"C\xE1ch t\u1EA1o PDAs",slug:"cach-tao-pdas",children:[{level:3,title:"Sinh ra m\u1ED9t PDA",slug:"sinh-ra-mot-pda",children:[]},{level:3,title:"T\u1EA1o m\u1ED9t PDA",slug:"tao-mot-pda",children:[]}]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 k\xFD b\u1EB1ng PDA",slug:"lam-the-nao-\u0111e-ky-bang-pda",children:[{level:3,title:"Program",slug:"program-1",children:[]},{level:3,title:"Ng\u01B0\u1EDDi d\xF9ng",slug:"nguoi-dung-1",children:[]}]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 truy v\u1EA5n c\xE1c account c\u1EE7a m\u1ED9t program",slug:"lam-the-nao-\u0111e-truy-van-cac-account-cua-mot-program",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 \u0111\xF3ng account",slug:"lam-the-nao-\u0111e-\u0111ong-account",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 truy v\u1EA5n s\u1ED1 d\u01B0 c\u1EE7a m\u1ED9t account",slug:"lam-the-nao-\u0111e-truy-van-so-du-cua-mot-account",children:[]}],path:"/vi/references/accounts.html",pathLocale:"/vi/",extraFields:[]},{title:"G\u1EEDi Transaction",headers:[{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 g\u1EEDi SOL",slug:"lam-the-nao-\u0111e-gui-sol",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 g\u1EEDi SPL-Tokens",slug:"lam-the-nao-\u0111e-gui-spl-tokens",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 t\xEDnh chi ph\xED g\u1EEDi transaction",slug:"lam-the-nao-\u0111e-tinh-chi-phi-gui-transaction",children:[{level:3,title:"getEstimatedFee",slug:"getestimatedfee",children:[]},{level:3,title:"getFeeForMessage",slug:"getfeeformessage",children:[]}]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 th\xEAm ghi ch\xFA v\xE0 m\u1ED9t transaction",slug:"lam-the-nao-\u0111e-them-ghi-chu-va-mot-transaction",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 thay \u0111\u1ED5i ng\xE2n s\xE1ch t\xEDnh to\xE1n cho m\u1ED9t transaction",slug:"lam-the-nao-\u0111e-thay-\u0111oi-ngan-sach-tinh-toan-cho-mot-transaction",children:[]}],path:"/vi/references/basic-transactions.html",pathLocale:"/vi/",extraFields:[]},{title:"C\u1EB7p kho\xE1 v\xE0 V\xED",headers:[{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 sinh C\u1EB7p kho\xE1",slug:"lam-the-nao-\u0111e-sinh-cap-khoa",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 ph\u1EE5c h\u1ED3i m\u1ED9t C\u1EB7p kho\xE1 t\u1EEB kho\xE1 ri\xEAng t\u01B0",slug:"lam-the-nao-\u0111e-phuc-hoi-mot-cap-khoa-tu-khoa-rieng-tu",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 ki\u1EC3m tra m\u1ED9t c\u1EB7p kho\xE1",slug:"lam-the-nao-\u0111e-kiem-tra-mot-cap-khoa",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 ki\u1EC3m tra n\u1EBFu m\u1ED9t kho\xE1 c\xF4ng khai kh\xF4ng t\u1ED3n t\u1EA1i kho\xE1 ri\xEAng t\u01B0 t\u01B0\u01A1ng \u1EE8ng",slug:"lam-the-nao-\u0111e-kiem-tra-neu-mot-khoa-cong-khai-khong-ton-tai-khoa-rieng-tu-tuong-ung",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 sinh ra c\u1EE5m mnemonic",slug:"lam-the-nao-\u0111e-sinh-ra-cum-mnemonic",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 ph\u1EE5c h\u1ED3i l\u1EA1i c\u1EB7p kho\xE1 t\u1EEB c\u1EE5m mnemonic",slug:"lam-the-nao-\u0111e-phuc-hoi-lai-cap-khoa-tu-cum-mnemonic",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 sinh m\u1ED9t \u0111\u1ECBa ch\u1EC9 danh ngh\u0129a",slug:"lam-the-nao-\u0111e-sinh-mot-\u0111ia-chi-danh-nghia",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o k\xFD v\xE0 ki\u1EC3m tra tinh nh\u1EAFn b\u1EB1ng v\xED",slug:"lam-the-nao-ky-va-kiem-tra-tinh-nhan-bang-vi",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 k\u1EBFt n\u1ED1i v\xED",slug:"lam-the-nao-\u0111e-ket-noi-vi",children:[{level:3,title:"React",slug:"react",children:[]},{level:3,title:"Vue",slug:"vue",children:[]},{level:3,title:"Svelte",slug:"svelte",children:[]}]}],path:"/vi/references/keypairs-and-wallets.html",pathLocale:"/vi/",extraFields:[]},{title:"L\u1EADp tr\xECnh \u1EDF Local",headers:[{level:2,title:"Kh\u1EDFi ch\u1EA1y Local Validator",slug:"khoi-chay-local-validator",children:[]},{level:2,title:"K\u1EBFt n\u1ED1i \u0111\u1EBFn m\xF4i tr\u01B0\u1EDDng",slug:"ket-noi-\u0111en-moi-truong",children:[]},{level:2,title:"L\u1EAFng nghe c\xE1c s\u1EF1 ki\u1EC7n",slug:"lang-nghe-cac-su-kien",children:[]},{level:2,title:"Nh\u1EADn SOL \u0111\u1EC3 ki\u1EC3m th\u1EED",slug:"nhan-sol-\u0111e-kiem-thu",children:[]},{level:2,title:"S\u1EED d\u1EE5ng Accounts v\xE0 Programs tr\xEAn Mainnet",slug:"su-dung-accounts-va-programs-tren-mainnet",children:[{level:3,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 c\xE0i \u0111\u1EB7t accounts t\u1EEB mainnet",slug:"lam-the-nao-\u0111e-cai-\u0111at-accounts-tu-mainnet",children:[]},{level:3,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 c\u1EA3i \u0111\u1EB7t programs t\u1EEB mainnet",slug:"lam-the-nao-\u0111e-cai-\u0111at-programs-tu-mainnet",children:[]}]}],path:"/vi/references/local-development.html",pathLocale:"/vi/",extraFields:[]},{title:"D\u1ECBch v\u1EE5 t\xEAn mi\u1EC1n",headers:[{level:2,title:"D\u1ECBch v\u1EE5 \u0111\u0103ng k\xFD t\xEAn mi\u1EC1n",slug:"dich-vu-\u0111ang-ky-ten-mien",children:[]},{level:2,title:"Ph\xE2n gi\u1EA3i t\xEAn mi\u1EC1n SOL",slug:"phan-giai-ten-mien-sol",children:[]},{level:2,title:"Tra c\u1EE9u ng\u01B0\u1EE3c",slug:"tra-cuu-nguoc",children:[]},{level:2,title:"Tra c\u1EE9u t\xEAn mi\u1EC1n con",slug:"tra-cuu-ten-mien-con",children:[]},{level:2,title:"T\xECm t\u1EA5t c\u1EA3 t\xEAn mi\u1EC1n \u0111\u01B0\u1EE3c s\u1EDF h\u1EEFu b\u1EDFi m\u1ED9t kho\xE1 c\xF4ng khai",slug:"tim-tat-ca-ten-mien-\u0111uoc-so-huu-boi-mot-khoa-cong-khai",children:[]},{level:2,title:"Ph\xE2n gi\u1EA3i m\u1ED9t Twitter Handle",slug:"phan-giai-mot-twitter-handle",children:[]},{level:2,title:"Tra c\u1EE9u ng\u01B0\u1EE3c c\u1EE7a m\u1ED9t Twitter Handle",slug:"tra-cuu-nguoc-cua-mot-twitter-handle",children:[]}],path:"/vi/references/name-service.html",pathLocale:"/vi/",extraFields:[]},{title:"NFTs",headers:[{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 t\u1EA1o m\u1ED9t NFT",slug:"lam-the-nao-\u0111e-tao-mot-nft",children:[{level:3,title:"\u0110\u0103ng t\u1EA3i l\xEAn Arweave",slug:"\u0111ang-tai-len-arweave",children:[]},{level:3,title:"\u0110\xFAc NFT",slug:"\u0111uc-nft",children:[]}]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 truy v\u1EA5n NFT Metadata",slug:"lam-the-nao-\u0111e-truy-van-nft-metadata",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 truy v\u1EA5n ch\u1EE7 s\u1EDF h\u1EEFu c\u1EE7a m\u1ED9t NFTs",slug:"lam-the-nao-\u0111e-truy-van-chu-so-huu-cua-mot-nfts",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 truy v\u1EA5n \u0111\u1ECBa ch\u1EC9 mint c\u1EE7a NFT",slug:"lam-the-nao-\u0111e-truy-van-\u0111ia-chi-mint-cua-nft",children:[{level:3,title:"Candy Machine V1",slug:"candy-machine-v1",children:[]},{level:3,title:"Candy Machine V2",slug:"candy-machine-v2",children:[]}]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 truy v\u1EA5n t\u1EA5t c\u1EA3 NFT t\u1EEB m\u1ED9t v\xED?",slug:"lam-the-nao-\u0111e-truy-van-tat-ca-nft-tu-mot-vi",children:[]}],path:"/vi/references/nfts.html",pathLocale:"/vi/",extraFields:[]},{title:"G\u1EEDi Transactions Ngo\u1EA1i tuy\u1EBFn",headers:[{level:2,title:"K\xFD Transaction",slug:"ky-transaction",children:[]},{level:2,title:"K\xFD m\u1ED9t ph\u1EA7n Transaction",slug:"ky-mot-phan-transaction",children:[]},{level:2,title:"Nonce v\u0129nh vi\u1EC5n",slug:"nonce-vinh-vien",children:[{level:3,title:"T\u1EA1o Nonce Account",slug:"tao-nonce-account",children:[]},{level:3,title:"Truy v\u1EA5n Nonce Account",slug:"truy-van-nonce-account",children:[]},{level:3,title:"S\u1EED d\u1EE5ng Nonce Account",slug:"su-dung-nonce-account",children:[]}]}],path:"/vi/references/offline-transactions.html",pathLocale:"/vi/",extraFields:[]},{title:"X\xE2y d\u1EF1ng Programs",headers:[{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 chuy\u1EC3n SOL trong m\u1ED9t program",slug:"lam-the-nao-\u0111e-chuyen-sol-trong-mot-program",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 l\u1EA5y th\u1EDDi gian trong m\u1ED9t program",slug:"lam-the-nao-\u0111e-lay-thoi-gian-trong-mot-program",children:[{level:3,title:"Truy\u1EC1n Clock nh\u01B0 l\xE0 m\u1ED9t account trong ch\u1EC9 th\u1ECB",slug:"truyen-clock-nhu-la-mot-account-trong-chi-thi",children:[]},{level:3,title:"Truy c\u1EADp Clock tr\u1EF1c ti\u1EBFp b\xEAn trong ch\u1EC9 th\u1ECB",slug:"truy-cap-clock-truc-tiep-ben-trong-chi-thi",children:[]}]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 thay \u0111\u1ED5i k\xEDch th\u01B0\u1EDBc account",slug:"lam-the-nao-\u0111e-thay-\u0111oi-kich-thuoc-account",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 g\u1ECDi gi\u1EEFa c\xE1c program (Cross Program Invocation - CPI)",slug:"lam-the-nao-\u0111e-goi-giua-cac-program-cross-program-invocation-cpi",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 t\u1EA1o PDA",slug:"lam-the-nao-\u0111e-tao-pda",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 \u0111\u1ECDc Account",slug:"lam-the-nao-\u0111e-\u0111oc-account",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 ki\u1EC3m tra account",slug:"lam-the-nao-\u0111e-kiem-tra-account",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 \u0111\u1ECDc nhi\u1EC1u ch\u1EC9 th\u1ECB t\u1EEB m\u1ED9t Transaction",slug:"lam-the-nao-\u0111e-\u0111oc-nhieu-chi-thi-tu-mot-transaction",children:[]}],path:"/vi/references/programs.html",pathLocale:"/vi/",extraFields:[]},{title:"Staking",headers:[{level:2,title:"Truy v\u1EA5n danh s\xE1ch Validators hi\u1EC7n t\u1EA1i",slug:"truy-van-danh-sach-validators-hien-tai",children:[]},{level:2,title:"T\u1EA1o m\u1ED9t Stake Account",slug:"tao-mot-stake-account",children:[]},{level:2,title:"U\u1EF7 quy\u1EC1n Stake",slug:"uy-quyen-stake",children:[]},{level:2,title:"Truy v\u1EA5n c\xE1c nh\xE0 u\u1EF7 quy\u1EC1n b\u1EB1ng validator",slug:"truy-van-cac-nha-uy-quyen-bang-validator",children:[]},{level:2,title:"D\u1EEBng stake",slug:"dung-stake",children:[]},{level:2,title:"R\xFAt Stake",slug:"rut-stake",children:[]}],path:"/vi/references/staking.html",pathLocale:"/vi/",extraFields:[]},{title:"T\u01B0\u01A1ng t\xE1c v\u1EDBi Tokens",headers:[{level:2,title:"T\xF4i n\xEAn c\u1EA7n g\xEC \u0111\u1EC3 b\u1EAFt \u0111\u1EA7u v\u1EDBi SPL-Tokens?",slug:"toi-nen-can-gi-\u0111e-bat-\u0111au-voi-spl-tokens",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 t\u1EA1o m\u1ED9t token m\u1EDBi",slug:"lam-the-nao-\u0111e-tao-mot-token-moi",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 \u0111\u1ECDc truy v\u1EA5n token mint",slug:"lam-the-nao-\u0111e-\u0111oc-truy-van-token-mint",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 t\u1EA1o m\u1ED9t token account",slug:"lam-the-nao-\u0111e-tao-mot-token-account",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 truy v\u1EA5n token acount",slug:"lam-the-nao-\u0111e-truy-van-token-acount",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 truy v\u1EA5n s\u1ED1 d\u01B0 c\u1EE7a token account",slug:"lam-the-nao-\u0111e-truy-van-so-du-cua-token-account",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 d\xFAc token",slug:"lam-the-nao-\u0111e-duc-token",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 chuy\u1EC3n token",slug:"lam-the-nao-\u0111e-chuyen-token",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 \u0111\u1ED1t token",slug:"lam-the-nao-\u0111e-\u0111ot-token",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 \u0111\xF3ng m\u1ED9t token account",slug:"lam-the-nao-\u0111e-\u0111ong-mot-token-account",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 thi\u1EBFt l\u1EADp ch\u1EE7 s\u1EDF h\u1EEFu cho token account v\xE0 mint",slug:"lam-the-nao-\u0111e-thiet-lap-chu-so-huu-cho-token-account-va-mint",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 u\u1EF7 quy\u1EC1n cho m\u1ED9t token \u0111\u1EA1i di\u1EC7n (delegate)",slug:"lam-the-nao-\u0111e-uy-quyen-cho-mot-token-\u0111ai-dien-delegate",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 thu h\u1ED3i m\u1ED9t token \u0111\u1EA1i di\u1EC7n",slug:"lam-the-nao-\u0111e-thu-hoi-mot-token-\u0111ai-dien",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 qu\u1EA3n l\xFD wrapped SOL",slug:"lam-the-nao-\u0111e-quan-ly-wrapped-sol",children:[{level:3,title:"T\u1EA1o token account",slug:"tao-token-account",children:[]},{level:3,title:"Th\xEAm s\u1ED1 d\u01B0",slug:"them-so-du",children:[]}]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 truy v\u1EA5n t\u1EA5t c\u1EA3 token account c\u1EE7a m\u1ED9t Ch\u1EE7",slug:"lam-the-nao-\u0111e-truy-van-tat-ca-token-account-cua-mot-chu",children:[]}],path:"/vi/references/token.html",pathLocale:"/vi/",extraFields:[]},{title:"\u8D26\u6237",headers:[{level:2,title:"\u7EFC\u8FF0",slug:"\u7EFC\u8FF0",children:[]},{level:2,title:"\u6DF1\u5165",slug:"\u6DF1\u5165",children:[{level:3,title:"\u8D26\u6237\u6A21\u578B",slug:"\u8D26\u6237\u6A21\u578B",children:[]},{level:3,title:"\u79DF\u91D1",slug:"\u79DF\u91D1",children:[]}]},{level:2,title:"\u5176\u4ED6\u8D44\u6599",slug:"\u5176\u4ED6\u8D44\u6599",children:[{level:3,title:"\u81F4\u8C22",slug:"\u81F4\u8C22",children:[]}]}],path:"/zh/core-concepts/accounts.html",pathLocale:"/zh/",extraFields:[]},{title:"\u7A0B\u5E8F\u6D3E\u751F\u8D26\u6237 (PDA)",headers:[{level:2,title:"\u7EFC\u8FF0",slug:"\u7EFC\u8FF0",children:[{level:3,title:"\u751F\u6210PDA",slug:"\u751F\u6210pda",children:[]},{level:3,title:"\u4E0EPDA\u4EA4\u4E92",slug:"\u4E0Epda\u4EA4\u4E92",children:[]}]},{level:2,title:"Other Resources",slug:"other-resources",children:[]}],path:"/zh/core-concepts/pdas.html",pathLocale:"/zh/",extraFields:[]},{title:"\u7A0B\u5E8F",headers:[{level:2,title:"\u7EFC\u8FF0",slug:"\u7EFC\u8FF0",children:[]},{level:2,title:"\u6DF1\u5165",slug:"\u6DF1\u5165",children:[{level:3,title:"\u539F\u751F\u7A0B\u5E8F\u548CSolana\u7A0B\u5E8F\u5E93\uFF08SPL\uFF09",slug:"\u539F\u751F\u7A0B\u5E8F\u548Csolana\u7A0B\u5E8F\u5E93-spl",children:[]},{level:3,title:"\u7F16\u5199\u7A0B\u5E8F",slug:"\u7F16\u5199\u7A0B\u5E8F",children:[]},{level:3,title:"\u90E8\u7F72\u7A0B\u5E8F",slug:"\u90E8\u7F72\u7A0B\u5E8F",children:[]}]},{level:2,title:"\u5176\u4ED6\u8D44\u6599",slug:"\u5176\u4ED6\u8D44\u6599",children:[]}],path:"/zh/core-concepts/programs.html",pathLocale:"/zh/",extraFields:[]},{title:"\u4EA4\u6613",headers:[{level:2,title:"\u6982\u8FF0",slug:"\u6982\u8FF0",children:[]},{level:2,title:"\u6DF1\u5165",slug:"\u6DF1\u5165",children:[{level:3,title:"\u8D39\u7528",slug:"\u8D39\u7528",children:[]}]},{level:2,title:"Other Resources",slug:"other-resources",children:[]}],path:"/zh/core-concepts/transactions.html",pathLocale:"/zh/",extraFields:[]},{title:"\u5B89\u88C5",headers:[{level:2,title:"\u5B89\u88C5Web3.js",slug:"\u5B89\u88C5web3-js",children:[{level:3,title:"Web3.js",slug:"web3-js",children:[]},{level:3,title:"SPL\u4EE3\u5E01\uFF08SPL-Token\uFF09",slug:"spl\u4EE3\u5E01-spl-token",children:[]},{level:3,title:"\u94B1\u5305\u9002\u914D\u5668\uFF08Wallet-Adapter\uFF09",slug:"\u94B1\u5305\u9002\u914D\u5668-wallet-adapter",children:[]}]},{level:2,title:"\u5B89\u88C5Rust",slug:"\u5B89\u88C5rust",children:[]},{level:2,title:"\u5B89\u88C5\u547D\u4EE4\u884C\u5DE5\u5177",slug:"\u5B89\u88C5\u547D\u4EE4\u884C\u5DE5\u5177",children:[{level:3,title:"macOS & Linux",slug:"macos-linux",children:[]},{level:3,title:"Windows",slug:"windows",children:[]},{level:3,title:"\u4ECE\u6E90\u7801\u7F16\u8BD1",slug:"\u4ECE\u6E90\u7801\u7F16\u8BD1",children:[]}]}],path:"/zh/getting-started/installation.html",pathLocale:"/zh/",extraFields:[]},{title:"",headers:[],path:"/404.html",pathLocale:"/",extraFields:[]}],Nc=Ee(Cp),xp=()=>Nc;sl.webpackHot&&(__VUE_HMR_RUNTIME__.updateSearchIndex=e=>{Nc.value=e});const Vp=/[^\x00-\x7F]/,Fp=e=>e.split(/\s+/g).map(t=>t.trim()).filter(t=>!!t),Ya=e=>e.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"),Qa=(e,t)=>{const n=t.join(" "),r=Fp(e);if(Vp.test(e))return r.some(a=>n.toLowerCase().indexOf(a)>-1);const l=e.endsWith(" ");return new RegExp(r.map((a,o)=>r.length===o+1&&!l?`(?=.*\\b${Ya(a)})`:`(?=.*\\b${Ya(a)}\\b)`).join("")+".+","gi").test(n)},jp=({searchIndex:e,routeLocale:t,query:n,maxSuggestions:r})=>{const l=_e(()=>e.value.filter(i=>i.pathLocale===t.value));return _e(()=>{const i=n.value.trim().toLowerCase();if(!i)return[];const a=[],o=(s,u)=>{Qa(i,[u.title])&&a.push({link:`${s.path}#${u.slug}`,title:s.title,header:u.title});for(const d of u.children){if(a.length>=r.value)return;o(s,d)}};for(const s of l.value){if(a.length>=r.value)break;if(Qa(i,[s.title,...s.extraFields])){a.push({link:s.path,title:s.title});continue}for(const u of s.headers){if(a.length>=r.value)break;o(s,u)}}return a})},Np=e=>{const t=Ee(0);return{focusIndex:t,focusNext:()=>{t.value{t.value>0?t.value-=1:t.value=e.value.length-1}}},Mp=ze({name:"SearchBox",props:{locales:{type:Object,required:!1,default:()=>({})},hotKeys:{type:Array,required:!1,default:()=>[]},maxSuggestions:{type:Number,required:!1,default:5}},setup(e){const{locales:t,hotKeys:n,maxSuggestions:r}=kd(e),l=rr(),i=ji(),a=xp(),o=Ee(null),s=Ee(!1),u=Ee(""),d=_e(()=>{var P;return(P=t.value[i.value])!==null&&P!==void 0?P:{}}),m=jp({searchIndex:a,routeLocale:i,query:u,maxSuggestions:r}),{focusIndex:h,focusNext:b,focusPrev:g}=Np(m);Ip({input:o,hotKeys:n});const _=_e(()=>s.value&&!!m.value.length),f=()=>{!_.value||g()},k=()=>{!_.value||b()},w=P=>{if(!_.value)return;const O=m.value[P];!O||l.push(O.link).then(()=>{u.value="",h.value=0})};return()=>ee("form",{class:"search-box",role:"search"},[ee("input",{ref:o,type:"search",placeholder:d.value.placeholder,autocomplete:"off",spellcheck:!1,value:u.value,onFocus:()=>s.value=!0,onBlur:()=>s.value=!1,onInput:P=>u.value=P.target.value,onKeydown:P=>{switch(P.key){case"ArrowUp":{f();break}case"ArrowDown":{k();break}case"Enter":{P.preventDefault(),w(h.value);break}}}}),_.value&&ee("ul",{class:"suggestions",onMouseleave:()=>h.value=-1},m.value.map(({link:P,title:O,header:D},j)=>ee("li",{class:["suggestion",{focus:h.value===j}],onMouseenter:()=>h.value=j,onMousedown:()=>w(j)},ee("a",{href:P,onClick:L=>L.preventDefault()},[ee("span",{class:"page-title"},O),D&&ee("span",{class:"page-header"},`> ${D}`)]))))])}});const zp={"/":{placeholder:"Search"},"/zh/":{placeholder:"\u641C\u7D22"},"/vi/":{placeholder:"T\xECm ki\u1EBFm"},"/th/":{placeholder:"\u0E04\u0E49\u0E19\u0E2B\u0E32"},"/fr/":{placeholder:"Rechercher"},"/id/":{placeholder:"Cari"},"/kr/":{placeholder:"\uAC80\uC0C9"}},Hp=["s","/"],Bp=10;var Up=Tt(({app:e})=>{e.component("SearchBox",t=>ee(Mp,xe({locales:zp,hotKeys:Hp,maxSuggestions:Bp},t)))}),Kp=({app:e})=>{e.component("SolanaCodeGroup",v(()=>c(()=>Promise.resolve().then(function(){return i_}),void 0))),e.component("SolanaCodeGroupItem",v(()=>c(()=>Promise.resolve().then(function(){return u_}),void 0)))};/*! @docsearch/js 3.0.0-alpha.42 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */function Gn(e){return Gn=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Gn(e)}function qp(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Gl(){return Gl=Object.assign||function(e){for(var t=1;t=0||(d[s]=a[s]);return d}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}function Br(e,t){return function(n){if(Array.isArray(n))return n}(e)||function(n,r){if(!(typeof Symbol=="undefined"||!(Symbol.iterator in Object(n)))){var l=[],i=!0,a=!1,o=void 0;try{for(var s,u=n[Symbol.iterator]();!(i=(s=u.next()).done)&&(l.push(s.value),!r||l.length!==r);i=!0);}catch(d){a=!0,o=d}finally{try{i||u.return==null||u.return()}finally{if(a)throw o}}return l}}(e,t)||Mc(e,t)||function(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}function Ur(e){return function(t){if(Array.isArray(t))return Jl(t)}(e)||function(t){if(typeof Symbol!="undefined"&&Symbol.iterator in Object(t))return Array.from(t)}(e)||Mc(e)||function(){throw new TypeError(`Invalid attempt to spread non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}function Mc(e,t){if(e){if(typeof e=="string")return Jl(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set"?Array.from(e):n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Jl(e,t):void 0}}function Jl(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n3)for(n=[n],i=3;i0?zn(b.type,b.props,b.key,null,b.__v):b)!=null){if(b.__=n,b.__b=n.__b+1,(h=k[d])===null||h&&b.key==h.key&&b.type===h.type)k[d]=void 0;else for(m=0;m3)for(n=[n],i=3;i=n.__.length&&n.__.push({}),n.__[e]}function co(e,t,n){var r=Qn(pn++,2);return r.t=e,r.__c||(r.__=[n?n(t):Qc(void 0,t),function(l){var i=r.t(r.__[0],l);r.__[0]!==i&&(r.__=[i,r.__[1]],r.__c.setState({}))}],r.__c=je),r.__}function uo(e,t){var n=Qn(pn++,4);!Z.__s&&Ui(n.__H,t)&&(n.__=e,n.__H=t,je.__h.push(n))}function Er(e,t){var n=Qn(pn++,7);return Ui(n.__H,t)&&(n.__=e(),n.__H=t,n.__h=e),n.__}function Qp(){Ql.forEach(function(e){if(e.__P)try{e.__H.__h.forEach(wr),e.__H.__h.forEach(Zl),e.__H.__h=[]}catch(t){e.__H.__h=[],Z.__e(t,e.__v)}}),Ql=[]}Z.__b=function(e){je=null,lo&&lo(e)},Z.__r=function(e){io&&io(e),pn=0;var t=(je=e.__c).__H;t&&(t.__h.forEach(wr),t.__h.forEach(Zl),t.__h=[])},Z.diffed=function(e){ao&&ao(e);var t=e.__c;t&&t.__H&&t.__H.__h.length&&(Ql.push(t)!==1&&ro===Z.requestAnimationFrame||((ro=Z.requestAnimationFrame)||function(n){var r,l=function(){clearTimeout(i),ho&&cancelAnimationFrame(r),setTimeout(n)},i=setTimeout(l,100);ho&&(r=requestAnimationFrame(l))})(Qp)),je=void 0},Z.__c=function(e,t){t.some(function(n){try{n.__h.forEach(wr),n.__h=n.__h.filter(function(r){return!r.__||Zl(r)})}catch(r){t.some(function(l){l.__h&&(l.__h=[])}),t=[],Z.__e(r,n.__v)}}),oo&&oo(e,t)},Z.unmount=function(e){so&&so(e);var t=e.__c;if(t&&t.__H)try{t.__H.__.forEach(wr)}catch(n){Z.__e(n,t.__v)}};var ho=typeof requestAnimationFrame=="function";function wr(e){var t=je;typeof e.__c=="function"&&e.__c(),je=t}function Zl(e){var t=je;e.__c=e.__(),je=t}function Ui(e,t){return!e||e.length!==t.length||t.some(function(n,r){return n!==e[r]})}function Qc(e,t){return typeof t=="function"?t(e):t}function Zc(e,t){for(var n in t)e[n]=t[n];return e}function Xl(e,t){for(var n in e)if(n!=="__source"&&!(n in t))return!0;for(var r in t)if(r!=="__source"&&e[r]!==t[r])return!0;return!1}function ei(e){this.props=e}(ei.prototype=new at).isPureReactComponent=!0,ei.prototype.shouldComponentUpdate=function(e,t){return Xl(this.props,e)||Xl(this.state,t)};var go=Z.__b;Z.__b=function(e){e.type&&e.type.__f&&e.ref&&(e.props.ref=e.ref,e.ref=null),go&&go(e)};var Zp=typeof Symbol!="undefined"&&Symbol.for&&Symbol.for("react.forward_ref")||3911,mo=function(e,t){return e==null?null:ht(ht(e).map(t))},Xp={map:mo,forEach:mo,count:function(e){return e?ht(e).length:0},only:function(e){var t=ht(e);if(t.length!==1)throw"Children.only";return t[0]},toArray:ht},ev=Z.__e;function Pr(){this.__u=0,this.t=null,this.__b=null}function Xc(e){var t=e.__.__c;return t&&t.__e&&t.__e(e)}function Dn(){this.u=null,this.o=null}Z.__e=function(e,t,n){if(e.then){for(var r,l=t;l=l.__;)if((r=l.__c)&&r.__c)return t.__e==null&&(t.__e=n.__e,t.__k=n.__k),r.__c(e,t)}ev(e,t,n)},(Pr.prototype=new at).__c=function(e,t){var n=t.__c,r=this;r.t==null&&(r.t=[]),r.t.push(n);var l=Xc(r.__v),i=!1,a=function(){i||(i=!0,n.componentWillUnmount=n.__c,l?l(o):o())};n.__c=n.componentWillUnmount,n.componentWillUnmount=function(){a(),n.__c&&n.__c()};var o=function(){if(!--r.__u){if(r.state.__e){var u=r.state.__e;r.__v.__k[0]=function m(h,b,g){return h&&(h.__v=null,h.__k=h.__k&&h.__k.map(function(_){return m(_,b,g)}),h.__c&&h.__c.__P===b&&(h.__e&&g.insertBefore(h.__e,h.__d),h.__c.__e=!0,h.__c.__P=g)),h}(u,u.__c.__P,u.__c.__O)}var d;for(r.setState({__e:r.__b=null});d=r.t.pop();)d.forceUpdate()}},s=t.__h===!0;r.__u++||s||r.setState({__e:r.__b=r.__v.__k[0]}),e.then(a,a)},Pr.prototype.componentWillUnmount=function(){this.t=[]},Pr.prototype.render=function(e,t){if(this.__b){if(this.__v.__k){var n=document.createElement("div"),r=this.__v.__k[0].__c;this.__v.__k[0]=function i(a,o,s){return a&&(a.__c&&a.__c.__H&&(a.__c.__H.__.forEach(function(u){typeof u.__c=="function"&&u.__c()}),a.__c.__H=null),(a=Zc({},a)).__c!=null&&(a.__c.__P===s&&(a.__c.__P=o),a.__c=null),a.__k=a.__k&&a.__k.map(function(u){return i(u,o,s)})),a}(this.__b,n,r.__O=r.__P)}this.__b=null}var l=t.__e&&it(At,null,e.fallback);return l&&(l.__h=null),[it(At,null,t.__e?null:e.children),l]};var po=function(e,t,n){if(++n[1]===n[0]&&e.o.delete(t),e.props.revealOrder&&(e.props.revealOrder[0]!=="t"||!e.o.size))for(n=e.u;n;){for(;n.length>3;)n.pop()();if(n[1]>>1,1),t.i.removeChild(r)}}),Yn(it(tv,{context:t.context},e.__v),t.l)):t.l&&t.componentWillUnmount()}function eu(e,t){return it(nv,{__v:e,i:t})}(Dn.prototype=new at).__e=function(e){var t=this,n=Xc(t.__v),r=t.o.get(e);return r[0]++,function(l){var i=function(){t.props.revealOrder?(r.push(l),po(t,e,r)):l()};n?n(i):i()}},Dn.prototype.render=function(e){this.u=null,this.o=new Map;var t=ht(e.children);e.revealOrder&&e.revealOrder[0]==="b"&&t.reverse();for(var n=t.length;n--;)this.o.set(t[n],this.u=[1,0,this.u]);return e.children},Dn.prototype.componentDidUpdate=Dn.prototype.componentDidMount=function(){var e=this;this.o.forEach(function(t,n){po(e,n,t)})};var tu=typeof Symbol!="undefined"&&Symbol.for&&Symbol.for("react.element")||60103,rv=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|fill|flood|font|glyph(?!R)|horiz|marker(?!H|W|U)|overline|paint|stop|strikethrough|stroke|text(?!L)|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,lv=function(e){return(typeof Symbol!="undefined"&&Gn(Symbol())=="symbol"?/fil|che|rad/i:/fil|che|ra/i).test(e)};function nu(e,t,n){return t.__k==null&&(t.textContent=""),Yn(e,t),typeof n=="function"&&n(),e?e.__c:null}at.prototype.isReactComponent={},["componentWillMount","componentWillReceiveProps","componentWillUpdate"].forEach(function(e){Object.defineProperty(at.prototype,e,{configurable:!0,get:function(){return this["UNSAFE_"+e]},set:function(t){Object.defineProperty(this,e,{configurable:!0,writable:!0,value:t})}})});var vo=Z.event;function iv(){}function av(){return this.cancelBubble}function ov(){return this.defaultPrevented}Z.event=function(e){return vo&&(e=vo(e)),e.persist=iv,e.isPropagationStopped=av,e.isDefaultPrevented=ov,e.nativeEvent=e};var ru,fo={configurable:!0,get:function(){return this.class}},_o=Z.vnode;Z.vnode=function(e){var t=e.type,n=e.props,r=n;if(typeof t=="string"){for(var l in r={},n){var i=n[l];l==="value"&&"defaultValue"in n&&i==null||(l==="defaultValue"&&"value"in n&&n.value==null?l="value":l==="download"&&i===!0?i="":/ondoubleclick/i.test(l)?l="ondblclick":/^onchange(textarea|input)/i.test(l+t)&&!lv(n.type)?l="oninput":/^on(Ani|Tra|Tou|BeforeInp)/.test(l)?l=l.toLowerCase():rv.test(l)?l=l.replace(/[A-Z0-9]/,"-$&").toLowerCase():i===null&&(i=void 0),r[l]=i)}t=="select"&&r.multiple&&Array.isArray(r.value)&&(r.value=ht(n.children).forEach(function(a){a.props.selected=r.value.indexOf(a.props.value)!=-1})),t=="select"&&r.defaultValue!=null&&(r.value=ht(n.children).forEach(function(a){a.props.selected=r.multiple?r.defaultValue.indexOf(a.props.value)!=-1:r.defaultValue==a.props.value})),e.props=r}t&&n.class!=n.className&&(fo.enumerable="className"in n,n.className!=null&&(r.class=n.className),Object.defineProperty(r,"className",fo)),e.$$typeof=tu,_o&&_o(e)};var bo=Z.__r;Z.__r=function(e){bo&&bo(e),ru=e.__c};var sv={ReactCurrentDispatcher:{current:{readContext:function(e){return ru.__n[e.__c].props.value}}}};(typeof performance=="undefined"?"undefined":Gn(performance))=="object"&&typeof performance.now=="function"&&performance.now.bind(performance);function ko(e){return!!e&&e.$$typeof===tu}var E={useState:function(e){return rn=1,co(Qc,e)},useReducer:co,useEffect:function(e,t){var n=Qn(pn++,3);!Z.__s&&Ui(n.__H,t)&&(n.__=e,n.__H=t,je.__H.__h.push(n))},useLayoutEffect:uo,useRef:function(e){return rn=5,Er(function(){return{current:e}},[])},useImperativeHandle:function(e,t,n){rn=6,uo(function(){typeof e=="function"?e(t()):e&&(e.current=t())},n==null?n:n.concat(e))},useMemo:Er,useCallback:function(e,t){return rn=8,Er(function(){return e},t)},useContext:function(e){var t=je.context[e.__c],n=Qn(pn++,9);return n.__c=e,t?(n.__==null&&(n.__=!0,t.sub(je)),t.props.value):e.__},useDebugValue:function(e,t){Z.useDebugValue&&Z.useDebugValue(t?t(e):e)},version:"16.8.0",Children:Xp,render:nu,hydrate:function(e,t,n){return Yc(e,t),typeof n=="function"&&n(),e?e.__c:null},unmountComponentAtNode:function(e){return!!e.__k&&(Yn(null,e),!0)},createPortal:eu,createElement:it,createContext:function(e,t){var n={__c:t="__cC"+Hc++,__:e,Consumer:function(r,l){return r.children(l)},Provider:function(r){var l,i;return this.getChildContext||(l=[],(i={})[t]=this,this.getChildContext=function(){return i},this.shouldComponentUpdate=function(a){this.props.value!==a.value&&l.some(Yl)},this.sub=function(a){l.push(a);var o=a.componentWillUnmount;a.componentWillUnmount=function(){l.splice(l.indexOf(a),1),o&&o.call(a)}}),r.children}};return n.Provider.__=n.Consumer.contextType=n},createFactory:function(e){return it.bind(null,e)},cloneElement:function(e){return ko(e)?Yp.apply(null,arguments):e},createRef:function(){return{current:null}},Fragment:At,isValidElement:ko,findDOMNode:function(e){return e&&(e.base||e.nodeType===1&&e)||null},Component:at,PureComponent:ei,memo:function(e,t){function n(l){var i=this.props.ref,a=i==l.ref;return!a&&i&&(i.call?i(null):i.current=null),t?!t(this.props,l)||!a:Xl(this.props,l)}function r(l){return this.shouldComponentUpdate=n,it(e,l)}return r.displayName="Memo("+(e.displayName||e.name)+")",r.prototype.isReactComponent=!0,r.__f=!0,r},forwardRef:function(e){function t(n,r){var l=Zc({},n);return delete l.ref,e(l,(r=n.ref||r)&&(Gn(r)!="object"||"current"in r)?r:null)}return t.$$typeof=Zp,t.render=t,t.prototype.isReactComponent=t.__f=!0,t.displayName="ForwardRef("+(e.displayName||e.name)+")",t},unstable_batchedUpdates:function(e,t){return e(t)},StrictMode:At,Suspense:Pr,SuspenseList:Dn,lazy:function(e){var t,n,r;function l(i){if(t||(t=e()).then(function(a){n=a.default||a},function(a){r=a}),r)throw r;if(!n)throw t;return it(n,i)}return l.displayName="Lazy",l.__f=!0,l},__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:sv};function cv(){return E.createElement("svg",{width:"15",height:"15",className:"DocSearch-Control-Key-Icon"},E.createElement("path",{d:"M4.505 4.496h2M5.505 5.496v5M8.216 4.496l.055 5.993M10 7.5c.333.333.5.667.5 1v2M12.326 4.5v5.996M8.384 4.496c1.674 0 2.116 0 2.116 1.5s-.442 1.5-2.116 1.5M3.205 9.303c-.09.448-.277 1.21-1.241 1.203C1 10.5.5 9.513.5 8V7c0-1.57.5-2.5 1.464-2.494.964.006 1.134.598 1.24 1.342M12.553 10.5h1.953",strokeWidth:"1.2",stroke:"currentColor",fill:"none",strokeLinecap:"square"}))}function lu(){return E.createElement("svg",{width:"20",height:"20",className:"DocSearch-Search-Icon",viewBox:"0 0 20 20"},E.createElement("path",{d:"M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"}))}var uv=["translations"];function ti(){return ti=Object.assign||function(e){for(var t=1;t=0||(d[s]=a[s]);return d}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}var hv=E.forwardRef(function(e,t){var n=e.translations,r=n===void 0?{}:n,l=dv(e,uv),i=r.buttonText,a=i===void 0?"Search":i,o=r.buttonAriaLabel,s=o===void 0?"Search":o,u=Er(function(){return typeof navigator!="undefined"?/(Mac|iPhone|iPod|iPad)/i.test(navigator.platform)?"\u2318":"Ctrl":null},[]);return E.createElement("button",ti({type:"button",className:"DocSearch DocSearch-Button","aria-label":s},l,{ref:t}),E.createElement("span",{className:"DocSearch-Button-Container"},E.createElement(lu,null),E.createElement("span",{className:"DocSearch-Button-Placeholder"},a)),E.createElement("span",{className:"DocSearch-Button-Keys"},u!==null&&E.createElement(E.Fragment,null,E.createElement("span",{className:"DocSearch-Button-Key"},u==="Ctrl"?E.createElement(cv,null):u),E.createElement("span",{className:"DocSearch-Button-Key"},"K"))))});function Zn(e){return e.reduce(function(t,n){return t.concat(n)},[])}var gv=0;function ni(e){return e.collections.length===0?0:e.collections.reduce(function(t,n){return t+n.items.length},0)}var mv=function(){},pv=[{segment:"autocomplete-core",version:"1.5.0"}];function yo(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(l){return Object.getOwnPropertyDescriptor(e,l).enumerable})),n.push.apply(n,r)}return n}function vv(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function fv(e,t,n){var r=t.initialState;return{getState:function(){return r},dispatch:function(l,i){var a=function(o){for(var s=1;s=n?r===null?null:0:l}function Po(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(l){return Object.getOwnPropertyDescriptor(e,l).enumerable})),n.push.apply(n,r)}return n}function bv(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function kv(e,t){var n=[];return Promise.resolve(e(t)).then(function(r){return Promise.all(r.filter(function(l){return Boolean(l)}).map(function(l){if(l.sourceId,n.includes(l.sourceId))throw new Error("[Autocomplete] The `sourceId` ".concat(JSON.stringify(l.sourceId)," is not unique."));n.push(l.sourceId);var i=function(a){for(var o=1;oe.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0||(d[s]=a[s]);return d}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}var Ro,Sl,_r,On=null,Io=(Ro=-1,Sl=-1,_r=void 0,function(e){var t=++Ro;return Promise.resolve(e).then(function(n){return _r&&t=0||(d[s]=a[s]);return d}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}var Vv=["props","refresh","store"],Fv=["inputElement","formElement","panelElement"],jv=["inputElement"],Nv=["inputElement","maxLength"],Mv=["item","source"];function xo(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(l){return Object.getOwnPropertyDescriptor(e,l).enumerable})),n.push.apply(n,r)}return n}function Ve(e){for(var t=1;t=0||(d[s]=a[s]);return d}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}function Hv(e){var t=e.props,n=e.refresh,r=e.store,l=An(e,Vv);return{getEnvironmentProps:function(i){var a=i.inputElement,o=i.formElement,s=i.panelElement;return Ve({onTouchStart:function(u){r.getState().isOpen!==!1&&u.target!==a&&[o,s].some(function(d){return m=d,h=u.target,m===h||m.contains(h);var m,h})===!1&&r.dispatch("blur",null)},onTouchMove:function(u){r.getState().isOpen!==!1&&a===t.environment.document.activeElement&&u.target!==a&&a.blur()}},An(i,Fv))},getRootProps:function(i){return Ve({role:"combobox","aria-expanded":r.getState().isOpen,"aria-haspopup":"listbox","aria-owns":r.getState().isOpen?"".concat(t.id,"-list"):void 0,"aria-labelledby":"".concat(t.id,"-label")},i)},getFormProps:function(i){return i.inputElement,Ve({action:"",noValidate:!0,role:"search",onSubmit:function(a){var o;a.preventDefault(),t.onSubmit(Ve({event:a,refresh:n,state:r.getState()},l)),r.dispatch("submit",null),(o=i.inputElement)===null||o===void 0||o.blur()},onReset:function(a){var o;a.preventDefault(),t.onReset(Ve({event:a,refresh:n,state:r.getState()},l)),r.dispatch("reset",null),(o=i.inputElement)===null||o===void 0||o.focus()}},An(i,jv))},getLabelProps:function(i){return Ve({htmlFor:"".concat(t.id,"-input"),id:"".concat(t.id,"-label")},i)},getInputProps:function(i){function a(b){(t.openOnFocus||Boolean(r.getState().query))&&nn(Ve({event:b,props:t,query:r.getState().completion||r.getState().query,refresh:n,store:r},l)),r.dispatch("focus",null)}var o="ontouchstart"in t.environment,s=i||{},u=(s.inputElement,s.maxLength),d=u===void 0?512:u,m=An(s,Nv),h=ln(r.getState());return Ve({"aria-autocomplete":"both","aria-activedescendant":r.getState().isOpen&&r.getState().activeItemId!==null?"".concat(t.id,"-item-").concat(r.getState().activeItemId):void 0,"aria-controls":r.getState().isOpen?"".concat(t.id,"-list"):void 0,"aria-labelledby":"".concat(t.id,"-label"),value:r.getState().completion||r.getState().query,id:"".concat(t.id,"-input"),autoComplete:"off",autoCorrect:"off",autoCapitalize:"off",enterKeyHint:h!=null&&h.itemUrl?"go":"search",spellCheck:"false",autoFocus:t.autoFocus,placeholder:t.placeholder,maxLength:d,type:"search",onChange:function(b){nn(Ve({event:b,props:t,query:b.currentTarget.value.slice(0,d),refresh:n,store:r},l))},onKeyDown:function(b){(function(g){var _=g.event,f=g.props,k=g.refresh,w=g.store,P=xv(g,Iv);if(_.key==="ArrowUp"||_.key==="ArrowDown"){var O=function(){var W=f.environment.document.getElementById("".concat(f.id,"-item-").concat(w.getState().activeItemId));W&&(W.scrollIntoViewIfNeeded?W.scrollIntoViewIfNeeded(!1):W.scrollIntoView(!1))},D=function(){var W=ln(w.getState());if(w.getState().activeItemId!==null&&W){var T=W.item,H=W.itemInputValue,Q=W.itemUrl,se=W.source;se.onActive(Ct({event:_,item:T,itemInputValue:H,itemUrl:Q,refresh:k,source:se,state:w.getState()},P))}};_.preventDefault(),w.getState().isOpen===!1&&(f.openOnFocus||Boolean(w.getState().query))?nn(Ct({event:_,props:f,query:w.getState().query,refresh:k,store:w},P)).then(function(){w.dispatch(_.key,{nextActiveItemId:f.defaultActiveItemId}),D(),setTimeout(O,0)}):(w.dispatch(_.key,{}),D(),O())}else if(_.key==="Escape")_.preventDefault(),w.dispatch(_.key,null);else if(_.key==="Enter"){if(w.getState().activeItemId===null||w.getState().collections.every(function(W){return W.items.length===0}))return;_.preventDefault();var j=ln(w.getState()),L=j.item,A=j.itemInputValue,K=j.itemUrl,B=j.source;if(_.metaKey||_.ctrlKey)K!==void 0&&(B.onSelect(Ct({event:_,item:L,itemInputValue:A,itemUrl:K,refresh:k,source:B,state:w.getState()},P)),f.navigator.navigateNewTab({itemUrl:K,item:L,state:w.getState()}));else if(_.shiftKey)K!==void 0&&(B.onSelect(Ct({event:_,item:L,itemInputValue:A,itemUrl:K,refresh:k,source:B,state:w.getState()},P)),f.navigator.navigateNewWindow({itemUrl:K,item:L,state:w.getState()}));else if(!_.altKey){if(K!==void 0)return B.onSelect(Ct({event:_,item:L,itemInputValue:A,itemUrl:K,refresh:k,source:B,state:w.getState()},P)),void f.navigator.navigate({itemUrl:K,item:L,state:w.getState()});nn(Ct({event:_,nextState:{isOpen:!1},props:f,query:A,refresh:k,store:w},P)).then(function(){B.onSelect(Ct({event:_,item:L,itemInputValue:A,itemUrl:K,refresh:k,source:B,state:w.getState()},P))})}}})(Ve({event:b,props:t,refresh:n,store:r},l))},onFocus:a,onBlur:function(){o||r.dispatch("blur",null)},onClick:function(b){i.inputElement!==t.environment.document.activeElement||r.getState().isOpen||a(b)}},m)},getPanelProps:function(i){return Ve({onMouseDown:function(a){a.preventDefault()},onMouseLeave:function(){r.dispatch("mouseleave",null)}},i)},getListProps:function(i){return Ve({role:"listbox","aria-labelledby":"".concat(t.id,"-label"),id:"".concat(t.id,"-list")},i)},getItemProps:function(i){var a=i.item,o=i.source,s=An(i,Mv);return Ve({id:"".concat(t.id,"-item-").concat(a.__autocomplete_id),role:"option","aria-selected":r.getState().activeItemId===a.__autocomplete_id,onMouseMove:function(u){if(a.__autocomplete_id!==r.getState().activeItemId){r.dispatch("mousemove",a.__autocomplete_id);var d=ln(r.getState());if(r.getState().activeItemId!==null&&d){var m=d.item,h=d.itemInputValue,b=d.itemUrl,g=d.source;g.onActive(Ve({event:u,item:m,itemInputValue:h,itemUrl:b,refresh:n,source:g,state:r.getState()},l))}}},onMouseDown:function(u){u.preventDefault()},onClick:function(u){var d=o.getItemInputValue({item:a,state:r.getState()}),m=o.getItemUrl({item:a,state:r.getState()});(m?Promise.resolve():nn(Ve({event:u,nextState:{isOpen:!1},props:t,query:d,refresh:n,store:r},l))).then(function(){o.onSelect(Ve({event:u,item:a,itemInputValue:d,itemUrl:m,refresh:n,source:o,state:r.getState()},l))})}},s)}}}function Vo(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(l){return Object.getOwnPropertyDescriptor(e,l).enumerable})),n.push.apply(n,r)}return n}function Bv(e){for(var t=1;t0},reshape:function(h){return h.sources}},o),{},{id:(u=o.id)!==null&&u!==void 0?u:"autocomplete-".concat(gv++),plugins:m,initialState:Qt({activeItemId:null,query:"",completion:null,collections:[],isOpen:!1,status:"idle",context:{}},o.initialState),onStateChange:function(h){var b;(b=o.onStateChange)===null||b===void 0||b.call(o,h),m.forEach(function(g){var _;return(_=g.onStateChange)===null||_===void 0?void 0:_.call(g,h)})},onSubmit:function(h){var b;(b=o.onSubmit)===null||b===void 0||b.call(o,h),m.forEach(function(g){var _;return(_=g.onSubmit)===null||_===void 0?void 0:_.call(g,h)})},onReset:function(h){var b;(b=o.onReset)===null||b===void 0||b.call(o,h),m.forEach(function(g){var _;return(_=g.onReset)===null||_===void 0?void 0:_.call(g,h)})},getSources:function(h){return Promise.all([].concat(Ev(m.map(function(b){return b.getSources})),[o.getSources]).filter(Boolean).map(function(b){return kv(b,h)})).then(function(b){return Zn(b)}).then(function(b){return b.map(function(g){return Qt(Qt({},g),{},{onSelect:function(_){g.onSelect(_),s.forEach(function(f){var k;return(k=f.onSelect)===null||k===void 0?void 0:k.call(f,_)})},onActive:function(_){g.onActive(_),s.forEach(function(f){var k;return(k=f.onActive)===null||k===void 0?void 0:k.call(f,_)})}})})})},navigator:Qt({navigate:function(h){var b=h.itemUrl;d.location.assign(b)},navigateNewTab:function(h){var b=h.itemUrl,g=d.open(b,"_blank","noopener");g==null||g.focus()},navigateNewWindow:function(h){var b=h.itemUrl;d.open(b,"_blank","noopener")}},o.navigator)})}(e,t),r=fv(qv,n,function(o){var s=o.prevState,u=o.state;n.onStateChange(xt({prevState:s,state:u,refresh:a},l))}),l=function(o){var s=o.store;return{setActiveItemId:function(u){s.dispatch("setActiveItemId",u)},setQuery:function(u){s.dispatch("setQuery",u)},setCollections:function(u){var d=0,m=u.map(function(h){return mr(mr({},h),{},{items:Zn(h.items).map(function(b){return mr(mr({},b),{},{__autocomplete_id:d++})})})});s.dispatch("setCollections",m)},setIsOpen:function(u){s.dispatch("setIsOpen",u)},setStatus:function(u){s.dispatch("setStatus",u)},setContext:function(u){s.dispatch("setContext",u)}}}({store:r}),i=Hv(xt({props:n,refresh:a,store:r},l));function a(){return nn(xt({event:new Event("input"),nextState:{isOpen:r.getState().isOpen},props:n,query:r.getState().query,refresh:a,store:r},l))}return n.plugins.forEach(function(o){var s;return(s=o.subscribe)===null||s===void 0?void 0:s.call(o,xt(xt({},l),{},{refresh:a,onSelect:function(u){t.push({onSelect:u})},onActive:function(u){t.push({onActive:u})}}))}),function(o){var s,u=o.metadata,d=o.environment;if(!((s=d.navigator)===null||s===void 0)&&s.userAgent.includes("Algolia Crawler")){var m=d.document.createElement("meta"),h=d.document.querySelector("head");m.name="algolia:metadata",setTimeout(function(){m.content=JSON.stringify(u),h.appendChild(m)},0)}}({metadata:Uv({plugins:n.plugins,options:e}),environment:n.environment}),xt(xt({refresh:a},i),l)}function Gv(e){var t=e.translations,n=(t===void 0?{}:t).searchByText,r=n===void 0?"Search by":n;return E.createElement("a",{href:"https://www.algolia.com/docsearch",target:"_blank",rel:"noopener noreferrer"},E.createElement("span",{className:"DocSearch-Label"},r),E.createElement("svg",{width:"77",height:"19"},E.createElement("path",{d:"M2.5067 0h14.0245c1.384.001 2.5058 1.1205 2.5068 2.5017V16.5c-.0014 1.3808-1.1232 2.4995-2.5068 2.5H2.5067C1.1232 18.9995.0014 17.8808 0 16.5V2.4958A2.495 2.495 0 01.735.7294 2.505 2.505 0 012.5068 0zM37.95 15.0695c-3.7068.0168-3.7068-2.986-3.7068-3.4634L34.2372.3576 36.498 0v11.1794c0 .2715 0 1.9889 1.452 1.994v1.8961zm-9.1666-1.8388c.694 0 1.2086-.0397 1.5678-.1088v-2.2934a5.3639 5.3639 0 00-1.3303-.1679 4.8283 4.8283 0 00-.758.0582 2.2845 2.2845 0 00-.688.2024c-.2029.0979-.371.2362-.4919.4142-.1268.1788-.185.2826-.185.5533 0 .5297.185.8359.5205 1.0375.3355.2016.7928.3053 1.365.3053v-.0008zm-.1969-8.1817c.7463 0 1.3768.092 1.8856.2767.5088.1838.9195.4428 1.2204.7717.3068.334.5147.7777.6423 1.251.1327.4723.196.991.196 1.5603v5.798c-.5235.1036-1.05.192-1.5787.2649-.7048.1037-1.4976.156-2.3774.156-.5832 0-1.1215-.0582-1.6016-.167a3.385 3.385 0 01-1.2432-.5364 2.6034 2.6034 0 01-.8037-.9565c-.191-.3922-.29-.9447-.29-1.5208 0-.5533.11-.905.3246-1.2863a2.7351 2.7351 0 01.8849-.9329c.376-.242.8029-.415 1.2948-.5187a7.4517 7.4517 0 011.5381-.156 7.1162 7.1162 0 011.6667.2024V8.886c0-.259-.0296-.5061-.093-.7372a1.5847 1.5847 0 00-.3245-.6158 1.5079 1.5079 0 00-.6119-.4158 2.6788 2.6788 0 00-.966-.173c-.5206 0-.9948.0634-1.4283.1384a6.5481 6.5481 0 00-1.065.259l-.2712-1.849c.2831-.0986.7048-.1964 1.2491-.2943a9.2979 9.2979 0 011.752-.1501v.0008zm44.6597 8.1193c.6947 0 1.2086-.0405 1.567-.1097v-2.2942a5.3743 5.3743 0 00-1.3303-.1679c-.2485 0-.503.0177-.7573.0582a2.2853 2.2853 0 00-.688.2024 1.2333 1.2333 0 00-.4918.4142c-.1268.1788-.1843.2826-.1843.5533 0 .5297.1843.8359.5198 1.0375.3414.2066.7927.3053 1.365.3053v.0009zm-.191-8.1767c.7463 0 1.3768.0912 1.8856.2759.5087.1847.9195.4436 1.2204.7717.3.329.5147.7786.6414 1.251a5.7248 5.7248 0 01.197 1.562v5.7972c-.3466.0742-.874.1602-1.5788.2648-.7049.1038-1.4976.1552-2.3774.1552-.5832 0-1.1215-.0573-1.6016-.167a3.385 3.385 0 01-1.2432-.5356 2.6034 2.6034 0 01-.8038-.9565c-.191-.3922-.2898-.9447-.2898-1.5216 0-.5533.1098-.905.3245-1.2854a2.7373 2.7373 0 01.8849-.9338c.376-.2412.8029-.4141 1.2947-.5178a7.4545 7.4545 0 012.325-.1097c.2781.0287.5672.081.879.156v-.3686a2.7781 2.7781 0 00-.092-.738 1.5788 1.5788 0 00-.3246-.6166 1.5079 1.5079 0 00-.612-.415 2.6797 2.6797 0 00-.966-.1729c-.5205 0-.9947.0633-1.4282.1384a6.5608 6.5608 0 00-1.065.259l-.2712-1.8498c.283-.0979.7048-.1957 1.2491-.2935a9.8597 9.8597 0 011.752-.1494zm-6.79-1.072c-.7576.001-1.373-.6103-1.3759-1.3664 0-.755.6128-1.3664 1.376-1.3664.764 0 1.3775.6115 1.3775 1.3664s-.6195 1.3664-1.3776 1.3664zm1.1393 11.1507h-2.2726V5.3409l2.2734-.3568v10.0845l-.0008.0017zm-3.984 0c-3.707.0168-3.707-2.986-3.707-3.4642L59.7069.3576 61.9685 0v11.1794c0 .2715 0 1.9889 1.452 1.994V15.0703zm-7.3512-4.979c0-.975-.2138-1.7873-.6305-2.3516-.4167-.571-.9998-.852-1.747-.852-.7454 0-1.3302.281-1.7452.852-.4166.5702-.6195 1.3765-.6195 2.3516 0 .9851.208 1.6473.6254 2.2183.4158.576.9998.8587 1.7461.8587.7454 0 1.3303-.2885 1.747-.8595.4158-.5761.6237-1.2315.6237-2.2184v.0009zm2.3132-.006c0 .7609-.1099 1.3361-.3356 1.9654a4.654 4.654 0 01-.9533 1.6076A4.214 4.214 0 0155.613 14.69c-.579.2412-1.4697.3795-1.9143.3795-.4462-.005-1.3303-.1324-1.9033-.3795a4.307 4.307 0 01-1.474-1.0316c-.4115-.4445-.7293-.9801-.9609-1.6076a5.3423 5.3423 0 01-.3465-1.9653c0-.7608.104-1.493.3356-2.1155a4.683 4.683 0 01.9719-1.5958 4.3383 4.3383 0 011.479-1.0257c.5739-.242 1.2043-.3567 1.8864-.3567.6829 0 1.3125.1197 1.8906.3567a4.1245 4.1245 0 011.4816 1.0257 4.7587 4.7587 0 01.9592 1.5958c.2426.6225.3643 1.3547.3643 2.1155zm-17.0198 0c0 .9448.208 1.9932.6238 2.431.4166.4386.955.6579 1.6142.6579.3584 0 .6998-.0523 1.0176-.1502.3186-.0978.5721-.2134.775-.3517V7.0784a8.8706 8.8706 0 00-1.4926-.1906c-.8206-.0236-1.4452.312-1.8847.8468-.4335.5365-.6533 1.476-.6533 2.3516v-.0008zm6.2863 4.4485c0 1.5385-.3938 2.662-1.1866 3.3773-.791.7136-2.0005 1.0712-3.6308 1.0712-.5958 0-1.834-.1156-2.8228-.334l.3643-1.7865c.8282.173 1.9202.2193 2.4932.2193.9077 0 1.555-.1847 1.943-.5533.388-.3686.578-.916.578-1.643v-.3687a6.8289 6.8289 0 01-.8848.3349c-.3634.1096-.786.167-1.261.167-.6246 0-1.1917-.0979-1.7055-.2944a3.5554 3.5554 0 01-1.3244-.8645c-.3642-.3796-.6541-.8579-.8561-1.4289-.2028-.571-.3068-1.59-.3068-2.339 0-.7034.1099-1.5856.3245-2.1735.2198-.5871.5316-1.0949.9542-1.515.4167-.42.9255-.743 1.5213-.98a5.5923 5.5923 0 012.052-.3855c.7353 0 1.4114.092 2.0707.2024.6592.1088 1.2204.2236 1.6776.35v8.945-.0008zM11.5026 4.2418v-.6511c-.0005-.4553-.3704-.8241-.8266-.8241H8.749c-.4561 0-.826.3688-.8265.824v.669c0 .0742.0693.1264.1445.1096a6.0346 6.0346 0 011.6768-.2362 6.125 6.125 0 011.6202.2185.1116.1116 0 00.1386-.1097zm-5.2806.852l-.3296-.3282a.8266.8266 0 00-1.168 0l-.393.3922a.8199.8199 0 000 1.164l.3237.323c.0524.0515.1268.0397.1733-.0117.191-.259.3989-.507.6305-.7372.2374-.2362.48-.4437.7462-.6335.0575-.0354.0634-.1155.017-.1687zm3.5159 2.069v2.818c0 .081.0879.1392.1622.0987l2.5102-1.2964c.0574-.0287.0752-.0987.0464-.1552a3.1237 3.1237 0 00-2.603-1.574c-.0575 0-.115.0456-.115.1097l-.0008-.0009zm.0008 6.789c-2.0933.0005-3.7915-1.6912-3.7947-3.7804C5.9468 8.0821 7.6452 6.39 9.7387 6.391c2.0932-.0005 3.7911 1.6914 3.794 3.7804a3.7783 3.7783 0 01-1.1124 2.675 3.7936 3.7936 0 01-2.6824 1.1054h.0008zM9.738 4.8002c-1.9218 0-3.6975 1.0232-4.6584 2.6841a5.359 5.359 0 000 5.3683c.9609 1.661 2.7366 2.6841 4.6584 2.6841a5.3891 5.3891 0 003.8073-1.5725 5.3675 5.3675 0 001.578-3.7987 5.3574 5.3574 0 00-1.5771-3.797A5.379 5.379 0 009.7387 4.801l-.0008-.0008z",fill:"currentColor",fillRule:"evenodd"})))}function br(e){return E.createElement("svg",{width:"15",height:"15"},E.createElement("g",{fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"1.2"},e.children))}function Jv(e){var t=e.translations,n=t===void 0?{}:t,r=n.selectText,l=r===void 0?"to select":r,i=n.navigateText,a=i===void 0?"to navigate":i,o=n.closeText,s=o===void 0?"to close":o,u=n.searchByText,d=u===void 0?"Search by":u;return E.createElement(E.Fragment,null,E.createElement("div",{className:"DocSearch-Logo"},E.createElement(Gv,{translations:{searchByText:d}})),E.createElement("ul",{className:"DocSearch-Commands"},E.createElement("li",null,E.createElement("span",{className:"DocSearch-Commands-Key"},E.createElement(br,null,E.createElement("path",{d:"M12 3.53088v3c0 1-1 2-2 2H4M7 11.53088l-3-3 3-3"}))),E.createElement("span",{className:"DocSearch-Label"},l)),E.createElement("li",null,E.createElement("span",{className:"DocSearch-Commands-Key"},E.createElement(br,null,E.createElement("path",{d:"M7.5 3.5v8M10.5 8.5l-3 3-3-3"}))),E.createElement("span",{className:"DocSearch-Commands-Key"},E.createElement(br,null,E.createElement("path",{d:"M7.5 11.5v-8M10.5 6.5l-3-3-3 3"}))),E.createElement("span",{className:"DocSearch-Label"},a)),E.createElement("li",null,E.createElement("span",{className:"DocSearch-Commands-Key"},E.createElement(br,null,E.createElement("path",{d:"M13.6167 8.936c-.1065.3583-.6883.962-1.4875.962-.7993 0-1.653-.9165-1.653-2.1258v-.5678c0-1.2548.7896-2.1016 1.653-2.1016.8634 0 1.3601.4778 1.4875 1.0724M9 6c-.1352-.4735-.7506-.9219-1.46-.8972-.7092.0246-1.344.57-1.344 1.2166s.4198.8812 1.3445.9805C8.465 7.3992 8.968 7.9337 9 8.5c.032.5663-.454 1.398-1.4595 1.398C6.6593 9.898 6 9 5.963 8.4851m-1.4748.5368c-.2635.5941-.8099.876-1.5443.876s-1.7073-.6248-1.7073-2.204v-.4603c0-1.0416.721-2.131 1.7073-2.131.9864 0 1.6425 1.031 1.5443 2.2492h-2.956"}))),E.createElement("span",{className:"DocSearch-Label"},s))))}function Yv(e){var t=e.hit,n=e.children;return E.createElement("a",{href:t.url},n)}function Qv(){return E.createElement("svg",{viewBox:"0 0 38 38",stroke:"currentColor",strokeOpacity:".5"},E.createElement("g",{fill:"none",fillRule:"evenodd"},E.createElement("g",{transform:"translate(1 1)",strokeWidth:"2"},E.createElement("circle",{strokeOpacity:".3",cx:"18",cy:"18",r:"18"}),E.createElement("path",{d:"M36 18c0-9.94-8.06-18-18-18"},E.createElement("animateTransform",{attributeName:"transform",type:"rotate",from:"0 18 18",to:"360 18 18",dur:"1s",repeatCount:"indefinite"})))))}function Zv(){return E.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},E.createElement("g",{stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"},E.createElement("path",{d:"M3.18 6.6a8.23 8.23 0 1112.93 9.94h0a8.23 8.23 0 01-11.63 0"}),E.createElement("path",{d:"M6.44 7.25H2.55V3.36M10.45 6v5.6M10.45 11.6L13 13"})))}function ri(){return E.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},E.createElement("path",{d:"M10 10l5.09-5.09L10 10l5.09 5.09L10 10zm0 0L4.91 4.91 10 10l-5.09 5.09L10 10z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"}))}function Xv(){return E.createElement("svg",{className:"DocSearch-Hit-Select-Icon",width:"20",height:"20",viewBox:"0 0 20 20"},E.createElement("g",{stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"},E.createElement("path",{d:"M18 3v4c0 2-2 4-4 4H2"}),E.createElement("path",{d:"M8 17l-6-6 6-6"})))}var ef=function(){return E.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},E.createElement("path",{d:"M17 6v12c0 .52-.2 1-1 1H4c-.7 0-1-.33-1-1V2c0-.55.42-1 1-1h8l5 5zM14 8h-3.13c-.51 0-.87-.34-.87-.87V4",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinejoin:"round"}))};function tf(e){switch(e.type){case"lvl1":return E.createElement(ef,null);case"content":return E.createElement(rf,null);default:return E.createElement(nf,null)}}function nf(){return E.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},E.createElement("path",{d:"M13 13h4-4V8H7v5h6v4-4H7V8H3h4V3v5h6V3v5h4-4v5zm-6 0v4-4H3h4z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"}))}function rf(){return E.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},E.createElement("path",{d:"M17 5H3h14zm0 5H3h14zm0 5H3h14z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinejoin:"round"}))}function Mo(){return E.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},E.createElement("path",{d:"M10 14.2L5 17l1-5.6-4-4 5.5-.7 2.5-5 2.5 5 5.6.8-4 4 .9 5.5z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinejoin:"round"}))}function lf(){return E.createElement("svg",{width:"40",height:"40",viewBox:"0 0 20 20",fill:"none",fillRule:"evenodd",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round"},E.createElement("path",{d:"M19 4.8a16 16 0 00-2-1.2m-3.3-1.2A16 16 0 001.1 4.7M16.7 8a12 12 0 00-2.8-1.4M10 6a12 12 0 00-6.7 2M12.3 14.7a4 4 0 00-4.5 0M14.5 11.4A8 8 0 0010 10M3 16L18 2M10 18h0"}))}function af(){return E.createElement("svg",{width:"40",height:"40",viewBox:"0 0 20 20",fill:"none",fillRule:"evenodd",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round"},E.createElement("path",{d:"M15.5 4.8c2 3 1.7 7-1 9.7h0l4.3 4.3-4.3-4.3a7.8 7.8 0 01-9.8 1m-2.2-2.2A7.8 7.8 0 0113.2 2.4M2 18L18 2"}))}function of(e){var t=e.translations,n=t===void 0?{}:t,r=n.titleText,l=r===void 0?"Unable to fetch results":r,i=n.helpText,a=i===void 0?"You might want to check your network connection.":i;return E.createElement("div",{className:"DocSearch-ErrorScreen"},E.createElement("div",{className:"DocSearch-Screen-Icon"},E.createElement(lf,null)),E.createElement("p",{className:"DocSearch-Title"},l),E.createElement("p",{className:"DocSearch-Help"},a))}var sf=["translations"];function cf(e){return function(t){if(Array.isArray(t))return Ol(t)}(e)||function(t){if(typeof Symbol!="undefined"&&Symbol.iterator in Object(t))return Array.from(t)}(e)||function(t,n){if(!!t){if(typeof t=="string")return Ol(t,n);var r=Object.prototype.toString.call(t).slice(8,-1);if(r==="Object"&&t.constructor&&(r=t.constructor.name),r==="Map"||r==="Set")return Array.from(t);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return Ol(t,n)}}(e)||function(){throw new TypeError(`Invalid attempt to spread non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}function Ol(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0||(d[s]=a[s]);return d}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}function df(e){var t=e.translations,n=t===void 0?{}:t,r=uf(e,sf),l=n.noResultsText,i=l===void 0?"No results for":l,a=n.suggestedQueryText,o=a===void 0?"Try searching for":a,s=n.openIssueText,u=s===void 0?"Believe this query should return results?":s,d=n.openIssueLinkText,m=d===void 0?"Let us know":d,h=r.state.context.searchSuggestions;return E.createElement("div",{className:"DocSearch-NoResults"},E.createElement("div",{className:"DocSearch-Screen-Icon"},E.createElement(af,null)),E.createElement("p",{className:"DocSearch-Title"},i,' "',E.createElement("strong",null,r.state.query),'"'),h&&h.length>0&&E.createElement("div",{className:"DocSearch-NoResults-Prefill-List"},E.createElement("p",{className:"DocSearch-Help"},o,":"),E.createElement("ul",null,h.slice(0,3).reduce(function(b,g){return[].concat(cf(b),[E.createElement("li",{key:g},E.createElement("button",{className:"DocSearch-Prefill",key:g,type:"button",onClick:function(){r.setQuery(g.toLowerCase()+" "),r.refresh(),r.inputRef.current.focus()}},g))])},[]))),E.createElement("p",{className:"DocSearch-Help"},"".concat(u," "),E.createElement("a",{href:"https://github.com/algolia/docsearch-configs/issues/new?template=Missing_results.md&title=[".concat(r.indexName,']+Missing+results+for+query+"').concat(r.state.query,'"'),target:"_blank",rel:"noopener noreferrer"},m),"."))}var hf=["hit","attribute","tagName"];function zo(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(l){return Object.getOwnPropertyDescriptor(e,l).enumerable})),n.push.apply(n,r)}return n}function Ho(e){for(var t=1;t=0||(d[s]=a[s]);return d}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}function Bo(e,t){return t.split(".").reduce(function(n,r){return n!=null&&n[r]?n[r]:null},e)}function Zt(e){var t=e.hit,n=e.attribute,r=e.tagName;return it(r===void 0?"span":r,Ho(Ho({},mf(e,hf)),{},{dangerouslySetInnerHTML:{__html:Bo(t,"_snippetResult.".concat(n,".value"))||Bo(t,n)}}))}function Uo(e,t){return function(n){if(Array.isArray(n))return n}(e)||function(n,r){if(!(typeof Symbol=="undefined"||!(Symbol.iterator in Object(n)))){var l=[],i=!0,a=!1,o=void 0;try{for(var s,u=n[Symbol.iterator]();!(i=(s=u.next()).done)&&(l.push(s.value),!r||l.length!==r);i=!0);}catch(d){a=!0,o=d}finally{try{i||u.return==null||u.return()}finally{if(a)throw o}}return l}}(e,t)||function(n,r){if(!!n){if(typeof n=="string")return Ko(n,r);var l=Object.prototype.toString.call(n).slice(8,-1);if(l==="Object"&&n.constructor&&(l=n.constructor.name),l==="Map"||l==="Set")return Array.from(n);if(l==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(l))return Ko(n,r)}}(e,t)||function(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}function Ko(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n|<\/mark>)/g,ff=RegExp(ou.source);function su(e){var t,n,r,l,i,a=e;if(!a.__docsearch_parent&&!e._highlightResult)return e.hierarchy.lvl0;var o=((a.__docsearch_parent?(t=a.__docsearch_parent)===null||t===void 0||(n=t._highlightResult)===null||n===void 0||(r=n.hierarchy)===null||r===void 0?void 0:r.lvl0:(l=e._highlightResult)===null||l===void 0||(i=l.hierarchy)===null||i===void 0?void 0:i.lvl0)||{}).value;return o&&ff.test(o)?o.replace(ou,""):o}function ii(){return ii=Object.assign||function(e){for(var t=1;t=0||(d[s]=a[s]);return d}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}function yf(e){var t=e.translations,n=t===void 0?{}:t,r=kf(e,bf),l=n.recentSearchesTitle,i=l===void 0?"Recent":l,a=n.noRecentSearchesText,o=a===void 0?"No recent searches":a,s=n.saveRecentSearchButtonTitle,u=s===void 0?"Save this search":s,d=n.removeRecentSearchButtonTitle,m=d===void 0?"Remove this search from history":d,h=n.favoriteSearchesTitle,b=h===void 0?"Favorite":h,g=n.removeFavoriteSearchButtonTitle,_=g===void 0?"Remove this search from favorites":g;return r.state.status==="idle"&&r.hasCollections===!1?r.disableUserPersonalization?null:E.createElement("div",{className:"DocSearch-StartScreen"},E.createElement("p",{className:"DocSearch-Help"},o)):r.hasCollections===!1?null:E.createElement("div",{className:"DocSearch-Dropdown-Container"},E.createElement(li,$r({},r,{title:i,collection:r.state.collections[0],renderIcon:function(){return E.createElement("div",{className:"DocSearch-Hit-icon"},E.createElement(Zv,null))},renderAction:function(f){var k=f.item,w=f.runFavoriteTransition,P=f.runDeleteTransition;return E.createElement(E.Fragment,null,E.createElement("div",{className:"DocSearch-Hit-action"},E.createElement("button",{className:"DocSearch-Hit-action-button",title:u,type:"submit",onClick:function(O){O.preventDefault(),O.stopPropagation(),w(function(){r.favoriteSearches.add(k),r.recentSearches.remove(k),r.refresh()})}},E.createElement(Mo,null))),E.createElement("div",{className:"DocSearch-Hit-action"},E.createElement("button",{className:"DocSearch-Hit-action-button",title:m,type:"submit",onClick:function(O){O.preventDefault(),O.stopPropagation(),P(function(){r.recentSearches.remove(k),r.refresh()})}},E.createElement(ri,null))))}})),E.createElement(li,$r({},r,{title:b,collection:r.state.collections[1],renderIcon:function(){return E.createElement("div",{className:"DocSearch-Hit-icon"},E.createElement(Mo,null))},renderAction:function(f){var k=f.item,w=f.runDeleteTransition;return E.createElement("div",{className:"DocSearch-Hit-action"},E.createElement("button",{className:"DocSearch-Hit-action-button",title:_,type:"submit",onClick:function(P){P.preventDefault(),P.stopPropagation(),w(function(){r.favoriteSearches.remove(k),r.refresh()})}},E.createElement(ri,null)))}})))}var Ef=["translations"];function Gr(){return Gr=Object.assign||function(e){for(var t=1;t=0||(d[s]=a[s]);return d}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}var Pf=E.memo(function(e){var t=e.translations,n=t===void 0?{}:t,r=wf(e,Ef);if(r.state.status==="error")return E.createElement(of,{translations:n==null?void 0:n.errorScreen});var l=r.state.collections.some(function(i){return i.items.length>0});return r.state.query?l===!1?E.createElement(df,Gr({},r,{translations:n==null?void 0:n.noResultsScreen})):E.createElement(_f,r):E.createElement(yf,Gr({},r,{hasCollections:l,translations:n==null?void 0:n.startScreen}))},function(e,t){return t.state.status==="loading"||t.state.status==="stalled"}),Sf=["translations"];function Jr(){return Jr=Object.assign||function(e){for(var t=1;t=0||(d[s]=a[s]);return d}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}function Af(e){var t=e.translations,n=t===void 0?{}:t,r=Of(e,Sf),l=n.resetButtonTitle,i=l===void 0?"Clear the query":l,a=n.resetButtonAriaLabel,o=a===void 0?"Clear the query":a,s=n.cancelButtonText,u=s===void 0?"Cancel":s,d=n.cancelButtonAriaLabel,m=d===void 0?"Cancel":d,h=r.getFormProps({inputElement:r.inputRef.current}).onReset;return E.useEffect(function(){r.autoFocus&&r.inputRef.current&&r.inputRef.current.focus()},[r.autoFocus,r.inputRef]),E.useEffect(function(){r.isFromSelection&&r.inputRef.current&&r.inputRef.current.select()},[r.isFromSelection,r.inputRef]),E.createElement(E.Fragment,null,E.createElement("form",{className:"DocSearch-Form",onSubmit:function(b){b.preventDefault()},onReset:h},E.createElement("label",Jr({className:"DocSearch-MagnifierLabel"},r.getLabelProps()),E.createElement(lu,null)),E.createElement("div",{className:"DocSearch-LoadingIndicator"},E.createElement(Qv,null)),E.createElement("input",Jr({className:"DocSearch-Input",ref:r.inputRef},r.getInputProps({inputElement:r.inputRef.current,autoFocus:r.autoFocus,maxLength:64}))),E.createElement("button",{type:"reset",title:i,className:"DocSearch-Reset","aria-label":o,hidden:!r.state.query},E.createElement(ri,null))),E.createElement("button",{className:"DocSearch-Cancel",type:"reset","aria-label":m,onClick:r.onClose},u))}var Tf=["_highlightResult","_snippetResult"];function Lf(e,t){if(e==null)return{};var n,r,l=function(a,o){if(a==null)return{};var s,u,d={},m=Object.keys(a);for(u=0;u=0||(d[s]=a[s]);return d}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}function Df(e){return function(){var t="__TEST_KEY__";try{return localStorage.setItem(t,""),localStorage.removeItem(t),!0}catch{return!1}}()===!1?{setItem:function(){},getItem:function(){return[]}}:{setItem:function(t){return window.localStorage.setItem(e,JSON.stringify(t))},getItem:function(){var t=window.localStorage.getItem(e);return t?JSON.parse(t):[]}}}function $o(e){var t=e.key,n=e.limit,r=n===void 0?5:n,l=Df(t),i=l.getItem().slice(0,r);return{add:function(a){var o=a,s=(o._highlightResult,o._snippetResult,Lf(o,Tf)),u=i.findIndex(function(d){return d.objectID===s.objectID});u>-1&&i.splice(u,1),i.unshift(s),i=i.slice(0,r),l.setItem(i)},remove:function(a){i=i.filter(function(o){return o.objectID!==a.objectID}),l.setItem(i)},getAll:function(){return i}}}var Rf=["facetName","facetQuery"];function If(e){var t,n="algoliasearch-client-js-".concat(e.key),r=function(){return t===void 0&&(t=e.localStorage||window.localStorage),t},l=function(){return JSON.parse(r().getItem(n)||"{}")};return{get:function(i,a){var o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{miss:function(){return Promise.resolve()}};return Promise.resolve().then(function(){var s=JSON.stringify(i),u=l()[s];return Promise.all([u||a(),u!==void 0])}).then(function(s){var u=Br(s,2),d=u[0],m=u[1];return Promise.all([d,m||o.miss(d)])}).then(function(s){return Br(s,1)[0]})},set:function(i,a){return Promise.resolve().then(function(){var o=l();return o[JSON.stringify(i)]=a,r().setItem(n,JSON.stringify(o)),a})},delete:function(i){return Promise.resolve().then(function(){var a=l();delete a[JSON.stringify(i)],r().setItem(n,JSON.stringify(a))})},clear:function(){return Promise.resolve().then(function(){r().removeItem(n)})}}}function Rn(e){var t=Ur(e.caches),n=t.shift();return n===void 0?{get:function(r,l){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{miss:function(){return Promise.resolve()}};return l().then(function(a){return Promise.all([a,i.miss(a)])}).then(function(a){return Br(a,1)[0]})},set:function(r,l){return Promise.resolve(l)},delete:function(r){return Promise.resolve()},clear:function(){return Promise.resolve()}}:{get:function(r,l){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{miss:function(){return Promise.resolve()}};return n.get(r,l,i).catch(function(){return Rn({caches:t}).get(r,l,i)})},set:function(r,l){return n.set(r,l).catch(function(){return Rn({caches:t}).set(r,l)})},delete:function(r){return n.delete(r).catch(function(){return Rn({caches:t}).delete(r)})},clear:function(){return n.clear().catch(function(){return Rn({caches:t}).clear()})}}}function Al(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{serializable:!0},t={};return{get:function(n,r){var l=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{miss:function(){return Promise.resolve()}},i=JSON.stringify(n);if(i in t)return Promise.resolve(e.serializable?JSON.parse(t[i]):t[i]);var a=r(),o=l&&l.miss||function(){return Promise.resolve()};return a.then(function(s){return o(s)}).then(function(){return a})},set:function(n,r){return t[JSON.stringify(n)]=e.serializable?JSON.stringify(r):r,Promise.resolve(r)},delete:function(n){return delete t[JSON.stringify(n)],Promise.resolve()},clear:function(){return t={},Promise.resolve()}}}function Cf(e){for(var t=e.length-1;t>0;t--){var n=Math.floor(Math.random()*(t+1)),r=e[t];e[t]=e[n],e[n]=r}return e}function cu(e,t){return t&&Object.keys(t).forEach(function(n){e[n]=t[n](e)}),e}function al(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r0?r:void 0,timeout:n.timeout||t,headers:n.headers||{},queryParameters:n.queryParameters||{},cacheable:n.cacheable}}var an={Read:1,Write:2,Any:3},uu=1,xf=2,du=3;function hu(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:uu;return he(he({},e),{},{status:t,lastUpdate:Date.now()})}function gu(e){return typeof e=="string"?{protocol:"https",url:e,accept:an.Any}:{protocol:e.protocol||"https",url:e.url,accept:e.accept||an.Any}}var Jo="GET",ol="POST";function Vf(e,t){return Promise.all(t.map(function(n){return e.get(n,function(){return Promise.resolve(hu(n))})})).then(function(n){var r=n.filter(function(a){return function(o){return o.status===uu||Date.now()-o.lastUpdate>12e4}(a)}),l=n.filter(function(a){return function(o){return o.status===du&&Date.now()-o.lastUpdate<=12e4}(a)}),i=[].concat(Ur(r),Ur(l));return{getTimeout:function(a,o){return(l.length===0&&a===0?1:l.length+3+a)*o},statelessHosts:i.length>0?i.map(function(a){return gu(a)}):t}})}function Yo(e,t,n,r){var l=[],i=function(h,b){if(!(h.method===Jo||h.data===void 0&&b.data===void 0)){var g=Array.isArray(h.data)?h.data:he(he({},h.data),b.data);return JSON.stringify(g)}}(n,r),a=function(h,b){var g=he(he({},h.headers),b.headers),_={};return Object.keys(g).forEach(function(f){var k=g[f];_[f.toLowerCase()]=k}),_}(e,r),o=n.method,s=n.method!==Jo?{}:he(he({},n.data),r.data),u=he(he(he({"x-algolia-agent":e.userAgent.value},e.queryParameters),s),r.queryParameters),d=0,m=function h(b,g){var _=b.pop();if(_===void 0)throw{name:"RetryError",message:"Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.",transporterStackTrace:Qo(l)};var f={data:i,headers:a,method:o,url:jf(_,n.path,u),connectTimeout:g(d,e.timeouts.connect),responseTimeout:g(d,r.timeout)},k=function(P){var O={request:f,response:P,host:_,triesLeft:b.length};return l.push(O),O},w={onSucess:function(P){return function(O){try{return JSON.parse(O.content)}catch(D){throw function(j,L){return{name:"DeserializationError",message:j,response:L}}(D.message,O)}}(P)},onRetry:function(P){var O=k(P);return P.isTimedOut&&d++,Promise.all([e.logger.info("Retryable failure",pu(O)),e.hostsCache.set(_,hu(_,P.isTimedOut?du:xf))]).then(function(){return h(b,g)})},onFail:function(P){throw k(P),function(O,D){var j=O.content,L=O.status,A=j;try{A=JSON.parse(j).message}catch{}return function(K,B,W){return{name:"ApiError",message:K,status:B,transporterStackTrace:W}}(A,L,D)}(P,Qo(l))}};return e.requester.send(f).then(function(P){return function(O,D){return function(j){var L=j.status;return j.isTimedOut||function(A){var K=A.isTimedOut,B=A.status;return!K&&~~B==0}(j)||~~(L/100)!=2&&~~(L/100)!=4}(O)?D.onRetry(O):~~(O.status/100)==2?D.onSucess(O):D.onFail(O)}(P,w)})};return Vf(e.hostsCache,t).then(function(h){return m(Ur(h.statelessHosts).reverse(),h.getTimeout)})}function Ff(e){var t={value:"Algolia for JavaScript (".concat(e,")"),add:function(n){var r="; ".concat(n.segment).concat(n.version!==void 0?" (".concat(n.version,")"):"");return t.value.indexOf(r)===-1&&(t.value="".concat(t.value).concat(r)),t}};return t}function jf(e,t,n){var r=mu(n),l="".concat(e.protocol,"://").concat(e.url,"/").concat(t.charAt(0)==="/"?t.substr(1):t);return r.length&&(l+="?".concat(r)),l}function mu(e){return Object.keys(e).map(function(t){return al("%s=%s",t,(n=e[t],Object.prototype.toString.call(n)==="[object Object]"||Object.prototype.toString.call(n)==="[object Array]"?JSON.stringify(e[t]):e[t]));var n}).join("&")}function Qo(e){return e.map(function(t){return pu(t)})}function pu(e){var t=e.request.headers["x-algolia-api-key"]?{"x-algolia-api-key":"*****"}:{};return he(he({},e),{},{request:he(he({},e.request),{},{headers:he(he({},e.request.headers),t)})})}var Nf=function(e){var t=e.appId,n=function(i,a,o){var s={"x-algolia-api-key":o,"x-algolia-application-id":a};return{headers:function(){return i===Sr.WithinHeaders?s:{}},queryParameters:function(){return i===Sr.WithinQueryParameters?s:{}}}}(e.authMode!==void 0?e.authMode:Sr.WithinHeaders,t,e.apiKey),r=function(i){var a=i.hostsCache,o=i.logger,s=i.requester,u=i.requestsCache,d=i.responsesCache,m=i.timeouts,h=i.userAgent,b=i.hosts,g=i.queryParameters,_={hostsCache:a,logger:o,requester:s,requestsCache:u,responsesCache:d,timeouts:m,userAgent:h,headers:i.headers,queryParameters:g,hosts:b.map(function(f){return gu(f)}),read:function(f,k){var w=Go(k,_.timeouts.read),P=function(){return Yo(_,_.hosts.filter(function(D){return(D.accept&an.Read)!=0}),f,w)};if((w.cacheable!==void 0?w.cacheable:f.cacheable)!==!0)return P();var O={request:f,mappedRequestOptions:w,transporter:{queryParameters:_.queryParameters,headers:_.headers}};return _.responsesCache.get(O,function(){return _.requestsCache.get(O,function(){return _.requestsCache.set(O,P()).then(function(D){return Promise.all([_.requestsCache.delete(O),D])},function(D){return Promise.all([_.requestsCache.delete(O),Promise.reject(D)])}).then(function(D){var j=Br(D,2);return j[0],j[1]})})},{miss:function(D){return _.responsesCache.set(O,D)}})},write:function(f,k){return Yo(_,_.hosts.filter(function(w){return(w.accept&an.Write)!=0}),f,Go(k,_.timeouts.write))}};return _}(he(he({hosts:[{url:"".concat(t,"-dsn.algolia.net"),accept:an.Read},{url:"".concat(t,".algolia.net"),accept:an.Write}].concat(Cf([{url:"".concat(t,"-1.algolianet.com")},{url:"".concat(t,"-2.algolianet.com")},{url:"".concat(t,"-3.algolianet.com")}]))},e),{},{headers:he(he(he({},n.headers()),{"content-type":"application/x-www-form-urlencoded"}),e.headers),queryParameters:he(he({},n.queryParameters()),e.queryParameters)})),l={transporter:r,appId:t,addAlgoliaAgent:function(i,a){r.userAgent.add({segment:i,version:a})},clearCache:function(){return Promise.all([r.requestsCache.clear(),r.responsesCache.clear()]).then(function(){})}};return cu(l,e.methods)},vu=function(e){return function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r={transporter:e.transporter,appId:e.appId,indexName:t};return cu(r,n.methods)}},Zo=function(e){return function(t,n){var r=t.map(function(l){return he(he({},l),{},{params:mu(l.params||{})})});return e.transporter.read({method:ol,path:"1/indexes/*/queries",data:{requests:r},cacheable:!0},n)}},Xo=function(e){return function(t,n){return Promise.all(t.map(function(r){var l=r.params,i=l.facetName,a=l.facetQuery,o=Wp(l,Rf);return vu(e)(r.indexName,{methods:{searchForFacetValues:fu}}).searchForFacetValues(i,a,he(he({},n),o))}))}},Mf=function(e){return function(t,n,r){return e.transporter.read({method:ol,path:al("1/answers/%s/prediction",e.indexName),data:{query:t,queryLanguages:n},cacheable:!0},r)}},zf=function(e){return function(t,n){return e.transporter.read({method:ol,path:al("1/indexes/%s/query",e.indexName),data:{query:t},cacheable:!0},n)}},fu=function(e){return function(t,n,r){return e.transporter.read({method:ol,path:al("1/indexes/%s/facets/%s/query",e.indexName,t),data:{facetQuery:n},cacheable:!0},r)}},Hf=1,Bf=2,Uf=3;function _u(e,t,n){var r,l={appId:e,apiKey:t,timeouts:{connect:1,read:2,write:30},requester:{send:function(i){return new Promise(function(a){var o=new XMLHttpRequest;o.open(i.method,i.url,!0),Object.keys(i.headers).forEach(function(m){return o.setRequestHeader(m,i.headers[m])});var s,u=function(m,h){return setTimeout(function(){o.abort(),a({status:0,content:h,isTimedOut:!0})},1e3*m)},d=u(i.connectTimeout,"Connection timeout");o.onreadystatechange=function(){o.readyState>o.OPENED&&s===void 0&&(clearTimeout(d),s=u(i.responseTimeout,"Socket timeout"))},o.onerror=function(){o.status===0&&(clearTimeout(d),clearTimeout(s),a({content:o.responseText||"Network request failed",status:o.status,isTimedOut:!1}))},o.onload=function(){clearTimeout(d),clearTimeout(s),a({content:o.responseText,status:o.status,isTimedOut:!1})},o.send(i.data)})}},logger:(r=Uf,{debug:function(i,a){return Hf>=r&&console.debug(i,a),Promise.resolve()},info:function(i,a){return Bf>=r&&console.info(i,a),Promise.resolve()},error:function(i,a){return console.error(i,a),Promise.resolve()}}),responsesCache:Al(),requestsCache:Al({serializable:!1}),hostsCache:Rn({caches:[If({key:"".concat("4.8.5","-").concat(e)}),Al()]}),userAgent:Ff("4.8.5").add({segment:"Browser",version:"lite"}),authMode:Sr.WithinQueryParameters};return Nf(he(he(he({},l),n),{},{methods:{search:Zo,searchForFacetValues:Xo,multipleQueries:Zo,multipleSearchForFacetValues:Xo,initIndex:function(i){return function(a){return vu(i)(a,{methods:{search:zf,searchForFacetValues:fu,findAnswers:Mf}})}}}}))}_u.version="4.8.5";var Kf=["footer","searchBox"];function Hn(){return Hn=Object.assign||function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0||(d[s]=a[s]);return d}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}function Gf(e){var t=e.appId,n=t===void 0?"BH4D9OD16A":t,r=e.apiKey,l=e.indexName,i=e.placeholder,a=i===void 0?"Search docs":i,o=e.searchParameters,s=e.onClose,u=s===void 0?vf:s,d=e.transformItems,m=d===void 0?Wo:d,h=e.hitComponent,b=h===void 0?Yv:h,g=e.resultsFooterComponent,_=g===void 0?function(){return null}:g,f=e.navigator,k=e.initialScrollY,w=k===void 0?0:k,P=e.transformSearchClient,O=P===void 0?Wo:P,D=e.disableUserPersonalization,j=D!==void 0&&D,L=e.initialQuery,A=L===void 0?"":L,K=e.translations,B=K===void 0?{}:K,W=B.footer,T=B.searchBox,H=$f(B,Kf),Q=Wf(E.useState({query:"",collections:[],completion:null,context:{},isOpen:!1,activeItemId:null,status:"idle"}),2),se=Q[0],J=Q[1],re=E.useRef(null),le=E.useRef(null),we=E.useRef(null),Oe=E.useRef(null),Te=E.useRef(null),Pe=E.useRef(10),Ie=E.useRef(typeof window!="undefined"?window.getSelection().toString().slice(0,64):"").current,He=E.useRef(A||Ie).current,I=function(p,y,S){return E.useMemo(function(){var R=_u(p,y);return R.addAlgoliaAgent("docsearch","3.0.0-alpha.42"),/docsearch.js \(.*\)/.test(R.transporter.userAgent.value)===!1&&R.addAlgoliaAgent("docsearch-react","3.0.0-alpha.42"),S(R)},[p,y,S])}(n,r,O),U=E.useRef($o({key:"__DOCSEARCH_FAVORITE_SEARCHES__".concat(l),limit:10})).current,N=E.useRef($o({key:"__DOCSEARCH_RECENT_SEARCHES__".concat(l),limit:U.getAll().length===0?7:4})).current,q=E.useCallback(function(p){if(!j){var y=p.type==="content"?p.__docsearch_parent:p;y&&U.getAll().findIndex(function(S){return S.objectID===y.objectID})===-1&&N.add(y)}},[U,N,j]),ue=E.useMemo(function(){return $v({id:"docsearch",defaultActiveItemId:0,placeholder:a,openOnFocus:!0,initialState:{query:He,context:{searchSuggestions:[]}},navigator:f,onStateChange:function(p){J(p.state)},getSources:function(p){var y=p.query,S=p.state,R=p.setContext,C=p.setStatus;return y?I.search([{query:y,indexName:l,params:Tl({attributesToRetrieve:["hierarchy.lvl0","hierarchy.lvl1","hierarchy.lvl2","hierarchy.lvl3","hierarchy.lvl4","hierarchy.lvl5","hierarchy.lvl6","content","type","url"],attributesToSnippet:["hierarchy.lvl1:".concat(Pe.current),"hierarchy.lvl2:".concat(Pe.current),"hierarchy.lvl3:".concat(Pe.current),"hierarchy.lvl4:".concat(Pe.current),"hierarchy.lvl5:".concat(Pe.current),"hierarchy.lvl6:".concat(Pe.current),"content:".concat(Pe.current)],snippetEllipsisText:"\u2026",highlightPreTag:"",highlightPostTag:"",hitsPerPage:20},o)}]).catch(function(x){throw x.name==="RetryError"&&C("error"),x}).then(function(x){var M=x.results[0],V=M.hits,z=M.nbHits,F=qo(V,function(Y){return su(Y)});return S.context.searchSuggestions.length0&&(ne(),Te.current&&Te.current.focus())},[He,ne]),E.useEffect(function(){function p(){if(le.current){var y=.01*window.innerHeight;le.current.style.setProperty("--docsearch-vh","".concat(y,"px"))}}return p(),window.addEventListener("resize",p),function(){window.removeEventListener("resize",p)}},[]),E.createElement("div",Hn({ref:re},ie({"aria-expanded":!0}),{className:["DocSearch","DocSearch-Container",se.status==="stalled"&&"DocSearch-Container--Stalled",se.status==="error"&&"DocSearch-Container--Errored"].filter(Boolean).join(" "),role:"button",tabIndex:0,onMouseDown:function(p){p.target===p.currentTarget&&u()}}),E.createElement("div",{className:"DocSearch-Modal",ref:le},E.createElement("header",{className:"DocSearch-SearchBar",ref:we},E.createElement(Af,Hn({},ue,{state:se,autoFocus:He.length===0,inputRef:Te,isFromSelection:Boolean(He)&&He===Ie,translations:T,onClose:u}))),E.createElement("div",{className:"DocSearch-Dropdown",ref:Oe},E.createElement(Pf,Hn({},ue,{indexName:l,state:se,hitComponent:b,resultsFooterComponent:_,disableUserPersonalization:j,recentSearches:N,favoriteSearches:U,inputRef:Te,translations:H,onItemClick:function(p){q(p),u()}}))),E.createElement("footer",{className:"DocSearch-Footer"},E.createElement(Jv,{translations:W}))))}function ai(){return ai=Object.assign||function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n1&&arguments[1]!==void 0?arguments[1]:window;return typeof t=="string"?n.document.querySelector(t):t}(e.container,e.environment))}var bu,oi,ku,Qf=[];function Zf(e,t,n){var r,l,i,a={};for(i in t)i=="key"?r=t[i]:i=="ref"?l=t[i]:a[i]=t[i];if(arguments.length>2&&(a.children=arguments.length>3?bu.call(arguments,2):n),typeof e=="function"&&e.defaultProps!=null)for(i in e.defaultProps)a[i]===void 0&&(a[i]=e.defaultProps[i]);return Xf(e,a,r,l,null)}function Xf(e,t,n,r,l){var i={type:e,props:t,key:n,ref:r,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:l==null?++ku:l};return l==null&&oi.vnode!=null&&oi.vnode(i),i}bu=Qf.slice,oi={__e:function(e,t){for(var n,r,l;t=t.__;)if((n=t.__c)&&!n.__)try{if((r=n.constructor)&&r.getDerivedStateFromError!=null&&(n.setState(r.getDerivedStateFromError(e)),l=n.__d),n.componentDidCatch!=null&&(n.componentDidCatch(e),l=n.__d),l)return n.__E=n}catch(i){e=i}throw e}},ku=0,typeof Promise=="function"&&Promise.prototype.then.bind(Promise.resolve());const e_=e=>e.button===1||e.altKey||e.ctrlKey||e.metaKey||e.shiftKey,t_=()=>{const e=rr(),t=Oc();return{transformItems:n=>n.map(r=>Lt(xe({},r),{url:wm(r.url,t.value.base)})),hitComponent:({hit:n,children:r})=>Zf("a",{href:n.url,onClick:l=>{e_(l)||(l.preventDefault(),e.push(n.url))}},r),navigator:{navigate:({itemUrl:n})=>{e.push(n)}}}};const n_=ze({name:"Docsearch",props:{options:{type:Object,required:!0}},setup(e){const t=ji(),n=Sc(),r=t_(),l=_e(()=>{var o;return xe(xe({},e.options),(o=e.options.locales)===null||o===void 0?void 0:o[t.value])}),i=[],a=()=>{var o,s;const u=(s=(o=l.value.searchParameters)===null||o===void 0?void 0:o.facetFilters)!==null&&s!==void 0?s:[];i.splice(0,i.length,`lang:${n.value}`,...te(u)?u:[u]),Yf(Lt(xe(xe({},r),l.value),{container:"#docsearch-container",searchParameters:Lt(xe({},l.value.searchParameters),{facetFilters:i})}))};return tt(()=>{a(),et([t,l],([o,s],[u,d])=>{o!==u&&JSON.stringify(s)!==JSON.stringify(d)&&a()}),et(n,(o,s)=>{if(o!==s){const u=i.findIndex(d=>d===`lang:${s}`);u>-1&&i.splice(u,1,`lang:${o}`)}})}),()=>ee("div",{id:"docsearch-container"})}}),r_={apiKey:"1831a64a81ffef4f85d5c0aa28cb801f",indexName:"solanacookbook",appId:"QMKSKREFKN",algoliaOptions:{hitsPerPage:10},locales:{"/":{placeholder:"Search",translations:{button:{buttonText:"Search"}}},"/zh/":{placeholder:"\u641C\u7D22\u6587\u6863",translations:{button:{buttonText:"\u641C\u7D22\u6587\u6863"}}},"/vi/":{placeholder:"T\xECm ki\u1EBFm",translations:{button:{buttonText:"T\xECm ki\u1EBFm"}}},"/th/":{placeholder:"\u0E04\u0E49\u0E19\u0E2B\u0E32",translations:{button:{buttonText:"\u0E04\u0E49\u0E19\u0E2B\u0E32"}}},"/fr/":{placeholder:"Rechercher",translations:{button:{buttonText:"Rechercher"}}},"/id/":{placeholder:"Cari",translations:{button:{buttonText:"Cari"}}},"/kr/":{placeholder:"\uAC80\uC0C9",translations:{button:{buttonText:"\uAC80\uC0C9"}}}}};var l_=Tt(({app:e})=>{e.component("Docsearch",()=>ee(n_,{options:r_}))});const yu=ze({name:"SolanaCodeGroup",setup(e,{slots:t}){var b;const n=Ee(-1),r=Ee([]),l=(g=n.value)=>{g{g>0?n.value=g-1:n.value=r.value.length-1,r.value[n.value].focus()},a=(g,_)=>{g.key===" "||g.key==="Enter"?(g.preventDefault(),n.value=_):g.key==="ArrowRight"?(g.preventDefault(),l(_)):g.key==="ArrowLeft"&&(g.preventDefault(),i(_))},o=((b=t.default)==null?void 0:b.call(t))||[];let s=!1;o.forEach(g=>{Object.keys(g.children).includes("preview")&&(s=!0)});const u=Ee(s),d=()=>{u.value=!u.value};function m(g){return g.map(_=>{var f;return((f=_.props)==null?void 0:f.class)==="line-number"?"":typeof _.children=="string"?_.children:Array.isArray(_.children)?m(_.children):""}).join("")}const h=()=>{let g=o.find((w,P)=>P===n.value),_=u.value?g.children.preview():g.children.default(),f=m(_),k=[new ClipboardItem({"text/plain":new Blob([f],{type:"text/plain"})})];navigator.clipboard.write(k)};return()=>{var _;const g=(((_=t.default)==null?void 0:_.call(t))||[]).map(f=>(f.props===null&&(f.props={preview:u}),f));return g.length===0?null:(n.value<0||n.value>g.length-1?(n.value=g.findIndex(f=>f.props.active===""||f.props.active===!0),n.value===-1&&(n.value=0)):g.forEach((f,k)=>{f.props.active=k===n.value,f.props.preview=u.value}),ee("div",{class:"code-group"},[ee("div",{class:"code-group__nav"},ee("ul",{class:"code-group__ul"},g.map((f,k)=>{const w=k===n.value;return ee("li",{class:"code-group__li"},ee("button",{ref:P=>{P&&(r.value[k]=P)},class:{"code-group__nav-tab":!0,"code-group__nav-tab-active":w},ariaPressed:w,ariaExpanded:w,onClick:()=>n.value=k,onKeydown:P=>a(P,k)},f.props.title))}),ee("li",{class:"flex-grow"}),ee("li",{class:"code-group__li"},ee("button",{class:{"code-group__nav-tab":!0},onClick:()=>d()},ee("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none"},ee("path",{stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":2,d:"M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4"})))),ee("li",{class:"code-group__li"},ee("button",{class:{"code-group__nav-tab":!0},onClick:()=>h()},ee("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none"},ee("path",{stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":2,d:"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"})))))),ee("div",[u.value?ee("div",{class:"code-info-title"},"Press button to view full source"):null]),g]))}}});var i_=Object.freeze({__proto__:null,[Symbol.toStringTag]:"Module",default:yu});var a_=(e,t)=>{const n=e.__vccOpts||e;for(const[r,l]of t)n[r]=l;return n};const o_={name:"SolanaCodeGroupItem",props:{title:{type:String,required:!0},active:{type:Boolean,required:!1,default:!1},preview:{type:Boolean,required:!1,default:!1}}},s_=["aria-selected"];function c_(e,t,n,r,l,i){return nr(),Ti("div",{class:wt(["code-group-item",{"code-group-item__active":n.active}]),"aria-selected":n.active},[Fr("div",{class:wt({hidden:n.preview})},[jr(e.$slots,"default",{},void 0,!0)],2),Fr("div",{class:wt({hidden:!n.preview})},[jr(e.$slots,"preview",{},void 0,!0)],2)],10,s_)}var Eu=a_(o_,[["render",c_],["__scopeId","data-v-6ae3d40e"]]),u_=Object.freeze({__proto__:null,[Symbol.toStringTag]:"Module",default:Eu});var d_=Tt(({app:e,router:t,siteData:n})=>{e.component("SolanaCodeGroup",yu),e.component("SolanaCodeGroupItem",Eu)});const h_=[Tm,zm,qm,Tp,Rp,Up,Kp,l_,d_];function wu(e,t,n){var r,l,i;t===void 0&&(t=50),n===void 0&&(n={});var a=(r=n.isImmediate)!=null&&r,o=(l=n.callback)!=null&&l,s=n.maxWait,u=Date.now(),d=[];function m(){if(s!==void 0){var b=Date.now()-u;if(b+t>=s)return s-b}return t}var h=function(){var b=[].slice.call(arguments),g=this;return new Promise(function(_,f){var k=a&&i===void 0;if(i!==void 0&&clearTimeout(i),i=setTimeout(function(){if(i=void 0,u=Date.now(),!a){var P=e.apply(g,b);o&&o(P),d.forEach(function(O){return(0,O.resolve)(P)}),d=[]}},m()),k){var w=e.apply(g,b);return o&&o(w),_(w)}d.push({resolve:_,reject:f})})};return h.cancel=function(b){i!==void 0&&clearTimeout(i),d.forEach(function(g){return(0,g.reject)(b)}),d=[]},h}const ls=()=>window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,g_=()=>window.scrollTo({top:0,behavior:"smooth"});const m_=ze({name:"BackToTop",setup(){const e=Ee(0),t=_e(()=>e.value>300),n=wu(()=>{e.value=ls()},100);tt(()=>{e.value=ls(),window.addEventListener("scroll",()=>n())});const r=ee("div",{class:"back-to-top",onClick:g_});return()=>ee(Ii,{name:"back-to-top"},()=>t.value?r:null)}}),p_=[m_],v_=({headerLinkSelector:e,headerAnchorSelector:t,delay:n,offset:r=5})=>{const l=rr(),i=lr(),o=wu(()=>{var s,u,d,m;const h=Array.from(document.querySelectorAll(e)),g=Array.from(document.querySelectorAll(t)).filter(P=>h.some(O=>O.hash===P.hash)),_=Math.max(window.pageYOffset,document.documentElement.scrollTop,document.body.scrollTop),f=window.innerHeight+_,k=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight),w=Math.abs(k-f)=((u=(s=O.parentElement)===null||s===void 0?void 0:s.offsetTop)!==null&&u!==void 0?u:0)-r,A=!D||_<((m=(d=D.parentElement)===null||d===void 0?void 0:d.offsetTop)!==null&&m!==void 0?m:0)-r;if(!(j||L&&A))continue;const B=decodeURIComponent(l.currentRoute.value.hash),W=decodeURIComponent(O.hash);if(B===W)return;if(w){for(let T=P+1;T{o(),window.addEventListener("scroll",o)}),nl(()=>{window.removeEventListener("scroll",o)}),et(()=>i.value.path,o)},f_=async(e,...t)=>{const{scrollBehavior:n}=e.options;e.options.scrollBehavior=void 0,await e.replace(...t).finally(()=>e.options.scrollBehavior=n)},__="a.sidebar-item",b_=".header-anchor",k_=300,y_=5;var E_=Mi(()=>{v_({headerLinkSelector:__,headerAnchorSelector:b_,delay:k_,offset:y_})}),w_=typeof globalThis!="undefined"?globalThis:typeof window!="undefined"?window:typeof global!="undefined"?global:typeof self!="undefined"?self:{},Or={exports:{}};/* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress - * @license MIT */(function(e,t){(function(n,r){e.exports=r()})(w_,function(){var n={};n.version="0.2.0";var r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'
'};n.configure=function(g){var _,f;for(_ in g)f=g[_],f!==void 0&&g.hasOwnProperty(_)&&(r[_]=f);return this},n.status=null,n.set=function(g){var _=n.isStarted();g=l(g,r.minimum,1),n.status=g===1?null:g;var f=n.render(!_),k=f.querySelector(r.barSelector),w=r.speed,P=r.easing;return f.offsetWidth,o(function(O){r.positionUsing===""&&(r.positionUsing=n.getPositioningCSS()),s(k,a(g,w,P)),g===1?(s(f,{transition:"none",opacity:1}),f.offsetWidth,setTimeout(function(){s(f,{transition:"all "+w+"ms linear",opacity:0}),setTimeout(function(){n.remove(),O()},w)},w)):setTimeout(O,w)}),this},n.isStarted=function(){return typeof n.status=="number"},n.start=function(){n.status||n.set(0);var g=function(){setTimeout(function(){!n.status||(n.trickle(),g())},r.trickleSpeed)};return r.trickle&&g(),this},n.done=function(g){return!g&&!n.status?this:n.inc(.3+.5*Math.random()).set(1)},n.inc=function(g){var _=n.status;return _?(typeof g!="number"&&(g=(1-_)*l(Math.random()*_,.1,.95)),_=l(_+g,0,.994),n.set(_)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},function(){var g=0,_=0;n.promise=function(f){return!f||f.state()==="resolved"?this:(_===0&&n.start(),g++,_++,f.always(function(){_--,_===0?(g=0,n.done()):n.set((g-_)/g)}),this)}}(),n.render=function(g){if(n.isRendered())return document.getElementById("nprogress");d(document.documentElement,"nprogress-busy");var _=document.createElement("div");_.id="nprogress",_.innerHTML=r.template;var f=_.querySelector(r.barSelector),k=g?"-100":i(n.status||0),w=document.querySelector(r.parent),P;return s(f,{transition:"all 0 linear",transform:"translate3d("+k+"%,0,0)"}),r.showSpinner||(P=_.querySelector(r.spinnerSelector),P&&b(P)),w!=document.body&&d(w,"nprogress-custom-parent"),w.appendChild(_),_},n.remove=function(){m(document.documentElement,"nprogress-busy"),m(document.querySelector(r.parent),"nprogress-custom-parent");var g=document.getElementById("nprogress");g&&b(g)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var g=document.body.style,_="WebkitTransform"in g?"Webkit":"MozTransform"in g?"Moz":"msTransform"in g?"ms":"OTransform"in g?"O":"";return _+"Perspective"in g?"translate3d":_+"Transform"in g?"translate":"margin"};function l(g,_,f){return g<_?_:g>f?f:g}function i(g){return(-1+g)*100}function a(g,_,f){var k;return r.positionUsing==="translate3d"?k={transform:"translate3d("+i(g)+"%,0,0)"}:r.positionUsing==="translate"?k={transform:"translate("+i(g)+"%,0)"}:k={"margin-left":i(g)+"%"},k.transition="all "+_+"ms "+f,k}var o=function(){var g=[];function _(){var f=g.shift();f&&f(_)}return function(f){g.push(f),g.length==1&&_()}}(),s=function(){var g=["Webkit","O","Moz","ms"],_={};function f(O){return O.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,function(D,j){return j.toUpperCase()})}function k(O){var D=document.body.style;if(O in D)return O;for(var j=g.length,L=O.charAt(0).toUpperCase()+O.slice(1),A;j--;)if(A=g[j]+L,A in D)return A;return O}function w(O){return O=f(O),_[O]||(_[O]=k(O))}function P(O,D,j){D=w(D),O.style[D]=j}return function(O,D){var j=arguments,L,A;if(j.length==2)for(L in D)A=D[L],A!==void 0&&D.hasOwnProperty(L)&&P(O,L,A);else P(O,j[1],j[2])}}();function u(g,_){var f=typeof g=="string"?g:h(g);return f.indexOf(" "+_+" ")>=0}function d(g,_){var f=h(g),k=f+_;u(f,_)||(g.className=k.substring(1))}function m(g,_){var f=h(g),k;!u(g,_)||(k=f.replace(" "+_+" "," "),g.className=k.substring(1,k.length-1))}function h(g){return(" "+(g.className||"")+" ").replace(/\s+/gi," ")}function b(g){g&&g.parentNode&&g.parentNode.removeChild(g)}return n})})(Or);const P_=()=>{tt(()=>{const e=rr(),t=new Set;t.add(e.currentRoute.value.path),Or.exports.configure({showSpinner:!1}),e.beforeEach(n=>{t.has(n.path)||Or.exports.start()}),e.afterEach(n=>{t.add(n.path),Or.exports.done()})})};var S_=Mi(()=>{P_()}),O_=Mi(()=>{_p(),wp()});const A_=[E_,S_,O_],T_=[["v-8daa1a0e","/",{title:"Cooking with Solana"},["/index.html","/README.md"]],["v-2d0a87a8","/es/",{title:"Libro de recetas de Solana"},["/es/index.html","/es/README.md"]],["v-6bf54404","/core-concepts/accounts.html",{title:"Accounts"},["/core-concepts/accounts","/core-concepts/accounts.md"]],["v-130ca978","/core-concepts/pdas.html",{title:"Program Derived Addresses (PDAs)"},["/core-concepts/pdas","/core-concepts/pdas.md"]],["v-882009ca","/core-concepts/programs.html",{title:"Programs"},["/core-concepts/programs","/core-concepts/programs.md"]],["v-63197375","/core-concepts/transactions.html",{title:"Transactions"},["/core-concepts/transactions","/core-concepts/transactions.md"]],["v-2d0a8b4a","/fr/",{title:"Solana Cookbook"},["/fr/index.html","/fr/README.md"]],["v-4e8563af","/getting-started/installation.html",{title:"Installation"},["/getting-started/installation","/getting-started/installation.md"]],["v-2d0a8235","/de/",{title:"Kochen mit Solana"},["/de/index.html","/de/README.md"]],["v-76b1e9e3","/guides/account-maps.html",{title:"Account Maps"},["/guides/account-maps","/guides/account-maps.md"]],["v-6da58eef","/guides/data-migration.html",{title:"Migrating Program Data Accounts"},["/guides/data-migration","/guides/data-migration.md"]],["v-4684263f","/guides/debugging-solana-programs.html",{title:"Debugging Solana Programs"},["/guides/debugging-solana-programs","/guides/debugging-solana-programs.md"]],["v-4740871a","/guides/feature-parity-testing.html",{title:"Feature Parity Testing"},["/guides/feature-parity-testing","/guides/feature-parity-testing.md"]],["v-2b9a5458","/guides/get-program-accounts.html",{title:"Get Program Accounts"},["/guides/get-program-accounts","/guides/get-program-accounts.md"]],["v-5a9d5a10","/guides/retrying-transactions.html",{title:"Retrying Transactions"},["/guides/retrying-transactions","/guides/retrying-transactions.md"]],["v-2e379628","/guides/serialization.html",{title:"Serializing Data"},["/guides/serialization","/guides/serialization.md"]],["v-7e81f36f","/guides/versioned-transactions.html",{title:"Versioned Transactions"},["/guides/versioned-transactions","/guides/versioned-transactions.md"]],["v-2d0a94db","/id/",{title:"Buku Panduan Solana"},["/id/index.html","/id/README.md"]],["v-2d0a9e0f","/kr/",{title:"Cooking with Solana"},["/kr/index.html","/kr/README.md"]],["v-100dc897","/integrations/",{title:"Getting Started"},["/integrations/index.html","/integrations/README.md"]],["v-13513bf3","/integrations/jupiter.html",{title:"Jupiter"},["/integrations/jupiter","/integrations/jupiter.md"]],["v-7f12be2e","/integrations/mango.html",{title:"Mango Markets"},["/integrations/mango","/integrations/mango.md"]],["v-0bf487b4","/integrations/orao-vrf.html",{title:"ORAO VRF"},["/integrations/orao-vrf","/integrations/orao-vrf.md"]],["v-6bb05bf6","/integrations/pyth.html",{title:"Pyth"},["/integrations/pyth","/integrations/pyth.md"]],["v-78a2a41d","/integrations/react-native.html",{title:"React Native"},["/integrations/react-native","/integrations/react-native.md"]],["v-0a8f60b8","/integrations/serum.html",{title:"Serum"},["/integrations/serum","/integrations/serum.md"]],["v-402eef45","/integrations/strata.html",{title:"Strata"},["/integrations/strata","/integrations/strata.md"]],["v-4d26b27e","/integrations/switchboard.html",{title:"Switchboard"},["/integrations/switchboard","/integrations/switchboard.md"]],["v-da1de70a","/integrations/web3auth.html",{title:"web3Auth (Torus Wallet)"},["/integrations/web3auth","/integrations/web3auth.md"]],["v-6c467d65","/references/accounts.html",{title:"Accounts"},["/references/accounts","/references/accounts.md"]],["v-70f9aa12","/references/basic-transactions.html",{title:"Sending Transactions"},["/references/basic-transactions","/references/basic-transactions.md"]],["v-4dc29afa","/references/keypairs-and-wallets.html",{title:"Keypairs and Wallets"},["/references/keypairs-and-wallets","/references/keypairs-and-wallets.md"]],["v-10b56a2e","/references/local-development.html",{title:"Local Development"},["/references/local-development","/references/local-development.md"]],["v-9eccd210","/references/name-service.html",{title:"Name Service"},["/references/name-service","/references/name-service.md"]],["v-d2aec298","/references/nfts.html",{title:"NFTs"},["/references/nfts","/references/nfts.md"]],["v-f8950628","/references/offline-transactions.html",{title:"Sending Offline Transactions"},["/references/offline-transactions","/references/offline-transactions.md"]],["v-877d9708","/references/programs.html",{title:"Writing Programs"},["/references/programs","/references/programs.md"]],["v-26f90ae0","/references/staking.html",{title:"Staking"},["/references/staking","/references/staking.md"]],["v-0d096f0e","/references/token.html",{title:"Interacting with Tokens"},["/references/token","/references/token.md"]],["v-2d0abea2","/th/",{title:"Cooking \u0E01\u0E31\u0E1A Solana"},["/th/index.html","/th/README.md"]],["v-2d0abfd8","/tr/",{title:"Solana Cookbook"},["/tr/index.html","/tr/README.md"]],["v-2d0ac643","/vi/",{title:"Nh\u1EADp m\xF4n Solana"},["/vi/index.html","/vi/README.md"]],["v-2d0ad528","/zh/",{title:"Solana\u79D8\u7C4D"},["/zh/index.html","/zh/README.md"]],["v-08458c16","/es/core-concepts/accounts.html",{title:"Cuentas"},["/es/core-concepts/accounts","/es/core-concepts/accounts.md"]],["v-79377c96","/es/core-concepts/pdas.html",{title:"Direcciones derivadas de programa (PDAs)"},["/es/core-concepts/pdas","/es/core-concepts/pdas.md"]],["v-4bd7f10c","/es/core-concepts/programs.html",{title:"Programas"},["/es/core-concepts/programs","/es/core-concepts/programs.md"]],["v-314308e6","/es/core-concepts/transactions.html",{title:"Transacciones"},["/es/core-concepts/transactions","/es/core-concepts/transactions.md"]],["v-389f60e0","/es/getting-started/installation.html",{title:"Instalaci\xF3n"},["/es/getting-started/installation","/es/getting-started/installation.md"]],["v-471a2192","/es/guides/account-maps.html",{title:"C\xF3mo usar Map en cuentas"},["/es/guides/account-maps","/es/guides/account-maps.md"]],["v-7642d244","/es/guides/data-migration.html",{title:"Migrando cuentas de datos de programas"},["/es/guides/data-migration","/es/guides/data-migration.md"]],["v-6c0a22f0","/es/guides/debugging-solana-programs.html",{title:"Depurando Programas en Solana"},["/es/guides/debugging-solana-programs","/es/guides/debugging-solana-programs.md"]],["v-35856562","/es/guides/feature-parity-testing.html",{title:"Prueba de paridad de caracter\xEDsticas"},["/es/guides/feature-parity-testing","/es/guides/feature-parity-testing.md"]],["v-3d8822fa","/es/guides/get-program-accounts.html",{title:"Obtener cuentas de programa"},["/es/guides/get-program-accounts","/es/guides/get-program-accounts.md"]],["v-44b75741","/es/guides/retrying-transactions.html",{title:"Reintentando Transacciones"},["/es/guides/retrying-transactions","/es/guides/retrying-transactions.md"]],["v-6ad65459","/es/guides/serialization.html",{title:"Serializando datos"},["/es/guides/serialization","/es/guides/serialization.md"]],["v-3caeb514","/es/references/accounts.html",{title:"Cuentas"},["/es/references/accounts","/es/references/accounts.md"]],["v-20a8d3e6","/es/references/basic-transactions.html",{title:"Enviando transacciones"},["/es/references/basic-transactions","/es/references/basic-transactions.md"]],["v-17bc77ae","/es/references/keypairs-and-wallets.html",{title:"Pares de llaves y billeteras"},["/es/references/keypairs-and-wallets","/es/references/keypairs-and-wallets.md"]],["v-0a613142","/es/references/local-development.html",{title:"Desarrollo en entorno local"},["/es/references/local-development","/es/references/local-development.md"]],["v-1db05f27","/es/references/name-service.html",{title:"Servicio de nombres"},["/es/references/name-service","/es/references/name-service.md"]],["v-6f8605e3","/es/references/nfts.html",{title:"NFTs"},["/es/references/nfts","/es/references/nfts.md"]],["v-2a14a61b","/es/references/offline-transactions.html",{title:"Enviando transacciones offline"},["/es/references/offline-transactions","/es/references/offline-transactions.md"]],["v-e6ad27aa","/es/references/programs.html",{title:"Escribiendo Programas"},["/es/references/programs","/es/references/programs.md"]],["v-8d23ddfe","/es/references/staking.html",{title:"Staking"},["/es/references/staking","/es/references/staking.md"]],["v-4fd8edbf","/es/references/token.html",{title:"Interactuando con tokens"},["/es/references/token","/es/references/token.md"]],["v-598bfdda","/fr/core-concepts/accounts.html",{title:"Comptes"},["/fr/core-concepts/accounts","/fr/core-concepts/accounts.md"]],["v-410d47d3","/fr/core-concepts/pdas.html",{title:"Adresses d\xE9riv\xE9es de programmes (PDAs)"},["/fr/core-concepts/pdas","/fr/core-concepts/pdas.md"]],["v-2334b82a","/fr/core-concepts/programs.html",{title:"Programmes"},["/fr/core-concepts/programs","/fr/core-concepts/programs.md"]],["v-1ee9ddf8","/fr/core-concepts/transactions.html",{title:"Transactions"},["/fr/core-concepts/transactions","/fr/core-concepts/transactions.md"]],["v-4605d97e","/fr/getting-started/installation.html",{title:"Installation"},["/fr/getting-started/installation","/fr/getting-started/installation.md"]],["v-7e91df34","/fr/guides/account-maps.html",{title:"Maps de Comptes"},["/fr/guides/account-maps","/fr/guides/account-maps.md"]],["v-05451800","/fr/guides/data-migration.html",{title:"Migration des Comptes de Donn\xE9es de Programmes"},["/fr/guides/data-migration","/fr/guides/data-migration.md"]],["v-0bb1c6e4","/fr/guides/debugging-solana-programs.html",{title:"D\xE9bogage des Programmes Solana"},["/fr/guides/debugging-solana-programs","/fr/guides/debugging-solana-programs.md"]],["v-5623fef8","/fr/guides/feature-parity-testing.html",{title:"Test de Conformit\xE9 des Fonctionnalit\xE9s"},["/fr/guides/feature-parity-testing","/fr/guides/feature-parity-testing.md"]],["v-0af4ea25","/fr/guides/get-program-accounts.html",{title:"Obtenir les comptes d'un programme"},["/fr/guides/get-program-accounts","/fr/guides/get-program-accounts.md"]],["v-521dcfdf","/fr/guides/retrying-transactions.html",{title:"R\xE9essayer des Transactions"},["/fr/guides/retrying-transactions","/fr/guides/retrying-transactions.md"]],["v-22564af7","/fr/guides/serialization.html",{title:"S\xE9rialisation des donn\xE9es"},["/fr/guides/serialization","/fr/guides/serialization.md"]],["v-4571fbe6","/fr/integrations/",{title:"Pour Commencer"},["/fr/integrations/index.html","/fr/integrations/README.md"]],["v-076ff0c2","/fr/integrations/jupiter.html",{title:"Jupiter"},["/fr/integrations/jupiter","/fr/integrations/jupiter.md"]],["v-6cb34a86","/fr/integrations/mango.html",{title:"Mango Markets"},["/fr/integrations/mango","/fr/integrations/mango.md"]],["v-6976e796","/fr/integrations/pyth.html",{title:"Pyth"},["/fr/integrations/pyth","/fr/integrations/pyth.md"]],["v-1e60cea4","/fr/integrations/react-native.html",{title:"React Native"},["/fr/integrations/react-native","/fr/integrations/react-native.md"]],["v-5522fd47","/fr/integrations/serum.html",{title:"Serum"},["/fr/integrations/serum","/fr/integrations/serum.md"]],["v-480ee496","/fr/integrations/strata.html",{title:"Strata"},["/fr/integrations/strata","/fr/integrations/strata.md"]],["v-139f3066","/fr/integrations/switchboard.html",{title:"Switchboard"},["/fr/integrations/switchboard","/fr/integrations/switchboard.md"]],["v-22a8f18c","/fr/integrations/web3auth.html",{title:"web3Auth (Torus Wallet)"},["/fr/integrations/web3auth","/fr/integrations/web3auth.md"]],["v-742672b6","/fr/references/accounts.html",{title:"Comptes"},["/fr/references/accounts","/fr/references/accounts.md"]],["v-7fdd21f0","/fr/references/basic-transactions.html",{title:"Envoyer des Transactions"},["/fr/references/basic-transactions","/fr/references/basic-transactions.md"]],["v-5bd01ecb","/fr/references/keypairs-and-wallets.html",{title:"Paires de Cl\xE9s et Portefeuilles"},["/fr/references/keypairs-and-wallets","/fr/references/keypairs-and-wallets.md"]],["v-0835dffd","/fr/references/local-development.html",{title:"D\xE9veloppement Local"},["/fr/references/local-development","/fr/references/local-development.md"]],["v-31ec7bc9","/fr/references/name-service.html",{title:"Service de Noms"},["/fr/references/name-service","/fr/references/name-service.md"]],["v-3331e485","/fr/references/nfts.html",{title:"NFTs"},["/fr/references/nfts","/fr/references/nfts.md"]],["v-dc79fe86","/fr/references/offline-transactions.html",{title:"Envoi de transactions hors connexion"},["/fr/references/offline-transactions","/fr/references/offline-transactions.md"]],["v-77bdac66","/fr/references/programs.html",{title:"\xC9crire des Programmes"},["/fr/references/programs","/fr/references/programs.md"]],["v-3717171f","/fr/references/staking.html",{title:"Staking"},["/fr/references/staking","/fr/references/staking.md"]],["v-01a8e35d","/fr/references/token.html",{title:"Interaction avec les Jetons"},["/fr/references/token","/fr/references/token.md"]],["v-8e5be170","/de/core-concepts/accounts.html",{title:"Accounts"},["/de/core-concepts/accounts","/de/core-concepts/accounts.md"]],["v-f2328ef0","/de/core-concepts/pdas.html",{title:"Programmabgeleitete Adressen (PDAs)"},["/de/core-concepts/pdas","/de/core-concepts/pdas.md"]],["v-08ccc65f","/de/core-concepts/programs.html",{title:"Programme"},["/de/core-concepts/programs","/de/core-concepts/programs.md"]],["v-1256fcb9","/de/core-concepts/transactions.html",{title:"Transaktionen"},["/de/core-concepts/transactions","/de/core-concepts/transactions.md"]],["v-2485abf3","/de/getting-started/installation.html",{title:"Installation"},["/de/getting-started/installation","/de/getting-started/installation.md"]],["v-1832f5c2","/de/guides/account-maps.html",{title:"Kontozuordnungen"},["/de/guides/account-maps","/de/guides/account-maps.md"]],["v-70204b2b","/de/guides/data-migration.html",{title:"Migrieren von Programmdatenkonten"},["/de/guides/data-migration","/de/guides/data-migration.md"]],["v-16deac83","/de/guides/debugging-solana-programs.html",{title:"Debuggen von Solana-Programmen"},["/de/guides/debugging-solana-programs","/de/guides/debugging-solana-programs.md"]],["v-732f06a2","/de/guides/feature-parity-testing.html",{title:"Funktionsparit\xE4tstest"},["/de/guides/feature-parity-testing","/de/guides/feature-parity-testing.md"]],["v-22a67510","/de/guides/get-program-accounts.html",{title:"Programmkonten Abfragen"},["/de/guides/get-program-accounts","/de/guides/get-program-accounts.md"]],["v-309da254","/de/guides/retrying-transactions.html",{title:"Transaktionen Wiederholen"},["/de/guides/retrying-transactions","/de/guides/retrying-transactions.md"]],["v-5796626c","/de/guides/serialization.html",{title:"Serialisieren von Daten"},["/de/guides/serialization","/de/guides/serialization.md"]],["v-1bac4a4a","/de/integrations/",{title:"Getting Started"},["/de/integrations/index.html","/de/integrations/README.md"]],["v-3cb00837","/de/integrations/jupiter.html",{title:"Jupiter"},["/de/integrations/jupiter","/de/integrations/jupiter.md"]],["v-0f7fcb72","/de/integrations/mango.html",{title:"Mango Markets"},["/de/integrations/mango","/de/integrations/mango.md"]],["v-0e6f43f0","/de/integrations/orao-vrf.html",{title:"ORAO VRF"},["/de/integrations/orao-vrf","/de/integrations/orao-vrf.md"]],["v-d5fbe77e","/de/integrations/pyth.html",{title:"Pyth"},["/de/integrations/pyth","/de/integrations/pyth.md"]],["v-0aace259","/de/integrations/react-native.html",{title:"React Native"},["/de/integrations/react-native","/de/integrations/react-native.md"]],["v-ca072408","/de/integrations/serum.html",{title:"Serum"},["/de/integrations/serum","/de/integrations/serum.md"]],["v-8538eafe","/de/integrations/strata.html",{title:"Strata"},["/de/integrations/strata","/de/integrations/strata.md"]],["v-5404867c","/de/integrations/switchboard.html",{title:"Switchboard"},["/de/integrations/switchboard","/de/integrations/switchboard.md"]],["v-d5286e92","/de/integrations/web3auth.html",{title:"web3Auth (Torus Wallet)"},["/de/integrations/web3auth","/de/integrations/web3auth.md"]],["v-2d09cebe","/de/references/accounts.html",{title:"Accounts"},["/de/references/accounts","/de/references/accounts.md"]],["v-9ce8299a","/de/references/basic-transactions.html",{title:"Transaktionen versenden"},["/de/references/basic-transactions","/de/references/basic-transactions.md"]],["v-4ec78794","/de/references/keypairs-and-wallets.html",{title:"Keypairs and Wallets"},["/de/references/keypairs-and-wallets","/de/references/keypairs-and-wallets.md"]],["v-32949b1c","/de/references/local-development.html",{title:"Local Development"},["/de/references/local-development","/de/references/local-development.md"]],["v-01539798","/de/references/name-service.html",{title:"Name Service"},["/de/references/name-service","/de/references/name-service.md"]],["v-6bf79020","/de/references/nfts.html",{title:"NFTs"},["/de/references/nfts","/de/references/nfts.md"]],["v-0e8f1e28","/de/references/offline-transactions.html",{title:"Senden von Offline-Transaktionen"},["/de/references/offline-transactions","/de/references/offline-transactions.md"]],["v-3975cfb8","/de/references/programs.html",{title:"Programme schreiben"},["/de/references/programs","/de/references/programs.md"]],["v-7cf087d4","/de/references/staking.html",{title:"Staking"},["/de/references/staking","/de/references/staking.md"]],["v-4520fd52","/de/references/token.html",{title:"Interaktion mit Tokens"},["/de/references/token","/de/references/token.md"]],["v-da3cf63c","/id/core-concepts/accounts.html",{title:"Akun"},["/id/core-concepts/accounts","/id/core-concepts/accounts.md"]],["v-0bf50b22","/id/core-concepts/pdas.html",{title:"Program Derived Addresses (PDAs)"},["/id/core-concepts/pdas","/id/core-concepts/pdas.md"]],["v-3a47880e","/id/core-concepts/programs.html",{title:"Program"},["/id/core-concepts/programs","/id/core-concepts/programs.md"]],["v-73c3d55a","/id/core-concepts/transactions.html",{title:"Transaksi"},["/id/core-concepts/transactions","/id/core-concepts/transactions.md"]],["v-02e9060d","/id/getting-started/installation.html",{title:"Instalasi"},["/id/getting-started/installation","/id/getting-started/installation.md"]],["v-10a285c5","/id/guides/account-maps.html",{title:"Peta Akun"},["/id/guides/account-maps","/id/guides/account-maps.md"]],["v-4ddeba51","/id/guides/data-migration.html",{title:"Migrasi Akun Data Program"},["/id/guides/data-migration","/id/guides/data-migration.md"]],["v-0173699d","/id/guides/debugging-solana-programs.html",{title:"Debug Program Solana"},["/id/guides/debugging-solana-programs","/id/guides/debugging-solana-programs.md"]],["v-971f3456","/id/guides/feature-parity-testing.html",{title:"Pengujian Paritas Fitur"},["/id/guides/feature-parity-testing","/id/guides/feature-parity-testing.md"]],["v-307b2094","/id/guides/get-program-accounts.html",{title:"Mendapatkan Akun Program"},["/id/guides/get-program-accounts","/id/guides/get-program-accounts.md"]],["v-0f00fc6e","/id/guides/retrying-transactions.html",{title:"Mengulang Kembali transaksi"},["/id/guides/retrying-transactions","/id/guides/retrying-transactions.md"]],["v-5b4b12f4","/id/guides/serialization.html",{title:"Serialisasi Data"},["/id/guides/serialization","/id/guides/serialization.md"]],["v-0027c5f5","/id/integrations/",{title:"Memulai"},["/id/integrations/index.html","/id/integrations/README.md"]],["v-9117c75e","/id/integrations/jupiter.html",{title:"Jupiter"},["/id/integrations/jupiter","/id/integrations/jupiter.md"]],["v-d6e3c3e8","/id/integrations/mango.html",{title:"Mango Markets"},["/id/integrations/mango","/id/integrations/mango.md"]],["v-2df1fe67","/id/integrations/pyth.html",{title:"Pyth"},["/id/integrations/pyth","/id/integrations/pyth.md"]],["v-10996302","/id/integrations/react-native.html",{title:"React Native"},["/id/integrations/react-native","/id/integrations/react-native.md"]],["v-200ac096","/id/integrations/serum.html",{title:"Serum"},["/id/integrations/serum","/id/integrations/serum.md"]],["v-4bc0e9b2","/id/integrations/strata.html",{title:"Strata"},["/id/integrations/strata","/id/integrations/strata.md"]],["v-6a0633dc","/id/integrations/switchboard.html",{title:"Switchboard"},["/id/integrations/switchboard","/id/integrations/switchboard.md"]],["v-732a37dd","/id/integrations/web3auth.html",{title:"web3Auth (Torus Wallet)"},["/id/integrations/web3auth","/id/integrations/web3auth.md"]],["v-06371947","/id/references/accounts.html",{title:"Akun"},["/id/references/accounts","/id/references/accounts.md"]],["v-c0d8574e","/id/references/basic-transactions.html",{title:"Mengirim Transaksi"},["/id/references/basic-transactions","/id/references/basic-transactions.md"]],["v-644e73dc","/id/references/keypairs-and-wallets.html",{title:"Keypairs & Wallets"},["/id/references/keypairs-and-wallets","/id/references/keypairs-and-wallets.md"]],["v-75cde6e8","/id/references/local-development.html",{title:"Development Lokal"},["/id/references/local-development","/id/references/local-development.md"]],["v-673571da","/id/references/name-service.html",{title:"Name Service"},["/id/references/name-service","/id/references/name-service.md"]],["v-931308d4","/id/references/nfts.html",{title:"NFT"},["/id/references/nfts","/id/references/nfts.md"]],["v-cb7d5464","/id/references/offline-transactions.html",{title:"Mengirim Transaksi Offline"},["/id/references/offline-transactions","/id/references/offline-transactions.md"]],["v-5631d05e","/id/references/programs.html",{title:"Menulis Program"},["/id/references/programs","/id/references/programs.md"]],["v-01feda6e","/id/references/staking.html",{title:"Staking"},["/id/references/staking","/id/references/staking.md"]],["v-3211a328","/id/references/token.html",{title:"Interaksi dengan Token"},["/id/references/token","/id/references/token.md"]],["v-52cd49a4","/kr/core-concepts/accounts.html",{title:"Accounts"},["/kr/core-concepts/accounts","/kr/core-concepts/accounts.md"]],["v-4a4be76e","/kr/core-concepts/pdas.html",{title:"Program Derived Addresses (PDAs)"},["/kr/core-concepts/pdas","/kr/core-concepts/pdas.md"]],["v-26941245","/kr/core-concepts/programs.html",{title:"Programs"},["/kr/core-concepts/programs","/kr/core-concepts/programs.md"]],["v-2229e59f","/kr/core-concepts/transactions.html",{title:"Transactions"},["/kr/core-concepts/transactions","/kr/core-concepts/transactions.md"]],["v-e97c194e","/kr/getting-started/installation.html",{title:"Installation"},["/kr/getting-started/installation","/kr/getting-started/installation.md"]],["v-c5b19a0e","/kr/guides/account-maps.html",{title:"Account Maps"},["/kr/guides/account-maps","/kr/guides/account-maps.md"]],["v-68262af6","/kr/guides/data-migration.html",{title:"Migrating Program Data Accounts"},["/kr/guides/data-migration","/kr/guides/data-migration.md"]],["v-a4865e2e","/kr/guides/debugging-solana-programs.html",{title:"Debugging Solana Programs"},["/kr/guides/debugging-solana-programs","/kr/guides/debugging-solana-programs.md"]],["v-37352209","/kr/guides/feature-parity-testing.html",{title:"Feature Parity Testing"},["/kr/guides/feature-parity-testing","/kr/guides/feature-parity-testing.md"]],["v-0d30a8ea","/kr/guides/get-program-accounts.html",{title:"Get Program Accounts"},["/kr/guides/get-program-accounts","/kr/guides/get-program-accounts.md"]],["v-d14c2c8c","/kr/guides/retrying-transactions.html",{title:"Retrying Transactions"},["/kr/guides/retrying-transactions","/kr/guides/retrying-transactions.md"]],["v-5329205c","/kr/guides/serialization.html",{title:"Serializing Data"},["/kr/guides/serialization","/kr/guides/serialization.md"]],["v-da88730a","/kr/references/accounts.html",{title:"Accounts"},["/kr/references/accounts","/kr/references/accounts.md"]],["v-2258908d","/kr/references/basic-transactions.html",{title:"Sending Transactions"},["/kr/references/basic-transactions","/kr/references/basic-transactions.md"]],["v-48d4f310","/kr/references/keypairs-and-wallets.html",{title:"Keypairs and Wallets"},["/kr/references/keypairs-and-wallets","/kr/references/keypairs-and-wallets.md"]],["v-4d71f9d8","/kr/references/local-development.html",{title:"Local Development"},["/kr/references/local-development","/kr/references/local-development.md"]],["v-cb0f35e4","/kr/references/name-service.html",{title:"Name Service"},["/kr/references/name-service","/kr/references/name-service.md"]],["v-b3ac3a6c","/kr/references/nfts.html",{title:"NFTs"},["/kr/references/nfts","/kr/references/nfts.md"]],["v-7ec7d502","/kr/references/offline-transactions.html",{title:"Sending Offline Transactions"},["/kr/references/offline-transactions","/kr/references/offline-transactions.md"]],["v-3a9304dc","/kr/references/programs.html",{title:"Writing Programs"},["/kr/references/programs","/kr/references/programs.md"]],["v-4055b6ba","/kr/references/staking.html",{title:"Staking"},["/kr/references/staking","/kr/references/staking.md"]],["v-249ea490","/kr/references/token.html",{title:"Interacting with Tokens"},["/kr/references/token","/kr/references/token.md"]],["v-3f8c76bb","/th/core-concepts/accounts.html",{title:"Accounts"},["/th/core-concepts/accounts","/th/core-concepts/accounts.md"]],["v-310cd17b","/th/core-concepts/pdas.html",{title:"Program Derived Addresses (PDAs)"},["/th/core-concepts/pdas","/th/core-concepts/pdas.md"]],["v-e0f1a45c","/th/core-concepts/programs.html",{title:"Programs"},["/th/core-concepts/programs","/th/core-concepts/programs.md"]],["v-5dda72ac","/th/core-concepts/transactions.html",{title:"Transactions"},["/th/core-concepts/transactions","/th/core-concepts/transactions.md"]],["v-c5f91db4","/th/getting-started/installation.html",{title:"\u0E01\u0E32\u0E23\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07"},["/th/getting-started/installation","/th/getting-started/installation.md"]],["v-e2f8eae8","/th/guides/account-maps.html",{title:"Account Maps"},["/th/guides/account-maps","/th/guides/account-maps.md"]],["v-50dcad50","/th/guides/data-migration.html",{title:"Migrating Program Data Accounts"},["/th/guides/data-migration","/th/guides/data-migration.md"]],["v-387ebf94","/th/guides/debugging-solana-programs.html",{title:"Debugging Solana Programs"},["/th/guides/debugging-solana-programs","/th/guides/debugging-solana-programs.md"]],["v-5da35ddc","/th/guides/feature-parity-testing.html",{title:"Feature Parity Testing"},["/th/guides/feature-parity-testing","/th/guides/feature-parity-testing.md"]],["v-4791bd7d","/th/guides/get-program-accounts.html",{title:"Get Program Accounts"},["/th/guides/get-program-accounts","/th/guides/get-program-accounts.md"]],["v-adc930f2","/th/guides/retrying-transactions.html",{title:"Retrying Transactions"},["/th/guides/retrying-transactions","/th/guides/retrying-transactions.md"]],["v-109a0a9f","/th/guides/serialization.html",{title:"Serializing Data"},["/th/guides/serialization","/th/guides/serialization.md"]],["v-18d9f78e","/th/integrations/",{title:"\u0E40\u0E23\u0E34\u0E48\u0E21\u0E15\u0E49\u0E19"},["/th/integrations/index.html","/th/integrations/README.md"]],["v-14989f2c","/th/integrations/jupiter.html",{title:"Jupiter"},["/th/integrations/jupiter","/th/integrations/jupiter.md"]],["v-8cb43736","/th/integrations/mango.html",{title:"Mango Markets"},["/th/integrations/mango","/th/integrations/mango.md"]],["v-67e8ee24","/th/integrations/pyth.html",{title:"Pyth"},["/th/integrations/pyth","/th/integrations/pyth.md"]],["v-fe8d3bf4","/th/integrations/react-native.html",{title:"React Native"},["/th/integrations/react-native","/th/integrations/react-native.md"]],["v-452286ef","/th/integrations/serum.html",{title:"Serum"},["/th/integrations/serum","/th/integrations/serum.md"]],["v-58008fee","/th/integrations/strata.html",{title:"Strata"},["/th/integrations/strata","/th/integrations/strata.md"]],["v-d087d916","/th/integrations/switchboard.html",{title:"Switchboard"},["/th/integrations/switchboard","/th/integrations/switchboard.md"]],["v-0645b238","/th/integrations/web3auth.html",{title:"web3Auth (Torus Wallet)"},["/th/integrations/web3auth","/th/integrations/web3auth.md"]],["v-f7cfc3e4","/th/references/accounts.html",{title:"Accounts"},["/th/references/accounts","/th/references/accounts.md"]],["v-48c6cc60","/th/references/basic-transactions.html",{title:"Sending Transactions"},["/th/references/basic-transactions","/th/references/basic-transactions.md"]],["v-e6b8f3ba","/th/references/keypairs-and-wallets.html",{title:"Keypairs \u0E41\u0E25\u0E30 Wallets"},["/th/references/keypairs-and-wallets","/th/references/keypairs-and-wallets.md"]],["v-5f3377a5","/th/references/local-development.html",{title:"Local Development"},["/th/references/local-development","/th/references/local-development.md"]],["v-4fe8bb21","/th/references/name-service.html",{title:"Name Service"},["/th/references/name-service","/th/references/name-service.md"]],["v-00aefbdd","/th/references/nfts.html",{title:"NFTs"},["/th/references/nfts","/th/references/nfts.md"]],["v-7ad32fd6","/th/references/offline-transactions.html",{title:"Sending Offline Transactions"},["/th/references/offline-transactions","/th/references/offline-transactions.md"]],["v-57da55b6","/th/references/programs.html",{title:"\u0E40\u0E02\u0E35\u0E22\u0E19 Programs"},["/th/references/programs","/th/references/programs.md"]],["v-2716a0c7","/th/references/staking.html",{title:"Staking"},["/th/references/staking","/th/references/staking.md"]],["v-386291f6","/th/references/token.html",{title:"\u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19 Tokens"},["/th/references/token","/th/references/token.md"]],["v-46a93876","/tr/core-concepts/accounts.html",{title:"Accounts (Account\u2019lar)"},["/tr/core-concepts/accounts","/tr/core-concepts/accounts.md"]],["v-5aefd385","/tr/core-concepts/pdas.html",{title:"Program Derived Addresses (PDAs) (Programdan T\xFCretilmi\u015F Adresler)"},["/tr/core-concepts/pdas","/tr/core-concepts/pdas.md"]],["v-2ca61adc","/tr/core-concepts/programs.html",{title:"Programs (Programlar)"},["/tr/core-concepts/programs","/tr/core-concepts/programs.md"]],["v-4847cab6","/tr/core-concepts/transactions.html",{title:"Transactions (\u0130\u015Flemler)"},["/tr/core-concepts/transactions","/tr/core-concepts/transactions.md"]],["v-bd0a22a0","/tr/getting-started/installation.html",{title:"Installation"},["/tr/getting-started/installation","/tr/getting-started/installation.md"]],["v-bdfe6c7c","/tr/guides/account-maps.html",{title:"Account Maps (Hesap Haritalar\u0131)"},["/tr/guides/account-maps","/tr/guides/account-maps.md"]],["v-3fbbf30e","/tr/guides/data-migration.html",{title:"Migrating a Programs Data Accounts (Programlar\u0131n Data Account\u2019lar\u0131n\u0131 Ta\u015F\u0131ma)"},["/tr/guides/data-migration","/tr/guides/data-migration.md"]],["v-846b6e80","/tr/guides/debugging-solana-programs.html",{title:"Debugging Solana Programs (Solana Programlar\u0131nda Hata Ay\u0131klama)"},["/tr/guides/debugging-solana-programs","/tr/guides/debugging-solana-programs.md"]],["v-2fc8dcdc","/tr/guides/feature-parity-testing.html",{title:"Feature Parity Testing (\xD6zellik Parite Testi)"},["/tr/guides/feature-parity-testing","/tr/guides/feature-parity-testing.md"]],["v-aa61329a","/tr/guides/get-program-accounts.html",{title:"Get Program Accounts"},["/tr/guides/get-program-accounts","/tr/guides/get-program-accounts.md"]],["v-a4da35de","/tr/guides/retrying-transactions.html",{title:"Retrying Transactions (\u0130\u015Flemleri Yeniden Denemek)"},["/tr/guides/retrying-transactions","/tr/guides/retrying-transactions.md"]],["v-4dc4b229","/tr/guides/serialization.html",{title:"Serializing Data (Serile\u015Ftirme)"},["/tr/guides/serialization","/tr/guides/serialization.md"]],["v-d2d54578","/tr/references/accounts.html",{title:"Accounts (Account\u2019lar)"},["/tr/references/accounts","/tr/references/accounts.md"]],["v-5981ffd4","/tr/references/basic-transactions.html",{title:"Sending Transactions(\u0130\u015Flem G\xF6nderimi)"},["/tr/references/basic-transactions","/tr/references/basic-transactions.md"]],["v-59dda459","/tr/references/keypairs-and-wallets.html",{title:"Keypairs and Wallets"},["/tr/references/keypairs-and-wallets","/tr/references/keypairs-and-wallets.md"]],["v-63aaf52f","/tr/references/local-development.html",{title:"Local Development (Yerel Geli\u015Ftirme)"},["/tr/references/local-development","/tr/references/local-development.md"]],["v-56a76f57","/tr/references/name-service.html",{title:"Name Service (Name Servisi)"},["/tr/references/name-service","/tr/references/name-service.md"]],["v-41e84613","/tr/references/nfts.html",{title:"Non Fungible Tokens (NFTs)"},["/tr/references/nfts","/tr/references/nfts.md"]],["v-e05ef36a","/tr/references/offline-transactions.html",{title:"Offline Transaction (\xC7evrimd\u0131\u015F\u0131 i\u015Flem)"},["/tr/references/offline-transactions","/tr/references/offline-transactions.md"]],["v-32dfd74a","/tr/references/programs.html",{title:"Writing Programs (Programlar\u0131 Yazma)"},["/tr/references/programs","/tr/references/programs.md"]],["v-50f9a2d1","/tr/references/staking.html",{title:"Staking (Stake Etme)"},["/tr/references/staking","/tr/references/staking.md"]],["v-6c8298e2","/tr/references/token.html",{title:"Interacting with Tokens (Token\u2019lar ile Etkile\u015Fim)"},["/tr/references/token","/tr/references/token.md"]],["v-6a35b27a","/vi/core-concepts/accounts.html",{title:"Accounts"},["/vi/core-concepts/accounts","/vi/core-concepts/accounts.md"]],["v-8e20768c","/vi/core-concepts/pdas.html",{title:"Program Derived Addresses (PDAs)"},["/vi/core-concepts/pdas","/vi/core-concepts/pdas.md"]],["v-8b9f2cde","/vi/core-concepts/programs.html",{title:"Programs"},["/vi/core-concepts/programs","/vi/core-concepts/programs.md"]],["v-55f1b6eb","/vi/core-concepts/transactions.html",{title:"Transactions"},["/vi/core-concepts/transactions","/vi/core-concepts/transactions.md"]],["v-274abcb6","/vi/getting-started/installation.html",{title:"C\xE0i \u0111\u1EB7t"},["/vi/getting-started/installation","/vi/getting-started/installation.md"]],["v-02feff2d","/vi/guides/account-maps.html",{title:"Account Maps"},["/vi/guides/account-maps","/vi/guides/account-maps.md"]],["v-1b0279b9","/vi/guides/data-migration.html",{title:"N\xE2ng c\u1EA5p d\u1EEF li\u1EC7u cho Program Account"},["/vi/guides/data-migration","/vi/guides/data-migration.md"]],["v-5afd7935","/vi/guides/debugging-solana-programs.html",{title:"So\xE1t l\u1ED7i ch\u01B0\u01A1ng tr\xECnh tr\xEAn Solana"},["/vi/guides/debugging-solana-programs","/vi/guides/debugging-solana-programs.md"]],["v-0d9b8586","/vi/guides/feature-parity-testing.html",{title:"\u0110\u1EC1 xu\u1EA5t Ki\u1EC3m th\u1EED Parity"},["/vi/guides/feature-parity-testing","/vi/guides/feature-parity-testing.md"]],["v-5263011e","/vi/guides/get-program-accounts.html",{title:"\u0110\u1ECDc d\u1EEF li\u1EC7u Program Account"},["/vi/guides/get-program-accounts","/vi/guides/get-program-accounts.md"]],["v-0f1acff4","/vi/guides/retrying-transactions.html",{title:"Th\u1EED l\u1EA1i Transaction"},["/vi/guides/retrying-transactions","/vi/guides/retrying-transactions.md"]],["v-2b8d2a1e","/vi/guides/serialization.html",{title:"Tu\u1EA7n t\u1EF1 ho\xE1 d\u1EEF li\u1EC7u"},["/vi/guides/serialization","/vi/guides/serialization.md"]],["v-35d91d8d","/vi/integrations/",{title:"Getting Started"},["/vi/integrations/index.html","/vi/integrations/README.md"]],["v-10a6cfe9","/vi/integrations/jupiter.html",{title:"Jupiter"},["/vi/integrations/jupiter","/vi/integrations/jupiter.md"]],["v-4188d7a4","/vi/integrations/mango.html",{title:"Mango Markets"},["/vi/integrations/mango","/vi/integrations/mango.md"]],["v-5f249c62","/vi/integrations/pyth.html",{title:"Pyth"},["/vi/integrations/pyth","/vi/integrations/pyth.md"]],["v-049919e7","/vi/integrations/react-native.html",{title:"React Native"},["/vi/integrations/react-native","/vi/integrations/react-native.md"]],["v-65f50ba4","/vi/integrations/serum.html",{title:"Serum"},["/vi/integrations/serum","/vi/integrations/serum.md"]],["v-6707f6e2","/vi/integrations/strata.html",{title:"Strata"},["/vi/integrations/strata","/vi/integrations/strata.md"]],["v-85f54918","/vi/integrations/switchboard.html",{title:"Switchboard"},["/vi/integrations/switchboard","/vi/integrations/switchboard.md"]],["v-404df745","/vi/integrations/web3auth.html",{title:"web3Auth (Torus Wallet)"},["/vi/integrations/web3auth","/vi/integrations/web3auth.md"]],["v-0ed8daa2","/vi/references/accounts.html",{title:"Accounts"},["/vi/references/accounts","/vi/references/accounts.md"]],["v-3754a87e","/vi/references/basic-transactions.html",{title:"G\u1EEDi Transaction"},["/vi/references/basic-transactions","/vi/references/basic-transactions.md"]],["v-7ff81144","/vi/references/keypairs-and-wallets.html",{title:"C\u1EB7p kho\xE1 v\xE0 V\xED"},["/vi/references/keypairs-and-wallets","/vi/references/keypairs-and-wallets.md"]],["v-a2eaafb8","/vi/references/local-development.html",{title:"L\u1EADp tr\xECnh \u1EDF Local"},["/vi/references/local-development","/vi/references/local-development.md"]],["v-7a66f742","/vi/references/name-service.html",{title:"D\u1ECBch v\u1EE5 t\xEAn mi\u1EC1n"},["/vi/references/name-service","/vi/references/name-service.md"]],["v-1b97e8fe","/vi/references/nfts.html",{title:"NFTs"},["/vi/references/nfts","/vi/references/nfts.md"]],["v-942a1994","/vi/references/offline-transactions.html",{title:"G\u1EEDi Transactions Ngo\u1EA1i tuy\u1EBFn"},["/vi/references/offline-transactions","/vi/references/offline-transactions.md"]],["v-488e49c6","/vi/references/programs.html",{title:"X\xE2y d\u1EF1ng Programs"},["/vi/references/programs","/vi/references/programs.md"]],["v-a20cd7f4","/vi/references/staking.html",{title:"Staking"},["/vi/references/staking","/vi/references/staking.md"]],["v-26036e04","/vi/references/token.html",{title:"T\u01B0\u01A1ng t\xE1c v\u1EDBi Tokens"},["/vi/references/token","/vi/references/token.md"]],["v-43987c75","/zh/core-concepts/accounts.html",{title:"\u8D26\u6237"},["/zh/core-concepts/accounts","/zh/core-concepts/accounts.md"]],["v-3c24c435","/zh/core-concepts/pdas.html",{title:"\u7A0B\u5E8F\u6D3E\u751F\u8D26\u6237 (PDA)"},["/zh/core-concepts/pdas","/zh/core-concepts/pdas.md"]],["v-d8d998e8","/zh/core-concepts/programs.html",{title:"\u7A0B\u5E8F"},["/zh/core-concepts/programs","/zh/core-concepts/programs.md"]],["v-66cde934","/zh/core-concepts/transactions.html",{title:"\u4EA4\u6613"},["/zh/core-concepts/transactions","/zh/core-concepts/transactions.md"]],["v-567ec360","/zh/getting-started/installation.html",{title:"\u5B89\u88C5"},["/zh/getting-started/installation","/zh/getting-started/installation.md"]],["v-3706649a","/404.html",{title:""},["/404"]]],L_=T_.reduce((e,[t,n,r,l])=>(e.push({name:t,path:n,component:Ba,meta:r},...l.map(i=>({path:i,redirect:n}))),e),[{name:"404",path:"/:catchAll(.*)",component:Ba}]),D_=wg,R_=()=>{const e=am({history:D_(ym(Et.value.base)),routes:L_,scrollBehavior:(t,n,r)=>r||(t.hash?{el:t.hash}:{top:0})});return e.beforeResolve(async(t,n)=>{var r;(t.path!==n.path||n===st)&&([ut.value]=await Promise.all([Ft.resolvePageData(t.name),(r=bc[t.name])===null||r===void 0?void 0:r.__asyncLoader()]))}),e},I_=e=>{e.component("ClientOnly",sm),e.component("Content",Ni)},C_=(e,t)=>{const n=_e(()=>Ft.resolveRouteLocale(Et.value.locales,t.currentRoute.value.path)),r=_e(()=>Ft.resolveSiteLocaleData(Et.value,n.value)),l=_e(()=>Ft.resolvePageFrontmatter(ut.value)),i=_e(()=>Ft.resolvePageHeadTitle(ut.value,r.value)),a=_e(()=>Ft.resolvePageHead(i.value,l.value,r.value)),o=_e(()=>Ft.resolvePageLang(ut.value));return e.provide(Fi,n),e.provide(Ac,r),e.provide(Ec,l),e.provide(mm,i),e.provide(wc,a),e.provide(Pc,o),Object.defineProperties(e.config.globalProperties,{$frontmatter:{get:()=>l.value},$head:{get:()=>a.value},$headTitle:{get:()=>i.value},$lang:{get:()=>o.value},$page:{get:()=>ut.value},$routeLocale:{get:()=>n.value},$site:{get:()=>Et.value},$siteLocale:{get:()=>r.value},$withBase:{get:()=>Pm}}),{pageData:ut,pageFrontmatter:l,pageHead:a,pageHeadTitle:i,pageLang:o,routeLocale:n,siteData:Et,siteLocaleData:r}},x_=()=>{const e=Vi(),t=gm(),n=Sc(),r=Ee([]),l=()=>{t.value.forEach(a=>{const o=V_(a);o&&r.value.push(o)})},i=()=>{document.documentElement.lang=n.value,r.value.forEach(a=>{a.parentNode===document.head&&document.head.removeChild(a)}),r.value.splice(0,r.value.length),t.value.forEach(a=>{const o=F_(a);o!==null&&(document.head.appendChild(o),r.value.push(o))})};Ut(vm,i),tt(()=>{l(),i(),et(()=>e.path,()=>i())})},V_=([e,t,n=""])=>{const r=Object.entries(t).map(([o,s])=>be(s)?`[${o}="${s}"]`:s===!0?`[${o}]`:"").join(""),l=`head > ${e}${r}`;return Array.from(document.querySelectorAll(l)).find(o=>o.innerText===n)||null},F_=([e,t,n])=>{if(!be(e))return null;const r=document.createElement(e);return Tc(t)&&Object.entries(t).forEach(([l,i])=>{be(i)?r.setAttribute(l,i):i===!0&&r.setAttribute(l,"")}),be(n)&&r.appendChild(document.createTextNode(n)),r},j_=rg,N_=async()=>{const e=j_({name:"VuepressApp",setup(){x_();for(const n of A_)n();return()=>[ee(_c),...p_.map(n=>ee(n))]}}),t=R_();I_(e),C_(e,t);for(const n of h_)await n({app:e,router:t,siteData:Et});return e.use(t),{app:e,router:t}};N_().then(({app:e,router:t})=>{t.isReady().then(()=>{e.mount("#app")})});export{Oc as A,W_ as B,J_ as C,ee as D,Pm as E,Me as F,sm as G,wt as H,Ee as I,et as J,z_ as K,q_ as L,Em as M,ym as N,rr as O,be as P,kp as Q,tt as R,Yr as S,Ii as T,lr as U,Y_ as V,Tc as W,K_ as X,Oi as Y,Ep as Z,a_ as _,Fr as a,Se as b,Ti as c,N_ as createVueApp,Li as d,H_ as e,ze as f,jc as g,Bt as h,hm as i,_e as j,te as k,U_ as l,B_ as m,Vi as n,nr as o,kd as p,ec as q,gh as r,bh as s,xu as t,ji as u,jr as v,Rd as w,km as x,$_ as y,G_ as z}; diff --git a/docs/.vuepress/dist/assets/basic-transactions.html.1048ebf0.js b/docs/.vuepress/dist/assets/basic-transactions.html.028095e3.js similarity index 99% rename from docs/.vuepress/dist/assets/basic-transactions.html.1048ebf0.js rename to docs/.vuepress/dist/assets/basic-transactions.html.028095e3.js index e3d9abbe9..886ca3e9a 100644 --- a/docs/.vuepress/dist/assets/basic-transactions.html.1048ebf0.js +++ b/docs/.vuepress/dist/assets/basic-transactions.html.028095e3.js @@ -1,4 +1,4 @@ -import{_ as i,r as c,o as k,c as b,a as n,b as t,w as a,F as m,d as s,e as d}from"./app.cfdf84e7.js";const y={},f=n("h1",{id:"sending-transactions",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#sending-transactions","aria-hidden":"true"},"#"),s(" Sending Transactions")],-1),g=n("h2",{id:"how-to-send-sol",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-send-sol","aria-hidden":"true"},"#"),s(" How to send SOL")],-1),w=s("SOL\uC744 \uBCF4\uB0B4\uAE30 \uC704\uD574\uC11C\uB294 "),_={href:"https://docs.solana.com/developing/runtime-facilities/programs#system-program",target:"_blank",rel:"noopener noreferrer"},h=s("SystemProgram"),T=s(" \uACFC \uC18C\uD1B5\uD560 \uD544\uC694\uAC00 \uC788\uC2B5\uB2C8\uB2E4."),S=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` +import{_ as i,r as c,o as k,c as b,a as n,b as t,w as a,F as m,d as s,e as d}from"./app.2fbb9e96.js";const y={},f=n("h1",{id:"sending-transactions",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#sending-transactions","aria-hidden":"true"},"#"),s(" Sending Transactions")],-1),g=n("h2",{id:"how-to-send-sol",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-send-sol","aria-hidden":"true"},"#"),s(" How to send SOL")],-1),w=s("SOL\uC744 \uBCF4\uB0B4\uAE30 \uC704\uD574\uC11C\uB294 "),_={href:"https://docs.solana.com/developing/runtime-facilities/programs#system-program",target:"_blank",rel:"noopener noreferrer"},h=s("SystemProgram"),T=s(" \uACFC \uC18C\uD1B5\uD560 \uD544\uC694\uAC00 \uC788\uC2B5\uB2C8\uB2E4."),S=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` Connection`),n("span",{class:"token punctuation"},","),s(` Keypair`),n("span",{class:"token punctuation"},","),s(` SystemProgram`),n("span",{class:"token punctuation"},","),s(` @@ -47,31 +47,31 @@ import{_ as i,r as c,o as k,c as b,a as n,b as t,w as a,F as m,d as s,e as d}fro `),n("span",{class:"token keyword"},"await"),s(),n("span",{class:"token function"},"sendAndConfirmTransaction"),n("span",{class:"token punctuation"},"("),s("connection"),n("span",{class:"token punctuation"},","),s(" transferTransaction"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token punctuation"},"["),s("fromKeypair"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br")])],-1),K=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("api "),n("span",{class:"token keyword"},"import"),s(` Client -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair `),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("transaction "),n("span",{class:"token keyword"},"import"),s(` Transaction -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("system_program "),n("span",{class:"token keyword"},"import"),s(" TransferParams"),n("span",{class:"token punctuation"},","),s(` transfer +`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("system_program "),n("span",{class:"token keyword"},"import"),s(" TransferParams"),n("span",{class:"token punctuation"},","),s(` transfer LAMPORT_PER_SOL `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token number"},"1000000000"),s(` client`),n("span",{class:"token punctuation"},":"),s(" Client "),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),s(` -sender `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` -receiver `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` +sender `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` +receiver `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` -airdrop `),n("span",{class:"token operator"},"="),s(" client"),n("span",{class:"token punctuation"},"."),s("request_airdrop"),n("span",{class:"token punctuation"},"("),s("sender"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"1"),s(),n("span",{class:"token operator"},"*"),s(" LAMPORT_PER_SOL"),n("span",{class:"token punctuation"},")"),s(` -airdrop_signature `),n("span",{class:"token operator"},"="),s(" airdrop"),n("span",{class:"token punctuation"},"["),n("span",{class:"token string"},'"result"'),n("span",{class:"token punctuation"},"]"),s(` +airdrop `),n("span",{class:"token operator"},"="),s(" client"),n("span",{class:"token punctuation"},"."),s("request_airdrop"),n("span",{class:"token punctuation"},"("),s("sender"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"1"),s(),n("span",{class:"token operator"},"*"),s(" LAMPORT_PER_SOL"),n("span",{class:"token punctuation"},")"),s(` +airdrop_signature `),n("span",{class:"token operator"},"="),s(" airdrop"),n("span",{class:"token punctuation"},"."),s(`value client`),n("span",{class:"token punctuation"},"."),s("confirm_transaction"),n("span",{class:"token punctuation"},"("),s("airdrop_signature"),n("span",{class:"token punctuation"},")"),s(` transaction `),n("span",{class:"token operator"},"="),s(" Transaction"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),s("add"),n("span",{class:"token punctuation"},"("),s("transfer"),n("span",{class:"token punctuation"},"("),s("TransferParams"),n("span",{class:"token punctuation"},"("),s(` - from_pubkey`),n("span",{class:"token operator"},"="),s("sender"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(` - to_pubkey`),n("span",{class:"token operator"},"="),s("receiver"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(` + from_pubkey`),n("span",{class:"token operator"},"="),s("sender"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(` + to_pubkey`),n("span",{class:"token operator"},"="),s("receiver"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(` lamports`),n("span",{class:"token operator"},"="),n("span",{class:"token number"},"1_000_000"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` client`),n("span",{class:"token punctuation"},"."),s("send_transaction"),n("span",{class:"token punctuation"},"("),s("transaction"),n("span",{class:"token punctuation"},","),s(" sender"),n("span",{class:"token punctuation"},")"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br")])],-1),P=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("transaction "),n("span",{class:"token operator"},"="),s(" Transaction"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),s("add"),n("span",{class:"token punctuation"},"("),s("transfer"),n("span",{class:"token punctuation"},"("),s("TransferParams"),n("span",{class:"token punctuation"},"("),s(` - from_pubkey`),n("span",{class:"token operator"},"="),s("sender"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(` - to_pubkey`),n("span",{class:"token operator"},"="),s("receiver"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(` + from_pubkey`),n("span",{class:"token operator"},"="),s("sender"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(` + to_pubkey`),n("span",{class:"token operator"},"="),s("receiver"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(` lamports`),n("span",{class:"token operator"},"="),n("span",{class:"token number"},"1_000_000"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` diff --git a/docs/.vuepress/dist/assets/basic-transactions.html.6ddce83b.js b/docs/.vuepress/dist/assets/basic-transactions.html.31083260.js similarity index 97% rename from docs/.vuepress/dist/assets/basic-transactions.html.6ddce83b.js rename to docs/.vuepress/dist/assets/basic-transactions.html.31083260.js index a8ee1e25e..aad735781 100644 --- a/docs/.vuepress/dist/assets/basic-transactions.html.6ddce83b.js +++ b/docs/.vuepress/dist/assets/basic-transactions.html.31083260.js @@ -1,4 +1,4 @@ -import{_ as i,r as c,o as k,c as b,a as n,b as t,w as a,F as m,d as s,e as d}from"./app.cfdf84e7.js";const y={},f=n("h1",{id:"envoyer-des-transactions",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#envoyer-des-transactions","aria-hidden":"true"},"#"),s(" Envoyer des Transactions")],-1),g=n("h2",{id:"comment-envoyer-des-sol",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#comment-envoyer-des-sol","aria-hidden":"true"},"#"),s(" Comment envoyer des SOL")],-1),w=s("Pour envoyer des SOL, vous devez interagir avec le "),_={href:"https://docs.solana.com/developing/runtime-facilities/programs#system-program",target:"_blank",rel:"noopener noreferrer"},h=s("SystemProgram"),T=s("."),v=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` +import{_ as i,r as c,o as k,c as b,a as n,b as t,w as a,F as m,d as s,e as d}from"./app.2fbb9e96.js";const y={},f=n("h1",{id:"envoyer-des-transactions",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#envoyer-des-transactions","aria-hidden":"true"},"#"),s(" Envoyer des Transactions")],-1),g=n("h2",{id:"comment-envoyer-des-sol",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#comment-envoyer-des-sol","aria-hidden":"true"},"#"),s(" Comment envoyer des SOL")],-1),w=s("Pour envoyer des SOL, vous devez interagir avec le "),_={href:"https://docs.solana.com/developing/runtime-facilities/programs#system-program",target:"_blank",rel:"noopener noreferrer"},h=s("SystemProgram"),T=s("."),v=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` Connection`),n("span",{class:"token punctuation"},","),s(` Keypair`),n("span",{class:"token punctuation"},","),s(` SystemProgram`),n("span",{class:"token punctuation"},","),s(` @@ -47,31 +47,31 @@ import{_ as i,r as c,o as k,c as b,a as n,b as t,w as a,F as m,d as s,e as d}fro `),n("span",{class:"token keyword"},"await"),s(),n("span",{class:"token function"},"sendAndConfirmTransaction"),n("span",{class:"token punctuation"},"("),s("connection"),n("span",{class:"token punctuation"},","),s(" transferTransaction"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token punctuation"},"["),s("fromKeypair"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br")])],-1),C=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("api "),n("span",{class:"token keyword"},"import"),s(` Client -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair `),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("transaction "),n("span",{class:"token keyword"},"import"),s(` Transaction -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("system_program "),n("span",{class:"token keyword"},"import"),s(" TransferParams"),n("span",{class:"token punctuation"},","),s(` transfer +`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("system_program "),n("span",{class:"token keyword"},"import"),s(" TransferParams"),n("span",{class:"token punctuation"},","),s(` transfer LAMPORT_PER_SOL `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token number"},"1000000000"),s(` client`),n("span",{class:"token punctuation"},":"),s(" Client "),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),s(` -sender `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` -receiver `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` +sender `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` +receiver `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` -airdrop `),n("span",{class:"token operator"},"="),s(" client"),n("span",{class:"token punctuation"},"."),s("request_airdrop"),n("span",{class:"token punctuation"},"("),s("sender"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"1"),s(),n("span",{class:"token operator"},"*"),s(" LAMPORT_PER_SOL"),n("span",{class:"token punctuation"},")"),s(` -airdrop_signature `),n("span",{class:"token operator"},"="),s(" airdrop"),n("span",{class:"token punctuation"},"["),n("span",{class:"token string"},'"result"'),n("span",{class:"token punctuation"},"]"),s(` +airdrop `),n("span",{class:"token operator"},"="),s(" client"),n("span",{class:"token punctuation"},"."),s("request_airdrop"),n("span",{class:"token punctuation"},"("),s("sender"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"1"),s(),n("span",{class:"token operator"},"*"),s(" LAMPORT_PER_SOL"),n("span",{class:"token punctuation"},")"),s(` +airdrop_signature `),n("span",{class:"token operator"},"="),s(" airdrop"),n("span",{class:"token punctuation"},"."),s(`value client`),n("span",{class:"token punctuation"},"."),s("confirm_transaction"),n("span",{class:"token punctuation"},"("),s("airdrop_signature"),n("span",{class:"token punctuation"},")"),s(` transaction `),n("span",{class:"token operator"},"="),s(" Transaction"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),s("add"),n("span",{class:"token punctuation"},"("),s("transfer"),n("span",{class:"token punctuation"},"("),s("TransferParams"),n("span",{class:"token punctuation"},"("),s(` - from_pubkey`),n("span",{class:"token operator"},"="),s("sender"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(` - to_pubkey`),n("span",{class:"token operator"},"="),s("receiver"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(` + from_pubkey`),n("span",{class:"token operator"},"="),s("sender"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(` + to_pubkey`),n("span",{class:"token operator"},"="),s("receiver"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(` lamports`),n("span",{class:"token operator"},"="),n("span",{class:"token number"},"1_000_000"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` client`),n("span",{class:"token punctuation"},"."),s("send_transaction"),n("span",{class:"token punctuation"},"("),s("transaction"),n("span",{class:"token punctuation"},","),s(" sender"),n("span",{class:"token punctuation"},")"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br")])],-1),S=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("transaction "),n("span",{class:"token operator"},"="),s(" Transaction"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),s("add"),n("span",{class:"token punctuation"},"("),s("transfer"),n("span",{class:"token punctuation"},"("),s("TransferParams"),n("span",{class:"token punctuation"},"("),s(` - from_pubkey`),n("span",{class:"token operator"},"="),s("sender"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(` - to_pubkey`),n("span",{class:"token operator"},"="),s("receiver"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(` + from_pubkey`),n("span",{class:"token operator"},"="),s("sender"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(` + to_pubkey`),n("span",{class:"token operator"},"="),s("receiver"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(` lamports`),n("span",{class:"token operator"},"="),n("span",{class:"token number"},"1_000_000"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` @@ -559,7 +559,7 @@ Signature: 5a3qbvoJQnTAxGPHCugibZTbSu7xuTgkxvF4EJupRjRXGgZZrnWFmKzfEzcqKF2ogCaF4 `),n("span",{class:"token keyword"},"await"),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"confirmTransaction"),n("span",{class:"token punctuation"},"("),s("signature"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token string"},'"processed"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br")])],-1),dn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana transfer --from "),n("span",{class:"token operator"},"<"),s("KEYPAIR"),n("span",{class:"token operator"},">"),s(),n("span",{class:"token operator"},"<"),s("RECIPIENT_ACCOUNT_ADDRESS"),n("span",{class:"token operator"},">"),s(),n("span",{class:"token number"},"0.5"),s(" --allow-unfunded-recipient --url https://api.devnet.solana.com --fee-payer "),n("span",{class:"token operator"},"<"),s("KEYPAIR"),n("span",{class:"token operator"},">"),s(" --with-memo "),n("span",{class:"token operator"},"<"),s("MEMO"),n("span",{class:"token operator"},">"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),yn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana transfer --from "),n("span",{class:"token operator"},"<"),s("KEYPAIR"),n("span",{class:"token operator"},">"),s(),n("span",{class:"token operator"},"<"),s("RECIPIENT_ACCOUNT_ADDRESS"),n("span",{class:"token operator"},">"),s(),n("span",{class:"token number"},"0.5"),s(" --allow-unfunded-recipient --url https://api.devnet.solana.com --fee-payer "),n("span",{class:"token operator"},"<"),s("KEYPAIR"),n("span",{class:"token operator"},">"),s(" --with-memo "),n("span",{class:"token operator"},"<"),s("MEMO"),n("span",{class:"token operator"},">"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),fn=n("h2",{id:"comment-changer-le-budget-de-calcul-les-frais-amp-la-priorisation-d-une-transaction",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#comment-changer-le-budget-de-calcul-les-frais-amp-la-priorisation-d-une-transaction","aria-hidden":"true"},"#"),s(" Comment changer le budget de calcul, les frais, & ; la priorisation d'une transaction")],-1),gn=n("p",null,"La priorisation d'une transaction (TX) est obtenue en payant des Frais de Priorisation en plus des Frais de Base. Par d\xE9faut, le budget de calcul est le produit de 200 000 unit\xE9s de calcul (UC) * le nombre d'instructions, avec un maximum de 1,4 million d'UC. Les Frais de Base sont de 5 000 Lamports. Un microLamport est 0.000001 Lamports.",-1),wn=n("p",null,"Le budget total de calcul ou les Frais de Priorisation pour une seule TX peuvent \xEAtre modifi\xE9s en ajoutant des instructions du programme ComputeBudgetProgram.",-1),_n=n("p",null,[n("code",null,"ComputeBudgetProgram.setComputeUnitPrice({ microLamports: number })"),s(" ajoutera des Frais de Priorisation en plus des Frais de Base (5 000 Lamports). La valeur fournie en microLamports sera multipli\xE9e par le budget de l'UC pour d\xE9terminer les Frais de Priorisation en Lamports. Par exemple, si votre budget de l'UC est de 1M d'UC, et que vous ajoutez 1 microLamport/UC, les Frais de Priorisation seront de 1 Lamport (1M * 0,000001). Les frais totaux seront alors de 5001 Lamports.")],-1),hn=n("p",null,[s("Utilisez "),n("code",null,"ComputeBudgetProgram.setComputeUnitLimit({ units: number })"),s(" pour d\xE9finir le nouveau budget de calcul. La valeur fournie remplacera la valeur par d\xE9faut. Les transactions doivent demander la quantit\xE9 minimale d'UC n\xE9cessaire \xE0 l'ex\xE9cution afin de maximiser le d\xE9bit ou de minimiser les frais.")],-1),Tn=n("div",{class:"language-tsx ext-tsx line-numbers-mode"},[n("pre",{class:"language-tsx"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(),n("span",{class:"token constant"},"BN"),s(),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@project-serum/anchor"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),fn=n("h2",{id:"comment-changer-le-budget-de-calcul-les-frais-la-priorisation-d-une-transaction",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#comment-changer-le-budget-de-calcul-les-frais-la-priorisation-d-une-transaction","aria-hidden":"true"},"#"),s(" Comment changer le budget de calcul, les frais, & la priorisation d'une transaction")],-1),gn=n("p",null,"La priorisation d'une transaction (TX) est obtenue en payant des Frais de Priorisation en plus des Frais de Base. Par d\xE9faut, le budget de calcul est le produit de 200 000 unit\xE9s de calcul (UC) * le nombre d'instructions, avec un maximum de 1,4 million d'UC. Les Frais de Base sont de 5 000 Lamports. Un microLamport est 0.000001 Lamports.",-1),wn=n("p",null,"Le budget total de calcul ou les Frais de Priorisation pour une seule TX peuvent \xEAtre modifi\xE9s en ajoutant des instructions du programme ComputeBudgetProgram.",-1),_n=n("p",null,[n("code",null,"ComputeBudgetProgram.setComputeUnitPrice({ microLamports: number })"),s(" ajoutera des Frais de Priorisation en plus des Frais de Base (5 000 Lamports). La valeur fournie en microLamports sera multipli\xE9e par le budget de l'UC pour d\xE9terminer les Frais de Priorisation en Lamports. Par exemple, si votre budget de l'UC est de 1M d'UC, et que vous ajoutez 1 microLamport/UC, les Frais de Priorisation seront de 1 Lamport (1M * 0,000001). Les frais totaux seront alors de 5001 Lamports.")],-1),hn=n("p",null,[s("Utilisez "),n("code",null,"ComputeBudgetProgram.setComputeUnitLimit({ units: number })"),s(" pour d\xE9finir le nouveau budget de calcul. La valeur fournie remplacera la valeur par d\xE9faut. Les transactions doivent demander la quantit\xE9 minimale d'UC n\xE9cessaire \xE0 l'ex\xE9cution afin de maximiser le d\xE9bit ou de minimiser les frais.")],-1),Tn=n("div",{class:"language-tsx ext-tsx line-numbers-mode"},[n("pre",{class:"language-tsx"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(),n("span",{class:"token constant"},"BN"),s(),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@project-serum/anchor"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` Keypair`),n("span",{class:"token punctuation"},","),s(` Connection`),n("span",{class:"token punctuation"},","),s(` diff --git a/docs/.vuepress/dist/assets/basic-transactions.html.214020d5.js b/docs/.vuepress/dist/assets/basic-transactions.html.3644e567.js similarity index 98% rename from docs/.vuepress/dist/assets/basic-transactions.html.214020d5.js rename to docs/.vuepress/dist/assets/basic-transactions.html.3644e567.js index 8a04abce8..c6e5dbb5d 100644 --- a/docs/.vuepress/dist/assets/basic-transactions.html.214020d5.js +++ b/docs/.vuepress/dist/assets/basic-transactions.html.3644e567.js @@ -1,4 +1,4 @@ -import{_ as i,r as c,o as k,c as b,a as n,b as t,w as a,F as m,d as s,e as d}from"./app.cfdf84e7.js";const y={},f=n("h1",{id:"enviando-transacciones",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#enviando-transacciones","aria-hidden":"true"},"#"),s(" Enviando transacciones")],-1),g=n("h2",{id:"como-enviar-sol",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#como-enviar-sol","aria-hidden":"true"},"#"),s(" C\xF3mo enviar SOL")],-1),w=s("Para enviar SOL, necesitar\xE1s interactuar con el programa "),_={href:"https://docs.solana.com/developing/runtime-facilities/programs#system-program",target:"_blank",rel:"noopener noreferrer"},h=s("SystemProgram"),T=s("."),S=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` +import{_ as i,r as c,o as k,c as b,a as n,b as t,w as a,F as m,d as s,e as d}from"./app.2fbb9e96.js";const y={},f=n("h1",{id:"enviando-transacciones",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#enviando-transacciones","aria-hidden":"true"},"#"),s(" Enviando transacciones")],-1),g=n("h2",{id:"como-enviar-sol",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#como-enviar-sol","aria-hidden":"true"},"#"),s(" C\xF3mo enviar SOL")],-1),w=s("Para enviar SOL, necesitar\xE1s interactuar con el programa "),_={href:"https://docs.solana.com/developing/runtime-facilities/programs#system-program",target:"_blank",rel:"noopener noreferrer"},h=s("SystemProgram"),T=s("."),v=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` Connection`),n("span",{class:"token punctuation"},","),s(` Keypair`),n("span",{class:"token punctuation"},","),s(` SystemProgram`),n("span",{class:"token punctuation"},","),s(` @@ -37,7 +37,7 @@ import{_ as i,r as c,o as k,c as b,a as n,b as t,w as a,F as m,d as s,e as d}fro fromKeypair`),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br")])],-1),v=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" transferTransaction "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Transaction"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"add"),n("span",{class:"token punctuation"},"("),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br")])],-1),S=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" transferTransaction "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Transaction"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"add"),n("span",{class:"token punctuation"},"("),s(` SystemProgram`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"transfer"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"{"),s(` fromPubkey`),n("span",{class:"token operator"},":"),s(" fromKeypair"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},","),s(` toPubkey`),n("span",{class:"token operator"},":"),s(" toKeypair"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},","),s(` @@ -47,31 +47,31 @@ import{_ as i,r as c,o as k,c as b,a as n,b as t,w as a,F as m,d as s,e as d}fro `),n("span",{class:"token keyword"},"await"),s(),n("span",{class:"token function"},"sendAndConfirmTransaction"),n("span",{class:"token punctuation"},"("),s("connection"),n("span",{class:"token punctuation"},","),s(" transferTransaction"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token punctuation"},"["),s("fromKeypair"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br")])],-1),K=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("api "),n("span",{class:"token keyword"},"import"),s(` Client -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair `),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("transaction "),n("span",{class:"token keyword"},"import"),s(` Transaction -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("system_program "),n("span",{class:"token keyword"},"import"),s(" TransferParams"),n("span",{class:"token punctuation"},","),s(` transfer +`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("system_program "),n("span",{class:"token keyword"},"import"),s(" TransferParams"),n("span",{class:"token punctuation"},","),s(` transfer LAMPORT_PER_SOL `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token number"},"1000000000"),s(` client`),n("span",{class:"token punctuation"},":"),s(" Client "),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),s(` -sender `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` -receiver `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` +sender `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` +receiver `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` -airdrop `),n("span",{class:"token operator"},"="),s(" client"),n("span",{class:"token punctuation"},"."),s("request_airdrop"),n("span",{class:"token punctuation"},"("),s("sender"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"1"),s(),n("span",{class:"token operator"},"*"),s(" LAMPORT_PER_SOL"),n("span",{class:"token punctuation"},")"),s(` -airdrop_signature `),n("span",{class:"token operator"},"="),s(" airdrop"),n("span",{class:"token punctuation"},"["),n("span",{class:"token string"},'"result"'),n("span",{class:"token punctuation"},"]"),s(` +airdrop `),n("span",{class:"token operator"},"="),s(" client"),n("span",{class:"token punctuation"},"."),s("request_airdrop"),n("span",{class:"token punctuation"},"("),s("sender"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"1"),s(),n("span",{class:"token operator"},"*"),s(" LAMPORT_PER_SOL"),n("span",{class:"token punctuation"},")"),s(` +airdrop_signature `),n("span",{class:"token operator"},"="),s(" airdrop"),n("span",{class:"token punctuation"},"."),s(`value client`),n("span",{class:"token punctuation"},"."),s("confirm_transaction"),n("span",{class:"token punctuation"},"("),s("airdrop_signature"),n("span",{class:"token punctuation"},")"),s(` transaction `),n("span",{class:"token operator"},"="),s(" Transaction"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),s("add"),n("span",{class:"token punctuation"},"("),s("transfer"),n("span",{class:"token punctuation"},"("),s("TransferParams"),n("span",{class:"token punctuation"},"("),s(` - from_pubkey`),n("span",{class:"token operator"},"="),s("sender"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(` - to_pubkey`),n("span",{class:"token operator"},"="),s("receiver"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(` + from_pubkey`),n("span",{class:"token operator"},"="),s("sender"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(` + to_pubkey`),n("span",{class:"token operator"},"="),s("receiver"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(` lamports`),n("span",{class:"token operator"},"="),n("span",{class:"token number"},"1_000_000"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` client`),n("span",{class:"token punctuation"},"."),s("send_transaction"),n("span",{class:"token punctuation"},"("),s("transaction"),n("span",{class:"token punctuation"},","),s(" sender"),n("span",{class:"token punctuation"},")"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br")])],-1),P=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("transaction "),n("span",{class:"token operator"},"="),s(" Transaction"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),s("add"),n("span",{class:"token punctuation"},"("),s("transfer"),n("span",{class:"token punctuation"},"("),s("TransferParams"),n("span",{class:"token punctuation"},"("),s(` - from_pubkey`),n("span",{class:"token operator"},"="),s("sender"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(` - to_pubkey`),n("span",{class:"token operator"},"="),s("receiver"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(` + from_pubkey`),n("span",{class:"token operator"},"="),s("sender"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(` + to_pubkey`),n("span",{class:"token operator"},"="),s("receiver"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(` lamports`),n("span",{class:"token operator"},"="),n("span",{class:"token number"},"1_000_000"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` @@ -682,7 +682,7 @@ Signature: 5a3qbvoJQnTAxGPHCugibZTbSu7xuTgkxvF4EJupRjRXGgZZrnWFmKzfEzcqKF2ogCaF4 `),n("span",{class:"token macro property"},"println!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"{:?}"'),n("span",{class:"token punctuation"},","),s(" txn"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token class-name"},"Ok"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br")])],-1),Sn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" txn "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"submit_transaction"),n("span",{class:"token punctuation"},"("),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br")])],-1),vn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" txn "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"submit_transaction"),n("span",{class:"token punctuation"},"("),s(` `),n("span",{class:"token operator"},"&"),s("connection"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token operator"},"&"),s("wallet_signer"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token comment"},"// Array of instructions: 0: Set Compute Unit Limt, 1: Set Prioritization Fee, "),s(` @@ -692,9 +692,9 @@ Signature: 5a3qbvoJQnTAxGPHCugibZTbSu7xuTgkxvF4EJupRjRXGgZZrnWFmKzfEzcqKF2ogCaF4 `),n("span",{class:"token class-name"},"Instruction"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new_with_borsh"),n("span",{class:"token punctuation"},"("),n("span",{class:"token constant"},"PROG_KEY"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token operator"},"&"),n("span",{class:"token number"},"0u8"),n("span",{class:"token punctuation"},","),s(" accounts"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_vec"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token class-name"},"Instruction"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new_with_borsh"),n("span",{class:"token punctuation"},"("),n("span",{class:"token constant"},"PROG_KEY"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token operator"},"&"),n("span",{class:"token number"},"0u8"),n("span",{class:"token punctuation"},","),s(" accounts"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_vec"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_vec"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),vn=n("p",null,"Program Logs Example:",-1),Kn=n("div",{class:"language-txt ext-txt line-numbers-mode"},[n("pre",{class:"language-txt"},[n("code",null,`[ 1] Program ComputeBudget111111111111111111111111111111 invoke [1] +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),Sn=n("p",null,"Program Logs Example:",-1),Kn=n("div",{class:"language-txt ext-txt line-numbers-mode"},[n("pre",{class:"language-txt"},[n("code",null,`[ 1] Program ComputeBudget111111111111111111111111111111 invoke [1] [ 2] Program ComputeBudget111111111111111111111111111111 success [ 3] [ 4] Program ComputeBudget111111111111111111111111111111 invoke [1] [ 5] Program ComputeBudget111111111111111111111111111111 success -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br")])],-1);function Pn(Cn,xn){const p=c("ExternalLinkIcon"),e=c("SolanaCodeGroupItem"),o=c("SolanaCodeGroup"),l=c("RouterLink"),u=c("CodeGroupItem"),r=c("CodeGroup");return k(),b(m,null,[f,g,n("p",null,[w,n("a",_,[h,t(p)]),T]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[S]),preview:a(()=>[v]),_:1}),t(e,{title:"Python"},{default:a(()=>[K]),preview:a(()=>[P]),_:1}),t(e,{title:"Wallet-Adapter"},{default:a(()=>[C]),preview:a(()=>[x]),_:1}),t(e,{title:"Rust",active:""},{default:a(()=>[A]),preview:a(()=>[R]),_:1}),t(e,{title:"CLI"},{default:a(()=>[E]),preview:a(()=>[L]),_:1})]),_:1}),O,n("p",null,[I,n("a",M,[q,t(p)]),B]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[W]),preview:a(()=>[F]),_:1}),t(e,{title:"Wallet-Adapter"},{default:a(()=>[N]),preview:a(()=>[G]),_:1}),t(e,{title:"CLI"},{default:a(()=>[U]),preview:a(()=>[D]),_:1})]),_:1}),Y,n("p",null,[j,t(l,{to:"/es/references/accounts.html#calculating-rent-exemption"},{default:a(()=>[X]),_:1})]),V,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[z]),preview:a(()=>[Z]),_:1})]),_:1}),H,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Q]),preview:a(()=>[J]),_:1})]),_:1}),$,n("p",null,[nn,n("a",sn,[an,t(p)]),tn,en,on,cn,pn,ln,un]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[rn]),preview:a(()=>[kn]),_:1}),t(e,{title:"Wallet-Adapter"},{default:a(()=>[bn]),preview:a(()=>[mn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[dn]),preview:a(()=>[yn]),_:1})]),_:1}),fn,gn,wn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[_n]),preview:a(()=>[hn]),_:1}),t(e,{title:"Rust"},{default:a(()=>[Tn]),preview:a(()=>[Sn]),_:1})]),_:1}),vn,t(r,null,{default:a(()=>[t(u,{title:"Log Output"},{default:a(()=>[Kn]),_:1})]),_:1})],64)}var Rn=i(y,[["render",Pn]]);export{Rn as default}; +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br")])],-1);function Pn(Cn,xn){const p=c("ExternalLinkIcon"),e=c("SolanaCodeGroupItem"),o=c("SolanaCodeGroup"),l=c("RouterLink"),u=c("CodeGroupItem"),r=c("CodeGroup");return k(),b(m,null,[f,g,n("p",null,[w,n("a",_,[h,t(p)]),T]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[v]),preview:a(()=>[S]),_:1}),t(e,{title:"Python"},{default:a(()=>[K]),preview:a(()=>[P]),_:1}),t(e,{title:"Wallet-Adapter"},{default:a(()=>[C]),preview:a(()=>[x]),_:1}),t(e,{title:"Rust",active:""},{default:a(()=>[A]),preview:a(()=>[R]),_:1}),t(e,{title:"CLI"},{default:a(()=>[E]),preview:a(()=>[L]),_:1})]),_:1}),O,n("p",null,[I,n("a",M,[q,t(p)]),B]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[W]),preview:a(()=>[F]),_:1}),t(e,{title:"Wallet-Adapter"},{default:a(()=>[N]),preview:a(()=>[G]),_:1}),t(e,{title:"CLI"},{default:a(()=>[U]),preview:a(()=>[D]),_:1})]),_:1}),Y,n("p",null,[j,t(l,{to:"/es/references/accounts.html#calculating-rent-exemption"},{default:a(()=>[X]),_:1})]),V,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[z]),preview:a(()=>[Z]),_:1})]),_:1}),H,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Q]),preview:a(()=>[J]),_:1})]),_:1}),$,n("p",null,[nn,n("a",sn,[an,t(p)]),tn,en,on,cn,pn,ln,un]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[rn]),preview:a(()=>[kn]),_:1}),t(e,{title:"Wallet-Adapter"},{default:a(()=>[bn]),preview:a(()=>[mn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[dn]),preview:a(()=>[yn]),_:1})]),_:1}),fn,gn,wn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[_n]),preview:a(()=>[hn]),_:1}),t(e,{title:"Rust"},{default:a(()=>[Tn]),preview:a(()=>[vn]),_:1})]),_:1}),Sn,t(r,null,{default:a(()=>[t(u,{title:"Log Output"},{default:a(()=>[Kn]),_:1})]),_:1})],64)}var Rn=i(y,[["render",Pn]]);export{Rn as default}; diff --git a/docs/.vuepress/dist/assets/basic-transactions.html.d8a43b8d.js b/docs/.vuepress/dist/assets/basic-transactions.html.877bd5e7.js similarity index 99% rename from docs/.vuepress/dist/assets/basic-transactions.html.d8a43b8d.js rename to docs/.vuepress/dist/assets/basic-transactions.html.877bd5e7.js index 877ec2f44..47062e160 100644 --- a/docs/.vuepress/dist/assets/basic-transactions.html.d8a43b8d.js +++ b/docs/.vuepress/dist/assets/basic-transactions.html.877bd5e7.js @@ -1,4 +1,4 @@ -import{_ as c,r as p,o as i,c as l,a as s,b as a,w as r,F as u,d as n,e}from"./app.cfdf84e7.js";const k={},m=s("h1",{id:"sending-transactions-islem-gonderimi",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#sending-transactions-islem-gonderimi","aria-hidden":"true"},"#"),n(" Sending Transactions(\u0130\u015Flem G\xF6nderimi)")],-1),d=s("h2",{id:"how-to-send-sol-sol-nas\u0131l-gonderilir",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#how-to-send-sol-sol-nas\u0131l-gonderilir","aria-hidden":"true"},"#"),n(" How to send SOL (SOL nas\u0131l g\xF6nderilir)")],-1),b=n("SOL g\xF6ndermek i\xE7in "),g={href:"https://docs.solana.com/developing/runtime-facilities/programs#system-program",target:"_blank",rel:"noopener noreferrer"},h=n("SystemProgram"),y=n(" ile etkile\u015Fime ge\xE7meniz gerekir."),f=e(`
const transferTransaction = new Transaction().add(
+import{_ as c,r as p,o as i,c as l,a as s,b as a,w as r,F as u,d as n,e}from"./app.2fbb9e96.js";const k={},m=s("h1",{id:"sending-transactions-islem-gonderimi",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#sending-transactions-islem-gonderimi","aria-hidden":"true"},"#"),n(" Sending Transactions(\u0130\u015Flem G\xF6nderimi)")],-1),d=s("h2",{id:"how-to-send-sol-sol-nas\u0131l-gonderilir",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#how-to-send-sol-sol-nas\u0131l-gonderilir","aria-hidden":"true"},"#"),n(" How to send SOL (SOL nas\u0131l g\xF6nderilir)")],-1),b=n("SOL g\xF6ndermek i\xE7in "),g={href:"https://docs.solana.com/developing/runtime-facilities/programs#system-program",target:"_blank",rel:"noopener noreferrer"},h=n("SystemProgram"),y=n(" ile etkile\u015Fime ge\xE7meniz gerekir."),f=e(`
const transferTransaction = new Transaction().add(
   SystemProgram.transfer({
     fromPubkey: fromKeypair.publicKey,
     toPubkey: toKeypair.publicKey,
diff --git a/docs/.vuepress/dist/assets/basic-transactions.html.e7c883d2.js b/docs/.vuepress/dist/assets/basic-transactions.html.95100180.js
similarity index 99%
rename from docs/.vuepress/dist/assets/basic-transactions.html.e7c883d2.js
rename to docs/.vuepress/dist/assets/basic-transactions.html.95100180.js
index d110cc0ba..9d73661c3 100644
--- a/docs/.vuepress/dist/assets/basic-transactions.html.e7c883d2.js
+++ b/docs/.vuepress/dist/assets/basic-transactions.html.95100180.js
@@ -1,4 +1,4 @@
-import{_ as i,r as c,o as k,c as b,a as n,b as t,w as a,F as m,d as s,e as d}from"./app.cfdf84e7.js";const y={},g=n("h1",{id:"gui-transaction",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#gui-transaction","aria-hidden":"true"},"#"),s(" G\u1EEDi Transaction")],-1),f=n("h2",{id:"lam-the-nao-\u0111e-gui-sol",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#lam-the-nao-\u0111e-gui-sol","aria-hidden":"true"},"#"),s(" L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 g\u1EEDi SOL")],-1),w=s("\u0110\u1EC3 g\u1EEDi SOL, b\u1EA1n s\u1EBD c\u1EA7n t\u01B0\u01A1ng t\xE1c v\u1EDBi "),h={href:"https://docs.solana.com/developing/runtime-facilities/programs#system-program",target:"_blank",rel:"noopener noreferrer"},_=s("SystemProgram"),T=s("."),v=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(`
+import{_ as i,r as c,o as k,c as b,a as n,b as t,w as a,F as m,d as s,e as d}from"./app.2fbb9e96.js";const y={},g=n("h1",{id:"gui-transaction",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#gui-transaction","aria-hidden":"true"},"#"),s(" G\u1EEDi Transaction")],-1),f=n("h2",{id:"lam-the-nao-\u0111e-gui-sol",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#lam-the-nao-\u0111e-gui-sol","aria-hidden":"true"},"#"),s(" L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 g\u1EEDi SOL")],-1),w=s("\u0110\u1EC3 g\u1EEDi SOL, b\u1EA1n s\u1EBD c\u1EA7n t\u01B0\u01A1ng t\xE1c v\u1EDBi "),h={href:"https://docs.solana.com/developing/runtime-facilities/programs#system-program",target:"_blank",rel:"noopener noreferrer"},_=s("SystemProgram"),T=s("."),v=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(`
   Connection`),n("span",{class:"token punctuation"},","),s(`
   Keypair`),n("span",{class:"token punctuation"},","),s(`
   SystemProgram`),n("span",{class:"token punctuation"},","),s(`
@@ -47,31 +47,31 @@ import{_ as i,r as c,o as k,c as b,a as n,b as t,w as a,F as m,d as s,e as d}fro
 
 `),n("span",{class:"token keyword"},"await"),s(),n("span",{class:"token function"},"sendAndConfirmTransaction"),n("span",{class:"token punctuation"},"("),s("connection"),n("span",{class:"token punctuation"},","),s(" transferTransaction"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token punctuation"},"["),s("fromKeypair"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
 `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br")])],-1),K=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("api "),n("span",{class:"token keyword"},"import"),s(` Client
-`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair
+`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair
 `),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("transaction "),n("span",{class:"token keyword"},"import"),s(` Transaction
-`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("system_program "),n("span",{class:"token keyword"},"import"),s(" TransferParams"),n("span",{class:"token punctuation"},","),s(` transfer
+`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("system_program "),n("span",{class:"token keyword"},"import"),s(" TransferParams"),n("span",{class:"token punctuation"},","),s(` transfer
 
 LAMPORT_PER_SOL `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token number"},"1000000000"),s(`
 
 client`),n("span",{class:"token punctuation"},":"),s(" Client "),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),s(`
 
-sender `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(`
-receiver `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(`
+sender `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(`
+receiver `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(`
 
-airdrop `),n("span",{class:"token operator"},"="),s(" client"),n("span",{class:"token punctuation"},"."),s("request_airdrop"),n("span",{class:"token punctuation"},"("),s("sender"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"1"),s(),n("span",{class:"token operator"},"*"),s(" LAMPORT_PER_SOL"),n("span",{class:"token punctuation"},")"),s(`
-airdrop_signature `),n("span",{class:"token operator"},"="),s(" airdrop"),n("span",{class:"token punctuation"},"["),n("span",{class:"token string"},'"result"'),n("span",{class:"token punctuation"},"]"),s(`
+airdrop `),n("span",{class:"token operator"},"="),s(" client"),n("span",{class:"token punctuation"},"."),s("request_airdrop"),n("span",{class:"token punctuation"},"("),s("sender"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"1"),s(),n("span",{class:"token operator"},"*"),s(" LAMPORT_PER_SOL"),n("span",{class:"token punctuation"},")"),s(`
+airdrop_signature `),n("span",{class:"token operator"},"="),s(" airdrop"),n("span",{class:"token punctuation"},"."),s(`value
 client`),n("span",{class:"token punctuation"},"."),s("confirm_transaction"),n("span",{class:"token punctuation"},"("),s("airdrop_signature"),n("span",{class:"token punctuation"},")"),s(`
 
 transaction `),n("span",{class:"token operator"},"="),s(" Transaction"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),s("add"),n("span",{class:"token punctuation"},"("),s("transfer"),n("span",{class:"token punctuation"},"("),s("TransferParams"),n("span",{class:"token punctuation"},"("),s(`
-    from_pubkey`),n("span",{class:"token operator"},"="),s("sender"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(`
-    to_pubkey`),n("span",{class:"token operator"},"="),s("receiver"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(`
+    from_pubkey`),n("span",{class:"token operator"},"="),s("sender"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(`
+    to_pubkey`),n("span",{class:"token operator"},"="),s("receiver"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(`
     lamports`),n("span",{class:"token operator"},"="),n("span",{class:"token number"},"1_000_000"),n("span",{class:"token punctuation"},")"),s(`
 `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(`
 
 client`),n("span",{class:"token punctuation"},"."),s("send_transaction"),n("span",{class:"token punctuation"},"("),s("transaction"),n("span",{class:"token punctuation"},","),s(" sender"),n("span",{class:"token punctuation"},")"),s(`
 `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br")])],-1),P=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("transaction "),n("span",{class:"token operator"},"="),s(" Transaction"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),s("add"),n("span",{class:"token punctuation"},"("),s("transfer"),n("span",{class:"token punctuation"},"("),s("TransferParams"),n("span",{class:"token punctuation"},"("),s(`
-    from_pubkey`),n("span",{class:"token operator"},"="),s("sender"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(`
-    to_pubkey`),n("span",{class:"token operator"},"="),s("receiver"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(`
+    from_pubkey`),n("span",{class:"token operator"},"="),s("sender"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(`
+    to_pubkey`),n("span",{class:"token operator"},"="),s("receiver"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(`
     lamports`),n("span",{class:"token operator"},"="),n("span",{class:"token number"},"1_000_000"),n("span",{class:"token punctuation"},")"),s(`
 `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(`
 
diff --git a/docs/.vuepress/dist/assets/basic-transactions.html.4474fa4b.js b/docs/.vuepress/dist/assets/basic-transactions.html.9ad2c78b.js
similarity index 98%
rename from docs/.vuepress/dist/assets/basic-transactions.html.4474fa4b.js
rename to docs/.vuepress/dist/assets/basic-transactions.html.9ad2c78b.js
index 9ed992df1..50a6368fb 100644
--- a/docs/.vuepress/dist/assets/basic-transactions.html.4474fa4b.js
+++ b/docs/.vuepress/dist/assets/basic-transactions.html.9ad2c78b.js
@@ -1,4 +1,4 @@
-import{_ as i,r as c,o as k,c as b,a as n,b as t,w as a,F as m,d as s,e as d}from"./app.cfdf84e7.js";const y={},f=n("h1",{id:"sending-transactions",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#sending-transactions","aria-hidden":"true"},"#"),s(" Sending Transactions")],-1),g=n("h2",{id:"how-to-send-sol",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-send-sol","aria-hidden":"true"},"#"),s(" How to send SOL")],-1),w=s("To send SOL, you will need to interact with the "),_={href:"https://docs.solana.com/developing/runtime-facilities/programs#system-program",target:"_blank",rel:"noopener noreferrer"},h=s("SystemProgram"),T=s("."),S=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(`
+import{_ as i,r as c,o as k,c as b,a as n,b as t,w as a,F as m,d as s,e as d}from"./app.2fbb9e96.js";const y={},f=n("h1",{id:"sending-transactions",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#sending-transactions","aria-hidden":"true"},"#"),s(" Sending Transactions")],-1),g=n("h2",{id:"how-to-send-sol",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-send-sol","aria-hidden":"true"},"#"),s(" How to send SOL")],-1),w=s("To send SOL, you will need to interact with the "),_={href:"https://docs.solana.com/developing/runtime-facilities/programs#system-program",target:"_blank",rel:"noopener noreferrer"},h=s("SystemProgram"),T=s("."),S=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(`
   Connection`),n("span",{class:"token punctuation"},","),s(`
   Keypair`),n("span",{class:"token punctuation"},","),s(`
   SystemProgram`),n("span",{class:"token punctuation"},","),s(`
@@ -47,31 +47,31 @@ import{_ as i,r as c,o as k,c as b,a as n,b as t,w as a,F as m,d as s,e as d}fro
 
 `),n("span",{class:"token keyword"},"await"),s(),n("span",{class:"token function"},"sendAndConfirmTransaction"),n("span",{class:"token punctuation"},"("),s("connection"),n("span",{class:"token punctuation"},","),s(" transferTransaction"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token punctuation"},"["),s("fromKeypair"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
 `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br")])],-1),P=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("api "),n("span",{class:"token keyword"},"import"),s(` Client
-`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair
+`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair
 `),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("transaction "),n("span",{class:"token keyword"},"import"),s(` Transaction
-`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("system_program "),n("span",{class:"token keyword"},"import"),s(" TransferParams"),n("span",{class:"token punctuation"},","),s(` transfer
+`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("system_program "),n("span",{class:"token keyword"},"import"),s(" TransferParams"),n("span",{class:"token punctuation"},","),s(` transfer
 
 LAMPORT_PER_SOL `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token number"},"1000000000"),s(`
 
 client`),n("span",{class:"token punctuation"},":"),s(" Client "),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),s(`
 
-sender `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(`
-receiver `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(`
+sender `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(`
+receiver `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(`
 
-airdrop `),n("span",{class:"token operator"},"="),s(" client"),n("span",{class:"token punctuation"},"."),s("request_airdrop"),n("span",{class:"token punctuation"},"("),s("sender"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"1"),s(),n("span",{class:"token operator"},"*"),s(" LAMPORT_PER_SOL"),n("span",{class:"token punctuation"},")"),s(`
-airdrop_signature `),n("span",{class:"token operator"},"="),s(" airdrop"),n("span",{class:"token punctuation"},"["),n("span",{class:"token string"},'"result"'),n("span",{class:"token punctuation"},"]"),s(`
+airdrop `),n("span",{class:"token operator"},"="),s(" client"),n("span",{class:"token punctuation"},"."),s("request_airdrop"),n("span",{class:"token punctuation"},"("),s("sender"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"1"),s(),n("span",{class:"token operator"},"*"),s(" LAMPORT_PER_SOL"),n("span",{class:"token punctuation"},")"),s(`
+airdrop_signature `),n("span",{class:"token operator"},"="),s(" airdrop"),n("span",{class:"token punctuation"},"."),s(`value
 client`),n("span",{class:"token punctuation"},"."),s("confirm_transaction"),n("span",{class:"token punctuation"},"("),s("airdrop_signature"),n("span",{class:"token punctuation"},")"),s(`
 
 transaction `),n("span",{class:"token operator"},"="),s(" Transaction"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),s("add"),n("span",{class:"token punctuation"},"("),s("transfer"),n("span",{class:"token punctuation"},"("),s("TransferParams"),n("span",{class:"token punctuation"},"("),s(`
-    from_pubkey`),n("span",{class:"token operator"},"="),s("sender"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(`
-    to_pubkey`),n("span",{class:"token operator"},"="),s("receiver"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(`
+    from_pubkey`),n("span",{class:"token operator"},"="),s("sender"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(`
+    to_pubkey`),n("span",{class:"token operator"},"="),s("receiver"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(`
     lamports`),n("span",{class:"token operator"},"="),n("span",{class:"token number"},"1_000_000"),n("span",{class:"token punctuation"},")"),s(`
 `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(`
 
 client`),n("span",{class:"token punctuation"},"."),s("send_transaction"),n("span",{class:"token punctuation"},"("),s("transaction"),n("span",{class:"token punctuation"},","),s(" sender"),n("span",{class:"token punctuation"},")"),s(`
 `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br")])],-1),K=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("transaction "),n("span",{class:"token operator"},"="),s(" Transaction"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),s("add"),n("span",{class:"token punctuation"},"("),s("transfer"),n("span",{class:"token punctuation"},"("),s("TransferParams"),n("span",{class:"token punctuation"},"("),s(`
-    from_pubkey`),n("span",{class:"token operator"},"="),s("sender"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(`
-    to_pubkey`),n("span",{class:"token operator"},"="),s("receiver"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(`
+    from_pubkey`),n("span",{class:"token operator"},"="),s("sender"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(`
+    to_pubkey`),n("span",{class:"token operator"},"="),s("receiver"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(`
     lamports`),n("span",{class:"token operator"},"="),n("span",{class:"token number"},"1_000_000"),n("span",{class:"token punctuation"},")"),s(`
 `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(`
 
diff --git a/docs/.vuepress/dist/assets/basic-transactions.html.859da652.js b/docs/.vuepress/dist/assets/basic-transactions.html.9ea6884a.js
similarity index 99%
rename from docs/.vuepress/dist/assets/basic-transactions.html.859da652.js
rename to docs/.vuepress/dist/assets/basic-transactions.html.9ea6884a.js
index 432e2087c..d2e45eec7 100644
--- a/docs/.vuepress/dist/assets/basic-transactions.html.859da652.js
+++ b/docs/.vuepress/dist/assets/basic-transactions.html.9ea6884a.js
@@ -1,4 +1,4 @@
-import{_ as i,r as c,o as k,c as b,a as n,b as t,w as a,F as m,d as s,e as d}from"./app.cfdf84e7.js";const y={},f=n("h1",{id:"sending-transactions",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#sending-transactions","aria-hidden":"true"},"#"),s(" Sending Transactions")],-1),g=n("h2",{id:"\u0E27\u0E34\u0E18\u0E35-send-sol",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E27\u0E34\u0E18\u0E35-send-sol","aria-hidden":"true"},"#"),s(" \u0E27\u0E34\u0E18\u0E35 send SOL")],-1),w=s("\u0E01\u0E32\u0E23\u0E17\u0E35\u0E48\u0E40\u0E23\u0E32\u0E08\u0E30\u0E2A\u0E48\u0E07 SOL \u0E44\u0E14\u0E49\u0E19\u0E31\u0E49\u0E19\u0E40\u0E23\u0E32\u0E15\u0E49\u0E2D\u0E07\u0E43\u0E0A\u0E49 "),_={href:"https://docs.solana.com/developing/runtime-facilities/programs#system-program",target:"_blank",rel:"noopener noreferrer"},h=s("SystemProgram"),T=s("."),S=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(`
+import{_ as i,r as c,o as k,c as b,a as n,b as t,w as a,F as m,d as s,e as d}from"./app.2fbb9e96.js";const y={},f=n("h1",{id:"sending-transactions",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#sending-transactions","aria-hidden":"true"},"#"),s(" Sending Transactions")],-1),g=n("h2",{id:"\u0E27\u0E34\u0E18\u0E35-send-sol",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E27\u0E34\u0E18\u0E35-send-sol","aria-hidden":"true"},"#"),s(" \u0E27\u0E34\u0E18\u0E35 send SOL")],-1),w=s("\u0E01\u0E32\u0E23\u0E17\u0E35\u0E48\u0E40\u0E23\u0E32\u0E08\u0E30\u0E2A\u0E48\u0E07 SOL \u0E44\u0E14\u0E49\u0E19\u0E31\u0E49\u0E19\u0E40\u0E23\u0E32\u0E15\u0E49\u0E2D\u0E07\u0E43\u0E0A\u0E49 "),_={href:"https://docs.solana.com/developing/runtime-facilities/programs#system-program",target:"_blank",rel:"noopener noreferrer"},h=s("SystemProgram"),T=s("."),S=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(`
   Connection`),n("span",{class:"token punctuation"},","),s(`
   Keypair`),n("span",{class:"token punctuation"},","),s(`
   SystemProgram`),n("span",{class:"token punctuation"},","),s(`
@@ -47,31 +47,31 @@ import{_ as i,r as c,o as k,c as b,a as n,b as t,w as a,F as m,d as s,e as d}fro
 
 `),n("span",{class:"token keyword"},"await"),s(),n("span",{class:"token function"},"sendAndConfirmTransaction"),n("span",{class:"token punctuation"},"("),s("connection"),n("span",{class:"token punctuation"},","),s(" transferTransaction"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token punctuation"},"["),s("fromKeypair"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
 `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br")])],-1),P=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("api "),n("span",{class:"token keyword"},"import"),s(` Client
-`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair
+`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair
 `),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("transaction "),n("span",{class:"token keyword"},"import"),s(` Transaction
-`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("system_program "),n("span",{class:"token keyword"},"import"),s(" TransferParams"),n("span",{class:"token punctuation"},","),s(` transfer
+`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("system_program "),n("span",{class:"token keyword"},"import"),s(" TransferParams"),n("span",{class:"token punctuation"},","),s(` transfer
 
 LAMPORT_PER_SOL `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token number"},"1000000000"),s(`
 
 client`),n("span",{class:"token punctuation"},":"),s(" Client "),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),s(`
 
-sender `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(`
-receiver `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(`
+sender `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(`
+receiver `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(`
 
-airdrop `),n("span",{class:"token operator"},"="),s(" client"),n("span",{class:"token punctuation"},"."),s("request_airdrop"),n("span",{class:"token punctuation"},"("),s("sender"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"1"),s(),n("span",{class:"token operator"},"*"),s(" LAMPORT_PER_SOL"),n("span",{class:"token punctuation"},")"),s(`
-airdrop_signature `),n("span",{class:"token operator"},"="),s(" airdrop"),n("span",{class:"token punctuation"},"["),n("span",{class:"token string"},'"result"'),n("span",{class:"token punctuation"},"]"),s(`
+airdrop `),n("span",{class:"token operator"},"="),s(" client"),n("span",{class:"token punctuation"},"."),s("request_airdrop"),n("span",{class:"token punctuation"},"("),s("sender"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"1"),s(),n("span",{class:"token operator"},"*"),s(" LAMPORT_PER_SOL"),n("span",{class:"token punctuation"},")"),s(`
+airdrop_signature `),n("span",{class:"token operator"},"="),s(" airdrop"),n("span",{class:"token punctuation"},"."),s(`value
 client`),n("span",{class:"token punctuation"},"."),s("confirm_transaction"),n("span",{class:"token punctuation"},"("),s("airdrop_signature"),n("span",{class:"token punctuation"},")"),s(`
 
 transaction `),n("span",{class:"token operator"},"="),s(" Transaction"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),s("add"),n("span",{class:"token punctuation"},"("),s("transfer"),n("span",{class:"token punctuation"},"("),s("TransferParams"),n("span",{class:"token punctuation"},"("),s(`
-    from_pubkey`),n("span",{class:"token operator"},"="),s("sender"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(`
-    to_pubkey`),n("span",{class:"token operator"},"="),s("receiver"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(`
+    from_pubkey`),n("span",{class:"token operator"},"="),s("sender"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(`
+    to_pubkey`),n("span",{class:"token operator"},"="),s("receiver"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(`
     lamports`),n("span",{class:"token operator"},"="),n("span",{class:"token number"},"1_000_000"),n("span",{class:"token punctuation"},")"),s(`
 `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(`
 
 client`),n("span",{class:"token punctuation"},"."),s("send_transaction"),n("span",{class:"token punctuation"},"("),s("transaction"),n("span",{class:"token punctuation"},","),s(" sender"),n("span",{class:"token punctuation"},")"),s(`
 `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br")])],-1),C=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("transaction "),n("span",{class:"token operator"},"="),s(" Transaction"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),s("add"),n("span",{class:"token punctuation"},"("),s("transfer"),n("span",{class:"token punctuation"},"("),s("TransferParams"),n("span",{class:"token punctuation"},"("),s(`
-    from_pubkey`),n("span",{class:"token operator"},"="),s("sender"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(`
-    to_pubkey`),n("span",{class:"token operator"},"="),s("receiver"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(`
+    from_pubkey`),n("span",{class:"token operator"},"="),s("sender"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(`
+    to_pubkey`),n("span",{class:"token operator"},"="),s("receiver"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(`
     lamports`),n("span",{class:"token operator"},"="),n("span",{class:"token number"},"1_000_000"),n("span",{class:"token punctuation"},")"),s(`
 `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(`
 
diff --git a/docs/.vuepress/dist/assets/basic-transactions.html.cc3970da.js b/docs/.vuepress/dist/assets/basic-transactions.html.a7b08dd4.js
similarity index 88%
rename from docs/.vuepress/dist/assets/basic-transactions.html.cc3970da.js
rename to docs/.vuepress/dist/assets/basic-transactions.html.a7b08dd4.js
index a7330c54c..fa525dc2a 100644
--- a/docs/.vuepress/dist/assets/basic-transactions.html.cc3970da.js
+++ b/docs/.vuepress/dist/assets/basic-transactions.html.a7b08dd4.js
@@ -1 +1 @@
-const e={key:"v-7fdd21f0",path:"/fr/references/basic-transactions.html",title:"Envoyer des Transactions",lang:"fr-FR",frontmatter:{title:"Envoyer des Transactions",head:[["meta",{name:"title",content:"Solana Cookbook | Envoyer des Transactions"}],["meta",{name:"og:title",content:"Solana Cookbook | Envoyer des Transactions"}],["meta",{name:"description",content:"Apprenez les transactions de base comme l'envoi de SOL, l'envoi de jetons SPL, le calcul du co\xFBt de la transaction, et d'autres r\xE9f\xE9rences pour construire sur Solana dans le Solana cookbook."}],["meta",{name:"og:description",content:"Apprenez les transactions de base comme l'envoi de SOL, l'envoi de jetons SPL, le calcul du co\xFBt de la transaction, et d'autres r\xE9f\xE9rences pour construire sur Solana dans le Solana cookbook."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]]},excerpt:"",headers:[{level:2,title:"Comment envoyer des SOL",slug:"comment-envoyer-des-sol",children:[]},{level:2,title:"Comment envoyer des jetons SPL",slug:"comment-envoyer-des-jetons-spl",children:[]},{level:2,title:"Comment calculer les co\xFBts de transaction",slug:"comment-calculer-les-couts-de-transaction",children:[{level:3,title:"getEstimatedFee",slug:"getestimatedfee",children:[]},{level:3,title:"getFeeForMessage",slug:"getfeeformessage",children:[]}]},{level:2,title:"Comment ajouter un m\xE9mo \xE0 une transaction",slug:"comment-ajouter-un-memo-a-une-transaction",children:[]},{level:2,title:"Comment changer le budget de calcul, les frais, & ; la priorisation d'une transaction",slug:"comment-changer-le-budget-de-calcul-les-frais-amp-la-priorisation-d-une-transaction",children:[]}],git:{updatedTime:1664978942e3},filePathRelative:"fr/references/basic-transactions.md"};export{e as data};
+const e={key:"v-7fdd21f0",path:"/fr/references/basic-transactions.html",title:"Envoyer des Transactions",lang:"fr-FR",frontmatter:{title:"Envoyer des Transactions",head:[["meta",{name:"title",content:"Solana Cookbook | Envoyer des Transactions"}],["meta",{name:"og:title",content:"Solana Cookbook | Envoyer des Transactions"}],["meta",{name:"description",content:"Apprenez les transactions de base comme l'envoi de SOL, l'envoi de jetons SPL, le calcul du co\xFBt de la transaction, et d'autres r\xE9f\xE9rences pour construire sur Solana dans le Solana cookbook."}],["meta",{name:"og:description",content:"Apprenez les transactions de base comme l'envoi de SOL, l'envoi de jetons SPL, le calcul du co\xFBt de la transaction, et d'autres r\xE9f\xE9rences pour construire sur Solana dans le Solana cookbook."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]]},excerpt:"",headers:[{level:2,title:"Comment envoyer des SOL",slug:"comment-envoyer-des-sol",children:[]},{level:2,title:"Comment envoyer des jetons SPL",slug:"comment-envoyer-des-jetons-spl",children:[]},{level:2,title:"Comment calculer les co\xFBts de transaction",slug:"comment-calculer-les-couts-de-transaction",children:[{level:3,title:"getEstimatedFee",slug:"getestimatedfee",children:[]},{level:3,title:"getFeeForMessage",slug:"getfeeformessage",children:[]}]},{level:2,title:"Comment ajouter un m\xE9mo \xE0 une transaction",slug:"comment-ajouter-un-memo-a-une-transaction",children:[]},{level:2,title:"Comment changer le budget de calcul, les frais, & la priorisation d'une transaction",slug:"comment-changer-le-budget-de-calcul-les-frais-la-priorisation-d-une-transaction",children:[]}],git:{updatedTime:1674873344e3},filePathRelative:"fr/references/basic-transactions.md"};export{e as data};
diff --git a/docs/.vuepress/dist/assets/basic-transactions.html.e3e3e3e0.js b/docs/.vuepress/dist/assets/basic-transactions.html.bd6e749c.js
similarity index 99%
rename from docs/.vuepress/dist/assets/basic-transactions.html.e3e3e3e0.js
rename to docs/.vuepress/dist/assets/basic-transactions.html.bd6e749c.js
index 5caa6fc02..873ceb4d4 100644
--- a/docs/.vuepress/dist/assets/basic-transactions.html.e3e3e3e0.js
+++ b/docs/.vuepress/dist/assets/basic-transactions.html.bd6e749c.js
@@ -1,4 +1,4 @@
-import{_ as i,r as c,o as k,c as b,a as n,b as t,w as a,F as m,d as s}from"./app.cfdf84e7.js";const d={},y=n("h1",{id:"transaktionen-versenden",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#transaktionen-versenden","aria-hidden":"true"},"#"),s(" Transaktionen versenden")],-1),g=n("p",null,"##So senden Sie SOL",-1),f=s("Um SOL zu senden, m\xFCssen Sie mit dem "),w={href:"https://docs.solana.com/developing/runtime-facilities/programs#system-program",target:"_blank",rel:"noopener noreferrer"},_=s("SystemProgram"),h=s(" interagieren."),T=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(`
+import{_ as i,r as c,o as k,c as b,a as n,b as t,w as a,F as m,d as s}from"./app.2fbb9e96.js";const d={},y=n("h1",{id:"transaktionen-versenden",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#transaktionen-versenden","aria-hidden":"true"},"#"),s(" Transaktionen versenden")],-1),g=n("p",null,"##So senden Sie SOL",-1),f=s("Um SOL zu senden, m\xFCssen Sie mit dem "),w={href:"https://docs.solana.com/developing/runtime-facilities/programs#system-program",target:"_blank",rel:"noopener noreferrer"},_=s("SystemProgram"),h=s(" interagieren."),T=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(`
   Connection`),n("span",{class:"token punctuation"},","),s(`
   Keypair`),n("span",{class:"token punctuation"},","),s(`
   SystemProgram`),n("span",{class:"token punctuation"},","),s(`
@@ -47,31 +47,31 @@ import{_ as i,r as c,o as k,c as b,a as n,b as t,w as a,F as m,d as s}from"./app
 
 `),n("span",{class:"token keyword"},"await"),s(),n("span",{class:"token function"},"sendAndConfirmTransaction"),n("span",{class:"token punctuation"},"("),s("connection"),n("span",{class:"token punctuation"},","),s(" transferTransaction"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token punctuation"},"["),s("fromKeypair"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
 `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br")])],-1),K=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("api "),n("span",{class:"token keyword"},"import"),s(` Client
-`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair
+`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair
 `),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("transaction "),n("span",{class:"token keyword"},"import"),s(` Transaction
-`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("system_program "),n("span",{class:"token keyword"},"import"),s(" TransferParams"),n("span",{class:"token punctuation"},","),s(` transfer
+`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("system_program "),n("span",{class:"token keyword"},"import"),s(" TransferParams"),n("span",{class:"token punctuation"},","),s(` transfer
 
 LAMPORT_PER_SOL `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token number"},"1000000000"),s(`
 
 client`),n("span",{class:"token punctuation"},":"),s(" Client "),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),s(`
 
-sender `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(`
-receiver `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(`
+sender `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(`
+receiver `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(`
 
-airdrop `),n("span",{class:"token operator"},"="),s(" client"),n("span",{class:"token punctuation"},"."),s("request_airdrop"),n("span",{class:"token punctuation"},"("),s("sender"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"1"),s(),n("span",{class:"token operator"},"*"),s(" LAMPORT_PER_SOL"),n("span",{class:"token punctuation"},")"),s(`
-airdrop_signature `),n("span",{class:"token operator"},"="),s(" airdrop"),n("span",{class:"token punctuation"},"["),n("span",{class:"token string"},'"result"'),n("span",{class:"token punctuation"},"]"),s(`
+airdrop `),n("span",{class:"token operator"},"="),s(" client"),n("span",{class:"token punctuation"},"."),s("request_airdrop"),n("span",{class:"token punctuation"},"("),s("sender"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"1"),s(),n("span",{class:"token operator"},"*"),s(" LAMPORT_PER_SOL"),n("span",{class:"token punctuation"},")"),s(`
+airdrop_signature `),n("span",{class:"token operator"},"="),s(" airdrop"),n("span",{class:"token punctuation"},"."),s(`value
 client`),n("span",{class:"token punctuation"},"."),s("confirm_transaction"),n("span",{class:"token punctuation"},"("),s("airdrop_signature"),n("span",{class:"token punctuation"},")"),s(`
 
 transaction `),n("span",{class:"token operator"},"="),s(" Transaction"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),s("add"),n("span",{class:"token punctuation"},"("),s("transfer"),n("span",{class:"token punctuation"},"("),s("TransferParams"),n("span",{class:"token punctuation"},"("),s(`
-    from_pubkey`),n("span",{class:"token operator"},"="),s("sender"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(`
-    to_pubkey`),n("span",{class:"token operator"},"="),s("receiver"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(`
+    from_pubkey`),n("span",{class:"token operator"},"="),s("sender"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(`
+    to_pubkey`),n("span",{class:"token operator"},"="),s("receiver"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(`
     lamports`),n("span",{class:"token operator"},"="),n("span",{class:"token number"},"1_000_000"),n("span",{class:"token punctuation"},")"),s(`
 `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(`
 
 client`),n("span",{class:"token punctuation"},"."),s("send_transaction"),n("span",{class:"token punctuation"},"("),s("transaction"),n("span",{class:"token punctuation"},","),s(" sender"),n("span",{class:"token punctuation"},")"),s(`
 `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br")])],-1),P=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("transaction "),n("span",{class:"token operator"},"="),s(" Transaction"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),s("add"),n("span",{class:"token punctuation"},"("),s("transfer"),n("span",{class:"token punctuation"},"("),s("TransferParams"),n("span",{class:"token punctuation"},"("),s(`
-    from_pubkey`),n("span",{class:"token operator"},"="),s("sender"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(`
-    to_pubkey`),n("span",{class:"token operator"},"="),s("receiver"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(`
+    from_pubkey`),n("span",{class:"token operator"},"="),s("sender"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(`
+    to_pubkey`),n("span",{class:"token operator"},"="),s("receiver"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(`
     lamports`),n("span",{class:"token operator"},"="),n("span",{class:"token number"},"1_000_000"),n("span",{class:"token punctuation"},")"),s(`
 `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(`
 
diff --git a/docs/.vuepress/dist/assets/basic-transactions.html.6a4d58f4.js b/docs/.vuepress/dist/assets/basic-transactions.html.da77937a.js
similarity index 98%
rename from docs/.vuepress/dist/assets/basic-transactions.html.6a4d58f4.js
rename to docs/.vuepress/dist/assets/basic-transactions.html.da77937a.js
index 7d20771a8..a554c54f8 100644
--- a/docs/.vuepress/dist/assets/basic-transactions.html.6a4d58f4.js
+++ b/docs/.vuepress/dist/assets/basic-transactions.html.da77937a.js
@@ -1,4 +1,4 @@
-import{_ as i,r as c,o as k,c as b,a as n,b as t,w as a,F as m,d as s,e as d}from"./app.cfdf84e7.js";const y={},g=n("h1",{id:"mengirim-transaksi",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#mengirim-transaksi","aria-hidden":"true"},"#"),s(" Mengirim Transaksi")],-1),f=n("h2",{id:"bagaimana-cara-mengirim-sol",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#bagaimana-cara-mengirim-sol","aria-hidden":"true"},"#"),s(" Bagaimana cara mengirim SOL")],-1),w=s("Untuk mengirim SOL, anda perlu berinteraksi dengan "),_={href:"https://docs.solana.com/developing/runtime-facilities/programs#system-program",target:"_blank",rel:"noopener noreferrer"},h=s("SystemProgram"),T=s("."),S=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(`
+import{_ as i,r as c,o as k,c as b,a as n,b as t,w as a,F as m,d as s,e as d}from"./app.2fbb9e96.js";const y={},g=n("h1",{id:"mengirim-transaksi",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#mengirim-transaksi","aria-hidden":"true"},"#"),s(" Mengirim Transaksi")],-1),f=n("h2",{id:"bagaimana-cara-mengirim-sol",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#bagaimana-cara-mengirim-sol","aria-hidden":"true"},"#"),s(" Bagaimana cara mengirim SOL")],-1),w=s("Untuk mengirim SOL, anda perlu berinteraksi dengan "),_={href:"https://docs.solana.com/developing/runtime-facilities/programs#system-program",target:"_blank",rel:"noopener noreferrer"},h=s("SystemProgram"),T=s("."),S=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(`
   Connection`),n("span",{class:"token punctuation"},","),s(`
   Keypair`),n("span",{class:"token punctuation"},","),s(`
   SystemProgram`),n("span",{class:"token punctuation"},","),s(`
@@ -47,31 +47,31 @@ import{_ as i,r as c,o as k,c as b,a as n,b as t,w as a,F as m,d as s,e as d}fro
 
 `),n("span",{class:"token keyword"},"await"),s(),n("span",{class:"token function"},"sendAndConfirmTransaction"),n("span",{class:"token punctuation"},"("),s("connection"),n("span",{class:"token punctuation"},","),s(" transferTransaction"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token punctuation"},"["),s("fromKeypair"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
 `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br")])],-1),P=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("api "),n("span",{class:"token keyword"},"import"),s(` Client
-`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair
+`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair
 `),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("transaction "),n("span",{class:"token keyword"},"import"),s(` Transaction
-`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("system_program "),n("span",{class:"token keyword"},"import"),s(" TransferParams"),n("span",{class:"token punctuation"},","),s(` transfer
+`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("system_program "),n("span",{class:"token keyword"},"import"),s(" TransferParams"),n("span",{class:"token punctuation"},","),s(` transfer
 
 LAMPORT_PER_SOL `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token number"},"1000000000"),s(`
 
 client`),n("span",{class:"token punctuation"},":"),s(" Client "),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),s(`
 
-sender `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(`
-receiver `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(`
+sender `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(`
+receiver `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(`
 
-airdrop `),n("span",{class:"token operator"},"="),s(" client"),n("span",{class:"token punctuation"},"."),s("request_airdrop"),n("span",{class:"token punctuation"},"("),s("sender"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"1"),s(),n("span",{class:"token operator"},"*"),s(" LAMPORT_PER_SOL"),n("span",{class:"token punctuation"},")"),s(`
-airdrop_signature `),n("span",{class:"token operator"},"="),s(" airdrop"),n("span",{class:"token punctuation"},"["),n("span",{class:"token string"},'"result"'),n("span",{class:"token punctuation"},"]"),s(`
+airdrop `),n("span",{class:"token operator"},"="),s(" client"),n("span",{class:"token punctuation"},"."),s("request_airdrop"),n("span",{class:"token punctuation"},"("),s("sender"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"1"),s(),n("span",{class:"token operator"},"*"),s(" LAMPORT_PER_SOL"),n("span",{class:"token punctuation"},")"),s(`
+airdrop_signature `),n("span",{class:"token operator"},"="),s(" airdrop"),n("span",{class:"token punctuation"},"."),s(`value
 client`),n("span",{class:"token punctuation"},"."),s("confirm_transaction"),n("span",{class:"token punctuation"},"("),s("airdrop_signature"),n("span",{class:"token punctuation"},")"),s(`
 
 transaction `),n("span",{class:"token operator"},"="),s(" Transaction"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),s("add"),n("span",{class:"token punctuation"},"("),s("transfer"),n("span",{class:"token punctuation"},"("),s("TransferParams"),n("span",{class:"token punctuation"},"("),s(`
-    from_pubkey`),n("span",{class:"token operator"},"="),s("sender"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(`
-    to_pubkey`),n("span",{class:"token operator"},"="),s("receiver"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(`
+    from_pubkey`),n("span",{class:"token operator"},"="),s("sender"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(`
+    to_pubkey`),n("span",{class:"token operator"},"="),s("receiver"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(`
     lamports`),n("span",{class:"token operator"},"="),n("span",{class:"token number"},"1_000_000"),n("span",{class:"token punctuation"},")"),s(`
 `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(`
 
 client`),n("span",{class:"token punctuation"},"."),s("send_transaction"),n("span",{class:"token punctuation"},"("),s("transaction"),n("span",{class:"token punctuation"},","),s(" sender"),n("span",{class:"token punctuation"},")"),s(`
 `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br")])],-1),C=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("transaction "),n("span",{class:"token operator"},"="),s(" Transaction"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),s("add"),n("span",{class:"token punctuation"},"("),s("transfer"),n("span",{class:"token punctuation"},"("),s("TransferParams"),n("span",{class:"token punctuation"},"("),s(`
-    from_pubkey`),n("span",{class:"token operator"},"="),s("sender"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(`
-    to_pubkey`),n("span",{class:"token operator"},"="),s("receiver"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(`
+    from_pubkey`),n("span",{class:"token operator"},"="),s("sender"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(`
+    to_pubkey`),n("span",{class:"token operator"},"="),s("receiver"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(`
     lamports`),n("span",{class:"token operator"},"="),n("span",{class:"token number"},"1_000_000"),n("span",{class:"token punctuation"},")"),s(`
 `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(`
 
diff --git a/docs/.vuepress/dist/assets/cpi.html.3c5b2fad.js b/docs/.vuepress/dist/assets/cpi.html.3c5b2fad.js
new file mode 100644
index 000000000..93876504b
--- /dev/null
+++ b/docs/.vuepress/dist/assets/cpi.html.3c5b2fad.js
@@ -0,0 +1,65 @@
+import{_ as t,r as p,o as c,c as r,a as n,b as e,F as l,e as o,d as s}from"./app.2fbb9e96.js";const i={},u=o('

Cross Program Invocations (CPIs)

A Cross-Program Invocation (CPI) is a direct call from one program into another, allowing for the composability of Solana programs. Just as any client can call any program using the JSON RPC, any program can call any other program via a CPI. CPIs essentially turn the entire Solana ecosystem into one giant API that is at your disposal as a developer.

The purpose of this section is to provide a high-level overview CPIs. Please refer to the linked resources below for more detailed explanations, examples, and walkthroughs.

Facts

Fact Sheet

  • A\xA0Cross-Program Invocation (CPI)\xA0is a call from one program to another, targeting a specific instruction on the program being called
  • CPIs allow the calling program to extend its signer privileges to the callee program
  • Programs can execute CPIs using either invoke or invoke_signed within their instructions
  • invoke is used when all required signatures are accessible prior to invocation, without the need for PDAs to act as signers
  • invoke_signed is used when PDAs from the calling program are required as signers in the CPI
  • After a CPI is made to another program, the callee program can make further CPIs to other programs, up to a maximum depth of 4

Deep Dive

Cross Program Invocations (CPIs) enable the composability of Solana programs, which allow developers to utilize and build on the instruction of existing programs.

',7),d=s("To execute CPIs, use the "),k={href:"https://docs.rs/solana-program/latest/solana_program/program/fn.invoke.html",target:"_blank",rel:"noopener noreferrer"},m=s("invoke"),h=s(" or "),b={href:"https://docs.rs/solana-program/latest/solana_program/program/fn.invoke_signed.html",target:"_blank",rel:"noopener noreferrer"},g=s("invoke_signed"),f=s(" function found in the "),_=n("code",null,"solana_program",-1),v=s(" crate."),y=o(`
// Used when there are not signatures for PDAs needed
+pub fn invoke(
+    instruction: &Instruction,
+    account_infos: &[AccountInfo<'_>]
+) -> ProgramResult
+
+// Used when a program must provide a 'signature' for a PDA, hence the signer_seeds parameter
+pub fn invoke_signed(
+    instruction: &Instruction,
+    account_infos: &[AccountInfo<'_>],
+    signers_seeds: &[&[&[u8]]]
+) -> ProgramResult
+

To make a CPI, you must specify and construct an instruction on the program being invoked and supply a list of accounts necessary for that instruction. If a PDA is required as a signer, the signers_seeds must also be provided when using invoke_signed.

CPI with\xA0invoke

The invoke function is used when making a CPI that does not require any PDAs to act as signers. When making CPIs, the Solana runtime extends the original signature passed into a program to the callee program.

invoke(
+    &some_instruction,                           // instruction to invoke
+    &[account_one.clone(), account_two.clone()], // accounts required by instruction
+)?;
+

CPI with\xA0invoke_signed

To make a CPI that requires a PDA as a signer, use the invoke_signed function and provide the necessary seeds to derive the required PDA of the calling program.

invoke_signed(
+    &some_instruction,                   // instruction to invoke
+    &[account_one.clone(), pda.clone()], // accounts required by instruction, where one is a pda required as signer
+    &[signers_seeds],                    // seeds to derive pda
+)?;
+

While PDAs have no private keys of their own, they can still act as a signer in an instruction via a CPI. To verify that a PDA belongs to the calling program, the seeds used to generate the PDA required as a signer must be included in as signers_seeds.

The Solana runtime will internally call\xA0create_program_address\xA0using the seeds provided and the\xA0program_id\xA0of the calling program. The resulting PDA is then compared to the addresses supplied in the instruction. If there's a match, the PDA is considered a valid signer.

CPI Instruction

Depending on the program you're making the call to, there may be a crate available with helper functions for creating the\xA0Instruction. Many individuals and organizations create publicly available crates alongside their programs that expose these sorts of functions to simplify calling their programs.

The definition of the Instruction type required for a CPI includes:

  • program_id\xA0- the public key of the program that executes the instruction
  • accounts\xA0- a list of all accounts that may be read or written to during the execution of the instruction
  • data\xA0- the instruction data required by the instruction
pub struct Instruction {
+    pub program_id: Pubkey,
+    pub accounts: Vec<AccountMeta>,
+    pub data: Vec<u8>,
+}
+

The\xA0AccountMeta\xA0struct has the following definition:

pub struct AccountMeta {
+    pub pubkey: Pubkey,
+    pub is_signer: bool,
+    pub is_writable: bool,
+}
+

When creating a CPI, use the following syntax to specify the AccountMeta for each account:

  • AccountMeta::new\xA0- indicates writable
  • AccountMeta::new_readonly\xA0- indicates\xA0not\xA0writable
  • (pubkey, true)\xA0- indicates account is signer
  • (pubkey, false)\xA0- indicates account is\xA0not\xA0signer

Here is an example:

use solana_program::instruction::AccountMeta;
+
+let account_metas = vec![
+    AccountMeta::new(account1_pubkey, true),
+    AccountMeta::new(account2_pubkey, false),
+    AccountMeta::new_readonly(account3_pubkey, false),
+    AccountMeta::new_readonly(account4_pubkey, true),
+]
+

CPI AccountInfo

To use invoke and invoke_signed, a list of account_infos is also required. Similar to the list of AccountMeta in the instruction, you need to include all the AccountInfo of each account that the program you're calling will read from or write to.

For reference, the AccountInfo struct has the following definition:

/// Account information
+#[derive(Clone)]
+pub struct AccountInfo<'a> {
+    /// Public key of the account
+    pub key: &'a Pubkey,
+    /// Was the transaction signed by this account's public key?
+    pub is_signer: bool,
+    /// Is the account writable?
+    pub is_writable: bool,
+    /// The lamports in the account.  Modifiable by programs.
+    pub lamports: Rc<RefCell<&'a mut u64>>,
+    /// The data held in this account.  Modifiable by programs.
+    pub data: Rc<RefCell<&'a mut [u8]>>,
+    /// Program that owns this account
+    pub owner: &'a Pubkey,
+    /// This account's data contains a loaded program (and is now read-only)
+    pub executable: bool,
+    /// The epoch at which this account will next owe rent
+    pub rent_epoch: Epoch,
+}
+
`,25),w=s("You can create a copy of the "),P=n("code",null,"AccountInfo",-1),I=s(" for each required account using the "),A={href:"https://docs.rs/solana-program/latest/solana_program/account_info/struct.AccountInfo.html#impl-Clone-for-AccountInfo%3C'a%3E",target:"_blank",rel:"noopener noreferrer"},C=s("Clone"),x=s(" trait, which is implemented for the "),D={href:"https://docs.rs/solana-program/latest/solana_program/account_info/struct.AccountInfo.html",target:"_blank",rel:"noopener noreferrer"},T=s("AccountInfo"),M=s(" struct in the "),q=n("code",null,"solana_program",-1),S=s(" crate."),R=o(`
let accounts_infos = [
+    account_one.clone(),
+    account_two.clone(),
+    account_three.clone(),
+];
+

While this section has provided a high-level overview of CPIs, more detailed explanations, examples, and walkthroughs can be found in the linked resources below.

Other Resources

`,3),E={href:"https://docs.solana.com/developing/programming-model/calling-between-programs#cross-program-invocations",target:"_blank",rel:"noopener noreferrer"},N=s("Official Documentation"),V={href:"https://solanacookbook.com/references/programs.html#how-to-do-cross-program-invocation",target:"_blank",rel:"noopener noreferrer"},F=s("Solana Cookbook Reference"),W={href:"https://www.soldev.app/course/cpi",target:"_blank",rel:"noopener noreferrer"},L=s("Solana Course Native CPI Lesson"),B={href:"https://www.soldev.app/course/anchor-cpi",target:"_blank",rel:"noopener noreferrer"},O=s("Solana Course Anchor CPI Lesson"),z={href:"https://github.com/solana-developers/program-examples/tree/main/basics/cross-program-invocation",target:"_blank",rel:"noopener noreferrer"},J=s("Solana Developers Program Examples");function U(H,Y){const a=p("ExternalLinkIcon");return c(),r(l,null,[u,n("p",null,[d,n("a",k,[m,e(a)]),h,n("a",b,[g,e(a)]),f,_,v]),y,n("p",null,[w,P,I,n("a",A,[C,e(a)]),x,n("a",D,[T,e(a)]),M,q,S]),R,n("ul",null,[n("li",null,[n("a",E,[N,e(a)])]),n("li",null,[n("a",V,[F,e(a)])]),n("li",null,[n("a",W,[L,e(a)])]),n("li",null,[n("a",B,[O,e(a)])]),n("li",null,[n("a",z,[J,e(a)])])])],64)}var G=t(i,[["render",U]]);export{G as default}; diff --git a/docs/.vuepress/dist/assets/cpi.html.6cd740cc.js b/docs/.vuepress/dist/assets/cpi.html.6cd740cc.js new file mode 100644 index 000000000..a99f1cbc6 --- /dev/null +++ b/docs/.vuepress/dist/assets/cpi.html.6cd740cc.js @@ -0,0 +1 @@ +const o={key:"v-5f0a12cc",path:"/core-concepts/cpi.html",title:"Cross Program Invocations (CPIs)",lang:"en-US",frontmatter:{title:"Cross Program Invocations (CPIs)",head:[["meta",{name:"title",content:"Solana Cookbook | CPIs"}],["meta",{name:"og:title",content:"Solana Cookbook | CPIs"}],["meta",{name:"description",content:"CPIs enable programs to call instructions on other programs, allowing for the composability of Solana programs. Learn about CPIs and more Core Concepts at The Solana cookbook."}],["meta",{name:"og:description",content:"CPIs enable programs to call instructions on other programs, allowing for the composability of Solana programs. Learn about CPIs and more Core Concepts at The Solana cookbook."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"Facts",slug:"facts",children:[]},{level:2,title:"Deep Dive",slug:"deep-dive",children:[{level:3,title:"CPI with\xA0invoke",slug:"cpi-with-invoke",children:[]},{level:3,title:"CPI with\xA0invoke_signed",slug:"cpi-with-invoke-signed",children:[]},{level:3,title:"CPI Instruction",slug:"cpi-instruction",children:[]},{level:3,title:"CPI AccountInfo",slug:"cpi-accountinfo",children:[]}]},{level:2,title:"Other Resources",slug:"other-resources",children:[]}],git:{updatedTime:1678327582e3},filePathRelative:"core-concepts/cpi.md"};export{o as data}; diff --git a/docs/.vuepress/dist/assets/data-migration.html.17e2db7e.js b/docs/.vuepress/dist/assets/data-migration.html.0eb2a254.js similarity index 98% rename from docs/.vuepress/dist/assets/data-migration.html.17e2db7e.js rename to docs/.vuepress/dist/assets/data-migration.html.0eb2a254.js index 709d59566..0f0fc1526 100644 --- a/docs/.vuepress/dist/assets/data-migration.html.17e2db7e.js +++ b/docs/.vuepress/dist/assets/data-migration.html.0eb2a254.js @@ -1,4 +1,4 @@ -import{_ as i,r as e,o as k,c as m,b as t,w as a,a as n,F as b,e as p,d as s}from"./app.cfdf84e7.js";var d="/assets/pav1.1b0417ca.png",_="/assets/pav2.1ef612b4.png";const y={},f=p('

N\xE2ng c\u1EA5p d\u1EEF li\u1EC7u m\u1ED9t Program Account

L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 c\xF3 th\u1EC3 n\xE2ng c\u1EA5p d\u1EEF li\u1EC7u trong Program Account?

Khi b\u1EA1n t\u1EA1o m\u1ED9t Program, m\u1ED7i Account d\u1EEF li\u1EC7u s\u1EBD \u0111\u01B0\u1EE3c g\xE1n cho Program \u0111\xF3 v\u1EDBi c\u1EA5u tr\u1EE5c d\u1EEF li\u1EC7u c\u1EE5 th\u1EC3. N\u1EBFu b\u1EA1n t\u1EEBng n\xE2ng c\u1EA5p Program v\xE0 Program n\xE0y d\xF9ng \u0111\u1EC3 suy ra c\xE1c PDA, b\u1EA1n ch\u1EAFc h\u1EB3n \u0111\xE3 ph\u1EA3i \u0111au \u0111\u1EA7u v\u1EDBi h\xE0ng t\xE1 nh\u1EEFng Account v\u1EDBi c\u1EA5u tr\xFAc g\u1EAFn v\u1EDBi Program c\u0169.

V\u1EDBi vi\u1EC7c \u0111\xE1nh phi\xEAn b\u1EA3n cho Account, b\u1EA1n c\xF3 th\u1EC3 d\u1EC5 d\xE0ng n\xE2ng c\u1EA5p c\u1EA5u tr\xFAc m\u1EDBi cho c\xE1c Account c\u0169 .

L\u01B0u \xFD

\u0110\xE2y ch\u1EC9 l\xE0 m\u1ED9t trong r\u1EA5t nhi\u1EC1u c\xE1ch kh\xE1c nhau \u0111\u1EC3 n\xE2ng c\u1EA5p d\u1EEF li\u1EC7u trong Program Owned Accounts (POA).

Ng\u1EEF c\u1EA3nh

\u0110\u1EC3 \u0111\xE1nh phi\xEAn b\u1EA3n v\xE0 n\xE2ng c\u1EA5p d\u1EEF li\u1EC7u trong Account, ch\xFAng ta s\u1EBD ph\u1EA3i cung c\u1EA5p m\u1ED9t id cho t\u1EEBng Account. Id n\xE0y s\u1EBD cho ph\xE9p ch\xFAng ta \u0111\u1ECBnh r\xF5 phi\xEAn b\u1EA3n c\u1EE7a Account khi truy\u1EC1n n\xF3 cho Program, v\xE0 nh\u01B0 v\u1EADy c\xF3 th\u1EC3 x\u1EED l\xFD Account m\u1ED9t c\xE1ch ch\xEDnh x\xE1c.

Quan s\xE1t tr\u1EA1ng th\xE1i b\xEAn d\u01B0\u1EDBi c\u1EE7a Account v\xE0 Program:

Program Account v1',9),g=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"//! @brief account_state manages account data"),s(` +import{_ as i,r as e,o as k,c as m,b as t,w as a,a as n,F as b,e as p,d as s}from"./app.2fbb9e96.js";var d="/assets/pav1.1b0417ca.png",_="/assets/pav2.1ef612b4.png";const y={},f=p('

N\xE2ng c\u1EA5p d\u1EEF li\u1EC7u m\u1ED9t Program Account

L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 c\xF3 th\u1EC3 n\xE2ng c\u1EA5p d\u1EEF li\u1EC7u trong Program Account?

Khi b\u1EA1n t\u1EA1o m\u1ED9t Program, m\u1ED7i Account d\u1EEF li\u1EC7u s\u1EBD \u0111\u01B0\u1EE3c g\xE1n cho Program \u0111\xF3 v\u1EDBi c\u1EA5u tr\u1EE5c d\u1EEF li\u1EC7u c\u1EE5 th\u1EC3. N\u1EBFu b\u1EA1n t\u1EEBng n\xE2ng c\u1EA5p Program v\xE0 Program n\xE0y d\xF9ng \u0111\u1EC3 suy ra c\xE1c PDA, b\u1EA1n ch\u1EAFc h\u1EB3n \u0111\xE3 ph\u1EA3i \u0111au \u0111\u1EA7u v\u1EDBi h\xE0ng t\xE1 nh\u1EEFng Account v\u1EDBi c\u1EA5u tr\xFAc g\u1EAFn v\u1EDBi Program c\u0169.

V\u1EDBi vi\u1EC7c \u0111\xE1nh phi\xEAn b\u1EA3n cho Account, b\u1EA1n c\xF3 th\u1EC3 d\u1EC5 d\xE0ng n\xE2ng c\u1EA5p c\u1EA5u tr\xFAc m\u1EDBi cho c\xE1c Account c\u0169 .

L\u01B0u \xFD

\u0110\xE2y ch\u1EC9 l\xE0 m\u1ED9t trong r\u1EA5t nhi\u1EC1u c\xE1ch kh\xE1c nhau \u0111\u1EC3 n\xE2ng c\u1EA5p d\u1EEF li\u1EC7u trong Program Owned Accounts (POA).

Ng\u1EEF c\u1EA3nh

\u0110\u1EC3 \u0111\xE1nh phi\xEAn b\u1EA3n v\xE0 n\xE2ng c\u1EA5p d\u1EEF li\u1EC7u trong Account, ch\xFAng ta s\u1EBD ph\u1EA3i cung c\u1EA5p m\u1ED9t id cho t\u1EEBng Account. Id n\xE0y s\u1EBD cho ph\xE9p ch\xFAng ta \u0111\u1ECBnh r\xF5 phi\xEAn b\u1EA3n c\u1EE7a Account khi truy\u1EC1n n\xF3 cho Program, v\xE0 nh\u01B0 v\u1EADy c\xF3 th\u1EC3 x\u1EED l\xFD Account m\u1ED9t c\xE1ch ch\xEDnh x\xE1c.

Quan s\xE1t tr\u1EA1ng th\xE1i b\xEAn d\u01B0\u1EDBi c\u1EE7a Account v\xE0 Program:

Program Account v1',9),g=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"//! @brief account_state manages account data"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("arrayref"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),s("array_ref"),n("span",{class:"token punctuation"},","),s(" array_refs"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("borsh"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"BorshDeserialize"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"BorshSerialize"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` @@ -343,7 +343,7 @@ import{_ as i,r as e,o as k,c as m,b as t,w as a,a as n,F as b,e as p,d as s}fro `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br"),n("span",{class:"line-number"},"69"),n("br"),n("span",{class:"line-number"},"70"),n("br")])],-1),v=p('

Trong phi\xEAn b\u1EA3n \u0111\u1EA7u ti\xEAn c\u1EE7a Account, ch\xFAng ta th\u1EF1c hi\u1EC7n c\xE1c b\u01B0\u1EDBc sau:

#M\xF4 t\u1EA3
1Th\xEAm tr\u01B0\u1EDDng data_version v\xE0o d\u1EEF li\u1EC7u. N\xF3 c\xF3 th\u1EC3 \u0111\u01A1n gi\u1EA3n l\xE0 s\u1ED1 th\u1EE9 t\u1EF1 (u8) ho\u1EB7c c\xF3 th\u1EC3 ph\u1EE9c t\u1EA1p h\u01A1n th\u1EBF.
2Ph\xE2n ph\xE1t m\u1ED9t v\xF9ng nh\u1EDB \u0111\u1EE7 ch\u1EE9a d\u1EEF li\u1EC7u
3Kh\u1EDFi t\u1EA1o m\u1ED9t h\u1EB1ng s\u1ED1 bi\u1EC5u di\u1EC5n phi\xEAn b\u1EA3n cho c\xE1c Program kh\xE1c nhau
4Th\xEAm m\u1ED9t h\xE0m c\u1EADp nh\u1EADt Account v\u1EDBi t\xEAn fn conversion_logic cho c\xE1c n\xE2ng c\u1EA5p trong t\u01B0\u01A1ng lai

Gi\u1EA3 s\u1EED, ch\xFAng ta mu\u1ED1n n\xE2ng c\u1EA5p c\xE1c Account c\u1EE7a Program b\u1EB1ng c\xE1ch th\xEAm m\u1ED9t tr\u01B0\u1EDDng m\u1EDBi v\u1EDBi t\xEAn somestring.

N\u1EBFu ch\xFAng ta kh\xF4ng ph\xE2n ph\xE1t \u0111\u1EE7 v\xF9ng nh\u1EDB cho tr\u01B0\u1EDDng m\u1EDBi th\xEAm cho c\xE1c Account tr\u01B0\u1EDBc \u0111\xF3, qu\xE1 tr\xECnh n\xE2ng c\u1EA5p Account s\u1EBD b\u1ECB m\u1EAFc k\u1EB9t.

N\xE2ng c\u1EA5p Account

Trong Program m\u1EDBi, ch\xFAng ta mu\u1ED1n th\xEAm m\u1ED9t thu\u1ED9c t\xEDnh m\u1EDBi cho n\u1ED9i dung c\u1EE7a Account. Nh\u1EEFng thay \u0111\u1ED5i b\xEAn d\u01B0\u1EDBi tr\xECnh b\xE0y c\xE1ch ch\xFAng ta t\u1EADn d\u1EE5ng c\u01A1 c\u1EA5u Program ban \u0111\u1EA7u cho phi\xEAn b\u1EA3n hi\u1EC7n t\u1EA1i.

1. Th\xEAm lu\u1EADn l\xFD \u0111\u1EC3 chuy\u1EC3n \u0111\u1ED5i Account

',7),E=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"//! @brief account_state manages account data"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br"),n("span",{class:"line-number"},"69"),n("br"),n("span",{class:"line-number"},"70"),n("br")])],-1),v=p('

Trong phi\xEAn b\u1EA3n \u0111\u1EA7u ti\xEAn c\u1EE7a Account, ch\xFAng ta th\u1EF1c hi\u1EC7n c\xE1c b\u01B0\u1EDBc sau:

#M\xF4 t\u1EA3
1Th\xEAm tr\u01B0\u1EDDng data_version v\xE0o d\u1EEF li\u1EC7u. N\xF3 c\xF3 th\u1EC3 \u0111\u01A1n gi\u1EA3n l\xE0 s\u1ED1 th\u1EE9 t\u1EF1 (u8) ho\u1EB7c c\xF3 th\u1EC3 ph\u1EE9c t\u1EA1p h\u01A1n th\u1EBF.
2Ph\xE2n ph\xE1t m\u1ED9t v\xF9ng nh\u1EDB \u0111\u1EE7 \u0111\u1EC3 ch\u1EE9a d\u1EEF li\u1EC7u
3Kh\u1EDFi t\u1EA1o m\u1ED9t h\u1EB1ng s\u1ED1 bi\u1EC5u di\u1EC5n phi\xEAn b\u1EA3n cho c\xE1c Program kh\xE1c nhau
4Th\xEAm m\u1ED9t h\xE0m c\u1EADp nh\u1EADt Account v\u1EDBi t\xEAn fn conversion_logic cho c\xE1c n\xE2ng c\u1EA5p trong t\u01B0\u01A1ng lai

Gi\u1EA3 s\u1EED, ch\xFAng ta mu\u1ED1n n\xE2ng c\u1EA5p c\xE1c Account c\u1EE7a Program b\u1EB1ng c\xE1ch th\xEAm m\u1ED9t tr\u01B0\u1EDDng m\u1EDBi v\u1EDBi t\xEAn somestring.

N\u1EBFu ch\xFAng ta kh\xF4ng ph\xE2n ph\xE1t \u0111\u1EE7 v\xF9ng nh\u1EDB cho tr\u01B0\u1EDDng m\u1EDBi th\xEAm cho c\xE1c Account tr\u01B0\u1EDBc \u0111\xF3, qu\xE1 tr\xECnh n\xE2ng c\u1EA5p Account s\u1EBD b\u1ECB m\u1EAFc k\u1EB9t.

N\xE2ng c\u1EA5p Account

Trong Program m\u1EDBi, ch\xFAng ta mu\u1ED1n th\xEAm m\u1ED9t thu\u1ED9c t\xEDnh m\u1EDBi cho n\u1ED9i dung c\u1EE7a Account. Nh\u1EEFng thay \u0111\u1ED5i b\xEAn d\u01B0\u1EDBi tr\xECnh b\xE0y c\xE1ch ch\xFAng ta t\u1EADn d\u1EE5ng c\u01A1 c\u1EA5u Program ban \u0111\u1EA7u cho phi\xEAn b\u1EA3n hi\u1EC7n t\u1EA1i.

1. Th\xEAm lu\u1EADn l\xFD \u0111\u1EC3 chuy\u1EC3n \u0111\u1ED5i Account

',7),E=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"//! @brief account_state manages account data"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("arrayref"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),s("array_ref"),n("span",{class:"token punctuation"},","),s(" array_refs"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("borsh"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"BorshDeserialize"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"BorshSerialize"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` @@ -513,7 +513,7 @@ import{_ as i,r as e,o as k,c as m,b as t,w as a,a as n,F as b,e as p,d as s}fro data_version`),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token keyword"},"u8"),n("span",{class:"token punctuation"},","),s(` account_data`),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token class-name"},"AccountContentCurrent"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br")])],-1),z=p("
D\xF2ngM\xF4 t\u1EA3
6Ch\xFAng ta \u0111\xE3 th\xEAm solana_program::borsh::try_from_slice_unchecked c\u1EE7a Solana \u0111\u1EC3 \u0111\u01A1n gi\u1EA3n ho\xE1 vi\u1EC7c \u0111\u1ECDc c\xE1c t\u1EADp d\u1EEF li\u1EC7u con t\u1EEB kh\u1ED1i d\u1EEF li\u1EC7u cha
13-26\u1EDE \u0111\xE2y, ch\xFAng ta ph\u1EA3i gi\u1EEF l\u1EA1i phi\xEAn b\u1EA3n c\u0169, AccountContentOld t\u1EA1i d\xF2ng 24, tr\u01B0\u1EDBc khi m\u1EDF r\u1ED9ng n\xF3 th\xE0nh AccountContentCurrent t\u1EA1i d\xF2ng 17.
60N\xE2ng c\u1EA5p l\u1EA1i h\u1EB1ng s\u1ED1 DATA_VERSION
71Ch\xFAng ta gi\u1EDD \u0111\xE3 c\xF3 m\u1ED9t phi\xEAn b\u1EA3n c\u0169, \u0111\u1ED3ng th\u1EDDi l\u01B0u l\u1EA1i k\xEDch th\u01B0\u1EDBc c\u1EE7a n\xF3
86Cu\u1ED1i c\xF9ng l\xE0 th\xEAm lu\u1EADn l\xFD cho qu\xE1 tr\xECnh n\xE2ng c\u1EA5p phi\xEAn b\u1EA3n d\u1EEF li\u1EC7u c\u0169 th\xE0nh phi\xEAn b\u1EA3n hi\u1EC7n h\xE0nh

Sau \u0111\xF3 ch\xFAng ta c\u1EADp nh\u1EADt h\xE0m m\u1EDBi \u0111\u1EC3 th\xEAm v\xE0o tr\u01B0\u1EDDng somestring v\xE0 khai b\xE1o lu\u1EADn l\xFD c\u1EE7a ch\u1EC9 th\u1ECB m\u1EDBi trong processor. L\u01B0u \xFD vi\u1EC7c n\xE2ng c\u1EA5p c\u1EA5u tr\xFAc d\u1EEF li\u1EC7u \u0111\xE3 \u0111\u01B0\u1EE3c \u0111\xF3ng g\xF3i trong pack/unpack.

",2),C=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"//! instruction Contains the main VersionProgramInstruction enum"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br")])],-1),z=p("
D\xF2ngM\xF4 t\u1EA3
6Ch\xFAng ta \u0111\xE3 th\xEAm solana_program::borsh::try_from_slice_unchecked c\u1EE7a Solana \u0111\u1EC3 \u0111\u01A1n gi\u1EA3n ho\xE1 vi\u1EC7c \u0111\u1ECDc c\xE1c t\u1EADp d\u1EEF li\u1EC7u con t\u1EEB kh\u1ED1i d\u1EEF li\u1EC7u cha
13-26\u1EDE \u0111\xE2y, ch\xFAng ta ph\u1EA3i gi\u1EEF l\u1EA1i phi\xEAn b\u1EA3n c\u0169, AccountContentOld t\u1EA1i d\xF2ng 24, tr\u01B0\u1EDBc khi m\u1EDF r\u1ED9ng n\xF3 th\xE0nh AccountContentCurrent t\u1EA1i d\xF2ng 17.
60N\xE2ng c\u1EA5p l\u1EA1i h\u1EB1ng s\u1ED1 DATA_VERSION
71Ch\xFAng ta gi\u1EDD \u0111\xE3 c\xF3 m\u1ED9t phi\xEAn b\u1EA3n c\u0169, \u0111\u1ED3ng th\u1EDDi l\u01B0u l\u1EA1i k\xEDch th\u01B0\u1EDBc c\u1EE7a n\xF3
86Cu\u1ED1i c\xF9ng l\xE0 th\xEAm logic cho qu\xE1 tr\xECnh n\xE2ng c\u1EA5p phi\xEAn b\u1EA3n d\u1EEF li\u1EC7u c\u0169 th\xE0nh phi\xEAn b\u1EA3n hi\u1EC7n h\xE0nh

Sau \u0111\xF3 ch\xFAng ta c\u1EADp nh\u1EADt h\xE0m m\u1EDBi \u0111\u1EC3 th\xEAm v\xE0o tr\u01B0\u1EDDng somestring v\xE0 khai b\xE1o lu\u1EADn l\xFD c\u1EE7a ch\u1EC9 th\u1ECB m\u1EDBi trong processor. L\u01B0u \xFD vi\u1EC7c n\xE2ng c\u1EA5p c\u1EA5u tr\xFAc d\u1EEF li\u1EC7u \u0111\xE3 \u0111\u01B0\u1EE3c \u0111\xF3ng g\xF3i trong pack/unpack.

",2),C=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"//! instruction Contains the main VersionProgramInstruction enum"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"crate"),n("span",{class:"token module-declaration namespace"},[n("span",{class:"token punctuation"},"::"),s("error"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"DataVersionError"),n("span",{class:"token punctuation"},","),s(` diff --git a/docs/.vuepress/dist/assets/data-migration.html.19adc0d7.js b/docs/.vuepress/dist/assets/data-migration.html.3a47b2d3.js similarity index 97% rename from docs/.vuepress/dist/assets/data-migration.html.19adc0d7.js rename to docs/.vuepress/dist/assets/data-migration.html.3a47b2d3.js index c43109f83..5fcd624e3 100644 --- a/docs/.vuepress/dist/assets/data-migration.html.19adc0d7.js +++ b/docs/.vuepress/dist/assets/data-migration.html.3a47b2d3.js @@ -1 +1 @@ -const n={key:"v-1b0279b9",path:"/vi/guides/data-migration.html",title:"N\xE2ng c\u1EA5p d\u1EEF li\u1EC7u cho Program Account",lang:"vi-VN",frontmatter:{title:"N\xE2ng c\u1EA5p d\u1EEF li\u1EC7u cho Program Account",head:[["meta",{name:"title",content:"To\xE0n t\u1EADp Solana | N\xE2ng c\u1EA5p d\u1EEF li\u1EC7u cho Program Account"}],["meta",{name:"og:title",content:"To\xE0n t\u1EADp Solana | N\xE2ng c\u1EA5p d\u1EEF li\u1EC7u cho Program Account"}],["meta",{name:"description",content:"C\u01A1 b\u1EA3n v\u1EC1 th\xF4ng tin phi\xEAn b\u1EA3n h\u1ED7 tr\u1EDF n\xE2ng c\u1EA5p ngh\u0129a l\xE0 t\u1EA1o ra nh\u1EEFng tham chi\u1EBFu \u0111\u1ED9c l\u1EADp cho t\u1EEBng t\u1EADp d\u1EEF li\u1EC7u. Tham chi\u1EBFu n\xE0y c\xF3 th\u1EC3 l\xE0 m\u1ED9t c\xE2u truy v\u1EA5n, m\u1ED9t m\xE3 \u0111\u1ECBnh danh, hay th\u01B0\u1EDDng h\u01A1n l\xE0 ng\xE0y th\xE1ng. Chi ti\u1EBFt v\u1EC1 N\xE2ng c\u1EA5p d\u1EEF li\u1EC7u cho Program Account v\xE0 c\xE1c kh\xE1i ni\u1EC7m c\u01A1n b\u1EA3n kh\xE1c trong To\xE0n t\u1EADp Solana."}],["meta",{name:"og:description",content:"C\u01A1 b\u1EA3n v\u1EC1 th\xF4ng tin phi\xEAn b\u1EA3n h\u1ED7 tr\u1EDF n\xE2ng c\u1EA5p ngh\u0129a l\xE0 t\u1EA1o ra nh\u1EEFng tham chi\u1EBFu \u0111\u1ED9c l\u1EADp cho t\u1EEBng t\u1EADp d\u1EEF li\u1EC7u. Tham chi\u1EBFu n\xE0y c\xF3 th\u1EC3 l\xE0 m\u1ED9t c\xE2u truy v\u1EA5n, m\u1ED9t m\xE3 \u0111\u1ECBnh danh, hay th\u01B0\u1EDDng h\u01A1n l\xE0 ng\xE0y th\xE1ng. Chi ti\u1EBFt v\u1EC1 N\xE2ng c\u1EA5p d\u1EEF li\u1EC7u cho Program Account v\xE0 c\xE1c kh\xE1i ni\u1EC7m c\u01A1n b\u1EA3n kh\xE1c trong To\xE0n t\u1EADp Solana."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 c\xF3 th\u1EC3 n\xE2ng c\u1EA5p d\u1EEF li\u1EC7u trong Program Account?",slug:"lam-the-nao-\u0111e-co-the-nang-cap-du-lieu-trong-program-account",children:[]},{level:2,title:"Ng\u1EEF c\u1EA3nh",slug:"ngu-canh",children:[]},{level:2,title:"N\xE2ng c\u1EA5p Account",slug:"nang-cap-account",children:[{level:3,title:"1. Th\xEAm lu\u1EADn l\xFD \u0111\u1EC3 chuy\u1EC3n \u0111\u1ED5i Account",slug:"_1-them-luan-ly-\u0111e-chuyen-\u0111oi-account",children:[]}]},{level:2,title:"C\xE1c ngu\u1ED3n t\xE0i li\u1EC7u kh\xE1c",slug:"cac-nguon-tai-lieu-khac",children:[]}],git:{updatedTime:1658783638e3},filePathRelative:"vi/guides/data-migration.md"};export{n as data}; +const n={key:"v-1b0279b9",path:"/vi/guides/data-migration.html",title:"N\xE2ng c\u1EA5p d\u1EEF li\u1EC7u cho Program Account",lang:"vi-VN",frontmatter:{title:"N\xE2ng c\u1EA5p d\u1EEF li\u1EC7u cho Program Account",head:[["meta",{name:"title",content:"To\xE0n t\u1EADp Solana | N\xE2ng c\u1EA5p d\u1EEF li\u1EC7u cho Program Account"}],["meta",{name:"og:title",content:"To\xE0n t\u1EADp Solana | N\xE2ng c\u1EA5p d\u1EEF li\u1EC7u cho Program Account"}],["meta",{name:"description",content:"C\u01A1 b\u1EA3n v\u1EC1 th\xF4ng tin phi\xEAn b\u1EA3n h\u1ED7 tr\u1EDF n\xE2ng c\u1EA5p ngh\u0129a l\xE0 t\u1EA1o ra nh\u1EEFng tham chi\u1EBFu \u0111\u1ED9c l\u1EADp cho t\u1EEBng t\u1EADp d\u1EEF li\u1EC7u. Tham chi\u1EBFu n\xE0y c\xF3 th\u1EC3 l\xE0 m\u1ED9t c\xE2u truy v\u1EA5n, m\u1ED9t m\xE3 \u0111\u1ECBnh danh, hay th\u01B0\u1EDDng h\u01A1n l\xE0 ng\xE0y th\xE1ng. Chi ti\u1EBFt v\u1EC1 N\xE2ng c\u1EA5p d\u1EEF li\u1EC7u cho Program Account v\xE0 c\xE1c kh\xE1i ni\u1EC7m c\u01A1n b\u1EA3n kh\xE1c trong To\xE0n t\u1EADp Solana."}],["meta",{name:"og:description",content:"C\u01A1 b\u1EA3n v\u1EC1 th\xF4ng tin phi\xEAn b\u1EA3n h\u1ED7 tr\u1EDF n\xE2ng c\u1EA5p ngh\u0129a l\xE0 t\u1EA1o ra nh\u1EEFng tham chi\u1EBFu \u0111\u1ED9c l\u1EADp cho t\u1EEBng t\u1EADp d\u1EEF li\u1EC7u. Tham chi\u1EBFu n\xE0y c\xF3 th\u1EC3 l\xE0 m\u1ED9t c\xE2u truy v\u1EA5n, m\u1ED9t m\xE3 \u0111\u1ECBnh danh, hay th\u01B0\u1EDDng h\u01A1n l\xE0 ng\xE0y th\xE1ng. Chi ti\u1EBFt v\u1EC1 N\xE2ng c\u1EA5p d\u1EEF li\u1EC7u cho Program Account v\xE0 c\xE1c kh\xE1i ni\u1EC7m c\u01A1n b\u1EA3n kh\xE1c trong To\xE0n t\u1EADp Solana."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 c\xF3 th\u1EC3 n\xE2ng c\u1EA5p d\u1EEF li\u1EC7u trong Program Account?",slug:"lam-the-nao-\u0111e-co-the-nang-cap-du-lieu-trong-program-account",children:[]},{level:2,title:"Ng\u1EEF c\u1EA3nh",slug:"ngu-canh",children:[]},{level:2,title:"N\xE2ng c\u1EA5p Account",slug:"nang-cap-account",children:[{level:3,title:"1. Th\xEAm lu\u1EADn l\xFD \u0111\u1EC3 chuy\u1EC3n \u0111\u1ED5i Account",slug:"_1-them-luan-ly-\u0111e-chuyen-\u0111oi-account",children:[]}]},{level:2,title:"C\xE1c ngu\u1ED3n t\xE0i li\u1EC7u kh\xE1c",slug:"cac-nguon-tai-lieu-khac",children:[]}],git:{updatedTime:1677551527e3},filePathRelative:"vi/guides/data-migration.md"};export{n as data}; diff --git a/docs/.vuepress/dist/assets/data-migration.html.a197b291.js b/docs/.vuepress/dist/assets/data-migration.html.539393f0.js similarity index 99% rename from docs/.vuepress/dist/assets/data-migration.html.a197b291.js rename to docs/.vuepress/dist/assets/data-migration.html.539393f0.js index d74776362..710c973f1 100644 --- a/docs/.vuepress/dist/assets/data-migration.html.a197b291.js +++ b/docs/.vuepress/dist/assets/data-migration.html.539393f0.js @@ -1,4 +1,4 @@ -import{_ as i,r as e,o as k,c as m,b as t,w as a,a as n,F as b,e as p,d as s}from"./app.cfdf84e7.js";var d="/assets/pav1.1b0417ca.png",f="/assets/pav2.1ef612b4.png";const _={},y=p('

Migrieren eines Programmdatenkontos

Wie k\xF6nnen Sie die Datenkonten eines Programms migrieren?

Wenn Sie ein Programm erstellen, wird jedes damit vrkn\xFCpfte Datenkonto eine spezifische Struktur haben. Wenn Sie jemals ein Programm abgeleitetes Konto aktualisieren m\xF6chten, haben Sie am Ende eine Menge von \xFCbrig gebliebenen programmabgeleiteten Konten mit der alten Struktur.

Mit der Kontoversionierung k\xF6nnen Sie Ihre alten Konten auf upgraden die neue Struktur.

Note

Dies ist nur eine von vielen M\xF6glichkeiten, Daten in Program Owned Accounts (POA) zu migrieren.

Szenario

Um unsere Kontodaten zu versionieren und zu migrieren, stellen wir f\xFCr jedes Konto (Account) jeweils eine ID bereit. Diese ID erm\xF6glicht es uns, die Kontoversion dann zu identifizieren wenn wir es an das Programm \xFCbergeben und behandeln das Konto somit als korrekt.

Nehmen Sie den folgenden Kontostand und das folgende Programm:

Program Account v1',9),w=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"//! @brief account_state manages account data"),s(` +import{_ as i,r as e,o as k,c as m,b as t,w as a,a as n,F as b,e as p,d as s}from"./app.2fbb9e96.js";var d="/assets/pav1.1b0417ca.png",f="/assets/pav2.1ef612b4.png";const _={},y=p('

Migrieren eines Programmdatenkontos

Wie k\xF6nnen Sie die Datenkonten eines Programms migrieren?

Wenn Sie ein Programm erstellen, wird jedes damit vrkn\xFCpfte Datenkonto eine spezifische Struktur haben. Wenn Sie jemals ein Programm abgeleitetes Konto aktualisieren m\xF6chten, haben Sie am Ende eine Menge von \xFCbrig gebliebenen programmabgeleiteten Konten mit der alten Struktur.

Mit der Kontoversionierung k\xF6nnen Sie Ihre alten Konten auf upgraden die neue Struktur.

Note

Dies ist nur eine von vielen M\xF6glichkeiten, Daten in Program Owned Accounts (POA) zu migrieren.

Szenario

Um unsere Kontodaten zu versionieren und zu migrieren, stellen wir f\xFCr jedes Konto (Account) jeweils eine ID bereit. Diese ID erm\xF6glicht es uns, die Kontoversion dann zu identifizieren wenn wir es an das Programm \xFCbergeben und behandeln das Konto somit als korrekt.

Nehmen Sie den folgenden Kontostand und das folgende Programm:

Program Account v1',9),w=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"//! @brief account_state manages account data"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("arrayref"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),s("array_ref"),n("span",{class:"token punctuation"},","),s(" array_refs"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("borsh"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"BorshDeserialize"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"BorshSerialize"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` diff --git a/docs/.vuepress/dist/assets/data-migration.html.14bc1e29.js b/docs/.vuepress/dist/assets/data-migration.html.66f586f5.js similarity index 99% rename from docs/.vuepress/dist/assets/data-migration.html.14bc1e29.js rename to docs/.vuepress/dist/assets/data-migration.html.66f586f5.js index 4278cf416..50de803a2 100644 --- a/docs/.vuepress/dist/assets/data-migration.html.14bc1e29.js +++ b/docs/.vuepress/dist/assets/data-migration.html.66f586f5.js @@ -1,4 +1,4 @@ -import{_ as i,r as e,o as k,c as m,b as t,w as a,a as n,F as b,e as p,d as s}from"./app.cfdf84e7.js";var d="/assets/pav1.1b0417ca.png",_="/assets/pav2.1ef612b4.png";const f={},y=p('

Migrating a Programs Data Accounts

\u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 migrate program's data accounts \u0E44\u0E14\u0E49\u0E22\u0E31\u0E07\u0E44\u0E07?

\u0E40\u0E27\u0E25\u0E32\u0E17\u0E35\u0E48\u0E40\u0E23\u0E32\u0E2A\u0E23\u0E49\u0E32\u0E07 program \u0E02\u0E36\u0E49\u0E19\u0E21\u0E32 \u0E41\u0E15\u0E48\u0E25\u0E30 data account \u0E17\u0E35\u0E48\u0E40\u0E01\u0E35\u0E48\u0E22\u0E27\u0E02\u0E49\u0E2D\u0E07 (associated) \u0E01\u0E31\u0E1A program \u0E08\u0E30\u0E21\u0E35 data structure \u0E17\u0E35\u0E48\u0E15\u0E32\u0E22\u0E15\u0E31\u0E27. \u0E41\u0E25\u0E49\u0E27\u0E16\u0E49\u0E32\u0E40\u0E23\u0E32\u0E15\u0E49\u0E2D\u0E07\u0E01\u0E32\u0E23\u0E17\u0E35\u0E48\u0E08\u0E30 upgrade program derived account \u0E2A\u0E38\u0E14\u0E17\u0E49\u0E32\u0E22\u0E40\u0E23\u0E32\u0E08\u0E30\u0E21\u0E35 program derived accounts \u0E17\u0E35\u0E48\u0E40\u0E1B\u0E47\u0E19 structure \u0E40\u0E01\u0E48\u0E32\u0E40\u0E2B\u0E25\u0E37\u0E2D\u0E17\u0E34\u0E49\u0E07\u0E44\u0E27\u0E49\u0E2D\u0E22\u0E39\u0E48\u0E08\u0E33\u0E19\u0E27\u0E19\u0E2B\u0E19\u0E36\u0E48\u0E07

\u0E41\u0E15\u0E48\u0E16\u0E49\u0E32\u0E40\u0E23\u0E32\u0E43\u0E0A\u0E49\u0E27\u0E34\u0E18\u0E35 account versioning, \u0E40\u0E23\u0E32\u0E08\u0E30\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 upgrade accounts \u0E40\u0E01\u0E48\u0E32\u0E44\u0E1B\u0E40\u0E1B\u0E47\u0E19 structure \u0E43\u0E2B\u0E21\u0E48\u0E44\u0E14\u0E49

Note

\u0E19\u0E35\u0E48\u0E40\u0E1B\u0E47\u0E19\u0E40\u0E1E\u0E35\u0E22\u0E07\u0E2B\u0E19\u0E36\u0E48\u0E07\u0E43\u0E19\u0E2B\u0E25\u0E32\u0E22\u0E27\u0E34\u0E18\u0E35\u0E43\u0E19\u0E01\u0E32\u0E23\u0E17\u0E33 migration \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A Program Owned Accounts (POA).

\u0E2A\u0E16\u0E32\u0E19\u0E01\u0E32\u0E23\u0E13\u0E4C (Scenario)

\u0E01\u0E32\u0E23\u0E08\u0E30\u0E17\u0E33 version \u0E41\u0E25\u0E30 migrate account data \u0E40\u0E23\u0E32\u0E08\u0E30\u0E15\u0E49\u0E2D\u0E07\u0E40\u0E15\u0E23\u0E35\u0E22\u0E21 id \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E41\u0E15\u0E48\u0E25\u0E30 account. \u0E0B\u0E36\u0E48\u0E07 id \u0E40\u0E2B\u0E25\u0E48\u0E32\u0E19\u0E35\u0E49\u0E08\u0E30\u0E0A\u0E48\u0E27\u0E22\u0E43\u0E2B\u0E49\u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E1A\u0E48\u0E07\u0E1A\u0E2D\u0E01 account version \u0E44\u0E14\u0E49\u0E40\u0E27\u0E25\u0E32\u0E17\u0E35\u0E48\u0E40\u0E23\u0E32\u0E2A\u0E48\u0E07\u0E21\u0E31\u0E19\u0E40\u0E02\u0E49\u0E32\u0E44\u0E1B\u0E43\u0E19 program, \u0E41\u0E25\u0E30\u0E17\u0E33\u0E43\u0E2B\u0E49\u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E08\u0E31\u0E14\u0E01\u0E32\u0E23 account \u0E44\u0E14\u0E49\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07

\u0E25\u0E2D\u0E07\u0E14\u0E39 account state \u0E41\u0E25\u0E30 program \u0E14\u0E49\u0E32\u0E19\u0E25\u0E48\u0E32\u0E07\u0E19\u0E35\u0E49:

Program Account v1',9),w=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"//! @brief account_state manages account data"),s(` +import{_ as i,r as e,o as k,c as m,b as t,w as a,a as n,F as b,e as p,d as s}from"./app.2fbb9e96.js";var d="/assets/pav1.1b0417ca.png",_="/assets/pav2.1ef612b4.png";const f={},y=p('

Migrating a Programs Data Accounts

\u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 migrate program's data accounts \u0E44\u0E14\u0E49\u0E22\u0E31\u0E07\u0E44\u0E07?

\u0E40\u0E27\u0E25\u0E32\u0E17\u0E35\u0E48\u0E40\u0E23\u0E32\u0E2A\u0E23\u0E49\u0E32\u0E07 program \u0E02\u0E36\u0E49\u0E19\u0E21\u0E32 \u0E41\u0E15\u0E48\u0E25\u0E30 data account \u0E17\u0E35\u0E48\u0E40\u0E01\u0E35\u0E48\u0E22\u0E27\u0E02\u0E49\u0E2D\u0E07 (associated) \u0E01\u0E31\u0E1A program \u0E08\u0E30\u0E21\u0E35 data structure \u0E17\u0E35\u0E48\u0E15\u0E32\u0E22\u0E15\u0E31\u0E27. \u0E41\u0E25\u0E49\u0E27\u0E16\u0E49\u0E32\u0E40\u0E23\u0E32\u0E15\u0E49\u0E2D\u0E07\u0E01\u0E32\u0E23\u0E17\u0E35\u0E48\u0E08\u0E30 upgrade program derived account \u0E2A\u0E38\u0E14\u0E17\u0E49\u0E32\u0E22\u0E40\u0E23\u0E32\u0E08\u0E30\u0E21\u0E35 program derived accounts \u0E17\u0E35\u0E48\u0E40\u0E1B\u0E47\u0E19 structure \u0E40\u0E01\u0E48\u0E32\u0E40\u0E2B\u0E25\u0E37\u0E2D\u0E17\u0E34\u0E49\u0E07\u0E44\u0E27\u0E49\u0E2D\u0E22\u0E39\u0E48\u0E08\u0E33\u0E19\u0E27\u0E19\u0E2B\u0E19\u0E36\u0E48\u0E07

\u0E41\u0E15\u0E48\u0E16\u0E49\u0E32\u0E40\u0E23\u0E32\u0E43\u0E0A\u0E49\u0E27\u0E34\u0E18\u0E35 account versioning, \u0E40\u0E23\u0E32\u0E08\u0E30\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 upgrade accounts \u0E40\u0E01\u0E48\u0E32\u0E44\u0E1B\u0E40\u0E1B\u0E47\u0E19 structure \u0E43\u0E2B\u0E21\u0E48\u0E44\u0E14\u0E49

Note

\u0E19\u0E35\u0E48\u0E40\u0E1B\u0E47\u0E19\u0E40\u0E1E\u0E35\u0E22\u0E07\u0E2B\u0E19\u0E36\u0E48\u0E07\u0E43\u0E19\u0E2B\u0E25\u0E32\u0E22\u0E27\u0E34\u0E18\u0E35\u0E43\u0E19\u0E01\u0E32\u0E23\u0E17\u0E33 migration \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A Program Owned Accounts (POA).

\u0E2A\u0E16\u0E32\u0E19\u0E01\u0E32\u0E23\u0E13\u0E4C (Scenario)

\u0E01\u0E32\u0E23\u0E08\u0E30\u0E17\u0E33 version \u0E41\u0E25\u0E30 migrate account data \u0E40\u0E23\u0E32\u0E08\u0E30\u0E15\u0E49\u0E2D\u0E07\u0E40\u0E15\u0E23\u0E35\u0E22\u0E21 id \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E41\u0E15\u0E48\u0E25\u0E30 account. \u0E0B\u0E36\u0E48\u0E07 id \u0E40\u0E2B\u0E25\u0E48\u0E32\u0E19\u0E35\u0E49\u0E08\u0E30\u0E0A\u0E48\u0E27\u0E22\u0E43\u0E2B\u0E49\u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E1A\u0E48\u0E07\u0E1A\u0E2D\u0E01 account version \u0E44\u0E14\u0E49\u0E40\u0E27\u0E25\u0E32\u0E17\u0E35\u0E48\u0E40\u0E23\u0E32\u0E2A\u0E48\u0E07\u0E21\u0E31\u0E19\u0E40\u0E02\u0E49\u0E32\u0E44\u0E1B\u0E43\u0E19 program, \u0E41\u0E25\u0E30\u0E17\u0E33\u0E43\u0E2B\u0E49\u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E08\u0E31\u0E14\u0E01\u0E32\u0E23 account \u0E44\u0E14\u0E49\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07

\u0E25\u0E2D\u0E07\u0E14\u0E39 account state \u0E41\u0E25\u0E30 program \u0E14\u0E49\u0E32\u0E19\u0E25\u0E48\u0E32\u0E07\u0E19\u0E35\u0E49:

Program Account v1',9),w=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"//! @brief account_state manages account data"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("arrayref"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),s("array_ref"),n("span",{class:"token punctuation"},","),s(" array_refs"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("borsh"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"BorshDeserialize"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"BorshSerialize"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` diff --git a/docs/.vuepress/dist/assets/data-migration.html.cfc60b01.js b/docs/.vuepress/dist/assets/data-migration.html.70e1853f.js similarity index 99% rename from docs/.vuepress/dist/assets/data-migration.html.cfc60b01.js rename to docs/.vuepress/dist/assets/data-migration.html.70e1853f.js index 6e75ccf5d..0deac374c 100644 --- a/docs/.vuepress/dist/assets/data-migration.html.cfc60b01.js +++ b/docs/.vuepress/dist/assets/data-migration.html.70e1853f.js @@ -1,4 +1,4 @@ -import{_ as i,r as e,o as k,c as m,b as t,w as a,a as n,F as b,e as p,d as s}from"./app.cfdf84e7.js";var d="/assets/pav1.1b0417ca.png",f="/assets/pav2.1ef612b4.png";const _={},y=p('

Migration des Comptes de Donn\xE9es d'un Programme

Comment migrer les comptes de donn\xE9es d'un programme ?

Lorsque vous cr\xE9ez un programme, chaque compte de donn\xE9es associ\xE9 \xE0 celui-ci aura une structure de donn\xE9es sp\xE9cifique. Si vous devez un jour mettre \xE0 jour un compte d\xE9riv\xE9 de programme, vous vous retrouverez avec plusieurs comptes d\xE9riv\xE9s de programme restants avec l'ancienne structure.

Gr\xE2ce \xE0 la gestion des versions de comptes, vous pouvez mettre vos anciens comptes \xE0 jour vers la nouvelle structure.

Remarque

Ce n'est qu'une des nombreuses fa\xE7ons de migrer des donn\xE9es de comptes.

Sc\xE9nario

Pour versionner et migrer les donn\xE9es de nos comptes, nous allons fournir un id pour chaque compte. Cet id nous permettra d'identifier la version du compte lorsque nous le transmettrons au programme, et ainsi de le traiter correctement.

Prenez l'\xE9tat du compte et le programme suivants :

Program Account v1',9),w=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"//! @brief account_state manages account data"),s(` +import{_ as i,r as e,o as k,c as m,b as t,w as a,a as n,F as b,e as p,d as s}from"./app.2fbb9e96.js";var d="/assets/pav1.1b0417ca.png",f="/assets/pav2.1ef612b4.png";const _={},y=p('

Migration des Comptes de Donn\xE9es d'un Programme

Comment migrer les comptes de donn\xE9es d'un programme ?

Lorsque vous cr\xE9ez un programme, chaque compte de donn\xE9es associ\xE9 \xE0 celui-ci aura une structure de donn\xE9es sp\xE9cifique. Si vous devez un jour mettre \xE0 jour un compte d\xE9riv\xE9 de programme, vous vous retrouverez avec plusieurs comptes d\xE9riv\xE9s de programme restants avec l'ancienne structure.

Gr\xE2ce \xE0 la gestion des versions de comptes, vous pouvez mettre vos anciens comptes \xE0 jour vers la nouvelle structure.

Remarque

Ce n'est qu'une des nombreuses fa\xE7ons de migrer des donn\xE9es de comptes.

Sc\xE9nario

Pour versionner et migrer les donn\xE9es de nos comptes, nous allons fournir un id pour chaque compte. Cet id nous permettra d'identifier la version du compte lorsque nous le transmettrons au programme, et ainsi de le traiter correctement.

Prenez l'\xE9tat du compte et le programme suivants :

Program Account v1',9),w=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"//! @brief account_state manages account data"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("arrayref"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),s("array_ref"),n("span",{class:"token punctuation"},","),s(" array_refs"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("borsh"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"BorshDeserialize"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"BorshSerialize"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` diff --git a/docs/.vuepress/dist/assets/data-migration.html.6f422d8c.js b/docs/.vuepress/dist/assets/data-migration.html.846f2758.js similarity index 99% rename from docs/.vuepress/dist/assets/data-migration.html.6f422d8c.js rename to docs/.vuepress/dist/assets/data-migration.html.846f2758.js index 25ec749d0..23f995233 100644 --- a/docs/.vuepress/dist/assets/data-migration.html.6f422d8c.js +++ b/docs/.vuepress/dist/assets/data-migration.html.846f2758.js @@ -1,4 +1,4 @@ -import{_ as t,r as p,o,c as r,a as n,b as s,F as c,e as l,d as e}from"./app.cfdf84e7.js";var i="/assets/pav1.1b0417ca.png",u="/assets/pav2.1ef612b4.png";const k={},m=l('

Migrating a Programs Data Accounts (Programlar\u0131n Data Account\u2019lar\u0131n\u0131 Ta\u015F\u0131ma)

How can you migrate a program's data accounts? (Programlar\u0131n veri account\u2019lar\u0131 nas\u0131l ta\u015F\u0131n\u0131r)

Bir program olu\u015Fturdu\u011Funuzda, o programla ili\u015Fkili her bir veri account'\u0131n\u0131n belirli bir veri yap\u0131s\u0131 olacakt\u0131r. Programdan t\xFCretilen bir account'\u0131 y\xFCkseltmeniz gerekirse, eski yap\u0131ya sahip bir s\xFCr\xFC programdan t\xFCretilmi\u015F account kal\u0131r.

Hesap versiyonlama ile eski account'lar\u0131n\u0131z\u0131 yeni yap\u0131ya y\xFCkseltebilirsiniz.

:::Not Bu, Programa Ait Hesaplarda (POA) verileri ta\u015F\u0131man\u0131n bir\xE7ok yolundan yaln\u0131zca biridir. :::

Scenario (Senaryo)

Hesap verilerimizi s\xFCr\xFCmlendirmek ve ta\u015F\u0131mak i\xE7in her account i\xE7in bir kimlik sa\u011Flayaca\u011F\u0131z. Bu kimlik, programa aktard\u0131\u011F\u0131m\u0131zda account s\xFCr\xFCm\xFCn\xFC tan\u0131mlamam\u0131z\u0131 ve b\xF6ylece account'\u0131 do\u011Fru \u015Fekilde i\u015Flememizi sa\u011Flayacakt\u0131r.

A\u015Fa\u011F\u0131daki account durumunu ve program\u0131n\u0131 alal\u0131m:

Program Account v1
#[derive(BorshDeserialize, BorshSerialize, Debug, Default, PartialEq)]
+import{_ as t,r as p,o,c as r,a as n,b as s,F as c,e as l,d as e}from"./app.2fbb9e96.js";var i="/assets/pav1.1b0417ca.png",u="/assets/pav2.1ef612b4.png";const k={},m=l('

Migrating a Programs Data Accounts (Programlar\u0131n Data Account\u2019lar\u0131n\u0131 Ta\u015F\u0131ma)

How can you migrate a program's data accounts? (Programlar\u0131n veri account\u2019lar\u0131 nas\u0131l ta\u015F\u0131n\u0131r)

Bir program olu\u015Fturdu\u011Funuzda, o programla ili\u015Fkili her bir veri account'\u0131n\u0131n belirli bir veri yap\u0131s\u0131 olacakt\u0131r. Programdan t\xFCretilen bir account'\u0131 y\xFCkseltmeniz gerekirse, eski yap\u0131ya sahip bir s\xFCr\xFC programdan t\xFCretilmi\u015F account kal\u0131r.

Hesap versiyonlama ile eski account'lar\u0131n\u0131z\u0131 yeni yap\u0131ya y\xFCkseltebilirsiniz.

:::Not Bu, Programa Ait Hesaplarda (POA) verileri ta\u015F\u0131man\u0131n bir\xE7ok yolundan yaln\u0131zca biridir. :::

Scenario (Senaryo)

Hesap verilerimizi s\xFCr\xFCmlendirmek ve ta\u015F\u0131mak i\xE7in her account i\xE7in bir kimlik sa\u011Flayaca\u011F\u0131z. Bu kimlik, programa aktard\u0131\u011F\u0131m\u0131zda account s\xFCr\xFCm\xFCn\xFC tan\u0131mlamam\u0131z\u0131 ve b\xF6ylece account'\u0131 do\u011Fru \u015Fekilde i\u015Flememizi sa\u011Flayacakt\u0131r.

A\u015Fa\u011F\u0131daki account durumunu ve program\u0131n\u0131 alal\u0131m:

Program Account v1
#[derive(BorshDeserialize, BorshSerialize, Debug, Default, PartialEq)]
 pub struct AccountContentCurrent {
     pub somevalue: u64,
 }
diff --git a/docs/.vuepress/dist/assets/data-migration.html.3477b282.js b/docs/.vuepress/dist/assets/data-migration.html.c8f4c967.js
similarity index 99%
rename from docs/.vuepress/dist/assets/data-migration.html.3477b282.js
rename to docs/.vuepress/dist/assets/data-migration.html.c8f4c967.js
index a4cc27ea1..3d79decd0 100644
--- a/docs/.vuepress/dist/assets/data-migration.html.3477b282.js
+++ b/docs/.vuepress/dist/assets/data-migration.html.c8f4c967.js
@@ -1,4 +1,4 @@
-import{_ as i,r as e,o as k,c as m,b as t,w as a,a as n,F as b,e as p,d as s}from"./app.cfdf84e7.js";var d="/assets/pav1.1b0417ca.png",f="/assets/pav2.1ef612b4.png";const _={},y=p('

Migrating a Programs Data Accounts

How can you migrate a program's data accounts?

When you create a program, each data account associated with that program will have a specific data structure. If you ever need to upgrade a program derived account, you end up having a bunch of leftover program derived accounts with the old structure.

With account versioning, you can upgrade your old accounts to the new structure.

Note

This is only one of many ways to migrate data in Program Owned Accounts (POA).

Scenario

To version and migrate our account data, we will be providing an id for each account. This id will allow us to identify the account version when we pass it to the program, and thus handle the account correctly.

Take the following account state and program:

Program Account v1',9),w=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"//! @brief account_state manages account data"),s(` +import{_ as i,r as e,o as k,c as m,b as t,w as a,a as n,F as b,e as p,d as s}from"./app.2fbb9e96.js";var d="/assets/pav1.1b0417ca.png",f="/assets/pav2.1ef612b4.png";const _={},y=p('

Migrating a Programs Data Accounts

How can you migrate a program's data accounts?

When you create a program, each data account associated with that program will have a specific data structure. If you ever need to upgrade a program derived account, you end up having a bunch of leftover program derived accounts with the old structure.

With account versioning, you can upgrade your old accounts to the new structure.

Note

This is only one of many ways to migrate data in Program Owned Accounts (POA).

Scenario

To version and migrate our account data, we will be providing an id for each account. This id will allow us to identify the account version when we pass it to the program, and thus handle the account correctly.

Take the following account state and program:

Program Account v1',9),w=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"//! @brief account_state manages account data"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("arrayref"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),s("array_ref"),n("span",{class:"token punctuation"},","),s(" array_refs"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("borsh"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"BorshDeserialize"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"BorshSerialize"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` diff --git a/docs/.vuepress/dist/assets/data-migration.html.c6889026.js b/docs/.vuepress/dist/assets/data-migration.html.e64daf12.js similarity index 99% rename from docs/.vuepress/dist/assets/data-migration.html.c6889026.js rename to docs/.vuepress/dist/assets/data-migration.html.e64daf12.js index 9e6ca3e14..515bd0332 100644 --- a/docs/.vuepress/dist/assets/data-migration.html.c6889026.js +++ b/docs/.vuepress/dist/assets/data-migration.html.e64daf12.js @@ -1,4 +1,4 @@ -import{_ as i,r as e,o as k,c as m,b as t,w as a,a as n,F as b,e as p,d as s}from"./app.cfdf84e7.js";var d="/assets/pav1.1b0417ca.png",_="/assets/pav2.1ef612b4.png";const f={},y=p('

Migrating a Programs Data Accounts

How can you migrate a program's data accounts?

\uB2F9\uC2E0\uC774 Program\uC744 \uC0DD\uC131\uD560 \uB54C, \uADF8 Program\uACFC \uC5F0\uAD00\uB41C \uAC01\uAC01\uC758 Data Account\uB294 \uD2B9\uC218\uD55C Data \uAD6C\uC870\uB97C \uAC00\uC9C8 \uAC83\uC785\uB2C8\uB2E4. \uB9CC\uC57D \uB2F9\uC2E0\uC774 Program Derived Account\uB97C \uC5C5\uADF8\uB808\uC774\uB4DC \uD560 \uD544\uC694\uAC00 \uC788\uB2E4\uBA74, \uB2F9\uC2E0\uC740 \uACB0\uAD6D \uC774\uC804 \uAD6C\uC8FC\uB97C \uAC16\uACE0 \uB0A8\uC544 \uC788\uB294 \uB2E4\uC218\uC758 Program Derived Account\uB97C \uAC16\uAC8C \uB420 \uAC83\uC785\uB2C8\uB2E4.

Account versioning\uC744 \uD1B5\uD574 \uB2F9\uC2E0\uC740 \uC774\uC804 Account\uB4E4\uC744 \uC0C8\uB85C\uC6B4 \uAD6C\uC870\uB85C \uC5C5\uADF8\uB808\uC774\uB4DC \uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.

Note

\uC774\uAC83\uC740 \uB2E8\uC9C0 Program Owned Account(POA)\uB4E4\uC5D0 \uC788\uB294 \uB370\uC774\uD130\uB97C \uC774\uAD00\uD558\uB294 \uB9CE\uC740 \uBC29\uBC95\uB4E4 \uC911 \uD558\uB098\uC77C \uBFD0\uC785\uB2C8\uB2E4.

Scenario

\uC6B0\uB9AC\uC758 Account Data\uC5D0 version\uC744 \uBA85\uC2DC\uD558\uACE0 \uC774\uAD00\uD558\uAE30 \uC704\uD574\uC11C, \uC6B0\uB9AC\uB294 \uAC01 Account\uC5D0 \uB300\uD55C \uD558\uB098\uC758 id\uB97C \uBC1B\uC744 \uAC83\uC785\uB2C8\uB2E4. \uC774 id\uB294 Account\uC758 version\uC744 \uC2DD\uBCC4\uD560 \uC218 \uC788\uAC8C \uD574\uC90D\uB2C8\uB2E4. \uC6B0\uB9AC\uAC00 id\uB97C Program\uC5D0 \uBCF4\uB0C4\uC73C\uB85C\uC368 Account\uB97C \uC815\uD655\uD788 \uB2E4\uB8F0 \uC218 \uC788\uC2B5\uB2C8\uB2E4.

\uC544\uB798\uB294 Account \uC0C1\uD0DC\uC640 Program\uC744 \uB098\uD0C0\uB0C5\uB2C8\uB2E4:

Program Account v1',9),w=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"//! @brief account_state manages account data"),s(` +import{_ as i,r as e,o as k,c as m,b as t,w as a,a as n,F as b,e as p,d as s}from"./app.2fbb9e96.js";var d="/assets/pav1.1b0417ca.png",_="/assets/pav2.1ef612b4.png";const f={},y=p('

Migrating a Programs Data Accounts

How can you migrate a program's data accounts?

\uB2F9\uC2E0\uC774 Program\uC744 \uC0DD\uC131\uD560 \uB54C, \uADF8 Program\uACFC \uC5F0\uAD00\uB41C \uAC01\uAC01\uC758 Data Account\uB294 \uD2B9\uC218\uD55C Data \uAD6C\uC870\uB97C \uAC00\uC9C8 \uAC83\uC785\uB2C8\uB2E4. \uB9CC\uC57D \uB2F9\uC2E0\uC774 Program Derived Account\uB97C \uC5C5\uADF8\uB808\uC774\uB4DC \uD560 \uD544\uC694\uAC00 \uC788\uB2E4\uBA74, \uB2F9\uC2E0\uC740 \uACB0\uAD6D \uC774\uC804 \uAD6C\uC8FC\uB97C \uAC16\uACE0 \uB0A8\uC544 \uC788\uB294 \uB2E4\uC218\uC758 Program Derived Account\uB97C \uAC16\uAC8C \uB420 \uAC83\uC785\uB2C8\uB2E4.

Account versioning\uC744 \uD1B5\uD574 \uB2F9\uC2E0\uC740 \uC774\uC804 Account\uB4E4\uC744 \uC0C8\uB85C\uC6B4 \uAD6C\uC870\uB85C \uC5C5\uADF8\uB808\uC774\uB4DC \uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.

Note

\uC774\uAC83\uC740 \uB2E8\uC9C0 Program Owned Account(POA)\uB4E4\uC5D0 \uC788\uB294 \uB370\uC774\uD130\uB97C \uC774\uAD00\uD558\uB294 \uB9CE\uC740 \uBC29\uBC95\uB4E4 \uC911 \uD558\uB098\uC77C \uBFD0\uC785\uB2C8\uB2E4.

Scenario

\uC6B0\uB9AC\uC758 Account Data\uC5D0 version\uC744 \uBA85\uC2DC\uD558\uACE0 \uC774\uAD00\uD558\uAE30 \uC704\uD574\uC11C, \uC6B0\uB9AC\uB294 \uAC01 Account\uC5D0 \uB300\uD55C \uD558\uB098\uC758 id\uB97C \uBC1B\uC744 \uAC83\uC785\uB2C8\uB2E4. \uC774 id\uB294 Account\uC758 version\uC744 \uC2DD\uBCC4\uD560 \uC218 \uC788\uAC8C \uD574\uC90D\uB2C8\uB2E4. \uC6B0\uB9AC\uAC00 id\uB97C Program\uC5D0 \uBCF4\uB0C4\uC73C\uB85C\uC368 Account\uB97C \uC815\uD655\uD788 \uB2E4\uB8F0 \uC218 \uC788\uC2B5\uB2C8\uB2E4.

\uC544\uB798\uB294 Account \uC0C1\uD0DC\uC640 Program\uC744 \uB098\uD0C0\uB0C5\uB2C8\uB2E4:

Program Account v1',9),w=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"//! @brief account_state manages account data"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("arrayref"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),s("array_ref"),n("span",{class:"token punctuation"},","),s(" array_refs"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("borsh"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"BorshDeserialize"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"BorshSerialize"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` diff --git a/docs/.vuepress/dist/assets/data-migration.html.a88f0c92.js b/docs/.vuepress/dist/assets/data-migration.html.e85fb8c1.js similarity index 99% rename from docs/.vuepress/dist/assets/data-migration.html.a88f0c92.js rename to docs/.vuepress/dist/assets/data-migration.html.e85fb8c1.js index 314df73c5..8ba38aebb 100644 --- a/docs/.vuepress/dist/assets/data-migration.html.a88f0c92.js +++ b/docs/.vuepress/dist/assets/data-migration.html.e85fb8c1.js @@ -1,4 +1,4 @@ -import{_ as i,r as e,o as k,c as m,b as t,w as a,a as n,F as b,e as p,d as s}from"./app.cfdf84e7.js";var d="/assets/pav1.1b0417ca.png",_="/assets/pav2.1ef612b4.png";const f={},y=p('

Migraci\xF3n de cuentas de datos de programas

\xBFC\xF3mo se pueden migrar las cuentas de datos de un programa?

Cuando crea un programa, cada cuenta de datos asociada con ese programa tendr\xE1 una estructura de datos espec\xEDfica. Si alguna vez necesitas actualizar una cuenta derivada del programa, puedes terminar teniendo un mont\xF3n de inconsistencias de cuentas derivadas del programa con la estructura anterior.

Con el control de versiones de la cuenta, puede actualizar sus cuentas antiguas a la nueva estructura.

Nota

Esta es solo una de las muchas formas de migrar datos en Cuentas de propiedad del programa (POA).

Escenario

Para versionar y migrar los datos de nuestra cuenta, proporcionaremos un id para cada cuenta. Este identificador nos permitir\xE1 identificar la versi\xF3n de la cuenta cuando se lo pasamos al programa, y \u200B\u200Bas\xED manejar correctamente la cuenta.

Tomemos como ejemplo el siguiente estado de cuenta y programa:

Program Account v1',9),w=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"//! @brief account_state manages account data"),s(` +import{_ as i,r as e,o as k,c as m,b as t,w as a,a as n,F as b,e as p,d as s}from"./app.2fbb9e96.js";var d="/assets/pav1.1b0417ca.png",_="/assets/pav2.1ef612b4.png";const f={},y=p('

Migraci\xF3n de cuentas de datos de programas

\xBFC\xF3mo se pueden migrar las cuentas de datos de un programa?

Cuando crea un programa, cada cuenta de datos asociada con ese programa tendr\xE1 una estructura de datos espec\xEDfica. Si alguna vez necesitas actualizar una cuenta derivada del programa, puedes terminar teniendo un mont\xF3n de inconsistencias de cuentas derivadas del programa con la estructura anterior.

Con el control de versiones de la cuenta, puede actualizar sus cuentas antiguas a la nueva estructura.

Nota

Esta es solo una de las muchas formas de migrar datos en Cuentas de propiedad del programa (POA).

Escenario

Para versionar y migrar los datos de nuestra cuenta, proporcionaremos un id para cada cuenta. Este identificador nos permitir\xE1 identificar la versi\xF3n de la cuenta cuando se lo pasamos al programa, y \u200B\u200Bas\xED manejar correctamente la cuenta.

Tomemos como ejemplo el siguiente estado de cuenta y programa:

Program Account v1',9),w=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"//! @brief account_state manages account data"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("arrayref"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),s("array_ref"),n("span",{class:"token punctuation"},","),s(" array_refs"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("borsh"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"BorshDeserialize"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"BorshSerialize"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` diff --git a/docs/.vuepress/dist/assets/data-migration.html.0210e747.js b/docs/.vuepress/dist/assets/data-migration.html.f96be103.js similarity index 99% rename from docs/.vuepress/dist/assets/data-migration.html.0210e747.js rename to docs/.vuepress/dist/assets/data-migration.html.f96be103.js index 16d9f86ac..d6cc4ab1e 100644 --- a/docs/.vuepress/dist/assets/data-migration.html.0210e747.js +++ b/docs/.vuepress/dist/assets/data-migration.html.f96be103.js @@ -1,4 +1,4 @@ -import{_ as i,r as e,o as k,c as m,b as t,w as a,a as n,F as b,e as p,d as s}from"./app.cfdf84e7.js";var d="/assets/pav1.1b0417ca.png",_="/assets/pav2.1ef612b4.png";const y={},f=p('

Melakukan migrasi Akun Data dari sebuah Program

Bagaimana cara melakukan migrasi akun data sebuah program?

Saat Anda membuat program, setiap akun data yang berkaitan dengan program tersebut akan memiliki sebuah struktur data tertentu. Jika Anda perlu melakukan upgrade terhadap akun yang dihasilkan oleh program, Anda kemudian akan memiliki banyak sisa akun hasil program dengan struktur yang lama.

Dengan account versioning, Anda dapat memperbarui akun lama Anda ke struktur baru.

Catatan

Ini hanyalah salah satu dari banyak cara untuk melakukan migrasi data di Program Owned Accounts (POA).

Skenario

Untuk mencatat versi dan melakukan migrasi data akun kita, kita akan memberikan id untuk masing-masing akun. Id ini akan memungkinkan kita untuk mengidentifikasi versi akun ketika kita meneruskannya ke program, dan dengan demikian menangani akun tersebut dengan benar.

Mari kita ambil contoh status akun dan program berikut:

Program Account v1',9),g=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"//! @brief account_state manages account data"),s(` +import{_ as i,r as e,o as k,c as m,b as t,w as a,a as n,F as b,e as p,d as s}from"./app.2fbb9e96.js";var d="/assets/pav1.1b0417ca.png",_="/assets/pav2.1ef612b4.png";const y={},f=p('

Melakukan migrasi Akun Data dari sebuah Program

Bagaimana cara melakukan migrasi akun data sebuah program?

Saat Anda membuat program, setiap akun data yang berkaitan dengan program tersebut akan memiliki sebuah struktur data tertentu. Jika Anda perlu melakukan upgrade terhadap akun yang dihasilkan oleh program, Anda kemudian akan memiliki banyak sisa akun hasil program dengan struktur yang lama.

Dengan account versioning, Anda dapat memperbarui akun lama Anda ke struktur baru.

Catatan

Ini hanyalah salah satu dari banyak cara untuk melakukan migrasi data di Program Owned Accounts (POA).

Skenario

Untuk mencatat versi dan melakukan migrasi data akun kita, kita akan memberikan id untuk masing-masing akun. Id ini akan memungkinkan kita untuk mengidentifikasi versi akun ketika kita meneruskannya ke program, dan dengan demikian menangani akun tersebut dengan benar.

Mari kita ambil contoh status akun dan program berikut:

Program Account v1',9),g=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"//! @brief account_state manages account data"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("arrayref"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),s("array_ref"),n("span",{class:"token punctuation"},","),s(" array_refs"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("borsh"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"BorshDeserialize"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"BorshSerialize"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` diff --git a/docs/.vuepress/dist/assets/debugging-solana-programs.html.cec3cad7.js b/docs/.vuepress/dist/assets/debugging-solana-programs.html.00b68f5c.js similarity index 99% rename from docs/.vuepress/dist/assets/debugging-solana-programs.html.cec3cad7.js rename to docs/.vuepress/dist/assets/debugging-solana-programs.html.00b68f5c.js index 833518595..16c801a45 100644 --- a/docs/.vuepress/dist/assets/debugging-solana-programs.html.cec3cad7.js +++ b/docs/.vuepress/dist/assets/debugging-solana-programs.html.00b68f5c.js @@ -1,4 +1,4 @@ -import{_ as t,r as o,o as r,c as i,a as e,b as n,F as l,e as p,d as s}from"./app.cfdf84e7.js";const c={},u=p(`

Debugging Solana Programs

There are a number of options and supporting tools for testing and debugging a Solana program.

Facts

Fact Sheet

  • The crate solana-program-test enables use of bare bones local runtime where you can test and debug your program interactively (e.g. in vscode).
  • The crate solana-validator enables use of the solana-test-validator implementation for more robust testing that occurs on a local validator node. You can run from the editor but breakpoints in the program are ignored.
  • The CLI tool solana-test-validator runs and loads your program and processes transaction execution from command line Rust applications or Javascript/Typescript applications using web3.
  • For all the above, liberal use of msg! macro in your program is recommended at the start and then removing them as you test and ensure rock solid behavior. Remember that msg! consumes Compute Units which can eventually fail your program by hitting the Compute Unit budget caps.

The steps in the following sections use the solana-program-bpf-template. Clone that to your machine:

git clone git@github.com:mvines/solana-bpf-program-template.git
+import{_ as t,r as o,o as r,c as i,a as e,b as n,F as l,e as p,d as s}from"./app.2fbb9e96.js";const c={},u=p(`

Debugging Solana Programs

There are a number of options and supporting tools for testing and debugging a Solana program.

Facts

Fact Sheet

  • The crate solana-program-test enables use of bare bones local runtime where you can test and debug your program interactively (e.g. in vscode).
  • The crate solana-validator enables use of the solana-test-validator implementation for more robust testing that occurs on a local validator node. You can run from the editor but breakpoints in the program are ignored.
  • The CLI tool solana-test-validator runs and loads your program and processes transaction execution from command line Rust applications or Javascript/Typescript applications using web3.
  • For all the above, liberal use of msg! macro in your program is recommended at the start and then removing them as you test and ensure rock solid behavior. Remember that msg! consumes Compute Units which can eventually fail your program by hitting the Compute Unit budget caps.

The steps in the following sections use the solana-program-bpf-template. Clone that to your machine:

git clone git@github.com:mvines/solana-bpf-program-template.git
 cd solana-bpf-program-template
 code .
 

Runtime Testing and Debugging in editor

Open the file src/lib.rs

You'll see that the program is a pretty simple and basically just logs the content received by the program entrypoint function: process_instruction

  1. Go to the #[cfg(test)] section and click Run Tests. This will build the program and then execute the async fn test_transaction() test. You will see the log messages (simplified) in the vscode terminal below the source.
running 1 test
diff --git a/docs/.vuepress/dist/assets/debugging-solana-programs.html.8b1997bb.js b/docs/.vuepress/dist/assets/debugging-solana-programs.html.0682a445.js
similarity index 99%
rename from docs/.vuepress/dist/assets/debugging-solana-programs.html.8b1997bb.js
rename to docs/.vuepress/dist/assets/debugging-solana-programs.html.0682a445.js
index 4f7edcc12..ce8620022 100644
--- a/docs/.vuepress/dist/assets/debugging-solana-programs.html.8b1997bb.js
+++ b/docs/.vuepress/dist/assets/debugging-solana-programs.html.0682a445.js
@@ -1,4 +1,4 @@
-import{_ as t,r as o,o as r,c as l,a,b as s,F as p,e as i,d as e}from"./app.cfdf84e7.js";const c={},d=i(`

Debugging Solana Programs

\u0E21\u0E35\u0E17\u0E32\u0E07\u0E40\u0E25\u0E37\u0E2D\u0E01 \u0E41\u0E25\u0E30\u0E40\u0E04\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E21\u0E37\u0E2D\u0E2A\u0E19\u0E31\u0E1A\u0E2A\u0E19\u0E38\u0E19\u0E21\u0E32\u0E01\u0E21\u0E32\u0E22\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E17\u0E14\u0E2A\u0E2D\u0E1A \u0E41\u0E25\u0E30 debugging Solana BPF program.

\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49

Fact Sheet

  • crate solana-program-test \u0E08\u0E30\u0E17\u0E33\u0E43\u0E2B\u0E49 local runtime \u0E02\u0E2D\u0E07\u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 test \u0E41\u0E25\u0E30 debug program \u0E44\u0E14\u0E49 (\u0E14\u0E49\u0E27\u0E22 vscode).
  • crate solana-validator \u0E08\u0E30\u0E17\u0E33\u0E43\u0E2B\u0E49 solana-test-validator \u0E01\u0E32\u0E23 test \u0E1A\u0E19 local validator node \u0E17\u0E33\u0E44\u0E14\u0E49\u0E14\u0E35\u0E02\u0E36\u0E49\u0E19 \u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 run \u0E08\u0E32\u0E01 editor \u0E44\u0E14\u0E49 \u0E41\u0E15\u0E48 breakpoints \u0E43\u0E19 program \u0E08\u0E30\u0E16\u0E39\u0E01\u0E21\u0E2D\u0E07\u0E02\u0E49\u0E32\u0E21\u0E44\u0E1B.
  • \u0E40\u0E04\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E21\u0E37\u0E2D CLI solana-test-validator runs, loads program \u0E41\u0E25\u0E30\u0E1B\u0E23\u0E30\u0E21\u0E27\u0E25\u0E1C\u0E25 transaction \u0E42\u0E14\u0E22\u0E17\u0E33\u0E07\u0E32\u0E19\u0E1C\u0E48\u0E32\u0E19 command line \u0E01\u0E31\u0E1A Rust applications \u0E2B\u0E23\u0E37\u0E2D Javascript/Typescript app \u0E42\u0E14\u0E22\u0E43\u0E0A\u0E49 web3.
  • \u0E17\u0E31\u0E49\u0E07\u0E2B\u0E21\u0E14\u0E17\u0E35\u0E48\u0E27\u0E48\u0E32\u0E21\u0E32 \u0E40\u0E23\u0E32\u0E41\u0E19\u0E30\u0E19\u0E33\u0E43\u0E2B\u0E49\u0E43\u0E0A\u0E49 macro msg! \u0E43\u0E19 program \u0E43\u0E19\u0E15\u0E2D\u0E19\u0E40\u0E23\u0E34\u0E48\u0E21 \u0E41\u0E25\u0E30\u0E40\u0E2D\u0E32\u0E2D\u0E2D\u0E2D\u0E01\u0E40\u0E21\u0E37\u0E48\u0E2D test \u0E41\u0E25\u0E30\u0E21\u0E31\u0E48\u0E19\u0E43\u0E08\u0E27\u0E48\u0E32\u0E17\u0E33\u0E07\u0E32\u0E19\u0E16\u0E39\u0E01\u0E41\u0E25\u0E49\u0E27\u0E41\u0E25\u0E49\u0E27 \u0E08\u0E33\u0E44\u0E27\u0E49\u0E27\u0E48\u0E32 msg! \u0E43\u0E0A\u0E49 Compute Units \u0E17\u0E35\u0E48\u0E17\u0E33\u0E43\u0E2B\u0E49 program \u0E25\u0E49\u0E21\u0E40\u0E2B\u0E25\u0E27\u0E44\u0E14\u0E49\u0E16\u0E49\u0E32\u0E43\u0E0A\u0E49 Compute Unit \u0E40\u0E01\u0E34\u0E19\u0E04\u0E48\u0E32\u0E17\u0E35\u0E48\u0E01\u0E33\u0E2B\u0E19\u0E14\u0E44\u0E27\u0E49.

\u0E02\u0E31\u0E49\u0E19\u0E15\u0E2D\u0E19\u0E15\u0E48\u0E2D\u0E44\u0E1B\u0E40\u0E23\u0E32\u0E08\u0E30\u0E43\u0E0A\u0E49 solana-program-bpf-template. Clone \u0E44\u0E1B\u0E17\u0E35\u0E48\u0E40\u0E04\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E02\u0E2D\u0E07\u0E40\u0E23\u0E32:

git clone git@github.com:mvines/solana-bpf-program-template.git
+import{_ as t,r as o,o as r,c as l,a,b as s,F as p,e as i,d as e}from"./app.2fbb9e96.js";const c={},d=i(`

Debugging Solana Programs

\u0E21\u0E35\u0E17\u0E32\u0E07\u0E40\u0E25\u0E37\u0E2D\u0E01 \u0E41\u0E25\u0E30\u0E40\u0E04\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E21\u0E37\u0E2D\u0E2A\u0E19\u0E31\u0E1A\u0E2A\u0E19\u0E38\u0E19\u0E21\u0E32\u0E01\u0E21\u0E32\u0E22\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E17\u0E14\u0E2A\u0E2D\u0E1A \u0E41\u0E25\u0E30 debugging Solana BPF program.

\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49

Fact Sheet

  • crate solana-program-test \u0E08\u0E30\u0E17\u0E33\u0E43\u0E2B\u0E49 local runtime \u0E02\u0E2D\u0E07\u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 test \u0E41\u0E25\u0E30 debug program \u0E44\u0E14\u0E49 (\u0E14\u0E49\u0E27\u0E22 vscode).
  • crate solana-validator \u0E08\u0E30\u0E17\u0E33\u0E43\u0E2B\u0E49 solana-test-validator \u0E01\u0E32\u0E23 test \u0E1A\u0E19 local validator node \u0E17\u0E33\u0E44\u0E14\u0E49\u0E14\u0E35\u0E02\u0E36\u0E49\u0E19 \u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 run \u0E08\u0E32\u0E01 editor \u0E44\u0E14\u0E49 \u0E41\u0E15\u0E48 breakpoints \u0E43\u0E19 program \u0E08\u0E30\u0E16\u0E39\u0E01\u0E21\u0E2D\u0E07\u0E02\u0E49\u0E32\u0E21\u0E44\u0E1B.
  • \u0E40\u0E04\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E21\u0E37\u0E2D CLI solana-test-validator runs, loads program \u0E41\u0E25\u0E30\u0E1B\u0E23\u0E30\u0E21\u0E27\u0E25\u0E1C\u0E25 transaction \u0E42\u0E14\u0E22\u0E17\u0E33\u0E07\u0E32\u0E19\u0E1C\u0E48\u0E32\u0E19 command line \u0E01\u0E31\u0E1A Rust applications \u0E2B\u0E23\u0E37\u0E2D Javascript/Typescript app \u0E42\u0E14\u0E22\u0E43\u0E0A\u0E49 web3.
  • \u0E17\u0E31\u0E49\u0E07\u0E2B\u0E21\u0E14\u0E17\u0E35\u0E48\u0E27\u0E48\u0E32\u0E21\u0E32 \u0E40\u0E23\u0E32\u0E41\u0E19\u0E30\u0E19\u0E33\u0E43\u0E2B\u0E49\u0E43\u0E0A\u0E49 macro msg! \u0E43\u0E19 program \u0E43\u0E19\u0E15\u0E2D\u0E19\u0E40\u0E23\u0E34\u0E48\u0E21 \u0E41\u0E25\u0E30\u0E40\u0E2D\u0E32\u0E2D\u0E2D\u0E2D\u0E01\u0E40\u0E21\u0E37\u0E48\u0E2D test \u0E41\u0E25\u0E30\u0E21\u0E31\u0E48\u0E19\u0E43\u0E08\u0E27\u0E48\u0E32\u0E17\u0E33\u0E07\u0E32\u0E19\u0E16\u0E39\u0E01\u0E41\u0E25\u0E49\u0E27\u0E41\u0E25\u0E49\u0E27 \u0E08\u0E33\u0E44\u0E27\u0E49\u0E27\u0E48\u0E32 msg! \u0E43\u0E0A\u0E49 Compute Units \u0E17\u0E35\u0E48\u0E17\u0E33\u0E43\u0E2B\u0E49 program \u0E25\u0E49\u0E21\u0E40\u0E2B\u0E25\u0E27\u0E44\u0E14\u0E49\u0E16\u0E49\u0E32\u0E43\u0E0A\u0E49 Compute Unit \u0E40\u0E01\u0E34\u0E19\u0E04\u0E48\u0E32\u0E17\u0E35\u0E48\u0E01\u0E33\u0E2B\u0E19\u0E14\u0E44\u0E27\u0E49.

\u0E02\u0E31\u0E49\u0E19\u0E15\u0E2D\u0E19\u0E15\u0E48\u0E2D\u0E44\u0E1B\u0E40\u0E23\u0E32\u0E08\u0E30\u0E43\u0E0A\u0E49 solana-program-bpf-template. Clone \u0E44\u0E1B\u0E17\u0E35\u0E48\u0E40\u0E04\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E02\u0E2D\u0E07\u0E40\u0E23\u0E32:

git clone git@github.com:mvines/solana-bpf-program-template.git
 cd solana-bpf-program-template
 code .
 

Runtime Testing \u0E41\u0E25\u0E30 Debugging \u0E43\u0E19 editor

\u0E40\u0E1B\u0E34\u0E14 file src/lib.rs

\u0E40\u0E23\u0E32\u0E08\u0E30\u0E40\u0E2B\u0E47\u0E19\u0E27\u0E48\u0E32 program \u0E19\u0E31\u0E49\u0E19\u0E07\u0E48\u0E32\u0E22\u0E41\u0E25\u0E30 \u0E41\u0E04\u0E48 logs \u0E15\u0E31\u0E27 content \u0E17\u0E35\u0E48\u0E44\u0E14\u0E49\u0E23\u0E31\u0E1A\u0E21\u0E32\u0E08\u0E32\u0E01 program entrypoint function: process_instruction

  1. \u0E44\u0E1B\u0E15\u0E23\u0E07\u0E17\u0E35\u0E48 #[cfg(test)] \u0E41\u0E25\u0E30\u0E01\u0E14 Run Tests \u0E21\u0E31\u0E19\u0E01\u0E47\u0E08\u0E30 build program \u0E41\u0E25\u0E30\u0E17\u0E33\u0E01\u0E32\u0E23 test async fn test_transaction() \u0E40\u0E23\u0E32\u0E08\u0E30\u0E40\u0E2B\u0E47\u0E19 log messages (\u0E41\u0E1A\u0E1A\u0E22\u0E48\u0E2D)\u0E43\u0E19 vscode terminal \u0E15\u0E32\u0E21\u0E02\u0E49\u0E32\u0E07\u0E25\u0E48\u0E32\u0E07\u0E19\u0E35\u0E49:
running 1 test
diff --git a/docs/.vuepress/dist/assets/debugging-solana-programs.html.af3c7a13.js b/docs/.vuepress/dist/assets/debugging-solana-programs.html.084253a5.js
similarity index 99%
rename from docs/.vuepress/dist/assets/debugging-solana-programs.html.af3c7a13.js
rename to docs/.vuepress/dist/assets/debugging-solana-programs.html.084253a5.js
index 428f081e9..e691b32ac 100644
--- a/docs/.vuepress/dist/assets/debugging-solana-programs.html.af3c7a13.js
+++ b/docs/.vuepress/dist/assets/debugging-solana-programs.html.084253a5.js
@@ -1,4 +1,4 @@
-import{_ as t,r as o,o as r,c as l,a as e,b as a,F as i,e as p,d as n}from"./app.cfdf84e7.js";const c={},u=p(`

D\xE9bogage des Programmes Solana

Il existe un certain nombre d'options et d'outils de support pour tester et d\xE9boguer un programme Solana.

Faits

Fiche d'Informations

  • La crate solana-program-test permet l'utilisation d'\xE9l\xE9ments de base de local runtime o\xF9 vous pouvez tester et d\xE9boguer votre programme de mani\xE8re interactive (par exemple dans vscode).
  • La crate solana-validator permet d'utiliser l'impl\xE9mentation solana-test-validator pour des tests plus robustes qui se font sur un noeud validateur local. Vous pouvez ex\xE9cuter depuis l'\xE9diteur mais les points d'arr\xEAt dans le programme sont ignor\xE9s.
  • L'outil CLI solana-test-validator ex\xE9cute et charge votre programme et traite l'ex\xE9cution des transactions \xE0 partir d'applications Rust en ligne de commande ou d'applications Javascript/Typescript utilisant web3.
  • Pour tout ce qui pr\xE9c\xE8de, il est recommand\xE9 d'utiliser la macro msg! dans votre programme au d\xE9but, puis de la supprimer au fur et \xE0 mesure que vous testez et vous assurez d'un comportement s\xFBr. Rappelez-vous que msg! consomme des Unit\xE9s de Calcul qui peuvent \xE9ventuellement faire \xE9chouer votre programme en atteignant les plafonds du budget des Unit\xE9s de Calcul.

Les \xE9tapes des sections suivantes utilisent solana-program-bpf-template. Clonez-le sur votre machine :

git clone git@github.com:mvines/solana-bpf-program-template.git
+import{_ as t,r as o,o as r,c as l,a as e,b as a,F as i,e as p,d as n}from"./app.2fbb9e96.js";const c={},u=p(`

D\xE9bogage des Programmes Solana

Il existe un certain nombre d'options et d'outils de support pour tester et d\xE9boguer un programme Solana.

Faits

Fiche d'Informations

  • La crate solana-program-test permet l'utilisation d'\xE9l\xE9ments de base de local runtime o\xF9 vous pouvez tester et d\xE9boguer votre programme de mani\xE8re interactive (par exemple dans vscode).
  • La crate solana-validator permet d'utiliser l'impl\xE9mentation solana-test-validator pour des tests plus robustes qui se font sur un noeud validateur local. Vous pouvez ex\xE9cuter depuis l'\xE9diteur mais les points d'arr\xEAt dans le programme sont ignor\xE9s.
  • L'outil CLI solana-test-validator ex\xE9cute et charge votre programme et traite l'ex\xE9cution des transactions \xE0 partir d'applications Rust en ligne de commande ou d'applications Javascript/Typescript utilisant web3.
  • Pour tout ce qui pr\xE9c\xE8de, il est recommand\xE9 d'utiliser la macro msg! dans votre programme au d\xE9but, puis de la supprimer au fur et \xE0 mesure que vous testez et vous assurez d'un comportement s\xFBr. Rappelez-vous que msg! consomme des Unit\xE9s de Calcul qui peuvent \xE9ventuellement faire \xE9chouer votre programme en atteignant les plafonds du budget des Unit\xE9s de Calcul.

Les \xE9tapes des sections suivantes utilisent solana-program-bpf-template. Clonez-le sur votre machine :

git clone git@github.com:mvines/solana-bpf-program-template.git
 cd solana-bpf-program-template
 code .
 

Tests d'Ex\xE9cution et D\xE9bogage dans l'\xE9diteur

Ouvrez le fichier src/lib.rs

Vous constaterez que le programme est assez simple et se contente d'enregistrer le contenu re\xE7u par la fonction d'entr\xE9e du programme : process_instruction

1.Allez dans la section #[cfg(test)] et cliquez sur Run Tests. Cela va compiler le programme et ensuite ex\xE9cuter le test async fn test_transaction(). Vous verrez les messages de log (simplifi\xE9s) dans le terminal vscode sous la source.

running 1 test
diff --git a/docs/.vuepress/dist/assets/debugging-solana-programs.html.1ed38a08.js b/docs/.vuepress/dist/assets/debugging-solana-programs.html.0a48722b.js
similarity index 99%
rename from docs/.vuepress/dist/assets/debugging-solana-programs.html.1ed38a08.js
rename to docs/.vuepress/dist/assets/debugging-solana-programs.html.0a48722b.js
index f3ec62c2f..4081b70ac 100644
--- a/docs/.vuepress/dist/assets/debugging-solana-programs.html.1ed38a08.js
+++ b/docs/.vuepress/dist/assets/debugging-solana-programs.html.0a48722b.js
@@ -1,4 +1,4 @@
-import{_ as t,r as o,o as l,c as r,a,b as s,F as i,e as c,d as e}from"./app.cfdf84e7.js";const p={},d=c(`

Debugging Solana Programs

Solana Program\uC744 \uD14C\uC2A4\uD2B8\uD558\uACE0 \uB514\uBC84\uAE45\uD558\uAE30 \uC704\uD55C \uBA87 \uAC00\uC9C0 \uC120\uD0DD\uC9C0\uC640 \uB3C4\uAD6C\uB4E4\uC774 \uC874\uC7AC\uD569\uB2C8\uB2E4.

Facts

Fact Sheet

  • crate solana-program-test\uB294 \uB2F9\uC2E0\uC758 \uD504\uB85C\uADF8\uB7A8\uC744 interatively \uD14C\uC2A4\uD2B8\uD558\uACE0 \uB514\uBC84\uAE45 \uD560 \uC218 \uC788\uAC8C \uD558\uB294 local runtime \uC0AC\uC6A9\uC744 \uAC00\uB2A5\uD558\uAC8C \uD574\uC90D\uB2C8\uB2E4. (e.g. in vscode).
  • crate solana-validator\uB294 **local validator node**\uC5D0\uC11C \uC77C\uC5B4\uB098\uB294 \uB354 \uC644\uC131\uB41C \uD14C\uC2A4\uD2B8\uB97C \uC704\uD55C solana-test-validator \uAD6C\uD604\uC758 \uC0AC\uC6A9\uC744 \uAC00\uB2A5\uD558\uAC8C \uD574\uC90D\uB2C8\uB2E4.
  • CLI tool solana-test-validator\uB294 \uB2F9\uC2E0\uC758 \uD504\uB85C\uADF8\uB7A8\uC744 \uC2E4\uD589\uC2DC\uD0A4\uACE0 command line Rust Application \uB610\uB294 web3\uB97C \uC0AC\uC6A9\uD558\uB294 Javascript/Typescript Application \uC73C\uB85C\uBD80\uC758 Transaction\uC744 \uCC98\uB9AC\uD569\uB2C8\uB2E4. \uC704 \uBCF4\uB4E0 \uAC83\uB4E4\uC744 \uC704\uD574, \uBA3C\uC800 \uB2F9\uC2E0\uC758 Program\uC5D0\uC11Cmsg! \uB9E4\uD06C\uB85C \uC0AC\uC6A9\uD558\uC2DC\uACE0 \uD14C\uC2A4\uD2B8 \uD568\uC5D0 \uB530\uB77C \uADF8\uAC83\uB4E4\uC744 \uC9C0\uC6B0\uAE38 \uCD94\uCC9C\uD569\uB2C8\uB2E4. msg!\uAC00 \uCEF4\uD4E8\uD130 \uC790\uC6D0\uC744 \uC18C\uBE44\uD55C\uB2E4\uB294 \uAC83\uC744 \uAE30\uC5B5\uD558\uC138\uC694. \uAC11\uC790\uAE30 \uB2F9\uC2E0\uC758 \uD504\uB85C\uADF8\uB7A8\uC744 \uC2E4\uD328\uD558\uAC8C \uB9CC\uB4E4 \uC218 \uC788\uC2B5\uB2C8\uB2E4.

\uC544\uB798 \uC139\uC158\uC758 \uB2E8\uACC4\uB4E4\uC740 solana-program-bpf-template\uB97C \uC0AC\uC6A9\uD569\uB2C8\uB2E4. \uB2F9\uC2E0\uC758 \uCEF4\uD4E8\uD130\uC5D0 Clone \uD558\uC138\uC694:

git clone git@github.com:mvines/solana-bpf-program-template.git
+import{_ as t,r as o,o as l,c as r,a,b as s,F as i,e as c,d as e}from"./app.2fbb9e96.js";const p={},d=c(`

Debugging Solana Programs

Solana Program\uC744 \uD14C\uC2A4\uD2B8\uD558\uACE0 \uB514\uBC84\uAE45\uD558\uAE30 \uC704\uD55C \uBA87 \uAC00\uC9C0 \uC120\uD0DD\uC9C0\uC640 \uB3C4\uAD6C\uB4E4\uC774 \uC874\uC7AC\uD569\uB2C8\uB2E4.

Facts

Fact Sheet

  • crate solana-program-test\uB294 \uB2F9\uC2E0\uC758 \uD504\uB85C\uADF8\uB7A8\uC744 interatively \uD14C\uC2A4\uD2B8\uD558\uACE0 \uB514\uBC84\uAE45 \uD560 \uC218 \uC788\uAC8C \uD558\uB294 local runtime \uC0AC\uC6A9\uC744 \uAC00\uB2A5\uD558\uAC8C \uD574\uC90D\uB2C8\uB2E4. (e.g. in vscode).
  • crate solana-validator\uB294 **local validator node**\uC5D0\uC11C \uC77C\uC5B4\uB098\uB294 \uB354 \uC644\uC131\uB41C \uD14C\uC2A4\uD2B8\uB97C \uC704\uD55C solana-test-validator \uAD6C\uD604\uC758 \uC0AC\uC6A9\uC744 \uAC00\uB2A5\uD558\uAC8C \uD574\uC90D\uB2C8\uB2E4.
  • CLI tool solana-test-validator\uB294 \uB2F9\uC2E0\uC758 \uD504\uB85C\uADF8\uB7A8\uC744 \uC2E4\uD589\uC2DC\uD0A4\uACE0 command line Rust Application \uB610\uB294 web3\uB97C \uC0AC\uC6A9\uD558\uB294 Javascript/Typescript Application \uC73C\uB85C\uBD80\uC758 Transaction\uC744 \uCC98\uB9AC\uD569\uB2C8\uB2E4. \uC704 \uBCF4\uB4E0 \uAC83\uB4E4\uC744 \uC704\uD574, \uBA3C\uC800 \uB2F9\uC2E0\uC758 Program\uC5D0\uC11Cmsg! \uB9E4\uD06C\uB85C \uC0AC\uC6A9\uD558\uC2DC\uACE0 \uD14C\uC2A4\uD2B8 \uD568\uC5D0 \uB530\uB77C \uADF8\uAC83\uB4E4\uC744 \uC9C0\uC6B0\uAE38 \uCD94\uCC9C\uD569\uB2C8\uB2E4. msg!\uAC00 \uCEF4\uD4E8\uD130 \uC790\uC6D0\uC744 \uC18C\uBE44\uD55C\uB2E4\uB294 \uAC83\uC744 \uAE30\uC5B5\uD558\uC138\uC694. \uAC11\uC790\uAE30 \uB2F9\uC2E0\uC758 \uD504\uB85C\uADF8\uB7A8\uC744 \uC2E4\uD328\uD558\uAC8C \uB9CC\uB4E4 \uC218 \uC788\uC2B5\uB2C8\uB2E4.

\uC544\uB798 \uC139\uC158\uC758 \uB2E8\uACC4\uB4E4\uC740 solana-program-bpf-template\uB97C \uC0AC\uC6A9\uD569\uB2C8\uB2E4. \uB2F9\uC2E0\uC758 \uCEF4\uD4E8\uD130\uC5D0 Clone \uD558\uC138\uC694:

git clone git@github.com:mvines/solana-bpf-program-template.git
 cd solana-bpf-program-template
 code .
 

Runtime Testing and Debugging in editor

Open the file src/lib.rs

\uB2F9\uC2E0\uC740 \uC774 \uD504\uB85C\uADF8\uB7A8\uC774 \uB418\uAC8C \uB2E8\uC21C\uD558\uACE0 \uB2E8\uC9C0 Program entrypoint function\uC778 process_instruction\uC5D0 \uC758\uD574 \uC218\uC2E0\uB41C \uB0B4\uC6A9\uC744 \uAE30\uB85D\uD558\uB294 \uAC83\uC784\uC744 \uC54C \uC218 \uC788\uC2B5\uB2C8\uB2E4.

  1. #[cfg(test)] \uC139\uC158\uC73C\uB85C \uAC00\uC11C Run Tests\uB97C \uD074\uB9AD\uD558\uC138\uC694. \uC774\uAC83\uC740 Program\uC744 \uBE4C\uB4DC\uD560 \uAC83\uC774\uACE0 async fn test_transaction() \uD14C\uC2A4\uD2B8\uB97C \uC2E4\uD589\uD560 \uAC83\uC785\uB2C8\uB2E4. \uB2F9\uC2E0\uC740 \uC544\uB798\uC5D0 vscode \uD130\uBBF8\uB110\uC5D0\uC11C \uB85C\uADF8 \uBA54\uC2DC\uC9C0\uB4E4\uC744 \uBCFC \uAC83\uC785\uB2C8\uB2E4.
running 1 test
diff --git a/docs/.vuepress/dist/assets/debugging-solana-programs.html.f4f20b1d.js b/docs/.vuepress/dist/assets/debugging-solana-programs.html.0d43a0e1.js
similarity index 99%
rename from docs/.vuepress/dist/assets/debugging-solana-programs.html.f4f20b1d.js
rename to docs/.vuepress/dist/assets/debugging-solana-programs.html.0d43a0e1.js
index 0a18d1137..2a82d711d 100644
--- a/docs/.vuepress/dist/assets/debugging-solana-programs.html.f4f20b1d.js
+++ b/docs/.vuepress/dist/assets/debugging-solana-programs.html.0d43a0e1.js
@@ -1,4 +1,4 @@
-import{_ as t,r as i,o as r,c as o,a as e,b as a,F as l,e as p,d as s}from"./app.cfdf84e7.js";const d={},u=p(`

Debuggen von Solana-Programmen

Es gibt eine Reihe von Optionen und unterst\xFCtzenden Tools zum Testen und Debuggen eines Solana-Programms.

Fakten

Fact Sheet

  • Die Kiste solana-program-test erm\xF6glicht die Verwendung von Bare Bones local runtime, wo Sie testen und debuggen k\xF6nnen Ihr Programm interaktiv (z. B. in vscode).
  • Die Kiste \u201Esolana-validator\u201C erm\xF6glicht die Verwendung der \u201Esolana-test-validator\u201C-Implementierung f\xFCr mehr robustere Tests, die auf einem local validator node stattfinden. Sie k\xF6nnen den Editor ausf\xFChren aber Haltepunkte in der Programm werden ignoriert.
  • Das CLI-Tool solana-test-validator f\xFChrt und l\xE4dt Ihr Programm und verarbeitet die Transaktionsausf\xFChrung Befehlszeilen-Rust-Anwendungen oder Javascript-/Typescript-Anwendungen, die web3 verwenden.
  • F\xFCr alle oben genannten Punkte wird die gro\xDFz\xFCgige Verwendung des msg!-Makros in Ihrem Programm zu Beginn und danach empfohlen. Entfernen Sie sie beim Testen und stellen Sie ein felsenfestes Verhalten sicher. Denken Sie daran, dass "msg!" Recheneinheiten verbraucht, die Ihr Programm schlie\xDFlich scheitern lassen kann, indem Sie die Budgetobergrenzen f\xFCr Compute Units erreichen.

Die Schritte in den folgenden Abschnitten verwenden die solana-program-bpf-template. Klonen Sie das auf Ihre Maschine:

git clone git@github.com:mvines/solana-bpf-program-template.git
+import{_ as t,r as i,o as r,c as o,a as e,b as a,F as l,e as p,d as s}from"./app.2fbb9e96.js";const d={},u=p(`

Debuggen von Solana-Programmen

Es gibt eine Reihe von Optionen und unterst\xFCtzenden Tools zum Testen und Debuggen eines Solana-Programms.

Fakten

Fact Sheet

  • Die Kiste solana-program-test erm\xF6glicht die Verwendung von Bare Bones local runtime, wo Sie testen und debuggen k\xF6nnen Ihr Programm interaktiv (z. B. in vscode).
  • Die Kiste \u201Esolana-validator\u201C erm\xF6glicht die Verwendung der \u201Esolana-test-validator\u201C-Implementierung f\xFCr mehr robustere Tests, die auf einem local validator node stattfinden. Sie k\xF6nnen den Editor ausf\xFChren aber Haltepunkte in der Programm werden ignoriert.
  • Das CLI-Tool solana-test-validator f\xFChrt und l\xE4dt Ihr Programm und verarbeitet die Transaktionsausf\xFChrung Befehlszeilen-Rust-Anwendungen oder Javascript-/Typescript-Anwendungen, die web3 verwenden.
  • F\xFCr alle oben genannten Punkte wird die gro\xDFz\xFCgige Verwendung des msg!-Makros in Ihrem Programm zu Beginn und danach empfohlen. Entfernen Sie sie beim Testen und stellen Sie ein felsenfestes Verhalten sicher. Denken Sie daran, dass "msg!" Recheneinheiten verbraucht, die Ihr Programm schlie\xDFlich scheitern lassen kann, indem Sie die Budgetobergrenzen f\xFCr Compute Units erreichen.

Die Schritte in den folgenden Abschnitten verwenden die solana-program-bpf-template. Klonen Sie das auf Ihre Maschine:

git clone git@github.com:mvines/solana-bpf-program-template.git
 cd solana-bpf-program-template
 code .
 

Laufzeittests und Debugging im Editor

\xD6ffnen Sie die Datei src/lib.rs

Sie werden sehen, dass das Programm ziemlich einfach ist und im Grunde nur die empfangenen Inhalte protokolliert die Programmeintrittspunktfunktion: process_instruction

  1. Gehen Sie zum Abschnitt \u201E#[cfg(test)]\u201C und klicken Sie auf \u201ETests ausf\xFChren\u201C. Dadurch wird das Programm erstellt und dann F\xFChren Sie den Test \u201Easync fn test_transaction()\u201C aus. Sie sehen die Protokollmeldungen (vereinfacht) im vscode-Terminal unten der Quelle.
running 1 test
diff --git a/docs/.vuepress/dist/assets/debugging-solana-programs.html.fd232a1a.js b/docs/.vuepress/dist/assets/debugging-solana-programs.html.11868c06.js
similarity index 99%
rename from docs/.vuepress/dist/assets/debugging-solana-programs.html.fd232a1a.js
rename to docs/.vuepress/dist/assets/debugging-solana-programs.html.11868c06.js
index b02546d88..b54eb0663 100644
--- a/docs/.vuepress/dist/assets/debugging-solana-programs.html.fd232a1a.js
+++ b/docs/.vuepress/dist/assets/debugging-solana-programs.html.11868c06.js
@@ -1,4 +1,4 @@
-import{_ as o,r,o as t,c as l,a as e,b as n,F as i,e as c,d as s}from"./app.cfdf84e7.js";const p={},d=c(`

Depurando Programas en Solana

Hay una serie de opciones y herramientas de apoyo para probar y depurar un programa Solana.

Hechos

Hoja de hechos

  • El crate solana-program-test permite el uso de bare bones local runtime donde puede probar y depurar su programa de forma interactiva (por ejemplo, en vscode).
  • El crate solana-validator permite el uso de la implementaci\xF3n solana-test-validator para una mayor robustez de pruebas en un nodo validador local. Puede ejecutarlo desde el editor pero los puntos de interrupci\xF3n en el programa son ignorados.
  • La herramienta CLI solana-test-validator ejecuta y carga su programa y procesa la ejecuci\xF3n de transacciones desde l\xEDnea de comando, Aplicaciones Rust o aplicaciones Javascript/Typescript usando web3.
  • Por todo lo anterior, se recomienda el uso liberal de la macro msg! en su programa al principio y luego elimin\xE1ndolos mientras prueba y asegura un comportamiento estable. Recuerde que msg! consume Unidades de C\xF3mputo que eventualmente podr\xEDan hacer fallar su programa al alcanzar los l\xEDmites de presupuesto de la Unidad de C\xF3mputo.

Los pasos de las siguientes secciones utilizan solana-program-bpf-template. Clona eso a tu m\xE1quina:

git clone git@github.com:mvines/solana-bpf-program-template.git
+import{_ as o,r,o as t,c as l,a as e,b as n,F as i,e as c,d as s}from"./app.2fbb9e96.js";const p={},d=c(`

Depurando Programas en Solana

Hay una serie de opciones y herramientas de apoyo para probar y depurar un programa Solana.

Hechos

Hoja de hechos

  • El crate solana-program-test permite el uso de bare bones local runtime donde puede probar y depurar su programa de forma interactiva (por ejemplo, en vscode).
  • El crate solana-validator permite el uso de la implementaci\xF3n solana-test-validator para una mayor robustez de pruebas en un nodo validador local. Puede ejecutarlo desde el editor pero los puntos de interrupci\xF3n en el programa son ignorados.
  • La herramienta CLI solana-test-validator ejecuta y carga su programa y procesa la ejecuci\xF3n de transacciones desde l\xEDnea de comando, Aplicaciones Rust o aplicaciones Javascript/Typescript usando web3.
  • Por todo lo anterior, se recomienda el uso liberal de la macro msg! en su programa al principio y luego elimin\xE1ndolos mientras prueba y asegura un comportamiento estable. Recuerde que msg! consume Unidades de C\xF3mputo que eventualmente podr\xEDan hacer fallar su programa al alcanzar los l\xEDmites de presupuesto de la Unidad de C\xF3mputo.

Los pasos de las siguientes secciones utilizan solana-program-bpf-template. Clona eso a tu m\xE1quina:

git clone git@github.com:mvines/solana-bpf-program-template.git
 cd solana-bpf-program-template
 code .
 

Pruebas de tiempo de ejecuci\xF3n y depuraci\xF3n en el editor

Abre el archivo src/lib.rs

Ver\xE1 que el programa es bastante simple y b\xE1sicamente solo registra el contenido recibido por la funci\xF3n de entrada del programa: process_instruction

  1. Vaya a la secci\xF3n #[cfg(test)] y haga clic en Ejecutar pruebas. Esto construir\xE1 el programa, luego ejecute la prueba async fn test_transaction(). Ver\xE1 los mensajes de registro (simplificados) en el terminal vscode.
running 1 test
diff --git a/docs/.vuepress/dist/assets/debugging-solana-programs.html.fcdb1779.js b/docs/.vuepress/dist/assets/debugging-solana-programs.html.1d43cb56.js
similarity index 99%
rename from docs/.vuepress/dist/assets/debugging-solana-programs.html.fcdb1779.js
rename to docs/.vuepress/dist/assets/debugging-solana-programs.html.1d43cb56.js
index bbfcba7c8..52e663e9c 100644
--- a/docs/.vuepress/dist/assets/debugging-solana-programs.html.fcdb1779.js
+++ b/docs/.vuepress/dist/assets/debugging-solana-programs.html.1d43cb56.js
@@ -1,4 +1,4 @@
-import{_ as t,r as i,o,c as r,a,b as e,F as l,e as p,d as s}from"./app.cfdf84e7.js";const d={},u=p(`

Debug Program Solana

Ada sejumlah opsi dan alat pendukung untuk menguji dan men-debug program Solana.

Fakta

Lembar Fakta

  • Crate solana-program-test memungkinkan penggunaan secara langsung terhadap runtime lokal tempat Anda dapat menguji dan men-debug program Anda secara interaktif (misalnya dalam vscode).
  • Crate solana-validator memungkinkan implementasi solana-test-validator untuk robust testing yang lebih baik yang terjadi pada local validator node. Anda dapat menjalankan dari editor tetapi breakpoints di program diabaikan.
  • CLI solana-test-validator menjalankan dan memuat program Anda dan memproses eksekusi transaksi dari aplikasi Rust berbasis command line atau aplikasi Javascript/TypeScript menggunakan web3.
  • Untuk semua hal di atas, penggunaan makro msg! secara bebas dalam program Anda disarankan dilakukan dari awal dan kemudian menghapusnya seiring Anda menguji dan memastikan behaviour yang kokoh. Ingat bahwa msg! menggunakan Compute Unit yang akhirnya dapat menggagalkan program Anda dengan menyentuh budget cap dari Compute Unit.

Langkah-langkah di bagian berikut menggunakan solana-program-bpf-template. Clone itu ke mesin:

git clone git@github.com:mvines/solana-bpf-program-template.git
+import{_ as t,r as i,o,c as r,a,b as e,F as l,e as p,d as s}from"./app.2fbb9e96.js";const d={},u=p(`

Debug Program Solana

Ada sejumlah opsi dan alat pendukung untuk menguji dan men-debug program Solana.

Fakta

Lembar Fakta

  • Crate solana-program-test memungkinkan penggunaan secara langsung terhadap runtime lokal tempat Anda dapat menguji dan men-debug program Anda secara interaktif (misalnya dalam vscode).
  • Crate solana-validator memungkinkan implementasi solana-test-validator untuk robust testing yang lebih baik yang terjadi pada local validator node. Anda dapat menjalankan dari editor tetapi breakpoints di program diabaikan.
  • CLI solana-test-validator menjalankan dan memuat program Anda dan memproses eksekusi transaksi dari aplikasi Rust berbasis command line atau aplikasi Javascript/TypeScript menggunakan web3.
  • Untuk semua hal di atas, penggunaan makro msg! secara bebas dalam program Anda disarankan dilakukan dari awal dan kemudian menghapusnya seiring Anda menguji dan memastikan behaviour yang kokoh. Ingat bahwa msg! menggunakan Compute Unit yang akhirnya dapat menggagalkan program Anda dengan menyentuh budget cap dari Compute Unit.

Langkah-langkah di bagian berikut menggunakan solana-program-bpf-template. Clone itu ke mesin:

git clone git@github.com:mvines/solana-bpf-program-template.git
 cd solana-bpf-program-template
 code .
 

Uji Runtime dan Debugging di editor

Buka file src/lib.rs

Anda akan melihat bahwa programnya cukup sederhana dan pada dasarnya hanya mencatat konten yang diterima oleh function dari entrypoint program: process_instruction

  1. Buka bagian #[cfg(test)] dan klik Run Tests. Ini akan melakukan build program dan kemudian jalankan tes async fn test_transaction(). Anda akan melihat pesan log (disederhanakan) di terminal vscode di bawah code.
running 1 test
diff --git a/docs/.vuepress/dist/assets/debugging-solana-programs.html.3cd18bd7.js b/docs/.vuepress/dist/assets/debugging-solana-programs.html.232c34cb.js
similarity index 97%
rename from docs/.vuepress/dist/assets/debugging-solana-programs.html.3cd18bd7.js
rename to docs/.vuepress/dist/assets/debugging-solana-programs.html.232c34cb.js
index 6b8b3c0f9..cd37ed9dc 100644
--- a/docs/.vuepress/dist/assets/debugging-solana-programs.html.3cd18bd7.js
+++ b/docs/.vuepress/dist/assets/debugging-solana-programs.html.232c34cb.js
@@ -1 +1 @@
-const t={key:"v-5afd7935",path:"/vi/guides/debugging-solana-programs.html",title:"So\xE1t l\u1ED7i ch\u01B0\u01A1ng tr\xECnh tr\xEAn Solana",lang:"vi-VN",frontmatter:{title:"So\xE1t l\u1ED7i ch\u01B0\u01A1ng tr\xECnh tr\xEAn Solana",head:[["meta",{name:"title",content:"To\xE0n t\u1EADp Solana | So\xE1t l\u1ED7i ch\u01B0\u01A1ng tr\xECnh tr\xEAn Solana"}],["meta",{name:"og:title",content:"To\xE0n t\u1EADp Solana | So\xE1t l\u1ED7i ch\u01B0\u01A1ng tr\xECnh tr\xEAn Solana"}],["meta",{name:"description",content:"C\xF3 m\u1ED9t s\u1ED1 ph\u01B0\u01A1ng ph\xE1p v\xE0 c\xF4ng c\u1EE5 h\u1ED7 tr\u1EE3 cho ki\u1EC3m th\u1EED v\xE0 so\xE1t l\u1ED7i m\u1ED9t ch\u01B0\u01A1ng tr\xECnh BPF tr\xEAn Solana."}],["meta",{name:"og:description",content:"C\xF3 m\u1ED9t s\u1ED1 ph\u01B0\u01A1ng ph\xE1p v\xE0 c\xF4ng c\u1EE5 h\u1ED7 tr\u1EE3 cho ki\u1EC3m th\u1EED v\xE0 so\xE1t l\u1ED7i m\u1ED9t ch\u01B0\u01A1ng tr\xECnh BPF tr\xEAn Solana."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"C\xF3 th\u1EC3 b\u1EA1n ch\u01B0a bi\u1EBFt",slug:"co-the-ban-chua-biet",children:[]},{level:2,title:"M\xF4i tr\u01B0\u1EDDng ki\u1EC3m th\u1EED v\xE0 so\xE1t l\u1ED7i trong tr\xECnh bi\xEAn t\u1EADp",slug:"moi-truong-kiem-thu-va-soat-loi-trong-trinh-bien-tap",children:[]},{level:2,title:"Ki\u1EC3m th\u1EED b\u1EB1ng n\u1ED1t Local Validator trong tr\xECnh bi\xEAn t\u1EADp",slug:"kiem-thu-bang-not-local-validator-trong-trinh-bien-tap",children:[]},{level:2,title:"Ki\u1EC3m th\u1EED b\u1EB1ng n\u1ED1t Local Validator tr\xEAn \u1EE9ng d\u1EE5ng ng\u01B0\u1EDDi d\xF9ng",slug:"kiem-thu-bang-not-local-validator-tren-ung-dung-nguoi-dung",children:[]},{level:2,title:"C\xE1c ngu\u1ED3n t\xE0i li\u1EC7u kh\xE1c",slug:"cac-nguon-tai-lieu-khac",children:[]}],git:{updatedTime:1658783638e3},filePathRelative:"vi/guides/debugging-solana-programs.md"};export{t as data};
+const t={key:"v-5afd7935",path:"/vi/guides/debugging-solana-programs.html",title:"So\xE1t l\u1ED7i ch\u01B0\u01A1ng tr\xECnh tr\xEAn Solana",lang:"vi-VN",frontmatter:{title:"So\xE1t l\u1ED7i ch\u01B0\u01A1ng tr\xECnh tr\xEAn Solana",head:[["meta",{name:"title",content:"To\xE0n t\u1EADp Solana | So\xE1t l\u1ED7i ch\u01B0\u01A1ng tr\xECnh tr\xEAn Solana"}],["meta",{name:"og:title",content:"To\xE0n t\u1EADp Solana | So\xE1t l\u1ED7i ch\u01B0\u01A1ng tr\xECnh tr\xEAn Solana"}],["meta",{name:"description",content:"C\xF3 m\u1ED9t s\u1ED1 ph\u01B0\u01A1ng ph\xE1p v\xE0 c\xF4ng c\u1EE5 h\u1ED7 tr\u1EE3 cho ki\u1EC3m th\u1EED v\xE0 so\xE1t l\u1ED7i m\u1ED9t ch\u01B0\u01A1ng tr\xECnh BPF tr\xEAn Solana."}],["meta",{name:"og:description",content:"C\xF3 m\u1ED9t s\u1ED1 ph\u01B0\u01A1ng ph\xE1p v\xE0 c\xF4ng c\u1EE5 h\u1ED7 tr\u1EE3 cho ki\u1EC3m th\u1EED v\xE0 so\xE1t l\u1ED7i m\u1ED9t ch\u01B0\u01A1ng tr\xECnh BPF tr\xEAn Solana."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"C\xF3 th\u1EC3 b\u1EA1n ch\u01B0a bi\u1EBFt",slug:"co-the-ban-chua-biet",children:[]},{level:2,title:"M\xF4i tr\u01B0\u1EDDng ki\u1EC3m th\u1EED v\xE0 so\xE1t l\u1ED7i trong tr\xECnh bi\xEAn t\u1EADp",slug:"moi-truong-kiem-thu-va-soat-loi-trong-trinh-bien-tap",children:[]},{level:2,title:"Ki\u1EC3m th\u1EED b\u1EB1ng n\u1ED1t Local Validator trong tr\xECnh bi\xEAn t\u1EADp",slug:"kiem-thu-bang-not-local-validator-trong-trinh-bien-tap",children:[]},{level:2,title:"Ki\u1EC3m th\u1EED b\u1EB1ng n\u1ED1t Local Validator tr\xEAn \u1EE9ng d\u1EE5ng ng\u01B0\u1EDDi d\xF9ng",slug:"kiem-thu-bang-not-local-validator-tren-ung-dung-nguoi-dung",children:[]},{level:2,title:"C\xE1c ngu\u1ED3n t\xE0i li\u1EC7u kh\xE1c",slug:"cac-nguon-tai-lieu-khac",children:[]}],git:{updatedTime:1677551527e3},filePathRelative:"vi/guides/debugging-solana-programs.md"};export{t as data};
diff --git a/docs/.vuepress/dist/assets/debugging-solana-programs.html.c5b0871c.js b/docs/.vuepress/dist/assets/debugging-solana-programs.html.a8c7f521.js
similarity index 92%
rename from docs/.vuepress/dist/assets/debugging-solana-programs.html.c5b0871c.js
rename to docs/.vuepress/dist/assets/debugging-solana-programs.html.a8c7f521.js
index b44880b59..da32e36f2 100644
--- a/docs/.vuepress/dist/assets/debugging-solana-programs.html.c5b0871c.js
+++ b/docs/.vuepress/dist/assets/debugging-solana-programs.html.a8c7f521.js
@@ -1,4 +1,4 @@
-import{_ as e,r as c,o,c as i,a as n,b as s,F as r,e as l,d as t}from"./app.cfdf84e7.js";const p={},h=l(`

So\xE1t l\u1ED7i ch\u01B0\u01A1ng tr\xECnh tr\xEAn Solana

C\xF3 m\u1ED9t v\xE0i l\u1EF1a ch\u1ECDn v\xE0 c\xF4ng c\u1EE5 h\u1ED7 tr\u1EE3 cho vi\u1EC7c ki\u1EC3m th\u1EED v\xE0 so\xE1t l\u1ED7i m\u1ED9t ch\u01B0\u01A1ng tr\xECnh tr\xEAn Solana.

C\xF3 th\u1EC3 b\u1EA1n ch\u01B0a bi\u1EBFt

Nh\u1EEFng \u0111i\u1EC1u c\xF3 th\u1EC3 b\u1EA1n ch\u01B0a bi\u1EBFt

  • Crate solana-program-test cho ph\xE9p t\u1EA1o n\xEAn m\u1ED9t m\xF4i tr\u01B0\u1EDDng ti\xEAu chu\u1EA9n local runtime \u0111\u1EC3 b\u1EA1n c\xF3 th\u1EC3 ki\u1EC3m th\u1EED v\xE0 so\xE1t l\u1ED7i ch\u01B0\u01A1ng tr\xECnh m\u1ED9t c\xE1ch tr\u1EF1c quan (v\xED d\u1EE5 nh\u01B0 trong vscode).
  • Crate solana-validator cho ph\xE9p s\u1EED d\u1EE5ng solana-test-validator \u0111\u1EC3 ch\u1EA1y c\xE1c b\u01B0\u1EDBc ki\u1EC3m th\u1EED m\u1ED9t c\xE1ch tin c\u1EADy tr\xEAn local validator node. B\u1EA1n c\xF3 th\u1EC3 ch\u1EA1y t\u1EEB tr\xECnh bi\xEAn t\u1EADp tuy nhi\xEAn c\xE1c \u0111i\u1EC3m d\u1EEBng trong ch\u01B0\u01A1ng tr\xECnh s\u1EBD b\u1ECB b\u1ECF qua.
  • C\xF4ng c\u1EE5 CLI solana-test-validator gi\xFAp kh\u1EDFi ch\u1EA1y v\xE0 t\u1EA3i Program c\u0169ng nh\u01B0ng th\u1EF1c thi c\xE1c Transaction t\u1EEB Rust CLI ho\u1EB7c t\u1EEB web3js.
  • Trong t\u1EA5t c\u1EA3 c\xE1c tr\u01B0\u1EDDng h\u1EE3p tr\xEAn, vi\u1EC7c s\u1EED d\u1EE5ng macro msg! \u0111\u01B0\u1EE3c khuy\u1EBFn kh\xEDch t\u1EA1i th\u1EDDi \u0111i\u1EC3m ph\xE1t tri\u1EC3n ban \u0111\u1EA7u, tuy nhi\xEAn c\u1EA7n xo\xE1 ch\xFAng m\u1ED9t khi \u0111\xE3 ho\xE0n t\u1EA5t ki\u1EC3m th\u1EED. N\xEAn nh\u1EDB r\u1EB1ng msg! c\u0169ng ti\xEAu t\u1ED1n t\xE0i nguy\xEAn t\xEDnh to\xE1n hay c\xF2n g\u1ECDi l\xE0 Compute Units. Program c\u1EE7a b\u1EA1n c\xF3 th\u1EC3 b\u1ECB l\u1ED7i m\u1ED9t khi \u0111\u1EA1t \u0111\u1EBFn gi\u1EDBi h\u1EA1n tr\u1EA7n c\u1EE7a Compute Unit.

Nh\u1EEFng v\xED d\u1EE5 \u1EDF c\xE1c ph\u1EA7n ti\u1EBFp theo s\u1EBD s\u1EED d\u1EE5ng solana-program-bpf-template. Vui l\xF2ng t\u1EA3i v\u1EC1 m\xE1y b\u1EB1ng c\xE2u l\u1EC7nh:

git clone git@github.com:mvines/solana-bpf-program-template.git
+import{_ as e,r as c,o,c as i,a as n,b as s,F as r,e as l,d as t}from"./app.2fbb9e96.js";const p={},h=l(`

So\xE1t l\u1ED7i ch\u01B0\u01A1ng tr\xECnh tr\xEAn Solana

C\xF3 m\u1ED9t v\xE0i l\u1EF1a ch\u1ECDn v\xE0 c\xF4ng c\u1EE5 h\u1ED7 tr\u1EE3 cho vi\u1EC7c ki\u1EC3m th\u1EED v\xE0 so\xE1t l\u1ED7i m\u1ED9t ch\u01B0\u01A1ng tr\xECnh tr\xEAn Solana.

C\xF3 th\u1EC3 b\u1EA1n ch\u01B0a bi\u1EBFt

Nh\u1EEFng \u0111i\u1EC1u c\xF3 th\u1EC3 b\u1EA1n ch\u01B0a bi\u1EBFt

  • Crate solana-program-test cho ph\xE9p t\u1EA1o n\xEAn m\u1ED9t m\xF4i tr\u01B0\u1EDDng ti\xEAu chu\u1EA9n local runtime \u0111\u1EC3 b\u1EA1n c\xF3 th\u1EC3 ki\u1EC3m th\u1EED v\xE0 so\xE1t l\u1ED7i ch\u01B0\u01A1ng tr\xECnh m\u1ED9t c\xE1ch tr\u1EF1c quan (v\xED d\u1EE5 nh\u01B0 trong vscode).
  • Crate solana-validator cho ph\xE9p s\u1EED d\u1EE5ng solana-test-validator \u0111\u1EC3 ch\u1EA1y c\xE1c b\u01B0\u1EDBc ki\u1EC3m th\u1EED m\u1ED9t c\xE1ch tin c\u1EADy tr\xEAn local validator node. B\u1EA1n c\xF3 th\u1EC3 ch\u1EA1y t\u1EEB tr\xECnh bi\xEAn t\u1EADp tuy nhi\xEAn c\xE1c \u0111i\u1EC3m d\u1EEBng trong ch\u01B0\u01A1ng tr\xECnh s\u1EBD b\u1ECB b\u1ECF qua.
  • C\xF4ng c\u1EE5 CLI solana-test-validator gi\xFAp kh\u1EDFi ch\u1EA1y v\xE0 t\u1EA3i Program c\u0169ng nh\u01B0 th\u1EF1c thi c\xE1c Transaction t\u1EEB Rust CLI ho\u1EB7c t\u1EEB web3js.
  • Trong t\u1EA5t c\u1EA3 c\xE1c tr\u01B0\u1EDDng h\u1EE3p tr\xEAn, vi\u1EC7c s\u1EED d\u1EE5ng macro msg! \u0111\u01B0\u1EE3c khuy\u1EBFn kh\xEDch t\u1EA1i th\u1EDDi \u0111i\u1EC3m ph\xE1t tri\u1EC3n ban \u0111\u1EA7u, tuy nhi\xEAn c\u1EA7n xo\xE1 ch\xFAng m\u1ED9t khi \u0111\xE3 ho\xE0n t\u1EA5t ki\u1EC3m th\u1EED. N\xEAn nh\u1EDB r\u1EB1ng msg! c\u0169ng ti\xEAu t\u1ED1n t\xE0i nguy\xEAn t\xEDnh to\xE1n hay c\xF2n g\u1ECDi l\xE0 Compute Units. Program c\u1EE7a b\u1EA1n c\xF3 th\u1EC3 b\u1ECB l\u1ED7i m\u1ED9t khi \u0111\u1EA1t \u0111\u1EBFn gi\u1EDBi h\u1EA1n tr\u1EA7n c\u1EE7a Compute Unit.

Nh\u1EEFng v\xED d\u1EE5 \u1EDF c\xE1c ph\u1EA7n ti\u1EBFp theo s\u1EBD s\u1EED d\u1EE5ng solana-program-bpf-template. Vui l\xF2ng t\u1EA3i v\u1EC1 m\xE1y b\u1EB1ng c\xE2u l\u1EC7nh:

git clone git@github.com:mvines/solana-bpf-program-template.git
 cd solana-bpf-program-template
 code .
 

M\xF4i tr\u01B0\u1EDDng ki\u1EC3m th\u1EED v\xE0 so\xE1t l\u1ED7i trong tr\xECnh bi\xEAn t\u1EADp

M\u1EDF t\u1EC7p src/lib.rs

B\u1EA1n s\u1EBD th\u1EA5y ngay m\u1ED9t Program kh\xE1 \u0111\u01A1n gi\u1EA3n v\xE0 ch\u1EC9 in ra n\u1ED9i d\u1EE5ng nh\u1EADn \u0111\u01B0\u1EE3c t\u1EEB \u0111i\u1EC3m ti\u1EBFp nh\u1EADn ch\u1EC9 th\u1ECB: process_instruction

  1. V\xE0o m\u1EE5c #[cfg(test)] v\xE0 ch\u1ECDn Run Tests. N\xF3 s\u1EBD ch\u1EA1y tr\xECnh bi\xEAn d\u1ECBch sau d\xF3 th\u1EF1c thi b\xE0i ki\u1EC3m th\u1EED async fn test_transaction() ngay sau \u0111\xF3. B\u1EA1n s\u1EBD th\u1EA5y m\u1ED9t th\xF4ng b\xE1o \u0111\u01A1n gian in ra \u1EDF c\u1EEDa s\u1ED5 l\u1EC7nh (Terminal) c\u1EE7a vscode nh\u01B0 d\u01B0\u1EDBi:
running 1 test
diff --git a/docs/.vuepress/dist/assets/debugging-solana-programs.html.f89c2a6e.js b/docs/.vuepress/dist/assets/debugging-solana-programs.html.c226d7e0.js
similarity index 99%
rename from docs/.vuepress/dist/assets/debugging-solana-programs.html.f89c2a6e.js
rename to docs/.vuepress/dist/assets/debugging-solana-programs.html.c226d7e0.js
index abb333bdf..a1faebed5 100644
--- a/docs/.vuepress/dist/assets/debugging-solana-programs.html.f89c2a6e.js
+++ b/docs/.vuepress/dist/assets/debugging-solana-programs.html.c226d7e0.js
@@ -1,4 +1,4 @@
-import{_ as t,r as l,o as r,c as i,a,b as e,F as o,e as p,d as s}from"./app.cfdf84e7.js";const c={},d=p(`

Debugging Solana Programs (Solana Programlar\u0131nda Hata Ay\u0131klama)

Bir Solana program\u0131n\u0131 test etmek ve hata ay\u0131klamak i\xE7in bir dizi se\xE7enek ve destekleyici ara\xE7 vard\u0131r.

Facts (\xD6zet Bilgiler)

:::Bilgi Tablosu

  • Crate solana-program-test, program\u0131n\u0131z\u0131 etkile\u015Fimli olarak test edebilece\u011Finiz ve hatalar\u0131n\u0131 ay\u0131klayabilece\u011Finiz (\xF6rn. vscode\u2019da) temel yerel \xE7al\u0131\u015Fma zaman\u0131n\u0131n kullan\u0131lmas\u0131n\u0131 sa\u011Flar.
  • Crate solana-validator, yerel bir validator node\u2019da ger\xE7ekle\u015Fen daha sa\u011Flam testler i\xE7in solana-test-validator uygulamas\u0131n\u0131n kullan\u0131lmas\u0131n\u0131 sa\u011Flar. D\xFCzenleyiciden \xE7al\u0131\u015Ft\u0131rabilirsiniz ancak programdaki kesme noktalar\u0131 yok say\u0131l\u0131r.
  • CLI arac\u0131 solana-test-validator program\u0131n\u0131z\u0131 \xE7al\u0131\u015Ft\u0131r\u0131r & y\xFCkler ve komut sat\u0131r\u0131 Rust uygulamalar\u0131ndan veya web3 kullanan Javascript/Typescript uygulamalar\u0131ndan i\u015Flem y\xFCr\xFCtmeyi sa\u011Flar.
  • Yukar\u0131daki t\xFCm durumlar i\xE7in, program\u0131n\u0131zda msg! makrosunun liberal bir \u015Fekilde kullan\u0131m\u0131 \xF6nerilir ve daha sonra test etme ve solid davran\u0131\u015F\u0131 sa\u011Flama gerekti\u011Finde bunlar\u0131 kald\u0131r\u0131n. Unutmay\u0131n ki msg! Compute Units t\xFCketir, bu nedenle Compute Unit b\xFCt\xE7esi s\u0131n\u0131rlar\u0131n\u0131 zorlayarak program\u0131n\u0131z\u0131 ba\u015Far\u0131s\u0131zl\u0131\u011Fa u\u011Fratabilir. :::

A\u015Fa\u011F\u0131daki b\xF6l\xFCmlerdeki ad\u0131mlar solana-program-bpf-template kullan\u0131r. Bunu makinenize klonlay\u0131n:

git clone git@github.com:mvines/solana-bpf-program-template.git
+import{_ as t,r as l,o as r,c as i,a,b as e,F as o,e as p,d as s}from"./app.2fbb9e96.js";const c={},d=p(`

Debugging Solana Programs (Solana Programlar\u0131nda Hata Ay\u0131klama)

Bir Solana program\u0131n\u0131 test etmek ve hata ay\u0131klamak i\xE7in bir dizi se\xE7enek ve destekleyici ara\xE7 vard\u0131r.

Facts (\xD6zet Bilgiler)

:::Bilgi Tablosu

  • Crate solana-program-test, program\u0131n\u0131z\u0131 etkile\u015Fimli olarak test edebilece\u011Finiz ve hatalar\u0131n\u0131 ay\u0131klayabilece\u011Finiz (\xF6rn. vscode\u2019da) temel yerel \xE7al\u0131\u015Fma zaman\u0131n\u0131n kullan\u0131lmas\u0131n\u0131 sa\u011Flar.
  • Crate solana-validator, yerel bir validator node\u2019da ger\xE7ekle\u015Fen daha sa\u011Flam testler i\xE7in solana-test-validator uygulamas\u0131n\u0131n kullan\u0131lmas\u0131n\u0131 sa\u011Flar. D\xFCzenleyiciden \xE7al\u0131\u015Ft\u0131rabilirsiniz ancak programdaki kesme noktalar\u0131 yok say\u0131l\u0131r.
  • CLI arac\u0131 solana-test-validator program\u0131n\u0131z\u0131 \xE7al\u0131\u015Ft\u0131r\u0131r & y\xFCkler ve komut sat\u0131r\u0131 Rust uygulamalar\u0131ndan veya web3 kullanan Javascript/Typescript uygulamalar\u0131ndan i\u015Flem y\xFCr\xFCtmeyi sa\u011Flar.
  • Yukar\u0131daki t\xFCm durumlar i\xE7in, program\u0131n\u0131zda msg! makrosunun liberal bir \u015Fekilde kullan\u0131m\u0131 \xF6nerilir ve daha sonra test etme ve solid davran\u0131\u015F\u0131 sa\u011Flama gerekti\u011Finde bunlar\u0131 kald\u0131r\u0131n. Unutmay\u0131n ki msg! Compute Units t\xFCketir, bu nedenle Compute Unit b\xFCt\xE7esi s\u0131n\u0131rlar\u0131n\u0131 zorlayarak program\u0131n\u0131z\u0131 ba\u015Far\u0131s\u0131zl\u0131\u011Fa u\u011Fratabilir. :::

A\u015Fa\u011F\u0131daki b\xF6l\xFCmlerdeki ad\u0131mlar solana-program-bpf-template kullan\u0131r. Bunu makinenize klonlay\u0131n:

git clone git@github.com:mvines/solana-bpf-program-template.git
 cd solana-bpf-program-template
 code .
 

Runtime Testing and Debugging in editor (Edit\xF6rde Runtime Test ve Hata Ay\u0131klama)

src/lib.rs dosyas\u0131n\u0131 a\xE7\u0131n

  1. #[cfg(test)] b\xF6l\xFCm\xFCne gidin ve Run Tests'e t\u0131klay\u0131n. Bu, program\u0131 olu\u015Fturacak ve ard\u0131ndan async fn test_transaction() testini y\xFCr\xFCtecektir. Kayna\u011F\u0131n alt\u0131ndaki vscode terminalinde g\xFCnl\xFCk mesajlar\u0131n\u0131 (basitle\u015Ftirilmi\u015F) g\xF6receksiniz.
running 1 test
diff --git a/docs/.vuepress/dist/assets/feature-parity-testing.html.e5e8561b.js b/docs/.vuepress/dist/assets/feature-parity-testing.html.2af02bb0.js
similarity index 97%
rename from docs/.vuepress/dist/assets/feature-parity-testing.html.e5e8561b.js
rename to docs/.vuepress/dist/assets/feature-parity-testing.html.2af02bb0.js
index f70c3c096..0c029dc0a 100644
--- a/docs/.vuepress/dist/assets/feature-parity-testing.html.e5e8561b.js
+++ b/docs/.vuepress/dist/assets/feature-parity-testing.html.2af02bb0.js
@@ -1 +1 @@
-const e={key:"v-5da35ddc",path:"/th/guides/feature-parity-testing.html",title:"Feature Parity Testing",lang:"th-TH",frontmatter:{title:"Feature Parity Testing",head:[["meta",{name:"title",content:"\u0E04\u0E39\u0E48\u0E21\u0E37\u0E2D Solana | Feature Parity Testing"}],["meta",{name:"og:title",content:"\u0E04\u0E39\u0E48\u0E21\u0E37\u0E2D Solana | Feature Parity Testing"}],["meta",{name:"description",content:"\u0E04\u0E38\u0E13\u0E2A\u0E21\u0E1A\u0E31\u0E15\u0E34\u0E2B\u0E25\u0E32\u0E01\u0E2B\u0E25\u0E32\u0E22\u0E02\u0E2D\u0E07 Solana cluster. \u0E25\u0E31\u0E01\u0E29\u0E13\u0E30\u0E40\u0E09\u0E1E\u0E32\u0E30\u0E02\u0E2D\u0E07\u0E01\u0E32\u0E23 testing \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E1C\u0E25\u0E25\u0E31\u0E17\u0E18\u0E4C\u0E17\u0E35\u0E48\u0E41\u0E19\u0E48\u0E19\u0E2D\u0E19"}],["meta",{name:"og:description",content:"\u0E04\u0E38\u0E13\u0E2A\u0E21\u0E1A\u0E31\u0E15\u0E34\u0E2B\u0E25\u0E32\u0E01\u0E2B\u0E25\u0E32\u0E22\u0E02\u0E2D\u0E07 Solana cluster. \u0E25\u0E31\u0E01\u0E29\u0E13\u0E30\u0E40\u0E09\u0E1E\u0E32\u0E30\u0E02\u0E2D\u0E07\u0E01\u0E32\u0E23 testing \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E1C\u0E25\u0E25\u0E31\u0E17\u0E18\u0E4C\u0E17\u0E35\u0E48\u0E41\u0E19\u0E48\u0E19\u0E2D\u0E19"}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49",slug:"\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49",children:[]},{level:2,title:"Scenario",slug:"scenario",children:[]},{level:2,title:"Feature Status",slug:"feature-status",children:[]},{level:2,title:"Parity Testing",slug:"parity-testing",children:[]},{level:2,title:"\u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E07\u0E48\u0E32\u0E22\u0E46",slug:"\u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E07\u0E48\u0E32\u0E22\u0E46",children:[{level:3,title:"\u0E40\u0E1B\u0E34\u0E14\u0E17\u0E38\u0E01 features",slug:"\u0E40\u0E1B\u0E34\u0E14\u0E17\u0E38\u0E01-features",children:[]},{level:3,title:"\u0E40\u0E25\u0E37\u0E2D\u0E01\u0E1B\u0E34\u0E14 features",slug:"\u0E40\u0E25\u0E37\u0E2D\u0E01\u0E1B\u0E34\u0E14-features",children:[]}]},{level:2,title:"Feature Parity Testing",slug:"feature-parity-testing",children:[]},{level:2,title:"Full Parity Testing Programmatically",slug:"full-parity-testing-programmatically",children:[]},{level:2,title:"Resources",slug:"resources",children:[]}],git:{updatedTime:1660791465e3},filePathRelative:"th/guides/feature-parity-testing.md"};export{e as data};
+const e={key:"v-5da35ddc",path:"/th/guides/feature-parity-testing.html",title:"Feature Parity Testing",lang:"th-TH",frontmatter:{title:"Feature Parity Testing",head:[["meta",{name:"title",content:"\u0E04\u0E39\u0E48\u0E21\u0E37\u0E2D Solana | Feature Parity Testing"}],["meta",{name:"og:title",content:"\u0E04\u0E39\u0E48\u0E21\u0E37\u0E2D Solana | Feature Parity Testing"}],["meta",{name:"description",content:"\u0E04\u0E38\u0E13\u0E2A\u0E21\u0E1A\u0E31\u0E15\u0E34\u0E2B\u0E25\u0E32\u0E01\u0E2B\u0E25\u0E32\u0E22\u0E02\u0E2D\u0E07 Solana cluster. \u0E25\u0E31\u0E01\u0E29\u0E13\u0E30\u0E40\u0E09\u0E1E\u0E32\u0E30\u0E02\u0E2D\u0E07\u0E01\u0E32\u0E23 testing \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E1C\u0E25\u0E25\u0E31\u0E17\u0E18\u0E4C\u0E17\u0E35\u0E48\u0E41\u0E19\u0E48\u0E19\u0E2D\u0E19"}],["meta",{name:"og:description",content:"\u0E04\u0E38\u0E13\u0E2A\u0E21\u0E1A\u0E31\u0E15\u0E34\u0E2B\u0E25\u0E32\u0E01\u0E2B\u0E25\u0E32\u0E22\u0E02\u0E2D\u0E07 Solana cluster. \u0E25\u0E31\u0E01\u0E29\u0E13\u0E30\u0E40\u0E09\u0E1E\u0E32\u0E30\u0E02\u0E2D\u0E07\u0E01\u0E32\u0E23 testing \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E1C\u0E25\u0E25\u0E31\u0E17\u0E18\u0E4C\u0E17\u0E35\u0E48\u0E41\u0E19\u0E48\u0E19\u0E2D\u0E19"}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49",slug:"\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49",children:[]},{level:2,title:"Scenario",slug:"scenario",children:[]},{level:2,title:"Feature Status",slug:"feature-status",children:[]},{level:2,title:"Parity Testing",slug:"parity-testing",children:[]},{level:2,title:"\u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E07\u0E48\u0E32\u0E22\u0E46",slug:"\u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E07\u0E48\u0E32\u0E22\u0E46",children:[{level:3,title:"\u0E40\u0E1B\u0E34\u0E14\u0E17\u0E38\u0E01 features",slug:"\u0E40\u0E1B\u0E34\u0E14\u0E17\u0E38\u0E01-features",children:[]},{level:3,title:"\u0E40\u0E25\u0E37\u0E2D\u0E01\u0E1B\u0E34\u0E14 features",slug:"\u0E40\u0E25\u0E37\u0E2D\u0E01\u0E1B\u0E34\u0E14-features",children:[]}]},{level:2,title:"Feature Parity Testing",slug:"feature-parity-testing",children:[]},{level:2,title:"Full Parity Testing Programmatically",slug:"full-parity-testing-programmatically",children:[]},{level:2,title:"Resources",slug:"resources",children:[]}],git:{updatedTime:1676167053e3},filePathRelative:"th/guides/feature-parity-testing.md"};export{e as data};
diff --git a/docs/.vuepress/dist/assets/feature-parity-testing.html.7a1e13ef.js b/docs/.vuepress/dist/assets/feature-parity-testing.html.326a7f26.js
similarity index 99%
rename from docs/.vuepress/dist/assets/feature-parity-testing.html.7a1e13ef.js
rename to docs/.vuepress/dist/assets/feature-parity-testing.html.326a7f26.js
index 33dce97f3..8a83f9ffa 100644
--- a/docs/.vuepress/dist/assets/feature-parity-testing.html.7a1e13ef.js
+++ b/docs/.vuepress/dist/assets/feature-parity-testing.html.326a7f26.js
@@ -1,4 +1,4 @@
-import{_ as e,r as p,o,c,a as n,b as s,F as l,e as i,d as t}from"./app.cfdf84e7.js";var r="/assets/scfsd.cc67ec33.png";const u={},k=i(`

Feature Parity Testing (\xD6zellik Parite Testi)

Program\u0131n\u0131z\u0131 test ederken, \xE7e\u015Fitli k\xFCmelerde ayn\u0131 \u015Fekilde \xE7al\u0131\u015Faca\u011F\u0131n\u0131n g\xFCvencesi, hem kalite hem de beklenen sonu\xE7lar\u0131n \xFCretilmesi i\xE7in esast\u0131r.

Facts (\xD6zet Bilgiler)

:::Bilgi Tablosu

Features, Solana do\u011Frulay\u0131c\u0131lar\u0131na sunulan ve kullan\u0131lmas\u0131 i\xE7in etkinle\u015Ftirme gerektiren yeteneklerdir. Features bir k\xFCmede (\xF6r. testnet) etkinle\u015Ftirilebilir, ancak ba\u015Fka bir k\xFCmede (\xF6r. ana a\u011F-beta) etkinle\u015Ftirilemez. Yine de; varsay\u0131lan solana-test-validator'\u0131 yerel olarak \xE7al\u0131\u015Ft\u0131r\u0131rken, Solana s\xFCr\xFCm\xFCn\xFCzdeki mevcut t\xFCm \xF6zellikler otomatik olarak etkinle\u015Ftirilir. Sonu\xE7 olarak, yerel olarak test ederken, farkl\u0131 bir k\xFCmede da\u011F\u0131t\u0131rken ve \xE7al\u0131\u015Ft\u0131r\u0131rken testinizin yetenekleri ve sonu\xE7lar\u0131 ayn\u0131 olmayabilir! :::

Scenario (Senaryo)

\xDC\xE7 (3) talimat i\xE7eren bir i\u015Fleminiz oldu\u011Funu ve her talimat\u0131n yakla\u015F\u0131k 100_000 \u0130\u015Flem Birimi (Compute Unit - CU) t\xFCketti\u011Fini varsayal\u0131m. Bir Solana 1.8.x s\xFCr\xFCm\xFCnde \xE7al\u0131\u015F\u0131rken, talimat CU t\xFCketiminizi a\u015Fa\u011F\u0131dakine benzer \u015Fekilde g\xF6zlemlersiniz:

InstructionStarting CUExecutionRemaining CU
1200_000-100_000100_000
2200_000-100_000100_000
3200_000-100_000100_000

Solana 1.9.2'de, bir i\u015Flemin varsay\u0131lan olarak 200_000 CU b\xFCt\xE7esine sahip oldu\u011Fu ve kaps\xFCllenmi\u015F talimatlar\u0131n bu i\u015Flem b\xFCt\xE7esinden \xE7ekildi\u011Fi 'transaction i\u015Flem s\u0131n\u0131r\u0131' ad\u0131 verilen bir \xF6zellik vard\u0131r. Yukar\u0131da belirtildi\u011Fi gibi ayn\u0131 i\u015Flemi \xE7al\u0131\u015Ft\u0131rmak \xE7ok farkl\u0131 davran\u0131\u015Flara sahip olacakt\u0131r:

InstructionStarting CUExecutionRemaining CU
1200_000-100_000100_000
2100_000-100_0000
30HATA!!!HATA!!!

Evet! Bundan habersiz olsayd\u0131n\u0131z, talimat davran\u0131\u015F\u0131n\u0131zda buna neden olacak bir de\u011Fi\u015Fiklik olmad\u0131\u011F\u0131 i\xE7in muhtemelen hayal k\u0131r\u0131kl\u0131\u011F\u0131na u\u011Frars\u0131n\u0131z. Devnet'te iyi \xE7al\u0131\u015Ft\u0131, ancak yerel olarak ba\u015Far\u0131s\u0131z m\u0131 oldu?!?

\xD6rne\u011Fin 300_000 CU gibi genel \u0130\u015Flem b\xFCt\xE7esini art\u0131rma ve ak\u0131l sa\u011Fl\u0131\u011F\u0131n\u0131z\u0131 koruma olana\u011F\u0131 vard\u0131r, ancak bu, Feature Parity (\xD6zellik E\u015Fli\u011Fi) ile testin neden herhangi bir kar\u0131\u015F\u0131kl\u0131\u011F\u0131 \xF6nlemek i\xE7in proaktif bir yol sa\u011Flad\u0131\u011F\u0131n\u0131 g\xF6sterir.

Feature Status (\xD6zellik Durumu)

Solana feature status komutuyla belirli bir k\xFCme i\xE7in hangi \xF6zelliklerin etkinle\u015Ftirildi\u011Fini kontrol etmek olduk\xE7a kolayd\u0131r.

solana feature status -ud   // Displays by feature status for devnet
+import{_ as e,r as p,o,c,a as n,b as s,F as l,e as i,d as t}from"./app.2fbb9e96.js";var r="/assets/scfsd.cc67ec33.png";const u={},k=i(`

Feature Parity Testing (\xD6zellik Parite Testi)

Program\u0131n\u0131z\u0131 test ederken, \xE7e\u015Fitli k\xFCmelerde ayn\u0131 \u015Fekilde \xE7al\u0131\u015Faca\u011F\u0131n\u0131n g\xFCvencesi, hem kalite hem de beklenen sonu\xE7lar\u0131n \xFCretilmesi i\xE7in esast\u0131r.

Facts (\xD6zet Bilgiler)

:::Bilgi Tablosu

Features, Solana do\u011Frulay\u0131c\u0131lar\u0131na sunulan ve kullan\u0131lmas\u0131 i\xE7in etkinle\u015Ftirme gerektiren yeteneklerdir. Features bir k\xFCmede (\xF6r. testnet) etkinle\u015Ftirilebilir, ancak ba\u015Fka bir k\xFCmede (\xF6r. ana a\u011F-beta) etkinle\u015Ftirilemez. Yine de; varsay\u0131lan solana-test-validator'\u0131 yerel olarak \xE7al\u0131\u015Ft\u0131r\u0131rken, Solana s\xFCr\xFCm\xFCn\xFCzdeki mevcut t\xFCm \xF6zellikler otomatik olarak etkinle\u015Ftirilir. Sonu\xE7 olarak, yerel olarak test ederken, farkl\u0131 bir k\xFCmede da\u011F\u0131t\u0131rken ve \xE7al\u0131\u015Ft\u0131r\u0131rken testinizin yetenekleri ve sonu\xE7lar\u0131 ayn\u0131 olmayabilir! :::

Scenario (Senaryo)

\xDC\xE7 (3) talimat i\xE7eren bir i\u015Fleminiz oldu\u011Funu ve her talimat\u0131n yakla\u015F\u0131k 100_000 \u0130\u015Flem Birimi (Compute Unit - CU) t\xFCketti\u011Fini varsayal\u0131m. Bir Solana 1.8.x s\xFCr\xFCm\xFCnde \xE7al\u0131\u015F\u0131rken, talimat CU t\xFCketiminizi a\u015Fa\u011F\u0131dakine benzer \u015Fekilde g\xF6zlemlersiniz:

InstructionStarting CUExecutionRemaining CU
1200_000-100_000100_000
2200_000-100_000100_000
3200_000-100_000100_000

Solana 1.9.2'de, bir i\u015Flemin varsay\u0131lan olarak 200_000 CU b\xFCt\xE7esine sahip oldu\u011Fu ve kaps\xFCllenmi\u015F talimatlar\u0131n bu i\u015Flem b\xFCt\xE7esinden \xE7ekildi\u011Fi 'transaction i\u015Flem s\u0131n\u0131r\u0131' ad\u0131 verilen bir \xF6zellik vard\u0131r. Yukar\u0131da belirtildi\u011Fi gibi ayn\u0131 i\u015Flemi \xE7al\u0131\u015Ft\u0131rmak \xE7ok farkl\u0131 davran\u0131\u015Flara sahip olacakt\u0131r:

InstructionStarting CUExecutionRemaining CU
1200_000-100_000100_000
2100_000-100_0000
30HATA!!!HATA!!!

Evet! Bundan habersiz olsayd\u0131n\u0131z, talimat davran\u0131\u015F\u0131n\u0131zda buna neden olacak bir de\u011Fi\u015Fiklik olmad\u0131\u011F\u0131 i\xE7in muhtemelen hayal k\u0131r\u0131kl\u0131\u011F\u0131na u\u011Frars\u0131n\u0131z. Devnet'te iyi \xE7al\u0131\u015Ft\u0131, ancak yerel olarak ba\u015Far\u0131s\u0131z m\u0131 oldu?!?

\xD6rne\u011Fin 300_000 CU gibi genel \u0130\u015Flem b\xFCt\xE7esini art\u0131rma ve ak\u0131l sa\u011Fl\u0131\u011F\u0131n\u0131z\u0131 koruma olana\u011F\u0131 vard\u0131r, ancak bu, Feature Parity (\xD6zellik E\u015Fli\u011Fi) ile testin neden herhangi bir kar\u0131\u015F\u0131kl\u0131\u011F\u0131 \xF6nlemek i\xE7in proaktif bir yol sa\u011Flad\u0131\u011F\u0131n\u0131 g\xF6sterir.

Feature Status (\xD6zellik Durumu)

Solana feature status komutuyla belirli bir k\xFCme i\xE7in hangi \xF6zelliklerin etkinle\u015Ftirildi\u011Fini kontrol etmek olduk\xE7a kolayd\u0131r.

solana feature status -ud   // Displays by feature status for devnet
 solana feature status -ut   // Displays for testnet
 solana feature status -um   // Displays for mainnet-beta
 solana feature status -ul   // Displays for local, requires running solana-test-validator
diff --git a/docs/.vuepress/dist/assets/feature-parity-testing.html.950f6b4c.js b/docs/.vuepress/dist/assets/feature-parity-testing.html.54657bef.js
similarity index 99%
rename from docs/.vuepress/dist/assets/feature-parity-testing.html.950f6b4c.js
rename to docs/.vuepress/dist/assets/feature-parity-testing.html.54657bef.js
index d3b782a7e..df05ee24f 100644
--- a/docs/.vuepress/dist/assets/feature-parity-testing.html.950f6b4c.js
+++ b/docs/.vuepress/dist/assets/feature-parity-testing.html.54657bef.js
@@ -1,4 +1,4 @@
-import{_ as r,r as e,o as i,c as k,b as a,w as t,a as n,F as m,e as d,d as s}from"./app.cfdf84e7.js";var b="/assets/scfsd.cc67ec33.png";const f={},g=d(`

Prueba de paridad de caracter\xEDsticas

Al probar su programa, la garant\xEDa de que se ejecutar\xE1 de la misma manera en varios clusters es esencial tanto para la calidad como para producir los resultados esperados.

Hechos

Hoja de hechos

  • Las caracter\xEDsticas son capacidades que se introducen en los validadores de Solana y requieren activaci\xF3n para ser utilizadas.
  • Las caracter\xEDsticas pueden activarse en un cl\xFAster (p. ej., testnet) pero no en otro (p. ej., mainnet-beta).
  • Sin embargo; al ejecutar solana-test-validator localmente, todas las caracter\xEDsticas disponibles se activan autom\xE1ticamente. El resultado es que cuando se prueba localmente, las capacidades y los resultados puede que no sean las mismas que al ejecutar en un cl\xFAster diferente!

Escenario

Suponga que tiene una Transacci\xF3n que conten\xEDa tres (3) instrucciones y cada instrucci\xF3n consume aproximadamente 100_000 Unidades de c\xF3mputo (CU). Cuando se ejecuta en una versi\xF3n de Solana 1.8.x, observar\xEDa un consumo de CU de instrucci\xF3n similar a:

InstructionInicio de CUEjecuci\xF3nCU Restante
1200_000-100_000100_000
2200_000-100_000100_000
3200_000-100_000100_000

En Solana 1.9.2, se introdujo una funci\xF3n llamada 'l\xEDmite de c\xF3mputo amplio de transacci\xF3n' donde una transacci\xF3n, de forma predeterminada, tiene un presupuesto de 200_000 CU y las instrucciones encapsuladas draw down de ese presupuesto de transacci\xF3n. Corriendo la misma transacci\xF3n como se se\xF1al\xF3 anteriormente tendr\xEDa un comportamiento muy diferente:

InstructionInicio de CUEjecuci\xF3nCU Restante
1200_000-100_000100_000
2100_000-100_0000
30FALLA!!!FALLA!!!

\xA1Ay! Si no estuviera al tanto de esto, probablemente se sentir\xEDa frustrado ya que no hubo cambios en su comportamiento de instrucci\xF3n que causar\xEDa esto. En devnet funcion\xF3 bien, pero localmente estaba fallando?!?

Existe la posibilidad de aumentar el presupuesto general de transacciones, digamos 300_000 CU, y que no falle pero esto demuestra por qu\xE9 probar con Feature Parity proporciona una forma proactiva de evitar confusiones.

Estado de la funci\xF3n

Es bastante f\xE1cil verificar qu\xE9 funciones est\xE1n habilitadas para un cl\xFAster en particular con el comando solana feature status.

solana feature status -ud   // Displays by feature status for devnet
+import{_ as r,r as e,o as i,c as k,b as a,w as t,a as n,F as m,e as d,d as s}from"./app.2fbb9e96.js";var b="/assets/scfsd.cc67ec33.png";const f={},g=d(`

Prueba de paridad de caracter\xEDsticas

Al probar su programa, la garant\xEDa de que se ejecutar\xE1 de la misma manera en varios clusters es esencial tanto para la calidad como para producir los resultados esperados.

Hechos

Hoja de hechos

  • Las caracter\xEDsticas son capacidades que se introducen en los validadores de Solana y requieren activaci\xF3n para ser utilizadas.
  • Las caracter\xEDsticas pueden activarse en un cl\xFAster (p. ej., testnet) pero no en otro (p. ej., mainnet-beta).
  • Sin embargo; al ejecutar solana-test-validator localmente, todas las caracter\xEDsticas disponibles se activan autom\xE1ticamente. El resultado es que cuando se prueba localmente, las capacidades y los resultados puede que no sean las mismas que al ejecutar en un cl\xFAster diferente!

Escenario

Suponga que tiene una Transacci\xF3n que conten\xEDa tres (3) instrucciones y cada instrucci\xF3n consume aproximadamente 100_000 Unidades de c\xF3mputo (CU). Cuando se ejecuta en una versi\xF3n de Solana 1.8.x, observar\xEDa un consumo de CU de instrucci\xF3n similar a:

InstructionInicio de CUEjecuci\xF3nCU Restante
1200_000-100_000100_000
2200_000-100_000100_000
3200_000-100_000100_000

En Solana 1.9.2, se introdujo una funci\xF3n llamada 'l\xEDmite de c\xF3mputo amplio de transacci\xF3n' donde una transacci\xF3n, de forma predeterminada, tiene un presupuesto de 200_000 CU y las instrucciones encapsuladas draw down de ese presupuesto de transacci\xF3n. Corriendo la misma transacci\xF3n como se se\xF1al\xF3 anteriormente tendr\xEDa un comportamiento muy diferente:

InstructionInicio de CUEjecuci\xF3nCU Restante
1200_000-100_000100_000
2100_000-100_0000
30FALLA!!!FALLA!!!

\xA1Ay! Si no estuviera al tanto de esto, probablemente se sentir\xEDa frustrado ya que no hubo cambios en su comportamiento de instrucci\xF3n que causar\xEDa esto. En devnet funcion\xF3 bien, pero localmente estaba fallando?!?

Existe la posibilidad de aumentar el presupuesto general de transacciones, digamos 300_000 CU, y que no falle pero esto demuestra por qu\xE9 probar con Feature Parity proporciona una forma proactiva de evitar confusiones.

Estado de la funci\xF3n

Es bastante f\xE1cil verificar qu\xE9 funciones est\xE1n habilitadas para un cl\xFAster en particular con el comando solana feature status.

solana feature status -ud   // Displays by feature status for devnet
 solana feature status -ut   // Displays for testnet
 solana feature status -um   // Displays for mainnet-beta
 solana feature status -ul   // Displays for local, requires running solana-test-validator
diff --git a/docs/.vuepress/dist/assets/feature-parity-testing.html.589ec2f3.js b/docs/.vuepress/dist/assets/feature-parity-testing.html.8018c3be.js
similarity index 99%
rename from docs/.vuepress/dist/assets/feature-parity-testing.html.589ec2f3.js
rename to docs/.vuepress/dist/assets/feature-parity-testing.html.8018c3be.js
index d66c57bcc..5b189e2e7 100644
--- a/docs/.vuepress/dist/assets/feature-parity-testing.html.589ec2f3.js
+++ b/docs/.vuepress/dist/assets/feature-parity-testing.html.8018c3be.js
@@ -1,4 +1,4 @@
-import{_ as i,r as e,o as r,c as k,b as a,w as t,a as n,F as m,e as d,d as s}from"./app.cfdf84e7.js";var b="/assets/scfsd.cc67ec33.png";const g={},f=d(`

Funktionsparit\xE4tstest

Beim Testen Ihres Programms ist die Zusicherung erwartete Ergebnisse zu produzieren als auch in verschiedenen Clustern gleich ausgef\xFChrt wird, sowohl f\xFCr die Qualit\xE4t als auch f\xFCr die Sicherheit von entscheidender Bedeutung.

Fakten

Fact Sheet

  • Funktionen sind Funktionen, die in Solana-Validatoren eingef\xFChrt werden und f\xFCr deren Verwendung eine Aktivierung erforderlich ist.
  • Funktionen k\xF6nnen in einem Cluster (z. B. Testnet) aktiviert werden, in einem anderen (z. B. Mainnet-Beta) jedoch nicht.
  • Jedoch; Wenn Sie standardm\xE4\xDFig solana-test-validator lokal ausf\xFChren, werden alle verf\xFCgbaren Funktionen in Ihrer Die Solana-Version wird automatisch aktiviert. Das Ergebnis ist, dass beim Testen vor Ort die F\xE4higkeiten und Ergebnisse von Ihre Tests sind m\xF6glicherweise nicht die gleichen, wenn Sie sie in einem anderen Cluster bereitstellen und ausf\xFChren!

Szenario

Angenommen, Sie haben eine Transaktion, die drei (3) Anweisungen enth\xE4lt, und jede Anweisung verbraucht ungef\xE4hr 100_000 Recheneinheiten (CU). Wenn Sie eine Solana 1.8.x-Version ausf\xFChren, w\xFCrden Sie Ihren Befehls-CU-Verbrauch \xE4hnlich wie folgt beobachten:

InstructionStarting CUExecutionRemaining CU
1200_000-100_000100_000
2200_000-100_000100_000
3200_000-100_000100_000

In Solana 1.9.2 wurde eine Funktion namens \u201Etransaktionsweite Rechenobergrenze\u201C eingef\xFChrt, bei der eine Transaktion standardm\xE4\xDFig ein Budget von 200_000 CU hat und die Anweisungen draw down aus diesem Transaktionsbudget gekapselten sind. Die selbe Transaktion, wie oben erw\xE4hnt laufen zu lassen, w\xFCrde ein ganz anderes Verhalten haben:

InstructionStarting CUExecutionRemaining CU
1200_000-100_000100_000
2100_000-100_0000
30FAIL!!!FAIL!!!

Huch! Wenn Sie sich dessen nicht bewusst w\xE4ren, w\xE4ren Sie wahrscheinlich frustriert, da sich Ihr Unterrichtsverhalten dadurch nicht ge\xE4ndert hat. Auf devnet hat es gut funktioniert, aber lokal hat es nicht funktioniert?!?

Es besteht die M\xF6glichkeit, das gesamte Transaktionsbudget zu erh\xF6hen, sagen wir auf 300_000 CU, und Ihre geistige Gesundheit zu retten. Dies zeigt jedoch, warum das Testen mit Feature Parity eine proaktive M\xF6glichkeit bietet, Verwirrung zu vermeiden.

Feature Status

Mit dem Befehl \u201Esolana feature status\u201C l\xE4sst sich recht einfach \xFCberpr\xFCfen, welche Funktionen f\xFCr einen bestimmten Cluster aktiviert sind.

solana feature status -ud   // Displays by feature status for devnet
+import{_ as i,r as e,o as r,c as k,b as a,w as t,a as n,F as m,e as d,d as s}from"./app.2fbb9e96.js";var b="/assets/scfsd.cc67ec33.png";const g={},f=d(`

Funktionsparit\xE4tstest

Beim Testen Ihres Programms ist die Zusicherung erwartete Ergebnisse zu produzieren als auch in verschiedenen Clustern gleich ausgef\xFChrt wird, sowohl f\xFCr die Qualit\xE4t als auch f\xFCr die Sicherheit von entscheidender Bedeutung.

Fakten

Fact Sheet

  • Funktionen sind Funktionen, die in Solana-Validatoren eingef\xFChrt werden und f\xFCr deren Verwendung eine Aktivierung erforderlich ist.
  • Funktionen k\xF6nnen in einem Cluster (z. B. Testnet) aktiviert werden, in einem anderen (z. B. Mainnet-Beta) jedoch nicht.
  • Jedoch; Wenn Sie standardm\xE4\xDFig solana-test-validator lokal ausf\xFChren, werden alle verf\xFCgbaren Funktionen in Ihrer Die Solana-Version wird automatisch aktiviert. Das Ergebnis ist, dass beim Testen vor Ort die F\xE4higkeiten und Ergebnisse von Ihre Tests sind m\xF6glicherweise nicht die gleichen, wenn Sie sie in einem anderen Cluster bereitstellen und ausf\xFChren!

Szenario

Angenommen, Sie haben eine Transaktion, die drei (3) Anweisungen enth\xE4lt, und jede Anweisung verbraucht ungef\xE4hr 100_000 Recheneinheiten (CU). Wenn Sie eine Solana 1.8.x-Version ausf\xFChren, w\xFCrden Sie Ihren Befehls-CU-Verbrauch \xE4hnlich wie folgt beobachten:

InstructionStarting CUExecutionRemaining CU
1200_000-100_000100_000
2200_000-100_000100_000
3200_000-100_000100_000

In Solana 1.9.2 wurde eine Funktion namens \u201Etransaktionsweite Rechenobergrenze\u201C eingef\xFChrt, bei der eine Transaktion standardm\xE4\xDFig ein Budget von 200_000 CU hat und die Anweisungen draw down aus diesem Transaktionsbudget gekapselten sind. Die selbe Transaktion, wie oben erw\xE4hnt laufen zu lassen, w\xFCrde ein ganz anderes Verhalten haben:

InstructionStarting CUExecutionRemaining CU
1200_000-100_000100_000
2100_000-100_0000
30FAIL!!!FAIL!!!

Huch! Wenn Sie sich dessen nicht bewusst w\xE4ren, w\xE4ren Sie wahrscheinlich frustriert, da sich Ihr Unterrichtsverhalten dadurch nicht ge\xE4ndert hat. Auf devnet hat es gut funktioniert, aber lokal hat es nicht funktioniert?!?

Es besteht die M\xF6glichkeit, das gesamte Transaktionsbudget zu erh\xF6hen, sagen wir auf 300_000 CU, und Ihre geistige Gesundheit zu retten. Dies zeigt jedoch, warum das Testen mit Feature Parity eine proaktive M\xF6glichkeit bietet, Verwirrung zu vermeiden.

Feature Status

Mit dem Befehl \u201Esolana feature status\u201C l\xE4sst sich recht einfach \xFCberpr\xFCfen, welche Funktionen f\xFCr einen bestimmten Cluster aktiviert sind.

solana feature status -ud   // Displays by feature status for devnet
 solana feature status -ut   // Displays for testnet
 solana feature status -um   // Displays for mainnet-beta
 solana feature status -ul   // Displays for local, requires running solana-test-validator
diff --git a/docs/.vuepress/dist/assets/feature-parity-testing.html.14463cda.js b/docs/.vuepress/dist/assets/feature-parity-testing.html.a6a87887.js
similarity index 99%
rename from docs/.vuepress/dist/assets/feature-parity-testing.html.14463cda.js
rename to docs/.vuepress/dist/assets/feature-parity-testing.html.a6a87887.js
index 250195ba4..fa90a0107 100644
--- a/docs/.vuepress/dist/assets/feature-parity-testing.html.14463cda.js
+++ b/docs/.vuepress/dist/assets/feature-parity-testing.html.a6a87887.js
@@ -1,4 +1,4 @@
-import{_ as r,r as e,o as i,c as k,b as a,w as t,a as n,F as m,e as b,d as s}from"./app.cfdf84e7.js";var d="/assets/scfsd.cc67ec33.png";const f={},_=b(`

Feature Parity Testing

\uB2F9\uC2E0\uC774 \uD504\uB85C\uADF8\uB7A8\uC744 \uD14C\uC2A4\uD2B8\uD560 \uB54C, \uB2E4\uC591\uD55C cluster\uB4E4\uC5D0\uC11C \uB3D9\uC77C\uD55C \uAC83\uC744 \uC2E4\uD589\uD560 \uAC83\uC774\uB77C\uB294 \uD655\uC2E0\uC740 \uD504\uB85C\uADF8\uB7A8\uC758 \uC9C8\uACFC \uC608\uCE21\uB41C \uACB0\uACFC\uB97C \uB9CC\uB4E4\uAE30 \uC704\uD574 \uB9E4\uC6B0 \uD544\uC218\uC801\uC785\uB2C8\uB2E4.

Facts

Fact Sheet

  • \uAE30\uB2A5\uB4E4\uC740 Solana validator\uB4E4\uC5D0\uAC8C \uC18C\uAC1C\uB418\uB294 \uAE30\uB2A5\uB4E4\uB85C \uC0AC\uC6A9\uD558\uAE30 \uC704\uD574 \uD65C\uC131\uD654\uAC00 \uD544\uC694\uD569\uB2C8\uB2E4.
  • \uAE30\uB2A5\uB4E4\uC740 \uD558\uB098\uC758 cluster(e.g. testnet) \uC5D0\uC11C \uD65C\uC131\uD654\uB420\uC9C0 \uBAA8\uB974\uC9C0\uB9CC \uB2E4\uB978 cluster(e.g. mainnet-beta) \uC5D0\uC11C\uB294 \uC544\uB2D0 \uC218 \uC788\uC2B5\uB2C8\uB2E4.
  • \uADF8\uB7EC\uB098 \uB85C\uCEEC\uC5D0\uC11C \uAE30\uBCF8 solana-test-validator\uB97C \uC2E4\uD589\uD560 \uB54C, \uB2F9\uC2E0\uC758 solana version\uC5D0\uC11C \uAC00\uB2A5\uD55C \uBAA8\uB4E0 \uAE30\uB2A5\uB4E4\uC774 \uC790\uB3D9\uC73C\uB85C \uD65C\uC131\uD654\uB420 \uAC83\uC785\uB2C8\uB2E4. \uB85C\uCEEC\uC5D0\uC11C \uD14C\uC2A4\uD2B8\uD560\uB54C \uD14C\uC2A4\uD2B8 \uACB0\uACFC\uB4E4\uC740 \uB2E4\uB978 cluster\uC5D0 \uBC30\uD3EC\uD558\uACE0 \uC2E4\uD589\uD55C \uACB0\uACFC\uC640 \uB2E4\uB97C \uC218\uB3C4 \uC788\uC2B5\uB2C8\uB2E4.

Scenario

\uB2F9\uC2E0\uC774 3\uAC1C\uC758 Instuction\uB4E4\uC744 \uD3EC\uD568\uD558\uB294 \uD558\uB098\uC758 Transaction\uC744 \uAC16\uACE0 \uAC01 Instruction\uC740 \uB300\uB7B5 100_000 \uCEF4\uD4E8\uD130 \uC720\uB2DB\uC744 \uC18C\uBE44\uD55C\uB2E4\uACE0 \uAC00\uC815\uD569\uC2DC\uB2E4. Solana 1.8.x \uBC84\uC804\uC5D0\uC11C \uB3CC\uB9B4 \uB54C, \uB2F9\uC2E0\uC740 \uC544\uB798\uC640 \uC720\uC0AC\uD55C Insturction CU \uC18C\uBE44\uB97C \uBCF4\uAC8C \uB420 \uAC83\uC785\uB2C8\uB2E4.

InstructionStarting CUExecutionRemaining CU
1200_000-100_000100_000
2200_000-100_000100_000
3200_000-100_000100_000

\uC194\uB77C\uB098 1.9.2 \uBC84\uC804\uC5D0\uC11C 'transaction wide comput cap'\uC774\uB77C \uBD88\uB9AC\uB294 \uAE30\uB2A5\uC774 \uC18C\uAC1C\uB418\uC5C8\uB294\uB370, \uC5EC\uAE30\uC11C Transaction\uC740 \uAE30\uBCF8\uC801\uC73C\uB85C 200_000 CU \uC5D0\uC0B0\uC744 \uAC16\uACE0 \uCEA1\uC290\uD654\uB41C Instruction\uB4E4\uC740 \uC774 Transaction \uC608\uC0B0\uC5D0\uC11C \uB04C\uC5B4\uC640 \uC0AC\uC6A9\uB429\uB2C8\uB2E4. \uC704\uC5D0\uC11C \uC5B8\uAE09\uB41C \uAC19\uC740 Transaction\uC744 \uC2E4\uD589\uD558\uBA74 \uB2E4\uB978 \uACB0\uACFC\uB97C \uC5BB\uAC8C \uB420 \uAC83\uC785\uB2C8\uB2E4:

InstructionStarting CUExecutionRemaining CU
1200_000-100_000100_000
2100_000-100_0000
30FAIL!!!FAIL!!!

\uB2F9\uC2E0\uC774 \uC774\uAC83\uC744 \uC54C\uC9C0 \uBABB\uD588\uB2E4\uBA74, \uB2F9\uC2E0\uC758 Instruction\uC740 \uBCC0\uD654\uAC00 \uC5C6\uC74C\uC5D0\uB3C4 \uC774\uAC83\uC744 \uBC1C\uC0DD\uC2DC\uD0A4\uB294 \uAC83\uC744 \uBCF4\uACE0 \uC88C\uC808\uD560\uC9C0\uB3C4 \uBAA8\uB985\uB2C8\uB2E4. devnet\uC5D0\uC11C\uB294 \uAD18\uCC2E\uC9C0\uB9CC local\uC5D0\uC11C\uB294 \uC2E4\uD328?!?

\uB2F9\uC2E0\uC758 \uC815\uC2E0\uC744 \uC9C0\uD0A4\uAE30 \uC704\uD574 300_000 CU\uB97C \uD5C8\uB77D\uD558\uB3C4\uB85D \uC804\uCCB4\uC801\uC778 Transaction budget\uC744 \uC99D\uAC00\uC2DC\uD0A4\uB294 \uB2A5\uB825\uC774 \uC874\uC7AC\uD569\uB2C8\uB2E4. \uADF8\uB7EC\uB098 \uC774 \uAE00\uC740 **Feature Parity**\uB97C \uAC00\uC9C0\uACE0 \uD14C\uC2A4\uD2B8\uD558\uB294 \uAC83\uC774 \uD63C\uB780\uC744 \uD53C\uD558\uAE30 \uC704\uD55C \uB300\uCC45\uC744 \uC81C\uACF5\uD558\uB294 \uC774\uC720\uC784\uC744 \uC785\uC99D\uD558\uB294 \uAC83\uC785\uB2C8\uB2E4.

Feature Status

solana feature status command\uB864 \uD2B9\uC815 cluster\uC5D0\uC11C \uAC00\uB2A5\uD55C \uAE30\uB2A5\uB4E4\uC774 \uBB34\uC5C7\uC774 \uC788\uB294 \uC9C0 \uC27D\uAC8C \uD655\uC778\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.

solana feature status -ud   // Displays by feature status for devnet
+import{_ as r,r as e,o as i,c as k,b as a,w as t,a as n,F as m,e as b,d as s}from"./app.2fbb9e96.js";var d="/assets/scfsd.cc67ec33.png";const f={},_=b(`

Feature Parity Testing

\uB2F9\uC2E0\uC774 \uD504\uB85C\uADF8\uB7A8\uC744 \uD14C\uC2A4\uD2B8\uD560 \uB54C, \uB2E4\uC591\uD55C cluster\uB4E4\uC5D0\uC11C \uB3D9\uC77C\uD55C \uAC83\uC744 \uC2E4\uD589\uD560 \uAC83\uC774\uB77C\uB294 \uD655\uC2E0\uC740 \uD504\uB85C\uADF8\uB7A8\uC758 \uC9C8\uACFC \uC608\uCE21\uB41C \uACB0\uACFC\uB97C \uB9CC\uB4E4\uAE30 \uC704\uD574 \uB9E4\uC6B0 \uD544\uC218\uC801\uC785\uB2C8\uB2E4.

Facts

Fact Sheet

  • \uAE30\uB2A5\uB4E4\uC740 Solana validator\uB4E4\uC5D0\uAC8C \uC18C\uAC1C\uB418\uB294 \uAE30\uB2A5\uB4E4\uB85C \uC0AC\uC6A9\uD558\uAE30 \uC704\uD574 \uD65C\uC131\uD654\uAC00 \uD544\uC694\uD569\uB2C8\uB2E4.
  • \uAE30\uB2A5\uB4E4\uC740 \uD558\uB098\uC758 cluster(e.g. testnet) \uC5D0\uC11C \uD65C\uC131\uD654\uB420\uC9C0 \uBAA8\uB974\uC9C0\uB9CC \uB2E4\uB978 cluster(e.g. mainnet-beta) \uC5D0\uC11C\uB294 \uC544\uB2D0 \uC218 \uC788\uC2B5\uB2C8\uB2E4.
  • \uADF8\uB7EC\uB098 \uB85C\uCEEC\uC5D0\uC11C \uAE30\uBCF8 solana-test-validator\uB97C \uC2E4\uD589\uD560 \uB54C, \uB2F9\uC2E0\uC758 solana version\uC5D0\uC11C \uAC00\uB2A5\uD55C \uBAA8\uB4E0 \uAE30\uB2A5\uB4E4\uC774 \uC790\uB3D9\uC73C\uB85C \uD65C\uC131\uD654\uB420 \uAC83\uC785\uB2C8\uB2E4. \uB85C\uCEEC\uC5D0\uC11C \uD14C\uC2A4\uD2B8\uD560\uB54C \uD14C\uC2A4\uD2B8 \uACB0\uACFC\uB4E4\uC740 \uB2E4\uB978 cluster\uC5D0 \uBC30\uD3EC\uD558\uACE0 \uC2E4\uD589\uD55C \uACB0\uACFC\uC640 \uB2E4\uB97C \uC218\uB3C4 \uC788\uC2B5\uB2C8\uB2E4.

Scenario

\uB2F9\uC2E0\uC774 3\uAC1C\uC758 Instuction\uB4E4\uC744 \uD3EC\uD568\uD558\uB294 \uD558\uB098\uC758 Transaction\uC744 \uAC16\uACE0 \uAC01 Instruction\uC740 \uB300\uB7B5 100_000 \uCEF4\uD4E8\uD130 \uC720\uB2DB\uC744 \uC18C\uBE44\uD55C\uB2E4\uACE0 \uAC00\uC815\uD569\uC2DC\uB2E4. Solana 1.8.x \uBC84\uC804\uC5D0\uC11C \uB3CC\uB9B4 \uB54C, \uB2F9\uC2E0\uC740 \uC544\uB798\uC640 \uC720\uC0AC\uD55C Insturction CU \uC18C\uBE44\uB97C \uBCF4\uAC8C \uB420 \uAC83\uC785\uB2C8\uB2E4.

InstructionStarting CUExecutionRemaining CU
1200_000-100_000100_000
2200_000-100_000100_000
3200_000-100_000100_000

\uC194\uB77C\uB098 1.9.2 \uBC84\uC804\uC5D0\uC11C 'transaction wide comput cap'\uC774\uB77C \uBD88\uB9AC\uB294 \uAE30\uB2A5\uC774 \uC18C\uAC1C\uB418\uC5C8\uB294\uB370, \uC5EC\uAE30\uC11C Transaction\uC740 \uAE30\uBCF8\uC801\uC73C\uB85C 200_000 CU \uC5D0\uC0B0\uC744 \uAC16\uACE0 \uCEA1\uC290\uD654\uB41C Instruction\uB4E4\uC740 \uC774 Transaction \uC608\uC0B0\uC5D0\uC11C \uB04C\uC5B4\uC640 \uC0AC\uC6A9\uB429\uB2C8\uB2E4. \uC704\uC5D0\uC11C \uC5B8\uAE09\uB41C \uAC19\uC740 Transaction\uC744 \uC2E4\uD589\uD558\uBA74 \uB2E4\uB978 \uACB0\uACFC\uB97C \uC5BB\uAC8C \uB420 \uAC83\uC785\uB2C8\uB2E4:

InstructionStarting CUExecutionRemaining CU
1200_000-100_000100_000
2100_000-100_0000
30FAIL!!!FAIL!!!

\uB2F9\uC2E0\uC774 \uC774\uAC83\uC744 \uC54C\uC9C0 \uBABB\uD588\uB2E4\uBA74, \uB2F9\uC2E0\uC758 Instruction\uC740 \uBCC0\uD654\uAC00 \uC5C6\uC74C\uC5D0\uB3C4 \uC774\uAC83\uC744 \uBC1C\uC0DD\uC2DC\uD0A4\uB294 \uAC83\uC744 \uBCF4\uACE0 \uC88C\uC808\uD560\uC9C0\uB3C4 \uBAA8\uB985\uB2C8\uB2E4. devnet\uC5D0\uC11C\uB294 \uAD18\uCC2E\uC9C0\uB9CC local\uC5D0\uC11C\uB294 \uC2E4\uD328?!?

\uB2F9\uC2E0\uC758 \uC815\uC2E0\uC744 \uC9C0\uD0A4\uAE30 \uC704\uD574 300_000 CU\uB97C \uD5C8\uB77D\uD558\uB3C4\uB85D \uC804\uCCB4\uC801\uC778 Transaction budget\uC744 \uC99D\uAC00\uC2DC\uD0A4\uB294 \uB2A5\uB825\uC774 \uC874\uC7AC\uD569\uB2C8\uB2E4. \uADF8\uB7EC\uB098 \uC774 \uAE00\uC740 **Feature Parity**\uB97C \uAC00\uC9C0\uACE0 \uD14C\uC2A4\uD2B8\uD558\uB294 \uAC83\uC774 \uD63C\uB780\uC744 \uD53C\uD558\uAE30 \uC704\uD55C \uB300\uCC45\uC744 \uC81C\uACF5\uD558\uB294 \uC774\uC720\uC784\uC744 \uC785\uC99D\uD558\uB294 \uAC83\uC785\uB2C8\uB2E4.

Feature Status

solana feature status command\uB864 \uD2B9\uC815 cluster\uC5D0\uC11C \uAC00\uB2A5\uD55C \uAE30\uB2A5\uB4E4\uC774 \uBB34\uC5C7\uC774 \uC788\uB294 \uC9C0 \uC27D\uAC8C \uD655\uC778\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.

solana feature status -ud   // Displays by feature status for devnet
 solana feature status -ut   // Displays for testnet
 solana feature status -um   // Displays for mainnet-beta
 solana feature status -ul   // Displays for local, requires running solana-test-validator
diff --git a/docs/.vuepress/dist/assets/feature-parity-testing.html.a8aab496.js b/docs/.vuepress/dist/assets/feature-parity-testing.html.c42953f4.js
similarity index 99%
rename from docs/.vuepress/dist/assets/feature-parity-testing.html.a8aab496.js
rename to docs/.vuepress/dist/assets/feature-parity-testing.html.c42953f4.js
index 8efe31700..c386cb8f5 100644
--- a/docs/.vuepress/dist/assets/feature-parity-testing.html.a8aab496.js
+++ b/docs/.vuepress/dist/assets/feature-parity-testing.html.c42953f4.js
@@ -1,10 +1,10 @@
-import{_ as r,r as e,o as i,c as k,b as a,w as t,a as n,F as m,e as b,d as s}from"./app.cfdf84e7.js";var d="/assets/scfsd.cc67ec33.png";const f={},g=b(`

\u0E01\u0E32\u0E23\u0E17\u0E14\u0E2A\u0E2D\u0E1A\u0E43\u0E2B\u0E49\u0E40\u0E2B\u0E21\u0E37\u0E2D\u0E19\u0E01\u0E31\u0E19 (Parity Testing)

\u0E01\u0E32\u0E23\u0E17\u0E14\u0E2A\u0E2D\u0E1A program \u0E08\u0E30\u0E17\u0E33\u0E43\u0E2B\u0E49\u0E40\u0E23\u0E32\u0E21\u0E31\u0E48\u0E19\u0E43\u0E08\u0E44\u0E14\u0E49\u0E43\u0E19\u0E17\u0E31\u0E49\u0E07\u0E04\u0E38\u0E13\u0E20\u0E32\u0E1E \u0E41\u0E25\u0E30\u0E1C\u0E25\u0E25\u0E31\u0E1E\u0E17\u0E18\u0E4C\u0E17\u0E35\u0E48\u0E44\u0E14\u0E49

\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49

Fact Sheet

  • \u0E04\u0E38\u0E13\u0E2A\u0E21\u0E1A\u0E31\u0E15\u0E34\u0E40\u0E09\u0E1E\u0E32\u0E30 (Features) \u0E04\u0E37\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 (capabilities) \u0E17\u0E35\u0E48\u0E21\u0E35\u0E21\u0E32\u0E01\u0E31\u0E1A Solana validators \u0E41\u0E25\u0E30\u0E15\u0E49\u0E2D\u0E07\u0E40\u0E1B\u0E34\u0E14\u0E16\u0E36\u0E07\u0E08\u0E30\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19\u0E44\u0E14\u0E49
  • Features \u0E2D\u0E32\u0E08\u0E08\u0E30\u0E16\u0E39\u0E01\u0E40\u0E1B\u0E34\u0E14\u0E40\u0E1E\u0E35\u0E22\u0E07 cluster \u0E40\u0E14\u0E35\u0E22\u0E27 (\u0E40\u0E0A\u0E48\u0E19\u0E1A\u0E19 testnet) \u0E41\u0E15\u0E48\u0E44\u0E21\u0E48\u0E44\u0E14\u0E49\u0E40\u0E1B\u0E34\u0E14\u0E43\u0E2B\u0E49\u0E43\u0E0A\u0E49\u0E17\u0E35\u0E48\u0E2D\u0E37\u0E48\u0E19 (\u0E40\u0E0A\u0E48\u0E19 mainnet-beta).
  • \u0E2D\u0E22\u0E48\u0E32\u0E07\u0E44\u0E23\u0E01\u0E47\u0E15\u0E32\u0E21\u0E40\u0E21\u0E37\u0E48\u0E2D\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19 solana-test-validator \u0E14\u0E49\u0E27\u0E22\u0E04\u0E48\u0E32\u0E15\u0E31\u0E49\u0E07\u0E15\u0E49\u0E19\u0E1B\u0E01\u0E15\u0E34\u0E17\u0E35\u0E48 local, \u0E17\u0E38\u0E01\u0E46 features \u0E08\u0E30\u0E16\u0E39\u0E01\u0E40\u0E1B\u0E34\u0E14\u0E43\u0E2B\u0E49\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19\u0E44\u0E14\u0E49\u0E17\u0E31\u0E49\u0E07\u0E2B\u0E21\u0E14\u0E15\u0E32\u0E21 Solana version \u0E17\u0E33\u0E43\u0E2B\u0E49\u0E1C\u0E25\u0E17\u0E35\u0E48\u0E44\u0E14\u0E49\u0E40\u0E27\u0E25\u0E32 testing \u0E17\u0E35\u0E48 local \u0E01\u0E31\u0E1A capabilities \u0E41\u0E25\u0E30\u0E1C\u0E25\u0E02\u0E2D\u0E07\u0E01\u0E32\u0E23\u0E17\u0E14\u0E2A\u0E2D\u0E1A\u0E2D\u0E32\u0E08\u0E08\u0E30\u0E44\u0E21\u0E48\u0E15\u0E23\u0E07\u0E01\u0E31\u0E19\u0E40\u0E27\u0E25\u0E32\u0E17\u0E35\u0E48 deploying \u0E41\u0E25\u0E30 running \u0E43\u0E19 cluster \u0E2D\u0E37\u0E48\u0E19\u0E46!

Scenario

\u0E2A\u0E21\u0E21\u0E15\u0E34\u0E27\u0E48\u0E32\u0E40\u0E23\u0E32\u0E21\u0E35 transaction \u0E17\u0E35\u0E48\u0E21\u0E35 (3) instructions \u0E41\u0E25\u0E30\u0E41\u0E15\u0E48\u0E25\u0E30 instruction \u0E43\u0E0A\u0E49\u0E1B\u0E23\u0E30\u0E21\u0E32\u0E13 100_000 Compute Units (CU) \u0E1A\u0E19 Solana 1.8.x, \u0E40\u0E23\u0E32\u0E08\u0E30\u0E40\u0E2B\u0E47\u0E19 instruction CU consumption \u0E04\u0E25\u0E49\u0E32\u0E22\u0E46 \u0E41\u0E1A\u0E1A\u0E19\u0E35\u0E49:

InstructionStarting CUExecutionRemaining CU
1200_000-100_000100_000
2200_000-100_000100_000
3200_000-100_000100_000

\u0E1A\u0E19 Solana 1.9.2 \u0E08\u0E30\u0E21\u0E35 feature 'transaction wide compute cap' \u0E17\u0E35\u0E48\u0E40\u0E1E\u0E34\u0E48\u0E21\u0E40\u0E02\u0E49\u0E32\u0E21\u0E32\u0E43\u0E19\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07 transaction \u0E42\u0E14\u0E22\u0E04\u0E48\u0E32\u0E1B\u0E01\u0E15\u0E34\u0E08\u0E30\u0E21\u0E35 budget \u0E43\u0E2B\u0E49 200_000 CU \u0E41\u0E25\u0E30 instructions \u0E17\u0E35\u0E48\u0E15\u0E34\u0E14\u0E44\u0E1B \u0E08\u0E30\u0E2B\u0E31\u0E01 budget \u0E21\u0E32\u0E08\u0E32\u0E01 transaction \u0E19\u0E31\u0E49\u0E19\u0E14\u0E49\u0E27\u0E22. \u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49 transaction \u0E17\u0E35\u0E48\u0E40\u0E04\u0E22\u0E43\u0E0A\u0E49\u0E44\u0E1B\u0E01\u0E48\u0E2D\u0E19\u0E2B\u0E19\u0E49\u0E32\u0E08\u0E30\u0E44\u0E14\u0E49\u0E1C\u0E25\u0E17\u0E35\u0E48\u0E41\u0E15\u0E01\u0E15\u0E48\u0E32\u0E07\u0E40\u0E1B\u0E47\u0E19\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E21\u0E32\u0E01:

InstructionStarting CUExecutionRemaining CU
1200_000-100_000100_000
2100_000-100_0000
30FAIL!!!FAIL!!!

\u0E21\u0E38\u0E41\u0E07! \u0E16\u0E49\u0E32\u0E40\u0E23\u0E32\u0E44\u0E21\u0E48\u0E23\u0E39\u0E49\u0E21\u0E32\u0E01\u0E48\u0E2D\u0E19\u0E04\u0E07\u0E15\u0E01\u0E43\u0E08\u0E41\u0E22\u0E48 \u0E40\u0E1E\u0E23\u0E32\u0E30\u0E40\u0E23\u0E32\u0E44\u0E21\u0E48\u0E44\u0E14\u0E49\u0E40\u0E1B\u0E25\u0E35\u0E48\u0E22\u0E19 instruction \u0E2D\u0E30\u0E44\u0E23\u0E40\u0E25\u0E22\u0E41\u0E25\u0E49\u0E27\u0E43\u0E19 devnet \u0E01\u0E47\u0E43\u0E0A\u0E49\u0E44\u0E14\u0E49\u0E41\u0E15\u0E48\u0E17\u0E35\u0E48 local \u0E17\u0E33\u0E44\u0E21\u0E1E\u0E31\u0E07?!?

\u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E40\u0E1E\u0E34\u0E48\u0E21 Transaction budget \u0E42\u0E14\u0E22\u0E23\u0E27\u0E21\u0E44\u0E14\u0E49\u0E1B\u0E23\u0E30\u0E21\u0E32\u0E13 300_000 CU \u0E40\u0E1C\u0E37\u0E48\u0E2D\u0E40\u0E23\u0E32\u0E08\u0E30\u0E44\u0E14\u0E49\u0E23\u0E39\u0E49\u0E2A\u0E36\u0E01\u0E14\u0E35\u0E02\u0E36\u0E49\u0E19 \u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E14\u0E49\u0E32\u0E19\u0E1A\u0E19\u0E1E\u0E22\u0E32\u0E22\u0E32\u0E21\u0E41\u0E2A\u0E14\u0E07\u0E43\u0E2B\u0E49\u0E40\u0E23\u0E32\u0E40\u0E2B\u0E47\u0E19\u0E27\u0E48\u0E32\u0E17\u0E33\u0E44\u0E21\u0E01\u0E32\u0E23\u0E17\u0E14\u0E2A\u0E2D\u0E1A\u0E14\u0E49\u0E27\u0E22 Feature Parity \u0E16\u0E36\u0E07\u0E40\u0E1B\u0E47\u0E19\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E17\u0E35\u0E48\u0E14\u0E35\u0E17\u0E35\u0E48\u0E08\u0E30\u0E40\u0E15\u0E23\u0E35\u0E22\u0E21\u0E15\u0E31\u0E27\u0E44\u0E27\u0E49\u0E01\u0E48\u0E2D\u0E19\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E2B\u0E25\u0E35\u0E01\u0E40\u0E25\u0E35\u0E48\u0E22\u0E07\u0E04\u0E27\u0E32\u0E21\u0E2A\u0E31\u0E1A\u0E2A\u0E19\u0E43\u0E19\u0E20\u0E32\u0E22\u0E2B\u0E25\u0E31\u0E07

Feature Status

\u0E21\u0E31\u0E19\u0E07\u0E48\u0E32\u0E22\u0E21\u0E32\u0E01\u0E17\u0E35\u0E48\u0E08\u0E30\u0E15\u0E23\u0E27\u0E08\u0E2A\u0E2D\u0E1A\u0E27\u0E48\u0E32 features \u0E44\u0E2B\u0E19\u0E40\u0E1B\u0E34\u0E14\u0E43\u0E2B\u0E49\u0E43\u0E0A\u0E49\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E41\u0E15\u0E48\u0E25\u0E30 cluster \u0E14\u0E49\u0E27\u0E22\u0E04\u0E33\u0E2A\u0E31\u0E48\u0E07 solana feature status

solana feature status -ud   // Displays by feature status for devnet
+import{_ as r,r as e,o as i,c as k,b as a,w as t,a as n,F as m,e as b,d as s}from"./app.2fbb9e96.js";var d="/assets/scfsd.cc67ec33.png";const f={},g=b(`

\u0E01\u0E32\u0E23\u0E17\u0E14\u0E2A\u0E2D\u0E1A\u0E43\u0E2B\u0E49\u0E40\u0E2B\u0E21\u0E37\u0E2D\u0E19\u0E01\u0E31\u0E19 (Parity Testing)

\u0E01\u0E32\u0E23\u0E17\u0E14\u0E2A\u0E2D\u0E1A program \u0E08\u0E30\u0E17\u0E33\u0E43\u0E2B\u0E49\u0E40\u0E23\u0E32\u0E21\u0E31\u0E48\u0E19\u0E43\u0E08\u0E44\u0E14\u0E49\u0E43\u0E19\u0E17\u0E31\u0E49\u0E07\u0E04\u0E38\u0E13\u0E20\u0E32\u0E1E \u0E41\u0E25\u0E30\u0E1C\u0E25\u0E25\u0E31\u0E1E\u0E17\u0E18\u0E4C\u0E17\u0E35\u0E48\u0E44\u0E14\u0E49

\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49

Fact Sheet

  • \u0E04\u0E38\u0E13\u0E2A\u0E21\u0E1A\u0E31\u0E15\u0E34\u0E40\u0E09\u0E1E\u0E32\u0E30 (Features) \u0E04\u0E37\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 (capabilities) \u0E17\u0E35\u0E48\u0E21\u0E35\u0E21\u0E32\u0E01\u0E31\u0E1A Solana validators \u0E41\u0E25\u0E30\u0E15\u0E49\u0E2D\u0E07\u0E40\u0E1B\u0E34\u0E14\u0E16\u0E36\u0E07\u0E08\u0E30\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19\u0E44\u0E14\u0E49
  • Features \u0E2D\u0E32\u0E08\u0E08\u0E30\u0E16\u0E39\u0E01\u0E40\u0E1B\u0E34\u0E14\u0E40\u0E1E\u0E35\u0E22\u0E07 cluster \u0E40\u0E14\u0E35\u0E22\u0E27 (\u0E40\u0E0A\u0E48\u0E19\u0E1A\u0E19 testnet) \u0E41\u0E15\u0E48\u0E44\u0E21\u0E48\u0E44\u0E14\u0E49\u0E40\u0E1B\u0E34\u0E14\u0E43\u0E2B\u0E49\u0E43\u0E0A\u0E49\u0E17\u0E35\u0E48\u0E2D\u0E37\u0E48\u0E19 (\u0E40\u0E0A\u0E48\u0E19 mainnet-beta).
  • \u0E2D\u0E22\u0E48\u0E32\u0E07\u0E44\u0E23\u0E01\u0E47\u0E15\u0E32\u0E21\u0E40\u0E21\u0E37\u0E48\u0E2D\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19 solana-test-validator \u0E14\u0E49\u0E27\u0E22\u0E04\u0E48\u0E32\u0E15\u0E31\u0E49\u0E07\u0E15\u0E49\u0E19\u0E1B\u0E01\u0E15\u0E34\u0E17\u0E35\u0E48 local, \u0E17\u0E38\u0E01\u0E46 features \u0E08\u0E30\u0E16\u0E39\u0E01\u0E40\u0E1B\u0E34\u0E14\u0E43\u0E2B\u0E49\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19\u0E44\u0E14\u0E49\u0E17\u0E31\u0E49\u0E07\u0E2B\u0E21\u0E14\u0E15\u0E32\u0E21 Solana version \u0E17\u0E33\u0E43\u0E2B\u0E49\u0E1C\u0E25\u0E17\u0E35\u0E48\u0E44\u0E14\u0E49\u0E40\u0E27\u0E25\u0E32 testing \u0E17\u0E35\u0E48 local \u0E01\u0E31\u0E1A capabilities \u0E41\u0E25\u0E30\u0E1C\u0E25\u0E02\u0E2D\u0E07\u0E01\u0E32\u0E23\u0E17\u0E14\u0E2A\u0E2D\u0E1A\u0E2D\u0E32\u0E08\u0E08\u0E30\u0E44\u0E21\u0E48\u0E15\u0E23\u0E07\u0E01\u0E31\u0E19\u0E40\u0E27\u0E25\u0E32\u0E17\u0E35\u0E48 deploying \u0E41\u0E25\u0E30 running \u0E43\u0E19 cluster \u0E2D\u0E37\u0E48\u0E19\u0E46!

Scenario

\u0E2A\u0E21\u0E21\u0E15\u0E34\u0E27\u0E48\u0E32\u0E40\u0E23\u0E32\u0E21\u0E35 transaction \u0E17\u0E35\u0E48\u0E21\u0E35 (3) instructions \u0E41\u0E25\u0E30\u0E41\u0E15\u0E48\u0E25\u0E30 instruction \u0E43\u0E0A\u0E49\u0E1B\u0E23\u0E30\u0E21\u0E32\u0E13 100_000 Compute Units (CU) \u0E1A\u0E19 Solana 1.8.x, \u0E40\u0E23\u0E32\u0E08\u0E30\u0E40\u0E2B\u0E47\u0E19 instruction CU consumption \u0E04\u0E25\u0E49\u0E32\u0E22\u0E46 \u0E41\u0E1A\u0E1A\u0E19\u0E35\u0E49:

InstructionStarting CUExecutionRemaining CU
1200_000-100_000100_000
2200_000-100_000100_000
3200_000-100_000100_000

\u0E1A\u0E19 Solana 1.9.2 \u0E08\u0E30\u0E21\u0E35 feature 'transaction wide compute cap' \u0E17\u0E35\u0E48\u0E40\u0E1E\u0E34\u0E48\u0E21\u0E40\u0E02\u0E49\u0E32\u0E21\u0E32\u0E43\u0E19\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07 transaction \u0E42\u0E14\u0E22\u0E04\u0E48\u0E32\u0E1B\u0E01\u0E15\u0E34\u0E08\u0E30\u0E21\u0E35 budget \u0E43\u0E2B\u0E49 200_000 CU \u0E41\u0E25\u0E30 instructions \u0E17\u0E35\u0E48\u0E15\u0E34\u0E14\u0E44\u0E1B \u0E08\u0E30\u0E2B\u0E31\u0E01 budget \u0E21\u0E32\u0E08\u0E32\u0E01 transaction \u0E19\u0E31\u0E49\u0E19\u0E14\u0E49\u0E27\u0E22. \u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49 transaction \u0E17\u0E35\u0E48\u0E40\u0E04\u0E22\u0E43\u0E0A\u0E49\u0E44\u0E1B\u0E01\u0E48\u0E2D\u0E19\u0E2B\u0E19\u0E49\u0E32\u0E08\u0E30\u0E44\u0E14\u0E49\u0E1C\u0E25\u0E17\u0E35\u0E48\u0E41\u0E15\u0E01\u0E15\u0E48\u0E32\u0E07\u0E40\u0E1B\u0E47\u0E19\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E21\u0E32\u0E01:

InstructionStarting CUExecutionRemaining CU
1200_000-100_000100_000
2100_000-100_0000
30FAIL!!!FAIL!!!

\u0E21\u0E38\u0E41\u0E07! \u0E16\u0E49\u0E32\u0E40\u0E23\u0E32\u0E44\u0E21\u0E48\u0E23\u0E39\u0E49\u0E21\u0E32\u0E01\u0E48\u0E2D\u0E19\u0E04\u0E07\u0E15\u0E01\u0E43\u0E08\u0E41\u0E22\u0E48 \u0E40\u0E1E\u0E23\u0E32\u0E30\u0E40\u0E23\u0E32\u0E44\u0E21\u0E48\u0E44\u0E14\u0E49\u0E40\u0E1B\u0E25\u0E35\u0E48\u0E22\u0E19 instruction \u0E2D\u0E30\u0E44\u0E23\u0E40\u0E25\u0E22\u0E41\u0E25\u0E49\u0E27\u0E43\u0E19 devnet \u0E01\u0E47\u0E43\u0E0A\u0E49\u0E44\u0E14\u0E49\u0E41\u0E15\u0E48\u0E17\u0E35\u0E48 local \u0E17\u0E33\u0E44\u0E21\u0E1E\u0E31\u0E07?!?

\u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E40\u0E1E\u0E34\u0E48\u0E21 Transaction budget \u0E42\u0E14\u0E22\u0E23\u0E27\u0E21\u0E44\u0E14\u0E49\u0E1B\u0E23\u0E30\u0E21\u0E32\u0E13 300_000 CU \u0E40\u0E1C\u0E37\u0E48\u0E2D\u0E40\u0E23\u0E32\u0E08\u0E30\u0E44\u0E14\u0E49\u0E23\u0E39\u0E49\u0E2A\u0E36\u0E01\u0E14\u0E35\u0E02\u0E36\u0E49\u0E19 \u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E14\u0E49\u0E32\u0E19\u0E1A\u0E19\u0E1E\u0E22\u0E32\u0E22\u0E32\u0E21\u0E41\u0E2A\u0E14\u0E07\u0E43\u0E2B\u0E49\u0E40\u0E23\u0E32\u0E40\u0E2B\u0E47\u0E19\u0E27\u0E48\u0E32\u0E17\u0E33\u0E44\u0E21\u0E01\u0E32\u0E23\u0E17\u0E14\u0E2A\u0E2D\u0E1A\u0E14\u0E49\u0E27\u0E22 Feature Parity \u0E16\u0E36\u0E07\u0E40\u0E1B\u0E47\u0E19\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E17\u0E35\u0E48\u0E14\u0E35\u0E17\u0E35\u0E48\u0E08\u0E30\u0E40\u0E15\u0E23\u0E35\u0E22\u0E21\u0E15\u0E31\u0E27\u0E44\u0E27\u0E49\u0E01\u0E48\u0E2D\u0E19\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E2B\u0E25\u0E35\u0E01\u0E40\u0E25\u0E35\u0E48\u0E22\u0E07\u0E04\u0E27\u0E32\u0E21\u0E2A\u0E31\u0E1A\u0E2A\u0E19\u0E43\u0E19\u0E20\u0E32\u0E22\u0E2B\u0E25\u0E31\u0E07

Feature Status

\u0E21\u0E31\u0E19\u0E07\u0E48\u0E32\u0E22\u0E21\u0E32\u0E01\u0E17\u0E35\u0E48\u0E08\u0E30\u0E15\u0E23\u0E27\u0E08\u0E2A\u0E2D\u0E1A\u0E27\u0E48\u0E32 features \u0E44\u0E2B\u0E19\u0E40\u0E1B\u0E34\u0E14\u0E43\u0E2B\u0E49\u0E43\u0E0A\u0E49\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E41\u0E15\u0E48\u0E25\u0E30 cluster \u0E14\u0E49\u0E27\u0E22\u0E04\u0E33\u0E2A\u0E31\u0E48\u0E07 solana feature status

solana feature status -ud   // Displays by feature status for devnet
 solana feature status -ut   // Displays for testnet
 solana feature status -um   // Displays for mainnet-beta
 solana feature status -ul   // Displays for local, requires running solana-test-validator
 

\u0E19\u0E2D\u0E01\u0E08\u0E32\u0E01\u0E19\u0E35\u0E49\u0E40\u0E23\u0E32\u0E22\u0E31\u0E07\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E43\u0E0A\u0E49 scfsd \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E15\u0E34\u0E14\u0E15\u0E32\u0E21\u0E14\u0E39\u0E17\u0E38\u0E01\u0E46 feature \u0E43\u0E19\u0E17\u0E38\u0E01\u0E46 clusters \u0E15\u0E32\u0E21\u0E20\u0E32\u0E21\u0E1A\u0E32\u0E07\u0E2A\u0E48\u0E27\u0E19\u0E02\u0E49\u0E32\u0E07\u0E25\u0E48\u0E32\u0E07 \u0E41\u0E25\u0E30\u0E21\u0E31\u0E19\u0E22\u0E31\u0E07\u0E44\u0E21\u0E48\u0E15\u0E49\u0E2D\u0E07\u0E43\u0E0A\u0E49 solana-test-validator \u0E43\u0E19\u0E01\u0E32\u0E23\u0E17\u0E33\u0E07\u0E32\u0E19\u0E14\u0E49\u0E27\u0E22:

Feature Status Heatmap

Parity Testing

\u0E15\u0E32\u0E21\u0E17\u0E35\u0E48\u0E1A\u0E2D\u0E01\u0E44\u0E1B\u0E41\u0E25\u0E49\u0E27\u0E27\u0E48\u0E32 solana-test-validator \u0E08\u0E30\u0E40\u0E1B\u0E34\u0E14 \u0E17\u0E38\u0E01\u0E46 features \u0E2D\u0E31\u0E15\u0E42\u0E19\u0E21\u0E31\u0E15\u0E34 \u0E14\u0E31\u0E07\u0E19\u0E31\u0E49\u0E19\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E17\u0E35\u0E48\u0E08\u0E30\u0E15\u0E2D\u0E1A\u0E04\u0E33\u0E16\u0E32\u0E21\u0E17\u0E35\u0E48\u0E27\u0E48\u0E32 "\u0E40\u0E23\u0E32\u0E08\u0E30\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E17\u0E14\u0E2A\u0E2D\u0E1A\u0E17\u0E35\u0E48 local \u0E14\u0E49\u0E27\u0E22 environment \u0E17\u0E35\u0E48\u0E40\u0E2B\u0E21\u0E37\u0E2D\u0E19 devnet, testnet \u0E2B\u0E23\u0E37\u0E2D\u0E41\u0E21\u0E49\u0E41\u0E15\u0E48 mainnet-beta \u0E44\u0E14\u0E49\u0E22\u0E31\u0E07\u0E44\u0E07?".

\u0E17\u0E32\u0E07\u0E41\u0E01\u0E49\u0E44\u0E02: PRs \u0E17\u0E35\u0E48\u0E40\u0E1E\u0E34\u0E48\u0E21\u0E40\u0E02\u0E49\u0E32\u0E21\u0E32\u0E43\u0E19 Solana 1.9.6 \u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E17\u0E33\u0E43\u0E2B\u0E49\u0E40\u0E23\u0E32\u0E1B\u0E34\u0E14 features \u0E15\u0E48\u0E32\u0E07\u0E46 \u0E44\u0E14\u0E49:

solana-test-validator --deactivate-feature <FEATURE_PUBKEY> ...
 

\u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E07\u0E48\u0E32\u0E22\u0E46

\u0E2A\u0E21\u0E21\u0E15\u0E34\u0E27\u0E48\u0E32\u0E04\u0E38\u0E13\u0E21\u0E35 program \u0E07\u0E48\u0E32\u0E22\u0E46 \u0E17\u0E35\u0E48 log \u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E17\u0E35\u0E48\u0E44\u0E14\u0E49\u0E23\u0E31\u0E1A\u0E43\u0E19 entry-point \u0E41\u0E25\u0E30\u0E40\u0E23\u0E32\u0E08\u0E30\u0E17\u0E14\u0E2A\u0E2D\u0E1A transaction \u0E17\u0E35\u0E48\u0E40\u0E1E\u0E34\u0E48\u0E21 (2) instructions \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A program \u0E02\u0E2D\u0E07\u0E40\u0E23\u0E32.

\u0E40\u0E1B\u0E34\u0E14\u0E17\u0E38\u0E01 features

  1. \u0E40\u0E23\u0E32\u0E08\u0E30\u0E40\u0E1B\u0E34\u0E14 test validator \u0E43\u0E19 terminal:
solana config set -ul
-solana-test-validator -l ./ledger --bpf-program target/deploy/PROGNAME.so --reset\`
+solana-test-validator -l ./ledger --bpf-program ADDRESS target/deploy/PROGNAME.so --reset\`
 
  1. \u0E43\u0E19 terminal \u0E2D\u0E35\u0E01\u0E2D\u0E31\u0E19\u0E43\u0E2B\u0E49\u0E40\u0E1B\u0E34\u0E14 log streamer:
solana logs
 
  1. \u0E41\u0E25\u0E49\u0E27\u0E01\u0E47 run transaction \u0E40\u0E23\u0E32\u0E08\u0E30\u0E40\u0E2B\u0E47\u0E19 log \u0E17\u0E35\u0E48\u0E04\u0E38\u0E49\u0E19\u0E40\u0E04\u0E22\u0E43\u0E19 terminal (\u0E21\u0E35\u0E1B\u0E23\u0E31\u0E1A\u0E43\u0E2B\u0E49\u0E14\u0E39\u0E07\u0E48\u0E32\u0E22):
Program PWDnx8LkjJUn9bAVzG6Fp6BuvB41x7DkBZdo9YLMGcc invoke [1]
 Program log: process_instruction: PWDnx8LkjJUn9bAVzG6Fp6BuvB41x7DkBZdo9YLMGcc: 0 accounts, data=[0]
diff --git a/docs/.vuepress/dist/assets/feature-parity-testing.html.20df7fb3.js b/docs/.vuepress/dist/assets/feature-parity-testing.html.d47db88f.js
similarity index 99%
rename from docs/.vuepress/dist/assets/feature-parity-testing.html.20df7fb3.js
rename to docs/.vuepress/dist/assets/feature-parity-testing.html.d47db88f.js
index 11aa74df7..441df0dcf 100644
--- a/docs/.vuepress/dist/assets/feature-parity-testing.html.20df7fb3.js
+++ b/docs/.vuepress/dist/assets/feature-parity-testing.html.d47db88f.js
@@ -1,4 +1,4 @@
-import{_ as k,r as e,o as m,c as d,b as s,w as t,a as n,F as b,e as u,d as a}from"./app.cfdf84e7.js";var l="/assets/scfsd.cc67ec33.png";const g={},f=u(`

Pengujian Paritas Fitur

Saat menguji program Anda, jaminan bahwa program akan berjalan sama di berbagai cluster sangatlah penting untuk kualitas dan menghasilkan hasil yang diharapkan.

Fakta

Lembar Fakta

  • Fitur adalah kemampuan yang diperkenalkan ke validator Solana dan memerlukan aktivasi untuk digunakan.
  • Fitur dapat diaktifkan di satu cluster (misalnya testnet) tetapi tidak di cluster lain (misalnya mainnet-beta).
  • Namun; saat menjalankan solana-test-validator default secara lokal, semua fitur yang tersedia di Solana versi Anda diaktifkan secara otomatis. Hasilnya adalah ketika menguji secara lokal, kemampuan dan hasil dari pengujian Anda mungkin tidak sama saat menerapkan dan menjalankan di cluster yang berbeda!

Skenario

Asumsikan Anda memiliki Transaksi yang berisi tiga (3) instruksi dan setiap instruksi mengkonsumsi kira-kira 100_000 Compute Unit (CU). Saat menjalankan dalam versi Solana 1.8.x, Anda akan mengamati konsumsi CU instruksi Anda mirip dengan:

InstruksiMulai CUEksekusiSisa CU
1200_000-100_000100_000
2200_000-100_000100_000
3200_000-100_000100_000

Di Solana 1.9.2 fitur yang disebut 'transaction wide compute cap' diperkenalkan di mana Transaksi, secara default, memiliki anggaran 200_000 CU dan instruksi yang dienkapsulasi draw down dari anggaran Transaksi tersebut. Menjalankan transaksi yang sama seperti yang sebelumnya akan menunjukkan hasil yang sangat berbeda:

InstruksiMulai CUEksekusiSisa CU
1200_000-100_000100_000
2100_000-100_0000
30GAGAL!!!GAGAL!!!

Astaga! Jika Anda tidak menyadari hal ini, Anda mungkin akan frustrasi karena tidak ada perubahan pada behavior instruksi Anda yang akan menyebabkan ini. Di devnet itu berfungsi dengan baik, tetapi secara lokal gagal?!?

Ada kemampuan untuk meningkatkan keseluruhan anggaran Transaksi, katakanlah 300_000 CU, dan selamatkan kewarasan Anda, namun ini menunjukkan mengapa pengujian dengan Feature Parity memberikan cara proaktif untuk menghindari kebingungan.

Status Fitur

Cukup mudah untuk memeriksa fitur apa yang diaktifkan untuk cluster tertentu dengan perintah solana feature status.

solana feature status -ud   // Displays by feature status for devnet
+import{_ as k,r as e,o as m,c as d,b as s,w as t,a as n,F as b,e as u,d as a}from"./app.2fbb9e96.js";var l="/assets/scfsd.cc67ec33.png";const g={},f=u(`

Pengujian Paritas Fitur

Saat menguji program Anda, jaminan bahwa program akan berjalan sama di berbagai cluster sangatlah penting untuk kualitas dan menghasilkan hasil yang diharapkan.

Fakta

Lembar Fakta

  • Fitur adalah kemampuan yang diperkenalkan ke validator Solana dan memerlukan aktivasi untuk digunakan.
  • Fitur dapat diaktifkan di satu cluster (misalnya testnet) tetapi tidak di cluster lain (misalnya mainnet-beta).
  • Namun; saat menjalankan solana-test-validator default secara lokal, semua fitur yang tersedia di Solana versi Anda diaktifkan secara otomatis. Hasilnya adalah ketika menguji secara lokal, kemampuan dan hasil dari pengujian Anda mungkin tidak sama saat menerapkan dan menjalankan di cluster yang berbeda!

Skenario

Asumsikan Anda memiliki Transaksi yang berisi tiga (3) instruksi dan setiap instruksi mengkonsumsi kira-kira 100_000 Compute Unit (CU). Saat menjalankan dalam versi Solana 1.8.x, Anda akan mengamati konsumsi CU instruksi Anda mirip dengan:

InstruksiMulai CUEksekusiSisa CU
1200_000-100_000100_000
2200_000-100_000100_000
3200_000-100_000100_000

Di Solana 1.9.2 fitur yang disebut 'transaction wide compute cap' diperkenalkan di mana Transaksi, secara default, memiliki anggaran 200_000 CU dan instruksi yang dienkapsulasi draw down dari anggaran Transaksi tersebut. Menjalankan transaksi yang sama seperti yang sebelumnya akan menunjukkan hasil yang sangat berbeda:

InstruksiMulai CUEksekusiSisa CU
1200_000-100_000100_000
2100_000-100_0000
30GAGAL!!!GAGAL!!!

Astaga! Jika Anda tidak menyadari hal ini, Anda mungkin akan frustrasi karena tidak ada perubahan pada behavior instruksi Anda yang akan menyebabkan ini. Di devnet itu berfungsi dengan baik, tetapi secara lokal gagal?!?

Ada kemampuan untuk meningkatkan keseluruhan anggaran Transaksi, katakanlah 300_000 CU, dan selamatkan kewarasan Anda, namun ini menunjukkan mengapa pengujian dengan Feature Parity memberikan cara proaktif untuk menghindari kebingungan.

Status Fitur

Cukup mudah untuk memeriksa fitur apa yang diaktifkan untuk cluster tertentu dengan perintah solana feature status.

solana feature status -ud   // Displays by feature status for devnet
 solana feature status -ut   // Displays for testnet
 solana feature status -um   // Displays for mainnet-beta
 solana feature status -ul   // Displays for local, requires running solana-test-validator
diff --git a/docs/.vuepress/dist/assets/feature-parity-testing.html.68575bff.js b/docs/.vuepress/dist/assets/feature-parity-testing.html.dbdc3bf2.js
similarity index 99%
rename from docs/.vuepress/dist/assets/feature-parity-testing.html.68575bff.js
rename to docs/.vuepress/dist/assets/feature-parity-testing.html.dbdc3bf2.js
index f6b285bf9..889e147b8 100644
--- a/docs/.vuepress/dist/assets/feature-parity-testing.html.68575bff.js
+++ b/docs/.vuepress/dist/assets/feature-parity-testing.html.dbdc3bf2.js
@@ -1,4 +1,4 @@
-import{_ as r,r as e,o as i,c as k,b as a,w as t,a as n,F as m,e as d,d as s}from"./app.cfdf84e7.js";var b="/assets/scfsd.cc67ec33.png";const f={},_=d(`

Test de Conformit\xE9 des Fonctionnalit\xE9s

Lorsque vous testez votre programme, il est essentiel de s'assurer qu'il fonctionnera de la m\xEAme mani\xE8re dans diff\xE9rents clusters, tant pour la qualit\xE9 que pour l'obtention des r\xE9sultats attendus.

Faits

Fiche d'Information

  • Les fonctionnalit\xE9s sont des changements qui sont introduits dans le code des validateurs Solana et qui n\xE9cessitent une activation pour \xEAtre utilis\xE9s.
  • Les fonctionnalit\xE9s peuvent \xEAtre activ\xE9es dans un cluster (par exemple testnet) mais pas dans un autre (par exemple mainnet-beta).
  • Cependant, lorsque vous ex\xE9cutez localement la version par d\xE9faut de solana-test-validator, toutes les fonctionnalit\xE9s disponibles dans votre version de Solana sont automatiquement activ\xE9es. Le r\xE9sultat est que lorsque vous testez localement, les fonctionnalit\xE9s et les r\xE9sultats de vos tests peuvent ne pas \xEAtre les m\xEAmes lorsque vous d\xE9ployez et ex\xE9cutez dans un cluster diff\xE9rent !

Sc\xE9nario

Supposons que vous ayez une Transaction qui contient trois (3) instructions et que chaque instruction consomme environ 100_000 Unit\xE9s de Calcul (UC). Lors de l'ex\xE9cution sur une version Solana 1.8.x, vous observeriez une consommation de CU d'instruction ressemblant \xE0 :

InstructionCU de d\xE9partEx\xE9cutionCU Restants
1200_000-100_000100_000
2200_000-100_000100_000
3200_000-100_000100_000

Dans Solana 1.9.2, une fonctionnalit\xE9 appel\xE9e "plafond de calcul pour l'ensemble des transactions (transaction wide compute cap)" a \xE9t\xE9 introduite. Par d\xE9faut, une Transaction a un budget de 200_000 CU et les instructions qui la composent vont d\xE9biter ce budget de Transaction. L'ex\xE9cution de la m\xEAme transaction indiqu\xE9e ci-dessus aurait un comportement tr\xE8s diff\xE9rent :

InstructionCU de d\xE9partEx\xE9cutionCU Restants
1200_000-100_000100_000
2100_000-100_0000
30FAIL!!!FAIL!!!

A\xEFe ! Si vous n'en \xE9tiez pas conscient, vous seriez probablement frustr\xE9 car aucun changement dans vos instructions n'aurait pu provoquer ce ph\xE9nom\xE8ne. Sur le devnet il fonctionne bien, mais localement il \xE9choue ?!?

Il est possible d'augmenter le budget global de la Transaction, par exemple \xE0 300_000 UC, et de sauver votre sant\xE9 mentale, mais cela montre pourquoi les tests avec _Conformit\xE9 des Fonctionnalit\xE9s constituent un bon moyen d'\xE9viter toute confusion.

Statut de la Fonctionnalit\xE9

Il est assez facile de v\xE9rifier quelles fonctionnalit\xE9s sont disponibles pour un cluster donn\xE9 avec la commande solana feature status.

solana feature status -ud   // Displays by feature status for devnet
+import{_ as r,r as e,o as i,c as k,b as a,w as t,a as n,F as m,e as d,d as s}from"./app.2fbb9e96.js";var b="/assets/scfsd.cc67ec33.png";const f={},_=d(`

Test de Conformit\xE9 des Fonctionnalit\xE9s

Lorsque vous testez votre programme, il est essentiel de s'assurer qu'il fonctionnera de la m\xEAme mani\xE8re dans diff\xE9rents clusters, tant pour la qualit\xE9 que pour l'obtention des r\xE9sultats attendus.

Faits

Fiche d'Information

  • Les fonctionnalit\xE9s sont des changements qui sont introduits dans le code des validateurs Solana et qui n\xE9cessitent une activation pour \xEAtre utilis\xE9s.
  • Les fonctionnalit\xE9s peuvent \xEAtre activ\xE9es dans un cluster (par exemple testnet) mais pas dans un autre (par exemple mainnet-beta).
  • Cependant, lorsque vous ex\xE9cutez localement la version par d\xE9faut de solana-test-validator, toutes les fonctionnalit\xE9s disponibles dans votre version de Solana sont automatiquement activ\xE9es. Le r\xE9sultat est que lorsque vous testez localement, les fonctionnalit\xE9s et les r\xE9sultats de vos tests peuvent ne pas \xEAtre les m\xEAmes lorsque vous d\xE9ployez et ex\xE9cutez dans un cluster diff\xE9rent !

Sc\xE9nario

Supposons que vous ayez une Transaction qui contient trois (3) instructions et que chaque instruction consomme environ 100_000 Unit\xE9s de Calcul (UC). Lors de l'ex\xE9cution sur une version Solana 1.8.x, vous observeriez une consommation de CU d'instruction ressemblant \xE0 :

InstructionCU de d\xE9partEx\xE9cutionCU Restants
1200_000-100_000100_000
2200_000-100_000100_000
3200_000-100_000100_000

Dans Solana 1.9.2, une fonctionnalit\xE9 appel\xE9e "plafond de calcul pour l'ensemble des transactions (transaction wide compute cap)" a \xE9t\xE9 introduite. Par d\xE9faut, une Transaction a un budget de 200_000 CU et les instructions qui la composent vont d\xE9biter ce budget de Transaction. L'ex\xE9cution de la m\xEAme transaction indiqu\xE9e ci-dessus aurait un comportement tr\xE8s diff\xE9rent :

InstructionCU de d\xE9partEx\xE9cutionCU Restants
1200_000-100_000100_000
2100_000-100_0000
30FAIL!!!FAIL!!!

A\xEFe ! Si vous n'en \xE9tiez pas conscient, vous seriez probablement frustr\xE9 car aucun changement dans vos instructions n'aurait pu provoquer ce ph\xE9nom\xE8ne. Sur le devnet il fonctionne bien, mais localement il \xE9choue ?!?

Il est possible d'augmenter le budget global de la Transaction, par exemple \xE0 300_000 UC, et de sauver votre sant\xE9 mentale, mais cela montre pourquoi les tests avec _Conformit\xE9 des Fonctionnalit\xE9s constituent un bon moyen d'\xE9viter toute confusion.

Statut de la Fonctionnalit\xE9

Il est assez facile de v\xE9rifier quelles fonctionnalit\xE9s sont disponibles pour un cluster donn\xE9 avec la commande solana feature status.

solana feature status -ud   // Displays by feature status for devnet
 solana feature status -ut   // Displays for testnet
 solana feature status -um   // Displays for mainnet-beta
 solana feature status -ul   // Displays for local, requires running solana-test-validator
diff --git a/docs/.vuepress/dist/assets/feature-parity-testing.html.0bfcadb8.js b/docs/.vuepress/dist/assets/feature-parity-testing.html.e02d9a55.js
similarity index 99%
rename from docs/.vuepress/dist/assets/feature-parity-testing.html.0bfcadb8.js
rename to docs/.vuepress/dist/assets/feature-parity-testing.html.e02d9a55.js
index 742910cd8..01da3c5b2 100644
--- a/docs/.vuepress/dist/assets/feature-parity-testing.html.0bfcadb8.js
+++ b/docs/.vuepress/dist/assets/feature-parity-testing.html.e02d9a55.js
@@ -1,4 +1,4 @@
-import{_ as i,r as e,o as r,c as k,b as a,w as t,a as n,F as m,e as b,d as s}from"./app.cfdf84e7.js";var d="/assets/scfsd.cc67ec33.png";const h={},g=b(`

\u0110\u1EC1 xu\u1EA5t Ki\u1EC3m th\u1EED Parity

Khi ki\u1EC3m th\u1EED ch\u01B0\u01A1ng tr\xECnh, ch\xFAng ta mu\u1ED1n ch\u1EAFc r\u1EB1ng ch\u01B0\u01A1ng tr\xECnh s\u1EBD ch\u1EA1y nh\u01B0 nhau tr\xEAn m\u1ECDi m\xF4i tr\u01B0\u1EDDng nh\u1EB1m \u0111\u1EA3m b\u1EA3o v\u1EC1 c\u1EA3 ch\u1EA5t l\u01B0\u1EE3ng s\u1EA3n ph\u1EA9m c\u0169ng nh\u01B0 ta t\u1EA1o gi\xE1 tr\u1ECB k\u1EF3 v\u1ECDng.

C\xF3 th\u1EC3 b\u1EA1n ch\u01B0a bi\u1EBFt

Nh\u1EEFng \u0111i\u1EC1u c\xF3 th\u1EC3 b\u1EA1n ch\u01B0a bi\u1EBFt

  • \u0110\u1EC1 xu\u1EA5t l\xE0 kh\xF4ng b\u1EAFt bu\u1ED9c cho c\xE1c validator tr\xEAn Solana v\xE0 c\u1EA7n \u0111\u01B0\u1EE3c validator k\xEDch ho\u1EA1t \u0111\u1EC3 c\xF3 th\u1EC3 \u0111\u01B0\u1EE3c s\u1EED d\u1EE5ng.
  • \u0110\u1EC1 xu\u1EA5t c\xF3 th\u1EC3 \u0111\u01B0\u1EE3c k\xEDch ho\u1EA1t b\u1EDFi m\u1ED9t m\u1EA1ng (v\xED d\u1EE5 nh\u01B0 testnet) trong khi v\u1EABn v\xF4 hi\u1EC7u tr\xEAn m\u1EA1ng kh\xE1c (v\xED d\u1EE5 nh\u01B0 mainnet-beta).
  • Tuy nhi\xEAn, khi ch\u1EA1y ch\u1EBF \u0111\u1ED9 m\u1EB7c \u0111\u1ECBnh solana-test-validator d\u01B0\u1EDBi m\xE1y, t\u1EA5t c\u1EA3 c\xE1c \u0111\u1EC1 xu\u1EA5t s\u1EBD \u0111\u01B0\u1EE3c t\u1EF1 \u0111\u1ED9ng k\xEDch ho\u1EB7t v\xE0 s\u1EB5n s\xE0ng th\u1EF1c thi. K\u1EBFt qu\u1EA3 l\xE0 khi ki\u1EC3m th\u1EED tr\xEAn m\xE1y c\xF3 th\u1EC3 s\u1EBD sai kh\xE1c v\u1EDBi khi tri\u1EC3n khai ch\u01B0\u01A1ng tr\xECnh v\xE0 ki\u1EC3m th\u1EED tr\xEAn c\xE1c m\u1EA1ng Solana kh\xE1c!

T\xECnh hu\u1ED1ng gi\u1EA3 \u0111\u1ECBnh

Gi\u1EA3 s\u1EED b\u1EA1n c\xF3 m\u1ED9t Transaction ch\u01B0a 3 ch\u1EC9 th\u1ECB v\xE0 m\u1ED7i ch\u1EC9 th\u1ECB s\u1EBD ti\xEAu t\u1ED1n x\u1EA5p x\u1EC9 kho\u1EA3ng 100,000 \u0111\u01A1n v\u1ECB t\xEDnh to\xE1n (CU). Khi ch\u1EA1y tr\xEAn phi\xEAn b\u1EA3n Solana 1.8.x, b\u1EA1n s\u1EBD th\u1EA5y m\u1EE9c ti\xEAu th\u1EE5 CU c\u1EE7a c\xE1c ch\u1EC9 th\u1ECB nh\u01B0 sau:

Ch\u1EC9 th\u1ECBCU l\xFAc b\u1EAFt \u0111\u1EA7uTh\u1EF1c thiCU c\xF2n l\u1EA1i
1200,000-100,000100,000
2200,000-100,000100,000
3200,000-100,000100,000

Trong phi\xEAn b\u1EA3n Solana 1.9.2, c\xF3 m\u1ED9t \u0111\u1EC1 xu\u1EA5t \u0111\u01B0\u1EE3c g\u1ECDi l\xE0 'transaction wide compute cap'. \u0110\u1EC3 xu\u1EA5t n\xE0y n\xF3i r\u1EB1ng m\u1ED9t Transaction b\u1EAFt \u0111\u1EA7u v\u1EDBi 200,000 CU m\u1EB7c \u0111\u1ECBnh v\xE0 t\u1EA5t c\u1EA3 c\xE1c ch\u1EC9 th\u1ECB trong Transaction s\u1EBD ti\xEAu thu c\u1ED9ng d\u1ED3n ng\xE2n s\xE1ch CU \u0111\xF3. Th\u1EED ch\u1EA1y l\u1EA1i c\xF9ng Transaction nh\u01B0ng v\u1EDBi phi\xEAn b\u1EA3n m\u1EDBi s\u1EBD cho ra k\u1EBFt qu\u1EA3 r\u1EA5t kh\xE1c:

Ch\u1EC9 th\u1ECBCU l\xFAc b\u1EAFt \u0111\u1EA7uTh\u1EF1c thiCU c\xF2n l\u1EA1i
1200,000-100,000100,000
2100,000-100,0000
30FAIL!!!FAIL!!!

V\xE3i! N\u1EBFu b\u1EA1n kh\xF4ng bi\u1EBFt c\xE1i n\xE0y th\xEC c\xF3 kh\u1EA3 n\u0103ng cao l\xE0 b\u1EA1n s\u1EBD c\u1EA3m th\u1EA5y c\u1EF1c d\u1ECB khi m\xE0 b\u1EA1n ch\u1EA3 thay \u0111\u1ED5i g\xEC trong Transction nh\u01B0ng devnet th\xEC ho\u1EA1t \u0111\u1ED9ng ngon l\xE0nh c\xF2n tr\xEAn m\xE1y th\xEC to\xE0n l\xE0 l\u1ED7i?!?

Th\u1EF1c ra v\u1EABn c\xF3 c\xE1c \u0111\u1EC3 t\u0103ng ng\xE2n s\xE1ch CU cho m\u1ED9t Transaction, gi\u1EA3 d\u1EE5 nh\u01B0 l\xE0 300,000 CU, \u0111\u1EC3 l\xE0m gi\u1EA3i ph\xE1p t\xECnh th\u1EBF. Nh\u01B0ng \u0111i\u1EC1u \u0111\xF3 cho th\u1EA5y \u0111\u1EC1 xu\u1EA5t Ki\u1EC3m th\u1EED Parity s\u1EBD cho ph\xE9p b\u1EA1n ch\u1EE7 \u0111\u1ED9ng tr\xE1nh nh\u1EEFng phi\u1EC1n h\xE0 tr\xEAn.

There is the ability to increase the overall Transaction budget, to lets say 300_000 CU, and salvage your sanity but this demonstrates why testing with Feature Parity provides a proactive way to avoid any confusion.

\u0110\u1EC1 xu\u1EA5t Tr\u1EA1ng th\xE1i

R\u1EA5t d\u1EC5 \u0111\u1EC3 ki\u1EC3m tra nh\u1EEFng \u0111\u1EC1 xu\u1EA5t n\xE0o \u0111ang \u0111\u01B0\u1EE3c k\xEDch ho\u1EA1t cho t\u1EEBng m\xF4i tr\u01B0\u1EDDng v\u1EDBi c\xE2u l\u1EC7nh solana feature status.

solana feature status -ud   // Displays by feature status for devnet
+import{_ as i,r as e,o as r,c as k,b as a,w as t,a as n,F as m,e as b,d as s}from"./app.2fbb9e96.js";var d="/assets/scfsd.cc67ec33.png";const h={},g=b(`

\u0110\u1EC1 xu\u1EA5t Ki\u1EC3m th\u1EED Parity

Khi ki\u1EC3m th\u1EED ch\u01B0\u01A1ng tr\xECnh, ch\xFAng ta mu\u1ED1n ch\u1EAFc r\u1EB1ng ch\u01B0\u01A1ng tr\xECnh s\u1EBD ch\u1EA1y nh\u01B0 nhau tr\xEAn m\u1ECDi m\xF4i tr\u01B0\u1EDDng nh\u1EB1m \u0111\u1EA3m b\u1EA3o v\u1EC1 c\u1EA3 ch\u1EA5t l\u01B0\u1EE3ng s\u1EA3n ph\u1EA9m c\u0169ng nh\u01B0 ta t\u1EA1o gi\xE1 tr\u1ECB k\u1EF3 v\u1ECDng.

C\xF3 th\u1EC3 b\u1EA1n ch\u01B0a bi\u1EBFt

Nh\u1EEFng \u0111i\u1EC1u c\xF3 th\u1EC3 b\u1EA1n ch\u01B0a bi\u1EBFt

  • \u0110\u1EC1 xu\u1EA5t l\xE0 kh\xF4ng b\u1EAFt bu\u1ED9c cho c\xE1c validator tr\xEAn Solana v\xE0 c\u1EA7n \u0111\u01B0\u1EE3c validator k\xEDch ho\u1EA1t \u0111\u1EC3 c\xF3 th\u1EC3 \u0111\u01B0\u1EE3c s\u1EED d\u1EE5ng.
  • \u0110\u1EC1 xu\u1EA5t c\xF3 th\u1EC3 \u0111\u01B0\u1EE3c k\xEDch ho\u1EA1t b\u1EDFi m\u1ED9t m\u1EA1ng (v\xED d\u1EE5 nh\u01B0 testnet) trong khi v\u1EABn v\xF4 hi\u1EC7u tr\xEAn m\u1EA1ng kh\xE1c (v\xED d\u1EE5 nh\u01B0 mainnet-beta).
  • Tuy nhi\xEAn, khi ch\u1EA1y ch\u1EBF \u0111\u1ED9 m\u1EB7c \u0111\u1ECBnh solana-test-validator d\u01B0\u1EDBi m\xE1y, t\u1EA5t c\u1EA3 c\xE1c \u0111\u1EC1 xu\u1EA5t s\u1EBD \u0111\u01B0\u1EE3c t\u1EF1 \u0111\u1ED9ng k\xEDch ho\u1EB7t v\xE0 s\u1EB5n s\xE0ng th\u1EF1c thi. K\u1EBFt qu\u1EA3 l\xE0 khi ki\u1EC3m th\u1EED tr\xEAn m\xE1y c\xF3 th\u1EC3 s\u1EBD sai kh\xE1c v\u1EDBi khi tri\u1EC3n khai ch\u01B0\u01A1ng tr\xECnh v\xE0 ki\u1EC3m th\u1EED tr\xEAn c\xE1c m\u1EA1ng Solana kh\xE1c!

T\xECnh hu\u1ED1ng gi\u1EA3 \u0111\u1ECBnh

Gi\u1EA3 s\u1EED b\u1EA1n c\xF3 m\u1ED9t Transaction ch\u01B0a 3 ch\u1EC9 th\u1ECB v\xE0 m\u1ED7i ch\u1EC9 th\u1ECB s\u1EBD ti\xEAu t\u1ED1n x\u1EA5p x\u1EC9 kho\u1EA3ng 100,000 \u0111\u01A1n v\u1ECB t\xEDnh to\xE1n (CU). Khi ch\u1EA1y tr\xEAn phi\xEAn b\u1EA3n Solana 1.8.x, b\u1EA1n s\u1EBD th\u1EA5y m\u1EE9c ti\xEAu th\u1EE5 CU c\u1EE7a c\xE1c ch\u1EC9 th\u1ECB nh\u01B0 sau:

Ch\u1EC9 th\u1ECBCU l\xFAc b\u1EAFt \u0111\u1EA7uTh\u1EF1c thiCU c\xF2n l\u1EA1i
1200,000-100,000100,000
2200,000-100,000100,000
3200,000-100,000100,000

Trong phi\xEAn b\u1EA3n Solana 1.9.2, c\xF3 m\u1ED9t \u0111\u1EC1 xu\u1EA5t \u0111\u01B0\u1EE3c g\u1ECDi l\xE0 'transaction wide compute cap'. \u0110\u1EC3 xu\u1EA5t n\xE0y n\xF3i r\u1EB1ng m\u1ED9t Transaction b\u1EAFt \u0111\u1EA7u v\u1EDBi 200,000 CU m\u1EB7c \u0111\u1ECBnh v\xE0 t\u1EA5t c\u1EA3 c\xE1c ch\u1EC9 th\u1ECB trong Transaction s\u1EBD ti\xEAu thu c\u1ED9ng d\u1ED3n ng\xE2n s\xE1ch CU \u0111\xF3. Th\u1EED ch\u1EA1y l\u1EA1i c\xF9ng Transaction nh\u01B0ng v\u1EDBi phi\xEAn b\u1EA3n m\u1EDBi s\u1EBD cho ra k\u1EBFt qu\u1EA3 r\u1EA5t kh\xE1c:

Ch\u1EC9 th\u1ECBCU l\xFAc b\u1EAFt \u0111\u1EA7uTh\u1EF1c thiCU c\xF2n l\u1EA1i
1200,000-100,000100,000
2100,000-100,0000
30FAIL!!!FAIL!!!

V\xE3i! N\u1EBFu b\u1EA1n kh\xF4ng bi\u1EBFt c\xE1i n\xE0y th\xEC c\xF3 kh\u1EA3 n\u0103ng cao l\xE0 b\u1EA1n s\u1EBD c\u1EA3m th\u1EA5y c\u1EF1c d\u1ECB khi m\xE0 b\u1EA1n ch\u1EA3 thay \u0111\u1ED5i g\xEC trong Transction nh\u01B0ng devnet th\xEC ho\u1EA1t \u0111\u1ED9ng ngon l\xE0nh c\xF2n tr\xEAn m\xE1y th\xEC to\xE0n l\xE0 l\u1ED7i?!?

Th\u1EF1c ra v\u1EABn c\xF3 c\xE1c \u0111\u1EC3 t\u0103ng ng\xE2n s\xE1ch CU cho m\u1ED9t Transaction, gi\u1EA3 d\u1EE5 nh\u01B0 l\xE0 300,000 CU, \u0111\u1EC3 l\xE0m gi\u1EA3i ph\xE1p t\xECnh th\u1EBF. Nh\u01B0ng \u0111i\u1EC1u \u0111\xF3 cho th\u1EA5y \u0111\u1EC1 xu\u1EA5t Ki\u1EC3m th\u1EED Parity s\u1EBD cho ph\xE9p b\u1EA1n ch\u1EE7 \u0111\u1ED9ng tr\xE1nh nh\u1EEFng phi\u1EC1n h\xE0 tr\xEAn.

There is the ability to increase the overall Transaction budget, to lets say 300_000 CU, and salvage your sanity but this demonstrates why testing with Feature Parity provides a proactive way to avoid any confusion.

\u0110\u1EC1 xu\u1EA5t Tr\u1EA1ng th\xE1i

R\u1EA5t d\u1EC5 \u0111\u1EC3 ki\u1EC3m tra nh\u1EEFng \u0111\u1EC1 xu\u1EA5t n\xE0o \u0111ang \u0111\u01B0\u1EE3c k\xEDch ho\u1EA1t cho t\u1EEBng m\xF4i tr\u01B0\u1EDDng v\u1EDBi c\xE2u l\u1EC7nh solana feature status.

solana feature status -ud   // Displays by feature status for devnet
 solana feature status -ut   // Displays for testnet
 solana feature status -um   // Displays for mainnet-beta
 solana feature status -ul   // Displays for local, requires running solana-test-validator
diff --git a/docs/.vuepress/dist/assets/feature-parity-testing.html.76e9437b.js b/docs/.vuepress/dist/assets/feature-parity-testing.html.ffa95768.js
similarity index 99%
rename from docs/.vuepress/dist/assets/feature-parity-testing.html.76e9437b.js
rename to docs/.vuepress/dist/assets/feature-parity-testing.html.ffa95768.js
index 456a492f8..47ceaf4b3 100644
--- a/docs/.vuepress/dist/assets/feature-parity-testing.html.76e9437b.js
+++ b/docs/.vuepress/dist/assets/feature-parity-testing.html.ffa95768.js
@@ -1,4 +1,4 @@
-import{_ as r,r as e,o as i,c as k,b as a,w as t,a as n,F as m,e as d,d as s}from"./app.cfdf84e7.js";var b="/assets/scfsd.cc67ec33.png";const f={},g=d(`

Feature Parity Testing

When testing your program, assurances that it will run the same in various clusters is essential to both quality and producing expected outcomes.

Facts

Fact Sheet

  • Features are capabilities that are introduced to Solana validators and require activation to be used.
  • Features may be activated in one cluster (e.g. testnet) but not so in another (e.g. mainnet-beta).
  • However; when running default solana-test-validator locally, all available features in your Solana version are automagically activated. The result is that when testing locally, the capabilities and results of your testing may not be the same when deploying and running in a different cluster!

Scenario

Assume you have a Transaction that contained three (3) instructions and each instruction consumes approximately 100_000 Compute Units (CU). When running in a Solana 1.8.x version, you would observe your instruction CU consumption similar to:

InstructionStarting CUExecutionRemaining CU
1200_000-100_000100_000
2200_000-100_000100_000
3200_000-100_000100_000

In Solana 1.9.2 a feature called 'transaction wide compute cap' was introduced where a Transaction, by default, has a 200_000 CU budget and the encapsulated instructions draw down from that Transaction budget. Running the same transaction as noted above would have very different behavior:

InstructionStarting CUExecutionRemaining CU
1200_000-100_000100_000
2100_000-100_0000
30FAIL!!!FAIL!!!

Yikes! If you were unaware of this you'd likely be frustrated as there was no change to your instruction behavior that would cause this. In devnet it worked fine, but locally it was failing?!?

There is the ability to increase the overall Transaction budget, to lets say 300_000 CU, and salvage your sanity but this demonstrates why testing with Feature Parity provides a proactive way to avoid any confusion.

Feature Status

It is fairly easy to check what features are enabled for a particular cluster with the solana feature status command.

solana feature status -ud   // Displays by feature status for devnet
+import{_ as r,r as e,o as i,c as k,b as a,w as t,a as n,F as m,e as d,d as s}from"./app.2fbb9e96.js";var b="/assets/scfsd.cc67ec33.png";const f={},g=d(`

Feature Parity Testing

When testing your program, assurances that it will run the same in various clusters is essential to both quality and producing expected outcomes.

Facts

Fact Sheet

  • Features are capabilities that are introduced to Solana validators and require activation to be used.
  • Features may be activated in one cluster (e.g. testnet) but not so in another (e.g. mainnet-beta).
  • However; when running default solana-test-validator locally, all available features in your Solana version are automagically activated. The result is that when testing locally, the capabilities and results of your testing may not be the same when deploying and running in a different cluster!

Scenario

Assume you have a Transaction that contained three (3) instructions and each instruction consumes approximately 100_000 Compute Units (CU). When running in a Solana 1.8.x version, you would observe your instruction CU consumption similar to:

InstructionStarting CUExecutionRemaining CU
1200_000-100_000100_000
2200_000-100_000100_000
3200_000-100_000100_000

In Solana 1.9.2 a feature called 'transaction wide compute cap' was introduced where a Transaction, by default, has a 200_000 CU budget and the encapsulated instructions draw down from that Transaction budget. Running the same transaction as noted above would have very different behavior:

InstructionStarting CUExecutionRemaining CU
1200_000-100_000100_000
2100_000-100_0000
30FAIL!!!FAIL!!!

Yikes! If you were unaware of this you'd likely be frustrated as there was no change to your instruction behavior that would cause this. In devnet it worked fine, but locally it was failing?!?

There is the ability to increase the overall Transaction budget, to lets say 300_000 CU, and salvage your sanity but this demonstrates why testing with Feature Parity provides a proactive way to avoid any confusion.

Feature Status

It is fairly easy to check what features are enabled for a particular cluster with the solana feature status command.

solana feature status -ud   // Displays by feature status for devnet
 solana feature status -ut   // Displays for testnet
 solana feature status -um   // Displays for mainnet-beta
 solana feature status -ul   // Displays for local, requires running solana-test-validator
diff --git a/docs/.vuepress/dist/assets/get-program-accounts.html.8b25ee70.js b/docs/.vuepress/dist/assets/get-program-accounts.html.0ddbb8af.js
similarity index 99%
rename from docs/.vuepress/dist/assets/get-program-accounts.html.8b25ee70.js
rename to docs/.vuepress/dist/assets/get-program-accounts.html.0ddbb8af.js
index 8eb4db6a8..d1adcffe4 100644
--- a/docs/.vuepress/dist/assets/get-program-accounts.html.8b25ee70.js
+++ b/docs/.vuepress/dist/assets/get-program-accounts.html.0ddbb8af.js
@@ -1,4 +1,4 @@
-import{_ as c,r as o,o as l,c as i,a as n,b as s,w as r,F as u,d as a,e as t}from"./app.cfdf84e7.js";var d="/assets/account-size.398f17bf.png",k="/assets/memcmp.c5e1f050.png";const b={},m=n("h1",{id:"get-program-accounts",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#get-program-accounts","aria-hidden":"true"},"#"),a(" Get Program Accounts")],-1),g=n("p",null,"Bir program\u0131n sahip oldu\u011Fu t\xFCm account'lar\u0131 d\xF6nd\xFCren bir RPC y\xF6ntemidir. \u015Eu anda pagination desteklenmemektedir. getProgramAccounts requests, yan\u0131t s\xFCresini iyile\u015Ftirmek ve yaln\u0131zca ama\xE7lanan sonu\xE7lar\u0131 d\xF6nd\xFCrmek i\xE7in dataSlice ve/veya filters parametrelerini i\xE7ermelidir.",-1),h=n("h2",{id:"facts-ozet-bilgiler",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#facts-ozet-bilgiler","aria-hidden":"true"},"#"),a(" Facts (\xD6zet Bilgiler)")],-1),_=n("p",null,":::Parametreler",-1),y=n("li",null,[n("code",null,"programId"),a(": "),n("code",null,"string"),a(" - Sorgulanacak program\u0131n public key\u2019i, base58 kodlu bir string olarak sa\u011Flan\u0131r")],-1),f=a("(iste\u011Fe ba\u011Fl\u0131) "),z=n("code",null,"configOrCommitment",-1),v=a(": "),A=n("code",null,"object",-1),P=a(" - A\u015Fa\u011F\u0131daki iste\u011Fe ba\u011Fl\u0131 alanlar\u0131 i\xE7eren yap\u0131land\u0131rma parametreleri: "),w=a("(iste\u011Fe ba\u011Fl\u0131) "),S=n("code",null,"commitment",-1),q=a(": "),B=n("code",null,"string",-1),D=a(" - "),T={href:"https://docs.solana.com/developing/clients/jsonrpc-api#configuring-state-commitment",target:"_blank",rel:"noopener noreferrer"},E=a("Durum Taahh\xFCd\xFC"),K=a("(iste\u011Fe ba\u011Fl\u0131) "),N=n("code",null,"encoding",-1),C=a(": "),x=n("code",null,"string",-1),R=a(" - Account verileri i\xE7in encode: base58, base64 veya jsonParsed\u2019d\u0131r. Web3js kullan\u0131c\u0131lar\u0131n\u0131n bunun yerine "),M={href:"https://solana-labs.github.io/solana-web3.js/classes/Connection.html#getParsedProgramAccounts",target:"_blank",rel:"noopener noreferrer"},L=a("getParsedProgramAccounts"),G=a(" kullanmas\u0131 gerekti\u011Fini unutmay\u0131n."),O=t("
  • (iste\u011Fe ba\u011Fl\u0131) dataSlice: object - Geri d\xF6nd\xFCr\xFClen account verilerini a\u015Fa\u011F\u0131dakilere g\xF6re s\u0131n\u0131rlay\u0131n:
    • offset: number - Geri d\xF6nd\xFCrmeye ba\u015Flamak i\xE7in account verisindeki bayt say\u0131s\u0131
    • length: number - Geri d\xF6nd\xFCr\xFClecek account verilerinin bayt say\u0131s\u0131
  • (iste\u011Fe ba\u011Fl\u0131) filters: array - A\u015Fa\u011F\u0131daki filters nesnelerini kullanarak sonu\xE7lar\u0131 filtreleyin:
    • memcmp: object - Bir dizi bayt\u0131 account verileriyle e\u015Fle\u015Ftirin:
      • offset: number - Kar\u015F\u0131la\u015Ft\u0131rmaya ba\u015Flamak i\xE7in account verilerinin bayt say\u0131s\u0131
      • bytes: string - 129 bayt ile s\u0131n\u0131rl\u0131 base58 kodlu string olarak e\u015Fle\u015Fecek veriler
    • dataSize: number - Account data uzunlu\u011Funu sa\u011Flanan veri boyutuyla kar\u015F\u0131la\u015Ft\u0131r\u0131r
  • ",2),j=a("(iste\u011Fe ba\u011Fl\u0131) "),H=n("code",null,"withContext",-1),V=a(": "),Y=n("code",null,"boolean",-1),F=a(" - Sonucu bir "),U={href:"https://docs.solana.com/developing/clients/jsonrpc-api#rpcresponse-structure",target:"_blank",rel:"noopener noreferrer"},I=a("RpcResponse JSON nesnesine sarmalay\u0131n"),W=t('
    Response

    Varsay\u0131lan olarak getProgramAccounts, a\u015Fa\u011F\u0131daki yap\u0131ya sahip bir dizi JSON nesnesi d\xF6nd\xFCr\xFCr:

    • pubkey: string - Base58 kodlu bir string olarak account'\u0131n pubkeyi
    • account: object - a\u015Fa\u011F\u0131daki alt alanlara sahip bir JSON nesnesi:
    • lamports: number, account'a atanan lamport say\u0131s\u0131
    • owner: string, Hesab\u0131n atand\u0131\u011F\u0131 program\u0131n base58 kodlu yay\u0131n anahtar\u0131
    • data: string | object - account'la ili\u015Fkili veriler, sa\u011Flanan kodlama parametresine ba\u011Fl\u0131 olarak kodlanm\u0131\u015F binary data veya JSON format\u0131d\u0131r
    • executable: boolean, Hesap bir program i\xE7erp i\xE7ermedi\u011Finin g\xF6stergesi
    • rentEpoch: number, Bu account'\u0131n bir sonraki rent borcunun olaca\u011F\u0131 epoch :::

    Deep Dive (Derinlemesine Bak\u0131\u015F)

    getProgramAccounts, bir program\u0131n sahip oldu\u011Fu t\xFCm account'lar\u0131 d\xF6nd\xFCren \xE7ok y\xF6nl\xFC bir RPC methodudur. getProgramAccounts'u a\u015Fa\u011F\u0131dakileri bulmak gibi bir dizi yararl\u0131 sorgu i\xE7in kullanabiliriz:

    ',5),Z=n("li",null,"Belirli bir c\xFCzdan i\xE7in t\xFCm token account'lar\u0131",-1),J=a("Belirli bir mint i\xE7in t\xFCm token account'lar\u0131 (t\xFCm "),$={href:"https://www.projectserum.com/",target:"_blank",rel:"noopener noreferrer"},Q=a("SRM"),X=a(" sahipleri)"),nn=a("Belirli bir program i\xE7in t\xFCm private account'lar (t\xFCm "),an={href:"https://mango.markets/",target:"_blank",rel:"noopener noreferrer"},sn=a("Mango"),en=a(" kullan\u0131c\u0131lar\u0131)"),tn=t("

    Kullan\u0131\u015Fl\u0131l\u0131\u011F\u0131na ra\u011Fmen, getProgramAccounts, mevcut k\u0131s\u0131tlamalar\u0131 nedeniyle genellikle yanl\u0131\u015F anla\u015F\u0131l\u0131r. getProgramAccounts taraf\u0131ndan desteklenen sorgular\u0131n \xE7o\u011Fu, b\xFCy\xFCk veri k\xFCmelerini taramak i\xE7in RPC node\u2019lar\u0131n\u0131 gerektirir. Bu taramalar hem bellek hem de kaynak yo\u011Fundur. Sonu\xE7 olarak, \xE7ok s\u0131k veya \xE7ok geni\u015F kapsaml\u0131 \xE7a\u011Fr\u0131lar ba\u011Flant\u0131 zaman a\u015F\u0131mlar\u0131na neden olabilir. Ayr\u0131ca, bu yaz\u0131n\u0131n yaz\u0131ld\u0131\u011F\u0131 s\u0131rada getProgramAccounts u\xE7 noktas\u0131 sayfaland\u0131rmay\u0131 desteklemez. Bir sorgunun sonu\xE7lar\u0131 \xE7ok b\xFCy\xFCkse, yan\u0131t kesilecektir.

    Bu mevcut k\u0131s\u0131tlamalar\u0131 a\u015Fmak i\xE7in getProgramAccounts bir dizi faydal\u0131 parametre sunar: dataSlice, memcmp ve dataSize, filters se\xE7enekleri. Bu parametrelerin kombinasyonlar\u0131n\u0131 sa\u011Flayarak sorgular\u0131m\u0131z\u0131n kapsam\u0131n\u0131 y\xF6netilebilir ve \xF6ng\xF6r\xFClebilir boyutlara indirebiliriz.

    ",2),on=a("Yayg\u0131n bir "),pn=n("code",null,"getProgramAccounts",-1),cn=a(" \xF6rne\u011Fi, "),ln={href:"https://spl.solana.com/token",target:"_blank",rel:"noopener noreferrer"},rn=a("SPL-Token Program\u0131"),un=a(" ile etkile\u015Fimi i\xE7erir. Token Program\u0131n\u0131n sahip oldu\u011Fu t\xFCm account'lar\u0131 bir "),dn=a("basic call"),kn=a(" ile request etmek, \xE7ok b\xFCy\xFCk miktarda veri gerektirecektir. Ancak parametreleri sa\u011Flayarak, yaln\u0131zca kullanmay\u0131 d\xFC\u015F\xFCnd\xFC\u011F\xFCm\xFCz verileri verimli bir \u015Fekilde request edebiliriz."),bn=t('

    filters

    getProgramAccounts ile kullan\u0131lacak en yayg\u0131n parametre filters array\u2019idir. Bu array, dataSize ve memcmp olmak \xFCzere iki t\xFCr filtre kabul eder. Bu filtrelerden herhangi birini kullanmadan \xF6nce, request etti\u011Fimiz verilerin nas\u0131l d\xFCzenlendi\u011Fini ve serile\u015Ftirildi\u011Fini bilmeliyiz.

    dataSize

    ',3),mn=a("Token Program\u0131 i\xE7in, "),gn={href:"https://github.com/solana-labs/solana-program-library/blob/08d9999f997a8bf38719679be9d572f119d0d960/token/program/src/state.rs#L86-L106",target:"_blank",rel:"noopener noreferrer"},hn=a("token account'lar\u0131n\u0131n 165 bayt uzunlu\u011Funda"),_n=a(" oldu\u011Funu g\xF6rebiliriz. Spesifik olarak, bir belirte\xE7 account'\u0131n\u0131n her biri tahmin edilebilir say\u0131da bayt gerektiren sekiz farkl\u0131 alan\u0131 vard\u0131r. A\u015Fa\u011F\u0131daki \xE7izimi kullanarak bu verilerin nas\u0131l d\xFCzenlendi\u011Fini g\xF6rselle\u015Ftirebiliriz."),yn=t('

    Account Size

    C\xFCzdan adresimize ait t\xFCm token account'lar\u0131n\u0131 bulmak istiyorsak, sorgumuzun kapsam\u0131n\u0131 tam olarak 165 bayt uzunlu\u011Fundaki account'lara daraltmak i\xE7in filters dizimize { dataSize: 165 } ekleyebiliriz. Ancak bu tek ba\u015F\u0131na yetersiz olacakt\u0131r. Ayr\u0131ca adresimize ait account'lar\u0131 arayan bir filtre eklememiz gerekir. Bunu memcmp filtresiyle ba\u015Farabiliriz

    memcmp

    memcmp filtresi veya "bellek kar\u015F\u0131la\u015Ft\u0131rma" filtresi, account'\u0131m\u0131zda depolanan herhangi bir alandaki verileri kar\u015F\u0131la\u015Ft\u0131rmam\u0131za olanak tan\u0131r. Spesifik olarak, yaln\u0131zca belirli bir konumda belirli bir bayt k\xFCmesiyle e\u015Fle\u015Fen account'lar\u0131 sorgulayabiliriz. memcmp iki arg\xFCman gerektirir:

    • offset: Verileri kar\u015F\u0131la\u015Ft\u0131rmaya ba\u015Flayaca\u011F\u0131n\u0131z konum. Bu konum bayt cinsinden \xF6l\xE7\xFCl\xFCr ve bir tamsay\u0131 olarak ifade edilir.
    • bytes: Hesab\u0131n verileriyle e\u015Fle\u015Fmesi gereken veriler. Bu, base-58 kodlu bir string olarak temsil edilir, 129 bayttan daha az ile s\u0131n\u0131rland\u0131r\u0131lmal\u0131d\u0131r.

    Memcmp'nin yaln\u0131zca bytes ile tam olarak e\u015Fle\u015Fen sonu\xE7lar\u0131 d\xF6nd\xFCrece\u011Fini unutmamak \xF6nemlidir. \u015Eu anda, sa\u011Flad\u0131\u011F\u0131m\u0131z bytes\u2019dan daha k\xFC\xE7\xFCk veya daha b\xFCy\xFCk de\u011Ferler i\xE7in kar\u015F\u0131la\u015Ft\u0131rmalar\u0131 desteklememektedir.

    Token Program\u0131 \xF6rne\u011Fimize uygun olarak, sorgumuzu yaln\u0131zca c\xFCzdan adresimize ait olan token account'lar\u0131n\u0131 d\xF6nd\xFCrecek \u015Fekilde de\u011Fi\u015Ftirebiliriz. Bir belirte\xE7 account'\u0131na bakt\u0131\u011F\u0131m\u0131zda, bir belirte\xE7 account'\u0131nda depolanan ilk iki alan\u0131n her ikisinin de pubkey oldu\u011Funu ve her bir pubkey'nin 32 bayt uzunlu\u011Funda oldu\u011Funu g\xF6rebiliriz. Owner\u2019\u0131n ikinci alan oldu\u011Fu g\xF6z \xF6n\xFCne al\u0131nd\u0131\u011F\u0131nda, memcmp'mize 32 baytl\u0131k bir offset ile ba\u015Flamal\u0131y\u0131z. Buradan, owner alan\u0131 c\xFCzdan adresimizle e\u015Fle\u015Fen account'lar\u0131 arayaca\u011F\u0131z.

    Account Size

    Bu sorguyu a\u015Fa\u011F\u0131daki \xF6rnek \xFCzerinden \xE7a\u011F\u0131rabiliriz:

    import { TOKEN_PROGRAM_ID } from "@solana/spl-token";
    +import{_ as c,r as o,o as l,c as i,a as n,b as s,w as r,F as u,d as a,e as t}from"./app.2fbb9e96.js";var d="/assets/account-size.398f17bf.png",k="/assets/memcmp.c5e1f050.png";const b={},m=n("h1",{id:"get-program-accounts",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#get-program-accounts","aria-hidden":"true"},"#"),a(" Get Program Accounts")],-1),g=n("p",null,"Bir program\u0131n sahip oldu\u011Fu t\xFCm account'lar\u0131 d\xF6nd\xFCren bir RPC y\xF6ntemidir. \u015Eu anda pagination desteklenmemektedir. getProgramAccounts requests, yan\u0131t s\xFCresini iyile\u015Ftirmek ve yaln\u0131zca ama\xE7lanan sonu\xE7lar\u0131 d\xF6nd\xFCrmek i\xE7in dataSlice ve/veya filters parametrelerini i\xE7ermelidir.",-1),h=n("h2",{id:"facts-ozet-bilgiler",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#facts-ozet-bilgiler","aria-hidden":"true"},"#"),a(" Facts (\xD6zet Bilgiler)")],-1),_=n("p",null,":::Parametreler",-1),y=n("li",null,[n("code",null,"programId"),a(": "),n("code",null,"string"),a(" - Sorgulanacak program\u0131n public key\u2019i, base58 kodlu bir string olarak sa\u011Flan\u0131r")],-1),f=a("(iste\u011Fe ba\u011Fl\u0131) "),z=n("code",null,"configOrCommitment",-1),v=a(": "),A=n("code",null,"object",-1),P=a(" - A\u015Fa\u011F\u0131daki iste\u011Fe ba\u011Fl\u0131 alanlar\u0131 i\xE7eren yap\u0131land\u0131rma parametreleri: "),w=a("(iste\u011Fe ba\u011Fl\u0131) "),S=n("code",null,"commitment",-1),q=a(": "),B=n("code",null,"string",-1),D=a(" - "),T={href:"https://docs.solana.com/developing/clients/jsonrpc-api#configuring-state-commitment",target:"_blank",rel:"noopener noreferrer"},E=a("Durum Taahh\xFCd\xFC"),K=a("(iste\u011Fe ba\u011Fl\u0131) "),N=n("code",null,"encoding",-1),C=a(": "),x=n("code",null,"string",-1),R=a(" - Account verileri i\xE7in encode: base58, base64 veya jsonParsed\u2019d\u0131r. Web3js kullan\u0131c\u0131lar\u0131n\u0131n bunun yerine "),M={href:"https://solana-labs.github.io/solana-web3.js/classes/Connection.html#getParsedProgramAccounts",target:"_blank",rel:"noopener noreferrer"},L=a("getParsedProgramAccounts"),G=a(" kullanmas\u0131 gerekti\u011Fini unutmay\u0131n."),O=t("
  • (iste\u011Fe ba\u011Fl\u0131) dataSlice: object - Geri d\xF6nd\xFCr\xFClen account verilerini a\u015Fa\u011F\u0131dakilere g\xF6re s\u0131n\u0131rlay\u0131n:
    • offset: number - Geri d\xF6nd\xFCrmeye ba\u015Flamak i\xE7in account verisindeki bayt say\u0131s\u0131
    • length: number - Geri d\xF6nd\xFCr\xFClecek account verilerinin bayt say\u0131s\u0131
  • (iste\u011Fe ba\u011Fl\u0131) filters: array - A\u015Fa\u011F\u0131daki filters nesnelerini kullanarak sonu\xE7lar\u0131 filtreleyin:
    • memcmp: object - Bir dizi bayt\u0131 account verileriyle e\u015Fle\u015Ftirin:
      • offset: number - Kar\u015F\u0131la\u015Ft\u0131rmaya ba\u015Flamak i\xE7in account verilerinin bayt say\u0131s\u0131
      • bytes: string - 129 bayt ile s\u0131n\u0131rl\u0131 base58 kodlu string olarak e\u015Fle\u015Fecek veriler
    • dataSize: number - Account data uzunlu\u011Funu sa\u011Flanan veri boyutuyla kar\u015F\u0131la\u015Ft\u0131r\u0131r
  • ",2),j=a("(iste\u011Fe ba\u011Fl\u0131) "),H=n("code",null,"withContext",-1),V=a(": "),Y=n("code",null,"boolean",-1),F=a(" - Sonucu bir "),U={href:"https://docs.solana.com/developing/clients/jsonrpc-api#rpcresponse-structure",target:"_blank",rel:"noopener noreferrer"},I=a("RpcResponse JSON nesnesine sarmalay\u0131n"),W=t('
    Response

    Varsay\u0131lan olarak getProgramAccounts, a\u015Fa\u011F\u0131daki yap\u0131ya sahip bir dizi JSON nesnesi d\xF6nd\xFCr\xFCr:

    • pubkey: string - Base58 kodlu bir string olarak account'\u0131n pubkeyi
    • account: object - a\u015Fa\u011F\u0131daki alt alanlara sahip bir JSON nesnesi:
    • lamports: number, account'a atanan lamport say\u0131s\u0131
    • owner: string, Hesab\u0131n atand\u0131\u011F\u0131 program\u0131n base58 kodlu yay\u0131n anahtar\u0131
    • data: string | object - account'la ili\u015Fkili veriler, sa\u011Flanan kodlama parametresine ba\u011Fl\u0131 olarak kodlanm\u0131\u015F binary data veya JSON format\u0131d\u0131r
    • executable: boolean, Hesap bir program i\xE7erp i\xE7ermedi\u011Finin g\xF6stergesi
    • rentEpoch: number, Bu account'\u0131n bir sonraki rent borcunun olaca\u011F\u0131 epoch :::

    Deep Dive (Derinlemesine Bak\u0131\u015F)

    getProgramAccounts, bir program\u0131n sahip oldu\u011Fu t\xFCm account'lar\u0131 d\xF6nd\xFCren \xE7ok y\xF6nl\xFC bir RPC methodudur. getProgramAccounts'u a\u015Fa\u011F\u0131dakileri bulmak gibi bir dizi yararl\u0131 sorgu i\xE7in kullanabiliriz:

    ',5),Z=n("li",null,"Belirli bir c\xFCzdan i\xE7in t\xFCm token account'lar\u0131",-1),J=a("Belirli bir mint i\xE7in t\xFCm token account'lar\u0131 (t\xFCm "),$={href:"https://www.projectserum.com/",target:"_blank",rel:"noopener noreferrer"},Q=a("SRM"),X=a(" sahipleri)"),nn=a("Belirli bir program i\xE7in t\xFCm private account'lar (t\xFCm "),an={href:"https://mango.markets/",target:"_blank",rel:"noopener noreferrer"},sn=a("Mango"),en=a(" kullan\u0131c\u0131lar\u0131)"),tn=t("

    Kullan\u0131\u015Fl\u0131l\u0131\u011F\u0131na ra\u011Fmen, getProgramAccounts, mevcut k\u0131s\u0131tlamalar\u0131 nedeniyle genellikle yanl\u0131\u015F anla\u015F\u0131l\u0131r. getProgramAccounts taraf\u0131ndan desteklenen sorgular\u0131n \xE7o\u011Fu, b\xFCy\xFCk veri k\xFCmelerini taramak i\xE7in RPC node\u2019lar\u0131n\u0131 gerektirir. Bu taramalar hem bellek hem de kaynak yo\u011Fundur. Sonu\xE7 olarak, \xE7ok s\u0131k veya \xE7ok geni\u015F kapsaml\u0131 \xE7a\u011Fr\u0131lar ba\u011Flant\u0131 zaman a\u015F\u0131mlar\u0131na neden olabilir. Ayr\u0131ca, bu yaz\u0131n\u0131n yaz\u0131ld\u0131\u011F\u0131 s\u0131rada getProgramAccounts u\xE7 noktas\u0131 sayfaland\u0131rmay\u0131 desteklemez. Bir sorgunun sonu\xE7lar\u0131 \xE7ok b\xFCy\xFCkse, yan\u0131t kesilecektir.

    Bu mevcut k\u0131s\u0131tlamalar\u0131 a\u015Fmak i\xE7in getProgramAccounts bir dizi faydal\u0131 parametre sunar: dataSlice, memcmp ve dataSize, filters se\xE7enekleri. Bu parametrelerin kombinasyonlar\u0131n\u0131 sa\u011Flayarak sorgular\u0131m\u0131z\u0131n kapsam\u0131n\u0131 y\xF6netilebilir ve \xF6ng\xF6r\xFClebilir boyutlara indirebiliriz.

    ",2),on=a("Yayg\u0131n bir "),pn=n("code",null,"getProgramAccounts",-1),cn=a(" \xF6rne\u011Fi, "),ln={href:"https://spl.solana.com/token",target:"_blank",rel:"noopener noreferrer"},rn=a("SPL-Token Program\u0131"),un=a(" ile etkile\u015Fimi i\xE7erir. Token Program\u0131n\u0131n sahip oldu\u011Fu t\xFCm account'lar\u0131 bir "),dn=a("basic call"),kn=a(" ile request etmek, \xE7ok b\xFCy\xFCk miktarda veri gerektirecektir. Ancak parametreleri sa\u011Flayarak, yaln\u0131zca kullanmay\u0131 d\xFC\u015F\xFCnd\xFC\u011F\xFCm\xFCz verileri verimli bir \u015Fekilde request edebiliriz."),bn=t('

    filters

    getProgramAccounts ile kullan\u0131lacak en yayg\u0131n parametre filters array\u2019idir. Bu array, dataSize ve memcmp olmak \xFCzere iki t\xFCr filtre kabul eder. Bu filtrelerden herhangi birini kullanmadan \xF6nce, request etti\u011Fimiz verilerin nas\u0131l d\xFCzenlendi\u011Fini ve serile\u015Ftirildi\u011Fini bilmeliyiz.

    dataSize

    ',3),mn=a("Token Program\u0131 i\xE7in, "),gn={href:"https://github.com/solana-labs/solana-program-library/blob/08d9999f997a8bf38719679be9d572f119d0d960/token/program/src/state.rs#L86-L106",target:"_blank",rel:"noopener noreferrer"},hn=a("token account'lar\u0131n\u0131n 165 bayt uzunlu\u011Funda"),_n=a(" oldu\u011Funu g\xF6rebiliriz. Spesifik olarak, bir belirte\xE7 account'\u0131n\u0131n her biri tahmin edilebilir say\u0131da bayt gerektiren sekiz farkl\u0131 alan\u0131 vard\u0131r. A\u015Fa\u011F\u0131daki \xE7izimi kullanarak bu verilerin nas\u0131l d\xFCzenlendi\u011Fini g\xF6rselle\u015Ftirebiliriz."),yn=t('

    Account Size

    C\xFCzdan adresimize ait t\xFCm token account'lar\u0131n\u0131 bulmak istiyorsak, sorgumuzun kapsam\u0131n\u0131 tam olarak 165 bayt uzunlu\u011Fundaki account'lara daraltmak i\xE7in filters dizimize { dataSize: 165 } ekleyebiliriz. Ancak bu tek ba\u015F\u0131na yetersiz olacakt\u0131r. Ayr\u0131ca adresimize ait account'lar\u0131 arayan bir filtre eklememiz gerekir. Bunu memcmp filtresiyle ba\u015Farabiliriz

    memcmp

    memcmp filtresi veya "bellek kar\u015F\u0131la\u015Ft\u0131rma" filtresi, account'\u0131m\u0131zda depolanan herhangi bir alandaki verileri kar\u015F\u0131la\u015Ft\u0131rmam\u0131za olanak tan\u0131r. Spesifik olarak, yaln\u0131zca belirli bir konumda belirli bir bayt k\xFCmesiyle e\u015Fle\u015Fen account'lar\u0131 sorgulayabiliriz. memcmp iki arg\xFCman gerektirir:

    • offset: Verileri kar\u015F\u0131la\u015Ft\u0131rmaya ba\u015Flayaca\u011F\u0131n\u0131z konum. Bu konum bayt cinsinden \xF6l\xE7\xFCl\xFCr ve bir tamsay\u0131 olarak ifade edilir.
    • bytes: Hesab\u0131n verileriyle e\u015Fle\u015Fmesi gereken veriler. Bu, base-58 kodlu bir string olarak temsil edilir, 129 bayttan daha az ile s\u0131n\u0131rland\u0131r\u0131lmal\u0131d\u0131r.

    Memcmp'nin yaln\u0131zca bytes ile tam olarak e\u015Fle\u015Fen sonu\xE7lar\u0131 d\xF6nd\xFCrece\u011Fini unutmamak \xF6nemlidir. \u015Eu anda, sa\u011Flad\u0131\u011F\u0131m\u0131z bytes\u2019dan daha k\xFC\xE7\xFCk veya daha b\xFCy\xFCk de\u011Ferler i\xE7in kar\u015F\u0131la\u015Ft\u0131rmalar\u0131 desteklememektedir.

    Token Program\u0131 \xF6rne\u011Fimize uygun olarak, sorgumuzu yaln\u0131zca c\xFCzdan adresimize ait olan token account'lar\u0131n\u0131 d\xF6nd\xFCrecek \u015Fekilde de\u011Fi\u015Ftirebiliriz. Bir belirte\xE7 account'\u0131na bakt\u0131\u011F\u0131m\u0131zda, bir belirte\xE7 account'\u0131nda depolanan ilk iki alan\u0131n her ikisinin de pubkey oldu\u011Funu ve her bir pubkey'nin 32 bayt uzunlu\u011Funda oldu\u011Funu g\xF6rebiliriz. Owner\u2019\u0131n ikinci alan oldu\u011Fu g\xF6z \xF6n\xFCne al\u0131nd\u0131\u011F\u0131nda, memcmp'mize 32 baytl\u0131k bir offset ile ba\u015Flamal\u0131y\u0131z. Buradan, owner alan\u0131 c\xFCzdan adresimizle e\u015Fle\u015Fen account'lar\u0131 arayaca\u011F\u0131z.

    Account Size

    Bu sorguyu a\u015Fa\u011F\u0131daki \xF6rnek \xFCzerinden \xE7a\u011F\u0131rabiliriz:

    import { TOKEN_PROGRAM_ID } from "@solana/spl-token";
     import { clusterApiUrl, Connection } from "@solana/web3.js";
     
     (async () => {
    diff --git a/docs/.vuepress/dist/assets/get-program-accounts.html.fd913f0b.js b/docs/.vuepress/dist/assets/get-program-accounts.html.25a79f83.js
    similarity index 99%
    rename from docs/.vuepress/dist/assets/get-program-accounts.html.fd913f0b.js
    rename to docs/.vuepress/dist/assets/get-program-accounts.html.25a79f83.js
    index f731ea2fe..57decd1ce 100644
    --- a/docs/.vuepress/dist/assets/get-program-accounts.html.fd913f0b.js
    +++ b/docs/.vuepress/dist/assets/get-program-accounts.html.25a79f83.js
    @@ -1,4 +1,4 @@
    -import{_ as i,r as l,o as r,c as k,a as n,b as a,w as t,F as m,d as s,e as o}from"./app.cfdf84e7.js";var b="/assets/account-size.398f17bf.png",d="/assets/memcmp.c5e1f050.png";const f={},_=n("h1",{id:"get-program-accounts",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#get-program-accounts","aria-hidden":"true"},"#"),s(" Get Program Accounts")],-1),g=n("p",null,[s("RPC method\uB294 \uD504\uB85C\uADF8\uB7A8\uC5D0 \uC758\uD574 \uC18C\uC720\uB41C \uBAA8\uB4E0 Account\uB4E4\uC744 \uBC18\uD658\uD55C\uB2E4. \uD604\uC7AC pagination\uC740 \uC9C0\uC6D0\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. "),n("code",null,"getProgramAccounts"),s(" \uC694\uCCAD\uC740 \uC751\uB2F5 \uC2DC\uAC04\uC744 \uD5A5\uC0C1\uC2DC\uD0A4\uACE0 \uC758\uB3C4\uB41C \uACB0\uACFC\uB9CC\uC744 \uBC18\uD658\uD558\uAE30 \uC704\uD574 "),n("code",null,"dataSlice"),s(" \uADF8\uB9AC\uACE0/\uB610\uB294 "),n("code",null,"filters"),s(" \uD30C\uB77C\uBBF8\uD130\uB97C \uD3EC\uD568\uD574\uC57C \uD569\uB2C8\uB2E4.")],-1),h=n("h2",{id:"facts",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#facts","aria-hidden":"true"},"#"),s(" Facts")],-1),y={class:"custom-container tip"},A=n("p",{class:"custom-container-title"},"Parameters",-1),w=n("li",null,[n("code",null,"programId"),s(": "),n("code",null,"string"),s(" - \uC9C8\uC758\uD560 Program\uC758 Pubkey, base58 \uC778\uCF54\uB529 \uBB38\uC790\uC5F4")],-1),P=s("(optional) "),T=n("code",null,"configOrCommitment",-1),C=s(": "),S=n("code",null,"object",-1),D=s(" - \uC544\uB798\uC758 optional field\uB4E4\uC744 \uD3EC\uD568\uD558\uB294 Configuration \uD30C\uB77C\uBBF8\uD130\uB4E4 "),E=s("(optional) "),N=n("code",null,"commitment",-1),v=s(": "),M=n("code",null,"string",-1),R=s(" - "),K={href:"https://docs.solana.com/developing/clients/jsonrpc-api#configuring-state-commitment",target:"_blank",rel:"noopener noreferrer"},G=s("State commitment"),L=s("(optional) "),B=n("code",null,"encoding",-1),z=s(": "),x=n("code",null,"string",-1),F=s(" - Account Data\uC5D0 \uB300\uD55C \uC778\uCF54\uB529, either: "),H=n("code",null,"base58",-1),Z=s(", "),Q=n("code",null,"base64",-1),U=s(", or "),W=n("code",null,"jsonParsed",-1),V=s(". \uC8FC\uC758, web3js \uC0AC\uC6A9\uC790\uB294 "),j={href:"https://solana-labs.github.io/solana-web3.js/classes/Connection.html#getParsedProgramAccounts",target:"_blank",rel:"noopener noreferrer"},Y=s("getParsedProgramAccounts"),J=s("\uB97C \uC0AC\uC6A9\uD574\uC57C \uD55C\uB2E4."),O=o("
  • (optional) dataSlice: object - \uBC18\uD658\uB418\uB294 Account Data\uC5D0 \uB300\uD55C \uC81C\uD55C \uC124\uC815
    • offset: number - \uBC18\uD658\uC744 \uC2DC\uC791\uD560 Account Data \uBC14\uC774\uD2B8 \uC22B\uC790
    • length: number - \uBC18\uD658\uD560 Account Data\uC758 \uBC14\uC774\uD2B8 \uC218
  • (optional) filters: array - \uC544\uB798\uC758 filter \uAC1D\uCCB4\uB4E4\uC744 \uC0AC\uC6A9\uD558\uB294 Filter \uACB0\uACFC\uB4E4
    • memcmp: object - \uC77C\uB828\uC758 \uBC14\uC774\uD2B8\uC640 Account Data\uC758 \uBE44\uAD50:
      • offset: number - \uBE44\uAD50\uB97C \uC2DC\uC791\uD560 Account Data \uBC14\uC774\uD2B8 \uC22B\uC790
      • bytes: string - \uBE44\uAD50\uD560 Data, 129 bytes \uC81C\uD55C\uB418\uBA70 base58 \uC778\uCF54\uB529 \uB41C \uBB38\uC790\uC5F4
    • dataSize: number - Account Data\uC758 \uAE38\uC774\uC640 \uB370\uC774\uD130 \uC0AC\uC774\uC988\uC758 \uBE44\uAD50
  • ",2),X=s("(optional) "),I=n("code",null,"withContext",-1),$=s(": "),q=n("code",null,"boolean",-1),nn=s(" - \uACB0\uACFC\uB97C \uD3EC\uC7A5\uD560 "),sn={href:"https://docs.solana.com/developing/clients/jsonrpc-api#rpcresponse-structure",target:"_blank",rel:"noopener noreferrer"},an=s("RpcResponse JSON object"),en=o('
    Response

    getProgramAccounts\uB294 \uAE30\uBCF8\uC801\uC73C\uB85C \uC544\uB798\uC758 \uAD6C\uC870\uB97C \uAC16\uB294 JSON \uAC1D\uCCB4\uB4E4\uC744 \uB2F4\uACE0 \uC788\uB294 \uBC30\uC5F4\uC744 \uBC18\uD658\uD569\uB2C8\uB2E4.

    • pubkey: string - Account pubkey, base58 \uC778\uCF54\uB529 \uB41C \uBB38\uC790\uC5F4
    • account: object - \uC544\uB798\uC758 \uC11C\uBE0C \uC18D\uC131\uB4E4\uC744 \uAC16\uACE0 \uC788\uB294 JSON \uAC1D\uCCB4
      • lamports: number, Account\uC5D0 \uD560\uB2F9\uB41C lamports\uC758 \uC218
      • owner: string, base58 \uC778\uCF54\uB529 \uB418\uC5B4 Account\uC5D0 \uD560\uB2F9\uB41C Program\uC758 pubkey
      • data: string | object - Account\uC640 \uC5F0\uAD00\uB41C \uB370\uC774\uD130, \uC778\uCF54\uB529 \uD30C\uB77C\uBBF8\uD130\uB85C \uB118\uC5B4\uC628 \uAC12\uC5D0 \uB530\uB77C \uC778\uCF54\uB529 \uB41C binary data \uB610\uB294 JSON \uD615\uC2DD
      • executable: boolean, Account\uAC00 Program\uC744 \uD3EC\uD568\uD558\uB294\uC9C0\uC5D0 \uB300\uD55C \uD45C\uC2DC
      • rentEpoch: number, Account\uAC00 rent \uC9C0\uBD88\uD560 \uB2E4\uC74C epoch
    ',3),tn=n("h2",{id:"deep-dive",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#deep-dive","aria-hidden":"true"},"#"),s(" Deep Dive")],-1),cn=n("p",null,[n("code",null,"getProgramAccounts"),s("\uB294 Program\uC774 \uC18C\uC720\uD55C \uBAA8\uB4E0 Account\uB4E4\uC744 \uB9AC\uD134\uD558\uB294 \uB2E4\uC7AC\uB2E4\uB2A5\uD55C RPC method \uC785\uB2C8\uB2E4. \uC6B0\uB9AC\uB294 \uC544\uB798\uC640 \uAC19\uC774 \uBA87 \uAC00\uC9C0 \uC720\uC6A9\uD55C \uCFFC\uB9AC\uB97C \uC704\uD574 "),n("code",null,"getProgramAccounts"),s("\uB97C \uC0AC\uC6A9\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.")],-1),on=n("li",null,"\uD2B9\uC815 \uC9C0\uAC11\uC5D0 \uB300\uD55C \uBAA8\uB4E0 Token Account\uB4E4 \uC870\uD68C",-1),ln=s("\uD2B9\uC815 mint\uC5D0 \uB300\uD55C \uBAA8\uB4E0 Token Account\uB4E4 \uC870\uD68C (i.e. All "),pn={href:"https://www.projectserum.com/",target:"_blank",rel:"noopener noreferrer"},un=s("SRM"),rn=s(" holders)"),kn=s("\uD2B9\uC815 Program\uC5D0 \uB300\uD55C \uBAA8\uB4E0 custom Account\uB4E4 \uC870\uD68C (i.e. All "),mn={href:"https://mango.markets/",target:"_blank",rel:"noopener noreferrer"},bn=s("Mango"),dn=s(" users)"),fn=o("

    \uC774\uB807\uAC8C \uC720\uC6A9\uD568\uC5D0\uB3C4 \uBD88\uAD6C\uD558\uACE0, getProgramAccounts\uB294 \uD604\uC7AC \uC81C\uC57D\uC0AC\uD56D\uB4E4 \uB54C\uBB38\uC5D0 \uC790\uC8FC \uC624\uD574\uBC1B\uC2B5\uB2C8\uB2E4. getProgramAccounts\uC5D0 \uC758\uD574 \uC9C0\uC6D0\uB418\uB294 \uB9CE\uC740 \uCFFC\uB9AC\uB4E4\uC740 \uB300\uB7C9\uC758 \uB370\uC774\uD130 \uC14B\uC744 \uC2A4\uCE94\uD558\uAE30 \uC704\uD574 RPC \uB178\uB4DC\uB4E4\uC744 \uC694\uAD6C\uD569\uB2C8\uB2E4. \uC774\uB7F0 \uC2A4\uCE94 \uC791\uC5C5\uB4E4\uC740 \uBA54\uBAA8\uB9AC\uC640 \uC790\uC6D0 \uC9D1\uC911\uC801\uC774\uB2E4. \uACB0\uACFC\uC801\uC73C\uB85C, \uB108\uBB34 \uC790\uC8FC \uD639\uC740 \uB108\uBB34 \uD06C\uAC8C \uD638\uCD9C\uD558\uB294 \uAC83\uC740 connection timeout\uC744 \uC57C\uAE30\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uBFD0\uB9CC \uC544\uB2C8\uB77C, \uC774 \uAE00\uC744 \uC4F0\uB294 \uC2DC\uC810\uC5D0\uB294, getProgramAccounts\uC758 endpoint\uB294 pagination\uC744 \uC9C0\uC6D0\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. \uB9CC\uC57D \uCFFC\uB9AC\uC758 \uACB0\uACFC\uAC00 \uB108\uBB34 \uD06C\uB2E4\uBA74, \uC751\uB2F5 \uAC12\uC740 \uC798\uB9B4 \uAC83\uC785\uB2C8\uB2E4.

    \uD604\uC7AC\uC758 \uC774\uB7F0 \uC81C\uC57D\uC0AC\uD56D\uB4E4\uC744 \uD53C\uD558\uAE30 \uC704\uD574\uC11C, getProgramAccounts\uB294 \uBA87 \uAC00\uC9C0 \uC720\uC6A9\uD55C \uD30C\uB77C\uBBF8\uD130\uB4E4\uC744 \uC81C\uACF5\uD569\uB2C8\uB2E4: dataSlice, filters, memcpm \uADF8\uB9AC\uACE0 dataSize. \uC774 \uD30C\uB77C\uBBF8\uD130\uB4E4\uC744 \uC870\uD569\uD574 \uC778\uC790\uB85C \uB118\uAE40\uC73C\uB85C\uC368, \uC6B0\uB9AC\uAC00 \uCFFC\uB9AC \uD560 \uC601\uC5ED\uC744 \uAD00\uB9AC \uAC00\uB2A5\uD558\uACE0 \uC608\uCE21 \uAC00\uB2A5\uD55C \uD06C\uAE30\uB85C \uC904\uC77C \uC218 \uC788\uC2B5\uB2C8\uB2E4.

    ",2),_n=n("code",null,"getProgramAccounts",-1),gn=s("\uC758 \uD754\uD55C \uC608\uC81C\uB294 "),hn={href:"https://spl.solana.com/token",target:"_blank",rel:"noopener noreferrer"},yn=s("SPL-Token Program"),An=s("\uACFC \uD1B5\uC2E0\uD558\uB294 \uAC83\uC785\uB2C8\uB2E4. "),wn=s("basic call"),Pn=s("\uC744 \uAC00\uC9C0\uACE0 Token Program\uC774 \uC18C\uC720\uD55C \uBAA8\uB4E0 Account\uB97C \uC694\uCCAD\uD558\uB294 \uAC83\uC740 \uB9C9\uB300\uD55C \uC591\uC758 \uB370\uC774\uD130\uB97C \uD638\uCD9C\uD558\uAC8C \uB420 \uAC83\uC785\uB2C8\uB2E4. \uADF8\uB7EC\uB098, \uD30C\uB77C\uBBF8\uD130\uB4E4\uC744 \uC774\uC6A9\uD568\uC73C\uB85C\uC368 \uC6B0\uB9AC\uB294 \uD6A8\uACFC\uC801\uC73C\uB85C \uC6B0\uB9AC\uAC00 \uC0AC\uC6A9\uD558\uACE0\uC790 \uD558\uB294 \uB370\uC774\uD130\uB9CC \uC694\uCCAD\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4."),Tn=o('

    filters

    getProgramAccounts\uB97C \uC0AC\uC6A9\uD558\uAE30 \uC704\uD55C \uAC00\uC7A5 \uD754\uD55C \uD30C\uB77C\uBBF8\uD130\uB294 filters array\uB2E4. \uC774 array\uC5D0\uB294 dataSize\uC640 memcmp \uB450 \uAC00\uC9C0 \uD0C0\uC785\uC758 \uD544\uD130\uAC00 \uB4E4\uC5B4\uAC08 \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uC774 \uD544\uD130\uB4E4\uC744 \uC774\uC6A9\uD558\uAE30 \uC804\uC5D0, \uC6B0\uB9AC\uAC00 \uC694\uCCAD\uD558\uACE0 \uC788\uB294 \uB370\uC774\uD130\uB4E4\uC774 \uC5B4\uB5BB\uAC8C \uB193\uC5EC\uC788\uACE0 \uC9C1\uB82C\uD654\uB418\uB294\uC9C0\uC5D0 \uB300\uD574 \uC775\uC219\uD574\uC838\uC57C \uD569\uB2C8\uB2E4.

    dataSize

    ',3),Cn=s("Token Program\uC758 \uACBD\uC6B0, \uC6B0\uB9AC\uB294 "),Sn={href:"https://github.com/solana-labs/solana-program-library/blob/08d9999f997a8bf38719679be9d572f119d0d960/token/program/src/state.rs#L86-L106",target:"_blank",rel:"noopener noreferrer"},Dn=s("Token Account\uAC00 165 bytes\uC758 \uAE38\uC774"),En=s("\uB97C \uAC00\uC9C4\uB2E4\uB294 \uAC83\uC744 \uC54C \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uAD6C\uCCB4\uC801\uC73C\uB85C, Token Account\uB294 \uAC01\uAC01 \uC608\uCE21 \uAC00\uB2A5\uD55C bytes \uC218\uB97C \uC694\uAD6C\uD558\uB294 8\uAC1C\uC758 \uB2E4\uB978 \uD544\uB4DC\uB4E4\uC744 \uAC00\uC9C0\uACE0 \uC788\uC2B5\uB2C8\uB2E4. \uC6B0\uB9AC\uB294 \uC544\uB798\uC758 \uADF8\uB9BC\uC744 \uD1B5\uD574 \uC774 \uB370\uC774\uD130\uAC00 \uC5B4\uB5BB\uAC8C \uB193\uC5EC\uC788\uB294\uC9C0 \uD655\uC778\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4."),Nn=o('

    Account Size

    \uB9CC\uC57D \uC6B0\uB9AC\uAC00 \uC6B0\uB9AC\uC758 \uC9C0\uAC11 Address\uAC00 \uC18C\uC720\uD55C \uBAA8\uB4E0 Token Account\uB4E4\uC744 \uC54C\uACE0 \uC2F6\uB2E4\uBA74, \uC6B0\uB9AC\uB294 \uC815\uD655\uD788 165 bytes \uAE38\uC774\uC778 Account\uB4E4\uC5D0 \uB300\uD574 \uCFFC\uB9AC \uC601\uC5ED\uC744 \uC881\uAC8C \uB9CC\uB4DC\uB294 { dataSize: 165 }\uB97C filters array\uC5D0 \uCD94\uAC00\uD560 \uC218 \uC788\uC744 \uAC83\uC785\uB2C8\uB2E4. \uADF8\uB7EC\uB098 \uC774\uAC83\uB9CC\uC73C\uB85C\uB294 \uCDA9\uBD84\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. \uC6B0\uB9AC\uB294 \uB610\uD55C \uC6B0\uB9AC\uC758 Addres\uAC00 \uC18C\uC720\uD55C Account\uB4E4\uC744 \uCC3E\uB294 \uD544\uD130\uB97C \uCD94\uAC00\uD560 \uD544\uC694\uAC00 \uC788\uC2B5\uB2C8\uB2E4. \uC6B0\uB9AC\uB294 \uC774\uAC83\uC744 memcmp \uD544\uD130\uB97C \uD1B5\uD574 \uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.

    memcmp

    memcmp \uD544\uD130 \uD639\uC740 "\uBA54\uBAA8\uB9AC \uBE44\uAD50" \uD544\uD130\uB294 \uC6B0\uB9AC\uC758 Account\uC5D0 \uC800\uC7A5\uB41C \uC5B4\uB5A4 \uC18D\uC131\uC5D0 \uC788\uB294 \uB370\uC774\uD130\uB97C \uBE44\uAD50\uD560 \uC218 \uC788\uAC8C \uD574 \uC90D\uB2C8\uB2E4. \uAD6C\uCCB4\uC801\uC73C\uB85C, \uC6B0\uB9AC\uB294 \uD2B9\uC815 \uD3EC\uC9C0\uC158\uC5D0 \uC788\uB294 \uD2B9\uC815 bytes \uC9D1\uD569\uC5D0 \uB9DE\uCDB0 Account\uB4E4\uC744 \uC9C8\uC758\uD560 \uC218 \uC788\uB2E4. memcmp\uB294 \uB450 \uAC00\uC9C0 \uC778\uC790\uB97C \uC694\uAD6C\uD569\uB2C8\uB2E4:

    • offset: \uB370\uC774\uD130 \uBE44\uAD50\uB97C \uC2DC\uC791\uD560 \uC704\uCE58. \uC774 \uC704\uCE58\uB294 bytes\uB85C \uCE21\uC815\uB418\uBA70 integer\uB85C \uD45C\uD604\uB429\uB2C8\uB2E4.
    • bytes: Account\uC758 \uB370\uC774\uD130\uC640 \uB9E4\uCE6D \uB418\uC5B4\uC57C \uD558\uB294 \uB370\uC774\uD130. \uC774\uAC83\uC740 base-58\uB85C \uC778\uCF54\uB529 \uB41C \uBB38\uC790\uC5F4\uB85C \uD45C\uD604\uB418\uBA70 129 bytes \uC774\uD558\uB85C \uC81C\uD55C\uB429\uB2C8\uB2E4.

    memcmp\uB294 bytes\uAC00 \uC815\uD655\uD788 \uB9E4\uCE6D \uB41C \uACBD\uC6B0\uC5D0\uB9CC \uACB0\uACFC\uB97C \uBC18\uD658\uD55C\uB2E4\uB294 \uC0AC\uC2E4\uC744 \uC544\uB294 \uAC83\uC774 \uC911\uC694\uD569\uB2C8\uB2E4. \uD604\uC7AC, \uC6B0\uB9AC\uAC00 \uC81C\uACF5\uD560 bytes\uBCF4\uB2E4 \uD06C\uAC70\uB098 \uC791\uC740 \uAC12\uC5D0 \uB300\uD55C \uBE44\uAD50\uB294 \uC9C0\uC6D0\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.

    Token Program \uC608\uC81C\uC640 \uD568\uAED8 \uACC4\uC18D\uD574\uC11C, \uC6B0\uB9AC\uB294 \uC6B0\uB9AC\uC758 \uC9C0\uAC11 Address\uAC00 \uC18C\uC720\uD55C Token Account\uB4E4\uB9CC \uBC18\uD658\uD558\uB3C4\uB85D \uCFFC\uB9AC\uB97C \uACE0\uCE60 \uC218 \uC788\uC2B5\uB2C8\uB2E4. Token Account\uB97C \uBD24\uC744 \uB54C, \uC6B0\uB9AC\uB294 Token Account\uC5D0 \uC800\uC7A5\uB41C \uCC98\uC74C \uB450 \uD544\uB4DC\uAC00 \uBAA8\uB450 pubkey\uB77C\uB294 \uAC83\uACFC, \uAC01 pubkey\uB294 32 bytes \uAE38\uC774\uC778 \uAC83\uC744 \uC54C \uC218 \uC788\uC2B5\uB2C8\uB2E4. owner\uAC00 \uB450 \uBC88\uC9F8 \uD544\uB4DC\uC778 \uAC83\uC744 \uACE0\uB824\uD558\uBA74, \uC6B0\uB9AC\uB294 memcmp\uB97C offset 32 bytes\uC5D0\uC11C \uC2DC\uC791\uD574\uC57C\uD569\uB2C8\uB2E4. \uC5EC\uAE30\uC11C\uBD80\uD130, \uC6B0\uB9AC\uB294 owner \uD544\uB4DC\uAC00 \uC6B0\uB9AC\uC758 \uC9C0\uAC11 Address\uC640 \uB9E4\uCE6D\uB418\uB294 Account\uB4E4\uC744 \uCC3E\uC744 \uAC83\uC785\uB2C8\uB2E4.

    Account Size

    \uC6B0\uB9AC\uB294 \uC544\uB798\uC758 \uC608\uC81C\uB97C \uD1B5\uD574 \uC774 \uCFFC\uB9AC\uB97C \uD638\uCD9C\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.

    ',9),vn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(),n("span",{class:"token constant"},"TOKEN_PROGRAM_ID"),s(),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/spl-token"'),n("span",{class:"token punctuation"},";"),s(` +import{_ as i,r as l,o as r,c as k,a as n,b as a,w as t,F as m,d as s,e as o}from"./app.2fbb9e96.js";var b="/assets/account-size.398f17bf.png",d="/assets/memcmp.c5e1f050.png";const f={},_=n("h1",{id:"get-program-accounts",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#get-program-accounts","aria-hidden":"true"},"#"),s(" Get Program Accounts")],-1),g=n("p",null,[s("RPC method\uB294 \uD504\uB85C\uADF8\uB7A8\uC5D0 \uC758\uD574 \uC18C\uC720\uB41C \uBAA8\uB4E0 Account\uB4E4\uC744 \uBC18\uD658\uD55C\uB2E4. \uD604\uC7AC pagination\uC740 \uC9C0\uC6D0\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. "),n("code",null,"getProgramAccounts"),s(" \uC694\uCCAD\uC740 \uC751\uB2F5 \uC2DC\uAC04\uC744 \uD5A5\uC0C1\uC2DC\uD0A4\uACE0 \uC758\uB3C4\uB41C \uACB0\uACFC\uB9CC\uC744 \uBC18\uD658\uD558\uAE30 \uC704\uD574 "),n("code",null,"dataSlice"),s(" \uADF8\uB9AC\uACE0/\uB610\uB294 "),n("code",null,"filters"),s(" \uD30C\uB77C\uBBF8\uD130\uB97C \uD3EC\uD568\uD574\uC57C \uD569\uB2C8\uB2E4.")],-1),h=n("h2",{id:"facts",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#facts","aria-hidden":"true"},"#"),s(" Facts")],-1),y={class:"custom-container tip"},A=n("p",{class:"custom-container-title"},"Parameters",-1),w=n("li",null,[n("code",null,"programId"),s(": "),n("code",null,"string"),s(" - \uC9C8\uC758\uD560 Program\uC758 Pubkey, base58 \uC778\uCF54\uB529 \uBB38\uC790\uC5F4")],-1),P=s("(optional) "),T=n("code",null,"configOrCommitment",-1),C=s(": "),S=n("code",null,"object",-1),D=s(" - \uC544\uB798\uC758 optional field\uB4E4\uC744 \uD3EC\uD568\uD558\uB294 Configuration \uD30C\uB77C\uBBF8\uD130\uB4E4 "),E=s("(optional) "),N=n("code",null,"commitment",-1),v=s(": "),M=n("code",null,"string",-1),R=s(" - "),K={href:"https://docs.solana.com/developing/clients/jsonrpc-api#configuring-state-commitment",target:"_blank",rel:"noopener noreferrer"},G=s("State commitment"),L=s("(optional) "),B=n("code",null,"encoding",-1),z=s(": "),x=n("code",null,"string",-1),F=s(" - Account Data\uC5D0 \uB300\uD55C \uC778\uCF54\uB529, either: "),H=n("code",null,"base58",-1),Z=s(", "),Q=n("code",null,"base64",-1),U=s(", or "),W=n("code",null,"jsonParsed",-1),V=s(". \uC8FC\uC758, web3js \uC0AC\uC6A9\uC790\uB294 "),j={href:"https://solana-labs.github.io/solana-web3.js/classes/Connection.html#getParsedProgramAccounts",target:"_blank",rel:"noopener noreferrer"},Y=s("getParsedProgramAccounts"),J=s("\uB97C \uC0AC\uC6A9\uD574\uC57C \uD55C\uB2E4."),O=o("
  • (optional) dataSlice: object - \uBC18\uD658\uB418\uB294 Account Data\uC5D0 \uB300\uD55C \uC81C\uD55C \uC124\uC815
    • offset: number - \uBC18\uD658\uC744 \uC2DC\uC791\uD560 Account Data \uBC14\uC774\uD2B8 \uC22B\uC790
    • length: number - \uBC18\uD658\uD560 Account Data\uC758 \uBC14\uC774\uD2B8 \uC218
  • (optional) filters: array - \uC544\uB798\uC758 filter \uAC1D\uCCB4\uB4E4\uC744 \uC0AC\uC6A9\uD558\uB294 Filter \uACB0\uACFC\uB4E4
    • memcmp: object - \uC77C\uB828\uC758 \uBC14\uC774\uD2B8\uC640 Account Data\uC758 \uBE44\uAD50:
      • offset: number - \uBE44\uAD50\uB97C \uC2DC\uC791\uD560 Account Data \uBC14\uC774\uD2B8 \uC22B\uC790
      • bytes: string - \uBE44\uAD50\uD560 Data, 129 bytes \uC81C\uD55C\uB418\uBA70 base58 \uC778\uCF54\uB529 \uB41C \uBB38\uC790\uC5F4
    • dataSize: number - Account Data\uC758 \uAE38\uC774\uC640 \uB370\uC774\uD130 \uC0AC\uC774\uC988\uC758 \uBE44\uAD50
  • ",2),X=s("(optional) "),I=n("code",null,"withContext",-1),$=s(": "),q=n("code",null,"boolean",-1),nn=s(" - \uACB0\uACFC\uB97C \uD3EC\uC7A5\uD560 "),sn={href:"https://docs.solana.com/developing/clients/jsonrpc-api#rpcresponse-structure",target:"_blank",rel:"noopener noreferrer"},an=s("RpcResponse JSON object"),en=o('
    Response

    getProgramAccounts\uB294 \uAE30\uBCF8\uC801\uC73C\uB85C \uC544\uB798\uC758 \uAD6C\uC870\uB97C \uAC16\uB294 JSON \uAC1D\uCCB4\uB4E4\uC744 \uB2F4\uACE0 \uC788\uB294 \uBC30\uC5F4\uC744 \uBC18\uD658\uD569\uB2C8\uB2E4.

    • pubkey: string - Account pubkey, base58 \uC778\uCF54\uB529 \uB41C \uBB38\uC790\uC5F4
    • account: object - \uC544\uB798\uC758 \uC11C\uBE0C \uC18D\uC131\uB4E4\uC744 \uAC16\uACE0 \uC788\uB294 JSON \uAC1D\uCCB4
      • lamports: number, Account\uC5D0 \uD560\uB2F9\uB41C lamports\uC758 \uC218
      • owner: string, base58 \uC778\uCF54\uB529 \uB418\uC5B4 Account\uC5D0 \uD560\uB2F9\uB41C Program\uC758 pubkey
      • data: string | object - Account\uC640 \uC5F0\uAD00\uB41C \uB370\uC774\uD130, \uC778\uCF54\uB529 \uD30C\uB77C\uBBF8\uD130\uB85C \uB118\uC5B4\uC628 \uAC12\uC5D0 \uB530\uB77C \uC778\uCF54\uB529 \uB41C binary data \uB610\uB294 JSON \uD615\uC2DD
      • executable: boolean, Account\uAC00 Program\uC744 \uD3EC\uD568\uD558\uB294\uC9C0\uC5D0 \uB300\uD55C \uD45C\uC2DC
      • rentEpoch: number, Account\uAC00 rent \uC9C0\uBD88\uD560 \uB2E4\uC74C epoch
    ',3),tn=n("h2",{id:"deep-dive",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#deep-dive","aria-hidden":"true"},"#"),s(" Deep Dive")],-1),cn=n("p",null,[n("code",null,"getProgramAccounts"),s("\uB294 Program\uC774 \uC18C\uC720\uD55C \uBAA8\uB4E0 Account\uB4E4\uC744 \uB9AC\uD134\uD558\uB294 \uB2E4\uC7AC\uB2E4\uB2A5\uD55C RPC method \uC785\uB2C8\uB2E4. \uC6B0\uB9AC\uB294 \uC544\uB798\uC640 \uAC19\uC774 \uBA87 \uAC00\uC9C0 \uC720\uC6A9\uD55C \uCFFC\uB9AC\uB97C \uC704\uD574 "),n("code",null,"getProgramAccounts"),s("\uB97C \uC0AC\uC6A9\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.")],-1),on=n("li",null,"\uD2B9\uC815 \uC9C0\uAC11\uC5D0 \uB300\uD55C \uBAA8\uB4E0 Token Account\uB4E4 \uC870\uD68C",-1),ln=s("\uD2B9\uC815 mint\uC5D0 \uB300\uD55C \uBAA8\uB4E0 Token Account\uB4E4 \uC870\uD68C (i.e. All "),pn={href:"https://www.projectserum.com/",target:"_blank",rel:"noopener noreferrer"},un=s("SRM"),rn=s(" holders)"),kn=s("\uD2B9\uC815 Program\uC5D0 \uB300\uD55C \uBAA8\uB4E0 custom Account\uB4E4 \uC870\uD68C (i.e. All "),mn={href:"https://mango.markets/",target:"_blank",rel:"noopener noreferrer"},bn=s("Mango"),dn=s(" users)"),fn=o("

    \uC774\uB807\uAC8C \uC720\uC6A9\uD568\uC5D0\uB3C4 \uBD88\uAD6C\uD558\uACE0, getProgramAccounts\uB294 \uD604\uC7AC \uC81C\uC57D\uC0AC\uD56D\uB4E4 \uB54C\uBB38\uC5D0 \uC790\uC8FC \uC624\uD574\uBC1B\uC2B5\uB2C8\uB2E4. getProgramAccounts\uC5D0 \uC758\uD574 \uC9C0\uC6D0\uB418\uB294 \uB9CE\uC740 \uCFFC\uB9AC\uB4E4\uC740 \uB300\uB7C9\uC758 \uB370\uC774\uD130 \uC14B\uC744 \uC2A4\uCE94\uD558\uAE30 \uC704\uD574 RPC \uB178\uB4DC\uB4E4\uC744 \uC694\uAD6C\uD569\uB2C8\uB2E4. \uC774\uB7F0 \uC2A4\uCE94 \uC791\uC5C5\uB4E4\uC740 \uBA54\uBAA8\uB9AC\uC640 \uC790\uC6D0 \uC9D1\uC911\uC801\uC774\uB2E4. \uACB0\uACFC\uC801\uC73C\uB85C, \uB108\uBB34 \uC790\uC8FC \uD639\uC740 \uB108\uBB34 \uD06C\uAC8C \uD638\uCD9C\uD558\uB294 \uAC83\uC740 connection timeout\uC744 \uC57C\uAE30\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uBFD0\uB9CC \uC544\uB2C8\uB77C, \uC774 \uAE00\uC744 \uC4F0\uB294 \uC2DC\uC810\uC5D0\uB294, getProgramAccounts\uC758 endpoint\uB294 pagination\uC744 \uC9C0\uC6D0\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. \uB9CC\uC57D \uCFFC\uB9AC\uC758 \uACB0\uACFC\uAC00 \uB108\uBB34 \uD06C\uB2E4\uBA74, \uC751\uB2F5 \uAC12\uC740 \uC798\uB9B4 \uAC83\uC785\uB2C8\uB2E4.

    \uD604\uC7AC\uC758 \uC774\uB7F0 \uC81C\uC57D\uC0AC\uD56D\uB4E4\uC744 \uD53C\uD558\uAE30 \uC704\uD574\uC11C, getProgramAccounts\uB294 \uBA87 \uAC00\uC9C0 \uC720\uC6A9\uD55C \uD30C\uB77C\uBBF8\uD130\uB4E4\uC744 \uC81C\uACF5\uD569\uB2C8\uB2E4: dataSlice, filters, memcpm \uADF8\uB9AC\uACE0 dataSize. \uC774 \uD30C\uB77C\uBBF8\uD130\uB4E4\uC744 \uC870\uD569\uD574 \uC778\uC790\uB85C \uB118\uAE40\uC73C\uB85C\uC368, \uC6B0\uB9AC\uAC00 \uCFFC\uB9AC \uD560 \uC601\uC5ED\uC744 \uAD00\uB9AC \uAC00\uB2A5\uD558\uACE0 \uC608\uCE21 \uAC00\uB2A5\uD55C \uD06C\uAE30\uB85C \uC904\uC77C \uC218 \uC788\uC2B5\uB2C8\uB2E4.

    ",2),_n=n("code",null,"getProgramAccounts",-1),gn=s("\uC758 \uD754\uD55C \uC608\uC81C\uB294 "),hn={href:"https://spl.solana.com/token",target:"_blank",rel:"noopener noreferrer"},yn=s("SPL-Token Program"),An=s("\uACFC \uD1B5\uC2E0\uD558\uB294 \uAC83\uC785\uB2C8\uB2E4. "),wn=s("basic call"),Pn=s("\uC744 \uAC00\uC9C0\uACE0 Token Program\uC774 \uC18C\uC720\uD55C \uBAA8\uB4E0 Account\uB97C \uC694\uCCAD\uD558\uB294 \uAC83\uC740 \uB9C9\uB300\uD55C \uC591\uC758 \uB370\uC774\uD130\uB97C \uD638\uCD9C\uD558\uAC8C \uB420 \uAC83\uC785\uB2C8\uB2E4. \uADF8\uB7EC\uB098, \uD30C\uB77C\uBBF8\uD130\uB4E4\uC744 \uC774\uC6A9\uD568\uC73C\uB85C\uC368 \uC6B0\uB9AC\uB294 \uD6A8\uACFC\uC801\uC73C\uB85C \uC6B0\uB9AC\uAC00 \uC0AC\uC6A9\uD558\uACE0\uC790 \uD558\uB294 \uB370\uC774\uD130\uB9CC \uC694\uCCAD\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4."),Tn=o('

    filters

    getProgramAccounts\uB97C \uC0AC\uC6A9\uD558\uAE30 \uC704\uD55C \uAC00\uC7A5 \uD754\uD55C \uD30C\uB77C\uBBF8\uD130\uB294 filters array\uB2E4. \uC774 array\uC5D0\uB294 dataSize\uC640 memcmp \uB450 \uAC00\uC9C0 \uD0C0\uC785\uC758 \uD544\uD130\uAC00 \uB4E4\uC5B4\uAC08 \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uC774 \uD544\uD130\uB4E4\uC744 \uC774\uC6A9\uD558\uAE30 \uC804\uC5D0, \uC6B0\uB9AC\uAC00 \uC694\uCCAD\uD558\uACE0 \uC788\uB294 \uB370\uC774\uD130\uB4E4\uC774 \uC5B4\uB5BB\uAC8C \uB193\uC5EC\uC788\uACE0 \uC9C1\uB82C\uD654\uB418\uB294\uC9C0\uC5D0 \uB300\uD574 \uC775\uC219\uD574\uC838\uC57C \uD569\uB2C8\uB2E4.

    dataSize

    ',3),Cn=s("Token Program\uC758 \uACBD\uC6B0, \uC6B0\uB9AC\uB294 "),Sn={href:"https://github.com/solana-labs/solana-program-library/blob/08d9999f997a8bf38719679be9d572f119d0d960/token/program/src/state.rs#L86-L106",target:"_blank",rel:"noopener noreferrer"},Dn=s("Token Account\uAC00 165 bytes\uC758 \uAE38\uC774"),En=s("\uB97C \uAC00\uC9C4\uB2E4\uB294 \uAC83\uC744 \uC54C \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uAD6C\uCCB4\uC801\uC73C\uB85C, Token Account\uB294 \uAC01\uAC01 \uC608\uCE21 \uAC00\uB2A5\uD55C bytes \uC218\uB97C \uC694\uAD6C\uD558\uB294 8\uAC1C\uC758 \uB2E4\uB978 \uD544\uB4DC\uB4E4\uC744 \uAC00\uC9C0\uACE0 \uC788\uC2B5\uB2C8\uB2E4. \uC6B0\uB9AC\uB294 \uC544\uB798\uC758 \uADF8\uB9BC\uC744 \uD1B5\uD574 \uC774 \uB370\uC774\uD130\uAC00 \uC5B4\uB5BB\uAC8C \uB193\uC5EC\uC788\uB294\uC9C0 \uD655\uC778\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4."),Nn=o('

    Account Size

    \uB9CC\uC57D \uC6B0\uB9AC\uAC00 \uC6B0\uB9AC\uC758 \uC9C0\uAC11 Address\uAC00 \uC18C\uC720\uD55C \uBAA8\uB4E0 Token Account\uB4E4\uC744 \uC54C\uACE0 \uC2F6\uB2E4\uBA74, \uC6B0\uB9AC\uB294 \uC815\uD655\uD788 165 bytes \uAE38\uC774\uC778 Account\uB4E4\uC5D0 \uB300\uD574 \uCFFC\uB9AC \uC601\uC5ED\uC744 \uC881\uAC8C \uB9CC\uB4DC\uB294 { dataSize: 165 }\uB97C filters array\uC5D0 \uCD94\uAC00\uD560 \uC218 \uC788\uC744 \uAC83\uC785\uB2C8\uB2E4. \uADF8\uB7EC\uB098 \uC774\uAC83\uB9CC\uC73C\uB85C\uB294 \uCDA9\uBD84\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. \uC6B0\uB9AC\uB294 \uB610\uD55C \uC6B0\uB9AC\uC758 Addres\uAC00 \uC18C\uC720\uD55C Account\uB4E4\uC744 \uCC3E\uB294 \uD544\uD130\uB97C \uCD94\uAC00\uD560 \uD544\uC694\uAC00 \uC788\uC2B5\uB2C8\uB2E4. \uC6B0\uB9AC\uB294 \uC774\uAC83\uC744 memcmp \uD544\uD130\uB97C \uD1B5\uD574 \uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.

    memcmp

    memcmp \uD544\uD130 \uD639\uC740 "\uBA54\uBAA8\uB9AC \uBE44\uAD50" \uD544\uD130\uB294 \uC6B0\uB9AC\uC758 Account\uC5D0 \uC800\uC7A5\uB41C \uC5B4\uB5A4 \uC18D\uC131\uC5D0 \uC788\uB294 \uB370\uC774\uD130\uB97C \uBE44\uAD50\uD560 \uC218 \uC788\uAC8C \uD574 \uC90D\uB2C8\uB2E4. \uAD6C\uCCB4\uC801\uC73C\uB85C, \uC6B0\uB9AC\uB294 \uD2B9\uC815 \uD3EC\uC9C0\uC158\uC5D0 \uC788\uB294 \uD2B9\uC815 bytes \uC9D1\uD569\uC5D0 \uB9DE\uCDB0 Account\uB4E4\uC744 \uC9C8\uC758\uD560 \uC218 \uC788\uB2E4. memcmp\uB294 \uB450 \uAC00\uC9C0 \uC778\uC790\uB97C \uC694\uAD6C\uD569\uB2C8\uB2E4:

    • offset: \uB370\uC774\uD130 \uBE44\uAD50\uB97C \uC2DC\uC791\uD560 \uC704\uCE58. \uC774 \uC704\uCE58\uB294 bytes\uB85C \uCE21\uC815\uB418\uBA70 integer\uB85C \uD45C\uD604\uB429\uB2C8\uB2E4.
    • bytes: Account\uC758 \uB370\uC774\uD130\uC640 \uB9E4\uCE6D \uB418\uC5B4\uC57C \uD558\uB294 \uB370\uC774\uD130. \uC774\uAC83\uC740 base-58\uB85C \uC778\uCF54\uB529 \uB41C \uBB38\uC790\uC5F4\uB85C \uD45C\uD604\uB418\uBA70 129 bytes \uC774\uD558\uB85C \uC81C\uD55C\uB429\uB2C8\uB2E4.

    memcmp\uB294 bytes\uAC00 \uC815\uD655\uD788 \uB9E4\uCE6D \uB41C \uACBD\uC6B0\uC5D0\uB9CC \uACB0\uACFC\uB97C \uBC18\uD658\uD55C\uB2E4\uB294 \uC0AC\uC2E4\uC744 \uC544\uB294 \uAC83\uC774 \uC911\uC694\uD569\uB2C8\uB2E4. \uD604\uC7AC, \uC6B0\uB9AC\uAC00 \uC81C\uACF5\uD560 bytes\uBCF4\uB2E4 \uD06C\uAC70\uB098 \uC791\uC740 \uAC12\uC5D0 \uB300\uD55C \uBE44\uAD50\uB294 \uC9C0\uC6D0\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.

    Token Program \uC608\uC81C\uC640 \uD568\uAED8 \uACC4\uC18D\uD574\uC11C, \uC6B0\uB9AC\uB294 \uC6B0\uB9AC\uC758 \uC9C0\uAC11 Address\uAC00 \uC18C\uC720\uD55C Token Account\uB4E4\uB9CC \uBC18\uD658\uD558\uB3C4\uB85D \uCFFC\uB9AC\uB97C \uACE0\uCE60 \uC218 \uC788\uC2B5\uB2C8\uB2E4. Token Account\uB97C \uBD24\uC744 \uB54C, \uC6B0\uB9AC\uB294 Token Account\uC5D0 \uC800\uC7A5\uB41C \uCC98\uC74C \uB450 \uD544\uB4DC\uAC00 \uBAA8\uB450 pubkey\uB77C\uB294 \uAC83\uACFC, \uAC01 pubkey\uB294 32 bytes \uAE38\uC774\uC778 \uAC83\uC744 \uC54C \uC218 \uC788\uC2B5\uB2C8\uB2E4. owner\uAC00 \uB450 \uBC88\uC9F8 \uD544\uB4DC\uC778 \uAC83\uC744 \uACE0\uB824\uD558\uBA74, \uC6B0\uB9AC\uB294 memcmp\uB97C offset 32 bytes\uC5D0\uC11C \uC2DC\uC791\uD574\uC57C\uD569\uB2C8\uB2E4. \uC5EC\uAE30\uC11C\uBD80\uD130, \uC6B0\uB9AC\uB294 owner \uD544\uB4DC\uAC00 \uC6B0\uB9AC\uC758 \uC9C0\uAC11 Address\uC640 \uB9E4\uCE6D\uB418\uB294 Account\uB4E4\uC744 \uCC3E\uC744 \uAC83\uC785\uB2C8\uB2E4.

    Account Size

    \uC6B0\uB9AC\uB294 \uC544\uB798\uC758 \uC608\uC81C\uB97C \uD1B5\uD574 \uC774 \uCFFC\uB9AC\uB97C \uD638\uCD9C\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.

    ',9),vn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(),n("span",{class:"token constant"},"TOKEN_PROGRAM_ID"),s(),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/spl-token"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" clusterApiUrl"),n("span",{class:"token punctuation"},","),s(" Connection "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` diff --git a/docs/.vuepress/dist/assets/get-program-accounts.html.d1f66188.js b/docs/.vuepress/dist/assets/get-program-accounts.html.33767d6d.js similarity index 99% rename from docs/.vuepress/dist/assets/get-program-accounts.html.d1f66188.js rename to docs/.vuepress/dist/assets/get-program-accounts.html.33767d6d.js index a10e3b243..f20927e58 100644 --- a/docs/.vuepress/dist/assets/get-program-accounts.html.d1f66188.js +++ b/docs/.vuepress/dist/assets/get-program-accounts.html.33767d6d.js @@ -1,4 +1,4 @@ -import{_ as i,r as l,o as r,c as m,a as n,b as a,w as t,F as b,d as s,e as o}from"./app.cfdf84e7.js";var k="/assets/account-size.398f17bf.png",d="/assets/memcmp.c5e1f050.png";const f={},h=n("h1",{id:"get-program-accounts",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#get-program-accounts","aria-hidden":"true"},"#"),s(" Get Program Accounts")],-1),g=n("p",null,[s("An RPC method that returns all accounts owned by a program. Currently pagination is not supported. Requests to "),n("code",null,"getProgramAccounts"),s(" should include the "),n("code",null,"dataSlice"),s(" and/or "),n("code",null,"filters"),s(" parameters to improve response time and return only intended results.")],-1),_=n("h2",{id:"facts",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#facts","aria-hidden":"true"},"#"),s(" Facts")],-1),y={class:"custom-container tip"},w=n("p",{class:"custom-container-title"},"Parameters",-1),A=n("li",null,[n("code",null,"programId"),s(": "),n("code",null,"string"),s(" - Pubkey of the program to query, provided as a base58 encoded string")],-1),T=s("(optional) "),C=n("code",null,"configOrCommitment",-1),S=s(": "),P=n("code",null,"object",-1),v=s(" - Configuration parameters containing the following optional fields: "),D=s("(optional) "),E=n("code",null,"commitment",-1),N=s(": "),M=n("code",null,"string",-1),R=s(" - "),B={href:"https://docs.solana.com/developing/clients/jsonrpc-api#configuring-state-commitment",target:"_blank",rel:"noopener noreferrer"},K=s("State commitment"),G=s("(optional) "),L=n("code",null,"encoding",-1),x=s(": "),z=n("code",null,"string",-1),F=s(" - Encoding for account data, either: "),H=n("code",null,"base58",-1),W=s(", "),Z=n("code",null,"base64",-1),Q=s(", or "),U=n("code",null,"jsonParsed",-1),j=s(". Note, web3js users should instead use "),V={href:"https://solana-labs.github.io/solana-web3.js/classes/Connection.html#getParsedProgramAccounts",target:"_blank",rel:"noopener noreferrer"},I=s("getParsedProgramAccounts"),O=o("
  • (optional) dataSlice: object - Limit the returned account data based on:
    • offset: number - Number of bytes into account data to begin returning
    • length: number - Number of bytes of account data to return
  • (optional) filters: array - Filter results using the following filter objects:
    • memcmp: object - Match a series of bytes to account data:
      • offset: number - Number of bytes into account data to begin comparing
      • bytes: string - Data to match, as base58 encoded string limited to 129 bytes
    • dataSize: number - Compares the account data length with the provided data size
  • ",2),Y=s("(optional) "),J=n("code",null,"withContext",-1),X=s(": "),q=n("code",null,"boolean",-1),$=s(" - Wrap the result in an "),nn={href:"https://docs.solana.com/developing/clients/jsonrpc-api#rpcresponse-structure",target:"_blank",rel:"noopener noreferrer"},sn=s("RpcResponse JSON object"),an=o('
    Response

    By default getProgramAccounts will return an array of JSON objects with the following structure:

    • pubkey: string - The account pubkey as a base58 encoded string
    • account: object - a JSON object, with the following sub fields:
      • lamports: number, number of lamports assigned to the account
      • owner: string, The base58 encoded pubkey of the program the account has been assigned to
      • data: string | object - data associated with the account, either as encoded binary data or JSON format depending on the provided encoding parameter
      • executable: boolean, Indication if the account contains a program
      • rentEpoch: number, The epoch at which this account will next owe rent
    ',3),en=n("h2",{id:"deep-dive",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#deep-dive","aria-hidden":"true"},"#"),s(" Deep Dive")],-1),tn=n("p",null,[n("code",null,"getProgramAccounts"),s(" is a versatile RPC method that returns all accounts owned by a program. We can use "),n("code",null,"getProgramAccounts"),s(" for a number of useful queries, such as finding:")],-1),cn=n("li",null,"All token accounts for a particular wallet",-1),on=s("All token accounts for a particular mint (i.e. All "),ln={href:"https://www.projectserum.com/",target:"_blank",rel:"noopener noreferrer"},pn=s("SRM"),un=s(" holders)"),rn=s("All custom accounts for a particular program (i.e. All "),mn={href:"https://mango.markets/",target:"_blank",rel:"noopener noreferrer"},bn=s("Mango"),kn=s(" users)"),dn=o("

    Despite its usefulness, getProgramAccounts is often misunderstood due to its current constraints. Many of the queries supported by getProgramAccounts require RPC nodes to scan large sets of data. These scans are both memory and resource intensive. As a result, calls that are too frequent or too large in scope can result in connection timeouts. Furthermore, at the time of this writing, the getProgramAccounts endpoint does not support pagination. If the results of a query are too large, the response will be truncated.

    To get around these current constraints, getProgramAccounts offers a number of useful parameters: namely, dataSlice and the filters options memcmp and dataSize. By providing combinations of these parameters, we can reduce the scope of our queries down to manageable and predictable sizes.

    ",2),fn=s("A common example of "),hn=n("code",null,"getProgramAccounts",-1),gn=s(" involves interacting with the "),_n={href:"https://spl.solana.com/token",target:"_blank",rel:"noopener noreferrer"},yn=s("SPL-Token Program"),wn=s(". Requesting all accounts owned by the Token Program with a "),An=s("basic call"),Tn=s(" would involve an enormous amount of data. By providing parameters, however, we can efficiently request just the data we intend to use."),Cn=o('

    filters

    The most common parameter to use with getProgramAccounts is the filters array. This array accepts two types of filters,dataSize and memcmp. Before using either of these filters, we should be familiar with how the data we are requesting is laid out and serialized.

    dataSize

    ',3),Sn=s("In the case of the Token Program, we can see that "),Pn={href:"https://github.com/solana-labs/solana-program-library/blob/08d9999f997a8bf38719679be9d572f119d0d960/token/program/src/state.rs#L86-L106",target:"_blank",rel:"noopener noreferrer"},vn=s("token accounts are 165 bytes in length"),Dn=s(". Specifically, a token account has eight different fields, with each field requiring a predictable number of bytes. We can visualize how this data is laid out using the below illustration."),En=o('

    Account Size

    If we wanted to find all token accounts owned by our wallet address, we could add { dataSize: 165 } to our filters array to narrow the scope of our query to just accounts that are exactly 165 bytes in length. This alone, however, would be insufficient. We would also need to add a filter that looks for accounts owned by our address. We can achieve this with the memcmp filter.

    memcmp

    The memcmp filter, or "memory comparison" filter, allows us to compare data at any field stored on our account. Specifically, we can query only for accounts that match a particular set of bytes at a particular position. memcmp requires two arguments:

    • offset: The position at which to begin comparing data. This position is measured in bytes and is expressed as an integer.
    • bytes: The data that should match the account's data. This is represented as a base-58 encoded string should be limited to less than 129 bytes.

    It's important to note that memcmp will only return results that are an exact match on bytes. Currently, it does not support comparisons for values that are less than or greater than the bytes we provide.

    In keeping with our Token Program example, we can amend our query to only return token accounts that are owned by our wallet address. When looking at a token account, we can see the first two fields stored on a token account are both pubkeys, and that each pubkey is 32 bytes in length. Given that owner is the second field, we should begin our memcmp at an offset of 32 bytes. From here, we\u2019ll be looking for accounts whose owner field matches our wallet address.

    Account Size

    We can invoke this query via the following example:

    ',9),Nn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(),n("span",{class:"token constant"},"TOKEN_PROGRAM_ID"),s(),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/spl-token"'),n("span",{class:"token punctuation"},";"),s(` +import{_ as i,r as l,o as r,c as m,a as n,b as a,w as t,F as b,d as s,e as o}from"./app.2fbb9e96.js";var k="/assets/account-size.398f17bf.png",d="/assets/memcmp.c5e1f050.png";const f={},h=n("h1",{id:"get-program-accounts",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#get-program-accounts","aria-hidden":"true"},"#"),s(" Get Program Accounts")],-1),g=n("p",null,[s("An RPC method that returns all accounts owned by a program. Currently pagination is not supported. Requests to "),n("code",null,"getProgramAccounts"),s(" should include the "),n("code",null,"dataSlice"),s(" and/or "),n("code",null,"filters"),s(" parameters to improve response time and return only intended results.")],-1),_=n("h2",{id:"facts",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#facts","aria-hidden":"true"},"#"),s(" Facts")],-1),y={class:"custom-container tip"},w=n("p",{class:"custom-container-title"},"Parameters",-1),A=n("li",null,[n("code",null,"programId"),s(": "),n("code",null,"string"),s(" - Pubkey of the program to query, provided as a base58 encoded string")],-1),T=s("(optional) "),C=n("code",null,"configOrCommitment",-1),S=s(": "),P=n("code",null,"object",-1),v=s(" - Configuration parameters containing the following optional fields: "),D=s("(optional) "),E=n("code",null,"commitment",-1),N=s(": "),M=n("code",null,"string",-1),R=s(" - "),B={href:"https://docs.solana.com/developing/clients/jsonrpc-api#configuring-state-commitment",target:"_blank",rel:"noopener noreferrer"},K=s("State commitment"),G=s("(optional) "),L=n("code",null,"encoding",-1),x=s(": "),z=n("code",null,"string",-1),F=s(" - Encoding for account data, either: "),H=n("code",null,"base58",-1),W=s(", "),Z=n("code",null,"base64",-1),Q=s(", or "),U=n("code",null,"jsonParsed",-1),j=s(". Note, web3js users should instead use "),V={href:"https://solana-labs.github.io/solana-web3.js/classes/Connection.html#getParsedProgramAccounts",target:"_blank",rel:"noopener noreferrer"},I=s("getParsedProgramAccounts"),O=o("
  • (optional) dataSlice: object - Limit the returned account data based on:
    • offset: number - Number of bytes into account data to begin returning
    • length: number - Number of bytes of account data to return
  • (optional) filters: array - Filter results using the following filter objects:
    • memcmp: object - Match a series of bytes to account data:
      • offset: number - Number of bytes into account data to begin comparing
      • bytes: string - Data to match, as base58 encoded string limited to 129 bytes
    • dataSize: number - Compares the account data length with the provided data size
  • ",2),Y=s("(optional) "),J=n("code",null,"withContext",-1),X=s(": "),q=n("code",null,"boolean",-1),$=s(" - Wrap the result in an "),nn={href:"https://docs.solana.com/developing/clients/jsonrpc-api#rpcresponse-structure",target:"_blank",rel:"noopener noreferrer"},sn=s("RpcResponse JSON object"),an=o('
    Response

    By default getProgramAccounts will return an array of JSON objects with the following structure:

    • pubkey: string - The account pubkey as a base58 encoded string
    • account: object - a JSON object, with the following sub fields:
      • lamports: number, number of lamports assigned to the account
      • owner: string, The base58 encoded pubkey of the program the account has been assigned to
      • data: string | object - data associated with the account, either as encoded binary data or JSON format depending on the provided encoding parameter
      • executable: boolean, Indication if the account contains a program
      • rentEpoch: number, The epoch at which this account will next owe rent
    ',3),en=n("h2",{id:"deep-dive",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#deep-dive","aria-hidden":"true"},"#"),s(" Deep Dive")],-1),tn=n("p",null,[n("code",null,"getProgramAccounts"),s(" is a versatile RPC method that returns all accounts owned by a program. We can use "),n("code",null,"getProgramAccounts"),s(" for a number of useful queries, such as finding:")],-1),cn=n("li",null,"All token accounts for a particular wallet",-1),on=s("All token accounts for a particular mint (i.e. All "),ln={href:"https://www.projectserum.com/",target:"_blank",rel:"noopener noreferrer"},pn=s("SRM"),un=s(" holders)"),rn=s("All custom accounts for a particular program (i.e. All "),mn={href:"https://mango.markets/",target:"_blank",rel:"noopener noreferrer"},bn=s("Mango"),kn=s(" users)"),dn=o("

    Despite its usefulness, getProgramAccounts is often misunderstood due to its current constraints. Many of the queries supported by getProgramAccounts require RPC nodes to scan large sets of data. These scans are both memory and resource intensive. As a result, calls that are too frequent or too large in scope can result in connection timeouts. Furthermore, at the time of this writing, the getProgramAccounts endpoint does not support pagination. If the results of a query are too large, the response will be truncated.

    To get around these current constraints, getProgramAccounts offers a number of useful parameters: namely, dataSlice and the filters options memcmp and dataSize. By providing combinations of these parameters, we can reduce the scope of our queries down to manageable and predictable sizes.

    ",2),fn=s("A common example of "),hn=n("code",null,"getProgramAccounts",-1),gn=s(" involves interacting with the "),_n={href:"https://spl.solana.com/token",target:"_blank",rel:"noopener noreferrer"},yn=s("SPL-Token Program"),wn=s(". Requesting all accounts owned by the Token Program with a "),An=s("basic call"),Tn=s(" would involve an enormous amount of data. By providing parameters, however, we can efficiently request just the data we intend to use."),Cn=o('

    filters

    The most common parameter to use with getProgramAccounts is the filters array. This array accepts two types of filters,dataSize and memcmp. Before using either of these filters, we should be familiar with how the data we are requesting is laid out and serialized.

    dataSize

    ',3),Sn=s("In the case of the Token Program, we can see that "),Pn={href:"https://github.com/solana-labs/solana-program-library/blob/08d9999f997a8bf38719679be9d572f119d0d960/token/program/src/state.rs#L86-L106",target:"_blank",rel:"noopener noreferrer"},vn=s("token accounts are 165 bytes in length"),Dn=s(". Specifically, a token account has eight different fields, with each field requiring a predictable number of bytes. We can visualize how this data is laid out using the below illustration."),En=o('

    Account Size

    If we wanted to find all token accounts owned by our wallet address, we could add { dataSize: 165 } to our filters array to narrow the scope of our query to just accounts that are exactly 165 bytes in length. This alone, however, would be insufficient. We would also need to add a filter that looks for accounts owned by our address. We can achieve this with the memcmp filter.

    memcmp

    The memcmp filter, or "memory comparison" filter, allows us to compare data at any field stored on our account. Specifically, we can query only for accounts that match a particular set of bytes at a particular position. memcmp requires two arguments:

    • offset: The position at which to begin comparing data. This position is measured in bytes and is expressed as an integer.
    • bytes: The data that should match the account's data. This is represented as a base-58 encoded string should be limited to less than 129 bytes.

    It's important to note that memcmp will only return results that are an exact match on bytes. Currently, it does not support comparisons for values that are less than or greater than the bytes we provide.

    In keeping with our Token Program example, we can amend our query to only return token accounts that are owned by our wallet address. When looking at a token account, we can see the first two fields stored on a token account are both pubkeys, and that each pubkey is 32 bytes in length. Given that owner is the second field, we should begin our memcmp at an offset of 32 bytes. From here, we\u2019ll be looking for accounts whose owner field matches our wallet address.

    Account Size

    We can invoke this query via the following example:

    ',9),Nn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(),n("span",{class:"token constant"},"TOKEN_PROGRAM_ID"),s(),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/spl-token"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" clusterApiUrl"),n("span",{class:"token punctuation"},","),s(" Connection "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` diff --git a/docs/.vuepress/dist/assets/get-program-accounts.html.61cd06d7.js b/docs/.vuepress/dist/assets/get-program-accounts.html.510b18c0.js similarity index 99% rename from docs/.vuepress/dist/assets/get-program-accounts.html.61cd06d7.js rename to docs/.vuepress/dist/assets/get-program-accounts.html.510b18c0.js index f57100feb..2f45ebdb5 100644 --- a/docs/.vuepress/dist/assets/get-program-accounts.html.61cd06d7.js +++ b/docs/.vuepress/dist/assets/get-program-accounts.html.510b18c0.js @@ -1,4 +1,4 @@ -import{_ as r,r as l,o as i,c as m,a as n,b as a,w as t,F as b,d as s,e as c}from"./app.cfdf84e7.js";var k="/assets/account-size.398f17bf.png",d="/assets/memcmp.c5e1f050.png";const f={},g=n("h1",{id:"obtenir-les-comptes-d-un-programme",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#obtenir-les-comptes-d-un-programme","aria-hidden":"true"},"#"),s(" Obtenir les comptes d'un programme")],-1),_=n("p",null,[s("Il existe une m\xE9thode RPC qui renvoie tous les comptes appartenant \xE0 un programme. Actuellement, la pagination n'est pas prise en charge. Les requ\xEAtes \xE0 "),n("code",null,"getProgramAccounts"),s(" devraient inclure les param\xE8tres "),n("code",null,"dataSlice"),s(" et/ou "),n("code",null,"filters"),s(" afin d'am\xE9liorer le temps de r\xE9ponse et retourner uniquement les r\xE9sultats voulus.")],-1),h=n("h2",{id:"faits",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#faits","aria-hidden":"true"},"#"),s(" Faits")],-1),y={class:"custom-container tip"},A=n("p",{class:"custom-container-title"},"Param\xE8tres",-1),v=n("li",null,[n("code",null,"programId"),s(": "),n("code",null,"string"),s(" - Cl\xE9 publique du programme \xE0 interroger, fournie sous forme de cha\xEEne de caract\xE8res cod\xE9e en base58")],-1),w=s("(optionnel) "),C=n("code",null,"configOrCommitment",-1),P=s(": "),S=n("code",null,"object",-1),T=s(" - Param\xE8tres de configuration contenant les champs facultatifs suivants : "),D=s("(optionnel) "),E=n("code",null,"commitment",-1),N=s(": "),x=n("code",null,"string",-1),L=s(" - "),q={href:"https://docs.solana.com/developing/clients/jsonrpc-api#configuring-state-commitment",target:"_blank",rel:"noopener noreferrer"},M=s("Engagement de l'\xC9tat (State commitment)"),R=s("(optionnel) "),K=n("code",null,"encoding",-1),G=s(": "),B=n("code",null,"string",-1),z=s(" - L'encodage des donn\xE9es du compte, peut \xEAtre: "),j=n("code",null,"base58",-1),F=s(", "),H=n("code",null,"base64",-1),Z=s(", ou "),Q=n("code",null,"jsonParsed",-1),U=s(". Remarque : les utilisateurs de web3js doivent plut\xF4t utiliser "),W={href:"https://solana-labs.github.io/solana-web3.js/classes/Connection.html#getParsedProgramAccounts",target:"_blank",rel:"noopener noreferrer"},J=s("getParsedProgramAccounts"),V=c("
  • (optionnel) dataSlice: object - Param\xE8tres permettant de limiter les donn\xE9es \xE0 renvoyer :
    • offset: number - Nombre de bytes dans les donn\xE9es du compte \xE0 partir desquels il faut commencer \xE0 retourner
    • length: number - Nombre de bytes de donn\xE9es du compte \xE0 retourner
  • (optionnel) filters: array - Param\xE8tres pour filtrer les r\xE9sultats :
    • memcmp: object - Correspondance d'une s\xE9rie de bytes avec les donn\xE9es du compte :
      • offset: number - Nombre de bytes dans les donn\xE9es du compte \xE0 partir desquels il faut commencer \xE0 comparer
      • bytes: string - Donn\xE9es \xE0 comparer, sous la forme d'une cha\xEEne de caract\xE8res cod\xE9e en base58 limit\xE9e \xE0 129 bytes
    • dataSize: number - Compare la longueur des donn\xE9es du compte avec la taille des donn\xE9es fournies
  • ",2),Y=s("(optionnel) "),O=n("code",null,"withContext",-1),X=s(": "),I=n("code",null,"boolean",-1),$=s(" - Enveloppe le r\xE9sultat dans un "),nn={href:"https://docs.solana.com/developing/clients/jsonrpc-api#rpcresponse-structure",target:"_blank",rel:"noopener noreferrer"},sn=s("objet JSON RpcResponse"),an=c('
    R\xE9ponse

    Par d\xE9faut, getProgramAccounts retournera un tableau d'objets JSON avec la structure suivante :

    • pubkey: string - La cl\xE9 publique du compte sous la forme d'une cha\xEEne de caract\xE8res encod\xE9e en base58
    • account: object - un objet JSON, avec les sous-champs suivants :
      • lamports: number, nombre de lamports allou\xE9s au compte
      • owner: string, La cl\xE9 publique du programme auquel le compte a \xE9t\xE9 attribu\xE9, encod\xE9e en base58
      • data: string | object - les donn\xE9es associ\xE9es au compte, soit sous forme de donn\xE9es binaires, soit au format JSON, conform\xE9ment au param\xE8tre d'encodage fourni
      • executable: boolean, Indique si le compte contient un programme
      • rentEpoch: number, L'\xE9poque \xE0 laquelle ce compte devra payer sa prochaine rente
    ',3),en=n("h2",{id:"examen-plus-approfondi",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#examen-plus-approfondi","aria-hidden":"true"},"#"),s(" Examen plus approfondi")],-1),tn=n("p",null,[n("code",null,"getProgramAccounts"),s(" est une m\xE9thode RPC polyvalente qui renvoie tous les comptes appartenant \xE0 un programme. Nous pouvons utiliser "),n("code",null,"getProgramAccounts"),s(" pour un certain nombre de requ\xEAtes utiles, telles que la recherche de :")],-1),on=n("li",null,"Tous les comptes de jetons pour un portefeuille en particulier",-1),cn=s("Tous les comptes de jetons pour un mint en particulier (par exemple, tous les propri\xE9taires (holders) de "),ln={href:"https://www.projectserum.com/",target:"_blank",rel:"noopener noreferrer"},pn=s("SRM"),un=s(")"),rn=s("Tous les comptes pour un programme en particulier (par exemple, tous les utilisateurs de "),mn={href:"https://mango.markets/",target:"_blank",rel:"noopener noreferrer"},bn=s("Mango"),kn=s(")"),dn=c("

    Malgr\xE9 son utilit\xE9, getProgramAccounts est souvent mal compris en raison de ses limites actuelles. La plupart des requ\xEAtes support\xE9es par getProgramAccounts n\xE9cessitent des n\u0153uds RPC pour analyser de grands ensembles de donn\xE9es. Ces analyses sont \xE0 la fois gourmandes en m\xE9moire et en ressources. Par cons\xE9quent, les appels trop fr\xE9quents ou de trop grande envergure peuvent entra\xEEner des interruptions de connexion. De plus, au moment o\xF9 nous \xE9crivons ces lignes, le point de terminaison getProgramAccounts ne prend pas en charge la pagination. Si les r\xE9sultats d'une requ\xEAte sont trop volumineux, la r\xE9ponse sera tronqu\xE9e.

    Pour contourner ces contraintes actuelles, getProgramAccounts offre un certain nombre de param\xE8tres utiles : \xE0 savoir, dataSlice et les options de filters memcmp et dataSize. En fournissant des combinaisons de ces param\xE8tres, nous pouvons r\xE9duire la port\xE9e de nos requ\xEAtes \xE0 des tailles g\xE9rables et pr\xE9visibles.

    ",2),fn=s("Un exemple courant de "),gn=n("code",null,"getProgramAccounts",-1),_n=s(" consiste \xE0 interagir avec le "),hn={href:"https://spl.solana.com/token",target:"_blank",rel:"noopener noreferrer"},yn=s("Programme de Jetons SPL"),An=s(". Demander tous les comptes d\xE9tenus par le programme de Jetons avec un "),vn=s("appel de base"),wn=s(" impliquerait une \xE9norme quantit\xE9 de donn\xE9es. Cependant, en fournissant des param\xE8tres, nous pouvons efficacement demander uniquement les donn\xE9es que nous avons l'intention d'utiliser."),Cn=c('

    filters

    Le param\xE8tre le plus commun \xE0 utiliser avec getProgramAccounts est le tableau filters. Ce tableau accepte deux types de filtres, dataSize et memcmp. Avant d'utiliser l'un de ces filtres, nous devons nous familiariser avec la mani\xE8re dont les donn\xE9es que nous demandons sont organis\xE9es et s\xE9rialis\xE9es.

    dataSize

    ',3),Pn=s("Dans le cas du Programme de Jetons, nous pouvons constater que "),Sn={href:"https://github.com/solana-labs/solana-program-library/blob/08d9999f997a8bf38719679be9d572f119d0d960/token/program/src/state.rs#L86-L106",target:"_blank",rel:"noopener noreferrer"},Tn=s("les comptes de jetons ont une taille de 165 bytes"),Dn=s(". Plus pr\xE9cis\xE9ment, un compte de jeton comporte huit champs diff\xE9rents, chaque champ ayant un nombre pr\xE9d\xE9fini de bytes. Nous pouvons visualiser comment ces donn\xE9es sont organis\xE9es \xE0 l'aide de l'illustration ci-dessous."),En=c('

    Taille des comptes

    Si nous voulions trouver tous les comptes de jetons appartenant \xE0 notre adresse de portefeuille, nous pourrions ajouter { dataSize: 165 } \xE0 notre tableau filters pour limiter notre requ\xEAte aux seuls comptes qui font exactement 165 bytes de long. Toutefois, cela ne suffirait pas. Nous devrions \xE9galement ajouter un filtre qui recherche les comptes appartenant \xE0 notre adresse. Nous pouvons r\xE9aliser cela avec le filtre memcmp.

    memcmp

    Le filtre memcmp, ou filtre "comparaison de m\xE9moire", nous permet de comparer des donn\xE9es \xE0 n'importe quel champ stock\xE9 sur notre compte. Plus pr\xE9cis\xE9ment, nous pouvons rechercher uniquement les comptes qui poss\xE8dent un certain ensemble de bytes \xE0 une position pr\xE9cise. memcmp n\xE9cessite deux arguments :

    • offset: La position \xE0 partir de laquelle il faut commencer \xE0 comparer les donn\xE9es. Cette position est mesur\xE9e en bytes et est exprim\xE9e sous la forme d'un nombre entier.
    • bytes: Les donn\xE9es qui doivent correspondre aux donn\xE9es du compte. Elles sont repr\xE9sent\xE9es sous la forme d'une cha\xEEne de caract\xE8res cod\xE9es en base 58 qui doit \xEAtre limit\xE9e \xE0 moins de 129 bytes.

    Il est important de noter que memcmp ne retournera que les r\xE9sultats qui correspondent exactement aux bytes. Actuellement, il ne supporte pas les comparaisons pour les valeurs inf\xE9rieures ou sup\xE9rieures aux bytes que nous fournissons.

    Pour rester dans notre exemple du Programme de Jetons, nous pouvons modifier notre requ\xEAte pour ne renvoyer que les comptes de jetons qui appartiennent \xE0 notre adresse de portefeuille. En examinant un compte de jetons, on constate que les deux premiers champs stock\xE9s sur un compte de jetons sont tous deux des cl\xE9s publiques, et que chaque cl\xE9 publique a une longueur de 32 octets. \xC9tant donn\xE9 que owner est le deuxi\xE8me champ, nous devrions commencer notre memcmp \xE0 un offset de 32 bytes. A partir de l\xE0, nous allons rechercher les comptes dont le champ propri\xE9taire (owner) correspond \xE0 l'adresse de notre portefeuille.

    Taille des comptes

    Nous pouvons faire appel \xE0 cette requ\xEAte via l'exemple suivant :

    ',9),Nn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(),n("span",{class:"token constant"},"TOKEN_PROGRAM_ID"),s(),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/spl-token"'),n("span",{class:"token punctuation"},";"),s(` +import{_ as r,r as l,o as i,c as m,a as n,b as a,w as t,F as b,d as s,e as c}from"./app.2fbb9e96.js";var k="/assets/account-size.398f17bf.png",d="/assets/memcmp.c5e1f050.png";const f={},g=n("h1",{id:"obtenir-les-comptes-d-un-programme",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#obtenir-les-comptes-d-un-programme","aria-hidden":"true"},"#"),s(" Obtenir les comptes d'un programme")],-1),_=n("p",null,[s("Il existe une m\xE9thode RPC qui renvoie tous les comptes appartenant \xE0 un programme. Actuellement, la pagination n'est pas prise en charge. Les requ\xEAtes \xE0 "),n("code",null,"getProgramAccounts"),s(" devraient inclure les param\xE8tres "),n("code",null,"dataSlice"),s(" et/ou "),n("code",null,"filters"),s(" afin d'am\xE9liorer le temps de r\xE9ponse et retourner uniquement les r\xE9sultats voulus.")],-1),h=n("h2",{id:"faits",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#faits","aria-hidden":"true"},"#"),s(" Faits")],-1),y={class:"custom-container tip"},A=n("p",{class:"custom-container-title"},"Param\xE8tres",-1),v=n("li",null,[n("code",null,"programId"),s(": "),n("code",null,"string"),s(" - Cl\xE9 publique du programme \xE0 interroger, fournie sous forme de cha\xEEne de caract\xE8res cod\xE9e en base58")],-1),w=s("(optionnel) "),C=n("code",null,"configOrCommitment",-1),P=s(": "),S=n("code",null,"object",-1),T=s(" - Param\xE8tres de configuration contenant les champs facultatifs suivants : "),D=s("(optionnel) "),E=n("code",null,"commitment",-1),N=s(": "),x=n("code",null,"string",-1),L=s(" - "),q={href:"https://docs.solana.com/developing/clients/jsonrpc-api#configuring-state-commitment",target:"_blank",rel:"noopener noreferrer"},M=s("Engagement de l'\xC9tat (State commitment)"),R=s("(optionnel) "),K=n("code",null,"encoding",-1),G=s(": "),B=n("code",null,"string",-1),z=s(" - L'encodage des donn\xE9es du compte, peut \xEAtre: "),j=n("code",null,"base58",-1),F=s(", "),H=n("code",null,"base64",-1),Z=s(", ou "),Q=n("code",null,"jsonParsed",-1),U=s(". Remarque : les utilisateurs de web3js doivent plut\xF4t utiliser "),W={href:"https://solana-labs.github.io/solana-web3.js/classes/Connection.html#getParsedProgramAccounts",target:"_blank",rel:"noopener noreferrer"},J=s("getParsedProgramAccounts"),V=c("
  • (optionnel) dataSlice: object - Param\xE8tres permettant de limiter les donn\xE9es \xE0 renvoyer :
    • offset: number - Nombre de bytes dans les donn\xE9es du compte \xE0 partir desquels il faut commencer \xE0 retourner
    • length: number - Nombre de bytes de donn\xE9es du compte \xE0 retourner
  • (optionnel) filters: array - Param\xE8tres pour filtrer les r\xE9sultats :
    • memcmp: object - Correspondance d'une s\xE9rie de bytes avec les donn\xE9es du compte :
      • offset: number - Nombre de bytes dans les donn\xE9es du compte \xE0 partir desquels il faut commencer \xE0 comparer
      • bytes: string - Donn\xE9es \xE0 comparer, sous la forme d'une cha\xEEne de caract\xE8res cod\xE9e en base58 limit\xE9e \xE0 129 bytes
    • dataSize: number - Compare la longueur des donn\xE9es du compte avec la taille des donn\xE9es fournies
  • ",2),Y=s("(optionnel) "),O=n("code",null,"withContext",-1),X=s(": "),I=n("code",null,"boolean",-1),$=s(" - Enveloppe le r\xE9sultat dans un "),nn={href:"https://docs.solana.com/developing/clients/jsonrpc-api#rpcresponse-structure",target:"_blank",rel:"noopener noreferrer"},sn=s("objet JSON RpcResponse"),an=c('
    R\xE9ponse

    Par d\xE9faut, getProgramAccounts retournera un tableau d'objets JSON avec la structure suivante :

    • pubkey: string - La cl\xE9 publique du compte sous la forme d'une cha\xEEne de caract\xE8res encod\xE9e en base58
    • account: object - un objet JSON, avec les sous-champs suivants :
      • lamports: number, nombre de lamports allou\xE9s au compte
      • owner: string, La cl\xE9 publique du programme auquel le compte a \xE9t\xE9 attribu\xE9, encod\xE9e en base58
      • data: string | object - les donn\xE9es associ\xE9es au compte, soit sous forme de donn\xE9es binaires, soit au format JSON, conform\xE9ment au param\xE8tre d'encodage fourni
      • executable: boolean, Indique si le compte contient un programme
      • rentEpoch: number, L'\xE9poque \xE0 laquelle ce compte devra payer sa prochaine rente
    ',3),en=n("h2",{id:"examen-plus-approfondi",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#examen-plus-approfondi","aria-hidden":"true"},"#"),s(" Examen plus approfondi")],-1),tn=n("p",null,[n("code",null,"getProgramAccounts"),s(" est une m\xE9thode RPC polyvalente qui renvoie tous les comptes appartenant \xE0 un programme. Nous pouvons utiliser "),n("code",null,"getProgramAccounts"),s(" pour un certain nombre de requ\xEAtes utiles, telles que la recherche de :")],-1),on=n("li",null,"Tous les comptes de jetons pour un portefeuille en particulier",-1),cn=s("Tous les comptes de jetons pour un mint en particulier (par exemple, tous les propri\xE9taires (holders) de "),ln={href:"https://www.projectserum.com/",target:"_blank",rel:"noopener noreferrer"},pn=s("SRM"),un=s(")"),rn=s("Tous les comptes pour un programme en particulier (par exemple, tous les utilisateurs de "),mn={href:"https://mango.markets/",target:"_blank",rel:"noopener noreferrer"},bn=s("Mango"),kn=s(")"),dn=c("

    Malgr\xE9 son utilit\xE9, getProgramAccounts est souvent mal compris en raison de ses limites actuelles. La plupart des requ\xEAtes support\xE9es par getProgramAccounts n\xE9cessitent des n\u0153uds RPC pour analyser de grands ensembles de donn\xE9es. Ces analyses sont \xE0 la fois gourmandes en m\xE9moire et en ressources. Par cons\xE9quent, les appels trop fr\xE9quents ou de trop grande envergure peuvent entra\xEEner des interruptions de connexion. De plus, au moment o\xF9 nous \xE9crivons ces lignes, le point de terminaison getProgramAccounts ne prend pas en charge la pagination. Si les r\xE9sultats d'une requ\xEAte sont trop volumineux, la r\xE9ponse sera tronqu\xE9e.

    Pour contourner ces contraintes actuelles, getProgramAccounts offre un certain nombre de param\xE8tres utiles : \xE0 savoir, dataSlice et les options de filters memcmp et dataSize. En fournissant des combinaisons de ces param\xE8tres, nous pouvons r\xE9duire la port\xE9e de nos requ\xEAtes \xE0 des tailles g\xE9rables et pr\xE9visibles.

    ",2),fn=s("Un exemple courant de "),gn=n("code",null,"getProgramAccounts",-1),_n=s(" consiste \xE0 interagir avec le "),hn={href:"https://spl.solana.com/token",target:"_blank",rel:"noopener noreferrer"},yn=s("Programme de Jetons SPL"),An=s(". Demander tous les comptes d\xE9tenus par le programme de Jetons avec un "),vn=s("appel de base"),wn=s(" impliquerait une \xE9norme quantit\xE9 de donn\xE9es. Cependant, en fournissant des param\xE8tres, nous pouvons efficacement demander uniquement les donn\xE9es que nous avons l'intention d'utiliser."),Cn=c('

    filters

    Le param\xE8tre le plus commun \xE0 utiliser avec getProgramAccounts est le tableau filters. Ce tableau accepte deux types de filtres, dataSize et memcmp. Avant d'utiliser l'un de ces filtres, nous devons nous familiariser avec la mani\xE8re dont les donn\xE9es que nous demandons sont organis\xE9es et s\xE9rialis\xE9es.

    dataSize

    ',3),Pn=s("Dans le cas du Programme de Jetons, nous pouvons constater que "),Sn={href:"https://github.com/solana-labs/solana-program-library/blob/08d9999f997a8bf38719679be9d572f119d0d960/token/program/src/state.rs#L86-L106",target:"_blank",rel:"noopener noreferrer"},Tn=s("les comptes de jetons ont une taille de 165 bytes"),Dn=s(". Plus pr\xE9cis\xE9ment, un compte de jeton comporte huit champs diff\xE9rents, chaque champ ayant un nombre pr\xE9d\xE9fini de bytes. Nous pouvons visualiser comment ces donn\xE9es sont organis\xE9es \xE0 l'aide de l'illustration ci-dessous."),En=c('

    Taille des comptes

    Si nous voulions trouver tous les comptes de jetons appartenant \xE0 notre adresse de portefeuille, nous pourrions ajouter { dataSize: 165 } \xE0 notre tableau filters pour limiter notre requ\xEAte aux seuls comptes qui font exactement 165 bytes de long. Toutefois, cela ne suffirait pas. Nous devrions \xE9galement ajouter un filtre qui recherche les comptes appartenant \xE0 notre adresse. Nous pouvons r\xE9aliser cela avec le filtre memcmp.

    memcmp

    Le filtre memcmp, ou filtre "comparaison de m\xE9moire", nous permet de comparer des donn\xE9es \xE0 n'importe quel champ stock\xE9 sur notre compte. Plus pr\xE9cis\xE9ment, nous pouvons rechercher uniquement les comptes qui poss\xE8dent un certain ensemble de bytes \xE0 une position pr\xE9cise. memcmp n\xE9cessite deux arguments :

    • offset: La position \xE0 partir de laquelle il faut commencer \xE0 comparer les donn\xE9es. Cette position est mesur\xE9e en bytes et est exprim\xE9e sous la forme d'un nombre entier.
    • bytes: Les donn\xE9es qui doivent correspondre aux donn\xE9es du compte. Elles sont repr\xE9sent\xE9es sous la forme d'une cha\xEEne de caract\xE8res cod\xE9es en base 58 qui doit \xEAtre limit\xE9e \xE0 moins de 129 bytes.

    Il est important de noter que memcmp ne retournera que les r\xE9sultats qui correspondent exactement aux bytes. Actuellement, il ne supporte pas les comparaisons pour les valeurs inf\xE9rieures ou sup\xE9rieures aux bytes que nous fournissons.

    Pour rester dans notre exemple du Programme de Jetons, nous pouvons modifier notre requ\xEAte pour ne renvoyer que les comptes de jetons qui appartiennent \xE0 notre adresse de portefeuille. En examinant un compte de jetons, on constate que les deux premiers champs stock\xE9s sur un compte de jetons sont tous deux des cl\xE9s publiques, et que chaque cl\xE9 publique a une longueur de 32 octets. \xC9tant donn\xE9 que owner est le deuxi\xE8me champ, nous devrions commencer notre memcmp \xE0 un offset de 32 bytes. A partir de l\xE0, nous allons rechercher les comptes dont le champ propri\xE9taire (owner) correspond \xE0 l'adresse de notre portefeuille.

    Taille des comptes

    Nous pouvons faire appel \xE0 cette requ\xEAte via l'exemple suivant :

    ',9),Nn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(),n("span",{class:"token constant"},"TOKEN_PROGRAM_ID"),s(),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/spl-token"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" clusterApiUrl"),n("span",{class:"token punctuation"},","),s(" Connection "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` diff --git a/docs/.vuepress/dist/assets/get-program-accounts.html.9564cc92.js b/docs/.vuepress/dist/assets/get-program-accounts.html.98cfd9d7.js similarity index 99% rename from docs/.vuepress/dist/assets/get-program-accounts.html.9564cc92.js rename to docs/.vuepress/dist/assets/get-program-accounts.html.98cfd9d7.js index 75beea98b..a51fb69e0 100644 --- a/docs/.vuepress/dist/assets/get-program-accounts.html.9564cc92.js +++ b/docs/.vuepress/dist/assets/get-program-accounts.html.98cfd9d7.js @@ -1,4 +1,4 @@ -import{_ as i,r as l,o as r,c as m,a as n,b as a,w as t,F as k,d as s,e as o}from"./app.cfdf84e7.js";var b="/assets/account-size.398f17bf.png",d="/assets/memcmp.c5e1f050.png";const f={},_=n("h1",{id:"get-program-accounts",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#get-program-accounts","aria-hidden":"true"},"#"),s(" Get Program Accounts")],-1),g=n("p",null,[s("\u0E19\u0E35\u0E48\u0E15\u0E37\u0E2D RPC method \u0E17\u0E35\u0E48\u0E08\u0E30\u0E04\u0E37\u0E19\u0E04\u0E48\u0E32 accounts \u0E17\u0E35\u0E48 program \u0E40\u0E1B\u0E47\u0E19\u0E40\u0E08\u0E49\u0E32\u0E02\u0E2D\u0E07. \u0E43\u0E19\u0E15\u0E2D\u0E19\u0E19\u0E35\u0E49\u0E22\u0E31\u0E07\u0E44\u0E21\u0E48\u0E2A\u0E19\u0E31\u0E1A\u0E2A\u0E19\u0E38\u0E19 pagination. \u0E01\u0E32\u0E23 requests \u0E44\u0E1B\u0E17\u0E35\u0E48 "),n("code",null,"getProgramAccounts"),s(" \u0E08\u0E30\u0E15\u0E49\u0E2D\u0E07\u0E2A\u0E48\u0E07 parameters "),n("code",null,"dataSlice"),s(" \u0E41\u0E25\u0E30/\u0E2B\u0E23\u0E37\u0E2D "),n("code",null,"filters"),s(" \u0E44\u0E1B\u0E14\u0E49\u0E27\u0E22\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E25\u0E14 response time \u0E41\u0E25\u0E30\u0E08\u0E30\u0E44\u0E14\u0E49\u0E2A\u0E48\u0E07\u0E01\u0E25\u0E31\u0E1A\u0E21\u0E32\u0E40\u0E09\u0E1E\u0E32\u0E30\u0E1C\u0E25\u0E25\u0E31\u0E1E\u0E17\u0E4C\u0E17\u0E35\u0E48\u0E15\u0E49\u0E2D\u0E07\u0E01\u0E32\u0E23.")],-1),h=n("h2",{id:"\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49","aria-hidden":"true"},"#"),s(" \u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49")],-1),y={class:"custom-container tip"},A=n("p",{class:"custom-container-title"},"Parameters",-1),w=n("li",null,[n("code",null,"programId"),s(": "),n("code",null,"string"),s(" - Pubkey \u0E02\u0E2D\u0E07 program \u0E17\u0E35\u0E48\u0E08\u0E30 query, \u0E40\u0E15\u0E23\u0E35\u0E22\u0E21\u0E43\u0E19\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A base58 encoded string")],-1),C=s("(optional) "),S=n("code",null,"configOrCommitment",-1),P=s(": "),T=n("code",null,"object",-1),D=s(" - Configuration parameters \u0E17\u0E35\u0E48\u0E21\u0E35 optional fields \u0E15\u0E32\u0E21\u0E19\u0E35\u0E49: "),E=s("(optional) "),N=n("code",null,"commitment",-1),v=s(": "),M=n("code",null,"string",-1),R=s(" - "),K={href:"https://docs.solana.com/developing/clients/jsonrpc-api#configuring-state-commitment",target:"_blank",rel:"noopener noreferrer"},G=s("State commitment"),L=s("(optional) "),B=n("code",null,"encoding",-1),z=s(": "),x=n("code",null,"string",-1),F=s(" - Encoding \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A account data, \u0E17\u0E31\u0E49\u0E07: "),H=n("code",null,"base58",-1),Z=s(", "),Q=n("code",null,"base64",-1),U=s(", \u0E2B\u0E23\u0E37\u0E2D "),W=n("code",null,"jsonParsed",-1),j=s(". Note, web3js \u0E15\u0E49\u0E2D\u0E07\u0E43\u0E0A\u0E49 "),V={href:"https://solana-labs.github.io/solana-web3.js/classes/Connection.html#getParsedProgramAccounts",target:"_blank",rel:"noopener noreferrer"},Y=s("getParsedProgramAccounts"),J=s(" \u0E41\u0E17\u0E19"),X=o("
  • (optional) dataSlice: object - \u0E08\u0E33\u0E01\u0E31\u0E14\u0E1C\u0E25\u0E25\u0E31\u0E1E\u0E17\u0E4C account data \u0E42\u0E14\u0E22\u0E02\u0E36\u0E49\u0E19\u0E2D\u0E22\u0E39\u0E48\u0E01\u0E31\u0E1A:
    • offset: number - \u0E08\u0E33\u0E19\u0E27\u0E19\u0E02\u0E2D\u0E07 bytes \u0E40\u0E23\u0E34\u0E48\u0E21\u0E15\u0E49\u0E19\u0E02\u0E2D\u0E07 account data \u0E17\u0E35\u0E48\u0E08\u0E30\u0E40\u0E23\u0E34\u0E48\u0E21\u0E04\u0E37\u0E19\u0E04\u0E48\u0E32\u0E21\u0E32
    • length: number - \u0E08\u0E33\u0E19\u0E27\u0E19\u0E02\u0E2D\u0E07 bytes \u0E02\u0E2D\u0E07 account data \u0E17\u0E35\u0E48\u0E08\u0E30\u0E2A\u0E48\u0E07\u0E01\u0E25\u0E31\u0E1A\u0E21\u0E32
  • (optional) filters: array - \u0E04\u0E31\u0E14\u0E01\u0E23\u0E2D\u0E07 results \u0E42\u0E14\u0E22\u0E43\u0E0A\u0E49 filter objects \u0E02\u0E49\u0E32\u0E07\u0E25\u0E48\u0E32\u0E07:
    • memcmp: object - \u0E15\u0E23\u0E07\u0E01\u0E31\u0E1A series \u0E02\u0E2D\u0E07 bytes \u0E02\u0E2D\u0E07 account data:
      • offset: number - \u0E08\u0E33\u0E19\u0E27\u0E19\u0E02\u0E2D\u0E07 bytes \u0E40\u0E23\u0E34\u0E48\u0E21\u0E15\u0E49\u0E19\u0E02\u0E2D\u0E07 account data \u0E17\u0E35\u0E48\u0E08\u0E30\u0E40\u0E17\u0E35\u0E22\u0E1A
      • bytes: string - Data \u0E17\u0E35\u0E48\u0E08\u0E30\u0E40\u0E17\u0E35\u0E22\u0E1A\u0E14\u0E49\u0E27\u0E22, \u0E43\u0E19\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A base58 encoded string \u0E08\u0E33\u0E01\u0E31\u0E14\u0E17\u0E35\u0E48 129 bytes
    • dataSize: number - \u0E40\u0E17\u0E35\u0E22\u0E1A account data length \u0E14\u0E49\u0E27\u0E22 data size \u0E17\u0E35\u0E48\u0E23\u0E30\u0E1A\u0E38\u0E44\u0E27\u0E49
  • ",2),O=s("(optional) "),I=n("code",null,"withContext",-1),q=s(": "),$=n("code",null,"boolean",-1),nn=s(" - \u0E04\u0E23\u0E2D\u0E1A (wrap)\u200B \u0E1C\u0E25\u0E25\u0E31\u0E1E\u0E17\u0E4C\u0E43\u0E19\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A "),sn={href:"https://docs.solana.com/developing/clients/jsonrpc-api#rpcresponse-structure",target:"_blank",rel:"noopener noreferrer"},an=s("RpcResponse JSON object"),en=o('
    Response

    \u0E15\u0E32\u0E21\u0E1B\u0E01\u0E15\u0E34\u0E41\u0E25\u0E49\u0E27 getProgramAccounts \u0E08\u0E30\u0E04\u0E37\u0E19\u0E04\u0E48\u0E32 array \u0E02\u0E2D\u0E07 JSON objects \u0E17\u0E35\u0E48\u0E21\u0E35\u0E42\u0E04\u0E23\u0E07\u0E2A\u0E23\u0E49\u0E32\u0E07\u0E15\u0E32\u0E21\u0E19\u0E35\u0E49:

    • pubkey: string - account pubkey \u0E43\u0E19\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E02\u0E2D\u0E07 base58 encoded string
    • account: object - JSON object \u0E17\u0E35\u0E48\u0E21\u0E35 fields:
      • lamports: number, \u0E15\u0E31\u0E27\u0E40\u0E25\u0E02\u0E02\u0E2D\u0E07 lamports \u0E17\u0E35\u0E48\u0E21\u0E35\u0E43\u0E19 account
      • owner: string, base58 encoded pubkey \u0E02\u0E2D\u0E07 program \u0E17\u0E35\u0E48 account \u0E44\u0E14\u0E49 assigned \u0E44\u0E27\u0E49
      • data: string | object - data \u0E17\u0E35\u0E48\u0E40\u0E01\u0E35\u0E48\u0E22\u0E27\u0E02\u0E49\u0E2D\u0E07\u0E01\u0E31\u0E1A account \u0E2D\u0E32\u0E08\u0E08\u0E30\u0E40\u0E1B\u0E47\u0E19\u0E44\u0E14\u0E49\u0E17\u0E31\u0E49\u0E07 encoded binary data \u0E2B\u0E23\u0E37\u0E2D JSON format \u0E02\u0E36\u0E49\u0E19\u0E2D\u0E22\u0E39\u0E48\u0E01\u0E31\u0E1A encoding parameter
      • executable: boolean, \u0E15\u0E31\u0E27\u0E1A\u0E48\u0E07\u0E0A\u0E35\u0E49\u0E27\u0E48\u0E32 account \u0E19\u0E35\u0E49\u0E21\u0E35 program
      • rentEpoch: number, epoch \u0E17\u0E35\u0E48 account \u0E19\u0E35\u0E49\u0E08\u0E30\u0E15\u0E49\u0E2D\u0E07\u0E08\u0E48\u0E32\u0E22 rent
    ',3),tn=n("h2",{id:"\u0E25\u0E07\u0E25\u0E36\u0E01",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E25\u0E07\u0E25\u0E36\u0E01","aria-hidden":"true"},"#"),s(" \u0E25\u0E07\u0E25\u0E36\u0E01")],-1),cn=n("p",null,[n("code",null,"getProgramAccounts"),s(" \u0E04\u0E37\u0E2D RPC method \u0E17\u0E35\u0E48\u0E08\u0E30\u0E04\u0E37\u0E19\u0E04\u0E48\u0E32\u0E17\u0E38\u0E01 accounts \u0E17\u0E35\u0E48 program \u0E40\u0E1B\u0E47\u0E19\u0E40\u0E08\u0E49\u0E32\u0E02\u0E2D\u0E07. \u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E43\u0E0A\u0E49 "),n("code",null,"getProgramAccounts"),s(" \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E14\u0E49\u0E2B\u0E25\u0E32\u0E22\u0E41\u0E1A\u0E1A \u0E40\u0E0A\u0E48\u0E19:")],-1),on=n("li",null,"\u0E2B\u0E32\u0E17\u0E38\u0E01\u0E46 token accounts \u0E02\u0E2D\u0E07 wallet",-1),ln=s("\u0E2B\u0E32\u0E17\u0E38\u0E01\u0E46 token accounts \u0E17\u0E35\u0E48\u0E21\u0E35 mint \u0E40\u0E14\u0E35\u0E22\u0E27\u0E01\u0E31\u0E19(\u0E40\u0E0A\u0E48\u0E19 \u0E17\u0E38\u0E01\u0E46 \u0E04\u0E19\u0E17\u0E35\u0E48\u0E16\u0E37\u0E2D token "),pn={href:"https://www.projectserum.com/",target:"_blank",rel:"noopener noreferrer"},un=s("SRM"),rn=s(" \u0E44\u0E27\u0E49)"),mn=s("\u0E2B\u0E32\u0E17\u0E38\u0E01\u0E46 custom accounts \u0E17\u0E35\u0E48\u0E43\u0E0A\u0E49 program \u0E19\u0E35\u0E49(\u0E40\u0E0A\u0E48\u0E19 \u0E17\u0E38\u0E01\u0E46 \u0E04\u0E19\u0E17\u0E35\u0E48\u0E43\u0E0A\u0E49 "),kn={href:"https://mango.markets/",target:"_blank",rel:"noopener noreferrer"},bn=s("Mango"),dn=s(")"),fn=o("

    \u0E19\u0E2D\u0E01\u0E08\u0E32\u0E01\u0E08\u0E30\u0E21\u0E35\u0E1B\u0E23\u0E30\u0E42\u0E22\u0E0A\u0E19\u0E4C\u0E41\u0E25\u0E49\u0E27, getProgramAccounts \u0E22\u0E31\u0E07\u0E16\u0E39\u0E01\u0E40\u0E02\u0E49\u0E32\u0E43\u0E08\u0E1C\u0E34\u0E14\u0E2D\u0E22\u0E39\u0E48\u0E1A\u0E49\u0E32\u0E07 \u0E40\u0E1E\u0E23\u0E32\u0E30\u0E14\u0E49\u0E27\u0E22\u0E02\u0E49\u0E2D\u0E08\u0E33\u0E01\u0E31\u0E14\u0E02\u0E2D\u0E07\u0E21\u0E31\u0E19 \u0E01\u0E32\u0E23\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E17\u0E35\u0E48\u0E43\u0E0A\u0E49 getProgramAccounts \u0E08\u0E30\u0E17\u0E33\u0E43\u0E2B\u0E49 RPC nodes \u0E04\u0E49\u0E19\u0E2B\u0E32 data \u0E02\u0E19\u0E32\u0E14\u0E43\u0E2B\u0E0D\u0E48. \u0E01\u0E32\u0E23\u0E04\u0E49\u0E19\u0E2B\u0E32\u0E19\u0E31\u0E49\u0E19\u0E01\u0E34\u0E19\u0E17\u0E31\u0E49\u0E07 memory \u0E41\u0E25\u0E30 resource \u0E21\u0E32\u0E01\u0E46. \u0E1C\u0E25\u0E17\u0E35\u0E48\u0E40\u0E01\u0E34\u0E14\u0E02\u0E36\u0E49\u0E19\u0E04\u0E37\u0E2D\u0E16\u0E49\u0E32\u0E40\u0E23\u0E35\u0E22\u0E01\u0E43\u0E0A\u0E49\u0E1A\u0E48\u0E2D\u0E22\u0E40\u0E01\u0E34\u0E19\u0E44\u0E1B \u0E2B\u0E23\u0E37\u0E2D\u0E43\u0E2B\u0E0D\u0E48\u0E40\u0E01\u0E34\u0E19\u0E44\u0E1B\u0E08\u0E30\u0E17\u0E33\u0E43\u0E2B\u0E49\u0E40\u0E01\u0E34\u0E14 connection timeouts \u0E44\u0E14\u0E49. \u0E43\u0E19\u0E15\u0E2D\u0E19\u0E19\u0E35\u0E49 getProgramAccounts endpoint \u0E22\u0E31\u0E07\u0E44\u0E21\u0E48\u0E2A\u0E19\u0E31\u0E1A\u0E2A\u0E19\u0E38\u0E19 pagination. \u0E16\u0E49\u0E32\u0E1C\u0E25\u0E01\u0E32\u0E23\u0E04\u0E49\u0E19\u0E2B\u0E32\u0E43\u0E2B\u0E0D\u0E48\u0E40\u0E01\u0E34\u0E19\u0E44\u0E1B\u0E1C\u0E25\u0E25\u0E31\u0E1E\u0E17\u0E4C\u0E08\u0E30\u0E16\u0E39\u0E01\u0E15\u0E31\u0E14\u0E17\u0E34\u0E49\u0E07.

    \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E2B\u0E25\u0E35\u0E01\u0E2B\u0E19\u0E35\u0E02\u0E49\u0E2D\u0E08\u0E33\u0E01\u0E31\u0E14\u0E19\u0E35\u0E49, getProgramAccounts \u0E40\u0E25\u0E22\u0E21\u0E35 parameters \u0E43\u0E2B\u0E49\u0E43\u0E0A\u0E49: \u0E0A\u0E37\u0E48\u0E2D, dataSlice \u0E41\u0E25\u0E30 filters options memcmp \u0E41\u0E25\u0E30 dataSize. \u0E16\u0E49\u0E32\u0E43\u0E0A\u0E49 parameters \u0E40\u0E2B\u0E25\u0E48\u0E32\u0E19\u0E35\u0E49, \u0E40\u0E23\u0E32\u0E08\u0E30\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E25\u0E14\u0E02\u0E2D\u0E1A\u0E40\u0E02\u0E15\u0E02\u0E2D\u0E07\u0E01\u0E32\u0E23\u0E04\u0E49\u0E19\u0E2B\u0E32\u0E43\u0E2B\u0E49\u0E41\u0E04\u0E1A\u0E25\u0E07\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E04\u0E27\u0E1A\u0E04\u0E38\u0E21 \u0E41\u0E25\u0E30\u0E1B\u0E23\u0E30\u0E21\u0E32\u0E13\u0E02\u0E19\u0E32\u0E14\u0E02\u0E2D\u0E07\u0E1C\u0E25\u0E25\u0E31\u0E1E\u0E17\u0E4C\u0E44\u0E14\u0E49.

    ",2),_n=s("\u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E17\u0E31\u0E48\u0E27\u0E44\u0E1B\u0E02\u0E2D\u0E07 "),gn=n("code",null,"getProgramAccounts",-1),hn=s(" \u0E17\u0E35\u0E48\u0E40\u0E01\u0E35\u0E48\u0E22\u0E27\u0E02\u0E49\u0E2D\u0E07\u0E01\u0E31\u0E1A "),yn={href:"https://spl.solana.com/token",target:"_blank",rel:"noopener noreferrer"},An=s("SPL-Token Program"),wn=s(" \u0E40\u0E0A\u0E48\u0E19 \u0E01\u0E32\u0E23\u0E04\u0E49\u0E19\u0E2B\u0E32\u0E17\u0E38\u0E01\u0E46 accounts \u0E17\u0E35\u0E48 Token Program \u0E40\u0E1B\u0E47\u0E19\u0E40\u0E08\u0E49\u0E32\u0E02\u0E2D\u0E07\u0E42\u0E14\u0E22\u0E43\u0E0A\u0E49 "),Cn=s("\u0E01\u0E32\u0E23\u0E04\u0E49\u0E19\u0E2B\u0E32\u0E41\u0E1A\u0E1A\u0E1B\u0E01\u0E15\u0E34"),Sn=s(" \u0E08\u0E30\u0E17\u0E33\u0E43\u0E2B\u0E49\u0E15\u0E49\u0E2D\u0E07\u0E44\u0E1B\u0E04\u0E49\u0E19\u0E2B\u0E32\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E21\u0E32\u0E01\u0E21\u0E32\u0E22 \u0E41\u0E15\u0E48\u0E16\u0E49\u0E32\u0E40\u0E23\u0E32\u0E43\u0E2A\u0E48 parameters \u0E40\u0E02\u0E49\u0E32\u0E44\u0E1B\u0E14\u0E49\u0E27\u0E22\u0E40\u0E23\u0E32\u0E08\u0E30\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 request \u0E44\u0E14\u0E49\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E1B\u0E23\u0E30\u0E2A\u0E34\u0E17\u0E18\u0E34\u0E20\u0E32\u0E1E \u0E41\u0E25\u0E30\u0E44\u0E14\u0E49 data \u0E40\u0E09\u0E1E\u0E32\u0E30\u0E17\u0E35\u0E48\u0E40\u0E23\u0E32\u0E08\u0E30\u0E43\u0E0A\u0E49."),Pn=o('

    filters

    parameter \u0E17\u0E35\u0E48\u0E43\u0E0A\u0E49\u0E1A\u0E48\u0E2D\u0E22\u0E46 \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A getProgramAccounts \u0E04\u0E37\u0E2D filters array. \u0E0B\u0E36\u0E48\u0E07 array \u0E19\u0E35\u0E49\u0E08\u0E30\u0E23\u0E31\u0E1A filters 2 \u0E41\u0E1A\u0E1A\u0E04\u0E37\u0E2D dataSize \u0E41\u0E25\u0E30 memcmp \u0E01\u0E48\u0E2D\u0E19\u0E17\u0E35\u0E48\u0E08\u0E30\u0E43\u0E0A\u0E49 filters \u0E19\u0E35\u0E49\u0E40\u0E23\u0E32\u0E15\u0E49\u0E2D\u0E07\u0E23\u0E39\u0E49\u0E01\u0E48\u0E2D\u0E19\u0E27\u0E48\u0E32 data \u0E17\u0E35\u0E48\u0E40\u0E23\u0E32\u0E08\u0E30\u0E23\u0E49\u0E2D\u0E07\u0E02\u0E2D\u0E21\u0E35\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E22\u0E31\u0E07\u0E44\u0E07 \u0E41\u0E25\u0E30\u0E08\u0E31\u0E14\u0E40\u0E23\u0E35\u0E22\u0E07\u0E44\u0E27\u0E49\u0E22\u0E31\u0E07\u0E44\u0E07.

    dataSize

    ',3),Tn=s("\u0E43\u0E19\u0E01\u0E23\u0E13\u0E35\u0E02\u0E2D\u0E07 Token Program, \u0E40\u0E23\u0E32\u0E08\u0E30\u0E40\u0E2B\u0E47\u0E19\u0E27\u0E48\u0E32 "),Dn={href:"https://github.com/solana-labs/solana-program-library/blob/08d9999f997a8bf38719679be9d572f119d0d960/token/program/src/state.rs#L86-L106",target:"_blank",rel:"noopener noreferrer"},En=s("token accounts \u0E21\u0E35\u0E02\u0E19\u0E32\u0E14 165 bytes"),Nn=s(". \u0E41\u0E25\u0E30 token account \u0E08\u0E30\u0E21\u0E35 8 fields \u0E17\u0E35\u0E48\u0E41\u0E15\u0E01\u0E15\u0E48\u0E32\u0E07\u0E01\u0E31\u0E19\u0E42\u0E14\u0E22\u0E41\u0E15\u0E48\u0E25\u0E30 field \u0E08\u0E30\u0E21\u0E35\u0E02\u0E19\u0E32\u0E14 bytes \u0E17\u0E35\u0E48\u0E41\u0E19\u0E48\u0E19\u0E2D\u0E19 \u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E41\u0E2A\u0E14\u0E07 visualize \u0E27\u0E48\u0E32 data \u0E21\u0E35\u0E01\u0E32\u0E23\u0E27\u0E32\u0E07\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E22\u0E31\u0E07\u0E44\u0E07\u0E42\u0E14\u0E22\u0E43\u0E0A\u0E49\u0E23\u0E39\u0E1B\u0E14\u0E49\u0E32\u0E19\u0E25\u0E48\u0E32\u0E07."),vn=o('

    Account Size

    \u0E16\u0E49\u0E32\u0E40\u0E23\u0E32\u0E15\u0E49\u0E2D\u0E07\u0E01\u0E32\u0E23\u0E2B\u0E32\u0E17\u0E38\u0E01\u0E46 token accounts \u0E42\u0E14\u0E22\u0E21\u0E35 wallet address \u0E02\u0E2D\u0E07\u0E40\u0E23\u0E32\u0E40\u0E1B\u0E47\u0E19\u0E40\u0E08\u0E49\u0E32\u0E02\u0E2D\u0E07, \u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E43\u0E2A\u0E48 { dataSize: 165 } \u0E43\u0E19 filters \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E25\u0E14\u0E02\u0E2D\u0E1A\u0E40\u0E02\u0E15\u0E01\u0E32\u0E23\u0E04\u0E49\u0E19\u0E2B\u0E32\u0E02\u0E2D\u0E07\u0E40\u0E23\u0E32\u0E43\u0E2B\u0E49\u0E40\u0E2B\u0E25\u0E37\u0E2D\u0E40\u0E09\u0E1E\u0E32\u0E30 accounts \u0E17\u0E35\u0E48\u0E02\u0E19\u0E32\u0E14 165 bytes \u0E40\u0E17\u0E48\u0E32\u0E19\u0E31\u0E49\u0E19 \u0E41\u0E15\u0E48\u0E40\u0E17\u0E48\u0E32\u0E19\u0E35\u0E49\u0E01\u0E47\u0E22\u0E31\u0E07\u0E44\u0E21\u0E48\u0E14\u0E35\u0E1E\u0E2D \u0E40\u0E23\u0E32\u0E15\u0E49\u0E2D\u0E07\u0E15\u0E49\u0E2D\u0E07\u0E43\u0E2A\u0E48 filter \u0E40\u0E02\u0E49\u0E32\u0E44\u0E1B\u0E14\u0E49\u0E27\u0E22\u0E27\u0E48\u0E32\u0E40\u0E23\u0E32\u0E40\u0E1B\u0E47\u0E19\u0E40\u0E08\u0E49\u0E32\u0E02\u0E2D\u0E07 (owner) \u0E21\u0E31\u0E19\u0E14\u0E49\u0E27\u0E22 \u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E17\u0E33\u0E44\u0E14\u0E49\u0E14\u0E49\u0E27\u0E22\u0E01\u0E32\u0E23\u0E40\u0E1E\u0E34\u0E48\u0E21 memcmp filter \u0E40\u0E02\u0E49\u0E32\u0E44\u0E1B.

    memcmp

    memcmp filter \u0E2B\u0E23\u0E37\u0E2D "memory comparison" filter, \u0E08\u0E30\u0E17\u0E33\u0E43\u0E2B\u0E49\u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E40\u0E1B\u0E23\u0E35\u0E22\u0E1A\u0E40\u0E17\u0E35\u0E22\u0E1A data \u0E43\u0E19 field \u0E44\u0E2B\u0E19\u0E01\u0E47\u0E44\u0E14\u0E49\u0E17\u0E35\u0E48\u0E40\u0E01\u0E47\u0E1A\u0E2D\u0E22\u0E39\u0E48\u0E43\u0E19\u200B account \u0E02\u0E2D\u0E07\u0E40\u0E23\u0E32. \u0E42\u0E14\u0E22\u0E40\u0E09\u0E1E\u0E32\u0E30\u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E04\u0E49\u0E19\u0E2B\u0E32\u0E40\u0E09\u0E1E\u0E32\u0E30 accounts \u0E17\u0E35\u0E48\u0E15\u0E23\u0E07\u0E01\u0E31\u0E1A bytes \u0E17\u0E35\u0E48\u0E15\u0E33\u0E41\u0E2B\u0E19\u0E48\u0E07\u0E43\u0E14\u0E46. memcmp \u0E15\u0E49\u0E2D\u0E07\u0E01\u0E32\u0E23 2 arguments:

    • offset: \u0E15\u0E33\u0E41\u0E2B\u0E19\u0E48\u0E07\u0E17\u0E35\u0E48\u0E08\u0E30\u0E40\u0E23\u0E34\u0E48\u0E21\u0E40\u0E17\u0E35\u0E22\u0E1A data \u0E21\u0E35\u0E02\u0E19\u0E32\u0E14\u0E40\u0E1B\u0E47\u0E19 bytes \u0E41\u0E25\u0E30\u0E41\u0E2A\u0E14\u0E07\u0E40\u0E1B\u0E47\u0E19\u0E08\u0E33\u0E19\u0E27\u0E19\u0E40\u0E15\u0E47\u0E21.
    • bytes: \u0E04\u0E37\u0E2D data \u0E15\u0E23\u0E07\u0E01\u0E31\u0E1A account's data. \u0E08\u0E30\u0E43\u0E0A\u0E49 base-58 encoded string \u0E02\u0E19\u0E32\u0E14\u0E44\u0E21\u0E48\u0E40\u0E01\u0E34\u0E19 129 bytes.

    \u0E41\u0E15\u0E48\u0E15\u0E49\u0E2D\u0E07\u0E23\u0E30\u0E27\u0E31\u0E07\u0E44\u0E27\u0E49\u0E27\u0E48\u0E32 memcmp \u0E08\u0E30\u0E04\u0E37\u0E19\u0E04\u0E48\u0E32\u0E21\u0E32\u0E01\u0E47\u0E15\u0E48\u0E2D\u0E40\u0E21\u0E37\u0E48\u0E2D\u0E40\u0E08\u0E2D bytes \u0E15\u0E23\u0E07\u0E01\u0E31\u0E19\u0E40\u0E17\u0E48\u0E32\u0E19\u0E31\u0E49\u0E19 \u0E0B\u0E36\u0E48\u0E07\u0E43\u0E19\u0E15\u0E2D\u0E19\u0E19\u0E35\u0E49\u0E40\u0E23\u0E32\u0E22\u0E31\u0E07\u0E44\u0E21\u0E48\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E40\u0E17\u0E35\u0E22\u0E1A\u0E2B\u0E32\u0E04\u0E48\u0E32\u0E17\u0E35\u0E48\u0E19\u0E49\u0E2D\u0E22\u0E01\u0E27\u0E48\u0E32 \u0E2B\u0E23\u0E37\u0E2D\u0E21\u0E32\u0E01\u0E01\u0E27\u0E48\u0E32 bytes \u0E17\u0E35\u0E48\u0E40\u0E23\u0E32\u0E43\u0E2A\u0E48\u0E44\u0E1B\u0E44\u0E14\u0E49

    \u0E43\u0E19\u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07 Token Program \u0E2D\u0E31\u0E19\u0E15\u0E48\u0E2D\u0E44\u0E1B, \u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E01\u0E33\u0E2B\u0E19\u0E14\u0E01\u0E32\u0E23\u0E04\u0E49\u0E19\u0E2B\u0E32\u0E43\u0E2B\u0E49\u0E04\u0E37\u0E19\u0E04\u0E48\u0E32\u0E21\u0E32\u0E40\u0E09\u0E1E\u0E32\u0E30 token account \u0E17\u0E35\u0E48\u0E15\u0E23\u0E07\u0E01\u0E31\u0E1A wallet address \u0E02\u0E2D\u0E07\u0E40\u0E23\u0E32 \u0E16\u0E49\u0E32\u0E40\u0E23\u0E32\u0E25\u0E2D\u0E07\u0E14\u0E39\u0E17\u0E35\u0E48 token account \u0E08\u0E30\u0E40\u0E2B\u0E47\u0E19\u0E27\u0E48\u0E32 2 fields \u0E41\u0E23\u0E01\u0E1A\u0E19 token account \u0E04\u0E37\u0E2D pubkeys, \u0E41\u0E25\u0E30\u0E41\u0E15\u0E48\u0E25\u0E30 pubkey \u0E08\u0E30\u0E21\u0E35\u0E02\u0E19\u0E32\u0E14 32 bytes \u0E42\u0E14\u0E22\u0E17\u0E35\u0E48 owner \u0E08\u0E30\u0E2D\u0E22\u0E39\u0E48\u0E17\u0E35\u0E48 field \u0E17\u0E35\u0E48 2 \u0E40\u0E23\u0E32\u0E08\u0E36\u0E07\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E40\u0E23\u0E34\u0E48\u0E21 memcmp \u0E17\u0E35\u0E48 offset \u0E17\u0E35\u0E48 32 bytes \u0E08\u0E32\u0E01\u0E15\u0E23\u0E07\u0E19\u0E31\u0E49\u0E19\u0E40\u0E23\u0E32\u0E01\u0E47\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E21\u0E2D\u0E07\u0E2B\u0E32 account \u0E17\u0E35\u0E48 ower \u0E15\u0E23\u0E07\u0E01\u0E31\u0E1A wallet address \u0E02\u0E2D\u0E07\u0E40\u0E23\u0E32

    Account Size

    \u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E25\u0E2D\u0E07 query \u0E44\u0E14\u0E49\u0E14\u0E49\u0E27\u0E22\u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E14\u0E49\u0E32\u0E19\u0E25\u0E48\u0E32\u0E07:

    ',9),Mn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(),n("span",{class:"token constant"},"TOKEN_PROGRAM_ID"),s(),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/spl-token"'),n("span",{class:"token punctuation"},";"),s(` +import{_ as i,r as l,o as r,c as m,a as n,b as a,w as t,F as k,d as s,e as o}from"./app.2fbb9e96.js";var b="/assets/account-size.398f17bf.png",d="/assets/memcmp.c5e1f050.png";const f={},_=n("h1",{id:"get-program-accounts",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#get-program-accounts","aria-hidden":"true"},"#"),s(" Get Program Accounts")],-1),g=n("p",null,[s("\u0E19\u0E35\u0E48\u0E15\u0E37\u0E2D RPC method \u0E17\u0E35\u0E48\u0E08\u0E30\u0E04\u0E37\u0E19\u0E04\u0E48\u0E32 accounts \u0E17\u0E35\u0E48 program \u0E40\u0E1B\u0E47\u0E19\u0E40\u0E08\u0E49\u0E32\u0E02\u0E2D\u0E07. \u0E43\u0E19\u0E15\u0E2D\u0E19\u0E19\u0E35\u0E49\u0E22\u0E31\u0E07\u0E44\u0E21\u0E48\u0E2A\u0E19\u0E31\u0E1A\u0E2A\u0E19\u0E38\u0E19 pagination. \u0E01\u0E32\u0E23 requests \u0E44\u0E1B\u0E17\u0E35\u0E48 "),n("code",null,"getProgramAccounts"),s(" \u0E08\u0E30\u0E15\u0E49\u0E2D\u0E07\u0E2A\u0E48\u0E07 parameters "),n("code",null,"dataSlice"),s(" \u0E41\u0E25\u0E30/\u0E2B\u0E23\u0E37\u0E2D "),n("code",null,"filters"),s(" \u0E44\u0E1B\u0E14\u0E49\u0E27\u0E22\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E25\u0E14 response time \u0E41\u0E25\u0E30\u0E08\u0E30\u0E44\u0E14\u0E49\u0E2A\u0E48\u0E07\u0E01\u0E25\u0E31\u0E1A\u0E21\u0E32\u0E40\u0E09\u0E1E\u0E32\u0E30\u0E1C\u0E25\u0E25\u0E31\u0E1E\u0E17\u0E4C\u0E17\u0E35\u0E48\u0E15\u0E49\u0E2D\u0E07\u0E01\u0E32\u0E23.")],-1),h=n("h2",{id:"\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49","aria-hidden":"true"},"#"),s(" \u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49")],-1),y={class:"custom-container tip"},A=n("p",{class:"custom-container-title"},"Parameters",-1),w=n("li",null,[n("code",null,"programId"),s(": "),n("code",null,"string"),s(" - Pubkey \u0E02\u0E2D\u0E07 program \u0E17\u0E35\u0E48\u0E08\u0E30 query, \u0E40\u0E15\u0E23\u0E35\u0E22\u0E21\u0E43\u0E19\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A base58 encoded string")],-1),C=s("(optional) "),S=n("code",null,"configOrCommitment",-1),P=s(": "),T=n("code",null,"object",-1),D=s(" - Configuration parameters \u0E17\u0E35\u0E48\u0E21\u0E35 optional fields \u0E15\u0E32\u0E21\u0E19\u0E35\u0E49: "),E=s("(optional) "),N=n("code",null,"commitment",-1),v=s(": "),M=n("code",null,"string",-1),R=s(" - "),K={href:"https://docs.solana.com/developing/clients/jsonrpc-api#configuring-state-commitment",target:"_blank",rel:"noopener noreferrer"},G=s("State commitment"),L=s("(optional) "),B=n("code",null,"encoding",-1),z=s(": "),x=n("code",null,"string",-1),F=s(" - Encoding \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A account data, \u0E17\u0E31\u0E49\u0E07: "),H=n("code",null,"base58",-1),Z=s(", "),Q=n("code",null,"base64",-1),U=s(", \u0E2B\u0E23\u0E37\u0E2D "),W=n("code",null,"jsonParsed",-1),j=s(". Note, web3js \u0E15\u0E49\u0E2D\u0E07\u0E43\u0E0A\u0E49 "),V={href:"https://solana-labs.github.io/solana-web3.js/classes/Connection.html#getParsedProgramAccounts",target:"_blank",rel:"noopener noreferrer"},Y=s("getParsedProgramAccounts"),J=s(" \u0E41\u0E17\u0E19"),X=o("
  • (optional) dataSlice: object - \u0E08\u0E33\u0E01\u0E31\u0E14\u0E1C\u0E25\u0E25\u0E31\u0E1E\u0E17\u0E4C account data \u0E42\u0E14\u0E22\u0E02\u0E36\u0E49\u0E19\u0E2D\u0E22\u0E39\u0E48\u0E01\u0E31\u0E1A:
    • offset: number - \u0E08\u0E33\u0E19\u0E27\u0E19\u0E02\u0E2D\u0E07 bytes \u0E40\u0E23\u0E34\u0E48\u0E21\u0E15\u0E49\u0E19\u0E02\u0E2D\u0E07 account data \u0E17\u0E35\u0E48\u0E08\u0E30\u0E40\u0E23\u0E34\u0E48\u0E21\u0E04\u0E37\u0E19\u0E04\u0E48\u0E32\u0E21\u0E32
    • length: number - \u0E08\u0E33\u0E19\u0E27\u0E19\u0E02\u0E2D\u0E07 bytes \u0E02\u0E2D\u0E07 account data \u0E17\u0E35\u0E48\u0E08\u0E30\u0E2A\u0E48\u0E07\u0E01\u0E25\u0E31\u0E1A\u0E21\u0E32
  • (optional) filters: array - \u0E04\u0E31\u0E14\u0E01\u0E23\u0E2D\u0E07 results \u0E42\u0E14\u0E22\u0E43\u0E0A\u0E49 filter objects \u0E02\u0E49\u0E32\u0E07\u0E25\u0E48\u0E32\u0E07:
    • memcmp: object - \u0E15\u0E23\u0E07\u0E01\u0E31\u0E1A series \u0E02\u0E2D\u0E07 bytes \u0E02\u0E2D\u0E07 account data:
      • offset: number - \u0E08\u0E33\u0E19\u0E27\u0E19\u0E02\u0E2D\u0E07 bytes \u0E40\u0E23\u0E34\u0E48\u0E21\u0E15\u0E49\u0E19\u0E02\u0E2D\u0E07 account data \u0E17\u0E35\u0E48\u0E08\u0E30\u0E40\u0E17\u0E35\u0E22\u0E1A
      • bytes: string - Data \u0E17\u0E35\u0E48\u0E08\u0E30\u0E40\u0E17\u0E35\u0E22\u0E1A\u0E14\u0E49\u0E27\u0E22, \u0E43\u0E19\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A base58 encoded string \u0E08\u0E33\u0E01\u0E31\u0E14\u0E17\u0E35\u0E48 129 bytes
    • dataSize: number - \u0E40\u0E17\u0E35\u0E22\u0E1A account data length \u0E14\u0E49\u0E27\u0E22 data size \u0E17\u0E35\u0E48\u0E23\u0E30\u0E1A\u0E38\u0E44\u0E27\u0E49
  • ",2),O=s("(optional) "),I=n("code",null,"withContext",-1),q=s(": "),$=n("code",null,"boolean",-1),nn=s(" - \u0E04\u0E23\u0E2D\u0E1A (wrap)\u200B \u0E1C\u0E25\u0E25\u0E31\u0E1E\u0E17\u0E4C\u0E43\u0E19\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A "),sn={href:"https://docs.solana.com/developing/clients/jsonrpc-api#rpcresponse-structure",target:"_blank",rel:"noopener noreferrer"},an=s("RpcResponse JSON object"),en=o('
    Response

    \u0E15\u0E32\u0E21\u0E1B\u0E01\u0E15\u0E34\u0E41\u0E25\u0E49\u0E27 getProgramAccounts \u0E08\u0E30\u0E04\u0E37\u0E19\u0E04\u0E48\u0E32 array \u0E02\u0E2D\u0E07 JSON objects \u0E17\u0E35\u0E48\u0E21\u0E35\u0E42\u0E04\u0E23\u0E07\u0E2A\u0E23\u0E49\u0E32\u0E07\u0E15\u0E32\u0E21\u0E19\u0E35\u0E49:

    • pubkey: string - account pubkey \u0E43\u0E19\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E02\u0E2D\u0E07 base58 encoded string
    • account: object - JSON object \u0E17\u0E35\u0E48\u0E21\u0E35 fields:
      • lamports: number, \u0E15\u0E31\u0E27\u0E40\u0E25\u0E02\u0E02\u0E2D\u0E07 lamports \u0E17\u0E35\u0E48\u0E21\u0E35\u0E43\u0E19 account
      • owner: string, base58 encoded pubkey \u0E02\u0E2D\u0E07 program \u0E17\u0E35\u0E48 account \u0E44\u0E14\u0E49 assigned \u0E44\u0E27\u0E49
      • data: string | object - data \u0E17\u0E35\u0E48\u0E40\u0E01\u0E35\u0E48\u0E22\u0E27\u0E02\u0E49\u0E2D\u0E07\u0E01\u0E31\u0E1A account \u0E2D\u0E32\u0E08\u0E08\u0E30\u0E40\u0E1B\u0E47\u0E19\u0E44\u0E14\u0E49\u0E17\u0E31\u0E49\u0E07 encoded binary data \u0E2B\u0E23\u0E37\u0E2D JSON format \u0E02\u0E36\u0E49\u0E19\u0E2D\u0E22\u0E39\u0E48\u0E01\u0E31\u0E1A encoding parameter
      • executable: boolean, \u0E15\u0E31\u0E27\u0E1A\u0E48\u0E07\u0E0A\u0E35\u0E49\u0E27\u0E48\u0E32 account \u0E19\u0E35\u0E49\u0E21\u0E35 program
      • rentEpoch: number, epoch \u0E17\u0E35\u0E48 account \u0E19\u0E35\u0E49\u0E08\u0E30\u0E15\u0E49\u0E2D\u0E07\u0E08\u0E48\u0E32\u0E22 rent
    ',3),tn=n("h2",{id:"\u0E25\u0E07\u0E25\u0E36\u0E01",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E25\u0E07\u0E25\u0E36\u0E01","aria-hidden":"true"},"#"),s(" \u0E25\u0E07\u0E25\u0E36\u0E01")],-1),cn=n("p",null,[n("code",null,"getProgramAccounts"),s(" \u0E04\u0E37\u0E2D RPC method \u0E17\u0E35\u0E48\u0E08\u0E30\u0E04\u0E37\u0E19\u0E04\u0E48\u0E32\u0E17\u0E38\u0E01 accounts \u0E17\u0E35\u0E48 program \u0E40\u0E1B\u0E47\u0E19\u0E40\u0E08\u0E49\u0E32\u0E02\u0E2D\u0E07. \u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E43\u0E0A\u0E49 "),n("code",null,"getProgramAccounts"),s(" \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E14\u0E49\u0E2B\u0E25\u0E32\u0E22\u0E41\u0E1A\u0E1A \u0E40\u0E0A\u0E48\u0E19:")],-1),on=n("li",null,"\u0E2B\u0E32\u0E17\u0E38\u0E01\u0E46 token accounts \u0E02\u0E2D\u0E07 wallet",-1),ln=s("\u0E2B\u0E32\u0E17\u0E38\u0E01\u0E46 token accounts \u0E17\u0E35\u0E48\u0E21\u0E35 mint \u0E40\u0E14\u0E35\u0E22\u0E27\u0E01\u0E31\u0E19(\u0E40\u0E0A\u0E48\u0E19 \u0E17\u0E38\u0E01\u0E46 \u0E04\u0E19\u0E17\u0E35\u0E48\u0E16\u0E37\u0E2D token "),pn={href:"https://www.projectserum.com/",target:"_blank",rel:"noopener noreferrer"},un=s("SRM"),rn=s(" \u0E44\u0E27\u0E49)"),mn=s("\u0E2B\u0E32\u0E17\u0E38\u0E01\u0E46 custom accounts \u0E17\u0E35\u0E48\u0E43\u0E0A\u0E49 program \u0E19\u0E35\u0E49(\u0E40\u0E0A\u0E48\u0E19 \u0E17\u0E38\u0E01\u0E46 \u0E04\u0E19\u0E17\u0E35\u0E48\u0E43\u0E0A\u0E49 "),kn={href:"https://mango.markets/",target:"_blank",rel:"noopener noreferrer"},bn=s("Mango"),dn=s(")"),fn=o("

    \u0E19\u0E2D\u0E01\u0E08\u0E32\u0E01\u0E08\u0E30\u0E21\u0E35\u0E1B\u0E23\u0E30\u0E42\u0E22\u0E0A\u0E19\u0E4C\u0E41\u0E25\u0E49\u0E27, getProgramAccounts \u0E22\u0E31\u0E07\u0E16\u0E39\u0E01\u0E40\u0E02\u0E49\u0E32\u0E43\u0E08\u0E1C\u0E34\u0E14\u0E2D\u0E22\u0E39\u0E48\u0E1A\u0E49\u0E32\u0E07 \u0E40\u0E1E\u0E23\u0E32\u0E30\u0E14\u0E49\u0E27\u0E22\u0E02\u0E49\u0E2D\u0E08\u0E33\u0E01\u0E31\u0E14\u0E02\u0E2D\u0E07\u0E21\u0E31\u0E19 \u0E01\u0E32\u0E23\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E17\u0E35\u0E48\u0E43\u0E0A\u0E49 getProgramAccounts \u0E08\u0E30\u0E17\u0E33\u0E43\u0E2B\u0E49 RPC nodes \u0E04\u0E49\u0E19\u0E2B\u0E32 data \u0E02\u0E19\u0E32\u0E14\u0E43\u0E2B\u0E0D\u0E48. \u0E01\u0E32\u0E23\u0E04\u0E49\u0E19\u0E2B\u0E32\u0E19\u0E31\u0E49\u0E19\u0E01\u0E34\u0E19\u0E17\u0E31\u0E49\u0E07 memory \u0E41\u0E25\u0E30 resource \u0E21\u0E32\u0E01\u0E46. \u0E1C\u0E25\u0E17\u0E35\u0E48\u0E40\u0E01\u0E34\u0E14\u0E02\u0E36\u0E49\u0E19\u0E04\u0E37\u0E2D\u0E16\u0E49\u0E32\u0E40\u0E23\u0E35\u0E22\u0E01\u0E43\u0E0A\u0E49\u0E1A\u0E48\u0E2D\u0E22\u0E40\u0E01\u0E34\u0E19\u0E44\u0E1B \u0E2B\u0E23\u0E37\u0E2D\u0E43\u0E2B\u0E0D\u0E48\u0E40\u0E01\u0E34\u0E19\u0E44\u0E1B\u0E08\u0E30\u0E17\u0E33\u0E43\u0E2B\u0E49\u0E40\u0E01\u0E34\u0E14 connection timeouts \u0E44\u0E14\u0E49. \u0E43\u0E19\u0E15\u0E2D\u0E19\u0E19\u0E35\u0E49 getProgramAccounts endpoint \u0E22\u0E31\u0E07\u0E44\u0E21\u0E48\u0E2A\u0E19\u0E31\u0E1A\u0E2A\u0E19\u0E38\u0E19 pagination. \u0E16\u0E49\u0E32\u0E1C\u0E25\u0E01\u0E32\u0E23\u0E04\u0E49\u0E19\u0E2B\u0E32\u0E43\u0E2B\u0E0D\u0E48\u0E40\u0E01\u0E34\u0E19\u0E44\u0E1B\u0E1C\u0E25\u0E25\u0E31\u0E1E\u0E17\u0E4C\u0E08\u0E30\u0E16\u0E39\u0E01\u0E15\u0E31\u0E14\u0E17\u0E34\u0E49\u0E07.

    \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E2B\u0E25\u0E35\u0E01\u0E2B\u0E19\u0E35\u0E02\u0E49\u0E2D\u0E08\u0E33\u0E01\u0E31\u0E14\u0E19\u0E35\u0E49, getProgramAccounts \u0E40\u0E25\u0E22\u0E21\u0E35 parameters \u0E43\u0E2B\u0E49\u0E43\u0E0A\u0E49: \u0E0A\u0E37\u0E48\u0E2D, dataSlice \u0E41\u0E25\u0E30 filters options memcmp \u0E41\u0E25\u0E30 dataSize. \u0E16\u0E49\u0E32\u0E43\u0E0A\u0E49 parameters \u0E40\u0E2B\u0E25\u0E48\u0E32\u0E19\u0E35\u0E49, \u0E40\u0E23\u0E32\u0E08\u0E30\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E25\u0E14\u0E02\u0E2D\u0E1A\u0E40\u0E02\u0E15\u0E02\u0E2D\u0E07\u0E01\u0E32\u0E23\u0E04\u0E49\u0E19\u0E2B\u0E32\u0E43\u0E2B\u0E49\u0E41\u0E04\u0E1A\u0E25\u0E07\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E04\u0E27\u0E1A\u0E04\u0E38\u0E21 \u0E41\u0E25\u0E30\u0E1B\u0E23\u0E30\u0E21\u0E32\u0E13\u0E02\u0E19\u0E32\u0E14\u0E02\u0E2D\u0E07\u0E1C\u0E25\u0E25\u0E31\u0E1E\u0E17\u0E4C\u0E44\u0E14\u0E49.

    ",2),_n=s("\u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E17\u0E31\u0E48\u0E27\u0E44\u0E1B\u0E02\u0E2D\u0E07 "),gn=n("code",null,"getProgramAccounts",-1),hn=s(" \u0E17\u0E35\u0E48\u0E40\u0E01\u0E35\u0E48\u0E22\u0E27\u0E02\u0E49\u0E2D\u0E07\u0E01\u0E31\u0E1A "),yn={href:"https://spl.solana.com/token",target:"_blank",rel:"noopener noreferrer"},An=s("SPL-Token Program"),wn=s(" \u0E40\u0E0A\u0E48\u0E19 \u0E01\u0E32\u0E23\u0E04\u0E49\u0E19\u0E2B\u0E32\u0E17\u0E38\u0E01\u0E46 accounts \u0E17\u0E35\u0E48 Token Program \u0E40\u0E1B\u0E47\u0E19\u0E40\u0E08\u0E49\u0E32\u0E02\u0E2D\u0E07\u0E42\u0E14\u0E22\u0E43\u0E0A\u0E49 "),Cn=s("\u0E01\u0E32\u0E23\u0E04\u0E49\u0E19\u0E2B\u0E32\u0E41\u0E1A\u0E1A\u0E1B\u0E01\u0E15\u0E34"),Sn=s(" \u0E08\u0E30\u0E17\u0E33\u0E43\u0E2B\u0E49\u0E15\u0E49\u0E2D\u0E07\u0E44\u0E1B\u0E04\u0E49\u0E19\u0E2B\u0E32\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E21\u0E32\u0E01\u0E21\u0E32\u0E22 \u0E41\u0E15\u0E48\u0E16\u0E49\u0E32\u0E40\u0E23\u0E32\u0E43\u0E2A\u0E48 parameters \u0E40\u0E02\u0E49\u0E32\u0E44\u0E1B\u0E14\u0E49\u0E27\u0E22\u0E40\u0E23\u0E32\u0E08\u0E30\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 request \u0E44\u0E14\u0E49\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E1B\u0E23\u0E30\u0E2A\u0E34\u0E17\u0E18\u0E34\u0E20\u0E32\u0E1E \u0E41\u0E25\u0E30\u0E44\u0E14\u0E49 data \u0E40\u0E09\u0E1E\u0E32\u0E30\u0E17\u0E35\u0E48\u0E40\u0E23\u0E32\u0E08\u0E30\u0E43\u0E0A\u0E49."),Pn=o('

    filters

    parameter \u0E17\u0E35\u0E48\u0E43\u0E0A\u0E49\u0E1A\u0E48\u0E2D\u0E22\u0E46 \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A getProgramAccounts \u0E04\u0E37\u0E2D filters array. \u0E0B\u0E36\u0E48\u0E07 array \u0E19\u0E35\u0E49\u0E08\u0E30\u0E23\u0E31\u0E1A filters 2 \u0E41\u0E1A\u0E1A\u0E04\u0E37\u0E2D dataSize \u0E41\u0E25\u0E30 memcmp \u0E01\u0E48\u0E2D\u0E19\u0E17\u0E35\u0E48\u0E08\u0E30\u0E43\u0E0A\u0E49 filters \u0E19\u0E35\u0E49\u0E40\u0E23\u0E32\u0E15\u0E49\u0E2D\u0E07\u0E23\u0E39\u0E49\u0E01\u0E48\u0E2D\u0E19\u0E27\u0E48\u0E32 data \u0E17\u0E35\u0E48\u0E40\u0E23\u0E32\u0E08\u0E30\u0E23\u0E49\u0E2D\u0E07\u0E02\u0E2D\u0E21\u0E35\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E22\u0E31\u0E07\u0E44\u0E07 \u0E41\u0E25\u0E30\u0E08\u0E31\u0E14\u0E40\u0E23\u0E35\u0E22\u0E07\u0E44\u0E27\u0E49\u0E22\u0E31\u0E07\u0E44\u0E07.

    dataSize

    ',3),Tn=s("\u0E43\u0E19\u0E01\u0E23\u0E13\u0E35\u0E02\u0E2D\u0E07 Token Program, \u0E40\u0E23\u0E32\u0E08\u0E30\u0E40\u0E2B\u0E47\u0E19\u0E27\u0E48\u0E32 "),Dn={href:"https://github.com/solana-labs/solana-program-library/blob/08d9999f997a8bf38719679be9d572f119d0d960/token/program/src/state.rs#L86-L106",target:"_blank",rel:"noopener noreferrer"},En=s("token accounts \u0E21\u0E35\u0E02\u0E19\u0E32\u0E14 165 bytes"),Nn=s(". \u0E41\u0E25\u0E30 token account \u0E08\u0E30\u0E21\u0E35 8 fields \u0E17\u0E35\u0E48\u0E41\u0E15\u0E01\u0E15\u0E48\u0E32\u0E07\u0E01\u0E31\u0E19\u0E42\u0E14\u0E22\u0E41\u0E15\u0E48\u0E25\u0E30 field \u0E08\u0E30\u0E21\u0E35\u0E02\u0E19\u0E32\u0E14 bytes \u0E17\u0E35\u0E48\u0E41\u0E19\u0E48\u0E19\u0E2D\u0E19 \u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E41\u0E2A\u0E14\u0E07 visualize \u0E27\u0E48\u0E32 data \u0E21\u0E35\u0E01\u0E32\u0E23\u0E27\u0E32\u0E07\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E22\u0E31\u0E07\u0E44\u0E07\u0E42\u0E14\u0E22\u0E43\u0E0A\u0E49\u0E23\u0E39\u0E1B\u0E14\u0E49\u0E32\u0E19\u0E25\u0E48\u0E32\u0E07."),vn=o('

    Account Size

    \u0E16\u0E49\u0E32\u0E40\u0E23\u0E32\u0E15\u0E49\u0E2D\u0E07\u0E01\u0E32\u0E23\u0E2B\u0E32\u0E17\u0E38\u0E01\u0E46 token accounts \u0E42\u0E14\u0E22\u0E21\u0E35 wallet address \u0E02\u0E2D\u0E07\u0E40\u0E23\u0E32\u0E40\u0E1B\u0E47\u0E19\u0E40\u0E08\u0E49\u0E32\u0E02\u0E2D\u0E07, \u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E43\u0E2A\u0E48 { dataSize: 165 } \u0E43\u0E19 filters \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E25\u0E14\u0E02\u0E2D\u0E1A\u0E40\u0E02\u0E15\u0E01\u0E32\u0E23\u0E04\u0E49\u0E19\u0E2B\u0E32\u0E02\u0E2D\u0E07\u0E40\u0E23\u0E32\u0E43\u0E2B\u0E49\u0E40\u0E2B\u0E25\u0E37\u0E2D\u0E40\u0E09\u0E1E\u0E32\u0E30 accounts \u0E17\u0E35\u0E48\u0E02\u0E19\u0E32\u0E14 165 bytes \u0E40\u0E17\u0E48\u0E32\u0E19\u0E31\u0E49\u0E19 \u0E41\u0E15\u0E48\u0E40\u0E17\u0E48\u0E32\u0E19\u0E35\u0E49\u0E01\u0E47\u0E22\u0E31\u0E07\u0E44\u0E21\u0E48\u0E14\u0E35\u0E1E\u0E2D \u0E40\u0E23\u0E32\u0E15\u0E49\u0E2D\u0E07\u0E15\u0E49\u0E2D\u0E07\u0E43\u0E2A\u0E48 filter \u0E40\u0E02\u0E49\u0E32\u0E44\u0E1B\u0E14\u0E49\u0E27\u0E22\u0E27\u0E48\u0E32\u0E40\u0E23\u0E32\u0E40\u0E1B\u0E47\u0E19\u0E40\u0E08\u0E49\u0E32\u0E02\u0E2D\u0E07 (owner) \u0E21\u0E31\u0E19\u0E14\u0E49\u0E27\u0E22 \u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E17\u0E33\u0E44\u0E14\u0E49\u0E14\u0E49\u0E27\u0E22\u0E01\u0E32\u0E23\u0E40\u0E1E\u0E34\u0E48\u0E21 memcmp filter \u0E40\u0E02\u0E49\u0E32\u0E44\u0E1B.

    memcmp

    memcmp filter \u0E2B\u0E23\u0E37\u0E2D "memory comparison" filter, \u0E08\u0E30\u0E17\u0E33\u0E43\u0E2B\u0E49\u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E40\u0E1B\u0E23\u0E35\u0E22\u0E1A\u0E40\u0E17\u0E35\u0E22\u0E1A data \u0E43\u0E19 field \u0E44\u0E2B\u0E19\u0E01\u0E47\u0E44\u0E14\u0E49\u0E17\u0E35\u0E48\u0E40\u0E01\u0E47\u0E1A\u0E2D\u0E22\u0E39\u0E48\u0E43\u0E19\u200B account \u0E02\u0E2D\u0E07\u0E40\u0E23\u0E32. \u0E42\u0E14\u0E22\u0E40\u0E09\u0E1E\u0E32\u0E30\u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E04\u0E49\u0E19\u0E2B\u0E32\u0E40\u0E09\u0E1E\u0E32\u0E30 accounts \u0E17\u0E35\u0E48\u0E15\u0E23\u0E07\u0E01\u0E31\u0E1A bytes \u0E17\u0E35\u0E48\u0E15\u0E33\u0E41\u0E2B\u0E19\u0E48\u0E07\u0E43\u0E14\u0E46. memcmp \u0E15\u0E49\u0E2D\u0E07\u0E01\u0E32\u0E23 2 arguments:

    • offset: \u0E15\u0E33\u0E41\u0E2B\u0E19\u0E48\u0E07\u0E17\u0E35\u0E48\u0E08\u0E30\u0E40\u0E23\u0E34\u0E48\u0E21\u0E40\u0E17\u0E35\u0E22\u0E1A data \u0E21\u0E35\u0E02\u0E19\u0E32\u0E14\u0E40\u0E1B\u0E47\u0E19 bytes \u0E41\u0E25\u0E30\u0E41\u0E2A\u0E14\u0E07\u0E40\u0E1B\u0E47\u0E19\u0E08\u0E33\u0E19\u0E27\u0E19\u0E40\u0E15\u0E47\u0E21.
    • bytes: \u0E04\u0E37\u0E2D data \u0E15\u0E23\u0E07\u0E01\u0E31\u0E1A account's data. \u0E08\u0E30\u0E43\u0E0A\u0E49 base-58 encoded string \u0E02\u0E19\u0E32\u0E14\u0E44\u0E21\u0E48\u0E40\u0E01\u0E34\u0E19 129 bytes.

    \u0E41\u0E15\u0E48\u0E15\u0E49\u0E2D\u0E07\u0E23\u0E30\u0E27\u0E31\u0E07\u0E44\u0E27\u0E49\u0E27\u0E48\u0E32 memcmp \u0E08\u0E30\u0E04\u0E37\u0E19\u0E04\u0E48\u0E32\u0E21\u0E32\u0E01\u0E47\u0E15\u0E48\u0E2D\u0E40\u0E21\u0E37\u0E48\u0E2D\u0E40\u0E08\u0E2D bytes \u0E15\u0E23\u0E07\u0E01\u0E31\u0E19\u0E40\u0E17\u0E48\u0E32\u0E19\u0E31\u0E49\u0E19 \u0E0B\u0E36\u0E48\u0E07\u0E43\u0E19\u0E15\u0E2D\u0E19\u0E19\u0E35\u0E49\u0E40\u0E23\u0E32\u0E22\u0E31\u0E07\u0E44\u0E21\u0E48\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E40\u0E17\u0E35\u0E22\u0E1A\u0E2B\u0E32\u0E04\u0E48\u0E32\u0E17\u0E35\u0E48\u0E19\u0E49\u0E2D\u0E22\u0E01\u0E27\u0E48\u0E32 \u0E2B\u0E23\u0E37\u0E2D\u0E21\u0E32\u0E01\u0E01\u0E27\u0E48\u0E32 bytes \u0E17\u0E35\u0E48\u0E40\u0E23\u0E32\u0E43\u0E2A\u0E48\u0E44\u0E1B\u0E44\u0E14\u0E49

    \u0E43\u0E19\u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07 Token Program \u0E2D\u0E31\u0E19\u0E15\u0E48\u0E2D\u0E44\u0E1B, \u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E01\u0E33\u0E2B\u0E19\u0E14\u0E01\u0E32\u0E23\u0E04\u0E49\u0E19\u0E2B\u0E32\u0E43\u0E2B\u0E49\u0E04\u0E37\u0E19\u0E04\u0E48\u0E32\u0E21\u0E32\u0E40\u0E09\u0E1E\u0E32\u0E30 token account \u0E17\u0E35\u0E48\u0E15\u0E23\u0E07\u0E01\u0E31\u0E1A wallet address \u0E02\u0E2D\u0E07\u0E40\u0E23\u0E32 \u0E16\u0E49\u0E32\u0E40\u0E23\u0E32\u0E25\u0E2D\u0E07\u0E14\u0E39\u0E17\u0E35\u0E48 token account \u0E08\u0E30\u0E40\u0E2B\u0E47\u0E19\u0E27\u0E48\u0E32 2 fields \u0E41\u0E23\u0E01\u0E1A\u0E19 token account \u0E04\u0E37\u0E2D pubkeys, \u0E41\u0E25\u0E30\u0E41\u0E15\u0E48\u0E25\u0E30 pubkey \u0E08\u0E30\u0E21\u0E35\u0E02\u0E19\u0E32\u0E14 32 bytes \u0E42\u0E14\u0E22\u0E17\u0E35\u0E48 owner \u0E08\u0E30\u0E2D\u0E22\u0E39\u0E48\u0E17\u0E35\u0E48 field \u0E17\u0E35\u0E48 2 \u0E40\u0E23\u0E32\u0E08\u0E36\u0E07\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E40\u0E23\u0E34\u0E48\u0E21 memcmp \u0E17\u0E35\u0E48 offset \u0E17\u0E35\u0E48 32 bytes \u0E08\u0E32\u0E01\u0E15\u0E23\u0E07\u0E19\u0E31\u0E49\u0E19\u0E40\u0E23\u0E32\u0E01\u0E47\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E21\u0E2D\u0E07\u0E2B\u0E32 account \u0E17\u0E35\u0E48 ower \u0E15\u0E23\u0E07\u0E01\u0E31\u0E1A wallet address \u0E02\u0E2D\u0E07\u0E40\u0E23\u0E32

    Account Size

    \u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E25\u0E2D\u0E07 query \u0E44\u0E14\u0E49\u0E14\u0E49\u0E27\u0E22\u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E14\u0E49\u0E32\u0E19\u0E25\u0E48\u0E32\u0E07:

    ',9),Mn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(),n("span",{class:"token constant"},"TOKEN_PROGRAM_ID"),s(),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/spl-token"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" clusterApiUrl"),n("span",{class:"token punctuation"},","),s(" Connection "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` diff --git a/docs/.vuepress/dist/assets/get-program-accounts.html.0070c92d.js b/docs/.vuepress/dist/assets/get-program-accounts.html.d10be18f.js similarity index 99% rename from docs/.vuepress/dist/assets/get-program-accounts.html.0070c92d.js rename to docs/.vuepress/dist/assets/get-program-accounts.html.d10be18f.js index 29039946d..54982d67d 100644 --- a/docs/.vuepress/dist/assets/get-program-accounts.html.0070c92d.js +++ b/docs/.vuepress/dist/assets/get-program-accounts.html.d10be18f.js @@ -1,4 +1,4 @@ -import{_ as i,r as l,o as r,c as m,a as n,b as a,w as e,F as k,d as s,e as o}from"./app.cfdf84e7.js";var b="/assets/account-size.398f17bf.png",d="/assets/memcmp.c5e1f050.png";const g={},f=n("h1",{id:"programmkonten-abfragen",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#programmkonten-abfragen","aria-hidden":"true"},"#"),s(" Programmkonten Abfragen")],-1),h=n("p",null,"Eine RPC-Methode, die alle Konten zur\xFCckgibt, die einem Programm geh\xF6ren. Paginierung wird derzeit nicht unterst\xFCtzt. Anfragen an \u201EgetProgramAccounts\u201C sollten die Parameter \u201EdataSlice\u201C und/oder \u201Efilters\u201C enthalten, um die Antwortzeit zu verbessern und nur beabsichtigte Ergebnisse zur\xFCckzugeben.",-1),_=n("h2",{id:"fakten",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#fakten","aria-hidden":"true"},"#"),s(" Fakten")],-1),y={class:"custom-container tip"},w=n("p",{class:"custom-container-title"},"Parameters",-1),A=n("li",null,"\u201EprogramId\u201C: \u201Estring\u201C \u2013 Pubkey des abzufragenden Programms, bereitgestellt als base58-codierter String",-1),z=s("(optional) "),D=n("code",null,"configOrCommitment",-1),P=s(": "),S=n("code",null,"object",-1),v=s(" - Konfigurationsparameter, die die folgenden optionalen Felder enthalten: "),K=s("(optional) "),T=n("code",null,"commitment",-1),C=s(": "),E=n("code",null,"string",-1),B=s(" - "),M={href:"https://docs.solana.com/developing/clients/jsonrpc-api#configuring-state-commitment",target:"_blank",rel:"noopener noreferrer"},N=s("Staatliche Verpflichtung"),R=s("(optional) "),F=n("code",null,"encoding",-1),G=s(": "),L=n("code",null,"string",-1),x=s(" - Encoding f\xFCr Kontodaten, entweder: "),Z=n("code",null,"base58",-1),W=s(", "),H=n("code",null,"base64",-1),U=s(" oder "),Q=n("code",null,"jsonParsed",-1),j=s(". Beachten Sie, dass Benutzer von web3js stattdessen "),V={href:"https://solana-labs.github.io/solana-web3.js/classes/Connection.html#getParsedProgramAccounts",target:"_blank",rel:"noopener noreferrer"},O=s("getParsedProgramAccounts"),I=s(" verwenden sollten."),Y=o("
  • (optional) dataSlice: object - Beschr\xE4nken Sie die zur\xFCckgegebenen Kontodaten basierend auf:
    • offset: number - Anzahl der Bytes in Kontodaten, um mit der R\xFCckgabe zu beginnen
    • length: number - Anzahl der zur\xFCckzugebenden Kontodaten-Bytes
  • (optional) filters: array - Filtern Sie die Ergebnisse mit den folgenden Filterobjekten:
    • memcmp: object - Passen Sie eine Reihe von Bytes an Kontodaten an:
      • offset: number - Anzahl der Bytes in den Kontodaten, um mit dem Vergleich zu beginnen
      • bytes: string - Zu vergleichende Daten, als Base58-codierter String, begrenzt auf 129 Bytes
    • dataSize: number - Vergleicht die Kontodatenl\xE4nge mit der bereitgestellten Datengr\xF6\xDFe
  • (optional) withContext: boolean - Das Ergebnis in ein [RpcResponse JSON-Objekt] einschlie\xDFen (https://docs.solana.com/developing/clients/jsonrpc-api#rpcresponse-structure)
  • ",3),J=o('
    Antwort

    Standardm\xE4\xDFig gibt getProgramAccounts ein Array von JSON-Objekten mit der folgenden Struktur zur\xFCck:

    • pubkey: string - Der Konto-Pubkey als base58-codierter String
    • \u201Eaccount\u201C: \u201Eobject\u201C \u2013 ein JSON-Objekt mit den folgenden Unterfeldern:
      • lamports: number, Anzahl der dem Konto zugeordneten Lamports
      • owner: string, Der base58-kodierte Pubkey des Programms, dem das Konto zugewiesen wurde
      • \u201EDaten\u201C: \u201EZeichenfolge\u201C | \u201EObjekt\u201C \u2013 Daten, die dem Konto zugeordnet sind, entweder als codierte Bin\xE4rdaten oder im JSON-Format, abh\xE4ngig vom bereitgestellten Codierungsparameter
      • executable: boolean, Angabe ob das Konto ein Programm enth\xE4lt
      • rentEpoch: number, Die Epoche, in der dieses Konto das n\xE4chste mal Miete schuldet :::

    Deep Dive

    \u201EgetProgramAccounts\u201C ist eine vielseitige RPC-Methode, die alle Konten zur\xFCckgibt, die einem Programm geh\xF6ren. Wir k\xF6nnen "getProgramAccounts" f\xFCr eine Reihe n\xFCtzlicher Abfragen verwenden, z. B. um Folgendes zu finden:

    ',5),X=n("li",null,"Alle Token-Konten f\xFCr eine bestimmte Brieftasche",-1),q=s("Alle Token-Konten f\xFCr eine bestimmte Minze (d. h. alle "),$={href:"https://www.projectserum.com/",target:"_blank",rel:"noopener noreferrer"},nn=s("SRM"),sn=s("-Inhaber)"),an=s("Alle benutzerdefinierten Konten f\xFCr ein bestimmtes Programm (d. h. alle Benutzer von "),en={href:"https://mango.markets/",target:"_blank",rel:"noopener noreferrer"},tn=s("Mango"),cn=s(")"),on=o("

    Trotz seiner N\xFCtzlichkeit wird getProgramAccounts aufgrund seiner derzeitigen Beschr\xE4nkungen oft missverstanden. Viele der von \u201EgetProgramAccounts\u201C unterst\xFCtzten Abfragen erfordern RPC-Knoten, um gro\xDFe Datens\xE4tze zu scannen. Diese Scans sind sowohl speicher- als auch ressourcenintensiv. Daher k\xF6nnen zu h\xE4ufige oder zu umfangreiche Aufrufe zu Verbindungszeit\xFCberschreitungen f\xFChren. Dar\xFCber hinaus unterst\xFCtzt der Endpunkt \u201EgetProgramAccounts\u201C zum Zeitpunkt der Erstellung dieses Dokuments keine Paginierung. Wenn die Ergebnisse einer Abfrage zu gro\xDF sind, wird die Antwort abgeschnitten.

    Um diese derzeitigen Beschr\xE4nkungen zu umgehen, bietet getProgramAccounts eine Reihe n\xFCtzlicher Parameter: n\xE4mlich dataSlice und die filters-Optionen memcmp und dataSize. Durch die Bereitstellung von Kombinationen dieser Parameter k\xF6nnen wir den Umfang unserer Abfragen auf \xFCberschaubare und vorhersehbare Gr\xF6\xDFen reduzieren.

    ",2),ln=s("Ein g\xE4ngiges Beispiel f\xFCr \u201EgetProgramAccounts\u201C ist die Interaktion mit dem [SPL-Token-Programm] (https://spl.solana.com/token). Das Anfordern aller Konten des Token-Programms mit einem "),pn=s("einfachen Aufruf"),un=s(" w\xFCrde eine enorme Datenmenge erfordern. Durch die Bereitstellung von Parametern k\xF6nnen wir jedoch effizient nur die Daten anfordern, die wir verwenden m\xF6chten."),rn=n("h3",{id:"filters",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#filters","aria-hidden":"true"},"#"),s(),n("code",null,"filters")],-1),mn=n("p",null,"Der h\xE4ufigste Parameter, der mit \u201EgetProgramAccounts\u201C verwendet wird, ist das \u201Efilters\u201C-Array. Dieses Array akzeptiert zwei Arten von Filtern, \u201EdataSize\u201C und \u201Ememcmp\u201C. Bevor Sie einen dieser Filter verwenden, sollten wir uns damit vertraut machen, wie die angeforderten Daten angeordnet und serialisiert sind.",-1),kn=n("h4",{id:"datasize",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#datasize","aria-hidden":"true"},"#"),s(),n("code",null,"dataSize")],-1),bn=s("Im Fall des Token-Programms k\xF6nnen wir sehen, dass "),dn={href:"https://github.com/solana-labs/solana-program-library/blob/08d9999f997a8bf38719679be9d572f119d0d960/token/program/src/state.rs#L86-L106",target:"_blank",rel:"noopener noreferrer"},gn=s("Token-Konten 165 Byte lang sind"),fn=s(". Insbesondere hat ein Token-Konto acht verschiedene Felder, wobei jedes Feld eine vorhersagbare Anzahl von Bytes erfordert. Wir k\xF6nnen anhand der folgenden Abbildung visualisieren, wie diese Daten angeordnet sind."),hn=o('

    Account Gr\xF6\xDFe

    Wenn wir alle Token-Konten finden m\xF6chten, die unserer Wallet-Adresse geh\xF6ren, k\xF6nnten wir \u201E{ dataSize: 165 }\u201C zu unserem \u201Efilters\u201C-Array hinzuf\xFCgen, um den Umfang unserer Abfrage auf nur Konten einzugrenzen, die genau 165 Byte lang sind. Dies allein w\xFCrde jedoch nicht ausreichen. Wir m\xFCssten auch einen Filter hinzuf\xFCgen, der nach Konten sucht, die unserer Adresse geh\xF6ren. Dies k\xF6nnen wir mit dem memcmp-Filter erreichen.

    memcmp

    Der memcmp-Filter oder "Speichervergleichsfilter" erm\xF6glicht es uns, Daten in jedem Feld zu vergleichen, das in unserem Konto gespeichert ist. Insbesondere k\xF6nnen wir nur nach Konten abfragen, die mit einem bestimmten Satz von Bytes an einer bestimmten Position \xFCbereinstimmen. memcmp erfordert zwei Argumente:

    • offset: Die Position, an der mit dem Datenvergleich begonnen werden soll. Diese Position wird in Bytes gemessen und als ganze Zahl ausgedr\xFCckt.
    • bytes: Die Daten, die mit den Daten des Kontos \xFCbereinstimmen sollen. Dies wird als Base-58-codierte Zeichenfolge dargestellt und sollte auf weniger als 129 Bytes begrenzt sein.

    Es ist wichtig zu beachten, dass "memcmp" nur Ergebnisse zur\xFCckgibt, die eine genaue \xDCbereinstimmung mit "Bytes" sind. Derzeit werden keine Vergleiche f\xFCr Werte unterst\xFCtzt, die kleiner oder gr\xF6\xDFer als die von uns bereitgestellten \u201EBytes\u201C sind.

    In \xDCbereinstimmung mit unserem Beispiel f\xFCr das Token-Programm k\xF6nnen wir unsere Abfrage so \xE4ndern, dass nur Token-Konten zur\xFCckgegeben werden, die unserer Wallet-Adresse geh\xF6ren. Wenn wir uns ein Token-Konto ansehen, k\xF6nnen wir sehen, dass die ersten beiden Felder, die auf einem Token-Konto gespeichert sind, beide Pubkeys sind und dass jeder Pubkey 32 Bytes lang ist. Da \u201EEigent\xFCmer\u201C das zweite Feld ist, sollten wir unser \u201Ememcmp\u201C bei einem \u201EOffset\u201C von 32 Bytes beginnen. Von hier aus suchen wir nach Konten, deren Eigent\xFCmerfeld mit unserer Brieftaschenadresse \xFCbereinstimmt.

    Account Gr\xF6\xDFe

    Wir k\xF6nnen diese Abfrage \xFCber das folgende Beispiel aufrufen:

    ',9),_n=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(),n("span",{class:"token constant"},"TOKEN_PROGRAM_ID"),s(),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/spl-token"'),n("span",{class:"token punctuation"},";"),s(` +import{_ as i,r as l,o as r,c as m,a as n,b as a,w as e,F as k,d as s,e as o}from"./app.2fbb9e96.js";var b="/assets/account-size.398f17bf.png",d="/assets/memcmp.c5e1f050.png";const g={},f=n("h1",{id:"programmkonten-abfragen",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#programmkonten-abfragen","aria-hidden":"true"},"#"),s(" Programmkonten Abfragen")],-1),h=n("p",null,"Eine RPC-Methode, die alle Konten zur\xFCckgibt, die einem Programm geh\xF6ren. Paginierung wird derzeit nicht unterst\xFCtzt. Anfragen an \u201EgetProgramAccounts\u201C sollten die Parameter \u201EdataSlice\u201C und/oder \u201Efilters\u201C enthalten, um die Antwortzeit zu verbessern und nur beabsichtigte Ergebnisse zur\xFCckzugeben.",-1),_=n("h2",{id:"fakten",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#fakten","aria-hidden":"true"},"#"),s(" Fakten")],-1),y={class:"custom-container tip"},w=n("p",{class:"custom-container-title"},"Parameters",-1),A=n("li",null,"\u201EprogramId\u201C: \u201Estring\u201C \u2013 Pubkey des abzufragenden Programms, bereitgestellt als base58-codierter String",-1),z=s("(optional) "),D=n("code",null,"configOrCommitment",-1),P=s(": "),S=n("code",null,"object",-1),v=s(" - Konfigurationsparameter, die die folgenden optionalen Felder enthalten: "),K=s("(optional) "),T=n("code",null,"commitment",-1),C=s(": "),E=n("code",null,"string",-1),B=s(" - "),M={href:"https://docs.solana.com/developing/clients/jsonrpc-api#configuring-state-commitment",target:"_blank",rel:"noopener noreferrer"},N=s("Staatliche Verpflichtung"),R=s("(optional) "),F=n("code",null,"encoding",-1),G=s(": "),L=n("code",null,"string",-1),x=s(" - Encoding f\xFCr Kontodaten, entweder: "),Z=n("code",null,"base58",-1),W=s(", "),H=n("code",null,"base64",-1),U=s(" oder "),Q=n("code",null,"jsonParsed",-1),j=s(". Beachten Sie, dass Benutzer von web3js stattdessen "),V={href:"https://solana-labs.github.io/solana-web3.js/classes/Connection.html#getParsedProgramAccounts",target:"_blank",rel:"noopener noreferrer"},O=s("getParsedProgramAccounts"),I=s(" verwenden sollten."),Y=o("
  • (optional) dataSlice: object - Beschr\xE4nken Sie die zur\xFCckgegebenen Kontodaten basierend auf:
    • offset: number - Anzahl der Bytes in Kontodaten, um mit der R\xFCckgabe zu beginnen
    • length: number - Anzahl der zur\xFCckzugebenden Kontodaten-Bytes
  • (optional) filters: array - Filtern Sie die Ergebnisse mit den folgenden Filterobjekten:
    • memcmp: object - Passen Sie eine Reihe von Bytes an Kontodaten an:
      • offset: number - Anzahl der Bytes in den Kontodaten, um mit dem Vergleich zu beginnen
      • bytes: string - Zu vergleichende Daten, als Base58-codierter String, begrenzt auf 129 Bytes
    • dataSize: number - Vergleicht die Kontodatenl\xE4nge mit der bereitgestellten Datengr\xF6\xDFe
  • (optional) withContext: boolean - Das Ergebnis in ein [RpcResponse JSON-Objekt] einschlie\xDFen (https://docs.solana.com/developing/clients/jsonrpc-api#rpcresponse-structure)
  • ",3),J=o('
    Antwort

    Standardm\xE4\xDFig gibt getProgramAccounts ein Array von JSON-Objekten mit der folgenden Struktur zur\xFCck:

    • pubkey: string - Der Konto-Pubkey als base58-codierter String
    • \u201Eaccount\u201C: \u201Eobject\u201C \u2013 ein JSON-Objekt mit den folgenden Unterfeldern:
      • lamports: number, Anzahl der dem Konto zugeordneten Lamports
      • owner: string, Der base58-kodierte Pubkey des Programms, dem das Konto zugewiesen wurde
      • \u201EDaten\u201C: \u201EZeichenfolge\u201C | \u201EObjekt\u201C \u2013 Daten, die dem Konto zugeordnet sind, entweder als codierte Bin\xE4rdaten oder im JSON-Format, abh\xE4ngig vom bereitgestellten Codierungsparameter
      • executable: boolean, Angabe ob das Konto ein Programm enth\xE4lt
      • rentEpoch: number, Die Epoche, in der dieses Konto das n\xE4chste mal Miete schuldet :::

    Deep Dive

    \u201EgetProgramAccounts\u201C ist eine vielseitige RPC-Methode, die alle Konten zur\xFCckgibt, die einem Programm geh\xF6ren. Wir k\xF6nnen "getProgramAccounts" f\xFCr eine Reihe n\xFCtzlicher Abfragen verwenden, z. B. um Folgendes zu finden:

    ',5),X=n("li",null,"Alle Token-Konten f\xFCr eine bestimmte Brieftasche",-1),q=s("Alle Token-Konten f\xFCr eine bestimmte Minze (d. h. alle "),$={href:"https://www.projectserum.com/",target:"_blank",rel:"noopener noreferrer"},nn=s("SRM"),sn=s("-Inhaber)"),an=s("Alle benutzerdefinierten Konten f\xFCr ein bestimmtes Programm (d. h. alle Benutzer von "),en={href:"https://mango.markets/",target:"_blank",rel:"noopener noreferrer"},tn=s("Mango"),cn=s(")"),on=o("

    Trotz seiner N\xFCtzlichkeit wird getProgramAccounts aufgrund seiner derzeitigen Beschr\xE4nkungen oft missverstanden. Viele der von \u201EgetProgramAccounts\u201C unterst\xFCtzten Abfragen erfordern RPC-Knoten, um gro\xDFe Datens\xE4tze zu scannen. Diese Scans sind sowohl speicher- als auch ressourcenintensiv. Daher k\xF6nnen zu h\xE4ufige oder zu umfangreiche Aufrufe zu Verbindungszeit\xFCberschreitungen f\xFChren. Dar\xFCber hinaus unterst\xFCtzt der Endpunkt \u201EgetProgramAccounts\u201C zum Zeitpunkt der Erstellung dieses Dokuments keine Paginierung. Wenn die Ergebnisse einer Abfrage zu gro\xDF sind, wird die Antwort abgeschnitten.

    Um diese derzeitigen Beschr\xE4nkungen zu umgehen, bietet getProgramAccounts eine Reihe n\xFCtzlicher Parameter: n\xE4mlich dataSlice und die filters-Optionen memcmp und dataSize. Durch die Bereitstellung von Kombinationen dieser Parameter k\xF6nnen wir den Umfang unserer Abfragen auf \xFCberschaubare und vorhersehbare Gr\xF6\xDFen reduzieren.

    ",2),ln=s("Ein g\xE4ngiges Beispiel f\xFCr \u201EgetProgramAccounts\u201C ist die Interaktion mit dem [SPL-Token-Programm] (https://spl.solana.com/token). Das Anfordern aller Konten des Token-Programms mit einem "),pn=s("einfachen Aufruf"),un=s(" w\xFCrde eine enorme Datenmenge erfordern. Durch die Bereitstellung von Parametern k\xF6nnen wir jedoch effizient nur die Daten anfordern, die wir verwenden m\xF6chten."),rn=n("h3",{id:"filters",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#filters","aria-hidden":"true"},"#"),s(),n("code",null,"filters")],-1),mn=n("p",null,"Der h\xE4ufigste Parameter, der mit \u201EgetProgramAccounts\u201C verwendet wird, ist das \u201Efilters\u201C-Array. Dieses Array akzeptiert zwei Arten von Filtern, \u201EdataSize\u201C und \u201Ememcmp\u201C. Bevor Sie einen dieser Filter verwenden, sollten wir uns damit vertraut machen, wie die angeforderten Daten angeordnet und serialisiert sind.",-1),kn=n("h4",{id:"datasize",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#datasize","aria-hidden":"true"},"#"),s(),n("code",null,"dataSize")],-1),bn=s("Im Fall des Token-Programms k\xF6nnen wir sehen, dass "),dn={href:"https://github.com/solana-labs/solana-program-library/blob/08d9999f997a8bf38719679be9d572f119d0d960/token/program/src/state.rs#L86-L106",target:"_blank",rel:"noopener noreferrer"},gn=s("Token-Konten 165 Byte lang sind"),fn=s(". Insbesondere hat ein Token-Konto acht verschiedene Felder, wobei jedes Feld eine vorhersagbare Anzahl von Bytes erfordert. Wir k\xF6nnen anhand der folgenden Abbildung visualisieren, wie diese Daten angeordnet sind."),hn=o('

    Account Gr\xF6\xDFe

    Wenn wir alle Token-Konten finden m\xF6chten, die unserer Wallet-Adresse geh\xF6ren, k\xF6nnten wir \u201E{ dataSize: 165 }\u201C zu unserem \u201Efilters\u201C-Array hinzuf\xFCgen, um den Umfang unserer Abfrage auf nur Konten einzugrenzen, die genau 165 Byte lang sind. Dies allein w\xFCrde jedoch nicht ausreichen. Wir m\xFCssten auch einen Filter hinzuf\xFCgen, der nach Konten sucht, die unserer Adresse geh\xF6ren. Dies k\xF6nnen wir mit dem memcmp-Filter erreichen.

    memcmp

    Der memcmp-Filter oder "Speichervergleichsfilter" erm\xF6glicht es uns, Daten in jedem Feld zu vergleichen, das in unserem Konto gespeichert ist. Insbesondere k\xF6nnen wir nur nach Konten abfragen, die mit einem bestimmten Satz von Bytes an einer bestimmten Position \xFCbereinstimmen. memcmp erfordert zwei Argumente:

    • offset: Die Position, an der mit dem Datenvergleich begonnen werden soll. Diese Position wird in Bytes gemessen und als ganze Zahl ausgedr\xFCckt.
    • bytes: Die Daten, die mit den Daten des Kontos \xFCbereinstimmen sollen. Dies wird als Base-58-codierte Zeichenfolge dargestellt und sollte auf weniger als 129 Bytes begrenzt sein.

    Es ist wichtig zu beachten, dass "memcmp" nur Ergebnisse zur\xFCckgibt, die eine genaue \xDCbereinstimmung mit "Bytes" sind. Derzeit werden keine Vergleiche f\xFCr Werte unterst\xFCtzt, die kleiner oder gr\xF6\xDFer als die von uns bereitgestellten \u201EBytes\u201C sind.

    In \xDCbereinstimmung mit unserem Beispiel f\xFCr das Token-Programm k\xF6nnen wir unsere Abfrage so \xE4ndern, dass nur Token-Konten zur\xFCckgegeben werden, die unserer Wallet-Adresse geh\xF6ren. Wenn wir uns ein Token-Konto ansehen, k\xF6nnen wir sehen, dass die ersten beiden Felder, die auf einem Token-Konto gespeichert sind, beide Pubkeys sind und dass jeder Pubkey 32 Bytes lang ist. Da \u201EEigent\xFCmer\u201C das zweite Feld ist, sollten wir unser \u201Ememcmp\u201C bei einem \u201EOffset\u201C von 32 Bytes beginnen. Von hier aus suchen wir nach Konten, deren Eigent\xFCmerfeld mit unserer Brieftaschenadresse \xFCbereinstimmt.

    Account Gr\xF6\xDFe

    Wir k\xF6nnen diese Abfrage \xFCber das folgende Beispiel aufrufen:

    ',9),_n=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(),n("span",{class:"token constant"},"TOKEN_PROGRAM_ID"),s(),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/spl-token"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" clusterApiUrl"),n("span",{class:"token punctuation"},","),s(" Connection "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` diff --git a/docs/.vuepress/dist/assets/get-program-accounts.html.75179e0c.js b/docs/.vuepress/dist/assets/get-program-accounts.html.e0588315.js similarity index 96% rename from docs/.vuepress/dist/assets/get-program-accounts.html.75179e0c.js rename to docs/.vuepress/dist/assets/get-program-accounts.html.e0588315.js index 4a06abcb7..5ef0c5a32 100644 --- a/docs/.vuepress/dist/assets/get-program-accounts.html.75179e0c.js +++ b/docs/.vuepress/dist/assets/get-program-accounts.html.e0588315.js @@ -1 +1 @@ -const t={key:"v-5263011e",path:"/vi/guides/get-program-accounts.html",title:"\u0110\u1ECDc d\u1EEF li\u1EC7u Program Account",lang:"vi-VN",frontmatter:{title:"\u0110\u1ECDc d\u1EEF li\u1EC7u Program Account",head:[["meta",{name:"title",content:"To\xE0n t\u1EADp Solana | \u0110\u1ECDc d\u1EEF li\u1EC7u Program Account"}],["meta",{name:"og:title",content:"To\xE0n t\u1EADp Solana | \u0110\u1ECDc d\u1EEF li\u1EC7u Program Account"}],["meta",{name:"description",content:"T\xECm hi\u1EC3u c\xE1c truy v\u1EA5n d\u1EEF li\u1EC7u tr\xEAn Solana b\u1EB1ng getProgramAccounts v\xE0 accountsDB."}],["meta",{name:"og:description",content:"T\xECm hi\u1EC3u c\xE1c truy v\u1EA5n d\u1EEF li\u1EC7u tr\xEAn Solana b\u1EB1ng getProgramAccounts v\xE0 accountsDB."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]]},excerpt:"",headers:[{level:2,title:"C\xF3 th\u1EC3 b\u1EA1n ch\u01B0a bi\u1EBFt",slug:"co-the-ban-chua-biet",children:[]},{level:2,title:"Chi ti\u1EBFt",slug:"chi-tiet",children:[{level:3,title:"filters",slug:"filters",children:[]},{level:3,title:"dataSlice",slug:"dataslice",children:[]}]},{level:2,title:"C\xE1c ngu\u1ED3n t\xE0i li\u1EC7u kh\xE1c",slug:"cac-nguon-tai-lieu-khac",children:[]}],git:{updatedTime:1658783638e3},filePathRelative:"vi/guides/get-program-accounts.md"};export{t as data}; +const t={key:"v-5263011e",path:"/vi/guides/get-program-accounts.html",title:"\u0110\u1ECDc d\u1EEF li\u1EC7u Program Account",lang:"vi-VN",frontmatter:{title:"\u0110\u1ECDc d\u1EEF li\u1EC7u Program Account",head:[["meta",{name:"title",content:"To\xE0n t\u1EADp Solana | \u0110\u1ECDc d\u1EEF li\u1EC7u Program Account"}],["meta",{name:"og:title",content:"To\xE0n t\u1EADp Solana | \u0110\u1ECDc d\u1EEF li\u1EC7u Program Account"}],["meta",{name:"description",content:"T\xECm hi\u1EC3u c\xE1c truy v\u1EA5n d\u1EEF li\u1EC7u tr\xEAn Solana b\u1EB1ng getProgramAccounts v\xE0 accountsDB."}],["meta",{name:"og:description",content:"T\xECm hi\u1EC3u c\xE1c truy v\u1EA5n d\u1EEF li\u1EC7u tr\xEAn Solana b\u1EB1ng getProgramAccounts v\xE0 accountsDB."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]]},excerpt:"",headers:[{level:2,title:"C\xF3 th\u1EC3 b\u1EA1n ch\u01B0a bi\u1EBFt",slug:"co-the-ban-chua-biet",children:[]},{level:2,title:"Chi ti\u1EBFt",slug:"chi-tiet",children:[{level:3,title:"filters",slug:"filters",children:[]},{level:3,title:"dataSlice",slug:"dataslice",children:[]}]},{level:2,title:"C\xE1c ngu\u1ED3n t\xE0i li\u1EC7u kh\xE1c",slug:"cac-nguon-tai-lieu-khac",children:[]}],git:{updatedTime:1677551527e3},filePathRelative:"vi/guides/get-program-accounts.md"};export{t as data}; diff --git a/docs/.vuepress/dist/assets/get-program-accounts.html.2ee0e5f9.js b/docs/.vuepress/dist/assets/get-program-accounts.html.e331e7b0.js similarity index 99% rename from docs/.vuepress/dist/assets/get-program-accounts.html.2ee0e5f9.js rename to docs/.vuepress/dist/assets/get-program-accounts.html.e331e7b0.js index 4ba492546..c470fafff 100644 --- a/docs/.vuepress/dist/assets/get-program-accounts.html.2ee0e5f9.js +++ b/docs/.vuepress/dist/assets/get-program-accounts.html.e331e7b0.js @@ -1,4 +1,4 @@ -import{_ as i,r as l,o as r,c as k,a as n,b as a,w as t,F as m,e as c,d as s}from"./app.cfdf84e7.js";var b="/assets/account-size.398f17bf.png",d="/assets/memcmp.c5e1f050.png";const g={},f=c('

    Mendapatkan Akun Program (getProgramAccounts)

    adalah sebuah metode RPC untuk mendapatkan semua akun yang dimiliki oleh suatu program. Saat ini pagination tidak didukung. Request ke getProgramAccounts harus menyertakan parameter dataSlice dan/atau filters untuk mempercepat waktu respon dan hanya mengembalikan hasil yang diinginkan.

    Fakta

    ',3),h={class:"custom-container tip"},_=n("p",{class:"custom-container-title"},"Parameter",-1),y=n("li",null,[n("code",null,"programId"),s(": "),n("code",null,"string"),s(" - Pubkey dari program yang akan diambil, disediakan sebagai string yang di encode menggunakan base58")],-1),w=s("(opsional) "),A=n("code",null,"configOrCommitment",-1),S=s(": "),P=n("code",null,"object",-1),C=s(" - Parameter konfigurasi yang berisi field opsional berikut: "),D=s("(opsional) "),T=n("code",null,"commitment",-1),E=s(": "),M=n("code",null,"string",-1),N=s(" - "),v={href:"https://docs.solana.com/developing/clients/jsonrpc-api#configuring-state-commitment",target:"_blank",rel:"noopener noreferrer"},R=s("State commitment"),K=s("(opsional) "),j=n("code",null,"encoding",-1),B=s(": "),G=n("code",null,"string",-1),L=s(" - Encoding yang digunakan untuk data akun, baik: "),z=n("code",null,"base58",-1),x=s(", "),F=n("code",null,"base64",-1),H=s(", atau "),Z=n("code",null,"jsonParsed",-1),Q=s(". Catatan, pengguna web3js sebaiknya menggunakan "),U={href:"https://solana-labs.github.io/solana-web3.js/classes/Connection.html#getParsedProgramAccounts",target:"_blank",rel:"noopener noreferrer"},W=s("getParsedProgramAccounts"),J=c("
  • (opsional) dataSlice: object - Membatasi jumlah data akun yang dikembalikan berdasarkan:
    • offset: number - Jumlah byte ke dalam data akun untuk mulai kembali
    • length: number - Jumlah byte data akun yang akan dikembalikan
  • (opsional) filters: array - Filter hasil menggunakan objek filter berikut:
    • memcmp: object - Untuk mencocokkan serangkaian byte dengan data akun:
      • offset: number - Posisi byte dalam data akun tempat dimulai perbandingannya
      • bytes: string - Data yang sedang dicocokkan berupa string yang di encode base58, dibatasi hingga 129 byte
    • dataSize: number - Membandingkan panjang data akun dengan ukuran data yang disediakan
  • ",2),V=s("(opsional) "),Y=n("code",null,"withContext",-1),X=s(": "),O=n("code",null,"boolean",-1),I=s(" - Untuk membungkus hasilnya dalam "),q={href:"https://docs.solana.com/developing/clients/jsonrpc-api#rpcresponse-structure",target:"_blank",rel:"noopener noreferrer"},$=s("object RpcResponse JSON"),nn=c('
    Response

    Secara default getProgramAccounts akan mengembalikan array dari objek JSON dengan struktur berikut:

    • pubkey: string - Pubkey akun berupa string yang diencode base58
    • account: object - sebuah objek JSON, dengan sub-field berikut:
      • lamports: number, jumlah lamport yang dimiliki sebuah akun
      • owner: string, Pubkey dengan encode base58 dari program tempat akun tersebut dipasangkan
      • data: string | object - data yang terkait dengan akun, baik berupa data biner yang telah diencode atau format JSON tergantung pada parameter jenis encoding yang diberikan
      • executable: boolean, untuk mengindikasi jika akun tersebut berisi sebuah program
      • rentEpoch: number, Epoch di mana akun ini selanjutnya akan berutang sewa

    Memahami lebih dalam

    getProgramAccounts adalah metode RPC serbaguna yang mendapatkan semua akun yang dimiliki oleh suatu program. Kita dapat menggunakan getProgramAccounts untuk sejumlah query yang berguna, seperti menemukan:

    ',5),sn=n("li",null,"Semua akun token untuk wallet tertentu",-1),an=s("Semua akun token untuk mint tertentu (yaitu Semua pemegang "),en={href:"https://www.projectserum.com/",target:"_blank",rel:"noopener noreferrer"},tn=s("SRM"),cn=s(")"),on=s("Semua akun khusus untuk program tertentu (yaitu Semua pengguna "),ln={href:"https://mango.markets/",target:"_blank",rel:"noopener noreferrer"},pn=s("Mango"),un=s(")"),rn=c("

    Terlepas dari kegunaannya, getProgramAccounts sering disalahpahami karena batasannya saat ini. Banyak query yang didukung oleh getProgramAccounts memerlukan node RPC untuk melakukan scan dari kumpulan data yang besar. Proses scan ini membutuhkan memori dan sumber daya yang intensif. Akibatnya, pemanggilan yang terlalu sering atau terlalu besar cakupannya dapat mengakibatkan connection timeout. Selanjutnya, pada saat penulisan ini, endpoint dari getProgramAccounts tidak mendukung pagination. Jika hasil query terlalu besar, respons akan dipecah (truncate).

    Untuk mengatasi kendala saat ini, getProgramAccounts menawarkan sejumlah parameter yang berguna: yaitu, dataSlice dan opsi dari filters yaitu memcmp dan dataSize. Dengan memberikan kombinasi parameter ini, kita dapat mengurangi cakupan query kita menjadi ukuran yang dapat dikelola dan diprediksi.

    ",2),kn=s("Contoh umum dari "),mn=n("code",null,"getProgramAccounts",-1),bn=s(" melibatkan interaksi dengan "),dn={href:"https://spl.solana.com/token",target:"_blank",rel:"noopener noreferrer"},gn=s("Program Token SPL"),fn=s(". Meminta semua akun yang dimiliki oleh Program Token dengan sebuah "),hn=s("basic call"),_n=s(" akan melibatkan sejumlah data yang besar. Namun, dengan memberikan parameter, kita dapat meminta hanya data yang ingin kita gunakan secara efisien."),yn=c('

    filters

    Parameter yang paling umum digunakan dengan getProgramAccounts adalah array dari filters. Array ini menerima dua jenis filter, yaitu dataSize dan memcmp. Sebelum menggunakan salah satu dari filter ini, kita harus terbiasa dengan bagaimana data yang kita minta ditata dan diserialisasi.

    dataSize

    ',3),wn=s("Dalam kasus Program Token, kita dapat melihat bahwa "),An={href:"https://github.com/solana-labs/solana-program-library/blob/08d9999f997a8bf38719679be9d572f119d0d960/token/program/src/state.rs#L86-L106",target:"_blank",rel:"noopener noreferrer"},Sn=s("akun token memiliki panjang 165 byte"),Pn=s(". Secara khusus, akun token memiliki delapan field yang berbeda, dengan masing-masing field membutuhkan jumlah byte yang dapat diprediksi. Kita dapat memvisualisasikan bagaimana data ini ditata menggunakan ilustrasi di bawah ini."),Cn=c('

    Account Size

    Jika kita ingin menemukan semua akun token yang dimiliki oleh address wallet kita, kita dapat menambahkan { dataSize: 165 } ke dalam array filters kita untuk memperkecil cakupan query kita menjadi hanya akun yang panjangnya tepat 165 byte. Namun, ini saja tidak akan cukup. kita juga perlu menambahkan filter untuk yang mencari akun yang dimiliki oleh address kita. Kita bisa mendapatkan ini dengan filter memcmp.

    memcmp

    Filter memcmp, atau filter "memory comparison", memungkinkan kita untuk membandingkan data di field mana pun yang tersimpan di akun kita. Secara khusus, kita hanya dapat melakukan query untuk akun yang cocok dengan sekumpulan byte tertentu pada posisi tertentu. memcmp membutuhkan dua argumen:

    • offset: Posisi untuk mulai membandingkan data. Posisi ini diukur dalam byte dan dinyatakan sebagai bilangan bulat.
    • bytes: Data yang harus cocok dengan data akun. Ini direpresentasikan dengan string yang diencode menggunakan base-58 dan harus berukuran kurang dari 129 byte.

    Penting untuk diperhatikan bahwa memcmp hanya akan mengembalikan hasil yang bagian dari datanya sama persis dengan bytes. Saat ini, memcmp tidak mendukung perbandingan untuk data yang kurang dari atau lebih besar dari bytes yang kita berikan.

    Sesuai dengan contoh Program Token kita, kita dapat mengubah query kita untuk hanya mengembalikan akun token yang dimiliki oleh address wallet kita. Saat melihat akun token, kita dapat melihat dua field pertama yang disimpan di akun token adalah pubkey, dan masing-masing pubkey memiliki panjang 32 byte. Mengingat bahwa owner adalah field kedua, kita harus memulai memcmp kita pada offset 32 byte. Dari sini, kita akan mencari akun yang field ownernya cocok dengan address wallet kita.

    Account Size

    kita dapat memanggil query ini melalui contoh berikut:

    ',9),Dn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(),n("span",{class:"token constant"},"TOKEN_PROGRAM_ID"),s(),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/spl-token"'),n("span",{class:"token punctuation"},";"),s(` +import{_ as i,r as l,o as r,c as k,a as n,b as a,w as t,F as m,e as c,d as s}from"./app.2fbb9e96.js";var b="/assets/account-size.398f17bf.png",d="/assets/memcmp.c5e1f050.png";const g={},f=c('

    Mendapatkan Akun Program (getProgramAccounts)

    adalah sebuah metode RPC untuk mendapatkan semua akun yang dimiliki oleh suatu program. Saat ini pagination tidak didukung. Request ke getProgramAccounts harus menyertakan parameter dataSlice dan/atau filters untuk mempercepat waktu respon dan hanya mengembalikan hasil yang diinginkan.

    Fakta

    ',3),h={class:"custom-container tip"},_=n("p",{class:"custom-container-title"},"Parameter",-1),y=n("li",null,[n("code",null,"programId"),s(": "),n("code",null,"string"),s(" - Pubkey dari program yang akan diambil, disediakan sebagai string yang di encode menggunakan base58")],-1),w=s("(opsional) "),A=n("code",null,"configOrCommitment",-1),S=s(": "),P=n("code",null,"object",-1),C=s(" - Parameter konfigurasi yang berisi field opsional berikut: "),D=s("(opsional) "),T=n("code",null,"commitment",-1),E=s(": "),M=n("code",null,"string",-1),N=s(" - "),v={href:"https://docs.solana.com/developing/clients/jsonrpc-api#configuring-state-commitment",target:"_blank",rel:"noopener noreferrer"},R=s("State commitment"),K=s("(opsional) "),j=n("code",null,"encoding",-1),B=s(": "),G=n("code",null,"string",-1),L=s(" - Encoding yang digunakan untuk data akun, baik: "),z=n("code",null,"base58",-1),x=s(", "),F=n("code",null,"base64",-1),H=s(", atau "),Z=n("code",null,"jsonParsed",-1),Q=s(". Catatan, pengguna web3js sebaiknya menggunakan "),U={href:"https://solana-labs.github.io/solana-web3.js/classes/Connection.html#getParsedProgramAccounts",target:"_blank",rel:"noopener noreferrer"},W=s("getParsedProgramAccounts"),J=c("
  • (opsional) dataSlice: object - Membatasi jumlah data akun yang dikembalikan berdasarkan:
    • offset: number - Jumlah byte ke dalam data akun untuk mulai kembali
    • length: number - Jumlah byte data akun yang akan dikembalikan
  • (opsional) filters: array - Filter hasil menggunakan objek filter berikut:
    • memcmp: object - Untuk mencocokkan serangkaian byte dengan data akun:
      • offset: number - Posisi byte dalam data akun tempat dimulai perbandingannya
      • bytes: string - Data yang sedang dicocokkan berupa string yang di encode base58, dibatasi hingga 129 byte
    • dataSize: number - Membandingkan panjang data akun dengan ukuran data yang disediakan
  • ",2),V=s("(opsional) "),Y=n("code",null,"withContext",-1),X=s(": "),O=n("code",null,"boolean",-1),I=s(" - Untuk membungkus hasilnya dalam "),q={href:"https://docs.solana.com/developing/clients/jsonrpc-api#rpcresponse-structure",target:"_blank",rel:"noopener noreferrer"},$=s("object RpcResponse JSON"),nn=c('
    Response

    Secara default getProgramAccounts akan mengembalikan array dari objek JSON dengan struktur berikut:

    • pubkey: string - Pubkey akun berupa string yang diencode base58
    • account: object - sebuah objek JSON, dengan sub-field berikut:
      • lamports: number, jumlah lamport yang dimiliki sebuah akun
      • owner: string, Pubkey dengan encode base58 dari program tempat akun tersebut dipasangkan
      • data: string | object - data yang terkait dengan akun, baik berupa data biner yang telah diencode atau format JSON tergantung pada parameter jenis encoding yang diberikan
      • executable: boolean, untuk mengindikasi jika akun tersebut berisi sebuah program
      • rentEpoch: number, Epoch di mana akun ini selanjutnya akan berutang sewa

    Memahami lebih dalam

    getProgramAccounts adalah metode RPC serbaguna yang mendapatkan semua akun yang dimiliki oleh suatu program. Kita dapat menggunakan getProgramAccounts untuk sejumlah query yang berguna, seperti menemukan:

    ',5),sn=n("li",null,"Semua akun token untuk wallet tertentu",-1),an=s("Semua akun token untuk mint tertentu (yaitu Semua pemegang "),en={href:"https://www.projectserum.com/",target:"_blank",rel:"noopener noreferrer"},tn=s("SRM"),cn=s(")"),on=s("Semua akun khusus untuk program tertentu (yaitu Semua pengguna "),ln={href:"https://mango.markets/",target:"_blank",rel:"noopener noreferrer"},pn=s("Mango"),un=s(")"),rn=c("

    Terlepas dari kegunaannya, getProgramAccounts sering disalahpahami karena batasannya saat ini. Banyak query yang didukung oleh getProgramAccounts memerlukan node RPC untuk melakukan scan dari kumpulan data yang besar. Proses scan ini membutuhkan memori dan sumber daya yang intensif. Akibatnya, pemanggilan yang terlalu sering atau terlalu besar cakupannya dapat mengakibatkan connection timeout. Selanjutnya, pada saat penulisan ini, endpoint dari getProgramAccounts tidak mendukung pagination. Jika hasil query terlalu besar, respons akan dipecah (truncate).

    Untuk mengatasi kendala saat ini, getProgramAccounts menawarkan sejumlah parameter yang berguna: yaitu, dataSlice dan opsi dari filters yaitu memcmp dan dataSize. Dengan memberikan kombinasi parameter ini, kita dapat mengurangi cakupan query kita menjadi ukuran yang dapat dikelola dan diprediksi.

    ",2),kn=s("Contoh umum dari "),mn=n("code",null,"getProgramAccounts",-1),bn=s(" melibatkan interaksi dengan "),dn={href:"https://spl.solana.com/token",target:"_blank",rel:"noopener noreferrer"},gn=s("Program Token SPL"),fn=s(". Meminta semua akun yang dimiliki oleh Program Token dengan sebuah "),hn=s("basic call"),_n=s(" akan melibatkan sejumlah data yang besar. Namun, dengan memberikan parameter, kita dapat meminta hanya data yang ingin kita gunakan secara efisien."),yn=c('

    filters

    Parameter yang paling umum digunakan dengan getProgramAccounts adalah array dari filters. Array ini menerima dua jenis filter, yaitu dataSize dan memcmp. Sebelum menggunakan salah satu dari filter ini, kita harus terbiasa dengan bagaimana data yang kita minta ditata dan diserialisasi.

    dataSize

    ',3),wn=s("Dalam kasus Program Token, kita dapat melihat bahwa "),An={href:"https://github.com/solana-labs/solana-program-library/blob/08d9999f997a8bf38719679be9d572f119d0d960/token/program/src/state.rs#L86-L106",target:"_blank",rel:"noopener noreferrer"},Sn=s("akun token memiliki panjang 165 byte"),Pn=s(". Secara khusus, akun token memiliki delapan field yang berbeda, dengan masing-masing field membutuhkan jumlah byte yang dapat diprediksi. Kita dapat memvisualisasikan bagaimana data ini ditata menggunakan ilustrasi di bawah ini."),Cn=c('

    Account Size

    Jika kita ingin menemukan semua akun token yang dimiliki oleh address wallet kita, kita dapat menambahkan { dataSize: 165 } ke dalam array filters kita untuk memperkecil cakupan query kita menjadi hanya akun yang panjangnya tepat 165 byte. Namun, ini saja tidak akan cukup. kita juga perlu menambahkan filter untuk yang mencari akun yang dimiliki oleh address kita. Kita bisa mendapatkan ini dengan filter memcmp.

    memcmp

    Filter memcmp, atau filter "memory comparison", memungkinkan kita untuk membandingkan data di field mana pun yang tersimpan di akun kita. Secara khusus, kita hanya dapat melakukan query untuk akun yang cocok dengan sekumpulan byte tertentu pada posisi tertentu. memcmp membutuhkan dua argumen:

    • offset: Posisi untuk mulai membandingkan data. Posisi ini diukur dalam byte dan dinyatakan sebagai bilangan bulat.
    • bytes: Data yang harus cocok dengan data akun. Ini direpresentasikan dengan string yang diencode menggunakan base-58 dan harus berukuran kurang dari 129 byte.

    Penting untuk diperhatikan bahwa memcmp hanya akan mengembalikan hasil yang bagian dari datanya sama persis dengan bytes. Saat ini, memcmp tidak mendukung perbandingan untuk data yang kurang dari atau lebih besar dari bytes yang kita berikan.

    Sesuai dengan contoh Program Token kita, kita dapat mengubah query kita untuk hanya mengembalikan akun token yang dimiliki oleh address wallet kita. Saat melihat akun token, kita dapat melihat dua field pertama yang disimpan di akun token adalah pubkey, dan masing-masing pubkey memiliki panjang 32 byte. Mengingat bahwa owner adalah field kedua, kita harus memulai memcmp kita pada offset 32 byte. Dari sini, kita akan mencari akun yang field ownernya cocok dengan address wallet kita.

    Account Size

    kita dapat memanggil query ini melalui contoh berikut:

    ',9),Dn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(),n("span",{class:"token constant"},"TOKEN_PROGRAM_ID"),s(),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/spl-token"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" clusterApiUrl"),n("span",{class:"token punctuation"},","),s(" Connection "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` diff --git a/docs/.vuepress/dist/assets/get-program-accounts.html.8bc16d43.js b/docs/.vuepress/dist/assets/get-program-accounts.html.f40aa08d.js similarity index 86% rename from docs/.vuepress/dist/assets/get-program-accounts.html.8bc16d43.js rename to docs/.vuepress/dist/assets/get-program-accounts.html.f40aa08d.js index eb4b6563c..59e6c43ef 100644 --- a/docs/.vuepress/dist/assets/get-program-accounts.html.8bc16d43.js +++ b/docs/.vuepress/dist/assets/get-program-accounts.html.f40aa08d.js @@ -1,4 +1,4 @@ -import{_ as i,r as l,o as r,c as m,a as n,b as a,w as c,F as k,e,d as s}from"./app.cfdf84e7.js";var b="/assets/account-size.398f17bf.png",d="/assets/memcmp.c5e1f050.png";const h={},g=e('

    \u0110\u1ECDc Program Account

    getProgramAccounts l\xE0 m\u1ED9t ph\u01B0\u01A1ng th\u1EE9c RPC gi\xFAp l\u1EA5y d\u1EEF li\u1EC7u c\u1EE7a t\u1EA5t c\u1EA3 c\xE1c Account \u0111\u01B0\u1EE3c s\u1EDF h\u1EEFu b\u1EDFi Program. L\u01B0u \xFD, ph\xE2n trang v\u1EABn ch\u01B0a \u0111\u01B0\u1EE3c h\u1ED7 tr\u1EE3 t\u1EA1i th\u1EDDi \u0111i\u1EC3m hi\u1EC7n t\u1EA1i. Vi\u1EC7c g\u1ECDi getProgramAccounts n\xEAn c\xF3 th\xEAm c\xE1c tham s\u1ED1 dataSlice v\xE0/ho\u1EB7c filters \u0111\u1EC3 c\u1EA3i thi\u1EC7n th\u1EDDi gian tr\u1EA3 v\u1EC1 v\u1EDBi k\u1EBFt qu\u1EA3 mong mu\u1ED1n.

    C\xF3 th\u1EC3 b\u1EA1n ch\u01B0a bi\u1EBFt

    ',3),f={class:"custom-container tip"},_=n("p",{class:"custom-container-title"},"Tham s\u1ED1",-1),y=n("li",null,[n("code",null,"programId"),s(": "),n("code",null,"string"),s(" - Kho\xE1 c\xF4ng khai c\u1EE7a Program c\u1EA7n truy v\u1EA5n v\xE0 bi\u1EC3u di\u1EC5n d\u01B0\u1EDBi d\u1EA1ng base58")],-1),v=s("(Tu\u1EF3 ch\u1ECDn) "),A=n("code",null,"configOrCommitment",-1),w=s(": "),T=n("code",null,"object",-1),C=s(" - Tham s\u1ED1 c\xE0i \u0111\u1EB7t c\xF3 ch\u1EE9a c\xE1c tr\u01B0\u1EDDng tu\u1EF3 ch\u1ECDn sau: "),P=s("(Tu\u1EF3 ch\u1ECDn) "),S=n("code",null,"commitment",-1),D=s(": "),E=n("code",null,"string",-1),N=s(" - "),M={href:"https://docs.solana.com/developing/clients/jsonrpc-api#configuring-state-commitment",target:"_blank",rel:"noopener noreferrer"},K=s("State commitment"),L=s("(Tu\u1EF3 ch\u1ECDn) "),R=n("code",null,"encoding",-1),B=s(": "),G=n("code",null,"string",-1),x=s(" - Ki\u1EC3u m\xE3 ho\xE1 d\u1EEF li\u1EC7u, m\u1ED9t trong c\xE1c ki\u1EC3u sau: "),z=n("code",null,"base58",-1),F=s(", "),H=n("code",null,"base64",-1),Z=s(", "),Q=n("code",null,"jsonParsed",-1),V=s(". L\u01B0u \xFD, ng\u01B0\u1EDDi d\xF9ng web3js n\xEAn s\u1EED d\u1EE5ng "),U={href:"https://solana-labs.github.io/solana-web3.js/classes/Connection.html#getParsedProgramAccounts",target:"_blank",rel:"noopener noreferrer"},W=s("getParsedProgramAccounts"),j=e("
  • (Tu\u1EF3 ch\u1ECDn) dataSlice: object - Gi\u1EDBi h\u1EA1n c\xE1c Account tr\u1EA3 v\u1EC1 d\u1EF1a tr\xEAn:
    • offset: number - V\u1ECB tr\xED b\u1EAFt \u0111\u1EA7u cho d\u1EEF li\u1EC7u \u0111\u01B0\u1EE3c tr\u1EA3 v\u1EC1 c\u1EE7a Account
    • length: number - \u0110\u1ED9 d\xE0i d\u1EEF li\u1EC7u c\u1EE7a Account c\u1EA7n tr\u1EA3 v\u1EC1 v\xE0 \u0111\u01B0\u1EE3c t\xEDnh t\u1EEB v\u1ECB tr\xED b\u1EAFt \u0111\u1EA7u
  • (Tu\u1EF3 ch\u1ECDn) filters: array - L\u1ECDc c\xE1c k\u1EBFt qu\u1EA3 b\u1EB1ng c\xE1c s\u1EED d\u1EE5ng c\xE1c b\u1ED9 l\u1ECDc sau:
    • memcmp: object - L\u1ECDc b\u1EB1ng c\xE1ch so s\xE1nh m\u1ED9t chu\u1ED7i d\u1EEF li\u1EC7u d\u01B0\u1EDBi d\u1EA1ng c\xE1c bytes v\u1EDBi d\u1EEF li\u1EC7u Account
      • offset: number - V\u1ECB tr\xED b\u1EAFt \u0111\u1EA7u trong d\u1EEF li\u1EC7u Account d\xF9ng \u0111\u1EC3 so s\xE1nh
      • bytes: string - D\u1EEF li\u1EC7u c\u1EA7n so s\xE1nh, \u0111\u01B0\u1EE3c truy\u1EC1n v\xE0o d\u01B0\u1EDBi d\u1EA1ng base58 v\xE0 kh\xF4ng qu\xE1 129 bytes
    • dataSize: number - L\u1ECDc theo \u0111\u1ED9 l\u1EDBn c\u1EE7a d\u1EEF li\u1EC7u Account
  • ",2),Y=s("(Tu\u1EF3 ch\u1ECDn) "),J=n("code",null,"withContext",-1),X=s(": "),O=n("code",null,"boolean",-1),I=s(" - \u0110\xF3ng g\xF3i k\u1EBFt qu\u1EA3 v\xE0o m\u1ED9t \u0111\u1ED1i t\u01B0\u1EE3ng "),q={href:"https://docs.solana.com/developing/clients/jsonrpc-api#rpcresponse-structure",target:"_blank",rel:"noopener noreferrer"},$=s("RpcResponse JSON"),nn=e('
    Tr\u1EA3 v\u1EC1

    M\u1EB7c \u0111\u1ECBnh getProgramAccounts s\u1EBD tr\u1EA3 v\u1EC1 m\u1ED9t m\u1EA3ng c\xE1c \u0111\u1ED1i t\u01B0\u1EE3ng JSON v\u1EDBi c\u1EA5u tr\xFAc nh\u01B0 sau:

    • pubkey: string - \u0110\u1ECBa ch\u1EC9 c\u1EE7a Account v\xE0 \u0111\u01B0\u1EE3c m\xE3 ho\xE1 base58
    • account: object - L\xE0 m\u1ED9t \u0111\u1ED1i t\u01B0\u1EE3ng JSON v\u1EDBi c\xE1c tr\u01B0\u1EDDng con nh\u01B0 sau:
      • lamports: number, s\xF4 d\u01B0 lamports c\u1EE7a Account
      • owner: string, \u0110\u1ECBa ch\u1EC9 c\u1EE7a Program s\u1EDF h\u1EEFu Account v\xE0 \u0111\u01B0\u1EE3c m\xE3 ho\xE1 base58
      • data: string | object - D\u1EEF li\u1EC7u c\u1EE7a Account v\xE0 \u0111\u01B0\u1EE3c bi\u1EC3u di\u1EC5n d\u01B0\u1EDBi d\u1EA1ng, ho\u1EB7c l\xE0 binary, ho\u1EB7c l\xE0 JSON, tu\u1EF3 v\xE0o tham s\u1ED1 encoding l\xFAc truy\u1EC1n v\xE0o
      • executable: boolean, Nh\xE3n \u0111\xE1nh d\u1EA5u n\u1EBFu Account n\xE0y ch\u1EE9a m\u1ED9t Program v\xE0 c\xF3 th\u1EC3 th\u1EF1c thi
      • rentEpoch: number, K\u1EF3 h\u1EA1n thu\xEA ti\u1EBFp theo c\u1EE7a Account
    ',3),sn=n("h2",{id:"chi-tiet",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#chi-tiet","aria-hidden":"true"},"#"),s(" Chi ti\u1EBFt")],-1),an=n("p",null,[n("code",null,"getProgramAccounts"),s(" l\xE0 m\u1ED9t ph\u01B0\u01A1ng th\u1EE9c RPC r\u1EA5t linh ho\u1EA1t v\xE0 c\xF3 kh\u1EA3 n\u0103ng tr\u1EA3 v\u1EC1 t\u1EA5t c\u1EA3 c\xE1c Account \u0111\u01B0\u1EE3c s\u1EDF h\u1EEFu b\u1EDFi m\u1ED9t Program. Ch\xFAng ta c\xF3 th\u1EC3 s\u1EED d\u1EE5ng "),n("code",null,"getProgramAccounts"),s(" cho nhi\u1EC1u lo\u1EA1i truy v\u1EA5n kh\xE1c nhau, v\xED d\u1EE5 nh\u01B0:")],-1),tn=n("li",null,"T\u1EA5t c\u1EA3 c\xE1c Account c\u1EE7a m\u1ED9t v\xED c\u1EE5 th\u1EC3",-1),cn=s("T\u1EA5t c\u1EA3 c\xE1c Account cho m\u1ED9t mint (ho\u1EB7c th\u01B0\u1EDDng \u0111\u01B0\u1EE3c g\u1ECDi l\xE0 token \u0111\u1ED1i v\u1EDBi c\xE1c blockchain kh\xE1c) (i.e. T\u1EA5t c\u1EA3 ng\u01B0\u1EDDi gi\u1EEF token "),en={href:"https://www.projectserum.com/",target:"_blank",rel:"noopener noreferrer"},on=s("SRM"),ln=s(")"),pn=s("T\u1EA5t c\u1EA3 c\xE1c Account theo \xFD mu\u1ED1n c\u1EE7a m\u1ED9t Program c\u1EE5 th\u1EC3 (i.e. T\u1EA5t c\u1EA3 Account ng\u01B0\u1EDDi d\xF9ng c\u1EE7a \u1EE9ng d\u1EE5ng "),un={href:"https://mango.markets/",target:"_blank",rel:"noopener noreferrer"},rn=s("Mango"),mn=s(")"),kn=e("

    M\u1EB7c d\xF9 h\u1EEFu d\u1EE5ng l\xE0 v\u1EADy, getProgramAccounts ch\u1EC9 th\u01B0\u1EDDng b\u1ECB d\xF9ng sai v\xEC c\xE1c h\u1EA1n ch\u1EBF hi\u1EC7n t\u1EA1i. Nhi\u1EC1u c\xE2u truy v\u1EA5n \u0111\u01B0\u1EE3c h\u1ED7 tr\u1EE3 b\u1EDFi getProgramAccounts y\xEAu c\u1EA7u c\xE1c n\u1ED1t RPC ph\u1EA3i qu\xE9t m\u1ED9t kh\u1ED1i l\u01B0\u1EE3ng r\u1EA5t l\u1EDBn c\xE1c d\u1EEF li\u1EC7u. Nh\u1EEFng c\xE2u truy v\u1EA5n nh\u01B0 v\u1EADy kh\xF4ng ch\u1EC9 l\u1EDBn v\u1EC1 dung l\u01B0\u1EE3ng d\u1EEF li\u1EC7u v\xE0 c\xF2n l\u1EDBn v\u1EC1 kh\u1ED1i l\u01B0\u1EE3ng t\xEDnh to\xE1n. T\u1EA5t y\u1EBFu, vi\u1EC7c g\u1ECDi qu\xE1 nhi\u1EC1u v\u1EC1 c\u1EA3 t\u1EA7n su\u1EA5t v\xE0 kh\u1ED1i l\u01B0\u1EE3ng d\u1EABn \u0111\u1EBFn k\u1EBFt n\u1ED1i s\u1EBD b\u1ECB ng\u1EAFt. Ngo\xE0i ra, t\u1EA1i th\u1EDDi \u0111i\u1EC3m cu\u1ED1n s\xE1ch \u0111\u01B0\u1EE3c vi\u1EBFt, getProgramAccounts v\u1EABn ch\u01B0a h\u1ED7 tr\u1EE3 ph\xE2n trang. N\u1EBFu k\u1EBFt qu\u1EA3 truy v\u1EA5n qu\xE1 l\u1EDBn, n\xF3 s\u1EBD \u0111\u01B0\u1EE3c c\u1EAFt b\u1ECF \u0111i.

    \u0110\u1EC3 tr\xE1nh c\xE1c h\u1EA1n ch\u1EBF n\xE0y, getProgramAccounts gi\u1EDBi thi\u1EC7u c\xE1c tham s\u1ED1 d\xF9ng cho vi\u1EC7c l\u1ECDc v\xE0 s\u01A1 ch\u1EBF k\u1EBFt qu\u1EA3, v\xED d\u1EE5 nh\u01B0: dataSlice, filters v\u1EDBi tu\u1EF3 ch\u1ECDn memcmp v\xE0 dataSize. B\u1EB1ng c\xE1ch k\u1EBFt h\u1EE3p c\xE1c tham s\u1ED1 tr\xEAn, ch\xFAng ta c\xF3 th\u1EC3 gi\u1EA3m thi\u1EC3u ph\u1EA1m vi truy v\u1EA5n v\u1EDBi k\xEDch th\u01B0\u1EDBc d\u1EEF li\u1EC7u \u0111\u01B0\u1EE3c ki\u1EC3m so\xE1t v\xE0 d\u1EC5 \u0111o\xE1n h\u01A1n.

    ",2),bn=s("M\u1ED9t v\xED d\u1EE5 th\u01B0\u1EDDng th\u1EA5y c\u1EE7a "),dn=n("code",null,"getProgramAccounts",-1),hn=s(" l\xE0 t\u01B0\u01A1ng t\xE1c v\u1EDBi "),gn={href:"https://spl.solana.com/token",target:"_blank",rel:"noopener noreferrer"},fn=s("SPL-Token Program"),_n=s(". Truy v\u1EA5n t\u1EA5t c\u1EA3 c\xE1c Account \u0111\u01B0\u1EE3c s\u1EDF h\u1EEFu b\u1EDFi Token Program v\u1EDBi m\u1ED9t c\xE2u "),yn=s("truy v\u1EA5n thu\u1EA7n tu\xFD"),vn=s(" kh\xF4ng c\xF3 l\u1ECDc s\u1EBD d\u1EABn \u0111\u1EBFn m\u1ED9t s\u1ED1 l\u01B0\u1EE3ng d\u1EEF li\u1EC7u tr\u1EA3 v\u1EC1 kh\u1ED5ng l\u1ED3. Thay v\xE0o \u0111\xF3, b\u1EB1ng c\xE1ch b\u1ED5 sung c\xE1c tham s\u1ED1, ch\xFAng ta c\xF3 th\u1EC3 truy v\u1EA5n m\u1ED9t c\xE1ch hi\u1EC7u qu\u1EA3 ch\u1EC9 nh\u1EEFng d\u1EEF li\u1EC7u m\xECnh c\u1EA7n."),An=e('

    filters

    Tham s\u1ED1 ph\u1ED5 bi\u1EBFn nh\u1EA5t \u0111\u01B0\u1EE3c d\xF9ng k\xE8m v\u1EDBi getProgramAccounts ch\xEDnh l\xE0 m\u1EA3ng c\xE1c filters. M\u1EA3ng n\xE0y ch\u1EA5p nh\u1EADn 2 ki\u1EC3u l\u1ECDc l\xE0 dataSize v\xE0 memcmp. Tr\u01B0\u1EDBc khi s\u1EED d\u1EE5ng m\u1ED9t trong hai, ch\xFAng ta n\xEAn hi\u1EC3u \u0111\u01B0\u1EE3c d\u1EEF li\u1EC7u c\u1EA7n truy v\u1EA5n s\u1EBD c\xF3 ch\u1EE9a d\u1EEF li\u1EC7u g\xEC? h\xECnh th\xE1i ra sao? tu\u1EA7n t\u1EF1 ho\xE1 nh\u01B0 th\u1EBF n\xE0o?

    dataSize

    ',3),wn=s("Trong tr\u01B0\u1EDDng h\u1EE3p Token Program, ch\xFAng ta c\xF3 th\u1EC3 th\u1EA5y r\u1EB1ng "),Tn={href:"https://github.com/solana-labs/solana-program-library/blob/08d9999f997a8bf38719679be9d572f119d0d960/token/program/src/state.rs#L86-L106",target:"_blank",rel:"noopener noreferrer"},Cn=s("\u0111\u1ED9 d\xE0i c\u1EE7a Token Account l\xE0 165 bytes"),Pn=s(". \u0110\u1EB7c bi\u1EC7t, m\u1ED9t Token Account c\xF3 8 tr\u01B0\u1EDDng con, v\u1EDBi m\u1ED7i tr\u01B0\u1EDDng c\xF3 \u0111\u1ED9 d\xE0i v\xF9ng nh\u1EDB bi\u1EBFt tr\u01B0\u1EDBc. Ch\xFAng ta c\xF3 th\u1EC3 m\u01B0\u1EDDng t\u01B0\u1EE3ng c\xE1ch d\u1EEF li\u1EC7u \u0111\u01B0\u1EE3c s\u1EAFp x\u1EBFp b\u1EB1ng minh ho\u1EA1 sau."),Sn=e('

    Account Size

    N\u1EBFu ch\xFAng ta mu\u1ED1n t\xECm t\u1EA5t c\u1EA3 Token Account s\u1EDF h\u1EEFu b\u1EDFi ch\u1EC9 ri\xEAng v\xED c\u1EE7a m\xECnh, ch\xFAng ta c\xF3 th\u1EC3 th\xEAm { dataSize: 165 } v\xE0 filters \u0111\u1EC3 thu h\u1EB9p pham vi c\xE2u truy v\u1EA5n v\xE0 ch\u1EC9 l\u1EA5y nh\u1EEFng Account c\xF3 \u0111\u1ED9 d\xE0i ch\xEDnh x\xE1c 165 bytes. Tuy v\u1EADy, n\xF3 v\u1EABn l\xE0 ch\u01B0a \u0111\u1EE7. Ch\xFAng ta c\u1EA7n th\xEAm m\u1ED9t \u0111i\u1EC1u ki\u1EC7n \u0111\u1EC3 ch\u1EC9 l\u1ECDc c\xE1c Account \u0111\u01B0\u1EE3c s\u1EDF h\u1EEFu b\u1EDFi v\xED c\u1EE7a m\xECnh. \u0110\u1EC3 l\xE0 \u0111\u01B0\u1EE3c \u0111i\u1EC1u \u0111\xF3, ch\xFAng ta ph\u1EA3i s\u1EED d\u1EE5ng memcmp.

    memcmp

    \u0110i\u1EC1u ki\u1EC7n l\u1ECDc memcmp, ho\u1EB7c "memory comparison" (ph\xE9p so s\xE1nh v\xF9ng nh\u1EDB), cho ph\xE9p ch\xFAng ta so s\xE1nh d\u1EEF li\u1EC7u truy\u1EC1n v\xE0o v\u1EDBi b\u1EA5t k\u1EF3 v\xF9ng nh\u1EDB n\xE0o \u0111\u01B0\u1EE3c l\u01B0u trong Account. \u0110\u1EB7c bi\u1EC7t, ch\xFAng ta c\xF3 th\u1EC3 truy v\u1EA5n ch\u1EC9 nh\u1EEFng Account m\xE0 kh\u1EDBp v\u1EDBi m\u1ED9t \u0111o\u1EA1n d\u1EEF li\u1EC7u t\u1EA1i m\u1ED9t v\u1ECB tr\xED c\u1EE5 th\u1EC3. memcmp y\xEAu c\u1EA7u 2 tham s\u1ED1:

    • offset: V\u1ECB tr\xED b\u1EAFt \u0111\u1EA7u \u0111\u1EC3 so s\xE1nh d\u1EEF li\u1EC7u. V\u1ECB tr\xED n\xE0y th\u01B0\u1EDDng \u0111\u01B0\u1EE3c t\xEDnh theo bytes v\xE0 bi\u1EC5u di\u1EC5n d\u01B0\u1EDBi d\u1EA1ng s\u1ED1 nguy\xEAn.
    • bytes: D\u1EEF li\u1EC7u d\xF9ng \u0111\u1EC3 \u0111\u1ED1i chi\u1EBFu v\u1EDBi d\u1EEF li\u1EC7u trong Account. D\u1EEF li\u1EC7u n\xE0y n\xEAn \u0111\u01B0\u1EE3c bi\u1EC3u di\u1EC5n d\u01B0\u1EDBi d\u1EA1ng base58 v\xE0 kh\xF4ng qu\xE1 129 bytes.

    M\u1ED9t \u0111i\u1EC1u quan tr\u1ECDng c\u1EA7n l\u01B0u \xFD l\xE0 memcmp ch\u1EC9 tr\u1EA3 v\u1EC1 c\xE1c k\u1EBFt qu\u1EA3 kh\u1EDBp ch\xEDnh x\xE1c tr\xEAn t\u1EEBng bytes. V\xE0 hi\u1EC7n t\u1EA1i kh\xF4ng h\u1ED7 tr\u1EE3 c\xE1c ph\xE9p so s\xE1nh l\u1EDBn h\u01A1n ho\u1EB7c nh\u1ECF h\u01A1n cho bytes.

    S\u1EED d\u1EE5ng l\u1EA1i v\xED d\u1EE5 Token Program b\xEAn tr\xEAn, ch\xFAng ta di\u1EC1u ch\u1EC9nh c\xE2u truy v\u1EA5n ch\u1EC9 tr\u1EA3 v\u1EC1 nh\u1EEFng Token Account m\xE0 \u0111\u01B0\u1EE3c s\u1EDF h\u1EEFu b\u1EDFi ch\xEDnh m\xECnh. Khi nh\xECn v\xE0o m\u1ED9t Token Account, ch\xFAng ta bi\u1EBFt \u0111\u01B0\u1EE3c 2 tr\u01B0\u1EDDng \u0111\u1EA7u ti\xEAn l\u01B0u trong Token Account l\xE0 2 kho\xE1 c\xF4ng khai v\u1EDBi \u0111\u1ED9 d\xE0i l\xE0 32 bytes. Bi\u1EBFt r\u1EB1ng owner l\xE0 tr\u01B0\u1EDDng th\u1EE9 2, ch\xFAng ta n\xEAn kh\u1EDFi t\u1EA1o memcmp v\u1EDBi offset l\xE0 32. T\u1EEB \u0111\xF3, ch\xFAng ta s\u1EBD l\u1ECDc \u0111\u01B0\u1EE3c nh\u1EEFng Account c\u1EE7a m\xECnh b\u1EB1ng c\xE1ch truy\u1EC1n \u0111\u1ECBa ch\u1EC9 v\xED v\xE0o bytes.

    Account Size

    Ch\xFAng ta c\xF3 th\u1EC3 g\u1ECDi c\xE2u truy v\u1EA5n n\xE0y th\xF4ng qua v\xED d\u1EE5 sau:

    ',9),Dn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(),n("span",{class:"token constant"},"TOKEN_PROGRAM_ID"),s(),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/spl-token"'),n("span",{class:"token punctuation"},";"),s(` +import{_ as i,r as l,o as r,c as m,a as n,b as a,w as c,F as k,e,d as s}from"./app.2fbb9e96.js";var b="/assets/account-size.398f17bf.png",d="/assets/memcmp.c5e1f050.png";const h={},g=e('

    \u0110\u1ECDc Program Account

    getProgramAccounts l\xE0 m\u1ED9t ph\u01B0\u01A1ng th\u1EE9c RPC gi\xFAp l\u1EA5y d\u1EEF li\u1EC7u c\u1EE7a t\u1EA5t c\u1EA3 c\xE1c Account \u0111\u01B0\u1EE3c s\u1EDF h\u1EEFu b\u1EDFi Program. L\u01B0u \xFD, ph\xE2n trang v\u1EABn ch\u01B0a \u0111\u01B0\u1EE3c h\u1ED7 tr\u1EE3 t\u1EA1i th\u1EDDi \u0111i\u1EC3m hi\u1EC7n t\u1EA1i. Vi\u1EC7c g\u1ECDi getProgramAccounts n\xEAn c\xF3 th\xEAm c\xE1c tham s\u1ED1 dataSlice v\xE0/ho\u1EB7c filters \u0111\u1EC3 c\u1EA3i thi\u1EC7n th\u1EDDi gian tr\u1EA3 v\u1EC1 v\u1EDBi k\u1EBFt qu\u1EA3 mong mu\u1ED1n.

    C\xF3 th\u1EC3 b\u1EA1n ch\u01B0a bi\u1EBFt

    ',3),f={class:"custom-container tip"},_=n("p",{class:"custom-container-title"},"Tham s\u1ED1",-1),y=n("li",null,[n("code",null,"programId"),s(": "),n("code",null,"string"),s(" - Kho\xE1 c\xF4ng khai c\u1EE7a Program c\u1EA7n truy v\u1EA5n v\xE0 bi\u1EC3u di\u1EC5n d\u01B0\u1EDBi d\u1EA1ng base58")],-1),v=s("(Tu\u1EF3 ch\u1ECDn) "),A=n("code",null,"configOrCommitment",-1),w=s(": "),T=n("code",null,"object",-1),C=s(" - Tham s\u1ED1 c\xE0i \u0111\u1EB7t c\xF3 ch\u1EE9a c\xE1c tr\u01B0\u1EDDng tu\u1EF3 ch\u1ECDn sau: "),P=s("(Tu\u1EF3 ch\u1ECDn) "),S=n("code",null,"commitment",-1),D=s(": "),E=n("code",null,"string",-1),N=s(" - "),M={href:"https://docs.solana.com/developing/clients/jsonrpc-api#configuring-state-commitment",target:"_blank",rel:"noopener noreferrer"},K=s("State commitment"),L=s("(Tu\u1EF3 ch\u1ECDn) "),R=n("code",null,"encoding",-1),B=s(": "),G=n("code",null,"string",-1),x=s(" - Ki\u1EC3u m\xE3 ho\xE1 d\u1EEF li\u1EC7u, m\u1ED9t trong c\xE1c ki\u1EC3u sau: "),z=n("code",null,"base58",-1),F=s(", "),H=n("code",null,"base64",-1),Z=s(", "),Q=n("code",null,"jsonParsed",-1),V=s(". L\u01B0u \xFD, ng\u01B0\u1EDDi d\xF9ng web3js n\xEAn s\u1EED d\u1EE5ng "),U={href:"https://solana-labs.github.io/solana-web3.js/classes/Connection.html#getParsedProgramAccounts",target:"_blank",rel:"noopener noreferrer"},W=s("getParsedProgramAccounts"),j=e("
  • (Tu\u1EF3 ch\u1ECDn) dataSlice: object - Gi\u1EDBi h\u1EA1n c\xE1c Account tr\u1EA3 v\u1EC1 d\u1EF1a tr\xEAn:
    • offset: number - V\u1ECB tr\xED b\u1EAFt \u0111\u1EA7u cho d\u1EEF li\u1EC7u \u0111\u01B0\u1EE3c tr\u1EA3 v\u1EC1 c\u1EE7a Account
    • length: number - \u0110\u1ED9 d\xE0i d\u1EEF li\u1EC7u c\u1EE7a Account c\u1EA7n tr\u1EA3 v\u1EC1 v\xE0 \u0111\u01B0\u1EE3c t\xEDnh t\u1EEB v\u1ECB tr\xED b\u1EAFt \u0111\u1EA7u
  • (Tu\u1EF3 ch\u1ECDn) filters: array - L\u1ECDc c\xE1c k\u1EBFt qu\u1EA3 b\u1EB1ng c\xE1ch s\u1EED d\u1EE5ng c\xE1c b\u1ED9 l\u1ECDc sau:
    • memcmp: object - L\u1ECDc b\u1EB1ng c\xE1ch so s\xE1nh m\u1ED9t chu\u1ED7i d\u1EEF li\u1EC7u d\u01B0\u1EDBi d\u1EA1ng c\xE1c bytes v\u1EDBi d\u1EEF li\u1EC7u Account
      • offset: number - V\u1ECB tr\xED b\u1EAFt \u0111\u1EA7u trong d\u1EEF li\u1EC7u Account d\xF9ng \u0111\u1EC3 so s\xE1nh
      • bytes: string - D\u1EEF li\u1EC7u c\u1EA7n so s\xE1nh, \u0111\u01B0\u1EE3c truy\u1EC1n v\xE0o d\u01B0\u1EDBi d\u1EA1ng base58 v\xE0 kh\xF4ng qu\xE1 129 bytes
    • dataSize: number - L\u1ECDc theo \u0111\u1ED9 l\u1EDBn c\u1EE7a d\u1EEF li\u1EC7u Account
  • ",2),Y=s("(Tu\u1EF3 ch\u1ECDn) "),J=n("code",null,"withContext",-1),X=s(": "),O=n("code",null,"boolean",-1),I=s(" - \u0110\xF3ng g\xF3i k\u1EBFt qu\u1EA3 v\xE0o m\u1ED9t \u0111\u1ED1i t\u01B0\u1EE3ng "),q={href:"https://docs.solana.com/developing/clients/jsonrpc-api#rpcresponse-structure",target:"_blank",rel:"noopener noreferrer"},$=s("RpcResponse JSON"),nn=e('
    Tr\u1EA3 v\u1EC1

    M\u1EB7c \u0111\u1ECBnh getProgramAccounts s\u1EBD tr\u1EA3 v\u1EC1 m\u1ED9t m\u1EA3ng c\xE1c \u0111\u1ED1i t\u01B0\u1EE3ng JSON v\u1EDBi c\u1EA5u tr\xFAc nh\u01B0 sau:

    • pubkey: string - \u0110\u1ECBa ch\u1EC9 c\u1EE7a Account v\xE0 \u0111\u01B0\u1EE3c m\xE3 ho\xE1 base58
    • account: object - L\xE0 m\u1ED9t \u0111\u1ED1i t\u01B0\u1EE3ng JSON v\u1EDBi c\xE1c tr\u01B0\u1EDDng con nh\u01B0 sau:
      • lamports: number, s\u1ED1 d\u01B0 lamports c\u1EE7a Account
      • owner: string, \u0110\u1ECBa ch\u1EC9 c\u1EE7a Program s\u1EDF h\u1EEFu Account v\xE0 \u0111\u01B0\u1EE3c m\xE3 ho\xE1 base58
      • data: string | object - D\u1EEF li\u1EC7u c\u1EE7a Account v\xE0 \u0111\u01B0\u1EE3c bi\u1EC3u di\u1EC5n d\u01B0\u1EDBi d\u1EA1ng, ho\u1EB7c l\xE0 binary, ho\u1EB7c l\xE0 JSON, tu\u1EF3 v\xE0o tham s\u1ED1 encoding l\xFAc truy\u1EC1n v\xE0o
      • executable: boolean, Nh\xE3n \u0111\xE1nh d\u1EA5u n\u1EBFu Account n\xE0y ch\u1EE9a m\u1ED9t Program v\xE0 c\xF3 th\u1EC3 th\u1EF1c thi
      • rentEpoch: number, K\u1EF3 h\u1EA1n thu\xEA ti\u1EBFp theo c\u1EE7a Account
    ',3),sn=n("h2",{id:"chi-tiet",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#chi-tiet","aria-hidden":"true"},"#"),s(" Chi ti\u1EBFt")],-1),an=n("p",null,[n("code",null,"getProgramAccounts"),s(" l\xE0 m\u1ED9t ph\u01B0\u01A1ng th\u1EE9c RPC r\u1EA5t linh ho\u1EA1t v\xE0 c\xF3 kh\u1EA3 n\u0103ng tr\u1EA3 v\u1EC1 t\u1EA5t c\u1EA3 c\xE1c Account \u0111\u01B0\u1EE3c s\u1EDF h\u1EEFu b\u1EDFi m\u1ED9t Program. Ch\xFAng ta c\xF3 th\u1EC3 s\u1EED d\u1EE5ng "),n("code",null,"getProgramAccounts"),s(" cho nhi\u1EC1u lo\u1EA1i truy v\u1EA5n kh\xE1c nhau, v\xED d\u1EE5 nh\u01B0:")],-1),tn=n("li",null,"T\u1EA5t c\u1EA3 c\xE1c Account c\u1EE7a m\u1ED9t v\xED c\u1EE5 th\u1EC3",-1),cn=s("T\u1EA5t c\u1EA3 c\xE1c Account cho m\u1ED9t mint (ho\u1EB7c th\u01B0\u1EDDng \u0111\u01B0\u1EE3c g\u1ECDi l\xE0 token \u0111\u1ED1i v\u1EDBi c\xE1c blockchain kh\xE1c) (i.e. T\u1EA5t c\u1EA3 ng\u01B0\u1EDDi gi\u1EEF token "),en={href:"https://www.projectserum.com/",target:"_blank",rel:"noopener noreferrer"},on=s("SRM"),ln=s(")"),pn=s("T\u1EA5t c\u1EA3 c\xE1c Account theo \xFD mu\u1ED1n c\u1EE7a m\u1ED9t Program c\u1EE5 th\u1EC3 (i.e. T\u1EA5t c\u1EA3 Account ng\u01B0\u1EDDi d\xF9ng c\u1EE7a \u1EE9ng d\u1EE5ng "),un={href:"https://mango.markets/",target:"_blank",rel:"noopener noreferrer"},rn=s("Mango"),mn=s(")"),kn=e("

    M\u1EB7c d\xF9 h\u1EEFu d\u1EE5ng l\xE0 v\u1EADy, getProgramAccounts th\u01B0\u1EDDng b\u1ECB d\xF9ng sai v\xEC c\xE1c h\u1EA1n ch\u1EBF hi\u1EC7n t\u1EA1i. Nhi\u1EC1u c\xE2u truy v\u1EA5n \u0111\u01B0\u1EE3c h\u1ED7 tr\u1EE3 b\u1EDFi getProgramAccounts y\xEAu c\u1EA7u c\xE1c n\u1ED1t RPC ph\u1EA3i qu\xE9t m\u1ED9t kh\u1ED1i l\u01B0\u1EE3ng r\u1EA5t l\u1EDBn c\xE1c d\u1EEF li\u1EC7u. Nh\u1EEFng c\xE2u truy v\u1EA5n nh\u01B0 v\u1EADy kh\xF4ng ch\u1EC9 l\u1EDBn v\u1EC1 dung l\u01B0\u1EE3ng d\u1EEF li\u1EC7u v\xE0 c\xF2n l\u1EDBn v\u1EC1 kh\u1ED1i l\u01B0\u1EE3ng t\xEDnh to\xE1n. T\u1EA5t y\u1EBFu, vi\u1EC7c g\u1ECDi qu\xE1 nhi\u1EC1u v\u1EC1 c\u1EA3 t\u1EA7n su\u1EA5t v\xE0 kh\u1ED1i l\u01B0\u1EE3ng d\u1EABn \u0111\u1EBFn k\u1EBFt n\u1ED1i s\u1EBD b\u1ECB ng\u1EAFt. Ngo\xE0i ra, t\u1EA1i th\u1EDDi \u0111i\u1EC3m cu\u1ED1n s\xE1ch \u0111\u01B0\u1EE3c vi\u1EBFt, getProgramAccounts v\u1EABn ch\u01B0a h\u1ED7 tr\u1EE3 ph\xE2n trang. N\u1EBFu k\u1EBFt qu\u1EA3 truy v\u1EA5n qu\xE1 l\u1EDBn, n\xF3 s\u1EBD \u0111\u01B0\u1EE3c c\u1EAFt b\u1ECF \u0111i.

    \u0110\u1EC3 tr\xE1nh c\xE1c h\u1EA1n ch\u1EBF n\xE0y, getProgramAccounts gi\u1EDBi thi\u1EC7u c\xE1c tham s\u1ED1 d\xF9ng cho vi\u1EC7c l\u1ECDc v\xE0 s\u01A1 ch\u1EBF k\u1EBFt qu\u1EA3, v\xED d\u1EE5 nh\u01B0: dataSlice, filters v\u1EDBi tu\u1EF3 ch\u1ECDn memcmp v\xE0 dataSize. B\u1EB1ng c\xE1ch k\u1EBFt h\u1EE3p c\xE1c tham s\u1ED1 tr\xEAn, ch\xFAng ta c\xF3 th\u1EC3 gi\u1EA3m thi\u1EC3u ph\u1EA1m vi truy v\u1EA5n v\u1EDBi k\xEDch th\u01B0\u1EDBc d\u1EEF li\u1EC7u \u0111\u01B0\u1EE3c ki\u1EC3m so\xE1t v\xE0 d\u1EC5 \u0111o\xE1n h\u01A1n.

    ",2),bn=s("M\u1ED9t v\xED d\u1EE5 th\u01B0\u1EDDng th\u1EA5y c\u1EE7a "),dn=n("code",null,"getProgramAccounts",-1),hn=s(" l\xE0 t\u01B0\u01A1ng t\xE1c v\u1EDBi "),gn={href:"https://spl.solana.com/token",target:"_blank",rel:"noopener noreferrer"},fn=s("SPL-Token Program"),_n=s(". Truy v\u1EA5n t\u1EA5t c\u1EA3 c\xE1c Account \u0111\u01B0\u1EE3c s\u1EDF h\u1EEFu b\u1EDFi Token Program v\u1EDBi m\u1ED9t c\xE2u "),yn=s("truy v\u1EA5n thu\u1EA7n tu\xFD"),vn=s(" kh\xF4ng c\xF3 l\u1ECDc s\u1EBD d\u1EABn \u0111\u1EBFn m\u1ED9t s\u1ED1 l\u01B0\u1EE3ng d\u1EEF li\u1EC7u tr\u1EA3 v\u1EC1 kh\u1ED5ng l\u1ED3. Thay v\xE0o \u0111\xF3, b\u1EB1ng c\xE1ch b\u1ED5 sung c\xE1c tham s\u1ED1, ch\xFAng ta c\xF3 th\u1EC3 truy v\u1EA5n m\u1ED9t c\xE1ch hi\u1EC7u qu\u1EA3 ch\u1EC9 nh\u1EEFng d\u1EEF li\u1EC7u m\xECnh c\u1EA7n."),An=e('

    filters

    Tham s\u1ED1 ph\u1ED5 bi\u1EBFn nh\u1EA5t \u0111\u01B0\u1EE3c d\xF9ng k\xE8m v\u1EDBi getProgramAccounts ch\xEDnh l\xE0 m\u1EA3ng c\xE1c filters. M\u1EA3ng n\xE0y ch\u1EA5p nh\u1EADn 2 ki\u1EC3u l\u1ECDc l\xE0 dataSize v\xE0 memcmp. Tr\u01B0\u1EDBc khi s\u1EED d\u1EE5ng m\u1ED9t trong hai, ch\xFAng ta n\xEAn hi\u1EC3u \u0111\u01B0\u1EE3c d\u1EEF li\u1EC7u c\u1EA7n truy v\u1EA5n s\u1EBD c\xF3 ch\u1EE9a d\u1EEF li\u1EC7u g\xEC? h\xECnh th\xE1i ra sao? tu\u1EA7n t\u1EF1 ho\xE1 nh\u01B0 th\u1EBF n\xE0o?

    dataSize

    ',3),wn=s("Trong tr\u01B0\u1EDDng h\u1EE3p Token Program, ch\xFAng ta c\xF3 th\u1EC3 th\u1EA5y r\u1EB1ng "),Tn={href:"https://github.com/solana-labs/solana-program-library/blob/08d9999f997a8bf38719679be9d572f119d0d960/token/program/src/state.rs#L86-L106",target:"_blank",rel:"noopener noreferrer"},Cn=s("\u0111\u1ED9 d\xE0i c\u1EE7a Token Account l\xE0 165 bytes"),Pn=s(". \u0110\u1EB7c bi\u1EC7t, m\u1ED9t Token Account c\xF3 8 tr\u01B0\u1EDDng con, v\u1EDBi m\u1ED7i tr\u01B0\u1EDDng c\xF3 \u0111\u1ED9 d\xE0i v\xF9ng nh\u1EDB bi\u1EBFt tr\u01B0\u1EDBc. Ch\xFAng ta c\xF3 th\u1EC3 m\u01B0\u1EDDng t\u01B0\u1EE3ng c\xE1ch d\u1EEF li\u1EC7u \u0111\u01B0\u1EE3c s\u1EAFp x\u1EBFp b\u1EB1ng minh ho\u1EA1 sau."),Sn=e('

    Account Size

    N\u1EBFu ch\xFAng ta mu\u1ED1n t\xECm t\u1EA5t c\u1EA3 Token Account s\u1EDF h\u1EEFu b\u1EDFi ch\u1EC9 ri\xEAng v\xED c\u1EE7a m\xECnh, ch\xFAng ta c\xF3 th\u1EC3 th\xEAm { dataSize: 165 } v\xE0 filters \u0111\u1EC3 thu h\u1EB9p pham vi c\xE2u truy v\u1EA5n v\xE0 ch\u1EC9 l\u1EA5y nh\u1EEFng Account c\xF3 \u0111\u1ED9 d\xE0i ch\xEDnh x\xE1c 165 bytes. Tuy v\u1EADy, n\xF3 v\u1EABn l\xE0 ch\u01B0a \u0111\u1EE7. Ch\xFAng ta c\u1EA7n th\xEAm m\u1ED9t \u0111i\u1EC1u ki\u1EC7n \u0111\u1EC3 ch\u1EC9 l\u1ECDc c\xE1c Account \u0111\u01B0\u1EE3c s\u1EDF h\u1EEFu b\u1EDFi v\xED c\u1EE7a m\xECnh. \u0110\u1EC3 l\xE0 \u0111\u01B0\u1EE3c \u0111i\u1EC1u \u0111\xF3, ch\xFAng ta ph\u1EA3i s\u1EED d\u1EE5ng memcmp.

    memcmp

    \u0110i\u1EC1u ki\u1EC7n l\u1ECDc memcmp, ho\u1EB7c "memory comparison" (ph\xE9p so s\xE1nh v\xF9ng nh\u1EDB), cho ph\xE9p ch\xFAng ta so s\xE1nh d\u1EEF li\u1EC7u truy\u1EC1n v\xE0o v\u1EDBi b\u1EA5t k\u1EF3 v\xF9ng nh\u1EDB n\xE0o \u0111\u01B0\u1EE3c l\u01B0u trong Account. \u0110\u1EB7c bi\u1EC7t, ch\xFAng ta c\xF3 th\u1EC3 truy v\u1EA5n ch\u1EC9 nh\u1EEFng Account m\xE0 kh\u1EDBp v\u1EDBi m\u1ED9t \u0111o\u1EA1n d\u1EEF li\u1EC7u t\u1EA1i m\u1ED9t v\u1ECB tr\xED c\u1EE5 th\u1EC3. memcmp y\xEAu c\u1EA7u 2 tham s\u1ED1:

    • offset: V\u1ECB tr\xED b\u1EAFt \u0111\u1EA7u \u0111\u1EC3 so s\xE1nh d\u1EEF li\u1EC7u. V\u1ECB tr\xED n\xE0y th\u01B0\u1EDDng \u0111\u01B0\u1EE3c t\xEDnh theo bytes v\xE0 bi\u1EC3u di\u1EC5n d\u01B0\u1EDBi d\u1EA1ng s\u1ED1 nguy\xEAn.
    • bytes: D\u1EEF li\u1EC7u d\xF9ng \u0111\u1EC3 \u0111\u1ED1i chi\u1EBFu v\u1EDBi d\u1EEF li\u1EC7u trong Account. D\u1EEF li\u1EC7u n\xE0y n\xEAn \u0111\u01B0\u1EE3c bi\u1EC3u di\u1EC5n d\u01B0\u1EDBi d\u1EA1ng base58 v\xE0 kh\xF4ng qu\xE1 129 bytes.

    M\u1ED9t \u0111i\u1EC1u quan tr\u1ECDng c\u1EA7n l\u01B0u \xFD l\xE0 memcmp ch\u1EC9 tr\u1EA3 v\u1EC1 c\xE1c k\u1EBFt qu\u1EA3 kh\u1EDBp ch\xEDnh x\xE1c tr\xEAn t\u1EEBng bytes. V\xE0 hi\u1EC7n t\u1EA1i kh\xF4ng h\u1ED7 tr\u1EE3 c\xE1c ph\xE9p so s\xE1nh l\u1EDBn h\u01A1n ho\u1EB7c nh\u1ECF h\u01A1n cho bytes.

    S\u1EED d\u1EE5ng l\u1EA1i v\xED d\u1EE5 Token Program b\xEAn tr\xEAn, ch\xFAng ta \u0111i\u1EC1u ch\u1EC9nh c\xE2u truy v\u1EA5n ch\u1EC9 tr\u1EA3 v\u1EC1 nh\u1EEFng Token Account m\xE0 \u0111\u01B0\u1EE3c s\u1EDF h\u1EEFu b\u1EDFi ch\xEDnh m\xECnh. Khi nh\xECn v\xE0o m\u1ED9t Token Account, ch\xFAng ta bi\u1EBFt \u0111\u01B0\u1EE3c 2 tr\u01B0\u1EDDng \u0111\u1EA7u ti\xEAn l\u01B0u trong Token Account l\xE0 2 kho\xE1 c\xF4ng khai v\u1EDBi \u0111\u1ED9 d\xE0i l\xE0 32 bytes. Bi\u1EBFt r\u1EB1ng owner l\xE0 tr\u01B0\u1EDDng th\u1EE9 2, ch\xFAng ta n\xEAn kh\u1EDFi t\u1EA1o memcmp v\u1EDBi offset l\xE0 32. T\u1EEB \u0111\xF3, ch\xFAng ta s\u1EBD l\u1ECDc \u0111\u01B0\u1EE3c nh\u1EEFng Account c\u1EE7a m\xECnh b\u1EB1ng c\xE1ch truy\u1EC1n \u0111\u1ECBa ch\u1EC9 v\xED v\xE0o bytes.

    Account Size

    Ch\xFAng ta c\xF3 th\u1EC3 g\u1ECDi c\xE2u truy v\u1EA5n n\xE0y th\xF4ng qua v\xED d\u1EE5 sau:

    ',9),Dn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(),n("span",{class:"token constant"},"TOKEN_PROGRAM_ID"),s(),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/spl-token"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" clusterApiUrl"),n("span",{class:"token punctuation"},","),s(" Connection "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` diff --git a/docs/.vuepress/dist/assets/get-program-accounts.html.708590f7.js b/docs/.vuepress/dist/assets/get-program-accounts.html.fb5458ec.js similarity index 99% rename from docs/.vuepress/dist/assets/get-program-accounts.html.708590f7.js rename to docs/.vuepress/dist/assets/get-program-accounts.html.fb5458ec.js index eead54f72..8b63d0d31 100644 --- a/docs/.vuepress/dist/assets/get-program-accounts.html.708590f7.js +++ b/docs/.vuepress/dist/assets/get-program-accounts.html.fb5458ec.js @@ -1,4 +1,4 @@ -import{_ as r,r as l,o as i,c as m,a as n,b as a,w as t,F as b,d as s,e as c}from"./app.cfdf84e7.js";var k="/assets/account-size.398f17bf.png",d="/assets/memcmp.c5e1f050.png";const f={},g=n("h1",{id:"obtener-cuentas-de-programa",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#obtener-cuentas-de-programa","aria-hidden":"true"},"#"),s(" Obtener cuentas de programa")],-1),_=n("p",null,[s("Existe un m\xE9todo RPC que devuelve todas las cuentas que son propiedad de un programa. Actualmente no se admite la paginaci\xF3n. Las solicitudes a "),n("code",null,"getProgramAccounts"),s(" deben incluir los par\xE1metros "),n("code",null,"dataSlice"),s(" y/o "),n("code",null,"filters"),s(" para mejorar el tiempo de respuesta y devolver solo los resultados que se necesitan.")],-1),h=n("h2",{id:"hechos",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#hechos","aria-hidden":"true"},"#"),s(" Hechos")],-1),y={class:"custom-container tip"},A=n("p",{class:"custom-container-title"},"Par\xE1metros",-1),w=n("li",null,[n("code",null,"programId"),s(": "),n("code",null,"string"),s(" - Llave p\xFAblica del programa a consultar, codificada en base58")],-1),v=s("(optional) "),C=n("code",null,"configOrCommitment",-1),P=s(": "),S=n("code",null,"object",-1),E=s(" - Par\xE1metros de configuraci\xF3n que contienen los siguientes campos opcionales: "),T=s("(optional) "),D=n("code",null,"commitment",-1),N=s(": "),L=n("code",null,"string",-1),M=s(" - "),z={href:"https://docs.solana.com/developing/clients/jsonrpc-api#configuring-state-commitment",target:"_blank",rel:"noopener noreferrer"},R=s("Compromiso del estado (state commitment)"),K=s("(optional) "),G=n("code",null,"encoding",-1),B=s(": "),x=n("code",null,"string",-1),q=s(" - La codificaci\xF3n para los datos de la cuenta, puede ser: "),j=n("code",null,"base58",-1),H=s(", "),F=n("code",null,"base64",-1),Z=s(", or "),Q=n("code",null,"jsonParsed",-1),U=s(". Los usuarios de web3js deben usar "),W={href:"https://solana-labs.github.io/solana-web3.js/classes/Connection.html#getParsedProgramAccounts",target:"_blank",rel:"noopener noreferrer"},V=s("getParsedProgramAccounts"),O=c("
  • (optional) dataSlice: object - Configuraci\xF3n para limitar los datos que se retornan:
    • offset: number - N\xFAmero de bytes en los datos de la cuenta donde iniciar
    • length: number - N\xFAmero de bytes de datos de la cuenta a devolver
  • (optional) filters: array - Configuraci\xF3n para filtrar los resultados:
    • memcmp: object - Coincidencia de bytes con los datos de la cuenta:
      • offset: number - N\xFAmero de bytes en los datos de la cuenta donde empezar a comparar
      • bytes: string - Datos a comparar, como cadena codificada en base58 limitada a 129 bytes
    • dataSize: number - Compara la longitud de los datos de la cuenta con el tama\xF1o de datos proporcionado
  • ",2),Y=s("(optional) "),J=n("code",null,"withContext",-1),X=s(": "),I=n("code",null,"boolean",-1),$=s(" - Envuelve el resultado en un "),nn={href:"https://docs.solana.com/developing/clients/jsonrpc-api#rpcresponse-structure",target:"_blank",rel:"noopener noreferrer"},sn=s("Objeto JSON RpcResponse"),an=c('
    Respuesta

    Por defecto getProgramAccounts devolver\xE1 una matriz de objetos JSON con la siguiente estructura:

    • pubkey: string - La clave p\xFAblica de la cuenta codificada en base58
    • account: object - un objeto JSON, con los siguientes subcampos:
      • lamports: number - n\xFAmero de lamports asignado a la cuenta
      • owner: string - La clave p\xFAblica del programa al que se ha asignado la cuenta codificada en base58
      • data: string | object - datos asociados con la cuenta, ya sea como datos binarios o en formato JSON seg\xFAn el par\xE1metro de codificaci\xF3n proporcionado
      • executable: boolean - Indicaci\xF3n si la cuenta contiene un programa
      • rentEpoch: number - La \xE9poca en la que esta cuenta adeudar\xE1 alquiler
    ',3),en=n("h2",{id:"un-vistazo-mas-profundo",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#un-vistazo-mas-profundo","aria-hidden":"true"},"#"),s(" Un vistazo m\xE1s profundo")],-1),tn=n("p",null,[n("code",null,"getProgramAccounts"),s(" es un m\xE9todo RPC vers\xE1til que devuelve todas las cuentas propiedad de un programa. Podemos usar "),n("code",null,"getProgramAccounts"),s(" para una serie de consultas \xFAtiles, como encontrar:")],-1),on=n("li",null,"Todas las cuentas de token para una billetera en particular",-1),cn=s("Todas las cuentas para un mint en particular (ej. Todos los titulares (holders) de "),ln={href:"https://www.projectserum.com/",target:"_blank",rel:"noopener noreferrer"},pn=s("SRM"),un=s(")"),rn=s("Todas las cuentas para un programa en particular (ej. Todos los usuarios de "),mn={href:"https://mango.markets/",target:"_blank",rel:"noopener noreferrer"},bn=s("Mango"),kn=s(")"),dn=c("

    A pesar de su utilidad, getProgramAccounts a menudo se malinterpreta debido a sus limitaciones actuales. Muchas de las consultas admitidas por getProgramAccounts requieren nodos RPC para escanear grandes conjuntos de datos. Estos escaneos consumen muchos recursos y memoria. Como resultado, las llamadas que son demasiado frecuentes o de un alcance demasiado grande pueden provocar tiempos de espera mayores al permitido (timeouts). Adem\xE1s, en el momento de escribir este art\xEDculo, el extremo getProgramAccounts no admite la paginaci\xF3n. Si los resultados de una consulta son demasiado grandes, la respuesta se truncar\xE1.

    Para resolver temporalmente estas restricciones, getProgramAccounts ofrece una serie de par\xE1metros \xFAtiles: por ejemplo, dataSlice y las opciones de filtros memcmp y dataSize. Al proporcionar combinaciones de estos par\xE1metros, podemos reducir el alcance de nuestras consultas a tama\xF1os manejables y predecibles.

    ",2),fn=s("Un ejemplo com\xFAn de "),gn=n("code",null,"getProgramAccounts",-1),_n=s(" consiste en interactuar con el "),hn={href:"https://spl.solana.com/token",target:"_blank",rel:"noopener noreferrer"},yn=s("Programa de tokens SPL"),An=s(". Solicitar todas las cuentas propiedad del Programa Token con una "),wn=s("llamada b\xE1sica"),vn=s(" implicar\xEDa una enorme cantidad de datos. Sin embargo, al proporcionar par\xE1metros, podemos solicitar de manera eficiente solo los datos que pretendemos utilizar."),Cn=c('

    filters

    El par\xE1metro m\xE1s com\xFAn para usar con getProgramAccounts es la matriz filters. Esta matriz acepta dos tipos de filtros, dataSize y memcmp. Antes de usar cualquiera de estos filtros, debemos estar familiarizados con la forma en que se distribuyen y serializan los datos que solicitamos.

    dataSize

    ',3),Pn=s("En el caso del Programa Token (Token Program), podemos ver que "),Sn={href:"https://github.com/solana-labs/solana-program-library/blob/08d9999f997a8bf38719679be9d572f119d0d960/token/program/src/state.rs#L86-L106",target:"_blank",rel:"noopener noreferrer"},En=s("las cuentas de token tienen una longitud de 165 bytes"),Tn=s(". Espec\xEDficamente, una cuenta de token tiene ocho campos diferentes, y cada campo requiere una cantidad predecible de bytes. Podemos visualizar c\xF3mo se distribuyen estos datos usando la siguiente ilustraci\xF3n."),Dn=c('

    Tama\xF1o de la cuenta

    Si quisi\xE9ramos encontrar todas las cuentas de token que pertenecen a nuestra direcci\xF3n de billetera, podr\xEDamos agregar { dataSize: 165 } a nuestra matriz de filtros para limitar el alcance de nuestra consulta a solo cuentas que tengan exactamente 165 bytes de longitud. Esto solo, sin embargo, ser\xEDa insuficiente. Tambi\xE9n necesitar\xEDamos agregar un filtro que busque cuentas propiedad de nuestra direcci\xF3n. Podemos lograr esto con el filtro memcmp.

    memcmp

    El filtro memcmp, o filtro de "comparaci\xF3n de memoria", nos permite comparar datos en cualquier campo almacenado en nuestra cuenta. Espec\xEDficamente, solo podemos consultar cuentas que coincidan con un conjunto de bytes en una posici\xF3n espec\xEDfica. memcmp requiere dos argumentos:

    • offset: La posici\xF3n para comenzar a comparar datos. Esta posici\xF3n se mide en bytes y se expresa como un n\xFAmero entero.
    • bytes: Los datos que deben coincidir con los datos de la cuenta. Esto se representa como una cadena codificada en base 58 que debe limitarse a menos de 129 bytes.

    Es importante tener en cuenta que memcmp solo devolver\xE1 resultados que coincidan exactamente en bytes. Actualmente, no admite comparaciones de valores menores o mayores que los "bytes" que proporcionamos.

    De acuerdo con nuestro ejemplo del Programa de tokens, podemos modificar nuestra consulta para que solo devuelva las cuentas de tokens que pertenecen a nuestra direcci\xF3n de billetera. Al observar una cuenta de token, podemos ver que los dos primeros campos almacenados en una cuenta de token son claves p\xFAblicas y que cada clave p\xFAblica tiene una longitud de 32 bytes. Dado que owner es el segundo campo, deber\xEDamos comenzar nuestro memcmp en un offset de 32 bytes. A partir de aqu\xED, buscaremos cuentas cuyo campo de propietario coincida con la direcci\xF3n de nuestra billetera.

    Tama\xF1o de la cuenta

    Podemos hacer esta b\xFAsqueda utilizando el siguiente ejemplo:

    ',9),Nn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(),n("span",{class:"token constant"},"TOKEN_PROGRAM_ID"),s(),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/spl-token"'),n("span",{class:"token punctuation"},";"),s(` +import{_ as r,r as l,o as i,c as m,a as n,b as a,w as t,F as b,d as s,e as c}from"./app.2fbb9e96.js";var k="/assets/account-size.398f17bf.png",d="/assets/memcmp.c5e1f050.png";const f={},g=n("h1",{id:"obtener-cuentas-de-programa",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#obtener-cuentas-de-programa","aria-hidden":"true"},"#"),s(" Obtener cuentas de programa")],-1),_=n("p",null,[s("Existe un m\xE9todo RPC que devuelve todas las cuentas que son propiedad de un programa. Actualmente no se admite la paginaci\xF3n. Las solicitudes a "),n("code",null,"getProgramAccounts"),s(" deben incluir los par\xE1metros "),n("code",null,"dataSlice"),s(" y/o "),n("code",null,"filters"),s(" para mejorar el tiempo de respuesta y devolver solo los resultados que se necesitan.")],-1),h=n("h2",{id:"hechos",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#hechos","aria-hidden":"true"},"#"),s(" Hechos")],-1),y={class:"custom-container tip"},A=n("p",{class:"custom-container-title"},"Par\xE1metros",-1),w=n("li",null,[n("code",null,"programId"),s(": "),n("code",null,"string"),s(" - Llave p\xFAblica del programa a consultar, codificada en base58")],-1),v=s("(optional) "),C=n("code",null,"configOrCommitment",-1),P=s(": "),S=n("code",null,"object",-1),E=s(" - Par\xE1metros de configuraci\xF3n que contienen los siguientes campos opcionales: "),T=s("(optional) "),D=n("code",null,"commitment",-1),N=s(": "),L=n("code",null,"string",-1),M=s(" - "),z={href:"https://docs.solana.com/developing/clients/jsonrpc-api#configuring-state-commitment",target:"_blank",rel:"noopener noreferrer"},R=s("Compromiso del estado (state commitment)"),K=s("(optional) "),G=n("code",null,"encoding",-1),B=s(": "),x=n("code",null,"string",-1),q=s(" - La codificaci\xF3n para los datos de la cuenta, puede ser: "),j=n("code",null,"base58",-1),H=s(", "),F=n("code",null,"base64",-1),Z=s(", or "),Q=n("code",null,"jsonParsed",-1),U=s(". Los usuarios de web3js deben usar "),W={href:"https://solana-labs.github.io/solana-web3.js/classes/Connection.html#getParsedProgramAccounts",target:"_blank",rel:"noopener noreferrer"},V=s("getParsedProgramAccounts"),O=c("
  • (optional) dataSlice: object - Configuraci\xF3n para limitar los datos que se retornan:
    • offset: number - N\xFAmero de bytes en los datos de la cuenta donde iniciar
    • length: number - N\xFAmero de bytes de datos de la cuenta a devolver
  • (optional) filters: array - Configuraci\xF3n para filtrar los resultados:
    • memcmp: object - Coincidencia de bytes con los datos de la cuenta:
      • offset: number - N\xFAmero de bytes en los datos de la cuenta donde empezar a comparar
      • bytes: string - Datos a comparar, como cadena codificada en base58 limitada a 129 bytes
    • dataSize: number - Compara la longitud de los datos de la cuenta con el tama\xF1o de datos proporcionado
  • ",2),Y=s("(optional) "),J=n("code",null,"withContext",-1),X=s(": "),I=n("code",null,"boolean",-1),$=s(" - Envuelve el resultado en un "),nn={href:"https://docs.solana.com/developing/clients/jsonrpc-api#rpcresponse-structure",target:"_blank",rel:"noopener noreferrer"},sn=s("Objeto JSON RpcResponse"),an=c('
    Respuesta

    Por defecto getProgramAccounts devolver\xE1 una matriz de objetos JSON con la siguiente estructura:

    • pubkey: string - La clave p\xFAblica de la cuenta codificada en base58
    • account: object - un objeto JSON, con los siguientes subcampos:
      • lamports: number - n\xFAmero de lamports asignado a la cuenta
      • owner: string - La clave p\xFAblica del programa al que se ha asignado la cuenta codificada en base58
      • data: string | object - datos asociados con la cuenta, ya sea como datos binarios o en formato JSON seg\xFAn el par\xE1metro de codificaci\xF3n proporcionado
      • executable: boolean - Indicaci\xF3n si la cuenta contiene un programa
      • rentEpoch: number - La \xE9poca en la que esta cuenta adeudar\xE1 alquiler
    ',3),en=n("h2",{id:"un-vistazo-mas-profundo",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#un-vistazo-mas-profundo","aria-hidden":"true"},"#"),s(" Un vistazo m\xE1s profundo")],-1),tn=n("p",null,[n("code",null,"getProgramAccounts"),s(" es un m\xE9todo RPC vers\xE1til que devuelve todas las cuentas propiedad de un programa. Podemos usar "),n("code",null,"getProgramAccounts"),s(" para una serie de consultas \xFAtiles, como encontrar:")],-1),on=n("li",null,"Todas las cuentas de token para una billetera en particular",-1),cn=s("Todas las cuentas para un mint en particular (ej. Todos los titulares (holders) de "),ln={href:"https://www.projectserum.com/",target:"_blank",rel:"noopener noreferrer"},pn=s("SRM"),un=s(")"),rn=s("Todas las cuentas para un programa en particular (ej. Todos los usuarios de "),mn={href:"https://mango.markets/",target:"_blank",rel:"noopener noreferrer"},bn=s("Mango"),kn=s(")"),dn=c("

    A pesar de su utilidad, getProgramAccounts a menudo se malinterpreta debido a sus limitaciones actuales. Muchas de las consultas admitidas por getProgramAccounts requieren nodos RPC para escanear grandes conjuntos de datos. Estos escaneos consumen muchos recursos y memoria. Como resultado, las llamadas que son demasiado frecuentes o de un alcance demasiado grande pueden provocar tiempos de espera mayores al permitido (timeouts). Adem\xE1s, en el momento de escribir este art\xEDculo, el extremo getProgramAccounts no admite la paginaci\xF3n. Si los resultados de una consulta son demasiado grandes, la respuesta se truncar\xE1.

    Para resolver temporalmente estas restricciones, getProgramAccounts ofrece una serie de par\xE1metros \xFAtiles: por ejemplo, dataSlice y las opciones de filtros memcmp y dataSize. Al proporcionar combinaciones de estos par\xE1metros, podemos reducir el alcance de nuestras consultas a tama\xF1os manejables y predecibles.

    ",2),fn=s("Un ejemplo com\xFAn de "),gn=n("code",null,"getProgramAccounts",-1),_n=s(" consiste en interactuar con el "),hn={href:"https://spl.solana.com/token",target:"_blank",rel:"noopener noreferrer"},yn=s("Programa de tokens SPL"),An=s(". Solicitar todas las cuentas propiedad del Programa Token con una "),wn=s("llamada b\xE1sica"),vn=s(" implicar\xEDa una enorme cantidad de datos. Sin embargo, al proporcionar par\xE1metros, podemos solicitar de manera eficiente solo los datos que pretendemos utilizar."),Cn=c('

    filters

    El par\xE1metro m\xE1s com\xFAn para usar con getProgramAccounts es la matriz filters. Esta matriz acepta dos tipos de filtros, dataSize y memcmp. Antes de usar cualquiera de estos filtros, debemos estar familiarizados con la forma en que se distribuyen y serializan los datos que solicitamos.

    dataSize

    ',3),Pn=s("En el caso del Programa Token (Token Program), podemos ver que "),Sn={href:"https://github.com/solana-labs/solana-program-library/blob/08d9999f997a8bf38719679be9d572f119d0d960/token/program/src/state.rs#L86-L106",target:"_blank",rel:"noopener noreferrer"},En=s("las cuentas de token tienen una longitud de 165 bytes"),Tn=s(". Espec\xEDficamente, una cuenta de token tiene ocho campos diferentes, y cada campo requiere una cantidad predecible de bytes. Podemos visualizar c\xF3mo se distribuyen estos datos usando la siguiente ilustraci\xF3n."),Dn=c('

    Tama\xF1o de la cuenta

    Si quisi\xE9ramos encontrar todas las cuentas de token que pertenecen a nuestra direcci\xF3n de billetera, podr\xEDamos agregar { dataSize: 165 } a nuestra matriz de filtros para limitar el alcance de nuestra consulta a solo cuentas que tengan exactamente 165 bytes de longitud. Esto solo, sin embargo, ser\xEDa insuficiente. Tambi\xE9n necesitar\xEDamos agregar un filtro que busque cuentas propiedad de nuestra direcci\xF3n. Podemos lograr esto con el filtro memcmp.

    memcmp

    El filtro memcmp, o filtro de "comparaci\xF3n de memoria", nos permite comparar datos en cualquier campo almacenado en nuestra cuenta. Espec\xEDficamente, solo podemos consultar cuentas que coincidan con un conjunto de bytes en una posici\xF3n espec\xEDfica. memcmp requiere dos argumentos:

    • offset: La posici\xF3n para comenzar a comparar datos. Esta posici\xF3n se mide en bytes y se expresa como un n\xFAmero entero.
    • bytes: Los datos que deben coincidir con los datos de la cuenta. Esto se representa como una cadena codificada en base 58 que debe limitarse a menos de 129 bytes.

    Es importante tener en cuenta que memcmp solo devolver\xE1 resultados que coincidan exactamente en bytes. Actualmente, no admite comparaciones de valores menores o mayores que los "bytes" que proporcionamos.

    De acuerdo con nuestro ejemplo del Programa de tokens, podemos modificar nuestra consulta para que solo devuelva las cuentas de tokens que pertenecen a nuestra direcci\xF3n de billetera. Al observar una cuenta de token, podemos ver que los dos primeros campos almacenados en una cuenta de token son claves p\xFAblicas y que cada clave p\xFAblica tiene una longitud de 32 bytes. Dado que owner es el segundo campo, deber\xEDamos comenzar nuestro memcmp en un offset de 32 bytes. A partir de aqu\xED, buscaremos cuentas cuyo campo de propietario coincida con la direcci\xF3n de nuestra billetera.

    Tama\xF1o de la cuenta

    Podemos hacer esta b\xFAsqueda utilizando el siguiente ejemplo:

    ',9),Nn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(),n("span",{class:"token constant"},"TOKEN_PROGRAM_ID"),s(),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/spl-token"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" clusterApiUrl"),n("span",{class:"token punctuation"},","),s(" Connection "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` diff --git a/docs/.vuepress/dist/assets/index.html.6fd36f57.js b/docs/.vuepress/dist/assets/index.html.012e7f00.js similarity index 97% rename from docs/.vuepress/dist/assets/index.html.6fd36f57.js rename to docs/.vuepress/dist/assets/index.html.012e7f00.js index 42686f448..b8b1ecd15 100644 --- a/docs/.vuepress/dist/assets/index.html.6fd36f57.js +++ b/docs/.vuepress/dist/assets/index.html.012e7f00.js @@ -1 +1 @@ -import{_ as s,r,o as a,c as i,a as e,b as n,F as c,d as o,e as d}from"./app.cfdf84e7.js";const l={},u=e("h1",{id:"solana-cookbook",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#solana-cookbook","aria-hidden":"true"},"#"),o(" Solana Cookbook")],-1),p=e("p",null,[e("em",null,"Solana Cookbook"),o(" une ressource pour les d\xE9veloppeurs qui fournit les concepts et r\xE9f\xE9rences essentiels pour cr\xE9er des applications sur Solana. Chaque concept et r\xE9f\xE9rence vont se concentrer sur des aspects sp\xE9cifiques du d\xE9veloppement de Solana tout en fournissant des d\xE9tails suppl\xE9mentaires et des exemples d'utilisation.")],-1),h=e("h2",{id:"contribution",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#contribution","aria-hidden":"true"},"#"),o(" Contribution")],-1),_=e("p",null,[e("em",null,"Solana Cookbook"),o(" est con\xE7u de mani\xE8re \xE0 permettre aux nouveaux d\xE9veloppeurs de Solana de contribuer facilement. M\xEAme si vous ne savez pas comment faire quelque chose, contribuer au Cookbook est un excellent moyen d'apprendre !")],-1),m=o("Consultez toutes les questions ouvertes "),b={href:"https://github.com/solana-developers/solana-cookbook/issues",target:"_blank",rel:"noopener noreferrer"},k=o("ici"),f=o(". Lignes directrices pour les contributions "),v={href:"https://github.com/solana-developers/solana-cookbook#contributing",target:"_blank",rel:"noopener noreferrer"},x=o("ici"),C=o(". Si vous trouvez qu'il manque une suggestion dans le Cookbook, veuillez ajouter une question."),S=d('

    Comment lire le Cookbook

    Le Solana Cookbook est divis\xE9 en diff\xE9rentes sections, chacune visant un objectif diff\xE9rent.

    SectionDescription
    Concepts FondamentauxLes \xE9l\xE9ments de base de Solana qu'il est bon de conna\xEEtre pour le d\xE9veloppement
    GuidesPetits guides sur les diff\xE9rents outils de d\xE9veloppement
    R\xE9f\xE9rencesR\xE9f\xE9rences aux extraits de code les plus couramment utilis\xE9s
    ',3);function g(q,L){const t=r("ExternalLinkIcon");return a(),i(c,null,[u,p,h,_,e("p",null,[m,e("a",b,[k,n(t)]),f,e("a",v,[x,n(t)]),C]),S],64)}var N=s(l,[["render",g]]);export{N as default}; +import{_ as s,r,o as a,c as i,a as e,b as n,F as c,d as o,e as d}from"./app.2fbb9e96.js";const l={},u=e("h1",{id:"solana-cookbook",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#solana-cookbook","aria-hidden":"true"},"#"),o(" Solana Cookbook")],-1),p=e("p",null,[e("em",null,"Solana Cookbook"),o(" une ressource pour les d\xE9veloppeurs qui fournit les concepts et r\xE9f\xE9rences essentiels pour cr\xE9er des applications sur Solana. Chaque concept et r\xE9f\xE9rence vont se concentrer sur des aspects sp\xE9cifiques du d\xE9veloppement de Solana tout en fournissant des d\xE9tails suppl\xE9mentaires et des exemples d'utilisation.")],-1),h=e("h2",{id:"contribution",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#contribution","aria-hidden":"true"},"#"),o(" Contribution")],-1),_=e("p",null,[e("em",null,"Solana Cookbook"),o(" est con\xE7u de mani\xE8re \xE0 permettre aux nouveaux d\xE9veloppeurs de Solana de contribuer facilement. M\xEAme si vous ne savez pas comment faire quelque chose, contribuer au Cookbook est un excellent moyen d'apprendre !")],-1),m=o("Consultez toutes les questions ouvertes "),b={href:"https://github.com/solana-developers/solana-cookbook/issues",target:"_blank",rel:"noopener noreferrer"},k=o("ici"),f=o(". Lignes directrices pour les contributions "),v={href:"https://github.com/solana-developers/solana-cookbook#contributing",target:"_blank",rel:"noopener noreferrer"},x=o("ici"),C=o(". Si vous trouvez qu'il manque une suggestion dans le Cookbook, veuillez ajouter une question."),S=d('

    Comment lire le Cookbook

    Le Solana Cookbook est divis\xE9 en diff\xE9rentes sections, chacune visant un objectif diff\xE9rent.

    SectionDescription
    Concepts FondamentauxLes \xE9l\xE9ments de base de Solana qu'il est bon de conna\xEEtre pour le d\xE9veloppement
    GuidesPetits guides sur les diff\xE9rents outils de d\xE9veloppement
    R\xE9f\xE9rencesR\xE9f\xE9rences aux extraits de code les plus couramment utilis\xE9s
    ',3);function g(q,L){const t=r("ExternalLinkIcon");return a(),i(c,null,[u,p,h,_,e("p",null,[m,e("a",b,[k,n(t)]),f,e("a",v,[x,n(t)]),C]),S],64)}var N=s(l,[["render",g]]);export{N as default}; diff --git a/docs/.vuepress/dist/assets/index.html.5e3fbbf4.js b/docs/.vuepress/dist/assets/index.html.0fa0c74e.js similarity index 97% rename from docs/.vuepress/dist/assets/index.html.5e3fbbf4.js rename to docs/.vuepress/dist/assets/index.html.0fa0c74e.js index 1065980bf..b710b7c53 100644 --- a/docs/.vuepress/dist/assets/index.html.5e3fbbf4.js +++ b/docs/.vuepress/dist/assets/index.html.0fa0c74e.js @@ -1 +1 @@ -import{_ as a,r as o,o as i,c as r,a as e,b as s,F as c,d as t,e as d}from"./app.cfdf84e7.js";const h={},l=e("h1",{id:"kochen-mit-solana",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#kochen-mit-solana","aria-hidden":"true"},"#"),t(" Kochen mit Solana")],-1),u=e("p",null,[t("Das "),e("em",null,"Solana Cookbook"),t(" ist eine Ressource f\xFCr Entwickler, die die wesentlichen Konzepte und Referenzen zum Entwickeln von Anwendungen auf Solana bietet. Jedes Konzept und Referenz wird sich auf bestimmte Aspekte von Solana Development konzentrieren, und zeitgleich zus\xE4tzliche Details und Beispiele zur Verwendung bereitstellt.")],-1),_=e("h2",{id:"beitragen",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#beitragen","aria-hidden":"true"},"#"),t(" Beitragen")],-1),b=e("p",null,"Das Kochbuch ist so gestaltet, dass es f\xFCr neue Solana-Entwickler einfach ist zum \xD6kosystem beizutragen. Selbst wenn du nichts wei\xDFt, ist etwas dem Solana Kochbuch beizutragen, eine gute Lernquelle!",-1),m=t('Entdecke alle offenen Probleme "Issues" '),f={href:"https://github.com/solana-developers/solana-cookbook/issues",target:"_blank",rel:"noopener noreferrer"},k=t("hier"),g=t(". Beitragsrichtlinien "),p={href:"https://github.com/solana-developers/solana-cookbook#contributing",target:"_blank",rel:"noopener noreferrer"},w=t("hier"),z=t('. Wenn dir etwas im Kochbuch fehlt, erstelle bitte ein neues Problem "Issue".'),S=d('

    Wie man das Kochbuch liest

    Das Solana Kochbuch ist in verschiedene Sektionen aufgeteilt - alle abgestimmt auf ein anderes Ziel.

    SektionBeschreibung
    Kern-PrinzipienBausteine \u200B\u200Bvon Solana, die f\xFCr die Entwicklung gut zu wissen sind
    F\xFChrerLeitf\xE4den in H\xE4\xE4pchengr\xF6\xDFe zu verschiedenen Tools zum Entwickeln
    VerweiseVerweise auf h\xE4ufig ben\xF6tigte Codeausschnitte
    ',3);function v(x,E){const n=o("ExternalLinkIcon");return i(),r(c,null,[l,u,_,b,e("p",null,[m,e("a",f,[k,s(n)]),g,e("a",p,[w,s(n)]),z]),S],64)}var B=a(h,[["render",v]]);export{B as default}; +import{_ as a,r as o,o as i,c as r,a as e,b as s,F as c,d as t,e as d}from"./app.2fbb9e96.js";const h={},l=e("h1",{id:"kochen-mit-solana",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#kochen-mit-solana","aria-hidden":"true"},"#"),t(" Kochen mit Solana")],-1),u=e("p",null,[t("Das "),e("em",null,"Solana Cookbook"),t(" ist eine Ressource f\xFCr Entwickler, die die wesentlichen Konzepte und Referenzen zum Entwickeln von Anwendungen auf Solana bietet. Jedes Konzept und Referenz wird sich auf bestimmte Aspekte von Solana Development konzentrieren, und zeitgleich zus\xE4tzliche Details und Beispiele zur Verwendung bereitstellt.")],-1),_=e("h2",{id:"beitragen",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#beitragen","aria-hidden":"true"},"#"),t(" Beitragen")],-1),b=e("p",null,"Das Kochbuch ist so gestaltet, dass es f\xFCr neue Solana-Entwickler einfach ist zum \xD6kosystem beizutragen. Selbst wenn du nichts wei\xDFt, ist etwas dem Solana Kochbuch beizutragen, eine gute Lernquelle!",-1),m=t('Entdecke alle offenen Probleme "Issues" '),f={href:"https://github.com/solana-developers/solana-cookbook/issues",target:"_blank",rel:"noopener noreferrer"},k=t("hier"),g=t(". Beitragsrichtlinien "),p={href:"https://github.com/solana-developers/solana-cookbook#contributing",target:"_blank",rel:"noopener noreferrer"},w=t("hier"),z=t('. Wenn dir etwas im Kochbuch fehlt, erstelle bitte ein neues Problem "Issue".'),S=d('

    Wie man das Kochbuch liest

    Das Solana Kochbuch ist in verschiedene Sektionen aufgeteilt - alle abgestimmt auf ein anderes Ziel.

    SektionBeschreibung
    Kern-PrinzipienBausteine \u200B\u200Bvon Solana, die f\xFCr die Entwicklung gut zu wissen sind
    F\xFChrerLeitf\xE4den in H\xE4\xE4pchengr\xF6\xDFe zu verschiedenen Tools zum Entwickeln
    VerweiseVerweise auf h\xE4ufig ben\xF6tigte Codeausschnitte
    ',3);function v(x,E){const n=o("ExternalLinkIcon");return i(),r(c,null,[l,u,_,b,e("p",null,[m,e("a",f,[k,s(n)]),g,e("a",p,[w,s(n)]),z]),S],64)}var B=a(h,[["render",v]]);export{B as default}; diff --git a/docs/.vuepress/dist/assets/index.html.092a4e8b.js b/docs/.vuepress/dist/assets/index.html.147cb94b.js similarity index 95% rename from docs/.vuepress/dist/assets/index.html.092a4e8b.js rename to docs/.vuepress/dist/assets/index.html.147cb94b.js index 58b50919c..34d8bd315 100644 --- a/docs/.vuepress/dist/assets/index.html.092a4e8b.js +++ b/docs/.vuepress/dist/assets/index.html.147cb94b.js @@ -1 +1 @@ -import{_ as a,r as n,o as r,c as i,a as o,b as s,F as c,e as d,d as e}from"./app.cfdf84e7.js";const l={},h=d('

    Getting Started with Integrations

    The Solana Cookbook integrations provides a set of examples and references for anyone to build on top of other protocols on Solana.

    The power of Solana comes from the ability to integrate with other protocols, building on top of existing infrastructure to make something better.

    Composability is Key

    Making your program easy to use and extend will grow both your program and the entire Solana ecosystem. Don't reinvent the wheel, build on top of existing protocols and bootstrap your userbase.

    Adapt and build on top of other programs or libraries and unlock new capabilities for Solana.

    Contributing

    ',7),p=e("If you are interested in contributing to integrations, please checkout the "),b={href:"https://github.com/solana-developers/solana-cookbook/blob/master/CONTRIBUTING.md",target:"_blank",rel:"noopener noreferrer"},u=e("contribution guidelines"),g=e(".");function f(m,_){const t=n("ExternalLinkIcon");return r(),i(c,null,[h,o("p",null,[p,o("a",b,[u,s(t)]),g])],64)}var x=a(l,[["render",f]]);export{x as default}; +import{_ as a,r as n,o as r,c as i,a as o,b as s,F as c,e as d,d as e}from"./app.2fbb9e96.js";const l={},h=d('

    Getting Started with Integrations

    The Solana Cookbook integrations provides a set of examples and references for anyone to build on top of other protocols on Solana.

    The power of Solana comes from the ability to integrate with other protocols, building on top of existing infrastructure to make something better.

    Composability is Key

    Making your program easy to use and extend will grow both your program and the entire Solana ecosystem. Don't reinvent the wheel, build on top of existing protocols and bootstrap your userbase.

    Adapt and build on top of other programs or libraries and unlock new capabilities for Solana.

    Contributing

    ',7),p=e("If you are interested in contributing to integrations, please checkout the "),b={href:"https://github.com/solana-developers/solana-cookbook/blob/master/CONTRIBUTING.md",target:"_blank",rel:"noopener noreferrer"},u=e("contribution guidelines"),g=e(".");function f(m,_){const t=n("ExternalLinkIcon");return r(),i(c,null,[h,o("p",null,[p,o("a",b,[u,s(t)]),g])],64)}var x=a(l,[["render",f]]);export{x as default}; diff --git a/docs/.vuepress/dist/assets/index.html.82721a2d.js b/docs/.vuepress/dist/assets/index.html.260ddcc4.js similarity index 97% rename from docs/.vuepress/dist/assets/index.html.82721a2d.js rename to docs/.vuepress/dist/assets/index.html.260ddcc4.js index 5d990671e..2d7f82a99 100644 --- a/docs/.vuepress/dist/assets/index.html.82721a2d.js +++ b/docs/.vuepress/dist/assets/index.html.260ddcc4.js @@ -1 +1 @@ -import{_ as n,r as s,o as t,c as d,a as e,b as r,F as c,d as o,e as i}from"./app.cfdf84e7.js";const l={},u=e("h1",{id:"libro-de-recetas-de-solana",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#libro-de-recetas-de-solana","aria-hidden":"true"},"#"),o(" Libro de recetas de Solana")],-1),h=e("p",null,"Solana Cookbook es un recurso para desarrolladores. Brinda conceptos esenciales y referencias para desarrollar aplicaciones en Solana. Cada concepto y referencia se enfocar\xE1 en aspectos espec\xEDficos del desarrollo en Solana brindando detalles adicionales y ejemplos de uso.",-1),b=e("h2",{id:"contribuyendo",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#contribuyendo","aria-hidden":"true"},"#"),o(" Contribuyendo")],-1),_=e("p",null,"Solana Cookbook esta dise\xF1ado de tal forma que hace f\xE1cil que nuevos desarrolladores de Solana puedan contribuir. Incluso si no sabes c\xF3mo hacer algo \xA1contribuir al Cookbook es una gran manera de aprender!",-1),p=o("Revisa todos los issues abiertos "),f={href:"https://github.com/solana-developers/solana-cookbook/issues",target:"_blank",rel:"noopener noreferrer"},k=o("ac\xE1"),m=o(". Las gu\xEDas de contribuci\xF3n "),g={href:"https://github.com/solana-developers/solana-cookbook#contributing",target:"_blank",rel:"noopener noreferrer"},C=o("ac\xE1"),x=o(". Si encuentras que el Cookbook le falta una sugerencia, por favor agrega un issue."),S=i('

    Como Leer el Cookbook

    El Cookbok de Solana esta dividido en diferentes secciones, cada una con un objetivo diferente.

    secci\xF3ndescripci\xF3n
    Conceptos BaseLos fundamentos de Solana que son buenos conocer para desarrollar
    Gu\xEDasPeque\xF1as gu\xEDas sobre diferentes herramientas para desarrollar
    ReferenciasReferencias a snippets de c\xF3digo comunmente necesarios
    ',3);function v(y,L){const a=s("ExternalLinkIcon");return t(),d(c,null,[u,h,b,_,e("p",null,[p,e("a",f,[k,r(a)]),m,e("a",g,[C,r(a)]),x]),S],64)}var B=n(l,[["render",v]]);export{B as default}; +import{_ as n,r as s,o as t,c as d,a as e,b as r,F as c,d as o,e as i}from"./app.2fbb9e96.js";const l={},u=e("h1",{id:"libro-de-recetas-de-solana",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#libro-de-recetas-de-solana","aria-hidden":"true"},"#"),o(" Libro de recetas de Solana")],-1),h=e("p",null,"Solana Cookbook es un recurso para desarrolladores. Brinda conceptos esenciales y referencias para desarrollar aplicaciones en Solana. Cada concepto y referencia se enfocar\xE1 en aspectos espec\xEDficos del desarrollo en Solana brindando detalles adicionales y ejemplos de uso.",-1),b=e("h2",{id:"contribuyendo",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#contribuyendo","aria-hidden":"true"},"#"),o(" Contribuyendo")],-1),_=e("p",null,"Solana Cookbook esta dise\xF1ado de tal forma que hace f\xE1cil que nuevos desarrolladores de Solana puedan contribuir. Incluso si no sabes c\xF3mo hacer algo \xA1contribuir al Cookbook es una gran manera de aprender!",-1),p=o("Revisa todos los issues abiertos "),f={href:"https://github.com/solana-developers/solana-cookbook/issues",target:"_blank",rel:"noopener noreferrer"},k=o("ac\xE1"),m=o(". Las gu\xEDas de contribuci\xF3n "),g={href:"https://github.com/solana-developers/solana-cookbook#contributing",target:"_blank",rel:"noopener noreferrer"},C=o("ac\xE1"),x=o(". Si encuentras que el Cookbook le falta una sugerencia, por favor agrega un issue."),S=i('

    Como Leer el Cookbook

    El Cookbok de Solana esta dividido en diferentes secciones, cada una con un objetivo diferente.

    secci\xF3ndescripci\xF3n
    Conceptos BaseLos fundamentos de Solana que son buenos conocer para desarrollar
    Gu\xEDasPeque\xF1as gu\xEDas sobre diferentes herramientas para desarrollar
    ReferenciasReferencias a snippets de c\xF3digo comunmente necesarios
    ',3);function v(y,L){const a=s("ExternalLinkIcon");return t(),d(c,null,[u,h,b,_,e("p",null,[p,e("a",f,[k,r(a)]),m,e("a",g,[C,r(a)]),x]),S],64)}var B=n(l,[["render",v]]);export{B as default}; diff --git a/docs/.vuepress/dist/assets/index.html.10417c8b.js b/docs/.vuepress/dist/assets/index.html.34ecc93b.js similarity index 97% rename from docs/.vuepress/dist/assets/index.html.10417c8b.js rename to docs/.vuepress/dist/assets/index.html.34ecc93b.js index 9421eb857..e328f026a 100644 --- a/docs/.vuepress/dist/assets/index.html.10417c8b.js +++ b/docs/.vuepress/dist/assets/index.html.34ecc93b.js @@ -1 +1 @@ -import{_ as n,r as t,o as i,c as l,a,b as r,F as s,d as e,e as k}from"./app.cfdf84e7.js";const d={},c=a("h1",{id:"solana-cookbook",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#solana-cookbook","aria-hidden":"true"},"#"),e(" Solana Cookbook")],-1),b=a("p",null,[a("em",null,"Solana Cookbook"),e(", Solana'da uygulamalar olu\u015Fturmak i\xE7in temel kavramlar\u0131 ve referanslar\u0131 sa\u011Flayan bir geli\u015Ftirici kayna\u011F\u0131d\u0131r. Her kavram ve referans, ek ayr\u0131nt\u0131lar ve kullan\u0131m \xF6rnekleri sa\u011Flarken Solana kullanarak geli\u015Ftirme yapman\u0131n belirli y\xF6nlerine odaklanacakt\u0131r.")],-1),h=a("h2",{id:"contributing-nas\u0131l-katk\u0131-verebilirsiniz",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#contributing-nas\u0131l-katk\u0131-verebilirsiniz","aria-hidden":"true"},"#"),e(" Contributing (Nas\u0131l Katk\u0131 Verebilirsiniz?)")],-1),u=a("p",null,[a("em",null,"Solana Cookbook"),e(", yeni Solana geli\u015Ftiricilerinin katk\u0131da bulunmas\u0131n\u0131 kolayla\u015Ft\u0131racak \u015Fekilde tasarlanm\u0131\u015Ft\u0131r. Bir \u015Feyi nas\u0131l yapaca\u011F\u0131n\u0131z\u0131 bilmiyor olsan\u0131z bile, Solana Cookbook\u2019a katk\u0131da bulunmak \xF6\u011Frenmenin harika bir yoludur!")],-1),m=e("T\xFCm a\xE7\u0131k konulara "),_={href:"https://github.com/solana-developers/solana-cookbook/issues",target:"_blank",rel:"noopener noreferrer"},y=e("buradan"),p=e(" g\xF6z atabilir, katk\u0131 y\xF6nergelerine "),f={href:"https://github.com/solana-developers/solana-cookbook#contributing",target:"_blank",rel:"noopener noreferrer"},g=e("buradan"),v=e(" ula\u015Fabilirsiniz. Solana Cookbook\u2019da bir \xF6nerinin eksik oldu\u011Funu fark ederseniz, l\xFCtfen yeni bir issue olu\u015Fturun."),S=k('

    How to Read the Cookbook (Cookbook Nas\u0131l Okunur?)

    Solana Cookbook, her biri farkl\u0131 bir amaca y\xF6nelik farkl\u0131 b\xF6l\xFCmlere ayr\u0131lm\u0131\u015Ft\u0131r.

    B\xF6l\xFCmA\xE7\u0131klama
    Temel KavramlarSolana\u2019da geli\u015Ftirme yapmak i\xE7in bilinmesi tavsiye edilen Solana yap\u0131 ta\u015Flar\u0131
    RehberGeli\u015Ftirme yapmak i\xE7in \xE7e\u015Fitli ara\xE7lar hakk\u0131nda hap bilgileri i\xE7eren k\u0131lavuzlar
    ReferanslarYayg\u0131n olarak ihtiya\xE7 duyulan kod par\xE7alar\u0131 i\xE7in referanslar
    ',3);function x(C,z){const o=t("ExternalLinkIcon");return i(),l(s,null,[c,b,h,u,a("p",null,[m,a("a",_,[y,r(o)]),p,a("a",f,[g,r(o)]),v]),S],64)}var B=n(d,[["render",x]]);export{B as default}; +import{_ as n,r as t,o as i,c as l,a,b as r,F as s,d as e,e as k}from"./app.2fbb9e96.js";const d={},c=a("h1",{id:"solana-cookbook",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#solana-cookbook","aria-hidden":"true"},"#"),e(" Solana Cookbook")],-1),b=a("p",null,[a("em",null,"Solana Cookbook"),e(", Solana'da uygulamalar olu\u015Fturmak i\xE7in temel kavramlar\u0131 ve referanslar\u0131 sa\u011Flayan bir geli\u015Ftirici kayna\u011F\u0131d\u0131r. Her kavram ve referans, ek ayr\u0131nt\u0131lar ve kullan\u0131m \xF6rnekleri sa\u011Flarken Solana kullanarak geli\u015Ftirme yapman\u0131n belirli y\xF6nlerine odaklanacakt\u0131r.")],-1),h=a("h2",{id:"contributing-nas\u0131l-katk\u0131-verebilirsiniz",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#contributing-nas\u0131l-katk\u0131-verebilirsiniz","aria-hidden":"true"},"#"),e(" Contributing (Nas\u0131l Katk\u0131 Verebilirsiniz?)")],-1),u=a("p",null,[a("em",null,"Solana Cookbook"),e(", yeni Solana geli\u015Ftiricilerinin katk\u0131da bulunmas\u0131n\u0131 kolayla\u015Ft\u0131racak \u015Fekilde tasarlanm\u0131\u015Ft\u0131r. Bir \u015Feyi nas\u0131l yapaca\u011F\u0131n\u0131z\u0131 bilmiyor olsan\u0131z bile, Solana Cookbook\u2019a katk\u0131da bulunmak \xF6\u011Frenmenin harika bir yoludur!")],-1),m=e("T\xFCm a\xE7\u0131k konulara "),_={href:"https://github.com/solana-developers/solana-cookbook/issues",target:"_blank",rel:"noopener noreferrer"},y=e("buradan"),p=e(" g\xF6z atabilir, katk\u0131 y\xF6nergelerine "),f={href:"https://github.com/solana-developers/solana-cookbook#contributing",target:"_blank",rel:"noopener noreferrer"},g=e("buradan"),v=e(" ula\u015Fabilirsiniz. Solana Cookbook\u2019da bir \xF6nerinin eksik oldu\u011Funu fark ederseniz, l\xFCtfen yeni bir issue olu\u015Fturun."),S=k('

    How to Read the Cookbook (Cookbook Nas\u0131l Okunur?)

    Solana Cookbook, her biri farkl\u0131 bir amaca y\xF6nelik farkl\u0131 b\xF6l\xFCmlere ayr\u0131lm\u0131\u015Ft\u0131r.

    B\xF6l\xFCmA\xE7\u0131klama
    Temel KavramlarSolana\u2019da geli\u015Ftirme yapmak i\xE7in bilinmesi tavsiye edilen Solana yap\u0131 ta\u015Flar\u0131
    RehberGeli\u015Ftirme yapmak i\xE7in \xE7e\u015Fitli ara\xE7lar hakk\u0131nda hap bilgileri i\xE7eren k\u0131lavuzlar
    ReferanslarYayg\u0131n olarak ihtiya\xE7 duyulan kod par\xE7alar\u0131 i\xE7in referanslar
    ',3);function x(C,z){const o=t("ExternalLinkIcon");return i(),l(s,null,[c,b,h,u,a("p",null,[m,a("a",_,[y,r(o)]),p,a("a",f,[g,r(o)]),v]),S],64)}var B=n(d,[["render",x]]);export{B as default}; diff --git a/docs/.vuepress/dist/assets/index.html.d31f668a.js b/docs/.vuepress/dist/assets/index.html.4dda40ff.js similarity index 95% rename from docs/.vuepress/dist/assets/index.html.d31f668a.js rename to docs/.vuepress/dist/assets/index.html.4dda40ff.js index 58b50919c..34d8bd315 100644 --- a/docs/.vuepress/dist/assets/index.html.d31f668a.js +++ b/docs/.vuepress/dist/assets/index.html.4dda40ff.js @@ -1 +1 @@ -import{_ as a,r as n,o as r,c as i,a as o,b as s,F as c,e as d,d as e}from"./app.cfdf84e7.js";const l={},h=d('

    Getting Started with Integrations

    The Solana Cookbook integrations provides a set of examples and references for anyone to build on top of other protocols on Solana.

    The power of Solana comes from the ability to integrate with other protocols, building on top of existing infrastructure to make something better.

    Composability is Key

    Making your program easy to use and extend will grow both your program and the entire Solana ecosystem. Don't reinvent the wheel, build on top of existing protocols and bootstrap your userbase.

    Adapt and build on top of other programs or libraries and unlock new capabilities for Solana.

    Contributing

    ',7),p=e("If you are interested in contributing to integrations, please checkout the "),b={href:"https://github.com/solana-developers/solana-cookbook/blob/master/CONTRIBUTING.md",target:"_blank",rel:"noopener noreferrer"},u=e("contribution guidelines"),g=e(".");function f(m,_){const t=n("ExternalLinkIcon");return r(),i(c,null,[h,o("p",null,[p,o("a",b,[u,s(t)]),g])],64)}var x=a(l,[["render",f]]);export{x as default}; +import{_ as a,r as n,o as r,c as i,a as o,b as s,F as c,e as d,d as e}from"./app.2fbb9e96.js";const l={},h=d('

    Getting Started with Integrations

    The Solana Cookbook integrations provides a set of examples and references for anyone to build on top of other protocols on Solana.

    The power of Solana comes from the ability to integrate with other protocols, building on top of existing infrastructure to make something better.

    Composability is Key

    Making your program easy to use and extend will grow both your program and the entire Solana ecosystem. Don't reinvent the wheel, build on top of existing protocols and bootstrap your userbase.

    Adapt and build on top of other programs or libraries and unlock new capabilities for Solana.

    Contributing

    ',7),p=e("If you are interested in contributing to integrations, please checkout the "),b={href:"https://github.com/solana-developers/solana-cookbook/blob/master/CONTRIBUTING.md",target:"_blank",rel:"noopener noreferrer"},u=e("contribution guidelines"),g=e(".");function f(m,_){const t=n("ExternalLinkIcon");return r(),i(c,null,[h,o("p",null,[p,o("a",b,[u,s(t)]),g])],64)}var x=a(l,[["render",f]]);export{x as default}; diff --git a/docs/.vuepress/dist/assets/index.html.88cacb56.js b/docs/.vuepress/dist/assets/index.html.6b2e93b1.js similarity index 97% rename from docs/.vuepress/dist/assets/index.html.88cacb56.js rename to docs/.vuepress/dist/assets/index.html.6b2e93b1.js index 81db6380b..e7001aed1 100644 --- a/docs/.vuepress/dist/assets/index.html.88cacb56.js +++ b/docs/.vuepress/dist/assets/index.html.6b2e93b1.js @@ -1 +1 @@ -import{_ as o,r as n,o as s,c as r,a,b as d,F as l,d as e,e as c}from"./app.cfdf84e7.js";const h={},i=a("h1",{id:"solana\u79D8\u7C4D",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#solana\u79D8\u7C4D","aria-hidden":"true"},"#"),e(" Solana\u79D8\u7C4D")],-1),_=a("p",null,"\u300ASolana\u79D8\u7C4D\u300B\u529B\u56FE\u4E3A\u4F60\u63D0\u4F9B\u5728Solana\u516C\u94FE\u4E0A\u7F16\u5199\u53BB\u4E2D\u5FC3\u5316\u5E94\u7528\u6240\u9700\u7684\u6838\u5FC3\u6982\u5FF5\u3001 \u53C2\u8003\u3002 \u6BCF\u4E2A\u6982\u5FF5\u548C\u53C2\u8003\u90FD\u4F1A\u805A\u7126\u4E8ESolana\u5F00\u53D1\u4E2D\u7684\u67D0\u4E2A\u5177\u4F53\u65B9\u9762\uFF0C\u540C\u65F6\u63D0\u4F9B\u989D\u5916\u7684\u6280\u672F\u7EC6\u8282\u4EE5\u53CA\u7528\u4F8B\u3002",-1),p=a("h2",{id:"\u8D21\u732E\u4EE3\u7801",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#\u8D21\u732E\u4EE3\u7801","aria-hidden":"true"},"#"),e(" \u8D21\u732E\u4EE3\u7801")],-1),u=a("p",null,"Solana\u79D8\u7C4D\u7684\u8BBE\u8BA1\u529B\u56FE\u8BA9\u65B0\u7684Solana\u5F00\u53D1\u8005\u4E5F\u80FD\u5BB9\u6613\u7684\u8D21\u732E\u4EE3\u7801\u3002 \u5373\u4F7F\u4F60\u8FD8\u4E0D\u592A\u4E86\u89E3\u5982\u4F55\u505A\u9879\u76EE\uFF0C\u8D21\u732E\u4EE3\u7801\u4E5F\u662F\u4E00\u4E2A\u5F88\u597D\u7684\u5B66\u4E60\u8FC7\u7A0B\uFF01",-1),b={href:"https://github.com/solana-developers/solana-cookbook/issues",target:"_blank",rel:"noopener noreferrer"},f=e("\u8FD9\u91CC"),x=e(" \u53EF\u4EE5\u67E5\u770B\u6240\u6709\u5F85\u89E3\u51B3\u7684issue\u3002"),S=c('

    \u5982\u679C\u4F60\u89C9\u5F97\u8FD8\u6709\u5176\u4ED6\u54EA\u4E9B\u5EFA\u8BAE\uFF0C\u53EF\u4EE5\u65B0\u5EFA\u4E00\u4E2Aissue.

    \u5982\u4F55\u9605\u8BFBSolana\u79D8\u7C4D

    Solana\u79D8\u7C4D\u5206\u4E3A\u4E0D\u540C\u7684\u7AE0\u8282\u3002\u6BCF\u4E2A\u7AE0\u8282\u90FD\u6709\u4E0D\u540C\u7684\u76EE\u6807\u3002

    \u7AE0\u8282\u63CF\u8FF0
    \u6838\u5FC3\u6982\u5FF5Solana\u7684\u57FA\u7840\u5143\u7D20\u3002\u5F00\u53D1\u8005\u6700\u597D\u80FD\u4E86\u89E3\u8FD9\u4E9B\u5185\u5BB9\u3002
    \u6307\u5357\u5173\u4E8E\u5F00\u53D1\u4E2D\u6240\u80FD\u7528\u5230\u7684\u5DE5\u5177\u7684\u7B80\u8981\u4ECB\u7ECD\u3002
    \u53C2\u8003\u5E38\u7528\u7684\u4EE3\u7801\u7247\u6BB5\u53C2\u8003
    ',4);function m(k,N){const t=n("ExternalLinkIcon");return s(),r(l,null,[i,_,p,u,a("p",null,[a("a",b,[f,d(t)]),x]),S],64)}var g=o(h,[["render",m]]);export{g as default}; +import{_ as o,r as n,o as s,c as r,a,b as d,F as l,d as e,e as c}from"./app.2fbb9e96.js";const h={},i=a("h1",{id:"solana\u79D8\u7C4D",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#solana\u79D8\u7C4D","aria-hidden":"true"},"#"),e(" Solana\u79D8\u7C4D")],-1),_=a("p",null,"\u300ASolana\u79D8\u7C4D\u300B\u529B\u56FE\u4E3A\u4F60\u63D0\u4F9B\u5728Solana\u516C\u94FE\u4E0A\u7F16\u5199\u53BB\u4E2D\u5FC3\u5316\u5E94\u7528\u6240\u9700\u7684\u6838\u5FC3\u6982\u5FF5\u3001 \u53C2\u8003\u3002 \u6BCF\u4E2A\u6982\u5FF5\u548C\u53C2\u8003\u90FD\u4F1A\u805A\u7126\u4E8ESolana\u5F00\u53D1\u4E2D\u7684\u67D0\u4E2A\u5177\u4F53\u65B9\u9762\uFF0C\u540C\u65F6\u63D0\u4F9B\u989D\u5916\u7684\u6280\u672F\u7EC6\u8282\u4EE5\u53CA\u7528\u4F8B\u3002",-1),p=a("h2",{id:"\u8D21\u732E\u4EE3\u7801",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#\u8D21\u732E\u4EE3\u7801","aria-hidden":"true"},"#"),e(" \u8D21\u732E\u4EE3\u7801")],-1),u=a("p",null,"Solana\u79D8\u7C4D\u7684\u8BBE\u8BA1\u529B\u56FE\u8BA9\u65B0\u7684Solana\u5F00\u53D1\u8005\u4E5F\u80FD\u5BB9\u6613\u7684\u8D21\u732E\u4EE3\u7801\u3002 \u5373\u4F7F\u4F60\u8FD8\u4E0D\u592A\u4E86\u89E3\u5982\u4F55\u505A\u9879\u76EE\uFF0C\u8D21\u732E\u4EE3\u7801\u4E5F\u662F\u4E00\u4E2A\u5F88\u597D\u7684\u5B66\u4E60\u8FC7\u7A0B\uFF01",-1),b={href:"https://github.com/solana-developers/solana-cookbook/issues",target:"_blank",rel:"noopener noreferrer"},f=e("\u8FD9\u91CC"),x=e(" \u53EF\u4EE5\u67E5\u770B\u6240\u6709\u5F85\u89E3\u51B3\u7684issue\u3002"),S=c('

    \u5982\u679C\u4F60\u89C9\u5F97\u8FD8\u6709\u5176\u4ED6\u54EA\u4E9B\u5EFA\u8BAE\uFF0C\u53EF\u4EE5\u65B0\u5EFA\u4E00\u4E2Aissue.

    \u5982\u4F55\u9605\u8BFBSolana\u79D8\u7C4D

    Solana\u79D8\u7C4D\u5206\u4E3A\u4E0D\u540C\u7684\u7AE0\u8282\u3002\u6BCF\u4E2A\u7AE0\u8282\u90FD\u6709\u4E0D\u540C\u7684\u76EE\u6807\u3002

    \u7AE0\u8282\u63CF\u8FF0
    \u6838\u5FC3\u6982\u5FF5Solana\u7684\u57FA\u7840\u5143\u7D20\u3002\u5F00\u53D1\u8005\u6700\u597D\u80FD\u4E86\u89E3\u8FD9\u4E9B\u5185\u5BB9\u3002
    \u6307\u5357\u5173\u4E8E\u5F00\u53D1\u4E2D\u6240\u80FD\u7528\u5230\u7684\u5DE5\u5177\u7684\u7B80\u8981\u4ECB\u7ECD\u3002
    \u53C2\u8003\u5E38\u7528\u7684\u4EE3\u7801\u7247\u6BB5\u53C2\u8003
    ',4);function m(k,N){const t=n("ExternalLinkIcon");return s(),r(l,null,[i,_,p,u,a("p",null,[a("a",b,[f,d(t)]),x]),S],64)}var g=o(h,[["render",m]]);export{g as default}; diff --git a/docs/.vuepress/dist/assets/index.html.a23efb61.js b/docs/.vuepress/dist/assets/index.html.700f6b24.js similarity index 97% rename from docs/.vuepress/dist/assets/index.html.a23efb61.js rename to docs/.vuepress/dist/assets/index.html.700f6b24.js index d38a259af..58833f98c 100644 --- a/docs/.vuepress/dist/assets/index.html.a23efb61.js +++ b/docs/.vuepress/dist/assets/index.html.700f6b24.js @@ -1 +1 @@ -import{_ as u,r,o,c as d,a,b as t,F as i,d as n,e as s}from"./app.cfdf84e7.js";const k={},b=a("h1",{id:"menggunakan-buku-panduan-solana",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#menggunakan-buku-panduan-solana","aria-hidden":"true"},"#"),n(" Menggunakan buku panduan Solana")],-1),c=a("p",null,"Buku panduan Solana adalah sumber daya pengembang yang memberikan konsep penting dan referensi untuk membangun aplikasi di Solana. Setiap konsep dan referensi akan fokus kepada aspek spesifik pada bidang pengembangan Solana sekaligus memberikan detail-detail dan contoh cara penggunaannya.",-1),l=a("h2",{id:"cara-untuk-berkontribusi",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#cara-untuk-berkontribusi","aria-hidden":"true"},"#"),n(" Cara untuk berkontribusi")],-1),h=a("p",null,"Buku panduan Solana dirancang dengan cara yang bertujuan untuk memudahkan pengembang solana yang baru untuk berkontribusi. Bahkan jika anda ingin tahu cara untuk melakukan sesuatu, berkontribusi pada buku panduan Solana adalah cara yang baik untuk belajar.",-1),g=n("Cek link berikut untuk lihat semua issue yang masih aktif"),m={href:"https://github.com/solana-developers/solana-cookbook/issues",target:"_blank",rel:"noopener noreferrer"},p=n("here"),_=n(". Pedoman untuk berkontribusi "),f={href:"https://github.com/solana-developers/solana-cookbook#contributing",target:"_blank",rel:"noopener noreferrer"},y=n("here"),S=n(". Jika kamu menemukan saran yang tidak ada di buku panduan, tolong untuk menambahkan laporan isu terkait."),x=s('

    Cara untuk membaca Buku Panduan

    Buku Panduan Solana dibagi menjadi beberapa bagian yang berbeda, masing-masing ditujukan untuk tujuan yang berbeda.

    SectionDescription
    Konsep UtamaMembangun blocks Solana yang bagus untuk diketahui untuk pengembangan
    PanduanPanduan detail tentang beragam tools yang berbeda untuk pengembangan
    ReferensiReferensi untuk cuplikan kode yang umum dibutuhkan untuk pengembangan
    ',3);function B(j,P){const e=r("ExternalLinkIcon");return o(),d(i,null,[b,c,l,h,a("p",null,[g,a("a",m,[p,t(e)]),_,a("a",f,[y,t(e)]),S]),x],64)}var C=u(k,[["render",B]]);export{C as default}; +import{_ as u,r,o,c as d,a,b as t,F as i,d as n,e as s}from"./app.2fbb9e96.js";const k={},b=a("h1",{id:"menggunakan-buku-panduan-solana",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#menggunakan-buku-panduan-solana","aria-hidden":"true"},"#"),n(" Menggunakan buku panduan Solana")],-1),c=a("p",null,"Buku panduan Solana adalah sumber daya pengembang yang memberikan konsep penting dan referensi untuk membangun aplikasi di Solana. Setiap konsep dan referensi akan fokus kepada aspek spesifik pada bidang pengembangan Solana sekaligus memberikan detail-detail dan contoh cara penggunaannya.",-1),l=a("h2",{id:"cara-untuk-berkontribusi",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#cara-untuk-berkontribusi","aria-hidden":"true"},"#"),n(" Cara untuk berkontribusi")],-1),h=a("p",null,"Buku panduan Solana dirancang dengan cara yang bertujuan untuk memudahkan pengembang solana yang baru untuk berkontribusi. Bahkan jika anda ingin tahu cara untuk melakukan sesuatu, berkontribusi pada buku panduan Solana adalah cara yang baik untuk belajar.",-1),g=n("Cek link berikut untuk lihat semua issue yang masih aktif"),m={href:"https://github.com/solana-developers/solana-cookbook/issues",target:"_blank",rel:"noopener noreferrer"},p=n("here"),_=n(". Pedoman untuk berkontribusi "),f={href:"https://github.com/solana-developers/solana-cookbook#contributing",target:"_blank",rel:"noopener noreferrer"},y=n("here"),S=n(". Jika kamu menemukan saran yang tidak ada di buku panduan, tolong untuk menambahkan laporan isu terkait."),x=s('

    Cara untuk membaca Buku Panduan

    Buku Panduan Solana dibagi menjadi beberapa bagian yang berbeda, masing-masing ditujukan untuk tujuan yang berbeda.

    SectionDescription
    Konsep UtamaMembangun blocks Solana yang bagus untuk diketahui untuk pengembangan
    PanduanPanduan detail tentang beragam tools yang berbeda untuk pengembangan
    ReferensiReferensi untuk cuplikan kode yang umum dibutuhkan untuk pengembangan
    ',3);function B(j,P){const e=r("ExternalLinkIcon");return o(),d(i,null,[b,c,l,h,a("p",null,[g,a("a",m,[p,t(e)]),_,a("a",f,[y,t(e)]),S]),x],64)}var C=u(k,[["render",B]]);export{C as default}; diff --git a/docs/.vuepress/dist/assets/index.html.4db135f1.js b/docs/.vuepress/dist/assets/index.html.7616e51b.js similarity index 96% rename from docs/.vuepress/dist/assets/index.html.4db135f1.js rename to docs/.vuepress/dist/assets/index.html.7616e51b.js index 866f645f3..1c81dfeb2 100644 --- a/docs/.vuepress/dist/assets/index.html.4db135f1.js +++ b/docs/.vuepress/dist/assets/index.html.7616e51b.js @@ -1 +1 @@ -import{_ as i,r,o as t,c as o,a as n,b as s,F as d,e as u,d as a}from"./app.cfdf84e7.js";const l={},c=u('

    Memulai dengan Integrasi

    Buku Panduan Solana bagian Integrasi menyediakan contoh dan referensi untuk siapapun membangun aplikasi di atas protokol lain yang berjalan di Solana.

    Kekuatan Solana berasal dari kemampuan untuk berintegrasi dengan protokol lain, membangun di atas infrastruktur yang ada untuk membuat sesuatu yang lebih baik.

    Composability Adalah Kunci

    Membuat program Anda mudah digunakan dan diperluas akan menumbuhkan program Anda dan seluruh ekosistem Solana. Jangan mengulang kembali apa yang sudah ada dari awal, bangun di atas protokol yang ada dan bootstrap basis pengguna Anda.

    Beradaptasi dan bangun di atas program atau librari lain dan buka kemampuan baru untuk Solana.

    Kontribusi

    ',7),m=a("Jika Anda tertarik untuk berkontribusi pada integrasi, silakan periksa "),p={href:"https://github.com/solana-developers/solana-cookbook/blob/master/CONTRIBUTING.md",target:"_blank",rel:"noopener noreferrer"},k=a("contribution guidelines"),b=a(".");function h(g,_){const e=r("ExternalLinkIcon");return t(),o(d,null,[c,n("p",null,[m,n("a",p,[k,s(e)]),b])],64)}var x=i(l,[["render",h]]);export{x as default}; +import{_ as i,r,o as t,c as o,a as n,b as s,F as d,e as u,d as a}from"./app.2fbb9e96.js";const l={},c=u('

    Memulai dengan Integrasi

    Buku Panduan Solana bagian Integrasi menyediakan contoh dan referensi untuk siapapun membangun aplikasi di atas protokol lain yang berjalan di Solana.

    Kekuatan Solana berasal dari kemampuan untuk berintegrasi dengan protokol lain, membangun di atas infrastruktur yang ada untuk membuat sesuatu yang lebih baik.

    Composability Adalah Kunci

    Membuat program Anda mudah digunakan dan diperluas akan menumbuhkan program Anda dan seluruh ekosistem Solana. Jangan mengulang kembali apa yang sudah ada dari awal, bangun di atas protokol yang ada dan bootstrap basis pengguna Anda.

    Beradaptasi dan bangun di atas program atau librari lain dan buka kemampuan baru untuk Solana.

    Kontribusi

    ',7),m=a("Jika Anda tertarik untuk berkontribusi pada integrasi, silakan periksa "),p={href:"https://github.com/solana-developers/solana-cookbook/blob/master/CONTRIBUTING.md",target:"_blank",rel:"noopener noreferrer"},k=a("contribution guidelines"),b=a(".");function h(g,_){const e=r("ExternalLinkIcon");return t(),o(d,null,[c,n("p",null,[m,n("a",p,[k,s(e)]),b])],64)}var x=i(l,[["render",h]]);export{x as default}; diff --git a/docs/.vuepress/dist/assets/index.html.22281a94.js b/docs/.vuepress/dist/assets/index.html.89167c54.js similarity index 98% rename from docs/.vuepress/dist/assets/index.html.22281a94.js rename to docs/.vuepress/dist/assets/index.html.89167c54.js index eb127c7ab..90645e975 100644 --- a/docs/.vuepress/dist/assets/index.html.22281a94.js +++ b/docs/.vuepress/dist/assets/index.html.89167c54.js @@ -1 +1 @@ -import{_ as o,r as a,o as e,c as i,a as t,b as c,F as r,d as n,e as s}from"./app.cfdf84e7.js";const d={},g=t("h1",{id:"nhap-mon-solana",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#nhap-mon-solana","aria-hidden":"true"},"#"),n(" Nh\u1EADp m\xF4n Solana")],-1),l=t("p",null,[n("Cu\u1ED1n s\xE1ch "),t("em",null,"To\xE0n t\u1EADp Solana"),n(" l\xE0 m\u1ED9t t\xE0i li\u1EC7u l\u1EADp tr\xECnh h\u01B0\u1EDBng \u0111\u1EBFn vi\u1EC7c cung c\u1EA5p nh\u01B0ng kh\xE1i ni\u1EC7m c\u0103n b\u1EA3n v\xE0 t\xE0i li\u1EC7u tham kh\u1EA3o cho qu\xE1 tr\xECnh x\xE2y d\u1EF1ng \u1EE9ng d\u1EE5ng tr\xEAn Solana. M\u1ED7i kh\xE1i ni\u1EC7m ho\u1EB7c t\xE0i li\u1EC7u tham kh\u1EA3o kh\xF4ng nh\u1EEFng t\u1EADp trung v\xE0o nh\u1EEFng kh\xEDa c\u1EA1nh c\u1EE5 th\u1EC3 tr\xEAn Solana, m\xE0 c\xF2n cung c\u1EA5p c\xE1c chi ti\u1EBFt gi\u1EA3ng gi\u1EA3i c\u0169ng nh\u01B0 v\xED d\u1EE5 m\u1EABu cho l\u1EADp tr\xECnh vi\xEAn.")],-1),p=t("h2",{id:"\u0111ong-gop",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#\u0111ong-gop","aria-hidden":"true"},"#"),n(" \u0110\xF3ng g\xF3p")],-1),u=t("p",null,"To\xE0n t\u1EADp Solana \u0111\u01B0\u1EE3c thi\u1EBFt k\u1EBF sao cho c\xE1c l\u1EADp tr\xECnh vi\xEAn m\u1EDBi tr\xEAn Solana c\u0169ng c\xF3 th\u1EC3 d\u1EC5 d\xE0ng tham gia \u0111\xF3ng g\xF3p v\xE0 x\xE2y d\u1EF1ng. Ngay c\u1EA3 khi b\u1EA1n ch\u01B0a c\xF3 \xFD t\u01B0\u1EDFng n\xE0o cho c\xE1c s\u1EA3n ph\u1EA9m c\xE1 nh\xE2n ho\u1EB7c t\u1ED5 ch\u1EE9c c\u1EE7a b\u1EA1n, tham gia g\xF3p \xFD c\u0169ng l\xE0 m\u1ED9t c\xE1ch r\u1EA5t hay \u0111\u1EC3 b\u1EA1n c\xF3 th\u1EC3 trau d\u1ED3i.",-1),_=n("Xem qua t\u1EA5t c\u1EA3 c\xE1c \u0111\xF3ng g\xF3p "),m={href:"https://github.com/solana-developers/solana-cookbook/issues",target:"_blank",rel:"noopener noreferrer"},b=n("t\u1EA1i \u0111\xE2y"),k=n(". C\xE1ch th\u1EE9c g\xF3p \xFD \u0111\u01B0\u1EE3c tr\xECnh b\xE0y "),v={href:"https://github.com/solana-developers/solana-cookbook#contributing",target:"_blank",rel:"noopener noreferrer"},f=n("t\u1EA1i \u0111\xE2y"),y=n(". N\u1EBFu b\u1EA1n c\u1EA3m th\u1EA5y To\xE0n t\u1EADp Solana \u0111ang thi\u1EBFu s\xF3t \u1EDF b\u1EA5t k\u1EF3 \u0111i\u1EC3m n\xE0o, vui l\xF2ng t\u1EA1o m\u1EDBi m\u1ED9t g\xF3p \xFD th\xF4ng qua c\xE1c \u0111\u01B0\u1EDDng d\u1EABn b\xEAn tr\xEAn."),S=s('

    C\u1EA5u tr\xFAc c\u1EE7a To\xE0n t\u1EADp Solana

    To\xE0n t\u1EADp Solana \u0111\u01B0\u1EE3c chia th\xE0nh c\xE1c m\u1EE5c c\u1EE5 th\u1EC3, v\xE0 \u1EDF m\u1ED7i m\u1EE5c s\u1EBD tr\xECnh b\xE0y, gi\u1EA3i th\xEDch c\xE1c m\u1EE5c ti\xEAu kh\xE1c nhau.

    M\u1EE5cM\u1EE5c ti\xEAu
    Kh\xE1i ni\u1EC7m c\u0103n b\u1EA3nX\xE2y d\u1EF1ng c\xE1c kh\u1ED1i c\u01A1 s\u1EDF c\u1EE7a Solana c\u1EA7n thi\u1EBFt cho qu\xE1 tr\xECnh ph\xE1t tri\u1EC3n \u1EE9ng d\u1EE5ng
    H\u01B0\u1EDBng d\u1EABnC\xE1c h\u01B0\u1EDBng d\u1EABn nhanh v\u1EC1 b\u1ED9 c\xF4ng c\u1EE5 h\u1EEFu \xEDch cho qu\xE1 tr\xECnh ph\xE1t tri\u1EC3n \u1EE9ng d\u1EE5ng
    Tham kh\u1EA3oC\xE1c m\u1EABu code th\u01B0\u1EDDng g\u1EB7p trong qu\xE1 tr\xECnh ph\xE1t tri\u1EC3n \u1EE9ng d\u1EE5ng

    L\u1EDDi c\u1EE7a d\u1ECBch gi\u1EA3

    ',4),x=n("Phi\xEAn b\u1EA3n Ti\u1EBFng Vi\u1EC7t c\u1EE7a To\xE0n t\u1EADp Solana \u0111\u01B0\u1EE3c d\u1ECBch l\u1EA1i t\u1EEB phi\xEAn b\u1EA3n Ti\u1EBFng Anh - "),T={href:"https://solanacookbook.com/",target:"_blank",rel:"noopener noreferrer"},N=n("Solana Cookbook"),C=n(" b\u1EDFi "),V={href:"https://sentre.io/",target:"_blank",rel:"noopener noreferrer"},q=n("Sentre Protocol"),B=n(". V\xEC \u0111\xE2y l\xE0 m\u1ED9t t\xE0i li\u1EC7u k\u1EF9 thu\u1EADt n\xEAn \u0111\u1EC3 \u0111\u1EA3m b\u1EA3o t\xEDnh nh\u1EA5t qu\xE1n, m\u1ED9t s\u1ED1 thu\u1EADt ng\u1EEF chuy\xEAn ng\xE0nh s\u1EBD \u0111\u01B0\u1EE3c gi\u1EEF nguy\xEAn v\xE0 kh\xF4ng \u0111\u01B0\u1EE3c d\u1ECBch sang c\xE1c t\u1EEB thay th\u1EBF \u1EDF Ti\u1EBFng Vi\u1EC7t. Ngo\xE0i ra, m\u1ED9t s\u1ED1 h\xECnh minh ho\u1EA1 c\xF3 th\u1EC3 \u0111\u01B0\u1EE3c c\u1EADp nh\u1EADt ch\u1EADm v\xE0 v\u1EABn ph\u1EA3i d\xF9ng h\xECnh \u1EA3nh g\u1ED1c \u1EDF b\u1EA3n Ti\u1EBFng Anh. Hi v\u1ECDng b\u1EA1n \u0111\u1ECDc th\xF4ng c\u1EA3m v\xE0 c\xF3 th\u1EDDi gian h\u1ECDc t\u1EADp vui v\u1EBB. Ch\xFAc c\u1ED9ng \u0111\u1ED3ng Solana Vi\u1EC7t Nam ng\xE0y c\xE0ng ph\xE1t tri\u1EC3n v\u1EC1 ch\u1EA5t v\xE0 l\u01B0\u1EE3ng.");function E(L,M){const h=a("ExternalLinkIcon");return e(),i(r,null,[g,l,p,u,t("p",null,[_,t("a",m,[b,c(h)]),k,t("a",v,[f,c(h)]),y]),S,t("p",null,[x,t("a",T,[N,c(h)]),C,t("a",V,[q,c(h)]),B])],64)}var F=o(d,[["render",E]]);export{F as default}; +import{_ as o,r as a,o as e,c as i,a as t,b as c,F as r,d as n,e as s}from"./app.2fbb9e96.js";const d={},g=t("h1",{id:"nhap-mon-solana",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#nhap-mon-solana","aria-hidden":"true"},"#"),n(" Nh\u1EADp m\xF4n Solana")],-1),l=t("p",null,[n("Cu\u1ED1n s\xE1ch "),t("em",null,"To\xE0n t\u1EADp Solana"),n(" l\xE0 m\u1ED9t t\xE0i li\u1EC7u l\u1EADp tr\xECnh h\u01B0\u1EDBng \u0111\u1EBFn vi\u1EC7c cung c\u1EA5p nh\u01B0ng kh\xE1i ni\u1EC7m c\u0103n b\u1EA3n v\xE0 t\xE0i li\u1EC7u tham kh\u1EA3o cho qu\xE1 tr\xECnh x\xE2y d\u1EF1ng \u1EE9ng d\u1EE5ng tr\xEAn Solana. M\u1ED7i kh\xE1i ni\u1EC7m ho\u1EB7c t\xE0i li\u1EC7u tham kh\u1EA3o kh\xF4ng nh\u1EEFng t\u1EADp trung v\xE0o nh\u1EEFng kh\xEDa c\u1EA1nh c\u1EE5 th\u1EC3 tr\xEAn Solana, m\xE0 c\xF2n cung c\u1EA5p c\xE1c chi ti\u1EBFt gi\u1EA3ng gi\u1EA3i c\u0169ng nh\u01B0 v\xED d\u1EE5 m\u1EABu cho l\u1EADp tr\xECnh vi\xEAn.")],-1),p=t("h2",{id:"\u0111ong-gop",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#\u0111ong-gop","aria-hidden":"true"},"#"),n(" \u0110\xF3ng g\xF3p")],-1),u=t("p",null,"To\xE0n t\u1EADp Solana \u0111\u01B0\u1EE3c thi\u1EBFt k\u1EBF sao cho c\xE1c l\u1EADp tr\xECnh vi\xEAn m\u1EDBi tr\xEAn Solana c\u0169ng c\xF3 th\u1EC3 d\u1EC5 d\xE0ng tham gia \u0111\xF3ng g\xF3p v\xE0 x\xE2y d\u1EF1ng. Ngay c\u1EA3 khi b\u1EA1n ch\u01B0a c\xF3 \xFD t\u01B0\u1EDFng n\xE0o cho c\xE1c s\u1EA3n ph\u1EA9m c\xE1 nh\xE2n ho\u1EB7c t\u1ED5 ch\u1EE9c c\u1EE7a b\u1EA1n, tham gia g\xF3p \xFD c\u0169ng l\xE0 m\u1ED9t c\xE1ch r\u1EA5t hay \u0111\u1EC3 b\u1EA1n c\xF3 th\u1EC3 trau d\u1ED3i.",-1),_=n("Xem qua t\u1EA5t c\u1EA3 c\xE1c \u0111\xF3ng g\xF3p "),m={href:"https://github.com/solana-developers/solana-cookbook/issues",target:"_blank",rel:"noopener noreferrer"},b=n("t\u1EA1i \u0111\xE2y"),k=n(". C\xE1ch th\u1EE9c g\xF3p \xFD \u0111\u01B0\u1EE3c tr\xECnh b\xE0y "),v={href:"https://github.com/solana-developers/solana-cookbook#contributing",target:"_blank",rel:"noopener noreferrer"},f=n("t\u1EA1i \u0111\xE2y"),y=n(". N\u1EBFu b\u1EA1n c\u1EA3m th\u1EA5y To\xE0n t\u1EADp Solana \u0111ang thi\u1EBFu s\xF3t \u1EDF b\u1EA5t k\u1EF3 \u0111i\u1EC3m n\xE0o, vui l\xF2ng t\u1EA1o m\u1EDBi m\u1ED9t g\xF3p \xFD th\xF4ng qua c\xE1c \u0111\u01B0\u1EDDng d\u1EABn b\xEAn tr\xEAn."),S=s('

    C\u1EA5u tr\xFAc c\u1EE7a To\xE0n t\u1EADp Solana

    To\xE0n t\u1EADp Solana \u0111\u01B0\u1EE3c chia th\xE0nh c\xE1c m\u1EE5c c\u1EE5 th\u1EC3, v\xE0 \u1EDF m\u1ED7i m\u1EE5c s\u1EBD tr\xECnh b\xE0y, gi\u1EA3i th\xEDch c\xE1c m\u1EE5c ti\xEAu kh\xE1c nhau.

    M\u1EE5cM\u1EE5c ti\xEAu
    Kh\xE1i ni\u1EC7m c\u0103n b\u1EA3nX\xE2y d\u1EF1ng c\xE1c kh\u1ED1i c\u01A1 s\u1EDF c\u1EE7a Solana c\u1EA7n thi\u1EBFt cho qu\xE1 tr\xECnh ph\xE1t tri\u1EC3n \u1EE9ng d\u1EE5ng
    H\u01B0\u1EDBng d\u1EABnC\xE1c h\u01B0\u1EDBng d\u1EABn nhanh v\u1EC1 b\u1ED9 c\xF4ng c\u1EE5 h\u1EEFu \xEDch cho qu\xE1 tr\xECnh ph\xE1t tri\u1EC3n \u1EE9ng d\u1EE5ng
    Tham kh\u1EA3oC\xE1c m\u1EABu code th\u01B0\u1EDDng g\u1EB7p trong qu\xE1 tr\xECnh ph\xE1t tri\u1EC3n \u1EE9ng d\u1EE5ng

    L\u1EDDi c\u1EE7a d\u1ECBch gi\u1EA3

    ',4),x=n("Phi\xEAn b\u1EA3n Ti\u1EBFng Vi\u1EC7t c\u1EE7a To\xE0n t\u1EADp Solana \u0111\u01B0\u1EE3c d\u1ECBch l\u1EA1i t\u1EEB phi\xEAn b\u1EA3n Ti\u1EBFng Anh - "),T={href:"https://solanacookbook.com/",target:"_blank",rel:"noopener noreferrer"},N=n("Solana Cookbook"),C=n(" b\u1EDFi "),V={href:"https://sentre.io/",target:"_blank",rel:"noopener noreferrer"},q=n("Sentre Protocol"),B=n(". V\xEC \u0111\xE2y l\xE0 m\u1ED9t t\xE0i li\u1EC7u k\u1EF9 thu\u1EADt n\xEAn \u0111\u1EC3 \u0111\u1EA3m b\u1EA3o t\xEDnh nh\u1EA5t qu\xE1n, m\u1ED9t s\u1ED1 thu\u1EADt ng\u1EEF chuy\xEAn ng\xE0nh s\u1EBD \u0111\u01B0\u1EE3c gi\u1EEF nguy\xEAn v\xE0 kh\xF4ng \u0111\u01B0\u1EE3c d\u1ECBch sang c\xE1c t\u1EEB thay th\u1EBF \u1EDF Ti\u1EBFng Vi\u1EC7t. Ngo\xE0i ra, m\u1ED9t s\u1ED1 h\xECnh minh ho\u1EA1 c\xF3 th\u1EC3 \u0111\u01B0\u1EE3c c\u1EADp nh\u1EADt ch\u1EADm v\xE0 v\u1EABn ph\u1EA3i d\xF9ng h\xECnh \u1EA3nh g\u1ED1c \u1EDF b\u1EA3n Ti\u1EBFng Anh. Hi v\u1ECDng b\u1EA1n \u0111\u1ECDc th\xF4ng c\u1EA3m v\xE0 c\xF3 th\u1EDDi gian h\u1ECDc t\u1EADp vui v\u1EBB. Ch\xFAc c\u1ED9ng \u0111\u1ED3ng Solana Vi\u1EC7t Nam ng\xE0y c\xE0ng ph\xE1t tri\u1EC3n v\u1EC1 ch\u1EA5t v\xE0 l\u01B0\u1EE3ng.");function E(L,M){const h=a("ExternalLinkIcon");return e(),i(r,null,[g,l,p,u,t("p",null,[_,t("a",m,[b,c(h)]),k,t("a",v,[f,c(h)]),y]),S,t("p",null,[x,t("a",T,[N,c(h)]),C,t("a",V,[q,c(h)]),B])],64)}var F=o(d,[["render",E]]);export{F as default}; diff --git a/docs/.vuepress/dist/assets/index.html.ecd28216.js b/docs/.vuepress/dist/assets/index.html.8d563e04.js similarity index 97% rename from docs/.vuepress/dist/assets/index.html.ecd28216.js rename to docs/.vuepress/dist/assets/index.html.8d563e04.js index c1cb548ab..5fd7ade88 100644 --- a/docs/.vuepress/dist/assets/index.html.ecd28216.js +++ b/docs/.vuepress/dist/assets/index.html.8d563e04.js @@ -1 +1 @@ -import{_ as a,r as s,o as i,c as r,a as e,b as n,F as d,d as o,e as c}from"./app.cfdf84e7.js";const h={},l=e("h1",{id:"cooking-with-solana",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#cooking-with-solana","aria-hidden":"true"},"#"),o(" Cooking with Solana")],-1),p=e("p",null,[o("The "),e("em",null,"Solana Cookbook"),o(" is a developer resource that provides the essential concepts and references for building applications on Solana. Each concept and reference will focus on specific aspects of Solana development while providing additional details and usage examples.")],-1),_=e("h2",{id:"contributing",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#contributing","aria-hidden":"true"},"#"),o(" Contributing")],-1),u=e("p",null,"The Cookbook is designed in a way that makes it easy for new Solana developers to contribute. Even if you don't know how to do something, contributing to the cookbook is a great way to learn!",-1),k=o("Check out all open issues "),f={href:"https://github.com/solana-developers/solana-cookbook/issues",target:"_blank",rel:"noopener noreferrer"},b=o("here"),g=o(". Contribution guidelines "),m={href:"https://github.com/solana-developers/solana-cookbook#contributing",target:"_blank",rel:"noopener noreferrer"},w=o("here"),v=o(". If you find the cookbook is missing a suggestion, please add an issue."),x=c('

    How to Read the Cookbook

    The Solana Cookbook is split into different sections, each aimed at a different goal.

    SectionDescription
    Core ConceptsBuilding blocks of Solana that are good to know for development
    GuidesSnack-sized guides about different tools for development
    ReferencesReferences to commonly needed code snippets
    ',3);function C(S,y){const t=s("ExternalLinkIcon");return i(),r(d,null,[l,p,_,u,e("p",null,[k,e("a",f,[b,n(t)]),g,e("a",m,[w,n(t)]),v]),x],64)}var B=a(h,[["render",C]]);export{B as default}; +import{_ as a,r as s,o as i,c as r,a as e,b as n,F as d,d as o,e as c}from"./app.2fbb9e96.js";const h={},l=e("h1",{id:"cooking-with-solana",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#cooking-with-solana","aria-hidden":"true"},"#"),o(" Cooking with Solana")],-1),p=e("p",null,[o("The "),e("em",null,"Solana Cookbook"),o(" is a developer resource that provides the essential concepts and references for building applications on Solana. Each concept and reference will focus on specific aspects of Solana development while providing additional details and usage examples.")],-1),_=e("h2",{id:"contributing",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#contributing","aria-hidden":"true"},"#"),o(" Contributing")],-1),u=e("p",null,"The Cookbook is designed in a way that makes it easy for new Solana developers to contribute. Even if you don't know how to do something, contributing to the cookbook is a great way to learn!",-1),k=o("Check out all open issues "),f={href:"https://github.com/solana-developers/solana-cookbook/issues",target:"_blank",rel:"noopener noreferrer"},b=o("here"),g=o(". Contribution guidelines "),m={href:"https://github.com/solana-developers/solana-cookbook#contributing",target:"_blank",rel:"noopener noreferrer"},w=o("here"),v=o(". If you find the cookbook is missing a suggestion, please add an issue."),x=c('

    How to Read the Cookbook

    The Solana Cookbook is split into different sections, each aimed at a different goal.

    SectionDescription
    Core ConceptsBuilding blocks of Solana that are good to know for development
    GuidesSnack-sized guides about different tools for development
    ReferencesReferences to commonly needed code snippets
    ',3);function C(S,y){const t=s("ExternalLinkIcon");return i(),r(d,null,[l,p,_,u,e("p",null,[k,e("a",f,[b,n(t)]),g,e("a",m,[w,n(t)]),v]),x],64)}var B=a(h,[["render",C]]);export{B as default}; diff --git a/docs/.vuepress/dist/assets/index.html.fc6cfc86.js b/docs/.vuepress/dist/assets/index.html.937166ce.js similarity index 95% rename from docs/.vuepress/dist/assets/index.html.fc6cfc86.js rename to docs/.vuepress/dist/assets/index.html.937166ce.js index 58b50919c..34d8bd315 100644 --- a/docs/.vuepress/dist/assets/index.html.fc6cfc86.js +++ b/docs/.vuepress/dist/assets/index.html.937166ce.js @@ -1 +1 @@ -import{_ as a,r as n,o as r,c as i,a as o,b as s,F as c,e as d,d as e}from"./app.cfdf84e7.js";const l={},h=d('

    Getting Started with Integrations

    The Solana Cookbook integrations provides a set of examples and references for anyone to build on top of other protocols on Solana.

    The power of Solana comes from the ability to integrate with other protocols, building on top of existing infrastructure to make something better.

    Composability is Key

    Making your program easy to use and extend will grow both your program and the entire Solana ecosystem. Don't reinvent the wheel, build on top of existing protocols and bootstrap your userbase.

    Adapt and build on top of other programs or libraries and unlock new capabilities for Solana.

    Contributing

    ',7),p=e("If you are interested in contributing to integrations, please checkout the "),b={href:"https://github.com/solana-developers/solana-cookbook/blob/master/CONTRIBUTING.md",target:"_blank",rel:"noopener noreferrer"},u=e("contribution guidelines"),g=e(".");function f(m,_){const t=n("ExternalLinkIcon");return r(),i(c,null,[h,o("p",null,[p,o("a",b,[u,s(t)]),g])],64)}var x=a(l,[["render",f]]);export{x as default}; +import{_ as a,r as n,o as r,c as i,a as o,b as s,F as c,e as d,d as e}from"./app.2fbb9e96.js";const l={},h=d('

    Getting Started with Integrations

    The Solana Cookbook integrations provides a set of examples and references for anyone to build on top of other protocols on Solana.

    The power of Solana comes from the ability to integrate with other protocols, building on top of existing infrastructure to make something better.

    Composability is Key

    Making your program easy to use and extend will grow both your program and the entire Solana ecosystem. Don't reinvent the wheel, build on top of existing protocols and bootstrap your userbase.

    Adapt and build on top of other programs or libraries and unlock new capabilities for Solana.

    Contributing

    ',7),p=e("If you are interested in contributing to integrations, please checkout the "),b={href:"https://github.com/solana-developers/solana-cookbook/blob/master/CONTRIBUTING.md",target:"_blank",rel:"noopener noreferrer"},u=e("contribution guidelines"),g=e(".");function f(m,_){const t=n("ExternalLinkIcon");return r(),i(c,null,[h,o("p",null,[p,o("a",b,[u,s(t)]),g])],64)}var x=a(l,[["render",f]]);export{x as default}; diff --git a/docs/.vuepress/dist/assets/index.html.9d01b529.js b/docs/.vuepress/dist/assets/index.html.98dc024c.js similarity index 96% rename from docs/.vuepress/dist/assets/index.html.9d01b529.js rename to docs/.vuepress/dist/assets/index.html.98dc024c.js index 3e0ed3812..52efaa025 100644 --- a/docs/.vuepress/dist/assets/index.html.9d01b529.js +++ b/docs/.vuepress/dist/assets/index.html.98dc024c.js @@ -1 +1 @@ -import{_ as t,r as a,o as s,c as n,a as o,b as i,F as l,e as c,d as e}from"./app.cfdf84e7.js";const d={},p=c('

    D\xE9marrer avec les Int\xE9grations

    Les int\xE9grations du Solana Cookbook propose un ensemble d'exemples et de r\xE9f\xE9rences permettant \xE0 quiconque de s'appuyer sur d'autres protocoles pour d\xE9velopper sur Solana.

    La puissance de Solana provient de sa capacit\xE9 \xE0 int\xE9grer d'autres protocoles, en s'appuyant sur l'infrastructure existante pour am\xE9liorer les choses.

    La composabilit\xE9 est Essentielle

    En rendant votre programme facile \xE0 utiliser et \xE0 \xE9tendre, vous d\xE9velopperez \xE0 la fois votre programme et l'ensemble de l'\xE9cosyst\xE8me Solana. Ne r\xE9inventez pas la roue, fondez-vous sur les protocoles existants et cr\xE9ez votre propre base d'utilisateurs.

    Adaptez et construisez sur d'autres programmes ou biblioth\xE8ques et d\xE9bloquez de nouvelles capacit\xE9s pour Solana.

    Contribution

    ',7),u=e("Si vous souhaitez contribuer aux int\xE9grations, veuillez consulter les "),h={href:"https://github.com/solana-developers/solana-cookbook/blob/master/CONTRIBUTING.md",target:"_blank",rel:"noopener noreferrer"},m=e("lignes directrices pour les contributions"),b=e(".");function _(v,f){const r=a("ExternalLinkIcon");return s(),n(l,null,[p,o("p",null,[u,o("a",h,[m,i(r)]),b])],64)}var g=t(d,[["render",_]]);export{g as default}; +import{_ as t,r as a,o as s,c as n,a as o,b as i,F as l,e as c,d as e}from"./app.2fbb9e96.js";const d={},p=c('

    D\xE9marrer avec les Int\xE9grations

    Les int\xE9grations du Solana Cookbook propose un ensemble d'exemples et de r\xE9f\xE9rences permettant \xE0 quiconque de s'appuyer sur d'autres protocoles pour d\xE9velopper sur Solana.

    La puissance de Solana provient de sa capacit\xE9 \xE0 int\xE9grer d'autres protocoles, en s'appuyant sur l'infrastructure existante pour am\xE9liorer les choses.

    La composabilit\xE9 est Essentielle

    En rendant votre programme facile \xE0 utiliser et \xE0 \xE9tendre, vous d\xE9velopperez \xE0 la fois votre programme et l'ensemble de l'\xE9cosyst\xE8me Solana. Ne r\xE9inventez pas la roue, fondez-vous sur les protocoles existants et cr\xE9ez votre propre base d'utilisateurs.

    Adaptez et construisez sur d'autres programmes ou biblioth\xE8ques et d\xE9bloquez de nouvelles capacit\xE9s pour Solana.

    Contribution

    ',7),u=e("Si vous souhaitez contribuer aux int\xE9grations, veuillez consulter les "),h={href:"https://github.com/solana-developers/solana-cookbook/blob/master/CONTRIBUTING.md",target:"_blank",rel:"noopener noreferrer"},m=e("lignes directrices pour les contributions"),b=e(".");function _(v,f){const r=a("ExternalLinkIcon");return s(),n(l,null,[p,o("p",null,[u,o("a",h,[m,i(r)]),b])],64)}var g=t(d,[["render",_]]);export{g as default}; diff --git a/docs/.vuepress/dist/assets/index.html.7a1de989.js b/docs/.vuepress/dist/assets/index.html.9ac10738.js similarity index 98% rename from docs/.vuepress/dist/assets/index.html.7a1de989.js rename to docs/.vuepress/dist/assets/index.html.9ac10738.js index 238be406b..dfc13603f 100644 --- a/docs/.vuepress/dist/assets/index.html.7a1de989.js +++ b/docs/.vuepress/dist/assets/index.html.9ac10738.js @@ -1 +1 @@ -import{_ as t,r as n,o as r,c as s,a,b as i,F as c,e as l,d as e}from"./app.cfdf84e7.js";const d={},h=l('

    \u0E40\u0E23\u0E34\u0E48\u0E21\u0E15\u0E49\u0E19\u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19 (Integrations)

    \u0E04\u0E39\u0E48\u0E21\u0E37\u0E2D Solana integrations \u0E08\u0E30\u0E21\u0E35\u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07 \u0E41\u0E25\u0E30\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E49\u0E32\u0E07\u0E2D\u0E34\u0E07\u0E17\u0E35\u0E48\u0E08\u0E30\u0E43\u0E0A\u0E49\u0E43\u0E19\u0E01\u0E32\u0E23\u0E1E\u0E31\u0E12\u0E19\u0E32 protocols \u0E1A\u0E19 Solana

    \u0E02\u0E49\u0E2D\u0E14\u0E35\u0E02\u0E2D\u0E07 Solana \u0E21\u0E32\u0E08\u0E32\u0E01\u0E01\u0E32\u0E23\u0E17\u0E35\u0E48\u0E21\u0E31\u0E19\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 integrate \u0E01\u0E31\u0E1A protocols \u0E2D\u0E37\u0E48\u0E19\u0E46 \u0E44\u0E14\u0E49\u0E1A\u0E19 infrastructure \u0E17\u0E35\u0E48\u0E21\u0E35\u0E2D\u0E22\u0E39\u0E48\u0E41\u0E25\u0E49\u0E27\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E2A\u0E34\u0E48\u0E07\u0E17\u0E35\u0E48\u0E14\u0E35\u0E01\u0E27\u0E48\u0E32

    Composability \u0E04\u0E37\u0E2D\u0E2B\u0E31\u0E27\u0E43\u0E08

    \u0E01\u0E32\u0E23\u0E2A\u0E23\u0E49\u0E32\u0E07 program \u0E43\u0E2B\u0E49\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19\u0E07\u0E48\u0E32\u0E22 \u0E41\u0E25\u0E30\u0E02\u0E22\u0E32\u0E22\u0E15\u0E32\u0E21\u0E04\u0E27\u0E32\u0E21\u0E15\u0E49\u0E2D\u0E07\u0E01\u0E32\u0E23\u0E44\u0E14\u0E49\u0E08\u0E30\u0E17\u0E33\u0E43\u0E2B\u0E49\u0E17\u0E31\u0E49\u0E07 program \u0E41\u0E25\u0E30 Solana ecosystem \u0E42\u0E15\u0E02\u0E36\u0E49\u0E19 \u0E2D\u0E22\u0E48\u0E32\u0E2B\u0E32\u0E17\u0E33\u0E2D\u0E30\u0E44\u0E23\u0E17\u0E35\u0E48\u0E21\u0E31\u0E19\u0E43\u0E0A\u0E49\u0E44\u0E14\u0E49\u0E14\u0E35\u0E2D\u0E22\u0E39\u0E48\u0E41\u0E25\u0E49\u0E27 \u0E21\u0E32\u0E1E\u0E31\u0E12\u0E19\u0E32\u0E1A\u0E19 protocols \u0E17\u0E35\u0E48\u0E21\u0E35\u0E2D\u0E22\u0E39\u0E48\u0E41\u0E25\u0E49\u0E27\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E02\u0E22\u0E32\u0E22\u0E10\u0E32\u0E19\u0E1C\u0E39\u0E49\u0E43\u0E0A\u0E49\u0E02\u0E2D\u0E07\u0E40\u0E23\u0E32\u0E01\u0E31\u0E19\u0E14\u0E35\u0E01\u0E27\u0E48\u0E32

    \u0E14\u0E31\u0E14\u0E41\u0E1B\u0E25\u0E07 \u0E41\u0E25\u0E30\u0E2A\u0E23\u0E49\u0E32\u0E07\u0E1A\u0E19 programs \u0E2D\u0E37\u0E48\u0E19\u0E46 \u0E2B\u0E23\u0E37\u0E2D\u0E1A\u0E19 libraries \u0E23\u0E48\u0E27\u0E21\u0E01\u0E31\u0E19\u0E1B\u0E25\u0E14\u0E1B\u0E25\u0E48\u0E2D\u0E22\u0E04\u0E27\u0E32\u0E21\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E43\u0E2B\u0E21\u0E48\u0E46 \u0E40\u0E1E\u0E37\u0E48\u0E2D Solana \u0E01\u0E31\u0E19\u0E14\u0E35\u0E01\u0E27\u0E48\u0E32

    Contributing

    ',7),p=e("\u0E16\u0E49\u0E32\u0E2A\u0E19\u0E43\u0E08\u0E17\u0E35\u0E48\u0E08\u0E30\u0E0A\u0E48\u0E27\u0E22\u0E01\u0E31\u0E19\u0E17\u0E33 integrations \u0E43\u0E2B\u0E49\u0E25\u0E2D\u0E07\u0E44\u0E1B\u0E14\u0E39\u0E17\u0E35\u0E48 "),_={href:"https://github.com/solana-developers/solana-cookbook/blob/master/CONTRIBUTING.md",target:"_blank",rel:"noopener noreferrer"},m=e("contribution guidelines"),b=e(".");function g(u,f){const o=n("ExternalLinkIcon");return r(),s(c,null,[h,a("p",null,[p,a("a",_,[m,i(o)]),b])],64)}var k=t(d,[["render",g]]);export{k as default}; +import{_ as t,r as n,o as r,c as s,a,b as i,F as c,e as l,d as e}from"./app.2fbb9e96.js";const d={},h=l('

    \u0E40\u0E23\u0E34\u0E48\u0E21\u0E15\u0E49\u0E19\u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19 (Integrations)

    \u0E04\u0E39\u0E48\u0E21\u0E37\u0E2D Solana integrations \u0E08\u0E30\u0E21\u0E35\u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07 \u0E41\u0E25\u0E30\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E49\u0E32\u0E07\u0E2D\u0E34\u0E07\u0E17\u0E35\u0E48\u0E08\u0E30\u0E43\u0E0A\u0E49\u0E43\u0E19\u0E01\u0E32\u0E23\u0E1E\u0E31\u0E12\u0E19\u0E32 protocols \u0E1A\u0E19 Solana

    \u0E02\u0E49\u0E2D\u0E14\u0E35\u0E02\u0E2D\u0E07 Solana \u0E21\u0E32\u0E08\u0E32\u0E01\u0E01\u0E32\u0E23\u0E17\u0E35\u0E48\u0E21\u0E31\u0E19\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 integrate \u0E01\u0E31\u0E1A protocols \u0E2D\u0E37\u0E48\u0E19\u0E46 \u0E44\u0E14\u0E49\u0E1A\u0E19 infrastructure \u0E17\u0E35\u0E48\u0E21\u0E35\u0E2D\u0E22\u0E39\u0E48\u0E41\u0E25\u0E49\u0E27\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E2A\u0E34\u0E48\u0E07\u0E17\u0E35\u0E48\u0E14\u0E35\u0E01\u0E27\u0E48\u0E32

    Composability \u0E04\u0E37\u0E2D\u0E2B\u0E31\u0E27\u0E43\u0E08

    \u0E01\u0E32\u0E23\u0E2A\u0E23\u0E49\u0E32\u0E07 program \u0E43\u0E2B\u0E49\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19\u0E07\u0E48\u0E32\u0E22 \u0E41\u0E25\u0E30\u0E02\u0E22\u0E32\u0E22\u0E15\u0E32\u0E21\u0E04\u0E27\u0E32\u0E21\u0E15\u0E49\u0E2D\u0E07\u0E01\u0E32\u0E23\u0E44\u0E14\u0E49\u0E08\u0E30\u0E17\u0E33\u0E43\u0E2B\u0E49\u0E17\u0E31\u0E49\u0E07 program \u0E41\u0E25\u0E30 Solana ecosystem \u0E42\u0E15\u0E02\u0E36\u0E49\u0E19 \u0E2D\u0E22\u0E48\u0E32\u0E2B\u0E32\u0E17\u0E33\u0E2D\u0E30\u0E44\u0E23\u0E17\u0E35\u0E48\u0E21\u0E31\u0E19\u0E43\u0E0A\u0E49\u0E44\u0E14\u0E49\u0E14\u0E35\u0E2D\u0E22\u0E39\u0E48\u0E41\u0E25\u0E49\u0E27 \u0E21\u0E32\u0E1E\u0E31\u0E12\u0E19\u0E32\u0E1A\u0E19 protocols \u0E17\u0E35\u0E48\u0E21\u0E35\u0E2D\u0E22\u0E39\u0E48\u0E41\u0E25\u0E49\u0E27\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E02\u0E22\u0E32\u0E22\u0E10\u0E32\u0E19\u0E1C\u0E39\u0E49\u0E43\u0E0A\u0E49\u0E02\u0E2D\u0E07\u0E40\u0E23\u0E32\u0E01\u0E31\u0E19\u0E14\u0E35\u0E01\u0E27\u0E48\u0E32

    \u0E14\u0E31\u0E14\u0E41\u0E1B\u0E25\u0E07 \u0E41\u0E25\u0E30\u0E2A\u0E23\u0E49\u0E32\u0E07\u0E1A\u0E19 programs \u0E2D\u0E37\u0E48\u0E19\u0E46 \u0E2B\u0E23\u0E37\u0E2D\u0E1A\u0E19 libraries \u0E23\u0E48\u0E27\u0E21\u0E01\u0E31\u0E19\u0E1B\u0E25\u0E14\u0E1B\u0E25\u0E48\u0E2D\u0E22\u0E04\u0E27\u0E32\u0E21\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E43\u0E2B\u0E21\u0E48\u0E46 \u0E40\u0E1E\u0E37\u0E48\u0E2D Solana \u0E01\u0E31\u0E19\u0E14\u0E35\u0E01\u0E27\u0E48\u0E32

    Contributing

    ',7),p=e("\u0E16\u0E49\u0E32\u0E2A\u0E19\u0E43\u0E08\u0E17\u0E35\u0E48\u0E08\u0E30\u0E0A\u0E48\u0E27\u0E22\u0E01\u0E31\u0E19\u0E17\u0E33 integrations \u0E43\u0E2B\u0E49\u0E25\u0E2D\u0E07\u0E44\u0E1B\u0E14\u0E39\u0E17\u0E35\u0E48 "),_={href:"https://github.com/solana-developers/solana-cookbook/blob/master/CONTRIBUTING.md",target:"_blank",rel:"noopener noreferrer"},m=e("contribution guidelines"),b=e(".");function g(u,f){const o=n("ExternalLinkIcon");return r(),s(c,null,[h,a("p",null,[p,a("a",_,[m,i(o)]),b])],64)}var k=t(d,[["render",g]]);export{k as default}; diff --git a/docs/.vuepress/dist/assets/index.html.275d1bb5.js b/docs/.vuepress/dist/assets/index.html.d6bfe13b.js similarity index 97% rename from docs/.vuepress/dist/assets/index.html.275d1bb5.js rename to docs/.vuepress/dist/assets/index.html.d6bfe13b.js index 2759a8a2c..723609e24 100644 --- a/docs/.vuepress/dist/assets/index.html.275d1bb5.js +++ b/docs/.vuepress/dist/assets/index.html.d6bfe13b.js @@ -1 +1 @@ -import{_ as n,r,o as s,c as d,a as o,b as a,F as c,d as t,e as i}from"./app.cfdf84e7.js";const h={},l=o("h1",{id:"cooking-with-solana",tabindex:"-1"},[o("a",{class:"header-anchor",href:"#cooking-with-solana","aria-hidden":"true"},"#"),t(" Cooking with Solana")],-1),_=o("p",null,[o("em",null,"Solana Cookbook"),t("\uC740 Solana \uC571\uC744 \uB9CC\uB4E4\uAE30 \uC704\uD55C \uD544\uC218\uC801\uC778 \uAC1C\uB150\uB4E4\uACFC \uC790\uB8CC\uB4E4\uC744 \uC81C\uACF5\uD558\uB294 \uAC1C\uBC1C\uC790 \uBB38\uC11C\uC785\uB2C8\uB2E4. \uAC01 \uAC1C\uB150\uACFC \uCC38\uACE0 \uC790\uB8CC\uB294 \uCD94\uAC00 \uC0C1\uC138\uD55C \uB0B4\uC6A9\uB4E4\uACFC \uC0AC\uC6A9 \uC608\uB97C \uC81C\uACF5\uD558\uBA70 Solana \uAC1C\uBC1C \uCE21\uBA74\uC5D0 \uCD08\uC810\uC744 \uB461\uB2C8\uB2E4.")],-1),k=o("h2",{id:"contributing",tabindex:"-1"},[o("a",{class:"header-anchor",href:"#contributing","aria-hidden":"true"},"#"),t(" Contributing")],-1),b=o("p",null,"Cookbook\uC740 \uC0C8\uB85C\uC6B4 Solana \uAC1C\uBC1C\uC790\uB4E4\uC774 \uAE30\uC5EC\uD558\uAE30 \uC26C\uC6B4 \uBC29\uD5A5\uC73C\uB85C \uC124\uACC4\uB418\uC5C8\uC2B5\uB2C8\uB2E4. \uB9CC\uC57D \uBB34\uC5C7\uC744 \uC5B4\uB5BB\uAC8C \uD574\uC57C \uD560\uC9C0 \uBAA8\uB974\uACA0\uB2E4\uBA74 \uC194\uB77C\uB098\uB97C \uBC30\uC6B0\uAE30 \uC704\uD574 \uC774 Cookbook\uC5D0 \uAE30\uC5EC\uD574\uBCF4\uC138\uC694!.",-1),u=t("\uBAA8\uB4E0 \uC5F4\uB9B0 \uC774\uC288\uB294 "),p={href:"https://github.com/solana-developers/solana-cookbook/issues",target:"_blank",rel:"noopener noreferrer"},f=t("\uC5EC\uAE30"),g=t(", Contribution \uAC00\uC774\uB4DC\uB294 "),C={href:"https://github.com/solana-developers/solana-cookbook#contributing",target:"_blank",rel:"noopener noreferrer"},m=t("\uC5EC\uAE30"),x=t("\uC5D0\uC11C \uD655\uC778\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uB9CC\uC57D, Cookbook\uC774 \uC81C\uC548\uC744 \uB193\uCE58\uACE0 \uC788\uB2E4\uBA74, \uBD80\uB514 \uC774\uC288\uB97C \uCD94\uAC00\uD574\uC8FC\uC138\uC694."),S=i('

    How to Read the Cookbook

    Solana Cookbook\uC740 \uAC01\uAC01 \uB2E4\uB978 \uBAA9\uC801\uC758 \uC139\uC158\uB4E4\uB85C \uB098\uB258\uC5B4\uC788\uC2B5\uB2C8\uB2E4.

    \uC139\uC158\uC124\uBA85
    Core Concepts\uAC1C\uBC1C\uC744 \uC704\uD574 \uC54C\uAE30 \uC88B\uC740 Solana\uC758 \uAE30\uBCF8 \uAD6C\uC131 \uC694\uC18C\uB4E4
    Guides\uAC1C\uBC1C \uBC29\uBC95\uB4E4\uC5D0 \uB300\uD55C \uAC04\uB2E8\uD55C \uAC00\uC774\uB4DC\uB4E4
    References\uD754\uD788 \uC0AC\uC6A9\uB418\uB294 \uCF54\uB4DC\uB4E4\uC5D0 \uB300\uD55C \uC790\uB8CC
    ',3);function w(v,N){const e=r("ExternalLinkIcon");return s(),d(c,null,[l,_,k,b,o("p",null,[u,o("a",p,[f,a(e)]),g,o("a",C,[m,a(e)]),x]),S],64)}var B=n(h,[["render",w]]);export{B as default}; +import{_ as n,r,o as s,c as d,a as o,b as a,F as c,d as t,e as i}from"./app.2fbb9e96.js";const h={},l=o("h1",{id:"cooking-with-solana",tabindex:"-1"},[o("a",{class:"header-anchor",href:"#cooking-with-solana","aria-hidden":"true"},"#"),t(" Cooking with Solana")],-1),_=o("p",null,[o("em",null,"Solana Cookbook"),t("\uC740 Solana \uC571\uC744 \uB9CC\uB4E4\uAE30 \uC704\uD55C \uD544\uC218\uC801\uC778 \uAC1C\uB150\uB4E4\uACFC \uC790\uB8CC\uB4E4\uC744 \uC81C\uACF5\uD558\uB294 \uAC1C\uBC1C\uC790 \uBB38\uC11C\uC785\uB2C8\uB2E4. \uAC01 \uAC1C\uB150\uACFC \uCC38\uACE0 \uC790\uB8CC\uB294 \uCD94\uAC00 \uC0C1\uC138\uD55C \uB0B4\uC6A9\uB4E4\uACFC \uC0AC\uC6A9 \uC608\uB97C \uC81C\uACF5\uD558\uBA70 Solana \uAC1C\uBC1C \uCE21\uBA74\uC5D0 \uCD08\uC810\uC744 \uB461\uB2C8\uB2E4.")],-1),k=o("h2",{id:"contributing",tabindex:"-1"},[o("a",{class:"header-anchor",href:"#contributing","aria-hidden":"true"},"#"),t(" Contributing")],-1),b=o("p",null,"Cookbook\uC740 \uC0C8\uB85C\uC6B4 Solana \uAC1C\uBC1C\uC790\uB4E4\uC774 \uAE30\uC5EC\uD558\uAE30 \uC26C\uC6B4 \uBC29\uD5A5\uC73C\uB85C \uC124\uACC4\uB418\uC5C8\uC2B5\uB2C8\uB2E4. \uB9CC\uC57D \uBB34\uC5C7\uC744 \uC5B4\uB5BB\uAC8C \uD574\uC57C \uD560\uC9C0 \uBAA8\uB974\uACA0\uB2E4\uBA74 \uC194\uB77C\uB098\uB97C \uBC30\uC6B0\uAE30 \uC704\uD574 \uC774 Cookbook\uC5D0 \uAE30\uC5EC\uD574\uBCF4\uC138\uC694!.",-1),u=t("\uBAA8\uB4E0 \uC5F4\uB9B0 \uC774\uC288\uB294 "),p={href:"https://github.com/solana-developers/solana-cookbook/issues",target:"_blank",rel:"noopener noreferrer"},f=t("\uC5EC\uAE30"),g=t(", Contribution \uAC00\uC774\uB4DC\uB294 "),C={href:"https://github.com/solana-developers/solana-cookbook#contributing",target:"_blank",rel:"noopener noreferrer"},m=t("\uC5EC\uAE30"),x=t("\uC5D0\uC11C \uD655\uC778\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uB9CC\uC57D, Cookbook\uC774 \uC81C\uC548\uC744 \uB193\uCE58\uACE0 \uC788\uB2E4\uBA74, \uBD80\uB514 \uC774\uC288\uB97C \uCD94\uAC00\uD574\uC8FC\uC138\uC694."),S=i('

    How to Read the Cookbook

    Solana Cookbook\uC740 \uAC01\uAC01 \uB2E4\uB978 \uBAA9\uC801\uC758 \uC139\uC158\uB4E4\uB85C \uB098\uB258\uC5B4\uC788\uC2B5\uB2C8\uB2E4.

    \uC139\uC158\uC124\uBA85
    Core Concepts\uAC1C\uBC1C\uC744 \uC704\uD574 \uC54C\uAE30 \uC88B\uC740 Solana\uC758 \uAE30\uBCF8 \uAD6C\uC131 \uC694\uC18C\uB4E4
    Guides\uAC1C\uBC1C \uBC29\uBC95\uB4E4\uC5D0 \uB300\uD55C \uAC04\uB2E8\uD55C \uAC00\uC774\uB4DC\uB4E4
    References\uD754\uD788 \uC0AC\uC6A9\uB418\uB294 \uCF54\uB4DC\uB4E4\uC5D0 \uB300\uD55C \uC790\uB8CC
    ',3);function w(v,N){const e=r("ExternalLinkIcon");return s(),d(c,null,[l,_,k,b,o("p",null,[u,o("a",p,[f,a(e)]),g,o("a",C,[m,a(e)]),x]),S],64)}var B=n(h,[["render",w]]);export{B as default}; diff --git a/docs/.vuepress/dist/assets/index.html.6b3ea85a.js b/docs/.vuepress/dist/assets/index.html.e7bf87d4.js similarity index 98% rename from docs/.vuepress/dist/assets/index.html.6b3ea85a.js rename to docs/.vuepress/dist/assets/index.html.e7bf87d4.js index b2a7bc481..9885dae58 100644 --- a/docs/.vuepress/dist/assets/index.html.6b3ea85a.js +++ b/docs/.vuepress/dist/assets/index.html.e7bf87d4.js @@ -1 +1 @@ -import{_ as n,r as s,o as r,c as d,a as e,b as a,F as c,d as t,e as i}from"./app.cfdf84e7.js";const l={},h=e("h1",{id:"cooking-\u0E01\u0E31\u0E1A-solana",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#cooking-\u0E01\u0E31\u0E1A-solana","aria-hidden":"true"},"#"),t(" Cooking \u0E01\u0E31\u0E1A Solana")],-1),_=e("p",null,[e("em",null,"\u0E04\u0E39\u0E48\u0E21\u0E37\u0E2D Solana"),t(" \u0E04\u0E37\u0E2D\u0E41\u0E2B\u0E25\u0E48\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E19\u0E31\u0E01\u0E1E\u0E31\u0E12\u0E19\u0E32 \u0E17\u0E35\u0E48\u0E08\u0E30\u0E43\u0E2B\u0E49\u0E41\u0E19\u0E27\u0E04\u0E27\u0E32\u0E21\u0E04\u0E34\u0E14\u0E2B\u0E25\u0E31\u0E01\u0E46 \u0E41\u0E25\u0E30\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E49\u0E32\u0E07\u0E2D\u0E34\u0E07\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E2A\u0E23\u0E49\u0E32\u0E07 applications \u0E1A\u0E19 Solana \u0E42\u0E14\u0E22\u0E41\u0E15\u0E48\u0E25\u0E30\u0E41\u0E19\u0E27\u0E04\u0E27\u0E32\u0E21\u0E04\u0E34\u0E14 \u0E41\u0E25\u0E30\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E49\u0E32\u0E07\u0E2D\u0E34\u0E07\u0E08\u0E30\u0E40\u0E19\u0E49\u0E19\u0E43\u0E19\u0E41\u0E15\u0E48\u0E25\u0E30\u0E21\u0E38\u0E21\u0E21\u0E2D\u0E07\u0E02\u0E2D\u0E07\u0E01\u0E32\u0E23\u0E1E\u0E31\u0E12\u0E19\u0E32 Solana \u0E42\u0E14\u0E22\u0E08\u0E30\u0E43\u0E2B\u0E49\u0E23\u0E32\u0E22\u0E25\u0E30\u0E40\u0E2D\u0E35\u0E22\u0E14\u0E40\u0E1E\u0E34\u0E48\u0E21\u0E40\u0E15\u0E34\u0E21 \u0E23\u0E27\u0E21\u0E44\u0E1B\u0E16\u0E36\u0E07\u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19\u0E2D\u0E35\u0E01\u0E14\u0E49\u0E27\u0E22")],-1),p=e("h2",{id:"\u0E23\u0E48\u0E27\u0E21\u0E01\u0E31\u0E19\u0E40\u0E02\u0E35\u0E22\u0E19",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#\u0E23\u0E48\u0E27\u0E21\u0E01\u0E31\u0E19\u0E40\u0E02\u0E35\u0E22\u0E19","aria-hidden":"true"},"#"),t(" \u0E23\u0E48\u0E27\u0E21\u0E01\u0E31\u0E19\u0E40\u0E02\u0E35\u0E22\u0E19")],-1),u=e("p",null,"\u0E04\u0E39\u0E48\u0E21\u0E37\u0E2D\u0E19\u0E35\u0E49\u0E2D\u0E2D\u0E01\u0E41\u0E1A\u0E1A\u0E21\u0E32\u0E43\u0E2B\u0E49\u0E07\u0E48\u0E32\u0E22\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E19\u0E31\u0E01\u0E1E\u0E31\u0E12\u0E19\u0E32 Solana \u0E17\u0E35\u0E48\u0E08\u0E30\u0E23\u0E48\u0E27\u0E21\u0E01\u0E31\u0E19\u0E40\u0E02\u0E35\u0E22\u0E19 \u0E16\u0E36\u0E07\u0E41\u0E21\u0E49\u0E27\u0E48\u0E32\u0E04\u0E38\u0E13\u0E08\u0E30\u0E22\u0E31\u0E07\u0E44\u0E21\u0E48\u0E23\u0E39\u0E49\u0E27\u0E48\u0E32\u0E08\u0E30\u0E17\u0E33\u0E2D\u0E30\u0E44\u0E23\u0E22\u0E31\u0E07\u0E44\u0E07 \u0E01\u0E32\u0E23\u0E40\u0E23\u0E34\u0E48\u0E21\u0E08\u0E32\u0E01\u0E0A\u0E48\u0E27\u0E22\u0E01\u0E31\u0E19\u0E40\u0E02\u0E35\u0E22\u0E19\u0E01\u0E47\u0E40\u0E1B\u0E47\u0E19\u0E01\u0E32\u0E23\u0E40\u0E23\u0E34\u0E48\u0E21\u0E15\u0E49\u0E19\u0E17\u0E35\u0E48\u0E14\u0E35\u0E19\u0E30!",-1),b=t("\u0E25\u0E2D\u0E07\u0E14\u0E39 issues \u0E17\u0E35\u0E48\u0E40\u0E1B\u0E34\u0E14\u0E2D\u0E22\u0E39\u0E48 "),f={href:"https://github.com/solana-developers/solana-cookbook/issues",target:"_blank",rel:"noopener noreferrer"},k=t("\u0E17\u0E35\u0E48\u0E19\u0E35\u0E48"),m=t(". \u0E41\u0E19\u0E27\u0E17\u0E32\u0E07\u0E01\u0E32\u0E23\u0E0A\u0E48\u0E27\u0E22\u0E01\u0E31\u0E19 "),x={href:"https://github.com/solana-developers/solana-cookbook#contributing",target:"_blank",rel:"noopener noreferrer"},g=t("\u0E17\u0E35\u0E48\u0E19\u0E35\u0E48"),S=t(". \u0E16\u0E49\u0E32\u0E04\u0E38\u0E13\u0E40\u0E08\u0E2D\u0E27\u0E48\u0E32\u0E04\u0E39\u0E48\u0E21\u0E37\u0E2D\u0E40\u0E23\u0E32\u0E02\u0E32\u0E14\u0E2D\u0E30\u0E44\u0E23\u0E44\u0E1B \u0E01\u0E47\u0E40\u0E1B\u0E34\u0E14 issue \u0E44\u0E14\u0E49\u0E40\u0E25\u0E22"),v=i('

    \u0E27\u0E34\u0E18\u0E35\u0E2D\u0E48\u0E32\u0E19\u0E04\u0E39\u0E48\u0E21\u0E37\u0E2D

    \u0E04\u0E39\u0E48\u0E21\u0E37\u0E2D Solana \u0E41\u0E1A\u0E48\u0E07\u0E40\u0E1B\u0E47\u0E19\u0E2B\u0E25\u0E32\u0E22\u0E2A\u0E48\u0E27\u0E19 \u0E42\u0E14\u0E22\u0E41\u0E15\u0E48\u0E25\u0E30\u0E2A\u0E48\u0E27\u0E19\u0E08\u0E30\u0E40\u0E19\u0E49\u0E19\u0E04\u0E19\u0E25\u0E30\u0E40\u0E1B\u0E49\u0E32\u0E2B\u0E21\u0E32\u0E22\u0E01\u0E31\u0E19

    \u0E2A\u0E48\u0E27\u0E19\u0E04\u0E33\u0E2D\u0E18\u0E34\u0E1A\u0E32\u0E22
    \u0E41\u0E19\u0E27\u0E04\u0E27\u0E32\u0E21\u0E04\u0E34\u0E14\u0E2B\u0E25\u0E31\u0E01\u0E2A\u0E23\u0E49\u0E32\u0E07\u0E04\u0E27\u0E32\u0E21\u0E23\u0E39\u0E49\u0E17\u0E35\u0E48\u0E04\u0E27\u0E23\u0E08\u0E30\u0E23\u0E39\u0E49\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E01\u0E32\u0E23\u0E1E\u0E31\u0E12\u0E19\u0E32\u0E1A\u0E19 Solana
    \u0E41\u0E19\u0E27\u0E17\u0E32\u0E07\u0E41\u0E19\u0E27\u0E17\u0E32\u0E07\u0E02\u0E2D\u0E07\u0E41\u0E15\u0E48\u0E25\u0E30\u0E40\u0E04\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E21\u0E37\u0E2D\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E01\u0E32\u0E23\u0E1E\u0E31\u0E12\u0E19\u0E32
    \u0E2D\u0E49\u0E32\u0E07\u0E2D\u0E34\u0E07\u0E2A\u0E48\u0E27\u0E19\u0E2D\u0E49\u0E32\u0E07\u0E2D\u0E34\u0E07\u0E17\u0E35\u0E48\u0E21\u0E31\u0E01\u0E08\u0E30\u0E21\u0E35 code \u0E2A\u0E31\u0E49\u0E19\u0E46 \u0E2D\u0E22\u0E39\u0E48\u0E14\u0E49\u0E27\u0E22
    ',3);function N(V,B){const o=s("ExternalLinkIcon");return r(),d(c,null,[h,_,p,u,e("p",null,[b,e("a",f,[k,a(o)]),m,e("a",x,[g,a(o)]),S]),v],64)}var y=n(l,[["render",N]]);export{y as default}; +import{_ as n,r as s,o as r,c as d,a as e,b as a,F as c,d as t,e as i}from"./app.2fbb9e96.js";const l={},h=e("h1",{id:"cooking-\u0E01\u0E31\u0E1A-solana",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#cooking-\u0E01\u0E31\u0E1A-solana","aria-hidden":"true"},"#"),t(" Cooking \u0E01\u0E31\u0E1A Solana")],-1),_=e("p",null,[e("em",null,"\u0E04\u0E39\u0E48\u0E21\u0E37\u0E2D Solana"),t(" \u0E04\u0E37\u0E2D\u0E41\u0E2B\u0E25\u0E48\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E19\u0E31\u0E01\u0E1E\u0E31\u0E12\u0E19\u0E32 \u0E17\u0E35\u0E48\u0E08\u0E30\u0E43\u0E2B\u0E49\u0E41\u0E19\u0E27\u0E04\u0E27\u0E32\u0E21\u0E04\u0E34\u0E14\u0E2B\u0E25\u0E31\u0E01\u0E46 \u0E41\u0E25\u0E30\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E49\u0E32\u0E07\u0E2D\u0E34\u0E07\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E2A\u0E23\u0E49\u0E32\u0E07 applications \u0E1A\u0E19 Solana \u0E42\u0E14\u0E22\u0E41\u0E15\u0E48\u0E25\u0E30\u0E41\u0E19\u0E27\u0E04\u0E27\u0E32\u0E21\u0E04\u0E34\u0E14 \u0E41\u0E25\u0E30\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E49\u0E32\u0E07\u0E2D\u0E34\u0E07\u0E08\u0E30\u0E40\u0E19\u0E49\u0E19\u0E43\u0E19\u0E41\u0E15\u0E48\u0E25\u0E30\u0E21\u0E38\u0E21\u0E21\u0E2D\u0E07\u0E02\u0E2D\u0E07\u0E01\u0E32\u0E23\u0E1E\u0E31\u0E12\u0E19\u0E32 Solana \u0E42\u0E14\u0E22\u0E08\u0E30\u0E43\u0E2B\u0E49\u0E23\u0E32\u0E22\u0E25\u0E30\u0E40\u0E2D\u0E35\u0E22\u0E14\u0E40\u0E1E\u0E34\u0E48\u0E21\u0E40\u0E15\u0E34\u0E21 \u0E23\u0E27\u0E21\u0E44\u0E1B\u0E16\u0E36\u0E07\u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19\u0E2D\u0E35\u0E01\u0E14\u0E49\u0E27\u0E22")],-1),p=e("h2",{id:"\u0E23\u0E48\u0E27\u0E21\u0E01\u0E31\u0E19\u0E40\u0E02\u0E35\u0E22\u0E19",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#\u0E23\u0E48\u0E27\u0E21\u0E01\u0E31\u0E19\u0E40\u0E02\u0E35\u0E22\u0E19","aria-hidden":"true"},"#"),t(" \u0E23\u0E48\u0E27\u0E21\u0E01\u0E31\u0E19\u0E40\u0E02\u0E35\u0E22\u0E19")],-1),u=e("p",null,"\u0E04\u0E39\u0E48\u0E21\u0E37\u0E2D\u0E19\u0E35\u0E49\u0E2D\u0E2D\u0E01\u0E41\u0E1A\u0E1A\u0E21\u0E32\u0E43\u0E2B\u0E49\u0E07\u0E48\u0E32\u0E22\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E19\u0E31\u0E01\u0E1E\u0E31\u0E12\u0E19\u0E32 Solana \u0E17\u0E35\u0E48\u0E08\u0E30\u0E23\u0E48\u0E27\u0E21\u0E01\u0E31\u0E19\u0E40\u0E02\u0E35\u0E22\u0E19 \u0E16\u0E36\u0E07\u0E41\u0E21\u0E49\u0E27\u0E48\u0E32\u0E04\u0E38\u0E13\u0E08\u0E30\u0E22\u0E31\u0E07\u0E44\u0E21\u0E48\u0E23\u0E39\u0E49\u0E27\u0E48\u0E32\u0E08\u0E30\u0E17\u0E33\u0E2D\u0E30\u0E44\u0E23\u0E22\u0E31\u0E07\u0E44\u0E07 \u0E01\u0E32\u0E23\u0E40\u0E23\u0E34\u0E48\u0E21\u0E08\u0E32\u0E01\u0E0A\u0E48\u0E27\u0E22\u0E01\u0E31\u0E19\u0E40\u0E02\u0E35\u0E22\u0E19\u0E01\u0E47\u0E40\u0E1B\u0E47\u0E19\u0E01\u0E32\u0E23\u0E40\u0E23\u0E34\u0E48\u0E21\u0E15\u0E49\u0E19\u0E17\u0E35\u0E48\u0E14\u0E35\u0E19\u0E30!",-1),b=t("\u0E25\u0E2D\u0E07\u0E14\u0E39 issues \u0E17\u0E35\u0E48\u0E40\u0E1B\u0E34\u0E14\u0E2D\u0E22\u0E39\u0E48 "),f={href:"https://github.com/solana-developers/solana-cookbook/issues",target:"_blank",rel:"noopener noreferrer"},k=t("\u0E17\u0E35\u0E48\u0E19\u0E35\u0E48"),m=t(". \u0E41\u0E19\u0E27\u0E17\u0E32\u0E07\u0E01\u0E32\u0E23\u0E0A\u0E48\u0E27\u0E22\u0E01\u0E31\u0E19 "),x={href:"https://github.com/solana-developers/solana-cookbook#contributing",target:"_blank",rel:"noopener noreferrer"},g=t("\u0E17\u0E35\u0E48\u0E19\u0E35\u0E48"),S=t(". \u0E16\u0E49\u0E32\u0E04\u0E38\u0E13\u0E40\u0E08\u0E2D\u0E27\u0E48\u0E32\u0E04\u0E39\u0E48\u0E21\u0E37\u0E2D\u0E40\u0E23\u0E32\u0E02\u0E32\u0E14\u0E2D\u0E30\u0E44\u0E23\u0E44\u0E1B \u0E01\u0E47\u0E40\u0E1B\u0E34\u0E14 issue \u0E44\u0E14\u0E49\u0E40\u0E25\u0E22"),v=i('

    \u0E27\u0E34\u0E18\u0E35\u0E2D\u0E48\u0E32\u0E19\u0E04\u0E39\u0E48\u0E21\u0E37\u0E2D

    \u0E04\u0E39\u0E48\u0E21\u0E37\u0E2D Solana \u0E41\u0E1A\u0E48\u0E07\u0E40\u0E1B\u0E47\u0E19\u0E2B\u0E25\u0E32\u0E22\u0E2A\u0E48\u0E27\u0E19 \u0E42\u0E14\u0E22\u0E41\u0E15\u0E48\u0E25\u0E30\u0E2A\u0E48\u0E27\u0E19\u0E08\u0E30\u0E40\u0E19\u0E49\u0E19\u0E04\u0E19\u0E25\u0E30\u0E40\u0E1B\u0E49\u0E32\u0E2B\u0E21\u0E32\u0E22\u0E01\u0E31\u0E19

    \u0E2A\u0E48\u0E27\u0E19\u0E04\u0E33\u0E2D\u0E18\u0E34\u0E1A\u0E32\u0E22
    \u0E41\u0E19\u0E27\u0E04\u0E27\u0E32\u0E21\u0E04\u0E34\u0E14\u0E2B\u0E25\u0E31\u0E01\u0E2A\u0E23\u0E49\u0E32\u0E07\u0E04\u0E27\u0E32\u0E21\u0E23\u0E39\u0E49\u0E17\u0E35\u0E48\u0E04\u0E27\u0E23\u0E08\u0E30\u0E23\u0E39\u0E49\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E01\u0E32\u0E23\u0E1E\u0E31\u0E12\u0E19\u0E32\u0E1A\u0E19 Solana
    \u0E41\u0E19\u0E27\u0E17\u0E32\u0E07\u0E41\u0E19\u0E27\u0E17\u0E32\u0E07\u0E02\u0E2D\u0E07\u0E41\u0E15\u0E48\u0E25\u0E30\u0E40\u0E04\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E21\u0E37\u0E2D\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E01\u0E32\u0E23\u0E1E\u0E31\u0E12\u0E19\u0E32
    \u0E2D\u0E49\u0E32\u0E07\u0E2D\u0E34\u0E07\u0E2A\u0E48\u0E27\u0E19\u0E2D\u0E49\u0E32\u0E07\u0E2D\u0E34\u0E07\u0E17\u0E35\u0E48\u0E21\u0E31\u0E01\u0E08\u0E30\u0E21\u0E35 code \u0E2A\u0E31\u0E49\u0E19\u0E46 \u0E2D\u0E22\u0E39\u0E48\u0E14\u0E49\u0E27\u0E22
    ',3);function N(V,B){const o=s("ExternalLinkIcon");return r(),d(c,null,[h,_,p,u,e("p",null,[b,e("a",f,[k,a(o)]),m,e("a",x,[g,a(o)]),S]),v],64)}var y=n(l,[["render",N]]);export{y as default}; diff --git a/docs/.vuepress/dist/assets/installation.html.25b29443.js b/docs/.vuepress/dist/assets/installation.html.0017d237.js similarity index 89% rename from docs/.vuepress/dist/assets/installation.html.25b29443.js rename to docs/.vuepress/dist/assets/installation.html.0017d237.js index c86c10270..2a0e23c30 100644 --- a/docs/.vuepress/dist/assets/installation.html.25b29443.js +++ b/docs/.vuepress/dist/assets/installation.html.0017d237.js @@ -1,4 +1,4 @@ -import{_ as c,r,o as u,c as p,a as e,b as n,w as a,F as d,d as s,e as o}from"./app.cfdf84e7.js";const h={},m=e("h2",{id:"installer-web3-js",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#installer-web3-js","aria-hidden":"true"},"#"),s(" Installer Web3.js")],-1),b=e("p",null,[s("Il existe quelques biblioth\xE8ques que vous pouvez utiliser pour d\xE9marrer avec javascript ou typescript sur Solana."),e("br")],-1),_=e("h3",{id:"web3-js",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#web3-js","aria-hidden":"true"},"#"),s(" Web3.js")],-1),v={href:"https://solana-labs.github.io/solana-web3.js/",target:"_blank",rel:"noopener noreferrer"},g=e("code",null,"@solana/web3.js",-1),k=s(" est une biblioth\xE8que qui contient une grande partie des outils de base de Solana pour interagir, envoyer des transactions et lire la blockchain."),f=e("p",null,"Vous pouvez l'installer avec l'une des commandes suivantes :",-1),x=e("div",{class:"language-bash ext-sh line-numbers-mode"},[e("pre",{class:"language-bash"},[e("code",null,[e("span",{class:"token function"},"yarn"),s(),e("span",{class:"token function"},"add"),s(` @solana/web3.js +import{_ as c,r,o as u,c as p,a as e,b as n,w as a,F as d,d as s,e as o}from"./app.2fbb9e96.js";const h={},m=e("h2",{id:"installer-web3-js",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#installer-web3-js","aria-hidden":"true"},"#"),s(" Installer Web3.js")],-1),b=e("p",null,[s("Il existe quelques biblioth\xE8ques que vous pouvez utiliser pour d\xE9marrer avec javascript ou typescript sur Solana."),e("br")],-1),_=e("h3",{id:"web3-js",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#web3-js","aria-hidden":"true"},"#"),s(" Web3.js")],-1),v={href:"https://solana-labs.github.io/solana-web3.js/",target:"_blank",rel:"noopener noreferrer"},g=e("code",null,"@solana/web3.js",-1),k=s(" est une biblioth\xE8que qui contient une grande partie des outils de base de Solana pour interagir, envoyer des transactions et lire la blockchain."),f=e("p",null,"Vous pouvez l'installer avec l'une des commandes suivantes :",-1),x=e("div",{class:"language-bash ext-sh line-numbers-mode"},[e("pre",{class:"language-bash"},[e("code",null,[e("span",{class:"token function"},"yarn"),s(),e("span",{class:"token function"},"add"),s(` @solana/web3.js `)])]),e("div",{class:"line-numbers","aria-hidden":"true"},[e("span",{class:"line-number"},"1"),e("br")])],-1),z=e("div",{class:"language-bash ext-sh line-numbers-mode"},[e("pre",{class:"language-bash"},[e("code",null,[e("span",{class:"token function"},"npm"),s(),e("span",{class:"token function"},"install"),s(` --save @solana/web3.js `)])]),e("div",{class:"line-numbers","aria-hidden":"true"},[e("span",{class:"line-number"},"1"),e("br")])],-1),S=e("div",{class:"language-html ext-html line-numbers-mode"},[e("pre",{class:"language-html"},[e("code",null,[e("span",{class:"token comment"},""),s(` `),e("span",{class:"token tag"},[e("span",{class:"token tag"},[e("span",{class:"token punctuation"},"<"),s("script")]),s(),e("span",{class:"token attr-name"},"src"),e("span",{class:"token attr-value"},[e("span",{class:"token punctuation attr-equals"},"="),e("span",{class:"token punctuation"},'"'),s("https://unpkg.com/@solana/web3.js@latest/lib/index.iife.js"),e("span",{class:"token punctuation"},'"')]),e("span",{class:"token punctuation"},">")]),e("span",{class:"token script"}),e("span",{class:"token tag"},[e("span",{class:"token tag"},[e("span",{class:"token punctuation"},"")]),s(` @@ -35,10 +35,10 @@ Update successful export PATH=$PWD/bin:$PATH

    Windows

    Ouvrez un invite de commandes (cmd.exe) en tant qu'Administrateur.

    Recherchez Invite de commandes dans la barre de recherche de Windows. Lorsque l'application Invite de commandes appara\xEEt, faites un clic droit et s\xE9lectionnez "Ex\xE9cuter en tant qu'administrateur". Si une fen\xEAtre contextuelle vous demande "Voulez-vous autoriser cette application \xE0 apporter des modifications \xE0 votre appareil ?", cliquez sur "Oui".

    Copiez et collez la commande suivante, puis appuyez sur Entr\xE9e pour t\xE9l\xE9charger le programme d'installation de Solana dans un r\xE9pertoire temporaire :

    curl https://release.solana.com/v1.9.16/solana-install-init-x86_64-pc-windows-msvc.exe --output C:\\solana-install-tmp\\solana-install-init.exe --create-dirs
     
    `,7),Ve=s("Si "),Ne=e("code",null,"v1.9.16",-1),He=s(" n'est pas la version que vous souhaitez, trouver la derni\xE8re version "),Oe={href:"https://github.com/solana-labs/solana/releases",target:"_blank",rel:"noopener noreferrer"},$e=s("ici"),Be=s("."),De=o(`

    Copiez et collez la commande suivante, puis appuyez sur Entr\xE9e pour installer la derni\xE8re version de Solana. Si vous voyez un pop-up de s\xE9curit\xE9 de votre syst\xE8me, veuillez s\xE9lectionner l'autorisation de l'ex\xE9cution du programme.

    C:\\solana-install-tmp\\solana-install-init.exe v1.9.16
    -

    Pour trouver la derni\xE8re version, v\xE9rifiez les versions disponibles [ici].(https://github.com/solana-labs/solana/releases).

    Lorsque le programme d'installation est termin\xE9, appuyez sur Entr\xE9e.

    Fermez l'invite de commandes et r\xE9ouvrez-en une en tant qu'utilisateur normal.

    Recherchez Invite de commandes dans la barre de recherche de Windows,faites un clic gauche sur l'icone de l'application (pas besoin de l'\xE9x\xE9cuter en tant qu'Administrateur).

    Confirmez que vous avez install\xE9 la version d\xE9sir\xE9e de Solana en ex\xE9cutant :

    solana --version
    -

    Apr\xE8s une installation r\xE9ussie, solana-install update peut \xEAtre utilis\xE9 \xE0 tout moment pour facilement mettre \xE0 jour le logiciel de Solana vers une version plus r\xE9cente.

    T\xE9l\xE9chargement des fichiers binaires

    Alternativement, vous pouvez installer \xE0 partir des fichiers binaires au lieu d'utiliser solana-install.

    `,11),Ge=s("T\xE9l\xE9chargez les fichiers binaires en vous rendant sur "),Me={href:"https://github.com/solana-labs/solana/releases/latest",target:"_blank",rel:"noopener noreferrer"},Fe=s("https://github.com/solana-labs/solana/releases/latest"),Ue=s(", t\xE9l\xE9chargez "),Ye=e("strong",null,"solana-release-x86_64-pc-windows-msvc.tar.bz2",-1),Je=s(", puis extrayez l'archive en utilisant WinZip ou similaire."),Xe=o(`

    Ouvrez un Invite de commandes et naviguez vers le r\xE9portoire dans lequel vous avez extrait les fichiers binaires et \xE9x\xE9cutez la commande suivante :

    cd solana-release/
    +
    `,2),Ge=s("Pour trouver la derni\xE8re version, v\xE9rifiez les versions disponibles "),Me={href:"https://github.com/solana-labs/solana/releases",target:"_blank",rel:"noopener noreferrer"},Fe=s("ici"),Ue=s("."),Ye=o(`

    Lorsque le programme d'installation est termin\xE9, appuyez sur Entr\xE9e.

    Fermez l'invite de commandes et r\xE9ouvrez-en une en tant qu'utilisateur normal.

    Recherchez Invite de commandes dans la barre de recherche de Windows,faites un clic gauche sur l'icone de l'application (pas besoin de l'\xE9x\xE9cuter en tant qu'Administrateur).

    Confirmez que vous avez install\xE9 la version d\xE9sir\xE9e de Solana en ex\xE9cutant :

    solana --version
    +

    Apr\xE8s une installation r\xE9ussie, solana-install update peut \xEAtre utilis\xE9 \xE0 tout moment pour facilement mettre \xE0 jour le logiciel de Solana vers une version plus r\xE9cente.

    T\xE9l\xE9chargement des fichiers binaires

    Alternativement, vous pouvez installer \xE0 partir des fichiers binaires au lieu d'utiliser solana-install.

    `,8),Je=s("T\xE9l\xE9chargez les fichiers binaires en vous rendant sur "),Xe={href:"https://github.com/solana-labs/solana/releases/latest",target:"_blank",rel:"noopener noreferrer"},Ze=s("https://github.com/solana-labs/solana/releases/latest"),Ke=s(", t\xE9l\xE9chargez "),Qe=e("strong",null,"solana-release-x86_64-pc-windows-msvc.tar.bz2",-1),es=s(", puis extrayez l'archive en utilisant WinZip ou similaire."),ss=o(`

    Ouvrez un Invite de commandes et naviguez vers le r\xE9portoire dans lequel vous avez extrait les fichiers binaires et \xE9x\xE9cutez la commande suivante :

    cd solana-release/
     set PATH=%cd%/bin;%PATH%
    -

    Compiler \xE0 partir du code source

    `,3),Ze=s("Si vous ne pouvez pas utiliser les fichiers binaires pr\xE9-construits ou que vous pr\xE9f\xE9rez le construire vous-m\xEAme \xE0 partir du code source, rendez-vous sur "),Ke={href:"https://github.com/solana-labs/solana/releases/latest",target:"_blank",rel:"noopener noreferrer"},Qe=s("https://github.com/solana-labs/solana/releases/latest"),es=s(", et t\xE9l\xE9chargez l'archive "),ss=e("strong",null,"Source Code",-1),ns=s(". Extrayez le code et compilez les fichiers binaires avec la commande suivante :"),as=o(`
    ./scripts/cargo-install-all.sh .
    +

    Compiler \xE0 partir du code source

    `,3),ns=s("Si vous ne pouvez pas utiliser les fichiers binaires pr\xE9-construits ou que vous pr\xE9f\xE9rez le construire vous-m\xEAme \xE0 partir du code source, rendez-vous sur "),as={href:"https://github.com/solana-labs/solana/releases/latest",target:"_blank",rel:"noopener noreferrer"},ts=s("https://github.com/solana-labs/solana/releases/latest"),ls=s(", et t\xE9l\xE9chargez l'archive "),os=e("strong",null,"Source Code",-1),is=s(". Extrayez le code et compilez les fichiers binaires avec la commande suivante :"),rs=o(`
    ./scripts/cargo-install-all.sh .
     export PATH=$PWD/bin:$PATH
     

    Vous pouvez alors lancer la commande suivante pour obtenir le m\xEAme r\xE9sultat qu'avec les fichiers binaires pr\xE9construits :

    solana-install init
    -
    `,3);function ts(ls,os){const t=r("ExternalLinkIcon"),l=r("CodeGroupItem"),i=r("CodeGroup");return u(),p(d,null,[m,b,_,e("p",null,[e("a",v,[g,n(t)]),k]),f,n(i,null,{default:a(()=>[n(l,{title:"YARN",active:""},{default:a(()=>[x]),_:1}),n(l,{title:"NPM"},{default:a(()=>[z]),_:1}),n(l,{title:"BROWSER"},{default:a(()=>[S]),_:1})]),_:1}),w,q,A,E,n(i,null,{default:a(()=>[n(l,{title:"YARN",active:""},{default:a(()=>[T]),_:1}),n(l,{title:"NPM"},{default:a(()=>[j]),_:1}),n(l,{title:"BROWSER"},{default:a(()=>[L]),_:1})]),_:1}),P,R,e("p",null,[y,C,I,W,V,e("a",N,[H,n(t)]),O,e("a",$,[B,n(t)]),D]),G,n(i,null,{default:a(()=>[n(l,{title:"YARN",active:""},{default:a(()=>[M]),_:1}),n(l,{title:"NPM"},{default:a(()=>[F]),_:1})]),_:1}),U,n(i,null,{default:a(()=>[n(l,{title:"MACOS",active:""},{default:a(()=>[Y]),_:1}),n(l,{title:"LINUX"},{default:a(()=>[J]),_:1})]),_:1}),e("p",null,[X,e("a",Z,[K,n(t)]),Q]),ee,se,ne,e("p",null,[ae,te,le,e("a",oe,[ie,n(t)]),re]),ce,e("p",null,[ue,pe,de,he,me,be,_e,ve,ge,e("a",ke,[fe,n(t)]),xe]),ze,e("p",null,[Se,e("a",we,[qe,n(t)]),Ae,Ee,Te]),je,e("p",null,[Le,e("a",Pe,[Re,n(t)]),ye,Ce,Ie]),We,e("p",null,[Ve,Ne,He,e("a",Oe,[$e,n(t)]),Be]),De,e("p",null,[Ge,e("a",Me,[Fe,n(t)]),Ue,Ye,Je]),Xe,e("p",null,[Ze,e("a",Ke,[Qe,n(t)]),es,ss,ns]),as],64)}var rs=c(h,[["render",ts]]);export{rs as default}; +
    `,3);function cs(us,ps){const t=r("ExternalLinkIcon"),l=r("CodeGroupItem"),i=r("CodeGroup");return u(),p(d,null,[m,b,_,e("p",null,[e("a",v,[g,n(t)]),k]),f,n(i,null,{default:a(()=>[n(l,{title:"YARN",active:""},{default:a(()=>[x]),_:1}),n(l,{title:"NPM"},{default:a(()=>[z]),_:1}),n(l,{title:"BROWSER"},{default:a(()=>[S]),_:1})]),_:1}),w,q,A,E,n(i,null,{default:a(()=>[n(l,{title:"YARN",active:""},{default:a(()=>[T]),_:1}),n(l,{title:"NPM"},{default:a(()=>[j]),_:1}),n(l,{title:"BROWSER"},{default:a(()=>[L]),_:1})]),_:1}),P,R,e("p",null,[y,C,I,W,V,e("a",N,[H,n(t)]),O,e("a",$,[B,n(t)]),D]),G,n(i,null,{default:a(()=>[n(l,{title:"YARN",active:""},{default:a(()=>[M]),_:1}),n(l,{title:"NPM"},{default:a(()=>[F]),_:1})]),_:1}),U,n(i,null,{default:a(()=>[n(l,{title:"MACOS",active:""},{default:a(()=>[Y]),_:1}),n(l,{title:"LINUX"},{default:a(()=>[J]),_:1})]),_:1}),e("p",null,[X,e("a",Z,[K,n(t)]),Q]),ee,se,ne,e("p",null,[ae,te,le,e("a",oe,[ie,n(t)]),re]),ce,e("p",null,[ue,pe,de,he,me,be,_e,ve,ge,e("a",ke,[fe,n(t)]),xe]),ze,e("p",null,[Se,e("a",we,[qe,n(t)]),Ae,Ee,Te]),je,e("p",null,[Le,e("a",Pe,[Re,n(t)]),ye,Ce,Ie]),We,e("p",null,[Ve,Ne,He,e("a",Oe,[$e,n(t)]),Be]),De,e("p",null,[Ge,e("a",Me,[Fe,n(t)]),Ue]),Ye,e("p",null,[Je,e("a",Xe,[Ze,n(t)]),Ke,Qe,es]),ss,e("p",null,[ns,e("a",as,[ts,n(t)]),ls,os,is]),rs],64)}var hs=c(h,[["render",cs]]);export{hs as default}; diff --git a/docs/.vuepress/dist/assets/installation.html.f5c7f7bc.js b/docs/.vuepress/dist/assets/installation.html.551eda7d.js similarity index 99% rename from docs/.vuepress/dist/assets/installation.html.f5c7f7bc.js rename to docs/.vuepress/dist/assets/installation.html.551eda7d.js index 58ab8b991..68b62d079 100644 --- a/docs/.vuepress/dist/assets/installation.html.f5c7f7bc.js +++ b/docs/.vuepress/dist/assets/installation.html.551eda7d.js @@ -1,4 +1,4 @@ -import{_ as c,r,o as p,c as d,a as s,b as a,w as e,F as u,d as n,e as l}from"./app.cfdf84e7.js";const h={},b=s("h2",{id:"install-web3-js",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#install-web3-js","aria-hidden":"true"},"#"),n(" Install Web3.js")],-1),m=s("p",null,[n("There are a few libraries that you can use to get started with javascript or typescript on Solana."),s("br")],-1),_=s("h3",{id:"web3-js",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#web3-js","aria-hidden":"true"},"#"),n(" Web3.js")],-1),g={href:"https://solana-labs.github.io/solana-web3.js/",target:"_blank",rel:"noopener noreferrer"},k=s("code",null,"@solana/web3.js",-1),f=n(" is a library that has a lot of the basic Solana tools to interact, send transactions, and read from the blockchain."),v=s("p",null,"You can install with the following:",-1),w=s("div",{class:"language-bash ext-sh line-numbers-mode"},[s("pre",{class:"language-bash"},[s("code",null,[s("span",{class:"token function"},"yarn"),n(),s("span",{class:"token function"},"add"),n(` @solana/web3.js +import{_ as c,r,o as p,c as d,a as s,b as a,w as e,F as u,d as n,e as l}from"./app.2fbb9e96.js";const h={},b=s("h2",{id:"install-web3-js",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#install-web3-js","aria-hidden":"true"},"#"),n(" Install Web3.js")],-1),m=s("p",null,[n("There are a few libraries that you can use to get started with javascript or typescript on Solana."),s("br")],-1),_=s("h3",{id:"web3-js",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#web3-js","aria-hidden":"true"},"#"),n(" Web3.js")],-1),g={href:"https://solana-labs.github.io/solana-web3.js/",target:"_blank",rel:"noopener noreferrer"},k=s("code",null,"@solana/web3.js",-1),f=n(" is a library that has a lot of the basic Solana tools to interact, send transactions, and read from the blockchain."),v=s("p",null,"You can install with the following:",-1),w=s("div",{class:"language-bash ext-sh line-numbers-mode"},[s("pre",{class:"language-bash"},[s("code",null,[s("span",{class:"token function"},"yarn"),n(),s("span",{class:"token function"},"add"),n(` @solana/web3.js `)])]),s("div",{class:"line-numbers","aria-hidden":"true"},[s("span",{class:"line-number"},"1"),s("br")])],-1),x=s("div",{class:"language-bash ext-sh line-numbers-mode"},[s("pre",{class:"language-bash"},[s("code",null,[s("span",{class:"token function"},"npm"),n(),s("span",{class:"token function"},"install"),n(` --save @solana/web3.js `)])]),s("div",{class:"line-numbers","aria-hidden":"true"},[s("span",{class:"line-number"},"1"),s("br")])],-1),y=s("div",{class:"language-html ext-html line-numbers-mode"},[s("pre",{class:"language-html"},[s("code",null,[s("span",{class:"token comment"},""),n(` `),s("span",{class:"token tag"},[s("span",{class:"token tag"},[s("span",{class:"token punctuation"},"<"),n("script")]),n(),s("span",{class:"token attr-name"},"src"),s("span",{class:"token attr-value"},[s("span",{class:"token punctuation attr-equals"},"="),s("span",{class:"token punctuation"},'"'),n("https://unpkg.com/@solana/web3.js@latest/lib/index.iife.js"),s("span",{class:"token punctuation"},'"')]),s("span",{class:"token punctuation"},">")]),s("span",{class:"token script"}),s("span",{class:"token tag"},[s("span",{class:"token tag"},[s("span",{class:"token punctuation"},"")]),n(` diff --git a/docs/.vuepress/dist/assets/installation.html.29527d20.js b/docs/.vuepress/dist/assets/installation.html.6ce244fd.js similarity index 99% rename from docs/.vuepress/dist/assets/installation.html.29527d20.js rename to docs/.vuepress/dist/assets/installation.html.6ce244fd.js index 04291d923..fe8d27adc 100644 --- a/docs/.vuepress/dist/assets/installation.html.29527d20.js +++ b/docs/.vuepress/dist/assets/installation.html.6ce244fd.js @@ -1,4 +1,4 @@ -import{_ as c,r,o as p,c as d,a as s,b as a,w as e,F as u,d as n,e as o}from"./app.cfdf84e7.js";const h={},b=s("h2",{id:"\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07-web3-js",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07-web3-js","aria-hidden":"true"},"#"),n(" \u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07 Web3.js")],-1),_=s("p",null,[n("\u0E08\u0E30\u0E21\u0E35 libraries \u0E1A\u0E32\u0E07\u0E15\u0E31\u0E27\u0E17\u0E35\u0E48\u0E04\u0E38\u0E13\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E43\u0E0A\u0E49\u0E21\u0E31\u0E19\u0E40\u0E23\u0E34\u0E48\u0E21\u0E40\u0E02\u0E35\u0E22\u0E19 javascript \u0E2B\u0E23\u0E37\u0E2D typescript \u0E1A\u0E19 Solana."),s("br")],-1),m=s("h3",{id:"web3-js",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#web3-js","aria-hidden":"true"},"#"),n(" Web3.js")],-1),g={href:"https://solana-labs.github.io/solana-web3.js/",target:"_blank",rel:"noopener noreferrer"},k=s("code",null,"@solana/web3.js",-1),v=n(" \u0E04\u0E37\u0E2D library \u0E17\u0E35\u0E48\u0E21\u0E35\u0E40\u0E04\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E21\u0E37\u0E2D\u0E1E\u0E37\u0E49\u0E19\u0E10\u0E32\u0E19\u0E21\u0E32\u0E01\u0E21\u0E32\u0E22\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E01\u0E32\u0E23\u0E17\u0E33\u0E07\u0E32\u0E19\u0E40\u0E1A\u0E37\u0E49\u0E2D\u0E07\u0E15\u0E49\u0E19, \u0E2A\u0E48\u0E07 transactions, \u0E2B\u0E23\u0E37\u0E2D\u0E40\u0E2D\u0E32\u0E44\u0E27\u0E49\u0E2D\u0E48\u0E32\u0E19\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E08\u0E32\u0E01 blockchain."),f=s("p",null,"\u0E04\u0E38\u0E13\u0E2A\u0E32\u0E21\u0E32\u0E16\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07\u0E44\u0E14\u0E49\u0E15\u0E32\u0E21\u0E19\u0E35\u0E49:",-1),x=s("div",{class:"language-bash ext-sh line-numbers-mode"},[s("pre",{class:"language-bash"},[s("code",null,[s("span",{class:"token function"},"yarn"),n(),s("span",{class:"token function"},"add"),n(` @solana/web3.js +import{_ as c,r,o as p,c as d,a as s,b as a,w as e,F as u,d as n,e as o}from"./app.2fbb9e96.js";const h={},b=s("h2",{id:"\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07-web3-js",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07-web3-js","aria-hidden":"true"},"#"),n(" \u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07 Web3.js")],-1),_=s("p",null,[n("\u0E08\u0E30\u0E21\u0E35 libraries \u0E1A\u0E32\u0E07\u0E15\u0E31\u0E27\u0E17\u0E35\u0E48\u0E04\u0E38\u0E13\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E43\u0E0A\u0E49\u0E21\u0E31\u0E19\u0E40\u0E23\u0E34\u0E48\u0E21\u0E40\u0E02\u0E35\u0E22\u0E19 javascript \u0E2B\u0E23\u0E37\u0E2D typescript \u0E1A\u0E19 Solana."),s("br")],-1),m=s("h3",{id:"web3-js",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#web3-js","aria-hidden":"true"},"#"),n(" Web3.js")],-1),g={href:"https://solana-labs.github.io/solana-web3.js/",target:"_blank",rel:"noopener noreferrer"},k=s("code",null,"@solana/web3.js",-1),v=n(" \u0E04\u0E37\u0E2D library \u0E17\u0E35\u0E48\u0E21\u0E35\u0E40\u0E04\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E21\u0E37\u0E2D\u0E1E\u0E37\u0E49\u0E19\u0E10\u0E32\u0E19\u0E21\u0E32\u0E01\u0E21\u0E32\u0E22\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E01\u0E32\u0E23\u0E17\u0E33\u0E07\u0E32\u0E19\u0E40\u0E1A\u0E37\u0E49\u0E2D\u0E07\u0E15\u0E49\u0E19, \u0E2A\u0E48\u0E07 transactions, \u0E2B\u0E23\u0E37\u0E2D\u0E40\u0E2D\u0E32\u0E44\u0E27\u0E49\u0E2D\u0E48\u0E32\u0E19\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E08\u0E32\u0E01 blockchain."),f=s("p",null,"\u0E04\u0E38\u0E13\u0E2A\u0E32\u0E21\u0E32\u0E16\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07\u0E44\u0E14\u0E49\u0E15\u0E32\u0E21\u0E19\u0E35\u0E49:",-1),x=s("div",{class:"language-bash ext-sh line-numbers-mode"},[s("pre",{class:"language-bash"},[s("code",null,[s("span",{class:"token function"},"yarn"),n(),s("span",{class:"token function"},"add"),n(` @solana/web3.js `)])]),s("div",{class:"line-numbers","aria-hidden":"true"},[s("span",{class:"line-number"},"1"),s("br")])],-1),w=s("div",{class:"language-bash ext-sh line-numbers-mode"},[s("pre",{class:"language-bash"},[s("code",null,[s("span",{class:"token function"},"npm"),n(),s("span",{class:"token function"},"install"),n(` --save @solana/web3.js `)])]),s("div",{class:"line-numbers","aria-hidden":"true"},[s("span",{class:"line-number"},"1"),s("br")])],-1),S=s("div",{class:"language-html ext-html line-numbers-mode"},[s("pre",{class:"language-html"},[s("code",null,[s("span",{class:"token comment"},""),n(` `),s("span",{class:"token tag"},[s("span",{class:"token tag"},[s("span",{class:"token punctuation"},"<"),n("script")]),n(),s("span",{class:"token attr-name"},"src"),s("span",{class:"token attr-value"},[s("span",{class:"token punctuation attr-equals"},"="),s("span",{class:"token punctuation"},'"'),n("https://unpkg.com/@solana/web3.js@latest/lib/index.iife.js"),s("span",{class:"token punctuation"},'"')]),s("span",{class:"token punctuation"},">")]),s("span",{class:"token script"}),s("span",{class:"token tag"},[s("span",{class:"token tag"},[s("span",{class:"token punctuation"},"")]),n(` diff --git a/docs/.vuepress/dist/assets/installation.html.3b572ae4.js b/docs/.vuepress/dist/assets/installation.html.92c7e5ad.js similarity index 99% rename from docs/.vuepress/dist/assets/installation.html.3b572ae4.js rename to docs/.vuepress/dist/assets/installation.html.92c7e5ad.js index 84c173875..8a4e8b669 100644 --- a/docs/.vuepress/dist/assets/installation.html.3b572ae4.js +++ b/docs/.vuepress/dist/assets/installation.html.92c7e5ad.js @@ -1,4 +1,4 @@ -import{_ as c,r,o as d,c as u,a as e,b as s,w as a,F as p,d as n,e as i}from"./app.cfdf84e7.js";const h={},b=e("h2",{id:"installieren-von-web3-js",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#installieren-von-web3-js","aria-hidden":"true"},"#"),n(" Installieren von Web3.js")],-1),m=e("p",null,"Es gibt einige Bibliotheken, die Sie verwenden k\xF6nnen, um mit Javascript oder Typoskript auf Solana zu beginnen.",-1),g=e("h3",{id:"web3-js",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#web3-js","aria-hidden":"true"},"#"),n(" Web3.js")],-1),_={href:"https://solana-labs.github.io/solana-web3.js/",target:"_blank",rel:"noopener noreferrer"},k=e("code",null,"@solana/web3.js",-1),f=n(" ist eine Bibliothek mit vielen grundlegenden Solana-Tools zum Interagieren, Senden von Transaktionen und Lesen aus der Blockchain."),v=e("p",null,"Sie k\xF6nnen Folgendes installieren:",-1),S=e("div",{class:"language-bash ext-sh line-numbers-mode"},[e("pre",{class:"language-bash"},[e("code",null,[e("span",{class:"token function"},"yarn"),n(),e("span",{class:"token function"},"add"),n(` @solana/web3.js +import{_ as c,r,o as d,c as u,a as e,b as s,w as a,F as p,d as n,e as i}from"./app.2fbb9e96.js";const h={},b=e("h2",{id:"installieren-von-web3-js",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#installieren-von-web3-js","aria-hidden":"true"},"#"),n(" Installieren von Web3.js")],-1),m=e("p",null,"Es gibt einige Bibliotheken, die Sie verwenden k\xF6nnen, um mit Javascript oder Typoskript auf Solana zu beginnen.",-1),g=e("h3",{id:"web3-js",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#web3-js","aria-hidden":"true"},"#"),n(" Web3.js")],-1),_={href:"https://solana-labs.github.io/solana-web3.js/",target:"_blank",rel:"noopener noreferrer"},k=e("code",null,"@solana/web3.js",-1),f=n(" ist eine Bibliothek mit vielen grundlegenden Solana-Tools zum Interagieren, Senden von Transaktionen und Lesen aus der Blockchain."),v=e("p",null,"Sie k\xF6nnen Folgendes installieren:",-1),S=e("div",{class:"language-bash ext-sh line-numbers-mode"},[e("pre",{class:"language-bash"},[e("code",null,[e("span",{class:"token function"},"yarn"),n(),e("span",{class:"token function"},"add"),n(` @solana/web3.js `)])]),e("div",{class:"line-numbers","aria-hidden":"true"},[e("span",{class:"line-number"},"1"),e("br")])],-1),w=e("div",{class:"language-bash ext-sh line-numbers-mode"},[e("pre",{class:"language-bash"},[e("code",null,[e("span",{class:"token function"},"npm"),n(),e("span",{class:"token function"},"install"),n(` --save @solana/web3.js `)])]),e("div",{class:"line-numbers","aria-hidden":"true"},[e("span",{class:"line-number"},"1"),e("br")])],-1),x=e("div",{class:"language-html ext-html line-numbers-mode"},[e("pre",{class:"language-html"},[e("code",null,[e("span",{class:"token comment"},""),n(` `),e("span",{class:"token tag"},[e("span",{class:"token tag"},[e("span",{class:"token punctuation"},"<"),n("script")]),n(),e("span",{class:"token attr-name"},"src"),e("span",{class:"token attr-value"},[e("span",{class:"token punctuation attr-equals"},"="),e("span",{class:"token punctuation"},'"'),n("https://unpkg.com/@solana/web3.js@latest/lib/index.iife.js"),e("span",{class:"token punctuation"},'"')]),e("span",{class:"token punctuation"},">")]),e("span",{class:"token script"}),e("span",{class:"token tag"},[e("span",{class:"token tag"},[e("span",{class:"token punctuation"},"")]),n(` diff --git a/docs/.vuepress/dist/assets/installation.html.3f75d0b0.js b/docs/.vuepress/dist/assets/installation.html.95dce78f.js similarity index 99% rename from docs/.vuepress/dist/assets/installation.html.3f75d0b0.js rename to docs/.vuepress/dist/assets/installation.html.95dce78f.js index 16d6b242d..fe5b757db 100644 --- a/docs/.vuepress/dist/assets/installation.html.3f75d0b0.js +++ b/docs/.vuepress/dist/assets/installation.html.95dce78f.js @@ -1,4 +1,4 @@ -import{_ as c,r,o as u,c as d,a,b as s,w as e,F as p,d as n,e as i}from"./app.cfdf84e7.js";const b={},m=a("h2",{id:"install-web3-js-web3-js-kurulumu",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#install-web3-js-web3-js-kurulumu","aria-hidden":"true"},"#"),n(" Install Web3.js (Web3.js Kurulumu)")],-1),h=a("p",null,[n("Solana'da Javascript veya TypeScript kullanmaya ba\u015Flamak i\xE7in birka\xE7 k\xFCt\xFCphane bulunur."),a("br")],-1),k=a("h3",{id:"web3-js",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#web3-js","aria-hidden":"true"},"#"),n(" Web3.js")],-1),_={href:"https://solana-labs.github.io/solana-web3.js/",target:"_blank",rel:"noopener noreferrer"},g=a("code",null,"@solana/web3.js",-1),v=n(" etkile\u015Fim kurmak, i\u015Flem g\xF6ndermek ve blok zincirinden bilgi okumak i\xE7in bir\xE7ok temel Solana arac\u0131na sahip bir k\xFCt\xFCphanedir."),y=a("p",null,"A\u015Fa\u011F\u0131daki kod sat\u0131r\u0131 ile bu k\xFCt\xFCphaneyi kurabilirsiniz:",-1),f=a("div",{class:"language-bash ext-sh line-numbers-mode"},[a("pre",{class:"language-bash"},[a("code",null,[a("span",{class:"token function"},"yarn"),n(),a("span",{class:"token function"},"add"),n(` @solana/web3.js +import{_ as c,r,o as u,c as d,a,b as s,w as e,F as p,d as n,e as i}from"./app.2fbb9e96.js";const b={},m=a("h2",{id:"install-web3-js-web3-js-kurulumu",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#install-web3-js-web3-js-kurulumu","aria-hidden":"true"},"#"),n(" Install Web3.js (Web3.js Kurulumu)")],-1),h=a("p",null,[n("Solana'da Javascript veya TypeScript kullanmaya ba\u015Flamak i\xE7in birka\xE7 k\xFCt\xFCphane bulunur."),a("br")],-1),k=a("h3",{id:"web3-js",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#web3-js","aria-hidden":"true"},"#"),n(" Web3.js")],-1),_={href:"https://solana-labs.github.io/solana-web3.js/",target:"_blank",rel:"noopener noreferrer"},g=a("code",null,"@solana/web3.js",-1),v=n(" etkile\u015Fim kurmak, i\u015Flem g\xF6ndermek ve blok zincirinden bilgi okumak i\xE7in bir\xE7ok temel Solana arac\u0131na sahip bir k\xFCt\xFCphanedir."),y=a("p",null,"A\u015Fa\u011F\u0131daki kod sat\u0131r\u0131 ile bu k\xFCt\xFCphaneyi kurabilirsiniz:",-1),f=a("div",{class:"language-bash ext-sh line-numbers-mode"},[a("pre",{class:"language-bash"},[a("code",null,[a("span",{class:"token function"},"yarn"),n(),a("span",{class:"token function"},"add"),n(` @solana/web3.js `)])]),a("div",{class:"line-numbers","aria-hidden":"true"},[a("span",{class:"line-number"},"1"),a("br")])],-1),x=a("div",{class:"language-bash ext-sh line-numbers-mode"},[a("pre",{class:"language-bash"},[a("code",null,[a("span",{class:"token function"},"npm"),n(),a("span",{class:"token function"},"install"),n(` --save @solana/web3.js `)])]),a("div",{class:"line-numbers","aria-hidden":"true"},[a("span",{class:"line-number"},"1"),a("br")])],-1),z=a("div",{class:"language-html ext-html line-numbers-mode"},[a("pre",{class:"language-html"},[a("code",null,[a("span",{class:"token comment"},""),n(` `),a("span",{class:"token tag"},[a("span",{class:"token tag"},[a("span",{class:"token punctuation"},"<"),n("script")]),n(),a("span",{class:"token attr-name"},"src"),a("span",{class:"token attr-value"},[a("span",{class:"token punctuation attr-equals"},"="),a("span",{class:"token punctuation"},'"'),n("https://unpkg.com/@solana/web3.js@latest/lib/index.iife.js"),a("span",{class:"token punctuation"},'"')]),a("span",{class:"token punctuation"},">")]),a("span",{class:"token script"}),a("span",{class:"token tag"},[a("span",{class:"token tag"},[a("span",{class:"token punctuation"},"")]),n(` diff --git a/docs/.vuepress/dist/assets/installation.html.95199e24.js b/docs/.vuepress/dist/assets/installation.html.aa217998.js similarity index 99% rename from docs/.vuepress/dist/assets/installation.html.95199e24.js rename to docs/.vuepress/dist/assets/installation.html.aa217998.js index e7da3672c..0b38c3622 100644 --- a/docs/.vuepress/dist/assets/installation.html.95199e24.js +++ b/docs/.vuepress/dist/assets/installation.html.aa217998.js @@ -1,4 +1,4 @@ -import{_ as c,r,o as d,c as p,a,b as e,w as n,F as u,d as s,e as l}from"./app.cfdf84e7.js";const h={},b=a("h2",{id:"instalacion-de-web3-js",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#instalacion-de-web3-js","aria-hidden":"true"},"#"),s(" Instalaci\xF3n de Web3.js")],-1),m=a("p",null,[s("Hay pocas librer\xEDas que necesitas para empezar con JavaScript o TypeScript en Solana."),a("br")],-1),_=a("h3",{id:"web3-js",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#web3-js","aria-hidden":"true"},"#"),s(" Web3.js")],-1),g={href:"https://github.com/solana-labs/solana-web3.js",target:"_blank",rel:"noopener noreferrer"},k=s("@solana/web3.js"),v=s(" es una librer\xEDa que tiene todas las herramientas b\xE1sicas para interactuar con Solana, enviar transacciones, y leer desde la blockchain."),f=a("p",null,"Lo puedes instalar con algunos de los siguientes comandos:",-1),x=a("div",{class:"language-bash ext-sh line-numbers-mode"},[a("pre",{class:"language-bash"},[a("code",null,[a("span",{class:"token function"},"yarn"),s(),a("span",{class:"token function"},"add"),s(` @solana/web3.js +import{_ as c,r,o as d,c as p,a,b as e,w as n,F as u,d as s,e as l}from"./app.2fbb9e96.js";const h={},b=a("h2",{id:"instalacion-de-web3-js",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#instalacion-de-web3-js","aria-hidden":"true"},"#"),s(" Instalaci\xF3n de Web3.js")],-1),m=a("p",null,[s("Hay pocas librer\xEDas que necesitas para empezar con JavaScript o TypeScript en Solana."),a("br")],-1),_=a("h3",{id:"web3-js",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#web3-js","aria-hidden":"true"},"#"),s(" Web3.js")],-1),g={href:"https://github.com/solana-labs/solana-web3.js",target:"_blank",rel:"noopener noreferrer"},k=s("@solana/web3.js"),v=s(" es una librer\xEDa que tiene todas las herramientas b\xE1sicas para interactuar con Solana, enviar transacciones, y leer desde la blockchain."),f=a("p",null,"Lo puedes instalar con algunos de los siguientes comandos:",-1),x=a("div",{class:"language-bash ext-sh line-numbers-mode"},[a("pre",{class:"language-bash"},[a("code",null,[a("span",{class:"token function"},"yarn"),s(),a("span",{class:"token function"},"add"),s(` @solana/web3.js `)])]),a("div",{class:"line-numbers","aria-hidden":"true"},[a("span",{class:"line-number"},"1"),a("br")])],-1),S=a("div",{class:"language-bash ext-sh line-numbers-mode"},[a("pre",{class:"language-bash"},[a("code",null,[a("span",{class:"token function"},"npm"),s(),a("span",{class:"token function"},"install"),s(` --save @solana/web3.js `)])]),a("div",{class:"line-numbers","aria-hidden":"true"},[a("span",{class:"line-number"},"1"),a("br")])],-1),w=a("div",{class:"language-html ext-html line-numbers-mode"},[a("pre",{class:"language-html"},[a("code",null,[a("span",{class:"token comment"},""),s(` `),a("span",{class:"token tag"},[a("span",{class:"token tag"},[a("span",{class:"token punctuation"},"<"),s("script")]),s(),a("span",{class:"token attr-name"},"src"),a("span",{class:"token attr-value"},[a("span",{class:"token punctuation attr-equals"},"="),a("span",{class:"token punctuation"},'"'),s("https://unpkg.com/@solana/web3.js@latest/lib/index.iife.js"),a("span",{class:"token punctuation"},'"')]),a("span",{class:"token punctuation"},">")]),a("span",{class:"token script"}),a("span",{class:"token tag"},[a("span",{class:"token tag"},[a("span",{class:"token punctuation"},"")]),s(` diff --git a/docs/.vuepress/dist/assets/installation.html.d44a3a59.js b/docs/.vuepress/dist/assets/installation.html.ba618e0e.js similarity index 99% rename from docs/.vuepress/dist/assets/installation.html.d44a3a59.js rename to docs/.vuepress/dist/assets/installation.html.ba618e0e.js index 56382e5fd..025d4251a 100644 --- a/docs/.vuepress/dist/assets/installation.html.d44a3a59.js +++ b/docs/.vuepress/dist/assets/installation.html.ba618e0e.js @@ -1,4 +1,4 @@ -import{_ as r,r as c,o as p,c as h,a as n,b as a,w as e,F as u,d as s,e as o}from"./app.cfdf84e7.js";const d={},b=n("h2",{id:"cai-\u0111at-web3-js",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#cai-\u0111at-web3-js","aria-hidden":"true"},"#"),s(" C\xE0i \u0111\u1EB7t Web3.js")],-1),m=n("p",null,[s("C\xF3 r\u1EA5t nhi\u1EC1u th\u01B0 vi\u1EC7n Javascript ho\u1EB7c Typescript b\u1EA1n c\xF3 th\u1EC3 d\xF9ng \u0111\u1EC3 t\u01B0\u01A1ng t\xE1c v\u1EDBi Solana."),n("br")],-1),_=n("h3",{id:"web3-js",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#web3-js","aria-hidden":"true"},"#"),s(" Web3.js")],-1),g={href:"https://solana-labs.github.io/solana-web3.js/",target:"_blank",rel:"noopener noreferrer"},k=n("code",null,"@solana/web3.js",-1),v=s(" l\xE0 m\u1ED9t th\u01B0 vi\u1EC7n ph\u1ED5 bi\u1EBFn v\xE0 h\u1ED7 tr\u1EE3 nhi\u1EC1u c\xF4ng c\u1EE5 thi\u1EBFt y\u1EBFu cho vi\u1EC7c l\u1EADp tr\xECnh tr\xEAn Solana. V\xED d\u1EE5 nh\u01B0 \u0111\u1ECDc d\u1EEF li\u1EC7u t\u1EEB blockchain, k\xED giao d\u1ECBch, g\u1EEDi giao d\u1ECBch."),f=n("p",null,"B\u1EA1n c\xF3 th\u1EC3 c\xE0i \u0111\u1EB7t th\xF4ng qua c\xE1c b\u01B0\u1EDBc sau:",-1),x=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token function"},"yarn"),s(),n("span",{class:"token function"},"add"),s(` @solana/web3.js +import{_ as r,r as c,o as p,c as h,a as n,b as a,w as e,F as u,d as s,e as o}from"./app.2fbb9e96.js";const d={},b=n("h2",{id:"cai-\u0111at-web3-js",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#cai-\u0111at-web3-js","aria-hidden":"true"},"#"),s(" C\xE0i \u0111\u1EB7t Web3.js")],-1),m=n("p",null,[s("C\xF3 r\u1EA5t nhi\u1EC1u th\u01B0 vi\u1EC7n Javascript ho\u1EB7c Typescript b\u1EA1n c\xF3 th\u1EC3 d\xF9ng \u0111\u1EC3 t\u01B0\u01A1ng t\xE1c v\u1EDBi Solana."),n("br")],-1),_=n("h3",{id:"web3-js",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#web3-js","aria-hidden":"true"},"#"),s(" Web3.js")],-1),g={href:"https://solana-labs.github.io/solana-web3.js/",target:"_blank",rel:"noopener noreferrer"},k=n("code",null,"@solana/web3.js",-1),v=s(" l\xE0 m\u1ED9t th\u01B0 vi\u1EC7n ph\u1ED5 bi\u1EBFn v\xE0 h\u1ED7 tr\u1EE3 nhi\u1EC1u c\xF4ng c\u1EE5 thi\u1EBFt y\u1EBFu cho vi\u1EC7c l\u1EADp tr\xECnh tr\xEAn Solana. V\xED d\u1EE5 nh\u01B0 \u0111\u1ECDc d\u1EEF li\u1EC7u t\u1EEB blockchain, k\xED giao d\u1ECBch, g\u1EEDi giao d\u1ECBch."),f=n("p",null,"B\u1EA1n c\xF3 th\u1EC3 c\xE0i \u0111\u1EB7t th\xF4ng qua c\xE1c b\u01B0\u1EDBc sau:",-1),x=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token function"},"yarn"),s(),n("span",{class:"token function"},"add"),s(` @solana/web3.js `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),w=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token function"},"npm"),s(),n("span",{class:"token function"},"install"),s(` --save @solana/web3.js `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),T=n("div",{class:"language-html ext-html line-numbers-mode"},[n("pre",{class:"language-html"},[n("code",null,[n("span",{class:"token comment"},""),s(` `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("script")]),s(),n("span",{class:"token attr-name"},"src"),n("span",{class:"token attr-value"},[n("span",{class:"token punctuation attr-equals"},"="),n("span",{class:"token punctuation"},'"'),s("https://unpkg.com/@solana/web3.js@latest/lib/index.iife.js"),n("span",{class:"token punctuation"},'"')]),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"}),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` diff --git a/docs/.vuepress/dist/assets/installation.html.a4055925.js b/docs/.vuepress/dist/assets/installation.html.d1ee0289.js similarity index 99% rename from docs/.vuepress/dist/assets/installation.html.a4055925.js rename to docs/.vuepress/dist/assets/installation.html.d1ee0289.js index e3a3323aa..5c471f8d8 100644 --- a/docs/.vuepress/dist/assets/installation.html.a4055925.js +++ b/docs/.vuepress/dist/assets/installation.html.d1ee0289.js @@ -1,4 +1,4 @@ -import{_ as r,r as c,o as p,c as d,a as s,b as a,w as e,F as u,d as n,e as o}from"./app.cfdf84e7.js";const h={},b=s("h2",{id:"install-web3-js",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#install-web3-js","aria-hidden":"true"},"#"),n(" Install Web3.js")],-1),_=s("p",null,[n("Solana\uC5D0\uB294 javascript\uC640 typescript\uB85C \uC2DC\uC791\uD558\uAE30 \uC704\uD574 \uC0AC\uC6A9\uD560 \uC218 \uC788\uB294 \uBA87 \uAC00\uC9C0 \uB77C\uC774\uBE0C\uB7EC\uB9AC\uB4E4\uC774 \uC788\uC2B5\uB2C8\uB2E4."),s("br")],-1),m=s("h3",{id:"web3-js",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#web3-js","aria-hidden":"true"},"#"),n(" Web3.js")],-1),g={href:"https://solana-labs.github.io/solana-web3.js/",target:"_blank",rel:"noopener noreferrer"},k=s("code",null,"@solana/web3.js",-1),v=n("\uB294 \uD1B5\uC2E0\uD558\uACE0, Transaction\uB4E4\uC744 \uBCF4\uB0B4\uACE0, Blockchain\uC73C\uB85C\uBD80\uD130 \uC77D\uAE30 \uC704\uD55C \uAE30\uBCF8\uC801\uC778 Solana \uB3C4\uAD6C\uB4E4\uC774 \uB9CE\uC774 \uC788\uB294 \uB77C\uC774\uBE0C\uB7EC\uB9AC \uC785\uB2C8\uB2E4."),f=s("p",null,"\uC544\uB798\uC640 \uAC19\uC774 \uC124\uCE58\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.",-1),x=s("div",{class:"language-bash ext-sh line-numbers-mode"},[s("pre",{class:"language-bash"},[s("code",null,[s("span",{class:"token function"},"yarn"),n(),s("span",{class:"token function"},"add"),n(` @solana/web3.js +import{_ as r,r as c,o as p,c as d,a as s,b as a,w as e,F as u,d as n,e as o}from"./app.2fbb9e96.js";const h={},b=s("h2",{id:"install-web3-js",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#install-web3-js","aria-hidden":"true"},"#"),n(" Install Web3.js")],-1),_=s("p",null,[n("Solana\uC5D0\uB294 javascript\uC640 typescript\uB85C \uC2DC\uC791\uD558\uAE30 \uC704\uD574 \uC0AC\uC6A9\uD560 \uC218 \uC788\uB294 \uBA87 \uAC00\uC9C0 \uB77C\uC774\uBE0C\uB7EC\uB9AC\uB4E4\uC774 \uC788\uC2B5\uB2C8\uB2E4."),s("br")],-1),m=s("h3",{id:"web3-js",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#web3-js","aria-hidden":"true"},"#"),n(" Web3.js")],-1),g={href:"https://solana-labs.github.io/solana-web3.js/",target:"_blank",rel:"noopener noreferrer"},k=s("code",null,"@solana/web3.js",-1),v=n("\uB294 \uD1B5\uC2E0\uD558\uACE0, Transaction\uB4E4\uC744 \uBCF4\uB0B4\uACE0, Blockchain\uC73C\uB85C\uBD80\uD130 \uC77D\uAE30 \uC704\uD55C \uAE30\uBCF8\uC801\uC778 Solana \uB3C4\uAD6C\uB4E4\uC774 \uB9CE\uC774 \uC788\uB294 \uB77C\uC774\uBE0C\uB7EC\uB9AC \uC785\uB2C8\uB2E4."),f=s("p",null,"\uC544\uB798\uC640 \uAC19\uC774 \uC124\uCE58\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.",-1),x=s("div",{class:"language-bash ext-sh line-numbers-mode"},[s("pre",{class:"language-bash"},[s("code",null,[s("span",{class:"token function"},"yarn"),n(),s("span",{class:"token function"},"add"),n(` @solana/web3.js `)])]),s("div",{class:"line-numbers","aria-hidden":"true"},[s("span",{class:"line-number"},"1"),s("br")])],-1),w=s("div",{class:"language-bash ext-sh line-numbers-mode"},[s("pre",{class:"language-bash"},[s("code",null,[s("span",{class:"token function"},"npm"),n(),s("span",{class:"token function"},"install"),n(` --save @solana/web3.js `)])]),s("div",{class:"line-numbers","aria-hidden":"true"},[s("span",{class:"line-number"},"1"),s("br")])],-1),S=s("div",{class:"language-html ext-html line-numbers-mode"},[s("pre",{class:"language-html"},[s("code",null,[s("span",{class:"token comment"},""),n(` `),s("span",{class:"token tag"},[s("span",{class:"token tag"},[s("span",{class:"token punctuation"},"<"),n("script")]),n(),s("span",{class:"token attr-name"},"src"),s("span",{class:"token attr-value"},[s("span",{class:"token punctuation attr-equals"},"="),s("span",{class:"token punctuation"},'"'),n("https://unpkg.com/@solana/web3.js@latest/lib/index.iife.js"),s("span",{class:"token punctuation"},'"')]),s("span",{class:"token punctuation"},">")]),s("span",{class:"token script"}),s("span",{class:"token tag"},[s("span",{class:"token tag"},[s("span",{class:"token punctuation"},"")]),n(` diff --git a/docs/.vuepress/dist/assets/installation.html.78e7153a.js b/docs/.vuepress/dist/assets/installation.html.d22331f2.js similarity index 99% rename from docs/.vuepress/dist/assets/installation.html.78e7153a.js rename to docs/.vuepress/dist/assets/installation.html.d22331f2.js index 39275cc8b..22628ec57 100644 --- a/docs/.vuepress/dist/assets/installation.html.78e7153a.js +++ b/docs/.vuepress/dist/assets/installation.html.d22331f2.js @@ -1,4 +1,4 @@ -import{_ as c,r,o as u,c as d,a,b as s,w as e,F as p,d as n,e as i}from"./app.cfdf84e7.js";const h={},b=a("h2",{id:"unduh-web3-js",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#unduh-web3-js","aria-hidden":"true"},"#"),n(" Unduh Web3.js")],-1),m=a("p",null,[n("Ada beberapa libraries yang bisa anda gunakan, dimulai dengan javascript atau typescript di Solana. "),a("br")],-1),k=a("h3",{id:"web3-js",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#web3-js","aria-hidden":"true"},"#"),n(" Web3.js")],-1),g={href:"https://solana-labs.github.io/solana-web3.js/",target:"_blank",rel:"noopener noreferrer"},_=a("code",null,"@solana/web3.js",-1),v=n(" adalah library yang mempunyai banyak fungsi dasar di Solana untuk interaksi, mengirim transaksi, dan membaca dari blockchain."),f=a("p",null,"Anda bisa melakukan instalasi library ini dengan cara berikut :",-1),x=a("div",{class:"language-bash ext-sh line-numbers-mode"},[a("pre",{class:"language-bash"},[a("code",null,[a("span",{class:"token function"},"yarn"),n(),a("span",{class:"token function"},"add"),n(` @solana/web3.js +import{_ as c,r,o as u,c as d,a,b as s,w as e,F as p,d as n,e as i}from"./app.2fbb9e96.js";const h={},b=a("h2",{id:"unduh-web3-js",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#unduh-web3-js","aria-hidden":"true"},"#"),n(" Unduh Web3.js")],-1),m=a("p",null,[n("Ada beberapa libraries yang bisa anda gunakan, dimulai dengan javascript atau typescript di Solana. "),a("br")],-1),k=a("h3",{id:"web3-js",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#web3-js","aria-hidden":"true"},"#"),n(" Web3.js")],-1),g={href:"https://solana-labs.github.io/solana-web3.js/",target:"_blank",rel:"noopener noreferrer"},_=a("code",null,"@solana/web3.js",-1),v=n(" adalah library yang mempunyai banyak fungsi dasar di Solana untuk interaksi, mengirim transaksi, dan membaca dari blockchain."),f=a("p",null,"Anda bisa melakukan instalasi library ini dengan cara berikut :",-1),x=a("div",{class:"language-bash ext-sh line-numbers-mode"},[a("pre",{class:"language-bash"},[a("code",null,[a("span",{class:"token function"},"yarn"),n(),a("span",{class:"token function"},"add"),n(` @solana/web3.js `)])]),a("div",{class:"line-numbers","aria-hidden":"true"},[a("span",{class:"line-number"},"1"),a("br")])],-1),w=a("div",{class:"language-bash ext-sh line-numbers-mode"},[a("pre",{class:"language-bash"},[a("code",null,[a("span",{class:"token function"},"npm"),n(),a("span",{class:"token function"},"install"),n(` --save @solana/web3.js `)])]),a("div",{class:"line-numbers","aria-hidden":"true"},[a("span",{class:"line-number"},"1"),a("br")])],-1),y=a("div",{class:"language-html ext-html line-numbers-mode"},[a("pre",{class:"language-html"},[a("code",null,[a("span",{class:"token comment"},""),n(` `),a("span",{class:"token tag"},[a("span",{class:"token tag"},[a("span",{class:"token punctuation"},"<"),n("script")]),n(),a("span",{class:"token attr-name"},"src"),a("span",{class:"token attr-value"},[a("span",{class:"token punctuation attr-equals"},"="),a("span",{class:"token punctuation"},'"'),n("https://unpkg.com/@solana/web3.js@latest/lib/index.iife.js"),a("span",{class:"token punctuation"},'"')]),a("span",{class:"token punctuation"},">")]),a("span",{class:"token script"}),a("span",{class:"token tag"},[a("span",{class:"token tag"},[a("span",{class:"token punctuation"},"")]),n(` diff --git a/docs/.vuepress/dist/assets/installation.html.8bef868a.js b/docs/.vuepress/dist/assets/installation.html.f6599085.js similarity index 96% rename from docs/.vuepress/dist/assets/installation.html.8bef868a.js rename to docs/.vuepress/dist/assets/installation.html.f6599085.js index c6eaa7b7b..9ade5c2e9 100644 --- a/docs/.vuepress/dist/assets/installation.html.8bef868a.js +++ b/docs/.vuepress/dist/assets/installation.html.f6599085.js @@ -1 +1 @@ -const e={key:"v-4605d97e",path:"/fr/getting-started/installation.html",title:"Installation",lang:"fr-FR",frontmatter:{title:"Installation",head:[["meta",{name:"title",content:"Solana Cookbook | Installation"}],["meta",{name:"og:title",content:"Solana Cookbook | Installation"}],["meta",{name:"description",content:"Apprenez comment d\xE9marrer avec Solana \xE0 l'aide de tutoriels, de guides et d'exemples."}],["meta",{name:"og:description",content:"Apprenez comment d\xE9marrer avec Solana \xE0 l'aide de tutoriels, de guides et d'exemples."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"Installer Web3.js",slug:"installer-web3-js",children:[{level:3,title:"Web3.js",slug:"web3-js",children:[]},{level:3,title:"SPL-Token",slug:"spl-token",children:[]},{level:3,title:"Wallet-Adapter",slug:"wallet-adapter",children:[]}]},{level:2,title:"Installer Rust",slug:"installer-rust",children:[]},{level:2,title:"Installer CLI",slug:"installer-cli",children:[{level:3,title:"macOS & Linux",slug:"macos-linux",children:[]},{level:3,title:"Windows",slug:"windows",children:[]},{level:3,title:"Compiler \xE0 partir du code source",slug:"compiler-a-partir-du-code-source",children:[]}]}],git:{updatedTime:1664978942e3},filePathRelative:"fr/getting-started/installation.md"};export{e as data}; +const e={key:"v-4605d97e",path:"/fr/getting-started/installation.html",title:"Installation",lang:"fr-FR",frontmatter:{title:"Installation",head:[["meta",{name:"title",content:"Solana Cookbook | Installation"}],["meta",{name:"og:title",content:"Solana Cookbook | Installation"}],["meta",{name:"description",content:"Apprenez comment d\xE9marrer avec Solana \xE0 l'aide de tutoriels, de guides et d'exemples."}],["meta",{name:"og:description",content:"Apprenez comment d\xE9marrer avec Solana \xE0 l'aide de tutoriels, de guides et d'exemples."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"Installer Web3.js",slug:"installer-web3-js",children:[{level:3,title:"Web3.js",slug:"web3-js",children:[]},{level:3,title:"SPL-Token",slug:"spl-token",children:[]},{level:3,title:"Wallet-Adapter",slug:"wallet-adapter",children:[]}]},{level:2,title:"Installer Rust",slug:"installer-rust",children:[]},{level:2,title:"Installer CLI",slug:"installer-cli",children:[{level:3,title:"macOS & Linux",slug:"macos-linux",children:[]},{level:3,title:"Windows",slug:"windows",children:[]},{level:3,title:"Compiler \xE0 partir du code source",slug:"compiler-a-partir-du-code-source",children:[]}]}],git:{updatedTime:1674873344e3},filePathRelative:"fr/getting-started/installation.md"};export{e as data}; diff --git a/docs/.vuepress/dist/assets/installation.html.e7d898bf.js b/docs/.vuepress/dist/assets/installation.html.ffbc7ac8.js similarity index 99% rename from docs/.vuepress/dist/assets/installation.html.e7d898bf.js rename to docs/.vuepress/dist/assets/installation.html.ffbc7ac8.js index 5329a6be7..1ae9fbcbb 100644 --- a/docs/.vuepress/dist/assets/installation.html.e7d898bf.js +++ b/docs/.vuepress/dist/assets/installation.html.ffbc7ac8.js @@ -1,4 +1,4 @@ -import{_ as r,r as i,o as p,c as d,a as s,b as a,w as e,F as u,d as n,e as o}from"./app.cfdf84e7.js";const h={},b=s("h2",{id:"\u5B89\u88C5web3-js",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#\u5B89\u88C5web3-js","aria-hidden":"true"},"#"),n(" \u5B89\u88C5Web3.js")],-1),_=s("p",null,[n("\u7528JavaScript\u6216\u8005TypeScript\u8FDB\u884CSolana\u7F16\u7A0B\u65F6\uFF0C\u4F60\u4F1A\u7528\u5230\u4E0B\u9762\u7684\u51E0\u4E2A\u5E93\u3002"),s("br")],-1),m=s("h3",{id:"web3-js",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#web3-js","aria-hidden":"true"},"#"),n(" Web3.js")],-1),g={href:"https://solana-labs.github.io/solana-web3.js/",target:"_blank",rel:"noopener noreferrer"},k=s("code",null,"@solana/web3.js",-1),v=n(" \u8FD9\u4E2A\u5E93\u63D0\u4F9B\u4E86\u5F88\u591A\u7528\u4E8E\u4E0ESolana\u4EA4\u4E92\uFF0C\u53D1\u9001\u4EA4\u6613\uFF0C\u4ECE\u533A\u5757\u94FE\u4E0A\u8BFB\u53D6\u6570\u636E\u7B49\u64CD\u4F5C\u7684\u57FA\u7840\u529F\u80FD\u3002"),f=s("p",null,"\u53EF\u4EE5\u7528\u4EE5\u4E0B\u547D\u4EE4\u5B89\u88C5\uFF1A",-1),x=s("div",{class:"language-bash ext-sh line-numbers-mode"},[s("pre",{class:"language-bash"},[s("code",null,[s("span",{class:"token function"},"yarn"),n(),s("span",{class:"token function"},"add"),n(` @solana/web3.js +import{_ as r,r as i,o as p,c as d,a as s,b as a,w as e,F as u,d as n,e as o}from"./app.2fbb9e96.js";const h={},b=s("h2",{id:"\u5B89\u88C5web3-js",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#\u5B89\u88C5web3-js","aria-hidden":"true"},"#"),n(" \u5B89\u88C5Web3.js")],-1),_=s("p",null,[n("\u7528JavaScript\u6216\u8005TypeScript\u8FDB\u884CSolana\u7F16\u7A0B\u65F6\uFF0C\u4F60\u4F1A\u7528\u5230\u4E0B\u9762\u7684\u51E0\u4E2A\u5E93\u3002"),s("br")],-1),m=s("h3",{id:"web3-js",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#web3-js","aria-hidden":"true"},"#"),n(" Web3.js")],-1),g={href:"https://solana-labs.github.io/solana-web3.js/",target:"_blank",rel:"noopener noreferrer"},k=s("code",null,"@solana/web3.js",-1),v=n(" \u8FD9\u4E2A\u5E93\u63D0\u4F9B\u4E86\u5F88\u591A\u7528\u4E8E\u4E0ESolana\u4EA4\u4E92\uFF0C\u53D1\u9001\u4EA4\u6613\uFF0C\u4ECE\u533A\u5757\u94FE\u4E0A\u8BFB\u53D6\u6570\u636E\u7B49\u64CD\u4F5C\u7684\u57FA\u7840\u529F\u80FD\u3002"),f=s("p",null,"\u53EF\u4EE5\u7528\u4EE5\u4E0B\u547D\u4EE4\u5B89\u88C5\uFF1A",-1),x=s("div",{class:"language-bash ext-sh line-numbers-mode"},[s("pre",{class:"language-bash"},[s("code",null,[s("span",{class:"token function"},"yarn"),n(),s("span",{class:"token function"},"add"),n(` @solana/web3.js `)])]),s("div",{class:"line-numbers","aria-hidden":"true"},[s("span",{class:"line-number"},"1"),s("br")])],-1),w=s("div",{class:"language-bash ext-sh line-numbers-mode"},[s("pre",{class:"language-bash"},[s("code",null,[s("span",{class:"token function"},"npm"),n(),s("span",{class:"token function"},"install"),n(` --save @solana/web3.js `)])]),s("div",{class:"line-numbers","aria-hidden":"true"},[s("span",{class:"line-number"},"1"),s("br")])],-1),S=s("div",{class:"language-html ext-html line-numbers-mode"},[s("pre",{class:"language-html"},[s("code",null,[s("span",{class:"token comment"},""),n(` `),s("span",{class:"token tag"},[s("span",{class:"token tag"},[s("span",{class:"token punctuation"},"<"),n("script")]),n(),s("span",{class:"token attr-name"},"src"),s("span",{class:"token attr-value"},[s("span",{class:"token punctuation attr-equals"},"="),s("span",{class:"token punctuation"},'"'),n("https://unpkg.com/@solana/web3.js@latest/lib/index.iife.js"),s("span",{class:"token punctuation"},'"')]),s("span",{class:"token punctuation"},">")]),s("span",{class:"token script"}),s("span",{class:"token tag"},[s("span",{class:"token tag"},[s("span",{class:"token punctuation"},"")]),n(` diff --git a/docs/.vuepress/dist/assets/jupiter.html.7de8c4db.js b/docs/.vuepress/dist/assets/jupiter.html.0da87dba.js similarity index 99% rename from docs/.vuepress/dist/assets/jupiter.html.7de8c4db.js rename to docs/.vuepress/dist/assets/jupiter.html.0da87dba.js index 26be4cf5b..f1eac7be2 100644 --- a/docs/.vuepress/dist/assets/jupiter.html.7de8c4db.js +++ b/docs/.vuepress/dist/assets/jupiter.html.0da87dba.js @@ -1,4 +1,4 @@ -import{_ as i,r as l,o as r,c as k,b as t,w as a,a as n,F as b,d as s}from"./app.cfdf84e7.js";const m={},d=n("h1",{id:"jupiter",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#jupiter","aria-hidden":"true"},"#"),s(" Jupiter")],-1),h=n("p",null,"Jupiter is the key liquidity aggregator for Solana, offering the widest range of tokens and best route discovery between any token pair.",-1),g=n("h3",{id:"installation",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#installation","aria-hidden":"true"},"#"),s(" Installation")],-1),f=n("p",null,"@jup-ag/core is the Core package used to interact with jupiter on-chain programs to perform swaps between two possible token pairs.",-1),w=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token function"},"yarn"),s(),n("span",{class:"token function"},"add"),s(` @jup-ag/core +import{_ as i,r as l,o as r,c as k,b as t,w as a,a as n,F as b,d as s}from"./app.2fbb9e96.js";const m={},d=n("h1",{id:"jupiter",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#jupiter","aria-hidden":"true"},"#"),s(" Jupiter")],-1),h=n("p",null,"Jupiter is the key liquidity aggregator for Solana, offering the widest range of tokens and best route discovery between any token pair.",-1),g=n("h3",{id:"installation",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#installation","aria-hidden":"true"},"#"),s(" Installation")],-1),f=n("p",null,"@jup-ag/core is the Core package used to interact with jupiter on-chain programs to perform swaps between two possible token pairs.",-1),w=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token function"},"yarn"),s(),n("span",{class:"token function"},"add"),s(` @jup-ag/core `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),y=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token function"},"npm"),s(),n("span",{class:"token function"},"install"),s(` @jup-ag/core `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),_=n("h3",{id:"fetching-token-list-from-jupiter",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#fetching-token-list-from-jupiter","aria-hidden":"true"},"#"),s(" Fetching Token list from Jupiter")],-1),v=n("p",null,"All the possible tokens that can be swapped with jupiter for a given network is being fetched.",-1),T=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Jupiter"),n("span",{class:"token punctuation"},","),s(" RouteInfo"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token constant"},"TOKEN_LIST_URL"),s(),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@jup-ag/core"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` diff --git a/docs/.vuepress/dist/assets/jupiter.html.06066588.js b/docs/.vuepress/dist/assets/jupiter.html.0fe2690a.js similarity index 99% rename from docs/.vuepress/dist/assets/jupiter.html.06066588.js rename to docs/.vuepress/dist/assets/jupiter.html.0fe2690a.js index de4ca0202..1a2760029 100644 --- a/docs/.vuepress/dist/assets/jupiter.html.06066588.js +++ b/docs/.vuepress/dist/assets/jupiter.html.0fe2690a.js @@ -1,4 +1,4 @@ -import{_ as i,r as l,o as r,c as k,b as t,w as a,a as n,F as b,d as s}from"./app.cfdf84e7.js";const m={},d=n("h1",{id:"jupiter",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#jupiter","aria-hidden":"true"},"#"),s(" Jupiter")],-1),g=n("p",null,"Jupiter adalah agregator likuiditas utama untuk Solana, menawarkan rentang token terluas dan penemuan rute terbaik di antara pasangan token mana pun.",-1),y=n("h3",{id:"instalasi",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#instalasi","aria-hidden":"true"},"#"),s(" Instalasi")],-1),w=n("p",null,"@jup-ag/core adalah paket Core yang digunakan untuk berinteraksi dengan program on-chain jupiter untuk melakukan swap antara dua kemungkinan pasangan token.",-1),f=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token function"},"yarn"),s(),n("span",{class:"token function"},"add"),s(` @jup-ag/core +import{_ as i,r as l,o as r,c as k,b as t,w as a,a as n,F as b,d as s}from"./app.2fbb9e96.js";const m={},d=n("h1",{id:"jupiter",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#jupiter","aria-hidden":"true"},"#"),s(" Jupiter")],-1),g=n("p",null,"Jupiter adalah agregator likuiditas utama untuk Solana, menawarkan rentang token terluas dan penemuan rute terbaik di antara pasangan token mana pun.",-1),y=n("h3",{id:"instalasi",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#instalasi","aria-hidden":"true"},"#"),s(" Instalasi")],-1),w=n("p",null,"@jup-ag/core adalah paket Core yang digunakan untuk berinteraksi dengan program on-chain jupiter untuk melakukan swap antara dua kemungkinan pasangan token.",-1),f=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token function"},"yarn"),s(),n("span",{class:"token function"},"add"),s(` @jup-ag/core `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),h=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token function"},"npm"),s(),n("span",{class:"token function"},"install"),s(` @jup-ag/core `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),_=n("h3",{id:"mengambil-list-token-dari-jupiter",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#mengambil-list-token-dari-jupiter","aria-hidden":"true"},"#"),s(" Mengambil List Token dari Jupiter")],-1),v=n("p",null,"Semua kemungkinan token yang dapat ditukar dengan jupiter untuk jaringan tertentu sedang diambil.",-1),T=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Jupiter"),n("span",{class:"token punctuation"},","),s(" RouteInfo"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token constant"},"TOKEN_LIST_URL"),s(),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@jup-ag/core"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` diff --git a/docs/.vuepress/dist/assets/jupiter.html.de31abc5.js b/docs/.vuepress/dist/assets/jupiter.html.44e5face.js similarity index 99% rename from docs/.vuepress/dist/assets/jupiter.html.de31abc5.js rename to docs/.vuepress/dist/assets/jupiter.html.44e5face.js index 46ae75ab7..4a8264917 100644 --- a/docs/.vuepress/dist/assets/jupiter.html.de31abc5.js +++ b/docs/.vuepress/dist/assets/jupiter.html.44e5face.js @@ -1,4 +1,4 @@ -import{_ as r,r as l,o as i,c as k,b as t,w as a,a as n,F as b,d as s}from"./app.cfdf84e7.js";const m={},d=n("h1",{id:"jupiter",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#jupiter","aria-hidden":"true"},"#"),s(" Jupiter")],-1),g=n("p",null,"Jupiter \u0E04\u0E37\u0E2D liquidity aggregator \u0E2B\u0E25\u0E31\u0E01\u0E02\u0E2D\u0E07 Solana, \u0E2A\u0E19\u0E31\u0E1A\u0E2A\u0E19\u0E38\u0E19 tokens \u0E21\u0E32\u0E01\u0E21\u0E32\u0E22 \u0E41\u0E25\u0E30\u0E21\u0E35 route discovery \u0E23\u0E30\u0E2B\u0E27\u0E48\u0E32\u0E07 token pair \u0E17\u0E35\u0E48\u0E14\u0E35\u0E17\u0E35\u0E48\u0E2A\u0E38\u0E14\u0E43\u0E2B\u0E49\u0E14\u0E49\u0E27\u0E22",-1),w=n("h3",{id:"\u0E01\u0E32\u0E23\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E01\u0E32\u0E23\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07","aria-hidden":"true"},"#"),s(" \u0E01\u0E32\u0E23\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07")],-1),f=n("p",null,"@jup-ag/core \u0E04\u0E37\u0E2D Core package \u0E40\u0E2D\u0E32\u0E44\u0E27\u0E49\u0E43\u0E0A\u0E49\u0E15\u0E34\u0E14\u0E15\u0E48\u0E2D\u0E01\u0E31\u0E1A jupiter on-chain programs \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E17\u0E33\u0E01\u0E32\u0E23 swaps \u0E23\u0E30\u0E2B\u0E27\u0E48\u0E32\u0E07 token pairs \u0E17\u0E35\u0E48\u0E40\u0E1B\u0E47\u0E19\u0E44\u0E1B\u0E44\u0E14\u0E49",-1),y=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token function"},"yarn"),s(),n("span",{class:"token function"},"add"),s(` @jup-ag/core +import{_ as r,r as l,o as i,c as k,b as t,w as a,a as n,F as b,d as s}from"./app.2fbb9e96.js";const m={},d=n("h1",{id:"jupiter",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#jupiter","aria-hidden":"true"},"#"),s(" Jupiter")],-1),g=n("p",null,"Jupiter \u0E04\u0E37\u0E2D liquidity aggregator \u0E2B\u0E25\u0E31\u0E01\u0E02\u0E2D\u0E07 Solana, \u0E2A\u0E19\u0E31\u0E1A\u0E2A\u0E19\u0E38\u0E19 tokens \u0E21\u0E32\u0E01\u0E21\u0E32\u0E22 \u0E41\u0E25\u0E30\u0E21\u0E35 route discovery \u0E23\u0E30\u0E2B\u0E27\u0E48\u0E32\u0E07 token pair \u0E17\u0E35\u0E48\u0E14\u0E35\u0E17\u0E35\u0E48\u0E2A\u0E38\u0E14\u0E43\u0E2B\u0E49\u0E14\u0E49\u0E27\u0E22",-1),w=n("h3",{id:"\u0E01\u0E32\u0E23\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E01\u0E32\u0E23\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07","aria-hidden":"true"},"#"),s(" \u0E01\u0E32\u0E23\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07")],-1),f=n("p",null,"@jup-ag/core \u0E04\u0E37\u0E2D Core package \u0E40\u0E2D\u0E32\u0E44\u0E27\u0E49\u0E43\u0E0A\u0E49\u0E15\u0E34\u0E14\u0E15\u0E48\u0E2D\u0E01\u0E31\u0E1A jupiter on-chain programs \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E17\u0E33\u0E01\u0E32\u0E23 swaps \u0E23\u0E30\u0E2B\u0E27\u0E48\u0E32\u0E07 token pairs \u0E17\u0E35\u0E48\u0E40\u0E1B\u0E47\u0E19\u0E44\u0E1B\u0E44\u0E14\u0E49",-1),y=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token function"},"yarn"),s(),n("span",{class:"token function"},"add"),s(` @jup-ag/core `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),h=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token function"},"npm"),s(),n("span",{class:"token function"},"install"),s(` @jup-ag/core `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),_=n("h3",{id:"\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23-token-\u0E08\u0E32\u0E01-jupiter",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23-token-\u0E08\u0E32\u0E01-jupiter","aria-hidden":"true"},"#"),s(" \u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23 Token \u0E08\u0E32\u0E01 Jupiter")],-1),v=n("p",null,"\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E17\u0E38\u0E01 tokens \u0E17\u0E35\u0E48\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 swap \u0E14\u0E49\u0E27\u0E22 jupiter \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A network \u0E43\u0E14\u0E46",-1),T=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Jupiter"),n("span",{class:"token punctuation"},","),s(" RouteInfo"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token constant"},"TOKEN_LIST_URL"),s(),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@jup-ag/core"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` diff --git a/docs/.vuepress/dist/assets/jupiter.html.deab8bb3.js b/docs/.vuepress/dist/assets/jupiter.html.466e4669.js similarity index 98% rename from docs/.vuepress/dist/assets/jupiter.html.deab8bb3.js rename to docs/.vuepress/dist/assets/jupiter.html.466e4669.js index 3af683b85..ecd59b8e5 100644 --- a/docs/.vuepress/dist/assets/jupiter.html.deab8bb3.js +++ b/docs/.vuepress/dist/assets/jupiter.html.466e4669.js @@ -1 +1 @@ -const e={key:"v-076ff0c2",path:"/fr/integrations/jupiter.html",title:"Jupiter",lang:"fr-FR",frontmatter:{title:"Jupiter",head:[["meta",{name:"title",content:"Solana Cookbook | \xC9changer des jetons avec Jupiter"}],["meta",{name:"og:title",content:"Solana Cookbook | \xC9changer des jetons avec Jupiter"}],["meta",{name:"description",content:"Jupiter est le principal agr\xE9gateur de liquidit\xE9s pour Solana, offrant la plus large gamme de jetons et la meilleure recherche de route entre n'importe quelle paire de jetons."}],["meta",{name:"og:description",content:"Jupiter est le principal agr\xE9gateur de liquidit\xE9s pour Solana, offrant la plus large gamme de jetons et la meilleure recherche de route entre n'importe quelle paire de jetons."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]]},excerpt:"",headers:[{level:3,title:"Installation",slug:"installation",children:[]},{level:3,title:"R\xE9cup\xE9ration de la liste des jetons depuis Jupiter",slug:"recuperation-de-la-liste-des-jetons-depuis-jupiter",children:[]},{level:3,title:"Chargement de l'instance Jupiter",slug:"chargement-de-l-instance-jupiter",children:[]},{level:3,title:"Obtenir le Chemin d'Acc\xE8s (RouteMap)",slug:"obtenir-le-chemin-d-acces-routemap",children:[]},{level:3,title:"Obtention des chemins pour un jeton d'Entr\xE9e et de Sortie donn\xE9",slug:"obtention-des-chemins-pour-un-jeton-d-entree-et-de-sortie-donne",children:[]},{level:3,title:"Ex\xE9cuter l'Echange de Jetons",slug:"executer-l-echange-de-jetons",children:[]},{level:2,title:"Comment utiliser Jupiter dans une application React",slug:"comment-utiliser-jupiter-dans-une-application-react",children:[{level:3,title:"Installation",slug:"installation-1",children:[]},{level:3,title:"Ajout du Provider",slug:"ajout-du-provider",children:[]},{level:3,title:"R\xE9cup\xE9ration de la Liste de Jetons",slug:"recuperation-de-la-liste-de-jetons",children:[]},{level:3,title:"Cr\xE9ation de l'\xC9tat",slug:"creation-de-l-etat",children:[]},{level:3,title:"Utilisation du hook react useJupiter",slug:"utilisation-du-hook-react-usejupiter",children:[]},{level:3,title:"Ex\xE9cution de l'Echange",slug:"execution-de-l-echange",children:[]}]},{level:2,title:"Comment utiliser l'API de Jupiter",slug:"comment-utiliser-l-api-de-jupiter",children:[{level:3,title:"Installation",slug:"installation-2",children:[]},{level:3,title:"Obtention du Chemin d'Acc\xE8s",slug:"obtention-du-chemin-d-acces",children:[]},{level:3,title:"Obtention de la Transaction S\xE9rialis\xE9e pour effectuer le Swap",slug:"obtention-de-la-transaction-serialisee-pour-effectuer-le-swap",children:[]},{level:3,title:"Ex\xE9cution de l'Op\xE9ration d'Echange",slug:"execution-de-l-operation-d-echange",children:[]}]},{level:2,title:"Autres Ressources",slug:"autres-ressources",children:[]}],git:{updatedTime:1664978942e3},filePathRelative:"fr/integrations/jupiter.md"};export{e as data}; +const e={key:"v-076ff0c2",path:"/fr/integrations/jupiter.html",title:"Jupiter",lang:"fr-FR",frontmatter:{title:"Jupiter",head:[["meta",{name:"title",content:"Solana Cookbook | \xC9changer des jetons avec Jupiter"}],["meta",{name:"og:title",content:"Solana Cookbook | \xC9changer des jetons avec Jupiter"}],["meta",{name:"description",content:"Jupiter est le principal agr\xE9gateur de liquidit\xE9s pour Solana, offrant la plus large gamme de jetons et la meilleure recherche de route entre n'importe quelle paire de jetons."}],["meta",{name:"og:description",content:"Jupiter est le principal agr\xE9gateur de liquidit\xE9s pour Solana, offrant la plus large gamme de jetons et la meilleure recherche de route entre n'importe quelle paire de jetons."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]]},excerpt:"",headers:[{level:3,title:"Installation",slug:"installation",children:[]},{level:3,title:"R\xE9cup\xE9ration de la liste des jetons depuis Jupiter",slug:"recuperation-de-la-liste-des-jetons-depuis-jupiter",children:[]},{level:3,title:"Chargement de l'instance Jupiter",slug:"chargement-de-l-instance-jupiter",children:[]},{level:3,title:"Obtenir le Chemin d'Acc\xE8s (RouteMap)",slug:"obtenir-le-chemin-d-acces-routemap",children:[]},{level:3,title:"Obtention des chemins pour un jeton d'Entr\xE9e et de Sortie donn\xE9",slug:"obtention-des-chemins-pour-un-jeton-d-entree-et-de-sortie-donne",children:[]},{level:3,title:"Ex\xE9cuter l'Echange de Jetons",slug:"executer-l-echange-de-jetons",children:[]},{level:2,title:"Comment utiliser Jupiter dans une application React",slug:"comment-utiliser-jupiter-dans-une-application-react",children:[{level:3,title:"Installation",slug:"installation-1",children:[]},{level:3,title:"Ajout du Provider",slug:"ajout-du-provider",children:[]},{level:3,title:"R\xE9cup\xE9ration de la Liste de Jetons",slug:"recuperation-de-la-liste-de-jetons",children:[]},{level:3,title:"Cr\xE9ation de l'\xC9tat",slug:"creation-de-l-etat",children:[]},{level:3,title:"Utilisation du hook react useJupiter",slug:"utilisation-du-hook-react-usejupiter",children:[]},{level:3,title:"Ex\xE9cution de l'Echange",slug:"execution-de-l-echange",children:[]}]},{level:2,title:"Comment utiliser l'API de Jupiter",slug:"comment-utiliser-l-api-de-jupiter",children:[{level:3,title:"Installation",slug:"installation-2",children:[]},{level:3,title:"Obtention du Chemin d'Acc\xE8s",slug:"obtention-du-chemin-d-acces",children:[]},{level:3,title:"Obtention de la Transaction S\xE9rialis\xE9e pour effectuer le Swap",slug:"obtention-de-la-transaction-serialisee-pour-effectuer-le-swap",children:[]},{level:3,title:"Ex\xE9cution de l'Op\xE9ration d'Echange",slug:"execution-de-l-operation-d-echange",children:[]}]},{level:2,title:"Autres Ressources",slug:"autres-ressources",children:[]}],git:{updatedTime:1674873344e3},filePathRelative:"fr/integrations/jupiter.md"};export{e as data}; diff --git a/docs/.vuepress/dist/assets/jupiter.html.9e0c6bae.js b/docs/.vuepress/dist/assets/jupiter.html.4afa02f4.js similarity index 99% rename from docs/.vuepress/dist/assets/jupiter.html.9e0c6bae.js rename to docs/.vuepress/dist/assets/jupiter.html.4afa02f4.js index 26be4cf5b..f1eac7be2 100644 --- a/docs/.vuepress/dist/assets/jupiter.html.9e0c6bae.js +++ b/docs/.vuepress/dist/assets/jupiter.html.4afa02f4.js @@ -1,4 +1,4 @@ -import{_ as i,r as l,o as r,c as k,b as t,w as a,a as n,F as b,d as s}from"./app.cfdf84e7.js";const m={},d=n("h1",{id:"jupiter",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#jupiter","aria-hidden":"true"},"#"),s(" Jupiter")],-1),h=n("p",null,"Jupiter is the key liquidity aggregator for Solana, offering the widest range of tokens and best route discovery between any token pair.",-1),g=n("h3",{id:"installation",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#installation","aria-hidden":"true"},"#"),s(" Installation")],-1),f=n("p",null,"@jup-ag/core is the Core package used to interact with jupiter on-chain programs to perform swaps between two possible token pairs.",-1),w=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token function"},"yarn"),s(),n("span",{class:"token function"},"add"),s(` @jup-ag/core +import{_ as i,r as l,o as r,c as k,b as t,w as a,a as n,F as b,d as s}from"./app.2fbb9e96.js";const m={},d=n("h1",{id:"jupiter",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#jupiter","aria-hidden":"true"},"#"),s(" Jupiter")],-1),h=n("p",null,"Jupiter is the key liquidity aggregator for Solana, offering the widest range of tokens and best route discovery between any token pair.",-1),g=n("h3",{id:"installation",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#installation","aria-hidden":"true"},"#"),s(" Installation")],-1),f=n("p",null,"@jup-ag/core is the Core package used to interact with jupiter on-chain programs to perform swaps between two possible token pairs.",-1),w=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token function"},"yarn"),s(),n("span",{class:"token function"},"add"),s(` @jup-ag/core `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),y=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token function"},"npm"),s(),n("span",{class:"token function"},"install"),s(` @jup-ag/core `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),_=n("h3",{id:"fetching-token-list-from-jupiter",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#fetching-token-list-from-jupiter","aria-hidden":"true"},"#"),s(" Fetching Token list from Jupiter")],-1),v=n("p",null,"All the possible tokens that can be swapped with jupiter for a given network is being fetched.",-1),T=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Jupiter"),n("span",{class:"token punctuation"},","),s(" RouteInfo"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token constant"},"TOKEN_LIST_URL"),s(),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@jup-ag/core"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` diff --git a/docs/.vuepress/dist/assets/jupiter.html.c93aacae.js b/docs/.vuepress/dist/assets/jupiter.html.4eaf438d.js similarity index 94% rename from docs/.vuepress/dist/assets/jupiter.html.c93aacae.js rename to docs/.vuepress/dist/assets/jupiter.html.4eaf438d.js index db08ce105..82c4b04cc 100644 --- a/docs/.vuepress/dist/assets/jupiter.html.c93aacae.js +++ b/docs/.vuepress/dist/assets/jupiter.html.4eaf438d.js @@ -1,4 +1,4 @@ -import{_ as i,r as l,o as r,c as k,b as t,w as a,a as n,F as b,d as s}from"./app.cfdf84e7.js";const m={},d=n("h1",{id:"jupiter",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#jupiter","aria-hidden":"true"},"#"),s(" Jupiter")],-1),g=n("p",null,"Jupiter est le principal agr\xE9gateur de liquidit\xE9s pour Solana, offrant la plus large gamme de jetons et la meilleure recherche de route entre n'importe quelle paire de jetons.",-1),f=n("h3",{id:"installation",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#installation","aria-hidden":"true"},"#"),s(" Installation")],-1),h=n("p",null,"@jup-ag/core est le paquet de base (Core package) utilis\xE9 pour interagir avec les programmes on-chain de jupiter afin d'effectuer des \xE9changes entre deux paires de jetons possibles.",-1),y=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token function"},"yarn"),s(),n("span",{class:"token function"},"add"),s(` @jup-ag/core +import{_ as i,r as l,o as r,c as k,b as t,w as a,a as n,F as b,d as s}from"./app.2fbb9e96.js";const m={},d=n("h1",{id:"jupiter",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#jupiter","aria-hidden":"true"},"#"),s(" Jupiter")],-1),g=n("p",null,"Jupiter est le principal agr\xE9gateur de liquidit\xE9s pour Solana, offrant la plus large gamme de jetons et la meilleure recherche de route entre n'importe quelle paire de jetons.",-1),f=n("h3",{id:"installation",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#installation","aria-hidden":"true"},"#"),s(" Installation")],-1),h=n("p",null,"@jup-ag/core est le paquet de base (Core package) utilis\xE9 pour interagir avec les programmes on-chain de jupiter afin d'effectuer des \xE9changes entre deux paires de jetons possibles.",-1),y=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token function"},"yarn"),s(),n("span",{class:"token function"},"add"),s(` @jup-ag/core `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),w=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token function"},"npm"),s(),n("span",{class:"token function"},"install"),s(` @jup-ag/core `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),_=n("h3",{id:"recuperation-de-la-liste-des-jetons-depuis-jupiter",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#recuperation-de-la-liste-des-jetons-depuis-jupiter","aria-hidden":"true"},"#"),s(" R\xE9cup\xE9ration de la liste des jetons depuis Jupiter")],-1),v=n("p",null,"Tous les jetons possibles qui peuvent \xEAtre \xE9chang\xE9s avec Jupiter pour un r\xE9seau donn\xE9 sont r\xE9cup\xE9r\xE9s comme cela :",-1),T=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Jupiter"),n("span",{class:"token punctuation"},","),s(" RouteInfo"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token constant"},"TOKEN_LIST_URL"),s(),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@jup-ag/core"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` @@ -19,7 +19,7 @@ import{_ as i,r as l,o as r,c as k,b as t,w as a,a as n,F as b,d as s}from"./app `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br")])],-1),x=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token constant"},"ENV"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"mainnet-beta"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" tokens"),n("span",{class:"token operator"},":"),s(" Token"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},"]"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"await"),s(),n("span",{class:"token function"},"fetch"),n("span",{class:"token punctuation"},"("),n("span",{class:"token constant"},"TOKEN_LIST_URL"),n("span",{class:"token punctuation"},"["),n("span",{class:"token constant"},"ENV"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"json"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),j=n("h3",{id:"chargement-de-l-instance-jupiter",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#chargement-de-l-instance-jupiter","aria-hidden":"true"},"#"),s(" Chargement de l'instance Jupiter")],-1),S=n("p",null,"L'instance de Jupiter est cr\xE9\xE9e avec les configurations fournies. Il existe de nombreux param\xE8tres optionnels que l'instance peut prendre, pour en savoir plus allez [ici].(https://docs.jup.ag/jupiter-core/full-guide)",-1),E=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Jupiter"),n("span",{class:"token punctuation"},","),s(" RouteInfo"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token constant"},"TOKEN_LIST_URL"),s(),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@jup-ag/core"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),j=n("h3",{id:"chargement-de-l-instance-jupiter",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#chargement-de-l-instance-jupiter","aria-hidden":"true"},"#"),s(" Chargement de l'instance Jupiter")],-1),S=s("L'instance de Jupiter est cr\xE9\xE9e avec les configurations fournies. Il existe de nombreux param\xE8tres optionnels que l'instance peut prendre, pour en savoir plus allez "),E={href:"https://docs.jup.ag/jupiter-core/full-guide",target:"_blank",rel:"noopener noreferrer"},R=s("ici"),K=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Jupiter"),n("span",{class:"token punctuation"},","),s(" RouteInfo"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token constant"},"TOKEN_LIST_URL"),s(),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@jup-ag/core"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection"),n("span",{class:"token punctuation"},","),s(" PublicKey"),n("span",{class:"token punctuation"},","),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"interface"),s(),n("span",{class:"token class-name"},"Token"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -45,12 +45,12 @@ import{_ as i,r as l,o as r,c as k,b as t,w as a,a as n,F as b,d as s}from"./app user`),n("span",{class:"token operator"},":"),s(),n("span",{class:"token constant"},"USER_KEYPAIR"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br")])],-1),R=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" jupiter "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" Jupiter"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"load"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"{"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br")])],-1),P=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" jupiter "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" Jupiter"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"load"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"{"),s(` connection`),n("span",{class:"token punctuation"},","),s(` cluster`),n("span",{class:"token operator"},":"),s(),n("span",{class:"token constant"},"ENV"),n("span",{class:"token punctuation"},","),s(` user`),n("span",{class:"token operator"},":"),s(),n("span",{class:"token constant"},"USER_KEYPAIR"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br")])],-1),K=n("h3",{id:"obtenir-le-chemin-d-acces-routemap",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#obtenir-le-chemin-d-acces-routemap","aria-hidden":"true"},"#"),s(" Obtenir le Chemin d'Acc\xE8s (RouteMap)")],-1),P=n("p",null,"La RouteMap identifie les jetons qui peuvent \xEAtre \xE9chang\xE9s pour un jeton d'entr\xE9e donn\xE9. Le chemin d'acc\xE8s ne contient que les adresses de mint des jetons et aucune m\xE9tadonn\xE9e.",-1),N=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Jupiter"),n("span",{class:"token punctuation"},","),s(" RouteInfo"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token constant"},"TOKEN_LIST_URL"),s(),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@jup-ag/core"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br")])],-1),N=n("h3",{id:"obtenir-le-chemin-d-acces-routemap",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#obtenir-le-chemin-d-acces-routemap","aria-hidden":"true"},"#"),s(" Obtenir le Chemin d'Acc\xE8s (RouteMap)")],-1),M=n("p",null,"La RouteMap identifie les jetons qui peuvent \xEAtre \xE9chang\xE9s pour un jeton d'entr\xE9e donn\xE9. Le chemin d'acc\xE8s ne contient que les adresses de mint des jetons et aucune m\xE9tadonn\xE9e.",-1),I=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Jupiter"),n("span",{class:"token punctuation"},","),s(" RouteInfo"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token constant"},"TOKEN_LIST_URL"),s(),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@jup-ag/core"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection"),n("span",{class:"token punctuation"},","),s(" PublicKey"),n("span",{class:"token punctuation"},","),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"interface"),s(),n("span",{class:"token class-name"},"Token"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -78,8 +78,8 @@ import{_ as i,r as l,o as r,c as k,b as t,w as a,a as n,F as b,d as s}from"./app `),n("span",{class:"token keyword"},"const"),s(" routeMap "),n("span",{class:"token operator"},"="),s(" jupiter"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"getRouteMap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br")])],-1),M=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" routeMap "),n("span",{class:"token operator"},"="),s(" jupiter"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"getRouteMap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),I=n("h3",{id:"obtention-des-chemins-pour-un-jeton-d-entree-et-de-sortie-donne",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#obtention-des-chemins-pour-un-jeton-d-entree-et-de-sortie-donne","aria-hidden":"true"},"#"),s(" Obtention des chemins pour un jeton d'Entr\xE9e et de Sortie donn\xE9")],-1),A=n("p",null,[s("La m\xE9thode "),n("code",null,"computeRoutes"),s(" prend l'adresse de Mint d'entr\xE9e et l'adresse de Mint de sortie en argument et retourne tous les chemins possibles par ordre d\xE9croissant de meilleur prix.")],-1),C=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Jupiter"),n("span",{class:"token punctuation"},","),s(" RouteInfo"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token constant"},"TOKEN_LIST_URL"),s(),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@jup-ag/core"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br")])],-1),A=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" routeMap "),n("span",{class:"token operator"},"="),s(" jupiter"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"getRouteMap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),C=n("h3",{id:"obtention-des-chemins-pour-un-jeton-d-entree-et-de-sortie-donne",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#obtention-des-chemins-pour-un-jeton-d-entree-et-de-sortie-donne","aria-hidden":"true"},"#"),s(" Obtention des chemins pour un jeton d'Entr\xE9e et de Sortie donn\xE9")],-1),L=n("p",null,[s("La m\xE9thode "),n("code",null,"computeRoutes"),s(" prend l'adresse de Mint d'entr\xE9e et l'adresse de Mint de sortie en argument et retourne tous les chemins possibles par ordre d\xE9croissant de meilleur prix.")],-1),J=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Jupiter"),n("span",{class:"token punctuation"},","),s(" RouteInfo"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token constant"},"TOKEN_LIST_URL"),s(),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@jup-ag/core"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection"),n("span",{class:"token punctuation"},","),s(" PublicKey"),n("span",{class:"token punctuation"},","),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"interface"),s(),n("span",{class:"token class-name"},"Token"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -120,14 +120,14 @@ import{_ as i,r as l,o as r,c as k,b as t,w as a,a as n,F as b,d as s}from"./app forceFetch`),n("span",{class:"token operator"},":"),s(),n("span",{class:"token boolean"},"false"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br")])],-1),L=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" routes "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" jupiter"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"computeRoutes"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"{"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br")])],-1),U=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" routes "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" jupiter"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"computeRoutes"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"{"),s(` inputMint`),n("span",{class:"token operator"},":"),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),s("inputToken"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(` outputMint`),n("span",{class:"token operator"},":"),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),s("outputToken"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(` inputAmount`),n("span",{class:"token punctuation"},","),s(` slippage`),n("span",{class:"token punctuation"},","),s(` forceFetch`),n("span",{class:"token operator"},":"),s(),n("span",{class:"token boolean"},"false"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),J=n("h3",{id:"executer-l-echange-de-jetons",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#executer-l-echange-de-jetons","aria-hidden":"true"},"#"),s(" Ex\xE9cuter l'Echange de Jetons")],-1),U=n("p",null,[s("La m\xE9thode "),n("code",null,"exchange"),s(" est appel\xE9e ici, elle construit la transaction pour un chemin donn\xE9.")],-1),O=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Jupiter"),n("span",{class:"token punctuation"},","),s(" RouteInfo"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token constant"},"TOKEN_LIST_URL"),s(),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@jup-ag/core"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),O=n("h3",{id:"executer-l-echange-de-jetons",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#executer-l-echange-de-jetons","aria-hidden":"true"},"#"),s(" Ex\xE9cuter l'Echange de Jetons")],-1),q=n("p",null,[s("La m\xE9thode "),n("code",null,"exchange"),s(" est appel\xE9e ici, elle construit la transaction pour un chemin donn\xE9.")],-1),W=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Jupiter"),n("span",{class:"token punctuation"},","),s(" RouteInfo"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token constant"},"TOKEN_LIST_URL"),s(),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@jup-ag/core"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection"),n("span",{class:"token punctuation"},","),s(" PublicKey"),n("span",{class:"token punctuation"},","),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"interface"),s(),n("span",{class:"token class-name"},"Token"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -175,16 +175,16 @@ import{_ as i,r as l,o as r,c as k,b as t,w as a,a as n,F as b,d as s}from"./app `),n("span",{class:"token keyword"},"const"),s(" swapResult"),n("span",{class:"token operator"},":"),s(),n("span",{class:"token builtin"},"any"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(),n("span",{class:"token function"},"execute"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br")])],-1),q=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[s("bestRoute "),n("span",{class:"token operator"},"="),s(" routes"),n("span",{class:"token punctuation"},"."),s("routesInfos"),n("span",{class:"token punctuation"},"["),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br")])],-1),V=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[s("bestRoute "),n("span",{class:"token operator"},"="),s(" routes"),n("span",{class:"token punctuation"},"."),s("routesInfos"),n("span",{class:"token punctuation"},"["),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token punctuation"},"{"),s(" execute "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" jupiter"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"exchange"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"{"),s(` bestRoute`),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" swapResult "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(),n("span",{class:"token function"},"execute"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),W=n("h2",{id:"comment-utiliser-jupiter-dans-une-application-react",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#comment-utiliser-jupiter-dans-une-application-react","aria-hidden":"true"},"#"),s(" Comment utiliser Jupiter dans une application React")],-1),V=n("h3",{id:"installation-1",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#installation-1","aria-hidden":"true"},"#"),s(" Installation")],-1),F=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token function"},"yarn"),s(),n("span",{class:"token function"},"add"),s(` @jup-ag/react-hook -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Y=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token function"},"npm"),s(),n("span",{class:"token function"},"install"),s(` @jup-ag/react-hook -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),G=n("h3",{id:"ajout-du-provider",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#ajout-du-provider","aria-hidden":"true"},"#"),s(" Ajout du Provider")],-1),z=n("p",null,[s("Nous configurons ici le JupiterProvider afin d'utiliser le Hook useJupiter dans l'application React. Le param\xE8tre cluster est d\xE9fini comme "),n("strong",null,"mainnet-beta"),s(" afin d'obtenir une grande vari\xE9t\xE9 de jetons, mais si vous le souhaitez, vous pouvez \xE9galement le changer en "),n("strong",null,"devnet"),s(".")],-1),B=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),F=n("h2",{id:"comment-utiliser-jupiter-dans-une-application-react",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#comment-utiliser-jupiter-dans-une-application-react","aria-hidden":"true"},"#"),s(" Comment utiliser Jupiter dans une application React")],-1),Y=n("h3",{id:"installation-1",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#installation-1","aria-hidden":"true"},"#"),s(" Installation")],-1),G=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token function"},"yarn"),s(),n("span",{class:"token function"},"add"),s(` @jup-ag/react-hook +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),z=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token function"},"npm"),s(),n("span",{class:"token function"},"install"),s(` @jup-ag/react-hook +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),B=n("h3",{id:"ajout-du-provider",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#ajout-du-provider","aria-hidden":"true"},"#"),s(" Ajout du Provider")],-1),D=n("p",null,[s("Nous configurons ici le JupiterProvider afin d'utiliser le Hook useJupiter dans l'application React. Le param\xE8tre cluster est d\xE9fini comme "),n("strong",null,"mainnet-beta"),s(" afin d'obtenir une grande vari\xE9t\xE9 de jetons, mais si vous le souhaitez, vous pouvez \xE9galement le changer en "),n("strong",null,"devnet"),s(".")],-1),H=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` ConnectionProvider`),n("span",{class:"token punctuation"},","),s(` WalletProvider`),n("span",{class:"token punctuation"},","),s(` useConnection`),n("span",{class:"token punctuation"},","),s(` @@ -241,7 +241,7 @@ import{_ as i,r as l,o as r,c as k,b as t,w as a,a as n,F as b,d as s}from"./app `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"export"),s(),n("span",{class:"token keyword"},"default"),s(" App"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br")])],-1),D=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token function-variable function"},"JupiterApp"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"{"),s(" children "),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br")])],-1),X=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token function-variable function"},"JupiterApp"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"{"),s(" children "),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token punctuation"},"{"),s(" connection "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"useConnection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" wallet "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"useWallet"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` @@ -255,7 +255,7 @@ import{_ as i,r as l,o as r,c as k,b as t,w as a,a as n,F as b,d as s}from"./app `),n("span",{class:"token operator"},"<"),n("span",{class:"token operator"},"/"),s("JupiterProvider"),n("span",{class:"token operator"},">"),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br")])],-1),H=n("h3",{id:"recuperation-de-la-liste-de-jetons",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#recuperation-de-la-liste-de-jetons","aria-hidden":"true"},"#"),s(" R\xE9cup\xE9ration de la Liste de Jetons")],-1),X=n("p",null,"Tous les jetons qu'il est possible d'\xE9changer sur un r\xE9seau donn\xE9 sont r\xE9cup\xE9r\xE9s et stock\xE9s dans l'\xE9tat.",-1),Z=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(),n("span",{class:"token constant"},"TOKEN_LIST_URL"),s(),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@jup-ag/core"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br")])],-1),Z=n("h3",{id:"recuperation-de-la-liste-de-jetons",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#recuperation-de-la-liste-de-jetons","aria-hidden":"true"},"#"),s(" R\xE9cup\xE9ration de la Liste de Jetons")],-1),Q=n("p",null,"Tous les jetons qu'il est possible d'\xE9changer sur un r\xE9seau donn\xE9 sont r\xE9cup\xE9r\xE9s et stock\xE9s dans l'\xE9tat.",-1),$=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(),n("span",{class:"token constant"},"TOKEN_LIST_URL"),s(),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@jup-ag/core"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token function-variable function"},"JupiterApp"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token punctuation"},"["),s("tokens"),n("span",{class:"token punctuation"},","),s(" setTokens"),n("span",{class:"token punctuation"},"]"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token generic-function"},[n("span",{class:"token function"},"useState"),n("span",{class:"token generic class-name"},[n("span",{class:"token operator"},"<"),s("Token"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},"]"),n("span",{class:"token operator"},">")])]),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` @@ -267,13 +267,13 @@ import{_ as i,r as l,o as r,c as k,b as t,w as a,a as n,F as b,d as s}from"./app `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"export"),s(),n("span",{class:"token keyword"},"default"),s(" JupiterApp"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br")])],-1),Q=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token punctuation"},"["),s("tokens"),n("span",{class:"token punctuation"},","),s(" setTokens"),n("span",{class:"token punctuation"},"]"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token generic-function"},[n("span",{class:"token function"},"useState"),n("span",{class:"token generic class-name"},[n("span",{class:"token operator"},"<"),s("Token"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},"]"),n("span",{class:"token operator"},">")])]),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br")])],-1),nn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token punctuation"},"["),s("tokens"),n("span",{class:"token punctuation"},","),s(" setTokens"),n("span",{class:"token punctuation"},"]"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token generic-function"},[n("span",{class:"token function"},"useState"),n("span",{class:"token generic class-name"},[n("span",{class:"token operator"},"<"),s("Token"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},"]"),n("span",{class:"token operator"},">")])]),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token function"},"useEffect"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token function"},"fetch"),n("span",{class:"token punctuation"},"("),n("span",{class:"token constant"},"TOKEN_LIST_URL"),n("span",{class:"token punctuation"},"["),n("span",{class:"token constant"},"ENV"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"then"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"("),s("response"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(" response"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"json"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"then"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"("),s("result"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token function"},"setTokens"),n("span",{class:"token punctuation"},"("),s("result"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),$=n("h3",{id:"creation-de-l-etat",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#creation-de-l-etat","aria-hidden":"true"},"#"),s(" Cr\xE9ation de l'\xC9tat")],-1),nn=n("p",null,"InputMint et OutputMint sont des \xE9tats qui sont ajout\xE9s afin de pouvoir \xEAtre \xE9chang\xE9s entre eux ou qui peuvent \xE9galement \xEAtre pr\xE9lev\xE9s \xE0 l'utilisateur.",-1),sn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(),n("span",{class:"token constant"},"TOKEN_LIST_URL"),s(),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@jup-ag/core"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),sn=n("h3",{id:"creation-de-l-etat",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#creation-de-l-etat","aria-hidden":"true"},"#"),s(" Cr\xE9ation de l'\xC9tat")],-1),an=n("p",null,"InputMint et OutputMint sont des \xE9tats qui sont ajout\xE9s afin de pouvoir \xEAtre \xE9chang\xE9s entre eux ou qui peuvent \xE9galement \xEAtre pr\xE9lev\xE9s \xE0 l'utilisateur.",-1),tn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(),n("span",{class:"token constant"},"TOKEN_LIST_URL"),s(),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@jup-ag/core"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token function-variable function"},"JupiterApp"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token punctuation"},"["),s("tokens"),n("span",{class:"token punctuation"},","),s(" setTokens"),n("span",{class:"token punctuation"},"]"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token generic-function"},[n("span",{class:"token function"},"useState"),n("span",{class:"token generic class-name"},[n("span",{class:"token operator"},"<"),s("Token"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},"]"),n("span",{class:"token operator"},">")])]),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` @@ -293,13 +293,13 @@ import{_ as i,r as l,o as r,c as k,b as t,w as a,a as n,F as b,d as s}from"./app `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"export"),s(),n("span",{class:"token keyword"},"default"),s(" JupiterApp"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br")])],-1),an=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token punctuation"},"["),s("inputMint"),n("span",{class:"token punctuation"},"]"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token generic-function"},[n("span",{class:"token function"},"useState"),n("span",{class:"token generic class-name"},[n("span",{class:"token operator"},"<"),s("PublicKey"),n("span",{class:"token operator"},">")])]),n("span",{class:"token punctuation"},"("),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br")])],-1),en=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token punctuation"},"["),s("inputMint"),n("span",{class:"token punctuation"},"]"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token generic-function"},[n("span",{class:"token function"},"useState"),n("span",{class:"token generic class-name"},[n("span",{class:"token operator"},"<"),s("PublicKey"),n("span",{class:"token operator"},">")])]),n("span",{class:"token punctuation"},"("),s(` `),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"'),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token punctuation"},"["),s("outputMint"),n("span",{class:"token punctuation"},"]"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token generic-function"},[n("span",{class:"token function"},"useState"),n("span",{class:"token generic class-name"},[n("span",{class:"token operator"},"<"),s("PublicKey"),n("span",{class:"token operator"},">")])]),n("span",{class:"token punctuation"},"("),s(` `),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"'),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),tn=n("h3",{id:"utilisation-du-hook-react-usejupiter",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#utilisation-du-hook-react-usejupiter","aria-hidden":"true"},"#"),s(" Utilisation du hook react useJupiter")],-1),en=s("Le hook useJupiter prend tous les param\xE8tres n\xE9cessaires pour trouver les chemins par lesquels les tokens renseign\xE9s dans InputMint et OutputMint peuvent \xEAtre \xE9chang\xE9s. Pour en savoir plus, rendez-vous "),on={href:"https://docs.jup.ag/jupiter-react/using-the-react-hook",target:"_blank",rel:"noopener noreferrer"},cn=s("ici"),pn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(),n("span",{class:"token constant"},"TOKEN_LIST_URL"),s(),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@jup-ag/core"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),on=n("h3",{id:"utilisation-du-hook-react-usejupiter",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#utilisation-du-hook-react-usejupiter","aria-hidden":"true"},"#"),s(" Utilisation du hook react useJupiter")],-1),cn=s("Le hook useJupiter prend tous les param\xE8tres n\xE9cessaires pour trouver les chemins par lesquels les tokens renseign\xE9s dans InputMint et OutputMint peuvent \xEAtre \xE9chang\xE9s. Pour en savoir plus, rendez-vous "),pn={href:"https://docs.jup.ag/jupiter-react/using-the-react-hook",target:"_blank",rel:"noopener noreferrer"},ln=s("ici"),un=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(),n("span",{class:"token constant"},"TOKEN_LIST_URL"),s(),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@jup-ag/core"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token function-variable function"},"JupiterApp"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token punctuation"},"["),s("tokens"),n("span",{class:"token punctuation"},","),s(" setTokens"),n("span",{class:"token punctuation"},"]"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token generic-function"},[n("span",{class:"token function"},"useState"),n("span",{class:"token generic class-name"},[n("span",{class:"token operator"},"<"),s("Token"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},"]"),n("span",{class:"token operator"},">")])]),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` @@ -350,7 +350,7 @@ import{_ as i,r as l,o as r,c as k,b as t,w as a,a as n,F as b,d as s}from"./app `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"export"),s(),n("span",{class:"token keyword"},"default"),s(" JupiterApp"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br")])],-1),ln=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" jupiter "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"useJupiter"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"{"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br")])],-1),rn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" jupiter "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"useJupiter"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"{"),s(` amount`),n("span",{class:"token operator"},":"),s(),n("span",{class:"token number"},"1"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token number"},"10"),s(),n("span",{class:"token operator"},"**"),s(),n("span",{class:"token number"},"6"),n("span",{class:"token punctuation"},","),s(` inputMint`),n("span",{class:"token punctuation"},","),s(` outputMint`),n("span",{class:"token punctuation"},","),s(` @@ -368,7 +368,7 @@ import{_ as i,r as l,o as r,c as k,b as t,w as a,a as n,F as b,d as s}from"./app routes`),n("span",{class:"token punctuation"},","),s(` error`),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token operator"},"="),s(" jupiter"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br")])],-1),un=n("h3",{id:"execution-de-l-echange",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#execution-de-l-echange","aria-hidden":"true"},"#"),s(" Ex\xE9cution de l'Echange")],-1),rn=n("p",null,[s("Apr\xE8s avoir fourni toutes les donn\xE9es au hook useJupiter, il est possible d'utiliser l'instance jupiter pour effectuer un \xE9change en utilisant la m\xE9thode "),n("code",null,"exchange"),s(".")],-1),kn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(),n("span",{class:"token constant"},"TOKEN_LIST_URL"),s(),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@jup-ag/core"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br")])],-1),kn=n("h3",{id:"execution-de-l-echange",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#execution-de-l-echange","aria-hidden":"true"},"#"),s(" Ex\xE9cution de l'Echange")],-1),bn=n("p",null,[s("Apr\xE8s avoir fourni toutes les donn\xE9es au hook useJupiter, il est possible d'utiliser l'instance jupiter pour effectuer un \xE9change en utilisant la m\xE9thode "),n("code",null,"exchange"),s(".")],-1),mn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(),n("span",{class:"token constant"},"TOKEN_LIST_URL"),s(),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@jup-ag/core"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token function-variable function"},"JupiterApp"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token punctuation"},"["),s("tokens"),n("span",{class:"token punctuation"},","),s(" setTokens"),n("span",{class:"token punctuation"},"]"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token generic-function"},[n("span",{class:"token function"},"useState"),n("span",{class:"token generic class-name"},[n("span",{class:"token operator"},"<"),s("Token"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},"]"),n("span",{class:"token operator"},">")])]),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` @@ -456,7 +456,7 @@ import{_ as i,r as l,o as r,c as k,b as t,w as a,a as n,F as b,d as s}from"./app `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"export"),s(),n("span",{class:"token keyword"},"default"),s(" JupiterApp"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br"),n("span",{class:"line-number"},"69"),n("br"),n("span",{class:"line-number"},"70"),n("br"),n("span",{class:"line-number"},"71"),n("br"),n("span",{class:"line-number"},"72"),n("br"),n("span",{class:"line-number"},"73"),n("br"),n("span",{class:"line-number"},"74"),n("br"),n("span",{class:"line-number"},"75"),n("br"),n("span",{class:"line-number"},"76"),n("br"),n("span",{class:"line-number"},"77"),n("br"),n("span",{class:"line-number"},"78"),n("br"),n("span",{class:"line-number"},"79"),n("br"),n("span",{class:"line-number"},"80"),n("br"),n("span",{class:"line-number"},"81"),n("br"),n("span",{class:"line-number"},"82"),n("br"),n("span",{class:"line-number"},"83"),n("br"),n("span",{class:"line-number"},"84"),n("br"),n("span",{class:"line-number"},"85"),n("br"),n("span",{class:"line-number"},"86"),n("br"),n("span",{class:"line-number"},"87"),n("br"),n("span",{class:"line-number"},"88"),n("br")])],-1),bn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br"),n("span",{class:"line-number"},"69"),n("br"),n("span",{class:"line-number"},"70"),n("br"),n("span",{class:"line-number"},"71"),n("br"),n("span",{class:"line-number"},"72"),n("br"),n("span",{class:"line-number"},"73"),n("br"),n("span",{class:"line-number"},"74"),n("br"),n("span",{class:"line-number"},"75"),n("br"),n("span",{class:"line-number"},"76"),n("br"),n("span",{class:"line-number"},"77"),n("br"),n("span",{class:"line-number"},"78"),n("br"),n("span",{class:"line-number"},"79"),n("br"),n("span",{class:"line-number"},"80"),n("br"),n("span",{class:"line-number"},"81"),n("br"),n("span",{class:"line-number"},"82"),n("br"),n("span",{class:"line-number"},"83"),n("br"),n("span",{class:"line-number"},"84"),n("br"),n("span",{class:"line-number"},"85"),n("br"),n("span",{class:"line-number"},"86"),n("br"),n("span",{class:"line-number"},"87"),n("br"),n("span",{class:"line-number"},"88"),n("br")])],-1),dn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"await"),s(),n("span",{class:"token function"},"exchange"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"{"),s(` wallet`),n("span",{class:"token operator"},":"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -479,15 +479,15 @@ import{_ as i,r as l,o as r,c as k,b as t,w as a,a as n,F as b,d as s}from"./app `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br")])],-1),mn=n("h2",{id:"comment-utiliser-l-api-de-jupiter",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#comment-utiliser-l-api-de-jupiter","aria-hidden":"true"},"#"),s(" Comment utiliser l'API de Jupiter")],-1),dn=n("p",null,"C'est le moyen le plus simple d'interagir avec les programmes de jupiter pour \xE9changer deux jetons donn\xE9s.",-1),gn=n("h3",{id:"installation-2",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#installation-2","aria-hidden":"true"},"#"),s(" Installation")],-1),fn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token function"},"yarn"),s(` i @solana/web3.js +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br")])],-1),gn=n("h2",{id:"comment-utiliser-l-api-de-jupiter",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#comment-utiliser-l-api-de-jupiter","aria-hidden":"true"},"#"),s(" Comment utiliser l'API de Jupiter")],-1),fn=n("p",null,"C'est le moyen le plus simple d'interagir avec les programmes de jupiter pour \xE9changer deux jetons donn\xE9s.",-1),hn=n("h3",{id:"installation-2",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#installation-2","aria-hidden":"true"},"#"),s(" Installation")],-1),yn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token function"},"yarn"),s(` i @solana/web3.js `),n("span",{class:"token function"},"yarn"),s(` i cross-fetch `),n("span",{class:"token function"},"yarn"),s(` i @project-serum/anchor `),n("span",{class:"token function"},"yarn"),s(` i bs58 -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),hn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token function"},"npm"),s(` i @solana/web3.js +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),wn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token function"},"npm"),s(` i @solana/web3.js `),n("span",{class:"token function"},"npm"),s(` i cross-fetch `),n("span",{class:"token function"},"npm"),s(` i @project-serum/anchor `),n("span",{class:"token function"},"npm"),s(` i bs58 -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),yn=n("h3",{id:"obtention-du-chemin-d-acces",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#obtention-du-chemin-d-acces","aria-hidden":"true"},"#"),s(" Obtention du Chemin d'Acc\xE8s")],-1),wn=n("p",null,[s("Cette API r\xE9cup\xE8re tous les jetons disponibles qui peuvent \xEAtre \xE9chang\xE9s en utilisant l'API jupiter. Une liste de tous les chemins possibles est r\xE9cup\xE9r\xE9e ici et "),n("code",null,"allInputMints"),s(" contient la liste des adresses de mint de tous les jetons d'entr\xE9e possibles et "),n("code",null,"swappableOutputForSol"),s(" contient tous les jetons qu'il est possible d'\xE9changer contre des SOL.")],-1),_n=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" routeMap "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),n("span",{class:"token punctuation"},"("),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),_n=n("h3",{id:"obtention-du-chemin-d-acces",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#obtention-du-chemin-d-acces","aria-hidden":"true"},"#"),s(" Obtention du Chemin d'Acc\xE8s")],-1),vn=n("p",null,[s("Cette API r\xE9cup\xE8re tous les jetons disponibles qui peuvent \xEAtre \xE9chang\xE9s en utilisant l'API jupiter. Une liste de tous les chemins possibles est r\xE9cup\xE9r\xE9e ici et "),n("code",null,"allInputMints"),s(" contient la liste des adresses de mint de tous les jetons d'entr\xE9e possibles et "),n("code",null,"swappableOutputForSol"),s(" contient tous les jetons qu'il est possible d'\xE9changer contre des SOL.")],-1),Tn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" routeMap "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),n("span",{class:"token punctuation"},"("),s(` `),n("span",{class:"token keyword"},"await"),s(),n("span",{class:"token function"},"fetch"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://quote-api.jup.ag/v1/route-map"'),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"json"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` @@ -498,10 +498,10 @@ import{_ as i,r as l,o as r,c as k,b as t,w as a,a as n,F as b,d as s}from"./app `),n("span",{class:"token keyword"},"const"),s(" swappableOutputForSol "),n("span",{class:"token operator"},"="),s(` routeMap`),n("span",{class:"token punctuation"},"["),n("span",{class:"token string"},'"So11111111111111111111111111111111111111112"'),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),vn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" routeMap "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),n("span",{class:"token punctuation"},"("),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),xn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" routeMap "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),n("span",{class:"token punctuation"},"("),s(` `),n("span",{class:"token keyword"},"await"),s(),n("span",{class:"token function"},"fetch"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://quote-api.jup.ag/v1/route-map"'),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"json"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),Tn=n("h3",{id:"obtention-de-la-transaction-serialisee-pour-effectuer-le-swap",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#obtention-de-la-transaction-serialisee-pour-effectuer-le-swap","aria-hidden":"true"},"#"),s(" Obtention de la Transaction S\xE9rialis\xE9e pour effectuer le Swap")],-1),xn=s("La requ\xEAte API POST est effectu\xE9e avec le chemin que nous souhaitons emprunter et l'adresse du portefeuille de l'utilisateur. Il y a quelques param\xE8tres optionnels qui peuvent \xEAtre ajout\xE9s \xE0 cette api comme "),jn=n("strong",null,"wrapUnwrapSOL",-1),Sn=s(" et "),En=n("strong",null,"feeAccount",-1),Rn=s(". pour en savoir plus, consultez les documents officiels "),Kn={href:"https://docs.jup.ag/jupiter-api/swap-api-for-solana",target:"_blank",rel:"noopener noreferrer"},Pn=s("ici"),Nn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),jn=n("h3",{id:"obtention-de-la-transaction-serialisee-pour-effectuer-le-swap",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#obtention-de-la-transaction-serialisee-pour-effectuer-le-swap","aria-hidden":"true"},"#"),s(" Obtention de la Transaction S\xE9rialis\xE9e pour effectuer le Swap")],-1),Sn=s("La requ\xEAte API POST est effectu\xE9e avec le chemin que nous souhaitons emprunter et l'adresse du portefeuille de l'utilisateur. Il y a quelques param\xE8tres optionnels qui peuvent \xEAtre ajout\xE9s \xE0 cette api comme "),En=n("strong",null,"wrapUnwrapSOL",-1),Rn=s(" et "),Kn=n("strong",null,"feeAccount",-1),Pn=s(". pour en savoir plus, consultez les documents officiels "),Nn={href:"https://docs.jup.ag/jupiter-api/swap-api-for-solana",target:"_blank",rel:"noopener noreferrer"},Mn=s("ici"),In=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"const"),s(" transactions "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),n("span",{class:"token punctuation"},"("),s(` `),n("span",{class:"token function"},"fetch"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://quote-api.jup.ag/v1/swap"'),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token punctuation"},"{"),s(` method`),n("span",{class:"token operator"},":"),s(),n("span",{class:"token string"},'"POST"'),n("span",{class:"token punctuation"},","),s(` @@ -523,7 +523,7 @@ import{_ as i,r as l,o as r,c as k,b as t,w as a,a as n,F as b,d as s}from"./app `),n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token punctuation"},"{"),s(" setupTransaction"),n("span",{class:"token punctuation"},","),s(" swapTransaction"),n("span",{class:"token punctuation"},","),s(" cleanupTransaction "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token operator"},"="),s(" transactions"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br")])],-1),Mn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"await"),s(),n("span",{class:"token function"},"fetch"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://quote-api.jup.ag/v1/swap"'),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token punctuation"},"{"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br")])],-1),An=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"await"),s(),n("span",{class:"token function"},"fetch"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://quote-api.jup.ag/v1/swap"'),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token punctuation"},"{"),s(` method`),n("span",{class:"token operator"},":"),s(),n("span",{class:"token string"},'"POST"'),n("span",{class:"token punctuation"},","),s(` headers`),n("span",{class:"token operator"},":"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token string-property property"},'"Content-Type"'),n("span",{class:"token operator"},":"),s(),n("span",{class:"token string"},'"application/json"'),n("span",{class:"token punctuation"},","),s(` @@ -539,7 +539,7 @@ import{_ as i,r as l,o as r,c as k,b as t,w as a,a as n,F as b,d as s}from"./app feeAccount`),n("span",{class:"token operator"},":"),s(),n("span",{class:"token string"},'"xxxx"'),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br")])],-1),In=n("h3",{id:"execution-de-l-operation-d-echange",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#execution-de-l-operation-d-echange","aria-hidden":"true"},"#"),s(" Ex\xE9cution de l'Op\xE9ration d'Echange")],-1),An=n("p",null,"Un objet Transaction est cr\xE9\xE9 puis sign\xE9 par l'utilisateur.",-1),Cn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br")])],-1),Cn=n("h3",{id:"execution-de-l-operation-d-echange",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#execution-de-l-operation-d-echange","aria-hidden":"true"},"#"),s(" Ex\xE9cution de l'Op\xE9ration d'Echange")],-1),Ln=n("p",null,"Un objet Transaction est cr\xE9\xE9 puis sign\xE9 par l'utilisateur.",-1),Jn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"for"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"let"),s(" serializedTransaction "),n("span",{class:"token keyword"},"of"),s(),n("span",{class:"token punctuation"},"["),s(` setupTransaction`),n("span",{class:"token punctuation"},","),s(` @@ -558,11 +558,11 @@ import{_ as i,r as l,o as r,c as k,b as t,w as a,a as n,F as b,d as s}from"./app `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br")])],-1),Ln=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" transaction "),n("span",{class:"token operator"},"="),s(" Transaction"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br")])],-1),Un=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" transaction "),n("span",{class:"token operator"},"="),s(" Transaction"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),s(` Buffer`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),s("serializedTransaction"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token string"},'"base64"'),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" txid "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"sendTransaction"),n("span",{class:"token punctuation"},"("),s("transaction"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token punctuation"},"["),s("wallet"),n("span",{class:"token punctuation"},"."),s("payer"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token punctuation"},"{"),s(` skipPreflight`),n("span",{class:"token operator"},":"),s(),n("span",{class:"token boolean"},"false"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),Jn=n("h2",{id:"autres-ressources",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#autres-ressources","aria-hidden":"true"},"#"),s(" Autres Ressources")],-1),Un={href:"https://docs.jup.ag/",target:"_blank",rel:"noopener noreferrer"},On=s("Docs Principaux"),qn={href:"https://github.com/jup-ag/jupiter-core-example",target:"_blank",rel:"noopener noreferrer"},Wn=s("Code d'Exemple de Jupiter Core"),Vn={href:"https://github.com/jup-ag/jupiter-api-nextjs-example",target:"_blank",rel:"noopener noreferrer"},Fn=s("Code d'Exemple de Jupiter React"),Yn={href:"https://github.com/jup-ag/api-arbs-example",target:"_blank",rel:"noopener noreferrer"},Gn=s("Code d'Exemple de Jupiter API");function zn(Bn,Dn){const c=l("CodeGroupItem"),u=l("CodeGroup"),e=l("SolanaCodeGroupItem"),o=l("SolanaCodeGroup"),p=l("ExternalLinkIcon");return r(),k(b,null,[d,g,f,h,t(u,null,{default:a(()=>[t(c,{title:"YARN",active:""},{default:a(()=>[y]),_:1}),t(c,{title:"NPM"},{default:a(()=>[w]),_:1})]),_:1}),_,v,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[T]),preview:a(()=>[x]),_:1})]),_:1}),j,S,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[E]),preview:a(()=>[R]),_:1})]),_:1}),K,P,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[N]),preview:a(()=>[M]),_:1})]),_:1}),I,A,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[C]),preview:a(()=>[L]),_:1})]),_:1}),J,U,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[O]),preview:a(()=>[q]),_:1})]),_:1}),W,V,t(u,null,{default:a(()=>[t(c,{title:"YARN",active:""},{default:a(()=>[F]),_:1}),t(c,{title:"NPM"},{default:a(()=>[Y]),_:1})]),_:1}),G,z,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[B]),preview:a(()=>[D]),_:1})]),_:1}),H,X,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Z]),preview:a(()=>[Q]),_:1})]),_:1}),$,nn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[sn]),preview:a(()=>[an]),_:1})]),_:1}),tn,n("p",null,[en,n("a",on,[cn,t(p)])]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[pn]),preview:a(()=>[ln]),_:1})]),_:1}),un,rn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[kn]),preview:a(()=>[bn]),_:1})]),_:1}),mn,dn,gn,t(u,null,{default:a(()=>[t(c,{title:"YARN",active:""},{default:a(()=>[fn]),_:1}),t(c,{title:"NPM"},{default:a(()=>[hn]),_:1})]),_:1}),yn,wn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[_n]),preview:a(()=>[vn]),_:1})]),_:1}),Tn,n("p",null,[xn,jn,Sn,En,Rn,n("a",Kn,[Pn,t(p)])]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Nn]),preview:a(()=>[Mn]),_:1})]),_:1}),In,An,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Cn]),preview:a(()=>[Ln]),_:1})]),_:1}),Jn,n("ul",null,[n("li",null,[n("a",Un,[On,t(p)])]),n("li",null,[n("a",qn,[Wn,t(p)])]),n("li",null,[n("a",Vn,[Fn,t(p)])]),n("li",null,[n("a",Yn,[Gn,t(p)])])])],64)}var Xn=i(m,[["render",zn]]);export{Xn as default}; +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),On=n("h2",{id:"autres-ressources",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#autres-ressources","aria-hidden":"true"},"#"),s(" Autres Ressources")],-1),qn={href:"https://docs.jup.ag/",target:"_blank",rel:"noopener noreferrer"},Wn=s("Docs Principaux"),Vn={href:"https://github.com/jup-ag/jupiter-core-example",target:"_blank",rel:"noopener noreferrer"},Fn=s("Code d'Exemple de Jupiter Core"),Yn={href:"https://github.com/jup-ag/jupiter-api-nextjs-example",target:"_blank",rel:"noopener noreferrer"},Gn=s("Code d'Exemple de Jupiter React"),zn={href:"https://github.com/jup-ag/api-arbs-example",target:"_blank",rel:"noopener noreferrer"},Bn=s("Code d'Exemple de Jupiter API");function Dn(Hn,Xn){const p=l("CodeGroupItem"),u=l("CodeGroup"),e=l("SolanaCodeGroupItem"),o=l("SolanaCodeGroup"),c=l("ExternalLinkIcon");return r(),k(b,null,[d,g,f,h,t(u,null,{default:a(()=>[t(p,{title:"YARN",active:""},{default:a(()=>[y]),_:1}),t(p,{title:"NPM"},{default:a(()=>[w]),_:1})]),_:1}),_,v,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[T]),preview:a(()=>[x]),_:1})]),_:1}),j,n("p",null,[S,n("a",E,[R,t(c)])]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[K]),preview:a(()=>[P]),_:1})]),_:1}),N,M,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[I]),preview:a(()=>[A]),_:1})]),_:1}),C,L,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[J]),preview:a(()=>[U]),_:1})]),_:1}),O,q,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[W]),preview:a(()=>[V]),_:1})]),_:1}),F,Y,t(u,null,{default:a(()=>[t(p,{title:"YARN",active:""},{default:a(()=>[G]),_:1}),t(p,{title:"NPM"},{default:a(()=>[z]),_:1})]),_:1}),B,D,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[H]),preview:a(()=>[X]),_:1})]),_:1}),Z,Q,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[$]),preview:a(()=>[nn]),_:1})]),_:1}),sn,an,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[tn]),preview:a(()=>[en]),_:1})]),_:1}),on,n("p",null,[cn,n("a",pn,[ln,t(c)])]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[un]),preview:a(()=>[rn]),_:1})]),_:1}),kn,bn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[mn]),preview:a(()=>[dn]),_:1})]),_:1}),gn,fn,hn,t(u,null,{default:a(()=>[t(p,{title:"YARN",active:""},{default:a(()=>[yn]),_:1}),t(p,{title:"NPM"},{default:a(()=>[wn]),_:1})]),_:1}),_n,vn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Tn]),preview:a(()=>[xn]),_:1})]),_:1}),jn,n("p",null,[Sn,En,Rn,Kn,Pn,n("a",Nn,[Mn,t(c)])]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[In]),preview:a(()=>[An]),_:1})]),_:1}),Cn,Ln,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Jn]),preview:a(()=>[Un]),_:1})]),_:1}),On,n("ul",null,[n("li",null,[n("a",qn,[Wn,t(c)])]),n("li",null,[n("a",Vn,[Fn,t(c)])]),n("li",null,[n("a",Yn,[Gn,t(c)])]),n("li",null,[n("a",zn,[Bn,t(c)])])])],64)}var Qn=i(m,[["render",Dn]]);export{Qn as default}; diff --git a/docs/.vuepress/dist/assets/jupiter.html.87aeb51a.js b/docs/.vuepress/dist/assets/jupiter.html.fc772f9c.js similarity index 99% rename from docs/.vuepress/dist/assets/jupiter.html.87aeb51a.js rename to docs/.vuepress/dist/assets/jupiter.html.fc772f9c.js index 1b2b2143d..5a58f68f7 100644 --- a/docs/.vuepress/dist/assets/jupiter.html.87aeb51a.js +++ b/docs/.vuepress/dist/assets/jupiter.html.fc772f9c.js @@ -1,4 +1,4 @@ -import{_ as r,r as l,o as i,c as k,b as t,w as a,a as n,F as b,d as s}from"./app.cfdf84e7.js";const d={},m=n("h1",{id:"jupiter",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#jupiter","aria-hidden":"true"},"#"),s(" Jupiter")],-1),g=n("p",null,"Jupiter ist der wichtigste Liquidit\xE4tsaggregator f\xFCr Solana und bietet die gr\xF6\xDFte Auswahl an Token und die beste Route Discovery zwischen allen Token-Paaren.",-1),f=n("h2",{id:"installation",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#installation","aria-hidden":"true"},"#"),s(" Installation")],-1),h=n("p",null,"@jup-ag/core ist das Core-Paket, das verwendet wird, um mit Jupiter-On-Chain-Programmen zu interagieren, um Swaps zwischen zwei m\xF6glichen Token-Paaren durchzuf\xFChren.",-1),w=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token function"},"yarn"),s(),n("span",{class:"token function"},"add"),s(` @jup-ag/core +import{_ as r,r as l,o as i,c as k,b as t,w as a,a as n,F as b,d as s}from"./app.2fbb9e96.js";const d={},m=n("h1",{id:"jupiter",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#jupiter","aria-hidden":"true"},"#"),s(" Jupiter")],-1),g=n("p",null,"Jupiter ist der wichtigste Liquidit\xE4tsaggregator f\xFCr Solana und bietet die gr\xF6\xDFte Auswahl an Token und die beste Route Discovery zwischen allen Token-Paaren.",-1),f=n("h2",{id:"installation",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#installation","aria-hidden":"true"},"#"),s(" Installation")],-1),h=n("p",null,"@jup-ag/core ist das Core-Paket, das verwendet wird, um mit Jupiter-On-Chain-Programmen zu interagieren, um Swaps zwischen zwei m\xF6glichen Token-Paaren durchzuf\xFChren.",-1),w=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token function"},"yarn"),s(),n("span",{class:"token function"},"add"),s(` @jup-ag/core `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),y=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token function"},"npm"),s(),n("span",{class:"token function"},"install"),s(` @jup-ag/core `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),_=n("h3",{id:"abrufen-der-token-liste-von-jupiter",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#abrufen-der-token-liste-von-jupiter","aria-hidden":"true"},"#"),s(" Abrufen der Token-Liste von Jupiter")],-1),v=n("p",null,"Alle m\xF6glichen Token, die mit Jupiter f\xFCr ein bestimmtes Netzwerk ausgetauscht werden k\xF6nnen, werden abgerufen.",-1),T=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Jupiter"),n("span",{class:"token punctuation"},","),s(" RouteInfo"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token constant"},"TOKEN_LIST_URL"),s(),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@jup-ag/core"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` diff --git a/docs/.vuepress/dist/assets/keypairs-and-wallets.html.94f55e5a.js b/docs/.vuepress/dist/assets/keypairs-and-wallets.html.04cbd79d.js similarity index 97% rename from docs/.vuepress/dist/assets/keypairs-and-wallets.html.94f55e5a.js rename to docs/.vuepress/dist/assets/keypairs-and-wallets.html.04cbd79d.js index 1b18b86a4..3f53236cf 100644 --- a/docs/.vuepress/dist/assets/keypairs-and-wallets.html.94f55e5a.js +++ b/docs/.vuepress/dist/assets/keypairs-and-wallets.html.04cbd79d.js @@ -1 +1 @@ -const e={key:"v-5bd01ecb",path:"/fr/references/keypairs-and-wallets.html",title:"Paires de Cl\xE9s et Portefeuilles",lang:"fr-FR",frontmatter:{title:"Paires de Cl\xE9s et Portefeuilles",head:[["meta",{name:"title",content:"Solana Cookbook | Paires de Cl\xE9s et Portefeuilles"}],["meta",{name:"og:title",content:"Solana Cookbook | Paires de Cl\xE9s et Portefeuilles"}],["meta",{name:"description",content:"D\xE9couvrez les Paires de Cl\xE9s et les Portefeuilles, la Signature et la V\xE9rification des Messages et d'autres r\xE9f\xE9rences pour construire sur Solana dans le Solana cookbook."}],["meta",{name:"og:description",content:"D\xE9couvrez les Paires de Cl\xE9s et les Portefeuilles, la Signature et la V\xE9rification des Messages et d'autres r\xE9f\xE9rences pour construire sur Solana dans le Solana cookbook."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"Comment g\xE9n\xE9rer une nouvelle Paire de Cl\xE9s",slug:"comment-generer-une-nouvelle-paire-de-cles",children:[]},{level:2,title:"Comment restaurer une Paire de cl\xE9s \xE0 partir d'une cl\xE9 priv\xE9e",slug:"comment-restaurer-une-paire-de-cles-a-partir-d-une-cle-privee",children:[]},{level:2,title:"Comment v\xE9rifier une Paire de Cl\xE9s",slug:"comment-verifier-une-paire-de-cles",children:[]},{level:2,title:"Comment v\xE9rifier si une cl\xE9 publique a une cl\xE9 priv\xE9e associ\xE9e",slug:"comment-verifier-si-une-cle-publique-a-une-cle-privee-associee",children:[]},{level:2,title:"Comment g\xE9n\xE9rer une phrase mn\xE9monique",slug:"comment-generer-une-phrase-mnemonique",children:[]},{level:2,title:"Comment restaurer une paire de cl\xE9s \xE0 partir d'une phrase mn\xE9monique",slug:"comment-restaurer-une-paire-de-cles-a-partir-d-une-phrase-mnemonique",children:[]},{level:2,title:"Comment g\xE9n\xE9rer une adresse personnalis\xE9e",slug:"comment-generer-une-adresse-personnalisee",children:[]},{level:2,title:"Comment signer et v\xE9rifier des messages avec les portefeuilles",slug:"comment-signer-et-verifier-des-messages-avec-les-portefeuilles",children:[]},{level:2,title:"Comment se connecter \xE0 un portefeuille",slug:"comment-se-connecter-a-un-portefeuille",children:[{level:3,title:"React",slug:"react",children:[]},{level:3,title:"Vue",slug:"vue",children:[]},{level:3,title:"Svelte",slug:"svelte",children:[]}]}],git:{updatedTime:1664978942e3},filePathRelative:"fr/references/keypairs-and-wallets.md"};export{e as data}; +const e={key:"v-5bd01ecb",path:"/fr/references/keypairs-and-wallets.html",title:"Paires de Cl\xE9s et Portefeuilles",lang:"fr-FR",frontmatter:{title:"Paires de Cl\xE9s et Portefeuilles",head:[["meta",{name:"title",content:"Solana Cookbook | Paires de Cl\xE9s et Portefeuilles"}],["meta",{name:"og:title",content:"Solana Cookbook | Paires de Cl\xE9s et Portefeuilles"}],["meta",{name:"description",content:"D\xE9couvrez les Paires de Cl\xE9s et les Portefeuilles, la Signature et la V\xE9rification des Messages et d'autres r\xE9f\xE9rences pour construire sur Solana dans le Solana cookbook."}],["meta",{name:"og:description",content:"D\xE9couvrez les Paires de Cl\xE9s et les Portefeuilles, la Signature et la V\xE9rification des Messages et d'autres r\xE9f\xE9rences pour construire sur Solana dans le Solana cookbook."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"Comment g\xE9n\xE9rer une nouvelle Paire de Cl\xE9s",slug:"comment-generer-une-nouvelle-paire-de-cles",children:[]},{level:2,title:"Comment restaurer une Paire de cl\xE9s \xE0 partir d'une cl\xE9 priv\xE9e",slug:"comment-restaurer-une-paire-de-cles-a-partir-d-une-cle-privee",children:[]},{level:2,title:"Comment v\xE9rifier une Paire de Cl\xE9s",slug:"comment-verifier-une-paire-de-cles",children:[]},{level:2,title:"Comment v\xE9rifier si une cl\xE9 publique a une cl\xE9 priv\xE9e associ\xE9e",slug:"comment-verifier-si-une-cle-publique-a-une-cle-privee-associee",children:[]},{level:2,title:"Comment g\xE9n\xE9rer une phrase mn\xE9monique",slug:"comment-generer-une-phrase-mnemonique",children:[]},{level:2,title:"Comment restaurer une paire de cl\xE9s \xE0 partir d'une phrase mn\xE9monique",slug:"comment-restaurer-une-paire-de-cles-a-partir-d-une-phrase-mnemonique",children:[]},{level:2,title:"Comment g\xE9n\xE9rer une adresse personnalis\xE9e",slug:"comment-generer-une-adresse-personnalisee",children:[]},{level:2,title:"Comment signer et v\xE9rifier des messages avec les portefeuilles",slug:"comment-signer-et-verifier-des-messages-avec-les-portefeuilles",children:[]},{level:2,title:"Comment se connecter \xE0 un portefeuille",slug:"comment-se-connecter-a-un-portefeuille",children:[{level:3,title:"React",slug:"react",children:[]},{level:3,title:"Vue",slug:"vue",children:[]},{level:3,title:"Svelte",slug:"svelte",children:[]}]}],git:{updatedTime:1676666728e3},filePathRelative:"fr/references/keypairs-and-wallets.md"};export{e as data}; diff --git a/docs/.vuepress/dist/assets/keypairs-and-wallets.html.3f5d6e5f.js b/docs/.vuepress/dist/assets/keypairs-and-wallets.html.04ed83d9.js similarity index 74% rename from docs/.vuepress/dist/assets/keypairs-and-wallets.html.3f5d6e5f.js rename to docs/.vuepress/dist/assets/keypairs-and-wallets.html.04ed83d9.js index 03cb4b701..37f5d7e6d 100644 --- a/docs/.vuepress/dist/assets/keypairs-and-wallets.html.3f5d6e5f.js +++ b/docs/.vuepress/dist/assets/keypairs-and-wallets.html.04ed83d9.js @@ -1,24 +1,39 @@ -import{_ as u,r as p,o as i,c as r,b as t,w as a,a as n,F as k,d as s,e as l}from"./app.cfdf84e7.js";const b={},m=n("h1",{id:"keypairs-\u0E41\u0E25\u0E30-wallets",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#keypairs-\u0E41\u0E25\u0E30-wallets","aria-hidden":"true"},"#"),s(" Keypairs \u0E41\u0E25\u0E30 Wallets")],-1),d=n("h2",{id:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07-keypair-\u0E43\u0E2B\u0E21\u0E48",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07-keypair-\u0E43\u0E2B\u0E21\u0E48","aria-hidden":"true"},"#"),s(" \u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07 Keypair \u0E43\u0E2B\u0E21\u0E48")],-1),y=n("p",null,"actions \u0E15\u0E48\u0E32\u0E07\u0E46 \u0E1A\u0E19 Solana libraries \u0E15\u0E49\u0E2D\u0E07\u0E01\u0E32\u0E23 Keypair \u0E2B\u0E23\u0E37\u0E2D Wallet \u0E16\u0E49\u0E32\u0E40\u0E23\u0E32\u0E40\u0E0A\u0E37\u0E48\u0E2D\u0E21\u0E01\u0E31\u0E1A wallet \u0E2D\u0E22\u0E39\u0E48\u0E41\u0E25\u0E49\u0E27 \u0E40\u0E23\u0E32\u0E01\u0E47\u0E44\u0E21\u0E48\u0E15\u0E49\u0E2D\u0E07\u0E2B\u0E48\u0E27\u0E07\u0E2D\u0E30\u0E44\u0E23 \u0E2B\u0E23\u0E37\u0E2D\u0E16\u0E49\u0E32\u0E40\u0E23\u0E32\u0E15\u0E49\u0E2D\u0E07\u0E01\u0E32\u0E23 keypair \u0E40\u0E23\u0E32\u0E01\u0E47\u0E41\u0E04\u0E48\u0E15\u0E49\u0E2D\u0E07\u0E2A\u0E23\u0E49\u0E32\u0E07\u0E21\u0E31\u0E19\u0E02\u0E36\u0E49\u0E19\u0E21\u0E32",-1),g=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +import{_ as l,r as p,o as i,c as k,b as t,w as a,a as n,F as r,d as s,e as u}from"./app.2fbb9e96.js";const b={},m=n("h1",{id:"keypairs-\u0E41\u0E25\u0E30-wallets",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#keypairs-\u0E41\u0E25\u0E30-wallets","aria-hidden":"true"},"#"),s(" Keypairs \u0E41\u0E25\u0E30 Wallets")],-1),d=n("h2",{id:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07-keypair-\u0E43\u0E2B\u0E21\u0E48",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07-keypair-\u0E43\u0E2B\u0E21\u0E48","aria-hidden":"true"},"#"),s(" \u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07 Keypair \u0E43\u0E2B\u0E21\u0E48")],-1),y=n("p",null,"actions \u0E15\u0E48\u0E32\u0E07\u0E46 \u0E1A\u0E19 Solana libraries \u0E15\u0E49\u0E2D\u0E07\u0E01\u0E32\u0E23 Keypair \u0E2B\u0E23\u0E37\u0E2D Wallet \u0E16\u0E49\u0E32\u0E40\u0E23\u0E32\u0E40\u0E0A\u0E37\u0E48\u0E2D\u0E21\u0E01\u0E31\u0E1A wallet \u0E2D\u0E22\u0E39\u0E48\u0E41\u0E25\u0E49\u0E27 \u0E40\u0E23\u0E32\u0E01\u0E47\u0E44\u0E21\u0E48\u0E15\u0E49\u0E2D\u0E07\u0E2B\u0E48\u0E27\u0E07\u0E2D\u0E30\u0E44\u0E23 \u0E2B\u0E23\u0E37\u0E2D\u0E16\u0E49\u0E32\u0E40\u0E23\u0E32\u0E15\u0E49\u0E2D\u0E07\u0E01\u0E32\u0E23 keypair \u0E40\u0E23\u0E32\u0E01\u0E47\u0E41\u0E04\u0E48\u0E15\u0E49\u0E2D\u0E07\u0E2A\u0E23\u0E49\u0E32\u0E07\u0E21\u0E31\u0E19\u0E02\u0E36\u0E49\u0E19\u0E21\u0E32",-1),g=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"let"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br")])],-1),h=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),w=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),w=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),_=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),v=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("signature"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),v=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token comment"},"// clang++ generate_keypair.cpp -o generate_keypair -std=c++17 -lssl -lcrypto -lsodium"),s(` + +`),n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + `),n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"auto"),s(" public_key "),n("span",{class:"token operator"},"="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"public_key = "'),s(),n("span",{class:"token operator"},"<<"),s(" public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"return"),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br")])],-1),f=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),x=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("signature"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"let"),s(" wallet "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br")])],-1),f=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" wallet "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),x=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s(`$ solana-keygen new +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br")])],-1),K=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" wallet "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),P=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s(`$ solana-keygen new `),n("span",{class:"token comment"},"# pubkey: 9ZNTfG4NyQgxy2SWjSiQoUyBPEvXT2xo7fKc5hPYYJ7b"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),K=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen new -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),P=n("h2",{id:"\u0E27\u0E34\u0E18\u0E35-restore-a-keypair-from-a-secret",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E27\u0E34\u0E18\u0E35-restore-a-keypair-from-a-secret","aria-hidden":"true"},"#"),s(" \u0E27\u0E34\u0E18\u0E35 restore a Keypair from a secret")],-1),W=n("p",null,"\u0E16\u0E49\u0E32\u0E40\u0E23\u0E32\u0E21\u0E35 secret \u0E2D\u0E22\u0E39\u0E48\u0E41\u0E25\u0E49\u0E27\u0E40\u0E23\u0E32\u0E01\u0E47\u0E08\u0E30\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E2A\u0E23\u0E49\u0E32\u0E07 Keypair \u0E08\u0E32\u0E01 secret \u0E19\u0E31\u0E49\u0E19\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E17\u0E14\u0E2A\u0E2D\u0E1A dApp \u0E02\u0E2D\u0E07\u0E40\u0E23\u0E32\u0E44\u0E14\u0E49\u0E40\u0E25\u0E22",-1),S=n("ol",null,[n("li",null,"\u0E2A\u0E23\u0E49\u0E32\u0E07\u0E08\u0E32\u0E01 Bytes")],-1),A=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),W=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen new +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),S=n("h2",{id:"\u0E27\u0E34\u0E18\u0E35-restore-a-keypair-from-a-secret",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E27\u0E34\u0E18\u0E35-restore-a-keypair-from-a-secret","aria-hidden":"true"},"#"),s(" \u0E27\u0E34\u0E18\u0E35 restore a Keypair from a secret")],-1),C=n("p",null,"\u0E16\u0E49\u0E32\u0E40\u0E23\u0E32\u0E21\u0E35 secret \u0E2D\u0E22\u0E39\u0E48\u0E41\u0E25\u0E49\u0E27\u0E40\u0E23\u0E32\u0E01\u0E47\u0E08\u0E30\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E2A\u0E23\u0E49\u0E32\u0E07 Keypair \u0E08\u0E32\u0E01 secret \u0E19\u0E31\u0E49\u0E19\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E17\u0E14\u0E2A\u0E2D\u0E1A dApp \u0E02\u0E2D\u0E07\u0E40\u0E23\u0E32\u0E44\u0E14\u0E49\u0E40\u0E25\u0E22",-1),A=n("ol",null,[n("li",null,"\u0E2A\u0E23\u0E49\u0E32\u0E07\u0E08\u0E32\u0E01 Bytes")],-1),j=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSecretKey"),n("span",{class:"token punctuation"},"("),s(` @@ -30,7 +45,7 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br")])],-1),C=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSecretKey"),n("span",{class:"token punctuation"},"("),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br")])],-1),T=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSecretKey"),n("span",{class:"token punctuation"},"("),s(` Uint8Array`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"["),s(` `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"189"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"224"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"216"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"117"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"173"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"149"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"45"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"73"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"237"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"246"),n("span",{class:"token punctuation"},","),s(` @@ -38,7 +53,7 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),j=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),R=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair secret_key`),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"["),s(` `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(` @@ -47,17 +62,40 @@ secret_key`),n("span",{class:"token operator"},"="),s(),n("span",{class:"token p `),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"]"),s(` -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"bytes"),n("span",{class:"token punctuation"},"("),s("secret_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created Keypair with Public Key: {}"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),T=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("secret_key"),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"["),s(` +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_bytes"),n("span",{class:"token punctuation"},"("),s("secret_key"),n("span",{class:"token punctuation"},")"),s(` +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created Keypair with Public Key: {}"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),D=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("secret_key"),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"["),s(` `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"189"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"224"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"216"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"117"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"173"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"149"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"45"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"73"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"237"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"246"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"15"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"185"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"186"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"82"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"177"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"]"),s(` -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"bytes"),n("span",{class:"token punctuation"},"("),s("secret_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),B=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("signature"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"Signer"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_bytes"),n("span",{class:"token punctuation"},"("),s("secret_key"),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),N=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token comment"},"// clang++ keypair_from_seed.cpp -o keypair_from_seed -std=c++17 -lssl -lcrypto -lsodium"),s(` + +`),n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + `),n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token keyword"},"uint8_t"),s(" bytes"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},"]"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"{"),s(` + `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(` + `),n("span",{class:"token number"},"189"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"224"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"216"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"117"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"173"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"149"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"45"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"73"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"237"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"246"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"15"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"185"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"186"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"82"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"177"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(` + `),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(` + `),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` + `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` + Keypair key_pair `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"from_seed"),n("span",{class:"token punctuation"},"("),s("bytes"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"Created Keypair with Public Key: "'),s(),n("span",{class:"token operator"},"<<"),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br")])],-1),z=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token keyword"},"uint8_t"),s(" secret_key"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},"]"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"{"),s(` +`),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(` +`),n("span",{class:"token number"},"189"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"224"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"216"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"117"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"173"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"149"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"45"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"73"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"237"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"246"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"15"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"185"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"186"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"82"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"177"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(` +`),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(` +`),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` +`),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` +Keypair key_pair `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"from_seed"),n("span",{class:"token punctuation"},"("),s("secret_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),B=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("signature"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"Signer"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"let"),s(" secret_key"),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token punctuation"},"["),n("span",{class:"token keyword"},"u8"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token number"},"64"),n("span",{class:"token punctuation"},"]"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"["),s(` @@ -72,7 +110,7 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token macro property"},"println!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created keypair: {}"'),n("span",{class:"token punctuation"},","),s(" pubkey"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br")])],-1),R=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" secret_key"),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token punctuation"},"["),n("span",{class:"token keyword"},"u8"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token number"},"64"),n("span",{class:"token punctuation"},"]"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"["),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br")])],-1),M=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" secret_key"),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token punctuation"},"["),n("span",{class:"token keyword"},"u8"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token number"},"64"),n("span",{class:"token punctuation"},"]"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"["),s(` `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"189"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"224"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"216"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"117"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"173"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"149"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"45"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"73"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"237"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"246"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"15"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"185"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"186"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"82"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"177"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(` @@ -80,9 +118,9 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"let"),s(" wallet "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from_bytes"),n("span",{class:"token punctuation"},"("),n("span",{class:"token operator"},"&"),s("secret_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),M=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# input your secret into the Keypath listed under solana config get"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),D=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# input your secret into the Keypath listed under solana config get"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),N=n("ol",{start:"2"},[n("li",null,"\u0E2A\u0E23\u0E49\u0E32\u0E07\u0E08\u0E32\u0E01 Base58 String")],-1),z=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),E=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# input your secret into the Keypath listed under solana config get"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),J=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# input your secret into the Keypath listed under solana config get"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),U=n("ol",{start:"2"},[n("li",null,"\u0E2A\u0E23\u0E49\u0E32\u0E07\u0E08\u0E32\u0E01 Base58 String")],-1),H=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" bs58 "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"bs58"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -92,20 +130,19 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),E=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSecretKey"),n("span",{class:"token punctuation"},"("),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),V=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSecretKey"),n("span",{class:"token punctuation"},"("),s(` bs58`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"decode"),n("span",{class:"token punctuation"},"("),s(` `),n("span",{class:"token string"},'"5MaiiCavjCmn9Hs1o3eznqDEhRwxo7pXiAYez7keQUviUkauRiTMD8DrESdrNjN8zd9mTmVhRvBJeg5vhyvgrAhG"'),s(` `),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br")])],-1),U=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(` base58 -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br")])],-1),Y=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair b58_string `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"5MaiiCavjCmn9Hs1o3eznqDEhRwxo7pXiAYez7keQUviUkauRiTMD8DrESdrNjN8zd9mTmVhRvBJeg5vhyvgrAhG"'),s(` -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),s("base58"),n("span",{class:"token punctuation"},"."),s("b58decode"),n("span",{class:"token punctuation"},"("),s("b58_string"),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created Keypair with Public Key: {}"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),V=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("b58_string "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"5MaiiCavjCmn9Hs1o3eznqDEhRwxo7pXiAYez7keQUviUkauRiTMD8DrESdrNjN8zd9mTmVhRvBJeg5vhyvgrAhG"'),s(` -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),s("base58"),n("span",{class:"token punctuation"},"."),s("b58decode"),n("span",{class:"token punctuation"},"("),s("b58_string"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),J=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("signature"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"Signer"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_string"),n("span",{class:"token punctuation"},"("),s("b58_string"),n("span",{class:"token punctuation"},")"),s(` +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created Keypair with Public Key: {}"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br")])],-1),L=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("b58_string "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"5MaiiCavjCmn9Hs1o3eznqDEhRwxo7pXiAYez7keQUviUkauRiTMD8DrESdrNjN8zd9mTmVhRvBJeg5vhyvgrAhG"'),s(` +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_string"),n("span",{class:"token punctuation"},"("),s("b58_string"),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),q=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("signature"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"Signer"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"let"),s(" wallet "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from_base58_string"),n("span",{class:"token punctuation"},"("),s(` @@ -114,10 +151,10 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token keyword"},"let"),s(" pubkey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Signer"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token operator"},"&"),s("wallet"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token macro property"},"println!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created keypair: {}"'),n("span",{class:"token punctuation"},","),s(" pubkey"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br")])],-1),H=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" wallet "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from_base58_string"),n("span",{class:"token punctuation"},"("),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br")])],-1),F=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" wallet "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from_base58_string"),n("span",{class:"token punctuation"},"("),s(` `),n("span",{class:"token string"},'"5MaiiCavjCmn9Hs1o3eznqDEhRwxo7pXiAYez7keQUviUkauRiTMD8DrESdrNjN8zd9mTmVhRvBJeg5vhyvgrAhG"'),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),L=n("h2",{id:"\u0E27\u0E34\u0E18\u0E35-verify-a-keypair",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E27\u0E34\u0E18\u0E35-verify-a-keypair","aria-hidden":"true"},"#"),s(" \u0E27\u0E34\u0E18\u0E35 verify a Keypair")],-1),Y=n("p",null,"\u0E16\u0E49\u0E32\u0E40\u0E23\u0E32\u0E44\u0E14\u0E49 keypair \u0E21\u0E32 \u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E15\u0E23\u0E27\u0E08\u0E2A\u0E2D\u0E1A\u0E21\u0E31\u0E19\u0E44\u0E14\u0E49\u0E27\u0E48\u0E32 secret \u0E19\u0E31\u0E49\u0E19\u0E15\u0E23\u0E07\u0E01\u0E31\u0E1A public key \u0E2B\u0E23\u0E37\u0E2D\u0E40\u0E1B\u0E25\u0E48\u0E32",-1),q=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),I=n("h2",{id:"\u0E27\u0E34\u0E18\u0E35-verify-a-keypair",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E27\u0E34\u0E18\u0E35-verify-a-keypair","aria-hidden":"true"},"#"),s(" \u0E27\u0E34\u0E18\u0E35 verify a Keypair")],-1),X=n("p",null,"\u0E16\u0E49\u0E32\u0E40\u0E23\u0E32\u0E44\u0E14\u0E49 keypair \u0E21\u0E32 \u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E15\u0E23\u0E27\u0E08\u0E2A\u0E2D\u0E1A\u0E21\u0E31\u0E19\u0E44\u0E14\u0E49\u0E27\u0E48\u0E32 secret \u0E19\u0E31\u0E49\u0E19\u0E15\u0E23\u0E07\u0E01\u0E31\u0E1A public key \u0E2B\u0E23\u0E37\u0E2D\u0E40\u0E1B\u0E25\u0E48\u0E32",-1),Z=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"const"),s(" publicKey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),s(` @@ -134,7 +171,7 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"==="),s(" publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token comment"},"// true"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br")])],-1),F=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" publicKey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br")])],-1),$=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" publicKey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSecretKey"),n("span",{class:"token punctuation"},"("),s(` Uint8Array`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"["),s(` `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(` @@ -145,10 +182,10 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"==="),s(" publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token comment"},"// true"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),I=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("publickey "),n("span",{class:"token keyword"},"import"),s(` PublicKey +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),G=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("pubkey "),n("span",{class:"token keyword"},"import"),s(` Pubkey -public_key `),n("span",{class:"token operator"},"="),s(" PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p"'),n("span",{class:"token punctuation"},")"),s(` +public_key `),n("span",{class:"token operator"},"="),s(" Pubkey"),n("span",{class:"token punctuation"},"."),s("from_string"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p"'),n("span",{class:"token punctuation"},")"),s(` keys `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"["),s(` `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(` @@ -156,11 +193,11 @@ keys `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctu `),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"]"),s(` -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"bytes"),n("span",{class:"token punctuation"},"("),s("keys"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_bytes"),n("span",{class:"token punctuation"},"("),s("keys"),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},"."),s("to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=="),s(" public_key"),n("span",{class:"token punctuation"},"."),s("to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=="),s(" public_key"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"# True"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br")])],-1),X=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("public_key "),n("span",{class:"token operator"},"="),s(" PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p"'),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br")])],-1),Q=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("public_key "),n("span",{class:"token operator"},"="),s(" Pubkey"),n("span",{class:"token punctuation"},"."),s("from_string"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p"'),n("span",{class:"token punctuation"},")"),s(` keys `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"["),s(` `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(` @@ -168,13 +205,44 @@ keys `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctu `),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"]"),s(` -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"bytes"),n("span",{class:"token punctuation"},"("),s("keys"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_bytes"),n("span",{class:"token punctuation"},"("),s("keys"),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},"."),s("to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=="),s(" public_key"),n("span",{class:"token punctuation"},"."),s("to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=="),s(" public_key"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"# True"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br")])],-1),Z=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana-keygen verify "),n("span",{class:"token operator"},"<"),s("PUBKEY"),n("span",{class:"token operator"},">"),s(` prompt:// -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),$=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana-keygen verify "),n("span",{class:"token operator"},"<"),s("PUBKEY"),n("span",{class:"token operator"},">"),s(` prompt:// -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),G=n("h2",{id:"\u0E27\u0E34\u0E18\u0E35-check-if-a-public-key-has-an-associated-private-key",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E27\u0E34\u0E18\u0E35-check-if-a-public-key-has-an-associated-private-key","aria-hidden":"true"},"#"),s(" \u0E27\u0E34\u0E18\u0E35 check if a public key has an associated private key")],-1),Q=n("p",null,"\u0E43\u0E19\u0E1A\u0E32\u0E07\u0E01\u0E23\u0E13\u0E35\u0E40\u0E09\u0E1E\u0E32\u0E30 (\u0E40\u0E0A\u0E48\u0E19 a Program Derived Address), public keys \u0E2D\u0E32\u0E08\u0E08\u0E30\u0E44\u0E21\u0E48\u0E21\u0E35 private key \u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E15\u0E23\u0E27\u0E08\u0E2A\u0E2D\u0E1A\u0E42\u0E14\u0E22\u0E14\u0E39\u0E27\u0E48\u0E32 public key \u0E2D\u0E22\u0E39\u0E48\u0E1A\u0E19 ed25519 curve \u0E2B\u0E23\u0E37\u0E2D\u0E44\u0E21\u0E48 \u0E40\u0E1E\u0E23\u0E32\u0E30 public keys \u0E17\u0E35\u0E48\u0E2D\u0E22\u0E39\u0E48\u0E1A\u0E19 curve \u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E04\u0E27\u0E1A\u0E04\u0E38\u0E21\u0E44\u0E14\u0E49\u0E08\u0E32\u0E01\u0E1C\u0E39\u0E49\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19\u0E17\u0E35\u0E48\u0E16\u0E37\u0E2D wallet \u0E19\u0E31\u0E49\u0E19\u0E2D\u0E22\u0E39\u0E48",-1),O=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br")])],-1),O=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token comment"},"// clang++ verify_keypair.cpp -o verify_keypair -std=c++17 -lssl -lcrypto -lsodium"),s(` + +`),n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + PublicKey public_key `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token keyword"},"uint8_t"),s(" bytes"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},"]"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"{"),s(` + `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(` + `),n("span",{class:"token number"},"189"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"224"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"216"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"117"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"173"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"149"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"45"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"73"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"237"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"246"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"15"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"185"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"186"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"82"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"177"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(` + `),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(` + `),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` + `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` + Keypair key_pair `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"from_seed"),n("span",{class:"token punctuation"},"("),s("bytes"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token punctuation"},"("),s("public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br")])],-1),nn=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[s("PublicKey public_key "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token keyword"},"uint8_t"),s(" bytes"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},"]"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"{"),s(` +`),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(` +`),n("span",{class:"token number"},"189"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"224"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"216"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"117"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"173"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"149"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"45"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"73"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"237"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"246"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"15"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"185"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"186"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"82"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"177"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(` +`),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(` +`),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` +`),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` +Keypair key_pair `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"from_seed"),n("span",{class:"token punctuation"},"("),s("bytes"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + +std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token punctuation"},"("),s("public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token comment"},"// 1"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br")])],-1),sn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana-keygen verify "),n("span",{class:"token operator"},"<"),s("PUBKEY"),n("span",{class:"token operator"},">"),s(` prompt:// +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),an=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana-keygen verify "),n("span",{class:"token operator"},"<"),s("PUBKEY"),n("span",{class:"token operator"},">"),s(` prompt:// +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),tn=n("h2",{id:"\u0E27\u0E34\u0E18\u0E35-check-if-a-public-key-has-an-associated-private-key",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E27\u0E34\u0E18\u0E35-check-if-a-public-key-has-an-associated-private-key","aria-hidden":"true"},"#"),s(" \u0E27\u0E34\u0E18\u0E35 check if a public key has an associated private key")],-1),en=n("p",null,"\u0E43\u0E19\u0E1A\u0E32\u0E07\u0E01\u0E23\u0E13\u0E35\u0E40\u0E09\u0E1E\u0E32\u0E30 (\u0E40\u0E0A\u0E48\u0E19 a Program Derived Address), public keys \u0E2D\u0E32\u0E08\u0E08\u0E30\u0E44\u0E21\u0E48\u0E21\u0E35 private key \u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E15\u0E23\u0E27\u0E08\u0E2A\u0E2D\u0E1A\u0E42\u0E14\u0E22\u0E14\u0E39\u0E27\u0E48\u0E32 public key \u0E2D\u0E22\u0E39\u0E48\u0E1A\u0E19 ed25519 curve \u0E2B\u0E23\u0E37\u0E2D\u0E44\u0E21\u0E48 \u0E40\u0E1E\u0E23\u0E32\u0E30 public keys \u0E17\u0E35\u0E48\u0E2D\u0E22\u0E39\u0E48\u0E1A\u0E19 curve \u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E04\u0E27\u0E1A\u0E04\u0E38\u0E21\u0E44\u0E14\u0E49\u0E08\u0E32\u0E01\u0E1C\u0E39\u0E49\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19\u0E17\u0E35\u0E48\u0E16\u0E37\u0E2D wallet \u0E19\u0E31\u0E49\u0E19\u0E2D\u0E22\u0E39\u0E48",-1),on=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token keyword"},"function"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token comment"},"// Note that Keypair.generate() will always give a public key that is valid for users"),s(` @@ -188,23 +256,34 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token keyword"},"const"),s(" errorPubkey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"testPubkey"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token comment"},"// Is not a valid public key"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br")])],-1),nn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" key "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br")])],-1),cn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" key "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("PublicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"isOnCurve"),n("span",{class:"token punctuation"},"("),s("key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBytes"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),sn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("publickey "),n("span",{class:"token keyword"},"import"),s(` PublicKey -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("utils"),n("span",{class:"token punctuation"},"."),s("ed25519_base "),n("span",{class:"token keyword"},"import"),s(` is_on_curve +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),pn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("pubkey "),n("span",{class:"token keyword"},"import"),s(` Pubkey `),n("span",{class:"token comment"},"# Note that Keypair() will always give a public key that is valid for users"),s(` -key `),n("span",{class:"token operator"},"="),s(" PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},"'5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY'"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# Valid public key"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("is_on_curve"),n("span",{class:"token punctuation"},"("),s("key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# Lies on the ed25519 curve and is suitable for users"),s(` +key `),n("span",{class:"token operator"},"="),s(" Pubkey"),n("span",{class:"token punctuation"},"."),s("from_string"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},"'5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY'"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# Valid public key"),s(` +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("key"),n("span",{class:"token punctuation"},"."),s("is_on_curve"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# Lies on the ed25519 curve and is suitable for users"),s(` + +off_curve_address `),n("span",{class:"token operator"},"="),s(" Pubkey"),n("span",{class:"token punctuation"},"."),s("from_string"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},"'4BJXYkfvg37zEmBbsacZjeQDpTNx91KppxFJxRqrz48e'"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# Valid public key"),s(` +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("off_curve_address"),n("span",{class:"token punctuation"},"."),s("is_on_curve"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# Not on the ed25519 curve, therefore not suitable for users"),s(` + +error_pubkey `),n("span",{class:"token operator"},"="),s(" Pubkey"),n("span",{class:"token punctuation"},"."),s("from_string"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"testPubkey"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token comment"},"# Is not a valid public key"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),un=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("key "),n("span",{class:"token operator"},"="),s(" Pubkey"),n("span",{class:"token punctuation"},"."),s("from_string"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},"'5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY'"),n("span",{class:"token punctuation"},")"),s(` +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("key"),n("span",{class:"token punctuation"},"."),s("is_on_curve"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),ln=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},"")]),s(` +`),n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},"")]),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` +`),n("span",{class:"token punctuation"},"{"),s(` + `),n("span",{class:"token keyword"},"auto"),s(" public_key "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -off_curve_address `),n("span",{class:"token operator"},"="),s(" PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},"'4BJXYkfvg37zEmBbsacZjeQDpTNx91KppxFJxRqrz48e'"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# Valid public key"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("PublicKey"),n("span",{class:"token punctuation"},"."),s("_is_on_curve"),n("span",{class:"token punctuation"},"("),s("off_curve_address"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# Not on the ed25519 curve, therefore not suitable for users"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(" public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"is_on_curve"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` -error_pubkey `),n("span",{class:"token operator"},"="),s(" PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"testPubkey"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token comment"},"# Is not a valid public key"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br")])],-1),an=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("key "),n("span",{class:"token operator"},"="),s(" PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},"'5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY'"),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("is_on_curve"),n("span",{class:"token punctuation"},"("),s("key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),tn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("pubkey"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Pubkey"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token keyword"},"return"),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),kn=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token keyword"},"auto"),s(" public_key "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(" public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"is_on_curve"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),rn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("pubkey"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Pubkey"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("std"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token keyword"},"str"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token class-name"},"FromStr"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -217,21 +296,21 @@ error_pubkey `),n("span",{class:"token operator"},"="),s(" PublicKey"),n("span", `),n("span",{class:"token keyword"},"let"),s(" error_pubkey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Pubkey"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from_str"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"testPubkey"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token comment"},"// Is not a valid public key"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br")])],-1),en=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" pubkey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Pubkey"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from_str"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br")])],-1),bn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" pubkey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Pubkey"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from_str"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token macro property"},"println!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"{:?}"'),n("span",{class:"token punctuation"},","),s(" pubkey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"is_on_curve"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),on=n("h2",{id:"\u0E27\u0E34\u0E18\u0E35-generate-a-mnemonic-phrase",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E27\u0E34\u0E18\u0E35-generate-a-mnemonic-phrase","aria-hidden":"true"},"#"),s(" \u0E27\u0E34\u0E18\u0E35 generate a mnemonic phrase")],-1),cn=n("p",null,"\u0E16\u0E49\u0E32\u0E40\u0E23\u0E32\u0E2A\u0E23\u0E49\u0E32\u0E07 wallet \u0E40\u0E23\u0E32\u0E15\u0E49\u0E2D\u0E07\u0E2A\u0E23\u0E49\u0E32\u0E07 mnemonic phrase \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E43\u0E2B\u0E49 user \u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E40\u0E01\u0E47\u0E1A\u0E2A\u0E33\u0E23\u0E2D\u0E07\u0E44\u0E27\u0E49",-1),pn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" bip39 "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"bip39"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),mn=n("h2",{id:"\u0E27\u0E34\u0E18\u0E35-generate-a-mnemonic-phrase",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E27\u0E34\u0E18\u0E35-generate-a-mnemonic-phrase","aria-hidden":"true"},"#"),s(" \u0E27\u0E34\u0E18\u0E35 generate a mnemonic phrase")],-1),dn=n("p",null,"\u0E16\u0E49\u0E32\u0E40\u0E23\u0E32\u0E2A\u0E23\u0E49\u0E32\u0E07 wallet \u0E40\u0E23\u0E32\u0E15\u0E49\u0E2D\u0E07\u0E2A\u0E23\u0E49\u0E32\u0E07 mnemonic phrase \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E43\u0E2B\u0E49 user \u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E40\u0E01\u0E47\u0E1A\u0E2A\u0E33\u0E23\u0E2D\u0E07\u0E44\u0E27\u0E49",-1),yn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" bip39 "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"bip39"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" mnemonic "),n("span",{class:"token operator"},"="),s(" bip39"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generateMnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),ln=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" mnemonic "),n("span",{class:"token operator"},"="),s(" bip39"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generateMnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),un=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" mnemonic "),n("span",{class:"token keyword"},"import"),s(` Mnemonic +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),gn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" mnemonic "),n("span",{class:"token operator"},"="),s(" bip39"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generateMnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),hn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" mnemonic "),n("span",{class:"token keyword"},"import"),s(` Mnemonic mnemo `),n("span",{class:"token operator"},"="),s(" Mnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"english"'),n("span",{class:"token punctuation"},")"),s(` words `),n("span",{class:"token operator"},"="),s(" mnemo"),n("span",{class:"token punctuation"},"."),s("generate"),n("span",{class:"token punctuation"},"("),s("strength"),n("span",{class:"token operator"},"="),n("span",{class:"token number"},"256"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),rn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("mnemo "),n("span",{class:"token operator"},"="),s(" Mnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"english"'),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),wn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("mnemo "),n("span",{class:"token operator"},"="),s(" Mnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"english"'),n("span",{class:"token punctuation"},")"),s(` words `),n("span",{class:"token operator"},"="),s(" mnemo"),n("span",{class:"token punctuation"},"."),s("generate"),n("span",{class:"token punctuation"},"("),s("strength"),n("span",{class:"token operator"},"="),n("span",{class:"token number"},"256"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),kn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen new -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),bn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen new -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),mn=n("h2",{id:"\u0E27\u0E34\u0E18\u0E35\u0E01\u0E39\u0E49-keypair-\u0E08\u0E32\u0E01-mnemonic-phrase",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E27\u0E34\u0E18\u0E35\u0E01\u0E39\u0E49-keypair-\u0E08\u0E32\u0E01-mnemonic-phrase","aria-hidden":"true"},"#"),s(" \u0E27\u0E34\u0E18\u0E35\u0E01\u0E39\u0E49 Keypair \u0E08\u0E32\u0E01 mnemonic phrase")],-1),dn=n("p",null,"\u0E2B\u0E25\u0E32\u0E22\u0E46 wallet extensions \u0E43\u0E0A\u0E49 mnemonics \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E43\u0E0A\u0E49\u0E41\u0E17\u0E19 secret keys \u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E40\u0E1B\u0E25\u0E35\u0E48\u0E22\u0E19 mnemonic \u0E44\u0E1B\u0E40\u0E1B\u0E47\u0E19 Keypairs \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E17\u0E14\u0E2A\u0E2D\u0E1A\u0E17\u0E35\u0E48 local \u0E44\u0E14\u0E49",-1),yn=n("ol",null,[n("li",null,"BIP39 - \u0E2A\u0E23\u0E49\u0E32\u0E07 wallet 1 \u0E15\u0E31\u0E27")],-1),gn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),_n=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen new +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),vn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen new +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),fn=n("h2",{id:"\u0E27\u0E34\u0E18\u0E35\u0E01\u0E39\u0E49-keypair-\u0E08\u0E32\u0E01-mnemonic-phrase",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E27\u0E34\u0E18\u0E35\u0E01\u0E39\u0E49-keypair-\u0E08\u0E32\u0E01-mnemonic-phrase","aria-hidden":"true"},"#"),s(" \u0E27\u0E34\u0E18\u0E35\u0E01\u0E39\u0E49 Keypair \u0E08\u0E32\u0E01 mnemonic phrase")],-1),xn=n("p",null,"\u0E2B\u0E25\u0E32\u0E22\u0E46 wallet extensions \u0E43\u0E0A\u0E49 mnemonics \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E43\u0E0A\u0E49\u0E41\u0E17\u0E19 secret keys \u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E40\u0E1B\u0E25\u0E35\u0E48\u0E22\u0E19 mnemonic \u0E44\u0E1B\u0E40\u0E1B\u0E47\u0E19 Keypairs \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E17\u0E14\u0E2A\u0E2D\u0E1A\u0E17\u0E35\u0E48 local \u0E44\u0E14\u0E49",-1),Kn=n("ol",null,[n("li",null,"BIP39 - \u0E2A\u0E23\u0E49\u0E32\u0E07 wallet 1 \u0E15\u0E31\u0E27")],-1),Pn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" bip39 "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"bip39"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -241,23 +320,23 @@ words `),n("span",{class:"token operator"},"="),s(" mnemo"),n("span",{class:"tok `),n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSeed"),n("span",{class:"token punctuation"},"("),s("seed"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"slice"),n("span",{class:"token punctuation"},"("),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"32"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),n("span",{class:"token template-string"},[n("span",{class:"token template-punctuation string"},"`"),n("span",{class:"token interpolation"},[n("span",{class:"token interpolation-punctuation punctuation"},"${"),s("keypair"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token interpolation-punctuation punctuation"},"}")]),n("span",{class:"token template-punctuation string"},"`")]),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token comment"},"// 5ZWj7a1f8tWkjBESHKgrLmXshuXxqeY9SYcfbshpAqPG"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),hn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" mnemonic "),n("span",{class:"token operator"},"="),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),Wn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" mnemonic "),n("span",{class:"token operator"},"="),s(` `),n("span",{class:"token string"},'"pill tomorrow foster begin walnut borrow virtual kick shift mutual shoe scatter"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" seed "),n("span",{class:"token operator"},"="),s(" bip39"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"mnemonicToSeedSync"),n("span",{class:"token punctuation"},"("),s("mnemonic"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token string"},'""'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token comment"},"// (mnemonic, password)"),s(` `),n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSeed"),n("span",{class:"token punctuation"},"("),s("seed"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"slice"),n("span",{class:"token punctuation"},"("),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"32"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),wn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),Sn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair `),n("span",{class:"token keyword"},"from"),s(" mnemonic "),n("span",{class:"token keyword"},"import"),s(` Mnemonic mnemo `),n("span",{class:"token operator"},"="),s(" Mnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"english"'),n("span",{class:"token punctuation"},")"),s(` seed `),n("span",{class:"token operator"},"="),s(" mnemo"),n("span",{class:"token punctuation"},"."),s("to_seed"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"pill tomorrow foster begin walnut borrow virtual kick shift mutual shoe scatter"'),n("span",{class:"token punctuation"},")"),s(` -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),s("seed"),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created Keypair with Public Key: {}"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),_n=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("mnemo "),n("span",{class:"token operator"},"="),s(" Mnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"english"'),n("span",{class:"token punctuation"},")"),s(` +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_bytes"),n("span",{class:"token punctuation"},"("),s("seed"),n("span",{class:"token punctuation"},")"),s(` +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created Keypair with Public Key: {}"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),Cn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("mnemo "),n("span",{class:"token operator"},"="),s(" Mnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"english"'),n("span",{class:"token punctuation"},")"),s(` seed `),n("span",{class:"token operator"},"="),s(" mnemo"),n("span",{class:"token punctuation"},"."),s("to_seed"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"pill tomorrow foster begin walnut borrow virtual kick shift mutual shoe scatter"'),n("span",{class:"token punctuation"},")"),s(` -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),s("seed"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),vn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen recover -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),fn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen recover -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),xn=n("ol",{start:"2"},[n("li",null,"BIP44 (\u0E2A\u0E23\u0E49\u0E32\u0E07\u0E2B\u0E25\u0E32\u0E22 wallets \u0E2B\u0E23\u0E37\u0E2D\u0E17\u0E35\u0E48\u0E40\u0E23\u0E35\u0E22\u0E01\u0E27\u0E48\u0E32 HD wallets)")],-1),Kn=n("p",null,"\u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E2A\u0E23\u0E49\u0E32\u0E07\u0E2B\u0E25\u0E32\u0E22 wallets \u0E08\u0E32\u0E01 seed \u0E40\u0E14\u0E35\u0E22\u0E27\u0E2B\u0E23\u0E37\u0E2D\u0E17\u0E35\u0E48\u0E40\u0E23\u0E32\u0E40\u0E23\u0E35\u0E22\u0E01\u0E27\u0E48\u0E32 'Hierarchical Deterministic wallets' \u0E2B\u0E23\u0E37\u0E2D HD wallets:",-1),Pn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_bytes"),n("span",{class:"token punctuation"},"("),s("seed"),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),An=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen recover +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),jn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen recover +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Tn=n("ol",{start:"2"},[n("li",null,"BIP44 (\u0E2A\u0E23\u0E49\u0E32\u0E07\u0E2B\u0E25\u0E32\u0E22 wallets \u0E2B\u0E23\u0E37\u0E2D\u0E17\u0E35\u0E48\u0E40\u0E23\u0E35\u0E22\u0E01\u0E27\u0E48\u0E32 HD wallets)")],-1),Rn=n("p",null,"\u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E2A\u0E23\u0E49\u0E32\u0E07\u0E2B\u0E25\u0E32\u0E22 wallets \u0E08\u0E32\u0E01 seed \u0E40\u0E14\u0E35\u0E22\u0E27\u0E2B\u0E23\u0E37\u0E2D\u0E17\u0E35\u0E48\u0E40\u0E23\u0E32\u0E40\u0E23\u0E35\u0E22\u0E01\u0E27\u0E48\u0E32 'Hierarchical Deterministic wallets' \u0E2B\u0E23\u0E37\u0E2D HD wallets:",-1),Dn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" HDKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"micro-ed25519-hdkey"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" bip39 "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"bip39"'),n("span",{class:"token punctuation"},";"),s(` @@ -272,7 +351,7 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),n("span",{class:"token template-string"},[n("span",{class:"token template-punctuation string"},"`"),n("span",{class:"token interpolation"},[n("span",{class:"token interpolation-punctuation punctuation"},"${"),s("path"),n("span",{class:"token interpolation-punctuation punctuation"},"}")]),n("span",{class:"token string"}," => "),n("span",{class:"token interpolation"},[n("span",{class:"token interpolation-punctuation punctuation"},"${"),s("keypair"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token interpolation-punctuation punctuation"},"}")]),n("span",{class:"token template-punctuation string"},"`")]),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br")])],-1),Wn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" mnemonic "),n("span",{class:"token operator"},"="),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br")])],-1),Nn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" mnemonic "),n("span",{class:"token operator"},"="),s(` `),n("span",{class:"token string"},'"neither lonely flavor argue grass remind eye tag avocado spot unusual intact"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" seed "),n("span",{class:"token operator"},"="),s(" bip39"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"mnemonicToSeedSync"),n("span",{class:"token punctuation"},"("),s("mnemonic"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token string"},'""'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token comment"},"// (mnemonic, password)"),s(` `),n("span",{class:"token keyword"},"for"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"let"),s(" i "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(" i "),n("span",{class:"token operator"},"<"),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},";"),s(" i"),n("span",{class:"token operator"},"++"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -280,9 +359,9 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSeed"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"derivePath"),n("span",{class:"token punctuation"},"("),s("path"),n("span",{class:"token punctuation"},","),s(" seed"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toString"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"hex"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),s("key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),n("span",{class:"token template-string"},[n("span",{class:"token template-punctuation string"},"`"),n("span",{class:"token interpolation"},[n("span",{class:"token interpolation-punctuation punctuation"},"${"),s("path"),n("span",{class:"token interpolation-punctuation punctuation"},"}")]),n("span",{class:"token string"}," => "),n("span",{class:"token interpolation"},[n("span",{class:"token interpolation-punctuation punctuation"},"${"),s("keypair"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token interpolation-punctuation punctuation"},"}")]),n("span",{class:"token template-punctuation string"},"`")]),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),Sn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana-keygen recover "),n("span",{class:"token string"},"'prompt:?key=0/0'"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),An=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana-keygen recover "),n("span",{class:"token string"},"'prompt:?key=0/0'"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Cn=n("h2",{id:"\u0E27\u0E34\u0E18\u0E35-generate-a-vanity-address",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E27\u0E34\u0E18\u0E35-generate-a-vanity-address","aria-hidden":"true"},"#"),s(" \u0E27\u0E34\u0E18\u0E35 generate a vanity address")],-1),jn=n("p",null,'Vanity public keys \u0E2B\u0E23\u0E37\u0E2D custom addresses \u0E04\u0E37\u0E2D keys \u0E17\u0E35\u0E48\u0E40\u0E23\u0E34\u0E48\u0E21\u0E14\u0E49\u0E27\u0E22\u0E15\u0E31\u0E27\u0E2D\u0E31\u0E01\u0E29\u0E23\u0E17\u0E35\u0E48\u0E40\u0E09\u0E1E\u0E32\u0E30\u0E40\u0E08\u0E32\u0E30\u0E08\u0E07 \u0E40\u0E0A\u0E48\u0E19 \u0E40\u0E23\u0E32\u0E2D\u0E32\u0E08\u0E08\u0E30\u0E15\u0E49\u0E2D\u0E07\u0E01\u0E32\u0E23 publickey \u0E17\u0E35\u0E48\u0E02\u0E36\u0E49\u0E19\u0E15\u0E49\u0E49\u0E19\u0E14\u0E49\u0E27\u0E22 "elv1s" \u0E2B\u0E23\u0E37\u0E2D "cook" \u0E0B\u0E36\u0E48\u0E07\u0E21\u0E31\u0E19\u0E08\u0E30\u0E17\u0E33\u0E43\u0E2B\u0E49\u0E08\u0E33\u0E44\u0E14\u0E07\u0E48\u0E32\u0E22\u0E02\u0E36\u0E49\u0E19\u0E27\u0E48\u0E32\u0E40\u0E1B\u0E47\u0E19\u0E02\u0E2D\u0E07\u0E43\u0E04\u0E23 \u0E17\u0E33\u0E43\u0E2B\u0E49 key \u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E41\u0E22\u0E01\u0E41\u0E22\u0E30\u0E01\u0E31\u0E19\u0E44\u0E14\u0E49\u0E07\u0E48\u0E32\u0E22\u0E02\u0E36\u0E49\u0E19',-1),Tn=n("p",null,"Note: \u0E22\u0E34\u0E48\u0E07\u0E23\u0E30\u0E1A\u0E38 characters \u0E43\u0E19 vanity address \u0E21\u0E32\u0E01\u0E40\u0E17\u0E48\u0E32\u0E44\u0E2B\u0E23\u0E48 \u0E01\u0E47\u0E08\u0E30\u0E22\u0E34\u0E48\u0E07\u0E43\u0E0A\u0E49\u0E40\u0E27\u0E25\u0E32\u0E43\u0E19\u0E01\u0E32\u0E23\u0E04\u0E49\u0E19\u0E2B\u0E32 address \u0E19\u0E32\u0E19\u0E02\u0E36\u0E49\u0E19",-1),Bn=n("div",{class:"custom-container warning"},[n("p",{class:"custom-container-title"},"WARNING"),n("p",null,"\u0E04\u0E38\u0E13\u0E04\u0E27\u0E23\u0E43\u0E0A\u0E49 CLI \u0E43\u0E19\u0E01\u0E32\u0E23\u0E2A\u0E23\u0E49\u0E32\u0E07 \u0E17\u0E31\u0E49\u0E07\u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07 Python \u0E41\u0E25\u0E30 TypeScript \u0E40\u0E1B\u0E47\u0E19\u0E40\u0E1E\u0E35\u0E22\u0E07\u0E41\u0E04\u0E48\u0E01\u0E32\u0E23\u0E17\u0E33\u0E43\u0E2B\u0E49\u0E40\u0E2B\u0E47\u0E19\u0E20\u0E32\u0E1E\u0E21\u0E32\u0E01\u0E02\u0E36\u0E49\u0E19\u0E40\u0E17\u0E48\u0E32\u0E19\u0E31\u0E49\u0E19 \u0E41\u0E25\u0E30\u0E21\u0E31\u0E19\u0E08\u0E30\u0E17\u0E33\u0E07\u0E32\u0E19\u0E0A\u0E49\u0E32\u0E01\u0E27\u0E48\u0E32\u0E1A\u0E19 CLI \u0E2D\u0E35\u0E01\u0E14\u0E49\u0E27\u0E22")],-1),Rn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),zn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana-keygen recover "),n("span",{class:"token string"},"'prompt:?key=0/0'"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Bn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana-keygen recover "),n("span",{class:"token string"},"'prompt:?key=0/0'"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Mn=n("h2",{id:"\u0E27\u0E34\u0E18\u0E35-generate-a-vanity-address",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E27\u0E34\u0E18\u0E35-generate-a-vanity-address","aria-hidden":"true"},"#"),s(" \u0E27\u0E34\u0E18\u0E35 generate a vanity address")],-1),En=n("p",null,'Vanity public keys \u0E2B\u0E23\u0E37\u0E2D custom addresses \u0E04\u0E37\u0E2D keys \u0E17\u0E35\u0E48\u0E40\u0E23\u0E34\u0E48\u0E21\u0E14\u0E49\u0E27\u0E22\u0E15\u0E31\u0E27\u0E2D\u0E31\u0E01\u0E29\u0E23\u0E17\u0E35\u0E48\u0E40\u0E09\u0E1E\u0E32\u0E30\u0E40\u0E08\u0E32\u0E30\u0E08\u0E07 \u0E40\u0E0A\u0E48\u0E19 \u0E40\u0E23\u0E32\u0E2D\u0E32\u0E08\u0E08\u0E30\u0E15\u0E49\u0E2D\u0E07\u0E01\u0E32\u0E23 publickey \u0E17\u0E35\u0E48\u0E02\u0E36\u0E49\u0E19\u0E15\u0E49\u0E49\u0E19\u0E14\u0E49\u0E27\u0E22 "elv1s" \u0E2B\u0E23\u0E37\u0E2D "cook" \u0E0B\u0E36\u0E48\u0E07\u0E21\u0E31\u0E19\u0E08\u0E30\u0E17\u0E33\u0E43\u0E2B\u0E49\u0E08\u0E33\u0E44\u0E14\u0E07\u0E48\u0E32\u0E22\u0E02\u0E36\u0E49\u0E19\u0E27\u0E48\u0E32\u0E40\u0E1B\u0E47\u0E19\u0E02\u0E2D\u0E07\u0E43\u0E04\u0E23 \u0E17\u0E33\u0E43\u0E2B\u0E49 key \u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E41\u0E22\u0E01\u0E41\u0E22\u0E30\u0E01\u0E31\u0E19\u0E44\u0E14\u0E49\u0E07\u0E48\u0E32\u0E22\u0E02\u0E36\u0E49\u0E19',-1),Jn=n("p",null,"Note: \u0E22\u0E34\u0E48\u0E07\u0E23\u0E30\u0E1A\u0E38 characters \u0E43\u0E19 vanity address \u0E21\u0E32\u0E01\u0E40\u0E17\u0E48\u0E32\u0E44\u0E2B\u0E23\u0E48 \u0E01\u0E47\u0E08\u0E30\u0E22\u0E34\u0E48\u0E07\u0E43\u0E0A\u0E49\u0E40\u0E27\u0E25\u0E32\u0E43\u0E19\u0E01\u0E32\u0E23\u0E04\u0E49\u0E19\u0E2B\u0E32 address \u0E19\u0E32\u0E19\u0E02\u0E36\u0E49\u0E19",-1),Un=n("div",{class:"custom-container warning"},[n("p",{class:"custom-container-title"},"WARNING"),n("p",null,"\u0E04\u0E38\u0E13\u0E04\u0E27\u0E23\u0E43\u0E0A\u0E49 CLI \u0E43\u0E19\u0E01\u0E32\u0E23\u0E2A\u0E23\u0E49\u0E32\u0E07 \u0E17\u0E31\u0E49\u0E07\u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07 Python \u0E41\u0E25\u0E30 TypeScript \u0E40\u0E1B\u0E47\u0E19\u0E40\u0E1E\u0E35\u0E22\u0E07\u0E41\u0E04\u0E48\u0E01\u0E32\u0E23\u0E17\u0E33\u0E43\u0E2B\u0E49\u0E40\u0E2B\u0E47\u0E19\u0E20\u0E32\u0E1E\u0E21\u0E32\u0E01\u0E02\u0E36\u0E49\u0E19\u0E40\u0E17\u0E48\u0E32\u0E19\u0E31\u0E49\u0E19 \u0E41\u0E25\u0E30\u0E21\u0E31\u0E19\u0E08\u0E30\u0E17\u0E33\u0E07\u0E32\u0E19\u0E0A\u0E49\u0E32\u0E01\u0E27\u0E48\u0E32\u0E1A\u0E19 CLI \u0E2D\u0E35\u0E01\u0E14\u0E49\u0E27\u0E22")],-1),Hn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"let"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` @@ -290,23 +369,42 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),Mn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),Vn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"while"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token operator"},"!"),s("keypair"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"startsWith"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"elv1s"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),Dn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),Yn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"while"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"str"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},":"),n("span",{class:"token number"},"5"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token operator"},"!="),n("span",{class:"token string"},'"elv1s"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},":"),s(` +`),n("span",{class:"token keyword"},"while"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"str"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},":"),n("span",{class:"token number"},"5"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token operator"},"!="),n("span",{class:"token string"},'"elv1s"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},":"),s(` keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created Keypair with Public Key: {}"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),Nn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"while"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"str"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},":"),n("span",{class:"token number"},"5"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token operator"},"!="),n("span",{class:"token string"},'"elv1s"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},":"),s(` +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created Keypair with Public Key: {}"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),Ln=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` +`),n("span",{class:"token keyword"},"while"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"str"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},":"),n("span",{class:"token number"},"5"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token operator"},"!="),n("span",{class:"token string"},'"elv1s"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},":"),s(` keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),zn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen grind --starts-with e1v1s:1 -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),En=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen grind --starts-with e1v1s:1 -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Un=n("h2",{id:"\u0E27\u0E34\u0E18\u0E35-sign-\u0E41\u0E25\u0E30-verify-messages-with-wallets",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E27\u0E34\u0E18\u0E35-sign-\u0E41\u0E25\u0E30-verify-messages-with-wallets","aria-hidden":"true"},"#"),s(" \u0E27\u0E34\u0E18\u0E35 sign \u0E41\u0E25\u0E30 verify messages with wallets")],-1),Vn=n("p",null,"function \u0E2B\u0E25\u0E31\u0E01\u0E02\u0E2D\u0E07 keypair \u0E04\u0E37\u0E2D sign message \u0E41\u0E25\u0E30\u0E22\u0E31\u0E07\u0E40\u0E2D\u0E32\u0E44\u0E27\u0E49\u0E15\u0E23\u0E27\u0E08\u0E2A\u0E2D\u0E1A signature \u0E44\u0E14\u0E49\u0E14\u0E49\u0E27\u0E22 \u0E0B\u0E36\u0E48\u0E07\u0E01\u0E32\u0E23\u0E15\u0E23\u0E27\u0E08\u0E2A\u0E2D\u0E1A signature \u0E08\u0E30\u0E17\u0E33\u0E43\u0E2B\u0E49\u0E1C\u0E39\u0E49\u0E23\u0E31\u0E1A\u0E21\u0E31\u0E48\u0E19\u0E43\u0E08\u0E44\u0E14\u0E49\u0E27\u0E48\u0E32\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E16\u0E39\u0E01 sign \u0E14\u0E49\u0E27\u0E22\u0E40\u0E08\u0E49\u0E32\u0E02\u0E2D\u0E07 private key \u0E19\u0E31\u0E49\u0E19\u0E08\u0E23\u0E34\u0E07\u0E46",-1),Jn=s("\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E17\u0E35\u0E48\u0E08\u0E30\u0E17\u0E33\u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E01\u0E31\u0E19\u0E40\u0E23\u0E32\u0E08\u0E30 import "),Hn={href:"https://www.npmjs.com/package/tweetnacl",target:"_blank",rel:"noopener noreferrer"},Ln=s("TweetNaCl"),Yn=s(" crypto library \u0E21\u0E32\u0E43\u0E0A\u0E49"),qn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),qn=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token comment"},"// clang++ vanity_keypair.cpp -o vanity_keypair -std=c++17 -lssl -lcrypto -lsodium"),s(` + +`),n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + `),n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"while"),s(),n("span",{class:"token punctuation"},"("),s("key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"substr"),n("span",{class:"token punctuation"},"("),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"5"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"!="),s(),n("span",{class:"token string"},'"elv1s"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + key_pair `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token punctuation"},"}"),s(` + + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"Created Keypair with Public Key: "'),s(),n("span",{class:"token operator"},"<<"),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br")])],-1),Fn=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token keyword"},"while"),s(),n("span",{class:"token punctuation"},"("),s("key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"substr"),n("span",{class:"token punctuation"},"("),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"5"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"!="),s(),n("span",{class:"token string"},'"elv1s"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + key_pair `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),In=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen grind --starts-with e1v1s:1 +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Xn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen grind --starts-with e1v1s:1 +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Zn=n("h2",{id:"\u0E27\u0E34\u0E18\u0E35-sign-\u0E41\u0E25\u0E30-verify-messages-with-wallets",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E27\u0E34\u0E18\u0E35-sign-\u0E41\u0E25\u0E30-verify-messages-with-wallets","aria-hidden":"true"},"#"),s(" \u0E27\u0E34\u0E18\u0E35 sign \u0E41\u0E25\u0E30 verify messages with wallets")],-1),$n=n("p",null,"function \u0E2B\u0E25\u0E31\u0E01\u0E02\u0E2D\u0E07 keypair \u0E04\u0E37\u0E2D sign message \u0E41\u0E25\u0E30\u0E22\u0E31\u0E07\u0E40\u0E2D\u0E32\u0E44\u0E27\u0E49\u0E15\u0E23\u0E27\u0E08\u0E2A\u0E2D\u0E1A signature \u0E44\u0E14\u0E49\u0E14\u0E49\u0E27\u0E22 \u0E0B\u0E36\u0E48\u0E07\u0E01\u0E32\u0E23\u0E15\u0E23\u0E27\u0E08\u0E2A\u0E2D\u0E1A signature \u0E08\u0E30\u0E17\u0E33\u0E43\u0E2B\u0E49\u0E1C\u0E39\u0E49\u0E23\u0E31\u0E1A\u0E21\u0E31\u0E48\u0E19\u0E43\u0E08\u0E44\u0E14\u0E49\u0E27\u0E48\u0E32\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E16\u0E39\u0E01 sign \u0E14\u0E49\u0E27\u0E22\u0E40\u0E08\u0E49\u0E32\u0E02\u0E2D\u0E07 private key \u0E19\u0E31\u0E49\u0E19\u0E08\u0E23\u0E34\u0E07\u0E46",-1),Gn=s("\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E17\u0E35\u0E48\u0E08\u0E30\u0E17\u0E33\u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E01\u0E31\u0E19\u0E40\u0E23\u0E32\u0E08\u0E30 import "),Qn={href:"https://www.npmjs.com/package/tweetnacl",target:"_blank",rel:"noopener noreferrer"},On=s("TweetNaCl"),ns=s(" crypto library \u0E21\u0E32\u0E43\u0E0A\u0E49"),ss=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(" nacl "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"tweetnacl"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" decodeUTF8 "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"tweetnacl-util"'),n("span",{class:"token punctuation"},";"),s(` @@ -332,7 +430,7 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("result"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br")])],-1),Fn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" message "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"The quick brown fox jumps over the lazy dog"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br")])],-1),as=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" message "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"The quick brown fox jumps over the lazy dog"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" messageBytes "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"decodeUTF8"),n("span",{class:"token punctuation"},"("),s("message"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" signature "),n("span",{class:"token operator"},"="),s(" nacl"),n("span",{class:"token punctuation"},"."),s("sign"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"detached"),n("span",{class:"token punctuation"},"("),s("messageBytes"),n("span",{class:"token punctuation"},","),s(" keypair"),n("span",{class:"token punctuation"},"."),s("secretKey"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` @@ -343,42 +441,26 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("result"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),In=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" nacl"),n("span",{class:"token punctuation"},"."),s("signing "),n("span",{class:"token keyword"},"import"),s(` VerifyKey -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),ts=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair secret_key `),n("span",{class:"token operator"},"="),s(" "),n("span",{class:"token punctuation"},"["),s(` `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"189"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"224"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"216"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"117"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"173"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"149"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"45"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"73"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"237"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"246"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"15"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"185"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"186"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"82"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"177"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` - `),n("span",{class:"token punctuation"},"]"),s(` - -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"bytes"),n("span",{class:"token punctuation"},"("),s("secret_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -pubkey_bytes `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token builtin"},"bytes"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),s(` -message `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"The quick brown fox jumps over the lazy dog"'),s(` -message_bytes `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token builtin"},"bytes"),n("span",{class:"token punctuation"},"("),s("message"),n("span",{class:"token punctuation"},","),n("span",{class:"token string"},"'utf8'"),n("span",{class:"token punctuation"},")"),s(` -signed_message `),n("span",{class:"token operator"},"="),s(" keypair"),n("span",{class:"token punctuation"},"."),s("sign"),n("span",{class:"token punctuation"},"("),s("message_bytes"),n("span",{class:"token punctuation"},")"),s(` - -verify_sign `),n("span",{class:"token operator"},"="),s(" VerifyKey"),n("span",{class:"token punctuation"},"("),s(` - pubkey_bytes -`),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),s("verify"),n("span",{class:"token punctuation"},"("),s(` - smessage`),n("span",{class:"token operator"},"="),s("message_bytes"),n("span",{class:"token punctuation"},","),s(` - signature`),n("span",{class:"token operator"},"="),s("signed_message"),n("span",{class:"token punctuation"},"."),s(`signature -`),n("span",{class:"token punctuation"},")"),s(` - -`),n("span",{class:"token comment"},"#Returns original message if the signature has not been tampered with"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("verify_sign"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br")])],-1),Xn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("message "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"The quick brown fox jumps over the lazy dog"'),s(` -message_bytes `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token builtin"},"bytes"),n("span",{class:"token punctuation"},"("),s("message"),n("span",{class:"token punctuation"},","),n("span",{class:"token string"},"'utf8'"),n("span",{class:"token punctuation"},")"),s(` -signed_message `),n("span",{class:"token operator"},"="),s(" keypair"),n("span",{class:"token punctuation"},"."),s("sign"),n("span",{class:"token punctuation"},"("),s("message_bytes"),n("span",{class:"token punctuation"},")"),s(` - -verify_sign `),n("span",{class:"token operator"},"="),s(" VerifyKey"),n("span",{class:"token punctuation"},"("),s(` - pubkey_bytes -`),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),s("verify"),n("span",{class:"token punctuation"},"("),s(` - smessage`),n("span",{class:"token operator"},"="),s("message_bytes"),n("span",{class:"token punctuation"},","),s(` - signature`),n("span",{class:"token operator"},"="),s("signed_message"),n("span",{class:"token punctuation"},"."),s(`signature -`),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),Zn=n("h2",{id:"\u0E27\u0E34\u0E18\u0E35\u0E40\u0E0A\u0E37\u0E48\u0E2D\u0E21\u0E15\u0E48\u0E2D\u0E01\u0E31\u0E1A-wallet",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E27\u0E34\u0E18\u0E35\u0E40\u0E0A\u0E37\u0E48\u0E2D\u0E21\u0E15\u0E48\u0E2D\u0E01\u0E31\u0E1A-wallet","aria-hidden":"true"},"#"),s(" \u0E27\u0E34\u0E18\u0E35\u0E40\u0E0A\u0E37\u0E48\u0E2D\u0E21\u0E15\u0E48\u0E2D\u0E01\u0E31\u0E1A wallet")],-1),$n=s("Solana's "),Gn={href:"https://github.com/solana-labs/wallet-adapter",target:"_blank",rel:"noopener noreferrer"},Qn=s("wallet-adapter"),On=s(" libraries \u0E08\u0E30\u0E0A\u0E48\u0E27\u0E22\u0E17\u0E33\u0E43\u0E2B\u0E49\u0E40\u0E23\u0E32\u0E08\u0E31\u0E14\u0E01\u0E32\u0E23\u0E40\u0E0A\u0E37\u0E48\u0E2D\u0E21\u0E15\u0E48\u0E2D wallet \u0E17\u0E35\u0E48\u0E1D\u0E31\u0E48\u0E07 client \u0E44\u0E14\u0E49\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E07\u0E48\u0E32\u0E22\u0E14\u0E32\u0E22"),ns=l(`

    React

    Run \u0E04\u0E33\u0E2A\u0E31\u0E48\u0E07\u0E02\u0E49\u0E32\u0E07\u0E25\u0E48\u0E32\u0E07\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07 dependencies \u0E17\u0E35\u0E48\u0E15\u0E49\u0E2D\u0E07\u0E43\u0E0A\u0E49:

    yarn add @solana/wallet-adapter-react @solana/wallet-adapter-react-ui @solana/wallet-adapter-base @solana/wallet-adapter-wallets
    -

    React wallet-adapter libraries \u0E08\u0E30\u0E17\u0E33\u0E43\u0E2B\u0E49\u0E40\u0E23\u0E32\u0E04\u0E07\u0E2A\u0E16\u0E32\u0E19\u0E30\u0E01\u0E32\u0E23\u0E40\u0E0A\u0E37\u0E48\u0E2D\u0E21\u0E15\u0E48\u0E2D wallet \u0E1C\u0E48\u0E32\u0E19 hooks \u0E41\u0E25\u0E30 Context providers \u0E17\u0E35\u0E48\u0E0A\u0E37\u0E48\u0E2D\u0E27\u0E48\u0E32 useWallet, WalletProvider, useConnection, \u0E41\u0E25\u0E30 ConnectionProvider React App \u0E15\u0E49\u0E2D\u0E07\u0E04\u0E23\u0E2D\u0E1A\u0E44\u0E27\u0E49\u0E14\u0E49\u0E27\u0E22 WalletProvider \u0E41\u0E25\u0E30 ConnectionProvider

    \u0E19\u0E2D\u0E01\u0E08\u0E32\u0E01\u0E19\u0E35\u0E49\u0E40\u0E23\u0E32\u0E22\u0E31\u0E07\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E1A\u0E2D\u0E01\u0E43\u0E2B\u0E49 users \u0E40\u0E0A\u0E37\u0E48\u0E2D\u0E21\u0E15\u0E48\u0E2D\u0E42\u0E14\u0E22\u0E43\u0E0A\u0E49 useWalletModal \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E2A\u0E25\u0E31\u0E1A\u0E01\u0E32\u0E23\u0E21\u0E2D\u0E07\u0E40\u0E2B\u0E47\u0E19 connection modal \u0E41\u0E25\u0E30\u0E04\u0E23\u0E2D\u0E1A app \u0E44\u0E27\u0E49\u0E14\u0E49\u0E27\u0E22 WalletModalProvider \u0E08\u0E32\u0E01 @solana/wallet-adapter-react-ui \u0E44\u0E14\u0E49\u0E14\u0E49\u0E27\u0E22. \u0E15\u0E31\u0E27 connection modal \u0E08\u0E30\u0E04\u0E27\u0E1A\u0E04\u0E38\u0E21\u0E01\u0E32\u0E23\u0E17\u0E33\u0E07\u0E32\u0E19 connection \u0E43\u0E2B\u0E49\u0E40\u0E23\u0E32 \u0E17\u0E33\u0E43\u0E2B\u0E49\u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 listen \u0E44\u0E27\u0E49\u0E44\u0E14\u0E49\u0E27\u0E48\u0E32 wallet \u0E40\u0E0A\u0E37\u0E48\u0E2D\u0E21\u0E15\u0E48\u0E2D\u0E41\u0E25\u0E49\u0E27. \u0E40\u0E23\u0E32\u0E08\u0E30\u0E23\u0E39\u0E49\u0E27\u0E48\u0E32 wallet \u0E40\u0E0A\u0E37\u0E48\u0E2D\u0E21\u0E15\u0E48\u0E2D\u0E41\u0E25\u0E49\u0E27\u0E40\u0E21\u0E37\u0E48\u0E2D\u0E01\u0E32\u0E23\u0E15\u0E2D\u0E1A\u0E01\u0E25\u0E31\u0E1A\u0E02\u0E2D\u0E07 useWallet \u0E21\u0E35\u0E04\u0E48\u0E32 wallet \u0E2D\u0E22\u0E39\u0E48 (\u0E44\u0E21\u0E48 null). \u0E41\u0E25\u0E30\u0E15\u0E23\u0E07\u0E02\u0E49\u0E32\u0E21\u0E01\u0E31\u0E19\u0E16\u0E49\u0E32 wallet \u0E04\u0E48\u0E32\u0E40\u0E1B\u0E47\u0E19 null \u0E41\u0E2A\u0E14\u0E07\u0E27\u0E48\u0E32\u0E40\u0E23\u0E32\u0E22\u0E31\u0E07\u0E44\u0E21\u0E48\u0E44\u0E14\u0E49\u0E40\u0E0A\u0E37\u0E48\u0E2D\u0E21\u0E15\u0E48\u0E2D (disconnected).

    `,5),ss=n("div",{class:"language-tsx ext-tsx line-numbers-mode"},[n("pre",{class:"language-tsx"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(" React"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token punctuation"},"{"),s(" useMemo"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token constant"},"FC"),n("span",{class:"token punctuation"},","),s(" PropsWithChildren "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"react"'),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token punctuation"},"]"),s(` +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_bytes"),n("span",{class:"token punctuation"},"("),s("secret_key"),n("span",{class:"token punctuation"},")"),s(` +message `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'b"The quick brown fox jumps over the lazy dog"'),s(` +signature `),n("span",{class:"token operator"},"="),s(" keypair"),n("span",{class:"token punctuation"},"."),s("sign_message"),n("span",{class:"token punctuation"},"("),s("message"),n("span",{class:"token punctuation"},")"),s(` +verify_sign `),n("span",{class:"token operator"},"="),s(" signature"),n("span",{class:"token punctuation"},"."),s("verify"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(" message"),n("span",{class:"token punctuation"},")"),s(` + +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("verify_sign"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# bool"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br")])],-1),es=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("message "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'b"The quick brown fox jumps over the lazy dog"'),s(` +signature `),n("span",{class:"token operator"},"="),s(" keypair"),n("span",{class:"token punctuation"},"."),s("sign_message"),n("span",{class:"token punctuation"},"("),s("message"),n("span",{class:"token punctuation"},")"),s(` +verify_sign `),n("span",{class:"token operator"},"="),s(" signature"),n("span",{class:"token punctuation"},"."),s("verify"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(" message"),n("span",{class:"token punctuation"},")"),s(` + +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("verify_sign"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# bool"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br")])],-1),os=n("h2",{id:"\u0E27\u0E34\u0E18\u0E35\u0E40\u0E0A\u0E37\u0E48\u0E2D\u0E21\u0E15\u0E48\u0E2D\u0E01\u0E31\u0E1A-wallet",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E27\u0E34\u0E18\u0E35\u0E40\u0E0A\u0E37\u0E48\u0E2D\u0E21\u0E15\u0E48\u0E2D\u0E01\u0E31\u0E1A-wallet","aria-hidden":"true"},"#"),s(" \u0E27\u0E34\u0E18\u0E35\u0E40\u0E0A\u0E37\u0E48\u0E2D\u0E21\u0E15\u0E48\u0E2D\u0E01\u0E31\u0E1A wallet")],-1),cs=s("Solana's "),ps={href:"https://github.com/solana-labs/wallet-adapter",target:"_blank",rel:"noopener noreferrer"},us=s("wallet-adapter"),ls=s(" libraries \u0E08\u0E30\u0E0A\u0E48\u0E27\u0E22\u0E17\u0E33\u0E43\u0E2B\u0E49\u0E40\u0E23\u0E32\u0E08\u0E31\u0E14\u0E01\u0E32\u0E23\u0E40\u0E0A\u0E37\u0E48\u0E2D\u0E21\u0E15\u0E48\u0E2D wallet \u0E17\u0E35\u0E48\u0E1D\u0E31\u0E48\u0E07 client \u0E44\u0E14\u0E49\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E07\u0E48\u0E32\u0E22\u0E14\u0E32\u0E22"),is=u(`

    React

    Run \u0E04\u0E33\u0E2A\u0E31\u0E48\u0E07\u0E02\u0E49\u0E32\u0E07\u0E25\u0E48\u0E32\u0E07\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07 dependencies \u0E17\u0E35\u0E48\u0E15\u0E49\u0E2D\u0E07\u0E43\u0E0A\u0E49:

    yarn add @solana/wallet-adapter-react @solana/wallet-adapter-react-ui @solana/wallet-adapter-base @solana/wallet-adapter-wallets
    +

    React wallet-adapter libraries \u0E08\u0E30\u0E17\u0E33\u0E43\u0E2B\u0E49\u0E40\u0E23\u0E32\u0E04\u0E07\u0E2A\u0E16\u0E32\u0E19\u0E30\u0E01\u0E32\u0E23\u0E40\u0E0A\u0E37\u0E48\u0E2D\u0E21\u0E15\u0E48\u0E2D wallet \u0E1C\u0E48\u0E32\u0E19 hooks \u0E41\u0E25\u0E30 Context providers \u0E17\u0E35\u0E48\u0E0A\u0E37\u0E48\u0E2D\u0E27\u0E48\u0E32 useWallet, WalletProvider, useConnection, \u0E41\u0E25\u0E30 ConnectionProvider React App \u0E15\u0E49\u0E2D\u0E07\u0E04\u0E23\u0E2D\u0E1A\u0E44\u0E27\u0E49\u0E14\u0E49\u0E27\u0E22 WalletProvider \u0E41\u0E25\u0E30 ConnectionProvider

    \u0E19\u0E2D\u0E01\u0E08\u0E32\u0E01\u0E19\u0E35\u0E49\u0E40\u0E23\u0E32\u0E22\u0E31\u0E07\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E1A\u0E2D\u0E01\u0E43\u0E2B\u0E49 users \u0E40\u0E0A\u0E37\u0E48\u0E2D\u0E21\u0E15\u0E48\u0E2D\u0E42\u0E14\u0E22\u0E43\u0E0A\u0E49 useWalletModal \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E2A\u0E25\u0E31\u0E1A\u0E01\u0E32\u0E23\u0E21\u0E2D\u0E07\u0E40\u0E2B\u0E47\u0E19 connection modal \u0E41\u0E25\u0E30\u0E04\u0E23\u0E2D\u0E1A app \u0E44\u0E27\u0E49\u0E14\u0E49\u0E27\u0E22 WalletModalProvider \u0E08\u0E32\u0E01 @solana/wallet-adapter-react-ui \u0E44\u0E14\u0E49\u0E14\u0E49\u0E27\u0E22. \u0E15\u0E31\u0E27 connection modal \u0E08\u0E30\u0E04\u0E27\u0E1A\u0E04\u0E38\u0E21\u0E01\u0E32\u0E23\u0E17\u0E33\u0E07\u0E32\u0E19 connection \u0E43\u0E2B\u0E49\u0E40\u0E23\u0E32 \u0E17\u0E33\u0E43\u0E2B\u0E49\u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 listen \u0E44\u0E27\u0E49\u0E44\u0E14\u0E49\u0E27\u0E48\u0E32 wallet \u0E40\u0E0A\u0E37\u0E48\u0E2D\u0E21\u0E15\u0E48\u0E2D\u0E41\u0E25\u0E49\u0E27. \u0E40\u0E23\u0E32\u0E08\u0E30\u0E23\u0E39\u0E49\u0E27\u0E48\u0E32 wallet \u0E40\u0E0A\u0E37\u0E48\u0E2D\u0E21\u0E15\u0E48\u0E2D\u0E41\u0E25\u0E49\u0E27\u0E40\u0E21\u0E37\u0E48\u0E2D\u0E01\u0E32\u0E23\u0E15\u0E2D\u0E1A\u0E01\u0E25\u0E31\u0E1A\u0E02\u0E2D\u0E07 useWallet \u0E21\u0E35\u0E04\u0E48\u0E32 wallet \u0E2D\u0E22\u0E39\u0E48 (\u0E44\u0E21\u0E48 null). \u0E41\u0E25\u0E30\u0E15\u0E23\u0E07\u0E02\u0E49\u0E32\u0E21\u0E01\u0E31\u0E19\u0E16\u0E49\u0E32 wallet \u0E04\u0E48\u0E32\u0E40\u0E1B\u0E47\u0E19 null \u0E41\u0E2A\u0E14\u0E07\u0E27\u0E48\u0E32\u0E40\u0E23\u0E32\u0E22\u0E31\u0E07\u0E44\u0E21\u0E48\u0E44\u0E14\u0E49\u0E40\u0E0A\u0E37\u0E48\u0E2D\u0E21\u0E15\u0E48\u0E2D (disconnected).

    `,5),ks=n("div",{class:"language-tsx ext-tsx line-numbers-mode"},[n("pre",{class:"language-tsx"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(" React"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token punctuation"},"{"),s(" useMemo"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token constant"},"FC"),n("span",{class:"token punctuation"},","),s(" PropsWithChildren "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"react"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` ConnectionProvider`),n("span",{class:"token punctuation"},","),s(` WalletProvider`),n("span",{class:"token punctuation"},","),s(` @@ -460,7 +542,7 @@ verify_sign `),n("span",{class:"token operator"},"="),s(" VerifyKey"),n("span",{ `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br"),n("span",{class:"line-number"},"69"),n("br"),n("span",{class:"line-number"},"70"),n("br"),n("span",{class:"line-number"},"71"),n("br"),n("span",{class:"line-number"},"72"),n("br"),n("span",{class:"line-number"},"73"),n("br"),n("span",{class:"line-number"},"74"),n("br"),n("span",{class:"line-number"},"75"),n("br"),n("span",{class:"line-number"},"76"),n("br"),n("span",{class:"line-number"},"77"),n("br"),n("span",{class:"line-number"},"78"),n("br"),n("span",{class:"line-number"},"79"),n("br"),n("span",{class:"line-number"},"80"),n("br"),n("span",{class:"line-number"},"81"),n("br"),n("span",{class:"line-number"},"82"),n("br")])],-1),as=n("div",{class:"language-tsx ext-tsx line-numbers-mode"},[n("pre",{class:"language-tsx"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token punctuation"},"{"),s(" wallet "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"useWallet"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br"),n("span",{class:"line-number"},"69"),n("br"),n("span",{class:"line-number"},"70"),n("br"),n("span",{class:"line-number"},"71"),n("br"),n("span",{class:"line-number"},"72"),n("br"),n("span",{class:"line-number"},"73"),n("br"),n("span",{class:"line-number"},"74"),n("br"),n("span",{class:"line-number"},"75"),n("br"),n("span",{class:"line-number"},"76"),n("br"),n("span",{class:"line-number"},"77"),n("br"),n("span",{class:"line-number"},"78"),n("br"),n("span",{class:"line-number"},"79"),n("br"),n("span",{class:"line-number"},"80"),n("br"),n("span",{class:"line-number"},"81"),n("br"),n("span",{class:"line-number"},"82"),n("br")])],-1),rs=n("div",{class:"language-tsx ext-tsx line-numbers-mode"},[n("pre",{class:"language-tsx"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token punctuation"},"{"),s(" wallet "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"useWallet"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token punctuation"},"{"),s(" setVisible "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"useWalletModal"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token function-variable function"},"onRequestConnectWallet"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -479,8 +561,8 @@ verify_sign `),n("span",{class:"token operator"},"="),s(" VerifyKey"),n("span",{ `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("p")]),n("span",{class:"token punctuation"},">")]),n("span",{class:"token punctuation"},"{"),s("wallet"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),n("span",{class:"token plain-text"},` `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br")])],-1),ts=l(`

    Vue

    Run \u0E04\u0E33\u0E2A\u0E31\u0E48\u0E07\u0E02\u0E49\u0E32\u0E07\u0E25\u0E48\u0E32\u0E07\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07 dependencies \u0E17\u0E35\u0E48\u0E15\u0E49\u0E2D\u0E07\u0E43\u0E0A\u0E49:

    npm install solana-wallets-vue @solana/wallet-adapter-wallets
    -
    `,3),es={href:"https://github.com/lorisleiva/solana-wallets-vue",target:"_blank",rel:"noopener noreferrer"},os=s("Solana Wallets Vue"),cs=s(" plugin \u0E08\u0E30\u0E17\u0E33\u0E43\u0E2B\u0E49\u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23 initialise wallet store \u0E41\u0E25\u0E30 \u0E2A\u0E23\u0E49\u0E32\u0E07 global "),ps=n("code",null,"$wallet",-1),ls=s(" \u0E17\u0E35\u0E48\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E40\u0E02\u0E49\u0E32\u0E16\u0E36\u0E07\u0E44\u0E14\u0E49\u0E08\u0E32\u0E01\u0E17\u0E38\u0E01\u0E46 component. \u0E17\u0E38\u0E01 properties \u0E41\u0E25\u0E30 methods \u0E17\u0E35\u0E48\u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 \u0E2D\u0E48\u0E32\u0E19\u0E04\u0E48\u0E32\u0E44\u0E14\u0E49\u0E08\u0E32\u0E01 "),us=n("code",null,"useWallet()",-1),is=s(" \u0E08\u0E30\u0E21\u0E35\u0E41\u0E2A\u0E14\u0E07\u0E44\u0E27\u0E49 "),rs={href:"https://github.com/lorisleiva/solana-wallets-vue#usewallet-references",target:"_blank",rel:"noopener noreferrer"},ks=s("\u0E17\u0E35\u0E48\u0E19\u0E35\u0E48"),bs=s(". \u0E40\u0E23\u0E32\u0E08\u0E30 import \u0E41\u0E25\u0E30 render WalletMultiButton component \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E43\u0E2B\u0E49\u0E1C\u0E39\u0E49\u0E43\u0E0A\u0E49\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E40\u0E25\u0E37\u0E2D\u0E01\u0E41\u0E25\u0E30\u0E40\u0E0A\u0E37\u0E48\u0E2D\u0E21\u0E15\u0E48\u0E2D wallet \u0E44\u0E14\u0E49"),ms=n("div",{class:"language-vue ext-vue line-numbers-mode"},[n("pre",{class:"language-vue"},[n("code",null,[n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("script")]),s(),n("span",{class:"token attr-name"},"setup"),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"},[n("span",{class:"token language-javascript"},[s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br")])],-1),bs=u(`

    Vue

    Run \u0E04\u0E33\u0E2A\u0E31\u0E48\u0E07\u0E02\u0E49\u0E32\u0E07\u0E25\u0E48\u0E32\u0E07\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07 dependencies \u0E17\u0E35\u0E48\u0E15\u0E49\u0E2D\u0E07\u0E43\u0E0A\u0E49:

    npm install solana-wallets-vue @solana/wallet-adapter-wallets
    +
    `,3),ms={href:"https://github.com/lorisleiva/solana-wallets-vue",target:"_blank",rel:"noopener noreferrer"},ds=s("Solana Wallets Vue"),ys=s(" plugin \u0E08\u0E30\u0E17\u0E33\u0E43\u0E2B\u0E49\u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23 initialise wallet store \u0E41\u0E25\u0E30 \u0E2A\u0E23\u0E49\u0E32\u0E07 global "),gs=n("code",null,"$wallet",-1),hs=s(" \u0E17\u0E35\u0E48\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E40\u0E02\u0E49\u0E32\u0E16\u0E36\u0E07\u0E44\u0E14\u0E49\u0E08\u0E32\u0E01\u0E17\u0E38\u0E01\u0E46 component. \u0E17\u0E38\u0E01 properties \u0E41\u0E25\u0E30 methods \u0E17\u0E35\u0E48\u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 \u0E2D\u0E48\u0E32\u0E19\u0E04\u0E48\u0E32\u0E44\u0E14\u0E49\u0E08\u0E32\u0E01 "),ws=n("code",null,"useWallet()",-1),_s=s(" \u0E08\u0E30\u0E21\u0E35\u0E41\u0E2A\u0E14\u0E07\u0E44\u0E27\u0E49 "),vs={href:"https://github.com/lorisleiva/solana-wallets-vue#usewallet-references",target:"_blank",rel:"noopener noreferrer"},fs=s("\u0E17\u0E35\u0E48\u0E19\u0E35\u0E48"),xs=s(". \u0E40\u0E23\u0E32\u0E08\u0E30 import \u0E41\u0E25\u0E30 render WalletMultiButton component \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E43\u0E2B\u0E49\u0E1C\u0E39\u0E49\u0E43\u0E0A\u0E49\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E40\u0E25\u0E37\u0E2D\u0E01\u0E41\u0E25\u0E30\u0E40\u0E0A\u0E37\u0E48\u0E2D\u0E21\u0E15\u0E48\u0E2D wallet \u0E44\u0E14\u0E49"),Ks=n("div",{class:"language-vue ext-vue line-numbers-mode"},[n("pre",{class:"language-vue"},[n("code",null,[n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("script")]),s(),n("span",{class:"token attr-name"},"setup"),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"},[n("span",{class:"token language-javascript"},[s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" WalletMultiButton "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"solana-wallets-vue"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` LedgerWalletAdapter`),n("span",{class:"token punctuation"},","),s(` @@ -513,15 +595,15 @@ verify_sign `),n("span",{class:"token operator"},"="),s(" VerifyKey"),n("span",{ `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br")])],-1),ds=n("div",{class:"language-vue ext-vue line-numbers-mode"},[n("pre",{class:"language-vue"},[n("code",null,[n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("script")]),s(),n("span",{class:"token attr-name"},"setup"),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"},[n("span",{class:"token language-javascript"},[s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br")])],-1),Ps=n("div",{class:"language-vue ext-vue line-numbers-mode"},[n("pre",{class:"language-vue"},[n("code",null,[n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("script")]),s(),n("span",{class:"token attr-name"},"setup"),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"},[n("span",{class:"token language-javascript"},[s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" WalletMultiButton "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"solana-wallets-vue"'),n("span",{class:"token punctuation"},";"),s(` `)])]),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("template")]),n("span",{class:"token punctuation"},">")]),s(` `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("wallet-multi-button")]),n("span",{class:"token punctuation"},">")]),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),ys=l(`

    Svelte

    Run \u0E04\u0E33\u0E2A\u0E31\u0E48\u0E07\u0E02\u0E49\u0E32\u0E07\u0E25\u0E48\u0E32\u0E07\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07 dependencies \u0E17\u0E35\u0E48\u0E15\u0E49\u0E2D\u0E07\u0E43\u0E0A\u0E49:

    npm install @svelte-on-solana/wallet-adapter-core @svelte-on-solana/wallet-adapter-ui @solana/wallet-adapter-base @solana/wallet-adapter-wallets @solana/web3.js
    -
    `,3),gs={href:"https://github.com/svelte-on-solana/wallet-adapter",target:"_blank",rel:"noopener noreferrer"},hs=s("Svelte Wallet Adapter"),ws=s(" package \u0E08\u0E30\u0E17\u0E33\u0E43\u0E2B\u0E49\u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E40\u0E1E\u0E34\u0E48\u0E21 Svelte Store ("),_s=n("code",null,"$walletStore",-1),vs=s(") \u0E17\u0E35\u0E48\u0E40\u0E02\u0E49\u0E32\u0E16\u0E36\u0E07\u0E44\u0E14\u0E49\u0E17\u0E31\u0E49\u0E07 JS, TS \u0E41\u0E25\u0E30/\u0E2B\u0E23\u0E37\u0E2D Svelte files \u0E43\u0E19 project \u0E17\u0E35\u0E48\u0E2A\u0E23\u0E49\u0E32\u0E07\u0E14\u0E49\u0E27\u0E22 Svelte Template \u0E2B\u0E23\u0E37\u0E2D SvelteKit. \u0E42\u0E14\u0E22\u0E43\u0E0A\u0E49 repo "),fs={href:"https://github.com/svelte-on-solana/wallet-adapter/blob/master/packages/core/README.md/",target:"_blank",rel:"noopener noreferrer"},xs=s("\u0E17\u0E35\u0E48\u0E19\u0E35\u0E48"),Ks=s(" \u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E17\u0E35\u0E48\u0E08\u0E30\u0E43\u0E0A\u0E49 adapter \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A SSR \u0E2B\u0E23\u0E37\u0E2D SPA. \u0E2A\u0E48\u0E27\u0E19 UI package \u0E08\u0E30\u0E21\u0E35 "),Ps=n("code",null,"",-1),Ws=s(" component \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E43\u0E2B\u0E49\u0E1C\u0E39\u0E49\u0E43\u0E0A\u0E49\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E40\u0E25\u0E37\u0E2D\u0E01\u0E41\u0E25\u0E30\u0E40\u0E0A\u0E37\u0E48\u0E2D\u0E21\u0E15\u0E48\u0E2D wallet \u0E44\u0E14\u0E49"),Ss=n("div",{class:"language-html ext-html line-numbers-mode"},[n("pre",{class:"language-html"},[n("code",null,[n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("script")]),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"},[n("span",{class:"token language-javascript"},[s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),Ws=u(`

    Svelte

    Run \u0E04\u0E33\u0E2A\u0E31\u0E48\u0E07\u0E02\u0E49\u0E32\u0E07\u0E25\u0E48\u0E32\u0E07\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07 dependencies \u0E17\u0E35\u0E48\u0E15\u0E49\u0E2D\u0E07\u0E43\u0E0A\u0E49:

    npm install @svelte-on-solana/wallet-adapter-core @svelte-on-solana/wallet-adapter-ui @solana/wallet-adapter-base @solana/wallet-adapter-wallets @solana/web3.js
    +
    `,3),Ss={href:"https://github.com/svelte-on-solana/wallet-adapter",target:"_blank",rel:"noopener noreferrer"},Cs=s("Svelte Wallet Adapter"),As=s(" package \u0E08\u0E30\u0E17\u0E33\u0E43\u0E2B\u0E49\u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E40\u0E1E\u0E34\u0E48\u0E21 Svelte Store ("),js=n("code",null,"$walletStore",-1),Ts=s(") \u0E17\u0E35\u0E48\u0E40\u0E02\u0E49\u0E32\u0E16\u0E36\u0E07\u0E44\u0E14\u0E49\u0E17\u0E31\u0E49\u0E07 JS, TS \u0E41\u0E25\u0E30/\u0E2B\u0E23\u0E37\u0E2D Svelte files \u0E43\u0E19 project \u0E17\u0E35\u0E48\u0E2A\u0E23\u0E49\u0E32\u0E07\u0E14\u0E49\u0E27\u0E22 Svelte Template \u0E2B\u0E23\u0E37\u0E2D SvelteKit. \u0E42\u0E14\u0E22\u0E43\u0E0A\u0E49 repo "),Rs={href:"https://github.com/svelte-on-solana/wallet-adapter/blob/master/packages/core/README.md/",target:"_blank",rel:"noopener noreferrer"},Ds=s("\u0E17\u0E35\u0E48\u0E19\u0E35\u0E48"),Ns=s(" \u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E17\u0E35\u0E48\u0E08\u0E30\u0E43\u0E0A\u0E49 adapter \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A SSR \u0E2B\u0E23\u0E37\u0E2D SPA. \u0E2A\u0E48\u0E27\u0E19 UI package \u0E08\u0E30\u0E21\u0E35 "),zs=n("code",null,"",-1),Bs=s(" component \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E43\u0E2B\u0E49\u0E1C\u0E39\u0E49\u0E43\u0E0A\u0E49\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E40\u0E25\u0E37\u0E2D\u0E01\u0E41\u0E25\u0E30\u0E40\u0E0A\u0E37\u0E48\u0E2D\u0E21\u0E15\u0E48\u0E2D wallet \u0E44\u0E14\u0E49"),Ms=n("div",{class:"language-html ext-html line-numbers-mode"},[n("pre",{class:"language-html"},[n("code",null,[n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("script")]),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"},[n("span",{class:"token language-javascript"},[s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" walletStore "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@svelte-on-solana/wallet-adapter-core"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` WalletProvider`),n("span",{class:"token punctuation"},","),s(` @@ -554,7 +636,7 @@ verify_sign `),n("span",{class:"token operator"},"="),s(" VerifyKey"),n("span",{ successfully connected! {:else} `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("WalletMultiButton")]),s(),n("span",{class:"token punctuation"},"/>")]),s(` {/if} -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br")])],-1),As=n("div",{class:"language-html ext-html line-numbers-mode"},[n("pre",{class:"language-html"},[n("code",null,[n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("script")]),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"},[n("span",{class:"token language-javascript"},[s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br")])],-1),Es=n("div",{class:"language-html ext-html line-numbers-mode"},[n("pre",{class:"language-html"},[n("code",null,[n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("script")]),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"},[n("span",{class:"token language-javascript"},[s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" walletStore "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@svelte-on-solana/wallet-adapter-core"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" WalletMultiButton "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@svelte-on-solana/wallet-adapter-ui"'),n("span",{class:"token punctuation"},";"),s(` `)])]),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` @@ -563,4 +645,4 @@ successfully connected! {:else} successfully connected! {:else} `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("WalletMultiButton")]),s(),n("span",{class:"token punctuation"},"/>")]),s(` {/if} -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br")])],-1);function Cs(js,Ts){const e=p("SolanaCodeGroupItem"),o=p("SolanaCodeGroup"),c=p("ExternalLinkIcon");return i(),r(k,null,[m,d,y,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[g]),preview:a(()=>[h]),_:1}),t(e,{title:"Python"},{default:a(()=>[w]),preview:a(()=>[_]),_:1}),t(e,{title:"Rust"},{default:a(()=>[v]),preview:a(()=>[f]),_:1}),t(e,{title:"CLI"},{default:a(()=>[x]),preview:a(()=>[K]),_:1})]),_:1}),P,W,S,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[A]),preview:a(()=>[C]),_:1}),t(e,{title:"Python"},{default:a(()=>[j]),preview:a(()=>[T]),_:1}),t(e,{title:"Rust"},{default:a(()=>[B]),preview:a(()=>[R]),_:1}),t(e,{title:"CLI"},{default:a(()=>[M]),preview:a(()=>[D]),_:1})]),_:1}),N,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[z]),preview:a(()=>[E]),_:1}),t(e,{title:"Python"},{default:a(()=>[U]),preview:a(()=>[V]),_:1}),t(e,{title:"Rust"},{default:a(()=>[J]),preview:a(()=>[H]),_:1})]),_:1}),L,Y,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[q]),preview:a(()=>[F]),_:1}),t(e,{title:"Python"},{default:a(()=>[I]),preview:a(()=>[X]),_:1}),t(e,{title:"CLI"},{default:a(()=>[Z]),preview:a(()=>[$]),_:1})]),_:1}),G,Q,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[O]),preview:a(()=>[nn]),_:1}),t(e,{title:"Python",active:""},{default:a(()=>[sn]),preview:a(()=>[an]),_:1}),t(e,{title:"Rust",active:""},{default:a(()=>[tn]),preview:a(()=>[en]),_:1})]),_:1}),on,cn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[pn]),preview:a(()=>[ln]),_:1}),t(e,{title:"Python"},{default:a(()=>[un]),preview:a(()=>[rn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[kn]),preview:a(()=>[bn]),_:1})]),_:1}),mn,dn,yn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[gn]),preview:a(()=>[hn]),_:1}),t(e,{title:"Python"},{default:a(()=>[wn]),preview:a(()=>[_n]),_:1}),t(e,{title:"CLI"},{default:a(()=>[vn]),preview:a(()=>[fn]),_:1})]),_:1}),xn,Kn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Pn]),preview:a(()=>[Wn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[Sn]),preview:a(()=>[An]),_:1})]),_:1}),Cn,jn,Tn,Bn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Rn]),preview:a(()=>[Mn]),_:1}),t(e,{title:"Python"},{default:a(()=>[Dn]),preview:a(()=>[Nn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[zn]),preview:a(()=>[En]),_:1})]),_:1}),Un,Vn,n("p",null,[Jn,n("a",Hn,[Ln,t(c)]),Yn]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[qn]),preview:a(()=>[Fn]),_:1}),t(e,{title:"Python"},{default:a(()=>[In]),preview:a(()=>[Xn]),_:1})]),_:1}),Zn,n("p",null,[$n,n("a",Gn,[Qn,t(c)]),On]),ns,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[ss]),preview:a(()=>[as]),_:1})]),_:1}),ts,n("p",null,[n("a",es,[os,t(c)]),cs,ps,ls,us,is,n("a",rs,[ks,t(c)]),bs]),t(o,null,{default:a(()=>[t(e,{title:"Vue",active:""},{default:a(()=>[ms]),preview:a(()=>[ds]),_:1})]),_:1}),ys,n("p",null,[n("a",gs,[hs,t(c)]),ws,_s,vs,n("a",fs,[xs,t(c)]),Ks,Ps,Ws]),t(o,null,{default:a(()=>[t(e,{title:"Svelte",active:""},{default:a(()=>[Ss]),preview:a(()=>[As]),_:1})]),_:1})],64)}var Rs=u(b,[["render",Cs]]);export{Rs as default}; +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br")])],-1);function Js(Us,Hs){const e=p("SolanaCodeGroupItem"),o=p("SolanaCodeGroup"),c=p("ExternalLinkIcon");return i(),k(r,null,[m,d,y,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[g]),preview:a(()=>[h]),_:1}),t(e,{title:"Python"},{default:a(()=>[w]),preview:a(()=>[_]),_:1}),t(e,{title:"C++"},{default:a(()=>[v]),preview:a(()=>[f]),_:1}),t(e,{title:"Rust"},{default:a(()=>[x]),preview:a(()=>[K]),_:1}),t(e,{title:"CLI"},{default:a(()=>[P]),preview:a(()=>[W]),_:1})]),_:1}),S,C,A,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[j]),preview:a(()=>[T]),_:1}),t(e,{title:"Python"},{default:a(()=>[R]),preview:a(()=>[D]),_:1}),t(e,{title:"C++"},{default:a(()=>[N]),preview:a(()=>[z]),_:1}),t(e,{title:"Rust"},{default:a(()=>[B]),preview:a(()=>[M]),_:1}),t(e,{title:"CLI"},{default:a(()=>[E]),preview:a(()=>[J]),_:1})]),_:1}),U,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[H]),preview:a(()=>[V]),_:1}),t(e,{title:"Python"},{default:a(()=>[Y]),preview:a(()=>[L]),_:1}),t(e,{title:"Rust"},{default:a(()=>[q]),preview:a(()=>[F]),_:1})]),_:1}),I,X,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Z]),preview:a(()=>[$]),_:1}),t(e,{title:"Python"},{default:a(()=>[G]),preview:a(()=>[Q]),_:1}),t(e,{title:"C++"},{default:a(()=>[O]),preview:a(()=>[nn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[sn]),preview:a(()=>[an]),_:1})]),_:1}),tn,en,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[on]),preview:a(()=>[cn]),_:1}),t(e,{title:"Python",active:""},{default:a(()=>[pn]),preview:a(()=>[un]),_:1}),t(e,{title:"C++",active:""},{default:a(()=>[ln]),preview:a(()=>[kn]),_:1}),t(e,{title:"Rust",active:""},{default:a(()=>[rn]),preview:a(()=>[bn]),_:1})]),_:1}),mn,dn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[yn]),preview:a(()=>[gn]),_:1}),t(e,{title:"Python"},{default:a(()=>[hn]),preview:a(()=>[wn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[_n]),preview:a(()=>[vn]),_:1})]),_:1}),fn,xn,Kn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Pn]),preview:a(()=>[Wn]),_:1}),t(e,{title:"Python"},{default:a(()=>[Sn]),preview:a(()=>[Cn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[An]),preview:a(()=>[jn]),_:1})]),_:1}),Tn,Rn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Dn]),preview:a(()=>[Nn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[zn]),preview:a(()=>[Bn]),_:1})]),_:1}),Mn,En,Jn,Un,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Hn]),preview:a(()=>[Vn]),_:1}),t(e,{title:"Python"},{default:a(()=>[Yn]),preview:a(()=>[Ln]),_:1}),t(e,{title:"C++"},{default:a(()=>[qn]),preview:a(()=>[Fn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[In]),preview:a(()=>[Xn]),_:1})]),_:1}),Zn,$n,n("p",null,[Gn,n("a",Qn,[On,t(c)]),ns]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[ss]),preview:a(()=>[as]),_:1}),t(e,{title:"Python"},{default:a(()=>[ts]),preview:a(()=>[es]),_:1})]),_:1}),os,n("p",null,[cs,n("a",ps,[us,t(c)]),ls]),is,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[ks]),preview:a(()=>[rs]),_:1})]),_:1}),bs,n("p",null,[n("a",ms,[ds,t(c)]),ys,gs,hs,ws,_s,n("a",vs,[fs,t(c)]),xs]),t(o,null,{default:a(()=>[t(e,{title:"Vue",active:""},{default:a(()=>[Ks]),preview:a(()=>[Ps]),_:1})]),_:1}),Ws,n("p",null,[n("a",Ss,[Cs,t(c)]),As,js,Ts,n("a",Rs,[Ds,t(c)]),Ns,zs,Bs]),t(o,null,{default:a(()=>[t(e,{title:"Svelte",active:""},{default:a(()=>[Ms]),preview:a(()=>[Es]),_:1})]),_:1})],64)}var Ys=l(b,[["render",Js]]);export{Ys as default}; diff --git a/docs/.vuepress/dist/assets/keypairs-and-wallets.html.933c28c3.js b/docs/.vuepress/dist/assets/keypairs-and-wallets.html.249e3149.js similarity index 95% rename from docs/.vuepress/dist/assets/keypairs-and-wallets.html.933c28c3.js rename to docs/.vuepress/dist/assets/keypairs-and-wallets.html.249e3149.js index d541e9fe1..5bc3fdafd 100644 --- a/docs/.vuepress/dist/assets/keypairs-and-wallets.html.933c28c3.js +++ b/docs/.vuepress/dist/assets/keypairs-and-wallets.html.249e3149.js @@ -1 +1 @@ -const a={key:"v-644e73dc",path:"/id/references/keypairs-and-wallets.html",title:"Keypairs & Wallets",lang:"id-ID",frontmatter:{title:"Keypairs & Wallets",head:[["meta",{name:"title",content:"Buku Panduan Solana | Keypairs & Wallets"}],["meta",{name:"og:title",content:"Buku Panduan Solana | Keypairs & Wallets"}],["meta",{name:"description",content:"Belajar tentang Keypairs and Wallets, Signing dan Verifikasi Messages dan referensi lainnya di Buku Panduan Solana."}],["meta",{name:"og:description",content:"Belajar tentang Keypairs and Wallets, Signing dan Verifikasi Messages dan referensi lainnya di Buku Panduan Solana."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"Bagaimana cara membuat sebuah Keypair baru",slug:"bagaimana-cara-membuat-sebuah-keypair-baru",children:[]},{level:2,title:"Bagaimana cara me-restore sebuah Keypair dari sebuah secret",slug:"bagaimana-cara-me-restore-sebuah-keypair-dari-sebuah-secret",children:[]},{level:2,title:"Bagaimana cara menverifikasi sebuah Keypair",slug:"bagaimana-cara-menverifikasi-sebuah-keypair",children:[]},{level:2,title:"Bagaimana cara untuk check jika sebuah public key telah terhubung dengan sebuah private key",slug:"bagaimana-cara-untuk-check-jika-sebuah-public-key-telah-terhubung-dengan-sebuah-private-key",children:[]},{level:2,title:"Bagaimana cara membuat mnemonic phrase",slug:"bagaimana-cara-membuat-mnemonic-phrase",children:[]},{level:2,title:"Bagaimana cara restore sebuah Keypair dari sebuah mnemonic phrase",slug:"bagaimana-cara-restore-sebuah-keypair-dari-sebuah-mnemonic-phrase",children:[]},{level:2,title:"Bagaimana cara membuat sebuah vanity address",slug:"bagaimana-cara-membuat-sebuah-vanity-address",children:[]},{level:2,title:"Bagaimana cara untuk sign dan menverifikasi messages dalam wallet",slug:"bagaimana-cara-untuk-sign-dan-menverifikasi-messages-dalam-wallet",children:[]},{level:2,title:"Bagaimana cara mengkoneksi ke sebuah wallet",slug:"bagaimana-cara-mengkoneksi-ke-sebuah-wallet",children:[{level:3,title:"React",slug:"react",children:[]},{level:3,title:"Vue",slug:"vue",children:[]},{level:3,title:"Svelte",slug:"svelte",children:[]}]}],git:{updatedTime:1663636948e3},filePathRelative:"id/references/keypairs-and-wallets.md"};export{a as data}; +const a={key:"v-644e73dc",path:"/id/references/keypairs-and-wallets.html",title:"Keypairs & Wallets",lang:"id-ID",frontmatter:{title:"Keypairs & Wallets",head:[["meta",{name:"title",content:"Buku Panduan Solana | Keypairs & Wallets"}],["meta",{name:"og:title",content:"Buku Panduan Solana | Keypairs & Wallets"}],["meta",{name:"description",content:"Belajar tentang Keypairs and Wallets, Signing dan Verifikasi Messages dan referensi lainnya di Buku Panduan Solana."}],["meta",{name:"og:description",content:"Belajar tentang Keypairs and Wallets, Signing dan Verifikasi Messages dan referensi lainnya di Buku Panduan Solana."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"Bagaimana cara membuat sebuah Keypair baru",slug:"bagaimana-cara-membuat-sebuah-keypair-baru",children:[]},{level:2,title:"Bagaimana cara me-restore sebuah Keypair dari sebuah secret",slug:"bagaimana-cara-me-restore-sebuah-keypair-dari-sebuah-secret",children:[]},{level:2,title:"Bagaimana cara menverifikasi sebuah Keypair",slug:"bagaimana-cara-menverifikasi-sebuah-keypair",children:[]},{level:2,title:"Bagaimana cara untuk check jika sebuah public key telah terhubung dengan sebuah private key",slug:"bagaimana-cara-untuk-check-jika-sebuah-public-key-telah-terhubung-dengan-sebuah-private-key",children:[]},{level:2,title:"Bagaimana cara membuat mnemonic phrase",slug:"bagaimana-cara-membuat-mnemonic-phrase",children:[]},{level:2,title:"Bagaimana cara restore sebuah Keypair dari sebuah mnemonic phrase",slug:"bagaimana-cara-restore-sebuah-keypair-dari-sebuah-mnemonic-phrase",children:[]},{level:2,title:"Bagaimana cara membuat sebuah vanity address",slug:"bagaimana-cara-membuat-sebuah-vanity-address",children:[]},{level:2,title:"Bagaimana cara untuk sign dan menverifikasi messages dalam wallet",slug:"bagaimana-cara-untuk-sign-dan-menverifikasi-messages-dalam-wallet",children:[]},{level:2,title:"Bagaimana cara mengkoneksi ke sebuah wallet",slug:"bagaimana-cara-mengkoneksi-ke-sebuah-wallet",children:[{level:3,title:"React",slug:"react",children:[]},{level:3,title:"Vue",slug:"vue",children:[]},{level:3,title:"Svelte",slug:"svelte",children:[]}]}],git:{updatedTime:1676666728e3},filePathRelative:"id/references/keypairs-and-wallets.md"};export{a as data}; diff --git a/docs/.vuepress/dist/assets/keypairs-and-wallets.html.16cf5a1d.js b/docs/.vuepress/dist/assets/keypairs-and-wallets.html.25071617.js similarity index 74% rename from docs/.vuepress/dist/assets/keypairs-and-wallets.html.16cf5a1d.js rename to docs/.vuepress/dist/assets/keypairs-and-wallets.html.25071617.js index 75395b3c5..00534195e 100644 --- a/docs/.vuepress/dist/assets/keypairs-and-wallets.html.16cf5a1d.js +++ b/docs/.vuepress/dist/assets/keypairs-and-wallets.html.25071617.js @@ -1,24 +1,39 @@ -import{_ as u,r as p,o as i,c as r,b as t,w as a,a as n,F as k,d as s,e as l}from"./app.cfdf84e7.js";const b={},m=n("h1",{id:"paires-de-cles-keypair-et-portefeuilles",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#paires-de-cles-keypair-et-portefeuilles","aria-hidden":"true"},"#"),s(" Paires de Cl\xE9s (Keypair) et Portefeuilles")],-1),d=n("h2",{id:"comment-generer-une-nouvelle-paire-de-cles",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#comment-generer-une-nouvelle-paire-de-cles","aria-hidden":"true"},"#"),s(" Comment g\xE9n\xE9rer une nouvelle Paire de Cl\xE9s")],-1),y=n("p",null,"La plupart des actions que vous pouvez effectuer avec les diverses biblioth\xE8ques de Solana n\xE9cessitent une Paire de Cl\xE9s ou un Portefeuille. Si vous vous connectez \xE0 un portefeuille, vous n'avez pas \xE0 vous inqui\xE9ter. Cependant, si vous avez besoin d'une paire de cl\xE9s, vous devrez en g\xE9n\xE9rer une.",-1),g=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +import{_ as l,r as p,o as i,c as r,b as t,w as a,a as n,F as k,d as s,e as u}from"./app.2fbb9e96.js";const b={},m=n("h1",{id:"paires-de-cles-keypair-et-portefeuilles",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#paires-de-cles-keypair-et-portefeuilles","aria-hidden":"true"},"#"),s(" Paires de Cl\xE9s (Keypair) et Portefeuilles")],-1),d=n("h2",{id:"comment-generer-une-nouvelle-paire-de-cles",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#comment-generer-une-nouvelle-paire-de-cles","aria-hidden":"true"},"#"),s(" Comment g\xE9n\xE9rer une nouvelle Paire de Cl\xE9s")],-1),y=n("p",null,"La plupart des actions que vous pouvez effectuer avec les diverses biblioth\xE8ques de Solana n\xE9cessitent une Paire de Cl\xE9s ou un Portefeuille. Si vous vous connectez \xE0 un portefeuille, vous n'avez pas \xE0 vous inqui\xE9ter. Cependant, si vous avez besoin d'une paire de cl\xE9s, vous devrez en g\xE9n\xE9rer une.",-1),g=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"let"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br")])],-1),h=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),w=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),w=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),v=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),f=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("signature"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),_=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token comment"},"// clang++ generate_keypair.cpp -o generate_keypair -std=c++17 -lssl -lcrypto -lsodium"),s(` + +`),n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + `),n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"auto"),s(" public_key "),n("span",{class:"token operator"},"="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"public_key = "'),s(),n("span",{class:"token operator"},"<<"),s(" public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"return"),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br")])],-1),f=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),x=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("signature"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"let"),s(" wallet "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br")])],-1),_=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" wallet "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),x=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s(`$ solana-keygen new +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br")])],-1),K=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" wallet "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),P=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s(`$ solana-keygen new `),n("span",{class:"token comment"},"# pubkey: 9ZNTfG4NyQgxy2SWjSiQoUyBPEvXT2xo7fKc5hPYYJ7b"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),K=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen new -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),P=n("h2",{id:"comment-restaurer-une-paire-de-cles-a-partir-d-une-cle-privee",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#comment-restaurer-une-paire-de-cles-a-partir-d-une-cle-privee","aria-hidden":"true"},"#"),s(" Comment restaurer une Paire de cl\xE9s \xE0 partir d'une cl\xE9 priv\xE9e")],-1),S=n("p",null,"Si vous disposez d\xE9j\xE0 de votre cl\xE9 priv\xE9e, vous pouvez g\xE9n\xE9rer une Paire de Cl\xE9s \xE0 partir de celle-ci pour tester votre dApp.",-1),W=n("ol",null,[n("li",null,"\xC0 partir des Bytes")],-1),C=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),C=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen new +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),W=n("h2",{id:"comment-restaurer-une-paire-de-cles-a-partir-d-une-cle-privee",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#comment-restaurer-une-paire-de-cles-a-partir-d-une-cle-privee","aria-hidden":"true"},"#"),s(" Comment restaurer une Paire de cl\xE9s \xE0 partir d'une cl\xE9 priv\xE9e")],-1),S=n("p",null,"Si vous disposez d\xE9j\xE0 de votre cl\xE9 priv\xE9e, vous pouvez g\xE9n\xE9rer une Paire de Cl\xE9s \xE0 partir de celle-ci pour tester votre dApp.",-1),A=n("ol",null,[n("li",null,"\xC0 partir des Bytes")],-1),q=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSecretKey"),n("span",{class:"token punctuation"},"("),s(` @@ -30,7 +45,7 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br")])],-1),A=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSecretKey"),n("span",{class:"token punctuation"},"("),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br")])],-1),z=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSecretKey"),n("span",{class:"token punctuation"},"("),s(` Uint8Array`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"["),s(` `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"189"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"224"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"216"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"117"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"173"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"149"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"45"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"73"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"237"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"246"),n("span",{class:"token punctuation"},","),s(` @@ -38,7 +53,7 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),q=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),j=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair secret_key`),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"["),s(` `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(` @@ -47,17 +62,40 @@ secret_key`),n("span",{class:"token operator"},"="),s(),n("span",{class:"token p `),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"]"),s(` -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"bytes"),n("span",{class:"token punctuation"},"("),s("secret_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created Keypair with Public Key: {}"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),z=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("secret_key"),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"["),s(` +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_bytes"),n("span",{class:"token punctuation"},"("),s("secret_key"),n("span",{class:"token punctuation"},")"),s(` +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created Keypair with Public Key: {}"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),T=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("secret_key"),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"["),s(` `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"189"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"224"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"216"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"117"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"173"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"149"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"45"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"73"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"237"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"246"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"15"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"185"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"186"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"82"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"177"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"]"),s(` -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"bytes"),n("span",{class:"token punctuation"},"("),s("secret_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),j=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("signature"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"Signer"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_bytes"),n("span",{class:"token punctuation"},"("),s("secret_key"),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),D=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token comment"},"// clang++ keypair_from_seed.cpp -o keypair_from_seed -std=c++17 -lssl -lcrypto -lsodium"),s(` + +`),n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + `),n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token keyword"},"uint8_t"),s(" bytes"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},"]"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"{"),s(` + `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(` + `),n("span",{class:"token number"},"189"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"224"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"216"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"117"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"173"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"149"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"45"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"73"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"237"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"246"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"15"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"185"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"186"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"82"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"177"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(` + `),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(` + `),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` + `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` + Keypair key_pair `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"from_seed"),n("span",{class:"token punctuation"},"("),s("bytes"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"Created Keypair with Public Key: "'),s(),n("span",{class:"token operator"},"<<"),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br")])],-1),R=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token keyword"},"uint8_t"),s(" secret_key"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},"]"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"{"),s(` +`),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(` +`),n("span",{class:"token number"},"189"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"224"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"216"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"117"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"173"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"149"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"45"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"73"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"237"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"246"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"15"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"185"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"186"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"82"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"177"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(` +`),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(` +`),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` +`),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` +Keypair key_pair `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"from_seed"),n("span",{class:"token punctuation"},"("),s("secret_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),N=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("signature"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"Signer"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"let"),s(" secret_key"),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token punctuation"},"["),n("span",{class:"token keyword"},"u8"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token number"},"64"),n("span",{class:"token punctuation"},"]"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"["),s(` @@ -72,7 +110,7 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token macro property"},"println!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created keypair: {}"'),n("span",{class:"token punctuation"},","),s(" pubkey"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br")])],-1),T=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" secret_key"),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token punctuation"},"["),n("span",{class:"token keyword"},"u8"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token number"},"64"),n("span",{class:"token punctuation"},"]"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"["),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br")])],-1),B=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" secret_key"),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token punctuation"},"["),n("span",{class:"token keyword"},"u8"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token number"},"64"),n("span",{class:"token punctuation"},"]"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"["),s(` `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"189"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"224"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"216"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"117"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"173"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"149"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"45"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"73"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"237"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"246"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"15"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"185"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"186"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"82"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"177"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(` @@ -80,9 +118,9 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"let"),s(" wallet "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from_bytes"),n("span",{class:"token punctuation"},"("),n("span",{class:"token operator"},"&"),s("secret_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),B=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# input your secret into the Keypath listed under solana config get"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),D=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# input your secret into the Keypath listed under solana config get"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),R=n("ol",{start:"2"},[n("li",null,"\xC0 partir de la cha\xEEne de caract\xE8res Base58")],-1),M=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),E=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# input your secret into the Keypath listed under solana config get"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),M=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# input your secret into the Keypath listed under solana config get"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),L=n("ol",{start:"2"},[n("li",null,"\xC0 partir de la cha\xEEne de caract\xE8res Base58")],-1),J=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" bs58 "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"bs58"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -92,20 +130,19 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),N=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSecretKey"),n("span",{class:"token punctuation"},"("),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),U=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSecretKey"),n("span",{class:"token punctuation"},"("),s(` bs58`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"decode"),n("span",{class:"token punctuation"},"("),s(` `),n("span",{class:"token string"},'"5MaiiCavjCmn9Hs1o3eznqDEhRwxo7pXiAYez7keQUviUkauRiTMD8DrESdrNjN8zd9mTmVhRvBJeg5vhyvgrAhG"'),s(` `),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br")])],-1),E=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(` base58 -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br")])],-1),V=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair b58_string `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"5MaiiCavjCmn9Hs1o3eznqDEhRwxo7pXiAYez7keQUviUkauRiTMD8DrESdrNjN8zd9mTmVhRvBJeg5vhyvgrAhG"'),s(` -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),s("base58"),n("span",{class:"token punctuation"},"."),s("b58decode"),n("span",{class:"token punctuation"},"("),s("b58_string"),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created Keypair with Public Key: {}"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),L=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("b58_string "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"5MaiiCavjCmn9Hs1o3eznqDEhRwxo7pXiAYez7keQUviUkauRiTMD8DrESdrNjN8zd9mTmVhRvBJeg5vhyvgrAhG"'),s(` -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),s("base58"),n("span",{class:"token punctuation"},"."),s("b58decode"),n("span",{class:"token punctuation"},"("),s("b58_string"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),V=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("signature"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"Signer"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_string"),n("span",{class:"token punctuation"},"("),s("b58_string"),n("span",{class:"token punctuation"},")"),s(` +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created Keypair with Public Key: {}"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br")])],-1),H=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("b58_string "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"5MaiiCavjCmn9Hs1o3eznqDEhRwxo7pXiAYez7keQUviUkauRiTMD8DrESdrNjN8zd9mTmVhRvBJeg5vhyvgrAhG"'),s(` +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_string"),n("span",{class:"token punctuation"},"("),s("b58_string"),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),Y=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("signature"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"Signer"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"let"),s(" wallet "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from_base58_string"),n("span",{class:"token punctuation"},"("),s(` @@ -114,10 +151,10 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token keyword"},"let"),s(" pubkey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Signer"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token operator"},"&"),s("wallet"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token macro property"},"println!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created keypair: {}"'),n("span",{class:"token punctuation"},","),s(" pubkey"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br")])],-1),U=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" wallet "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from_base58_string"),n("span",{class:"token punctuation"},"("),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br")])],-1),F=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" wallet "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from_base58_string"),n("span",{class:"token punctuation"},"("),s(` `),n("span",{class:"token string"},'"5MaiiCavjCmn9Hs1o3eznqDEhRwxo7pXiAYez7keQUviUkauRiTMD8DrESdrNjN8zd9mTmVhRvBJeg5vhyvgrAhG"'),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),J=n("h2",{id:"comment-verifier-une-paire-de-cles",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#comment-verifier-une-paire-de-cles","aria-hidden":"true"},"#"),s(" Comment v\xE9rifier une Paire de Cl\xE9s")],-1),H=n("p",null,"Si on vous donne une paire de cl\xE9s, vous pouvez v\xE9rifier si, oui ou non, la cl\xE9 priv\xE9e correspond \xE0 la cl\xE9 publique donn\xE9e",-1),Y=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),I=n("h2",{id:"comment-verifier-une-paire-de-cles",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#comment-verifier-une-paire-de-cles","aria-hidden":"true"},"#"),s(" Comment v\xE9rifier une Paire de Cl\xE9s")],-1),X=n("p",null,"Si on vous donne une paire de cl\xE9s, vous pouvez v\xE9rifier si, oui ou non, la cl\xE9 priv\xE9e correspond \xE0 la cl\xE9 publique donn\xE9e",-1),Z=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"const"),s(" publicKey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),s(` @@ -134,7 +171,7 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"==="),s(" publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token comment"},"// true"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br")])],-1),I=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" publicKey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br")])],-1),$=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" publicKey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSecretKey"),n("span",{class:"token punctuation"},"("),s(` Uint8Array`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"["),s(` `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(` @@ -145,10 +182,10 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"==="),s(" publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token comment"},"// true"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),F=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("publickey "),n("span",{class:"token keyword"},"import"),s(` PublicKey +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),G=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("pubkey "),n("span",{class:"token keyword"},"import"),s(` Pubkey -public_key `),n("span",{class:"token operator"},"="),s(" PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p"'),n("span",{class:"token punctuation"},")"),s(` +public_key `),n("span",{class:"token operator"},"="),s(" Pubkey"),n("span",{class:"token punctuation"},"."),s("from_string"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p"'),n("span",{class:"token punctuation"},")"),s(` keys `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"["),s(` `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(` @@ -156,11 +193,11 @@ keys `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctu `),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"]"),s(` -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"bytes"),n("span",{class:"token punctuation"},"("),s("keys"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_bytes"),n("span",{class:"token punctuation"},"("),s("keys"),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},"."),s("to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=="),s(" public_key"),n("span",{class:"token punctuation"},"."),s("to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=="),s(" public_key"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"# True"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br")])],-1),X=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("public_key "),n("span",{class:"token operator"},"="),s(" PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p"'),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br")])],-1),Q=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("public_key "),n("span",{class:"token operator"},"="),s(" Pubkey"),n("span",{class:"token punctuation"},"."),s("from_string"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p"'),n("span",{class:"token punctuation"},")"),s(` keys `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"["),s(` `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(` @@ -168,13 +205,44 @@ keys `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctu `),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"]"),s(` -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"bytes"),n("span",{class:"token punctuation"},"("),s("keys"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_bytes"),n("span",{class:"token punctuation"},"("),s("keys"),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},"."),s("to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=="),s(" public_key"),n("span",{class:"token punctuation"},"."),s("to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=="),s(" public_key"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"# True"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br")])],-1),Z=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana-keygen verify "),n("span",{class:"token operator"},"<"),s("PUBKEY"),n("span",{class:"token operator"},">"),s(` prompt:// -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),$=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana-keygen verify "),n("span",{class:"token operator"},"<"),s("PUBKEY"),n("span",{class:"token operator"},">"),s(` prompt:// -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),G=n("h2",{id:"comment-verifier-si-une-cle-publique-a-une-cle-privee-associee",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#comment-verifier-si-une-cle-publique-a-une-cle-privee-associee","aria-hidden":"true"},"#"),s(" Comment v\xE9rifier si une cl\xE9 publique a une cl\xE9 priv\xE9e associ\xE9e")],-1),Q=n("p",null,"Dans certains cas particuliers (par exemple, une Adresse D\xE9riv\xE9e d'un Programme), les cl\xE9s publiques peuvent ne pas \xEAtre associ\xE9es \xE0 une cl\xE9 priv\xE9e. Vous pouvez le v\xE9rifier en regardant si la cl\xE9 publique se trouve sur la courbe ed25519. Seules les cl\xE9s publiques qui se trouvent sur la courbe peuvent \xEAtre contr\xF4l\xE9es par les utilisateurs poss\xE9dant un portefeuille.",-1),O=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br")])],-1),O=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token comment"},"// clang++ verify_keypair.cpp -o verify_keypair -std=c++17 -lssl -lcrypto -lsodium"),s(` + +`),n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + PublicKey public_key `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token keyword"},"uint8_t"),s(" bytes"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},"]"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"{"),s(` + `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(` + `),n("span",{class:"token number"},"189"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"224"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"216"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"117"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"173"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"149"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"45"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"73"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"237"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"246"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"15"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"185"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"186"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"82"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"177"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(` + `),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(` + `),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` + `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` + Keypair key_pair `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"from_seed"),n("span",{class:"token punctuation"},"("),s("bytes"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token punctuation"},"("),s("public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br")])],-1),nn=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[s("PublicKey public_key "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token keyword"},"uint8_t"),s(" bytes"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},"]"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"{"),s(` +`),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(` +`),n("span",{class:"token number"},"189"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"224"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"216"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"117"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"173"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"149"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"45"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"73"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"237"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"246"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"15"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"185"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"186"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"82"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"177"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(` +`),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(` +`),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` +`),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` +Keypair key_pair `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"from_seed"),n("span",{class:"token punctuation"},"("),s("bytes"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + +std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token punctuation"},"("),s("public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token comment"},"// 1"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br")])],-1),sn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana-keygen verify "),n("span",{class:"token operator"},"<"),s("PUBKEY"),n("span",{class:"token operator"},">"),s(` prompt:// +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),an=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana-keygen verify "),n("span",{class:"token operator"},"<"),s("PUBKEY"),n("span",{class:"token operator"},">"),s(` prompt:// +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),tn=n("h2",{id:"comment-verifier-si-une-cle-publique-a-une-cle-privee-associee",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#comment-verifier-si-une-cle-publique-a-une-cle-privee-associee","aria-hidden":"true"},"#"),s(" Comment v\xE9rifier si une cl\xE9 publique a une cl\xE9 priv\xE9e associ\xE9e")],-1),en=n("p",null,"Dans certains cas particuliers (par exemple, une Adresse D\xE9riv\xE9e d'un Programme), les cl\xE9s publiques peuvent ne pas \xEAtre associ\xE9es \xE0 une cl\xE9 priv\xE9e. Vous pouvez le v\xE9rifier en regardant si la cl\xE9 publique se trouve sur la courbe ed25519. Seules les cl\xE9s publiques qui se trouvent sur la courbe peuvent \xEAtre contr\xF4l\xE9es par les utilisateurs poss\xE9dant un portefeuille.",-1),on=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token keyword"},"function"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token comment"},"// Note that Keypair.generate() will always give a public key that is valid for users"),s(` @@ -188,23 +256,34 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token keyword"},"const"),s(" errorPubkey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"testPubkey"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token comment"},"// Is not a valid public key"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br")])],-1),nn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" key "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br")])],-1),cn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" key "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("PublicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"isOnCurve"),n("span",{class:"token punctuation"},"("),s("key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBytes"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),sn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("publickey "),n("span",{class:"token keyword"},"import"),s(` PublicKey -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("utils"),n("span",{class:"token punctuation"},"."),s("ed25519_base "),n("span",{class:"token keyword"},"import"),s(` is_on_curve +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),pn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("pubkey "),n("span",{class:"token keyword"},"import"),s(` Pubkey `),n("span",{class:"token comment"},"# Note that Keypair() will always give a public key that is valid for users"),s(` -key `),n("span",{class:"token operator"},"="),s(" PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},"'5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY'"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# Valid public key"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("is_on_curve"),n("span",{class:"token punctuation"},"("),s("key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# Lies on the ed25519 curve and is suitable for users"),s(` +key `),n("span",{class:"token operator"},"="),s(" Pubkey"),n("span",{class:"token punctuation"},"."),s("from_string"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},"'5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY'"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# Valid public key"),s(` +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("key"),n("span",{class:"token punctuation"},"."),s("is_on_curve"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# Lies on the ed25519 curve and is suitable for users"),s(` + +off_curve_address `),n("span",{class:"token operator"},"="),s(" Pubkey"),n("span",{class:"token punctuation"},"."),s("from_string"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},"'4BJXYkfvg37zEmBbsacZjeQDpTNx91KppxFJxRqrz48e'"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# Valid public key"),s(` +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("off_curve_address"),n("span",{class:"token punctuation"},"."),s("is_on_curve"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# Not on the ed25519 curve, therefore not suitable for users"),s(` + +error_pubkey `),n("span",{class:"token operator"},"="),s(" Pubkey"),n("span",{class:"token punctuation"},"."),s("from_string"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"testPubkey"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token comment"},"# Is not a valid public key"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),un=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("key "),n("span",{class:"token operator"},"="),s(" Pubkey"),n("span",{class:"token punctuation"},"."),s("from_string"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},"'5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY'"),n("span",{class:"token punctuation"},")"),s(` +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("key"),n("span",{class:"token punctuation"},"."),s("is_on_curve"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),ln=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},"")]),s(` +`),n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},"")]),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` +`),n("span",{class:"token punctuation"},"{"),s(` + `),n("span",{class:"token keyword"},"auto"),s(" public_key "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -off_curve_address `),n("span",{class:"token operator"},"="),s(" PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},"'4BJXYkfvg37zEmBbsacZjeQDpTNx91KppxFJxRqrz48e'"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# Valid public key"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("PublicKey"),n("span",{class:"token punctuation"},"."),s("_is_on_curve"),n("span",{class:"token punctuation"},"("),s("off_curve_address"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# Not on the ed25519 curve, therefore not suitable for users"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(" public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"is_on_curve"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` -error_pubkey `),n("span",{class:"token operator"},"="),s(" PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"testPubkey"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token comment"},"# Is not a valid public key"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br")])],-1),an=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("key "),n("span",{class:"token operator"},"="),s(" PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},"'5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY'"),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("is_on_curve"),n("span",{class:"token punctuation"},"("),s("key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),tn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("pubkey"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Pubkey"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token keyword"},"return"),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),rn=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token keyword"},"auto"),s(" public_key "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(" public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"is_on_curve"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),kn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("pubkey"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Pubkey"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("std"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token keyword"},"str"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token class-name"},"FromStr"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -217,21 +296,21 @@ error_pubkey `),n("span",{class:"token operator"},"="),s(" PublicKey"),n("span", `),n("span",{class:"token keyword"},"let"),s(" error_pubkey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Pubkey"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from_str"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"testPubkey"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token comment"},"// Is not a valid public key"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br")])],-1),en=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" pubkey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Pubkey"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from_str"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br")])],-1),bn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" pubkey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Pubkey"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from_str"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token macro property"},"println!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"{:?}"'),n("span",{class:"token punctuation"},","),s(" pubkey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"is_on_curve"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),on=n("h2",{id:"comment-generer-une-phrase-mnemonique",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#comment-generer-une-phrase-mnemonique","aria-hidden":"true"},"#"),s(" Comment g\xE9n\xE9rer une phrase mn\xE9monique")],-1),cn=n("p",null,"Si vous cr\xE9ez un portefeuille, vous devrez g\xE9n\xE9rer une phrase mn\xE9monique afin que l'utilisateur puisse l'enregistrer comme sauvegarde de secours.",-1),pn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" bip39 "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"bip39"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),mn=n("h2",{id:"comment-generer-une-phrase-mnemonique",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#comment-generer-une-phrase-mnemonique","aria-hidden":"true"},"#"),s(" Comment g\xE9n\xE9rer une phrase mn\xE9monique")],-1),dn=n("p",null,"Si vous cr\xE9ez un portefeuille, vous devrez g\xE9n\xE9rer une phrase mn\xE9monique afin que l'utilisateur puisse l'enregistrer comme sauvegarde de secours.",-1),yn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" bip39 "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"bip39"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" mnemonic "),n("span",{class:"token operator"},"="),s(" bip39"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generateMnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),ln=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" mnemonic "),n("span",{class:"token operator"},"="),s(" bip39"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generateMnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),un=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" mnemonic "),n("span",{class:"token keyword"},"import"),s(` Mnemonic +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),gn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" mnemonic "),n("span",{class:"token operator"},"="),s(" bip39"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generateMnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),hn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" mnemonic "),n("span",{class:"token keyword"},"import"),s(` Mnemonic mnemo `),n("span",{class:"token operator"},"="),s(" Mnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"english"'),n("span",{class:"token punctuation"},")"),s(` words `),n("span",{class:"token operator"},"="),s(" mnemo"),n("span",{class:"token punctuation"},"."),s("generate"),n("span",{class:"token punctuation"},"("),s("strength"),n("span",{class:"token operator"},"="),n("span",{class:"token number"},"256"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),rn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("mnemo "),n("span",{class:"token operator"},"="),s(" Mnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"english"'),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),wn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("mnemo "),n("span",{class:"token operator"},"="),s(" Mnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"english"'),n("span",{class:"token punctuation"},")"),s(` words `),n("span",{class:"token operator"},"="),s(" mnemo"),n("span",{class:"token punctuation"},"."),s("generate"),n("span",{class:"token punctuation"},"("),s("strength"),n("span",{class:"token operator"},"="),n("span",{class:"token number"},"256"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),kn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen new -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),bn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen new -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),mn=n("h2",{id:"comment-restaurer-une-paire-de-cles-a-partir-d-une-phrase-mnemonique",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#comment-restaurer-une-paire-de-cles-a-partir-d-une-phrase-mnemonique","aria-hidden":"true"},"#"),s(" Comment restaurer une paire de cl\xE9s \xE0 partir d'une phrase mn\xE9monique")],-1),dn=n("p",null,"De nombreuses extensions de portefeuilles utilisent des mn\xE9moniques pour repr\xE9senter leurs cl\xE9s priv\xE9es. Vous pouvez convertir le mn\xE9monique en Paires de Cl\xE9s pour des tests locaux.",-1),yn=n("ol",null,[n("li",null,"BIP39 - cr\xE9ation d'un portefeuille unique")],-1),gn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),vn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen new +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),_n=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen new +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),fn=n("h2",{id:"comment-restaurer-une-paire-de-cles-a-partir-d-une-phrase-mnemonique",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#comment-restaurer-une-paire-de-cles-a-partir-d-une-phrase-mnemonique","aria-hidden":"true"},"#"),s(" Comment restaurer une paire de cl\xE9s \xE0 partir d'une phrase mn\xE9monique")],-1),xn=n("p",null,"De nombreuses extensions de portefeuilles utilisent des mn\xE9moniques pour repr\xE9senter leurs cl\xE9s priv\xE9es. Vous pouvez convertir le mn\xE9monique en Paires de Cl\xE9s pour des tests locaux.",-1),Kn=n("ol",null,[n("li",null,"BIP39 - cr\xE9ation d'un portefeuille unique")],-1),Pn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" bip39 "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"bip39"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -241,23 +320,23 @@ words `),n("span",{class:"token operator"},"="),s(" mnemo"),n("span",{class:"tok `),n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSeed"),n("span",{class:"token punctuation"},"("),s("seed"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"slice"),n("span",{class:"token punctuation"},"("),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"32"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),n("span",{class:"token template-string"},[n("span",{class:"token template-punctuation string"},"`"),n("span",{class:"token interpolation"},[n("span",{class:"token interpolation-punctuation punctuation"},"${"),s("keypair"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token interpolation-punctuation punctuation"},"}")]),n("span",{class:"token template-punctuation string"},"`")]),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token comment"},"// 5ZWj7a1f8tWkjBESHKgrLmXshuXxqeY9SYcfbshpAqPG"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),hn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" mnemonic "),n("span",{class:"token operator"},"="),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),Cn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" mnemonic "),n("span",{class:"token operator"},"="),s(` `),n("span",{class:"token string"},'"pill tomorrow foster begin walnut borrow virtual kick shift mutual shoe scatter"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" seed "),n("span",{class:"token operator"},"="),s(" bip39"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"mnemonicToSeedSync"),n("span",{class:"token punctuation"},"("),s("mnemonic"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token string"},'""'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token comment"},"// (mnemonic, password)"),s(` `),n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSeed"),n("span",{class:"token punctuation"},"("),s("seed"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"slice"),n("span",{class:"token punctuation"},"("),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"32"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),wn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),Wn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair `),n("span",{class:"token keyword"},"from"),s(" mnemonic "),n("span",{class:"token keyword"},"import"),s(` Mnemonic mnemo `),n("span",{class:"token operator"},"="),s(" Mnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"english"'),n("span",{class:"token punctuation"},")"),s(` seed `),n("span",{class:"token operator"},"="),s(" mnemo"),n("span",{class:"token punctuation"},"."),s("to_seed"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"pill tomorrow foster begin walnut borrow virtual kick shift mutual shoe scatter"'),n("span",{class:"token punctuation"},")"),s(` -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),s("seed"),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created Keypair with Public Key: {}"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),vn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("mnemo "),n("span",{class:"token operator"},"="),s(" Mnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"english"'),n("span",{class:"token punctuation"},")"),s(` +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_bytes"),n("span",{class:"token punctuation"},"("),s("seed"),n("span",{class:"token punctuation"},")"),s(` +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created Keypair with Public Key: {}"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),Sn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("mnemo "),n("span",{class:"token operator"},"="),s(" Mnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"english"'),n("span",{class:"token punctuation"},")"),s(` seed `),n("span",{class:"token operator"},"="),s(" mnemo"),n("span",{class:"token punctuation"},"."),s("to_seed"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"pill tomorrow foster begin walnut borrow virtual kick shift mutual shoe scatter"'),n("span",{class:"token punctuation"},")"),s(` -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),s("seed"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),fn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen recover -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),_n=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen recover -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),xn=n("ol",{start:"2"},[n("li",null,"BIP44 (portefeuilles multiples, \xE9galement appel\xE9s HD wallets)")],-1),Kn=n("p",null,`Vous pouvez cr\xE9er plusieurs portefeuilles \xE0 partir d'une seule seed, \xE9galement appel\xE9s "Portefeuilles D\xE9terministes Hi\xE9rarchiques" ou portefeuilles HD :`,-1),Pn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_bytes"),n("span",{class:"token punctuation"},"("),s("seed"),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),An=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen recover +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),qn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen recover +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),zn=n("ol",{start:"2"},[n("li",null,"BIP44 (portefeuilles multiples, \xE9galement appel\xE9s HD wallets)")],-1),jn=n("p",null,`Vous pouvez cr\xE9er plusieurs portefeuilles \xE0 partir d'une seule seed, \xE9galement appel\xE9s "Portefeuilles D\xE9terministes Hi\xE9rarchiques" ou portefeuilles HD :`,-1),Tn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" HDKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"micro-ed25519-hdkey"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" bip39 "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"bip39"'),n("span",{class:"token punctuation"},";"),s(` @@ -272,7 +351,7 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),n("span",{class:"token template-string"},[n("span",{class:"token template-punctuation string"},"`"),n("span",{class:"token interpolation"},[n("span",{class:"token interpolation-punctuation punctuation"},"${"),s("path"),n("span",{class:"token interpolation-punctuation punctuation"},"}")]),n("span",{class:"token string"}," => "),n("span",{class:"token interpolation"},[n("span",{class:"token interpolation-punctuation punctuation"},"${"),s("keypair"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token interpolation-punctuation punctuation"},"}")]),n("span",{class:"token template-punctuation string"},"`")]),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br")])],-1),Sn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" mnemonic "),n("span",{class:"token operator"},"="),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br")])],-1),Dn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" mnemonic "),n("span",{class:"token operator"},"="),s(` `),n("span",{class:"token string"},'"neither lonely flavor argue grass remind eye tag avocado spot unusual intact"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" seed "),n("span",{class:"token operator"},"="),s(" bip39"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"mnemonicToSeedSync"),n("span",{class:"token punctuation"},"("),s("mnemonic"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token string"},'""'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token comment"},"// (mnemonic, password)"),s(` `),n("span",{class:"token keyword"},"for"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"let"),s(" i "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(" i "),n("span",{class:"token operator"},"<"),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},";"),s(" i"),n("span",{class:"token operator"},"++"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -280,9 +359,9 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSeed"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"derivePath"),n("span",{class:"token punctuation"},"("),s("path"),n("span",{class:"token punctuation"},","),s(" seed"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toString"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"hex"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),s("key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),n("span",{class:"token template-string"},[n("span",{class:"token template-punctuation string"},"`"),n("span",{class:"token interpolation"},[n("span",{class:"token interpolation-punctuation punctuation"},"${"),s("path"),n("span",{class:"token interpolation-punctuation punctuation"},"}")]),n("span",{class:"token string"}," => "),n("span",{class:"token interpolation"},[n("span",{class:"token interpolation-punctuation punctuation"},"${"),s("keypair"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token interpolation-punctuation punctuation"},"}")]),n("span",{class:"token template-punctuation string"},"`")]),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),Wn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana-keygen recover "),n("span",{class:"token string"},"'prompt:?key=0/0'"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Cn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana-keygen recover "),n("span",{class:"token string"},"'prompt:?key=0/0'"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),An=n("h2",{id:"comment-generer-une-adresse-personnalisee",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#comment-generer-une-adresse-personnalisee","aria-hidden":"true"},"#"),s(" Comment g\xE9n\xE9rer une adresse personnalis\xE9e")],-1),qn=n("p",null,'Les adresses personnalis\xE9es (vanity publickeys) sont des cl\xE9s qui commencent par des caract\xE8res sp\xE9cifiques. Par exemple, une personne peut vouloir que sa cl\xE9 publique commence par "elv1s", ou peut-\xEAtre m\xEAme "cook". Elles peuvent aider les autres personnes \xE0 se rappeler \xE0 qui appartient la cl\xE9, ce qui la rend plus facilement identifiable.',-1),zn=n("p",null,"Remarque: Plus il y a de caract\xE8res sp\xE9cifiques dans votre adresse personnalis\xE9e, plus la proc\xE9dure sera longue.",-1),jn=n("div",{class:"custom-container warning"},[n("p",{class:"custom-container-title"},"WARNING"),n("p",null,"Vous devez utiliser le CLI pour cette t\xE2che. Les exemples Python et TypeScript sont donn\xE9s \xE0 titre d'illustration et sont beaucoup plus lents que le CLI.")],-1),Tn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),Rn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana-keygen recover "),n("span",{class:"token string"},"'prompt:?key=0/0'"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Nn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana-keygen recover "),n("span",{class:"token string"},"'prompt:?key=0/0'"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Bn=n("h2",{id:"comment-generer-une-adresse-personnalisee",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#comment-generer-une-adresse-personnalisee","aria-hidden":"true"},"#"),s(" Comment g\xE9n\xE9rer une adresse personnalis\xE9e")],-1),En=n("p",null,'Les adresses personnalis\xE9es (vanity publickeys) sont des cl\xE9s qui commencent par des caract\xE8res sp\xE9cifiques. Par exemple, une personne peut vouloir que sa cl\xE9 publique commence par "elv1s", ou peut-\xEAtre m\xEAme "cook". Elles peuvent aider les autres personnes \xE0 se rappeler \xE0 qui appartient la cl\xE9, ce qui la rend plus facilement identifiable.',-1),Mn=n("p",null,"Remarque: Plus il y a de caract\xE8res sp\xE9cifiques dans votre adresse personnalis\xE9e, plus la proc\xE9dure sera longue.",-1),Ln=n("div",{class:"custom-container warning"},[n("p",{class:"custom-container-title"},"WARNING"),n("p",null,"Vous devez utiliser le CLI pour cette t\xE2che. Les exemples Python et TypeScript sont donn\xE9s \xE0 titre d'illustration et sont beaucoup plus lents que le CLI.")],-1),Jn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"let"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` @@ -290,23 +369,42 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),Bn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),Un=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"while"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token operator"},"!"),s("keypair"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"startsWith"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"elv1s"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),Dn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),Vn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"while"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"str"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},":"),n("span",{class:"token number"},"5"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token operator"},"!="),n("span",{class:"token string"},'"elv1s"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},":"),s(` +`),n("span",{class:"token keyword"},"while"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"str"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},":"),n("span",{class:"token number"},"5"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token operator"},"!="),n("span",{class:"token string"},'"elv1s"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},":"),s(` keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created Keypair with Public Key: {}"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),Rn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"while"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"str"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},":"),n("span",{class:"token number"},"5"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token operator"},"!="),n("span",{class:"token string"},'"elv1s"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},":"),s(` +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created Keypair with Public Key: {}"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),Hn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` +`),n("span",{class:"token keyword"},"while"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"str"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},":"),n("span",{class:"token number"},"5"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token operator"},"!="),n("span",{class:"token string"},'"elv1s"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},":"),s(` keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),Mn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen grind --starts-with e1v1s:1 -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Nn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen grind --starts-with e1v1s:1 -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),En=n("h2",{id:"comment-signer-et-verifier-des-messages-avec-les-portefeuilles",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#comment-signer-et-verifier-des-messages-avec-les-portefeuilles","aria-hidden":"true"},"#"),s(" Comment signer et v\xE9rifier des messages avec les portefeuilles")],-1),Ln=n("p",null,"La fonction premi\xE8re d'une paire de cl\xE9s est de signer des messages et de permettre la v\xE9rification de la signature. La v\xE9rification d'une signature permet au destinataire d'\xEAtre s\xFBr que les donn\xE9es ont \xE9t\xE9 sign\xE9es par le propri\xE9taire d'une cl\xE9 priv\xE9e sp\xE9cifique.",-1),Vn=s("Pour ce faire, nous allons importer la biblioth\xE8que cryptographique "),Un={href:"https://www.npmjs.com/package/tweetnacl",target:"_blank",rel:"noopener noreferrer"},Jn=s("TweetNaCl"),Hn=s("."),Yn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),Yn=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token comment"},"// clang++ vanity_keypair.cpp -o vanity_keypair -std=c++17 -lssl -lcrypto -lsodium"),s(` + +`),n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + `),n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"while"),s(),n("span",{class:"token punctuation"},"("),s("key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"substr"),n("span",{class:"token punctuation"},"("),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"5"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"!="),s(),n("span",{class:"token string"},'"elv1s"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + key_pair `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token punctuation"},"}"),s(` + + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"Created Keypair with Public Key: "'),s(),n("span",{class:"token operator"},"<<"),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br")])],-1),Fn=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token keyword"},"while"),s(),n("span",{class:"token punctuation"},"("),s("key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"substr"),n("span",{class:"token punctuation"},"("),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"5"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"!="),s(),n("span",{class:"token string"},'"elv1s"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + key_pair `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),In=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen grind --starts-with e1v1s:1 +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Xn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen grind --starts-with e1v1s:1 +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Zn=n("h2",{id:"comment-signer-et-verifier-des-messages-avec-les-portefeuilles",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#comment-signer-et-verifier-des-messages-avec-les-portefeuilles","aria-hidden":"true"},"#"),s(" Comment signer et v\xE9rifier des messages avec les portefeuilles")],-1),$n=n("p",null,"La fonction premi\xE8re d'une paire de cl\xE9s est de signer des messages et de permettre la v\xE9rification de la signature. La v\xE9rification d'une signature permet au destinataire d'\xEAtre s\xFBr que les donn\xE9es ont \xE9t\xE9 sign\xE9es par le propri\xE9taire d'une cl\xE9 priv\xE9e sp\xE9cifique.",-1),Gn=s("Pour ce faire, nous allons importer la biblioth\xE8que cryptographique "),Qn={href:"https://www.npmjs.com/package/tweetnacl",target:"_blank",rel:"noopener noreferrer"},On=s("TweetNaCl"),ns=s("."),ss=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(" nacl "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"tweetnacl"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" decodeUTF8 "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"tweetnacl-util"'),n("span",{class:"token punctuation"},";"),s(` @@ -332,7 +430,7 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("result"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br")])],-1),In=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" message "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"The quick brown fox jumps over the lazy dog"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br")])],-1),as=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" message "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"The quick brown fox jumps over the lazy dog"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" messageBytes "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"decodeUTF8"),n("span",{class:"token punctuation"},"("),s("message"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" signature "),n("span",{class:"token operator"},"="),s(" nacl"),n("span",{class:"token punctuation"},"."),s("sign"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"detached"),n("span",{class:"token punctuation"},"("),s("messageBytes"),n("span",{class:"token punctuation"},","),s(" keypair"),n("span",{class:"token punctuation"},"."),s("secretKey"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` @@ -343,42 +441,26 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("result"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),Fn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" nacl"),n("span",{class:"token punctuation"},"."),s("signing "),n("span",{class:"token keyword"},"import"),s(` VerifyKey -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),ts=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair secret_key `),n("span",{class:"token operator"},"="),s(" "),n("span",{class:"token punctuation"},"["),s(` `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"189"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"224"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"216"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"117"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"173"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"149"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"45"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"73"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"237"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"246"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"15"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"185"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"186"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"82"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"177"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` - `),n("span",{class:"token punctuation"},"]"),s(` - -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"bytes"),n("span",{class:"token punctuation"},"("),s("secret_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -pubkey_bytes `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token builtin"},"bytes"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),s(` -message `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"The quick brown fox jumps over the lazy dog"'),s(` -message_bytes `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token builtin"},"bytes"),n("span",{class:"token punctuation"},"("),s("message"),n("span",{class:"token punctuation"},","),n("span",{class:"token string"},"'utf8'"),n("span",{class:"token punctuation"},")"),s(` -signed_message `),n("span",{class:"token operator"},"="),s(" keypair"),n("span",{class:"token punctuation"},"."),s("sign"),n("span",{class:"token punctuation"},"("),s("message_bytes"),n("span",{class:"token punctuation"},")"),s(` - -verify_sign `),n("span",{class:"token operator"},"="),s(" VerifyKey"),n("span",{class:"token punctuation"},"("),s(` - pubkey_bytes -`),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),s("verify"),n("span",{class:"token punctuation"},"("),s(` - smessage`),n("span",{class:"token operator"},"="),s("message_bytes"),n("span",{class:"token punctuation"},","),s(` - signature`),n("span",{class:"token operator"},"="),s("signed_message"),n("span",{class:"token punctuation"},"."),s(`signature -`),n("span",{class:"token punctuation"},")"),s(` - -`),n("span",{class:"token comment"},"#Returns original message if the signature has not been tampered with"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("verify_sign"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br")])],-1),Xn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("message "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"The quick brown fox jumps over the lazy dog"'),s(` -message_bytes `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token builtin"},"bytes"),n("span",{class:"token punctuation"},"("),s("message"),n("span",{class:"token punctuation"},","),n("span",{class:"token string"},"'utf8'"),n("span",{class:"token punctuation"},")"),s(` -signed_message `),n("span",{class:"token operator"},"="),s(" keypair"),n("span",{class:"token punctuation"},"."),s("sign"),n("span",{class:"token punctuation"},"("),s("message_bytes"),n("span",{class:"token punctuation"},")"),s(` - -verify_sign `),n("span",{class:"token operator"},"="),s(" VerifyKey"),n("span",{class:"token punctuation"},"("),s(` - pubkey_bytes -`),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),s("verify"),n("span",{class:"token punctuation"},"("),s(` - smessage`),n("span",{class:"token operator"},"="),s("message_bytes"),n("span",{class:"token punctuation"},","),s(` - signature`),n("span",{class:"token operator"},"="),s("signed_message"),n("span",{class:"token punctuation"},"."),s(`signature -`),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),Zn=n("h2",{id:"comment-se-connecter-a-un-portefeuille",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#comment-se-connecter-a-un-portefeuille","aria-hidden":"true"},"#"),s(" Comment se connecter \xE0 un portefeuille")],-1),$n=s("Les biblioth\xE8ques "),Gn={href:"https://github.com/solana-labs/wallet-adapter",target:"_blank",rel:"noopener noreferrer"},Qn=s("wallet-adapter"),On=s(" de Solana permettent de g\xE9rer facilement les connexions de portefeuilles c\xF4t\xE9 client."),ns=l(`

    React

    Ex\xE9cutez la commande suivante pour installer les d\xE9pendances requises :

    yarn add @solana/wallet-adapter-react @solana/wallet-adapter-react-ui @solana/wallet-adapter-base @solana/wallet-adapter-wallets
    -

    Les biblioth\xE8ques wallet-adapter de React nous permettent de conserver et d'acc\xE9der aux \xE9tats de connexion du portefeuille par le biais de hooks et de fournisseurs de Contexte, \xE0 savoir, useWallet, WalletProvider, useConnection, et ConnectionProvider. L'Application React doit \xEAtre encapsul\xE9e avec WalletProvider et ConnectionProvider.

    De plus, nous pouvons inviter les utilisateurs \xE0 se connecter en utilisant useWalletModal pour activer la visibilit\xE9 de la modale de connexion et en enveloppant l'Application avec WalletModalProvider de @solana/wallet-adapter-react-ui. La modale de connexion g\xE9rera ce flux de connexion pour nous, de sorte que nous pouvons simplement surveiller la connexion d'un portefeuille. Nous savons qu'un portefeuille est connect\xE9 lorsque la r\xE9ponse useWallet a une propri\xE9t\xE9 wallet non nulle. Inversement, si cette propri\xE9t\xE9 est nulle, nous savons que le portefeuille est d\xE9connect\xE9.

    `,5),ss=n("div",{class:"language-tsx ext-tsx line-numbers-mode"},[n("pre",{class:"language-tsx"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(" React"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token punctuation"},"{"),s(" useMemo"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token constant"},"FC"),n("span",{class:"token punctuation"},","),s(" PropsWithChildren "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"react"'),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token punctuation"},"]"),s(` +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_bytes"),n("span",{class:"token punctuation"},"("),s("secret_key"),n("span",{class:"token punctuation"},")"),s(` +message `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'b"The quick brown fox jumps over the lazy dog"'),s(` +signature `),n("span",{class:"token operator"},"="),s(" keypair"),n("span",{class:"token punctuation"},"."),s("sign_message"),n("span",{class:"token punctuation"},"("),s("message"),n("span",{class:"token punctuation"},")"),s(` +verify_sign `),n("span",{class:"token operator"},"="),s(" signature"),n("span",{class:"token punctuation"},"."),s("verify"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(" message"),n("span",{class:"token punctuation"},")"),s(` + +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("verify_sign"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# bool"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br")])],-1),es=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("message "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'b"The quick brown fox jumps over the lazy dog"'),s(` +signature `),n("span",{class:"token operator"},"="),s(" keypair"),n("span",{class:"token punctuation"},"."),s("sign_message"),n("span",{class:"token punctuation"},"("),s("message"),n("span",{class:"token punctuation"},")"),s(` +verify_sign `),n("span",{class:"token operator"},"="),s(" signature"),n("span",{class:"token punctuation"},"."),s("verify"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(" message"),n("span",{class:"token punctuation"},")"),s(` + +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("verify_sign"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# bool"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br")])],-1),os=n("h2",{id:"comment-se-connecter-a-un-portefeuille",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#comment-se-connecter-a-un-portefeuille","aria-hidden":"true"},"#"),s(" Comment se connecter \xE0 un portefeuille")],-1),cs=s("Les biblioth\xE8ques "),ps={href:"https://github.com/solana-labs/wallet-adapter",target:"_blank",rel:"noopener noreferrer"},us=s("wallet-adapter"),ls=s(" de Solana permettent de g\xE9rer facilement les connexions de portefeuilles c\xF4t\xE9 client."),is=u(`

    React

    Ex\xE9cutez la commande suivante pour installer les d\xE9pendances requises :

    yarn add @solana/wallet-adapter-react @solana/wallet-adapter-react-ui @solana/wallet-adapter-base @solana/wallet-adapter-wallets
    +

    Les biblioth\xE8ques wallet-adapter de React nous permettent de conserver et d'acc\xE9der aux \xE9tats de connexion du portefeuille par le biais de hooks et de fournisseurs de Contexte, \xE0 savoir, useWallet, WalletProvider, useConnection, et ConnectionProvider. L'Application React doit \xEAtre encapsul\xE9e avec WalletProvider et ConnectionProvider.

    De plus, nous pouvons inviter les utilisateurs \xE0 se connecter en utilisant useWalletModal pour activer la visibilit\xE9 de la modale de connexion et en enveloppant l'Application avec WalletModalProvider de @solana/wallet-adapter-react-ui. La modale de connexion g\xE9rera ce flux de connexion pour nous, de sorte que nous pouvons simplement surveiller la connexion d'un portefeuille. Nous savons qu'un portefeuille est connect\xE9 lorsque la r\xE9ponse useWallet a une propri\xE9t\xE9 wallet non nulle. Inversement, si cette propri\xE9t\xE9 est nulle, nous savons que le portefeuille est d\xE9connect\xE9.

    `,5),rs=n("div",{class:"language-tsx ext-tsx line-numbers-mode"},[n("pre",{class:"language-tsx"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(" React"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token punctuation"},"{"),s(" useMemo"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token constant"},"FC"),n("span",{class:"token punctuation"},","),s(" PropsWithChildren "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"react"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` ConnectionProvider`),n("span",{class:"token punctuation"},","),s(` WalletProvider`),n("span",{class:"token punctuation"},","),s(` @@ -460,7 +542,7 @@ verify_sign `),n("span",{class:"token operator"},"="),s(" VerifyKey"),n("span",{ `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br"),n("span",{class:"line-number"},"69"),n("br"),n("span",{class:"line-number"},"70"),n("br"),n("span",{class:"line-number"},"71"),n("br"),n("span",{class:"line-number"},"72"),n("br"),n("span",{class:"line-number"},"73"),n("br"),n("span",{class:"line-number"},"74"),n("br"),n("span",{class:"line-number"},"75"),n("br"),n("span",{class:"line-number"},"76"),n("br"),n("span",{class:"line-number"},"77"),n("br"),n("span",{class:"line-number"},"78"),n("br"),n("span",{class:"line-number"},"79"),n("br"),n("span",{class:"line-number"},"80"),n("br"),n("span",{class:"line-number"},"81"),n("br"),n("span",{class:"line-number"},"82"),n("br")])],-1),as=n("div",{class:"language-tsx ext-tsx line-numbers-mode"},[n("pre",{class:"language-tsx"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token punctuation"},"{"),s(" wallet "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"useWallet"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br"),n("span",{class:"line-number"},"69"),n("br"),n("span",{class:"line-number"},"70"),n("br"),n("span",{class:"line-number"},"71"),n("br"),n("span",{class:"line-number"},"72"),n("br"),n("span",{class:"line-number"},"73"),n("br"),n("span",{class:"line-number"},"74"),n("br"),n("span",{class:"line-number"},"75"),n("br"),n("span",{class:"line-number"},"76"),n("br"),n("span",{class:"line-number"},"77"),n("br"),n("span",{class:"line-number"},"78"),n("br"),n("span",{class:"line-number"},"79"),n("br"),n("span",{class:"line-number"},"80"),n("br"),n("span",{class:"line-number"},"81"),n("br"),n("span",{class:"line-number"},"82"),n("br")])],-1),ks=n("div",{class:"language-tsx ext-tsx line-numbers-mode"},[n("pre",{class:"language-tsx"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token punctuation"},"{"),s(" wallet "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"useWallet"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token punctuation"},"{"),s(" setVisible "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"useWalletModal"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token function-variable function"},"onRequestConnectWallet"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -479,8 +561,8 @@ verify_sign `),n("span",{class:"token operator"},"="),s(" VerifyKey"),n("span",{ `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("p")]),n("span",{class:"token punctuation"},">")]),n("span",{class:"token punctuation"},"{"),s("wallet"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),n("span",{class:"token plain-text"},` `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br")])],-1),ts=l(`

    Vue

    Ex\xE9cutez la commande suivante pour installer les d\xE9pendances requises :

    npm install solana-wallets-vue @solana/wallet-adapter-wallets
    -
    `,3),es=s("Le plugin "),os={href:"https://github.com/lorisleiva/solana-wallets-vue",target:"_blank",rel:"noopener noreferrer"},cs=s("Solana Wallets Vue"),ps=s(" nous permet d'initialiser une liste de portefeuilles et de cr\xE9er une nouvelle propri\xE9t\xE9 globale "),ls=n("code",null,"$wallet",-1),us=s(" \xE0 laquelle on peut acc\xE9der depuis n'importe quel composant. Toutes les propri\xE9t\xE9s et m\xE9thodes que vous pouvez obtenir gr\xE2ce \xE0 "),is=n("code",null,"useWallet()",-1),rs=s(" sont affich\xE9es "),ks={href:"https://github.com/lorisleiva/solana-wallets-vue#usewallet-references",target:"_blank",rel:"noopener noreferrer"},bs=s("ici"),ms=s(". Nous importons et rendons \xE9galement le composant WalletMultiButton pour permettre aux utilisateurs de s\xE9lectionner un portefeuille et de s'y connecter."),ds=n("div",{class:"language-vue ext-vue line-numbers-mode"},[n("pre",{class:"language-vue"},[n("code",null,[n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("script")]),s(),n("span",{class:"token attr-name"},"setup"),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"},[n("span",{class:"token language-javascript"},[s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br")])],-1),bs=u(`

    Vue

    Ex\xE9cutez la commande suivante pour installer les d\xE9pendances requises :

    npm install solana-wallets-vue @solana/wallet-adapter-wallets
    +
    `,3),ms=s("Le plugin "),ds={href:"https://github.com/lorisleiva/solana-wallets-vue",target:"_blank",rel:"noopener noreferrer"},ys=s("Solana Wallets Vue"),gs=s(" nous permet d'initialiser une liste de portefeuilles et de cr\xE9er une nouvelle propri\xE9t\xE9 globale "),hs=n("code",null,"$wallet",-1),ws=s(" \xE0 laquelle on peut acc\xE9der depuis n'importe quel composant. Toutes les propri\xE9t\xE9s et m\xE9thodes que vous pouvez obtenir gr\xE2ce \xE0 "),vs=n("code",null,"useWallet()",-1),_s=s(" sont affich\xE9es "),fs={href:"https://github.com/lorisleiva/solana-wallets-vue#usewallet-references",target:"_blank",rel:"noopener noreferrer"},xs=s("ici"),Ks=s(". Nous importons et rendons \xE9galement le composant WalletMultiButton pour permettre aux utilisateurs de s\xE9lectionner un portefeuille et de s'y connecter."),Ps=n("div",{class:"language-vue ext-vue line-numbers-mode"},[n("pre",{class:"language-vue"},[n("code",null,[n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("script")]),s(),n("span",{class:"token attr-name"},"setup"),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"},[n("span",{class:"token language-javascript"},[s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" WalletMultiButton "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"solana-wallets-vue"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` LedgerWalletAdapter`),n("span",{class:"token punctuation"},","),s(` @@ -513,15 +595,15 @@ verify_sign `),n("span",{class:"token operator"},"="),s(" VerifyKey"),n("span",{ `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br")])],-1),ys=n("div",{class:"language-vue ext-vue line-numbers-mode"},[n("pre",{class:"language-vue"},[n("code",null,[n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("script")]),s(),n("span",{class:"token attr-name"},"setup"),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"},[n("span",{class:"token language-javascript"},[s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br")])],-1),Cs=n("div",{class:"language-vue ext-vue line-numbers-mode"},[n("pre",{class:"language-vue"},[n("code",null,[n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("script")]),s(),n("span",{class:"token attr-name"},"setup"),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"},[n("span",{class:"token language-javascript"},[s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" WalletMultiButton "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"solana-wallets-vue"'),n("span",{class:"token punctuation"},";"),s(` `)])]),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("template")]),n("span",{class:"token punctuation"},">")]),s(` `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("wallet-multi-button")]),n("span",{class:"token punctuation"},">")]),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),gs=l(`

    Svelte

    Ex\xE9cutez la commande suivante pour installer les d\xE9pendances requises :

    npm install @svelte-on-solana/wallet-adapter-core @svelte-on-solana/wallet-adapter-ui @solana/wallet-adapter-base @solana/wallet-adapter-wallets @solana/web3.js
    -
    `,3),hs=s("Le package "),ws={href:"https://github.com/svelte-on-solana/wallet-adapter",target:"_blank",rel:"noopener noreferrer"},vs=s("Svelte Wallet Adapter"),fs=s(" package permet d'ajouter un Store Svelte ("),_s=n("code",null,"$walletStore",-1),xs=s(") accessible parmi tous les fichiers JS, TS et/ou Svelte \xE0 l'int\xE9rieur d'un projet r\xE9alis\xE9 avec Svelte Template ou SvelteKit. En utilisant le r\xE9pertoire de r\xE9f\xE9rence "),Ks={href:"https://github.com/svelte-on-solana/wallet-adapter/blob/master/packages/core/README.md/",target:"_blank",rel:"noopener noreferrer"},Ps=s("ici"),Ss=s(" vous pouvez utiliser l'adaptateur pour SSR ou SPA. Le package UI contient un composant "),Ws=n("code",null,"",-1),Cs=s(" pour permettre aux utilisateurs de s\xE9lectionner un portefeuille et de s'y connecter."),As=n("div",{class:"language-html ext-html line-numbers-mode"},[n("pre",{class:"language-html"},[n("code",null,[n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("script")]),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"},[n("span",{class:"token language-javascript"},[s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),Ws=u(`

    Svelte

    Ex\xE9cutez la commande suivante pour installer les d\xE9pendances requises :

    npm install @svelte-on-solana/wallet-adapter-core @svelte-on-solana/wallet-adapter-ui @solana/wallet-adapter-base @solana/wallet-adapter-wallets @solana/web3.js
    +
    `,3),Ss=s("Le package "),As={href:"https://github.com/svelte-on-solana/wallet-adapter",target:"_blank",rel:"noopener noreferrer"},qs=s("Svelte Wallet Adapter"),zs=s(" package permet d'ajouter un Store Svelte ("),js=n("code",null,"$walletStore",-1),Ts=s(") accessible parmi tous les fichiers JS, TS et/ou Svelte \xE0 l'int\xE9rieur d'un projet r\xE9alis\xE9 avec Svelte Template ou SvelteKit. En utilisant le r\xE9pertoire de r\xE9f\xE9rence "),Ds={href:"https://github.com/svelte-on-solana/wallet-adapter/blob/master/packages/core/README.md/",target:"_blank",rel:"noopener noreferrer"},Rs=s("ici"),Ns=s(" vous pouvez utiliser l'adaptateur pour SSR ou SPA. Le package UI contient un composant "),Bs=n("code",null,"",-1),Es=s(" pour permettre aux utilisateurs de s\xE9lectionner un portefeuille et de s'y connecter."),Ms=n("div",{class:"language-html ext-html line-numbers-mode"},[n("pre",{class:"language-html"},[n("code",null,[n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("script")]),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"},[n("span",{class:"token language-javascript"},[s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" walletStore "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@svelte-on-solana/wallet-adapter-core"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` WalletProvider`),n("span",{class:"token punctuation"},","),s(` @@ -554,7 +636,7 @@ verify_sign `),n("span",{class:"token operator"},"="),s(" VerifyKey"),n("span",{ successfully connected! {:else} `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("WalletMultiButton")]),s(),n("span",{class:"token punctuation"},"/>")]),s(` {/if} -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br")])],-1),qs=n("div",{class:"language-html ext-html line-numbers-mode"},[n("pre",{class:"language-html"},[n("code",null,[n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("script")]),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"},[n("span",{class:"token language-javascript"},[s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br")])],-1),Ls=n("div",{class:"language-html ext-html line-numbers-mode"},[n("pre",{class:"language-html"},[n("code",null,[n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("script")]),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"},[n("span",{class:"token language-javascript"},[s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" walletStore "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@svelte-on-solana/wallet-adapter-core"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" WalletMultiButton "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@svelte-on-solana/wallet-adapter-ui"'),n("span",{class:"token punctuation"},";"),s(` `)])]),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` @@ -563,4 +645,4 @@ successfully connected! {:else} successfully connected! {:else} `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("WalletMultiButton")]),s(),n("span",{class:"token punctuation"},"/>")]),s(` {/if} -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br")])],-1);function zs(js,Ts){const e=p("SolanaCodeGroupItem"),o=p("SolanaCodeGroup"),c=p("ExternalLinkIcon");return i(),r(k,null,[m,d,y,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[g]),preview:a(()=>[h]),_:1}),t(e,{title:"Python"},{default:a(()=>[w]),preview:a(()=>[v]),_:1}),t(e,{title:"Rust"},{default:a(()=>[f]),preview:a(()=>[_]),_:1}),t(e,{title:"CLI"},{default:a(()=>[x]),preview:a(()=>[K]),_:1})]),_:1}),P,S,W,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[C]),preview:a(()=>[A]),_:1}),t(e,{title:"Python"},{default:a(()=>[q]),preview:a(()=>[z]),_:1}),t(e,{title:"Rust"},{default:a(()=>[j]),preview:a(()=>[T]),_:1}),t(e,{title:"CLI"},{default:a(()=>[B]),preview:a(()=>[D]),_:1})]),_:1}),R,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[M]),preview:a(()=>[N]),_:1}),t(e,{title:"Python"},{default:a(()=>[E]),preview:a(()=>[L]),_:1}),t(e,{title:"Rust"},{default:a(()=>[V]),preview:a(()=>[U]),_:1})]),_:1}),J,H,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Y]),preview:a(()=>[I]),_:1}),t(e,{title:"Python"},{default:a(()=>[F]),preview:a(()=>[X]),_:1}),t(e,{title:"CLI"},{default:a(()=>[Z]),preview:a(()=>[$]),_:1})]),_:1}),G,Q,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[O]),preview:a(()=>[nn]),_:1}),t(e,{title:"Python",active:""},{default:a(()=>[sn]),preview:a(()=>[an]),_:1}),t(e,{title:"Rust",active:""},{default:a(()=>[tn]),preview:a(()=>[en]),_:1})]),_:1}),on,cn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[pn]),preview:a(()=>[ln]),_:1}),t(e,{title:"Python"},{default:a(()=>[un]),preview:a(()=>[rn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[kn]),preview:a(()=>[bn]),_:1})]),_:1}),mn,dn,yn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[gn]),preview:a(()=>[hn]),_:1}),t(e,{title:"Python"},{default:a(()=>[wn]),preview:a(()=>[vn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[fn]),preview:a(()=>[_n]),_:1})]),_:1}),xn,Kn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Pn]),preview:a(()=>[Sn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[Wn]),preview:a(()=>[Cn]),_:1})]),_:1}),An,qn,zn,jn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Tn]),preview:a(()=>[Bn]),_:1}),t(e,{title:"Python"},{default:a(()=>[Dn]),preview:a(()=>[Rn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[Mn]),preview:a(()=>[Nn]),_:1})]),_:1}),En,Ln,n("p",null,[Vn,n("a",Un,[Jn,t(c)]),Hn]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Yn]),preview:a(()=>[In]),_:1}),t(e,{title:"Python"},{default:a(()=>[Fn]),preview:a(()=>[Xn]),_:1})]),_:1}),Zn,n("p",null,[$n,n("a",Gn,[Qn,t(c)]),On]),ns,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[ss]),preview:a(()=>[as]),_:1})]),_:1}),ts,n("p",null,[es,n("a",os,[cs,t(c)]),ps,ls,us,is,rs,n("a",ks,[bs,t(c)]),ms]),t(o,null,{default:a(()=>[t(e,{title:"Vue",active:""},{default:a(()=>[ds]),preview:a(()=>[ys]),_:1})]),_:1}),gs,n("p",null,[hs,n("a",ws,[vs,t(c)]),fs,_s,xs,n("a",Ks,[Ps,t(c)]),Ss,Ws,Cs]),t(o,null,{default:a(()=>[t(e,{title:"Svelte",active:""},{default:a(()=>[As]),preview:a(()=>[qs]),_:1})]),_:1})],64)}var Ds=u(b,[["render",zs]]);export{Ds as default}; +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br")])],-1);function Js(Us,Vs){const e=p("SolanaCodeGroupItem"),o=p("SolanaCodeGroup"),c=p("ExternalLinkIcon");return i(),r(k,null,[m,d,y,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[g]),preview:a(()=>[h]),_:1}),t(e,{title:"Python"},{default:a(()=>[w]),preview:a(()=>[v]),_:1}),t(e,{title:"C++"},{default:a(()=>[_]),preview:a(()=>[f]),_:1}),t(e,{title:"Rust"},{default:a(()=>[x]),preview:a(()=>[K]),_:1}),t(e,{title:"CLI"},{default:a(()=>[P]),preview:a(()=>[C]),_:1})]),_:1}),W,S,A,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[q]),preview:a(()=>[z]),_:1}),t(e,{title:"Python"},{default:a(()=>[j]),preview:a(()=>[T]),_:1}),t(e,{title:"C++"},{default:a(()=>[D]),preview:a(()=>[R]),_:1}),t(e,{title:"Rust"},{default:a(()=>[N]),preview:a(()=>[B]),_:1}),t(e,{title:"CLI"},{default:a(()=>[E]),preview:a(()=>[M]),_:1})]),_:1}),L,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[J]),preview:a(()=>[U]),_:1}),t(e,{title:"Python"},{default:a(()=>[V]),preview:a(()=>[H]),_:1}),t(e,{title:"Rust"},{default:a(()=>[Y]),preview:a(()=>[F]),_:1})]),_:1}),I,X,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Z]),preview:a(()=>[$]),_:1}),t(e,{title:"Python"},{default:a(()=>[G]),preview:a(()=>[Q]),_:1}),t(e,{title:"C++"},{default:a(()=>[O]),preview:a(()=>[nn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[sn]),preview:a(()=>[an]),_:1})]),_:1}),tn,en,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[on]),preview:a(()=>[cn]),_:1}),t(e,{title:"Python",active:""},{default:a(()=>[pn]),preview:a(()=>[un]),_:1}),t(e,{title:"C++",active:""},{default:a(()=>[ln]),preview:a(()=>[rn]),_:1}),t(e,{title:"Rust",active:""},{default:a(()=>[kn]),preview:a(()=>[bn]),_:1})]),_:1}),mn,dn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[yn]),preview:a(()=>[gn]),_:1}),t(e,{title:"Python"},{default:a(()=>[hn]),preview:a(()=>[wn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[vn]),preview:a(()=>[_n]),_:1})]),_:1}),fn,xn,Kn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Pn]),preview:a(()=>[Cn]),_:1}),t(e,{title:"Python"},{default:a(()=>[Wn]),preview:a(()=>[Sn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[An]),preview:a(()=>[qn]),_:1})]),_:1}),zn,jn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Tn]),preview:a(()=>[Dn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[Rn]),preview:a(()=>[Nn]),_:1})]),_:1}),Bn,En,Mn,Ln,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Jn]),preview:a(()=>[Un]),_:1}),t(e,{title:"Python"},{default:a(()=>[Vn]),preview:a(()=>[Hn]),_:1}),t(e,{title:"C++"},{default:a(()=>[Yn]),preview:a(()=>[Fn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[In]),preview:a(()=>[Xn]),_:1})]),_:1}),Zn,$n,n("p",null,[Gn,n("a",Qn,[On,t(c)]),ns]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[ss]),preview:a(()=>[as]),_:1}),t(e,{title:"Python"},{default:a(()=>[ts]),preview:a(()=>[es]),_:1})]),_:1}),os,n("p",null,[cs,n("a",ps,[us,t(c)]),ls]),is,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[rs]),preview:a(()=>[ks]),_:1})]),_:1}),bs,n("p",null,[ms,n("a",ds,[ys,t(c)]),gs,hs,ws,vs,_s,n("a",fs,[xs,t(c)]),Ks]),t(o,null,{default:a(()=>[t(e,{title:"Vue",active:""},{default:a(()=>[Ps]),preview:a(()=>[Cs]),_:1})]),_:1}),Ws,n("p",null,[Ss,n("a",As,[qs,t(c)]),zs,js,Ts,n("a",Ds,[Rs,t(c)]),Ns,Bs,Es]),t(o,null,{default:a(()=>[t(e,{title:"Svelte",active:""},{default:a(()=>[Ms]),preview:a(()=>[Ls]),_:1})]),_:1})],64)}var Ys=l(b,[["render",Js]]);export{Ys as default}; diff --git a/docs/.vuepress/dist/assets/keypairs-and-wallets.html.c1de8482.js b/docs/.vuepress/dist/assets/keypairs-and-wallets.html.61de6722.js similarity index 97% rename from docs/.vuepress/dist/assets/keypairs-and-wallets.html.c1de8482.js rename to docs/.vuepress/dist/assets/keypairs-and-wallets.html.61de6722.js index 550421e3e..7e42a84c3 100644 --- a/docs/.vuepress/dist/assets/keypairs-and-wallets.html.c1de8482.js +++ b/docs/.vuepress/dist/assets/keypairs-and-wallets.html.61de6722.js @@ -1 +1 @@ -const e={key:"v-4ec78794",path:"/de/references/keypairs-and-wallets.html",title:"Keypairs and Wallets",lang:"de-DE",frontmatter:{title:"Keypairs and Wallets",head:[["meta",{name:"title",content:"Solana Kochbuch | Schl\xFCsselpaare und Geldb\xF6rsen"}],["meta",{name:"og:title",content:"Solana Kochbuch | Schl\xFCsselpaare und Geldb\xF6rsen"}],["meta",{name:"description",content:"Erfahren Sie mehr \xFCber Schl\xFCsselpaare und Wallets, das Signieren und Verifizieren von Nachrichten und weitere Referenzen f\xFCr Building on Solana im Solana-Kochbuch."}],["meta",{name:"og:description",content:"Erfahren Sie mehr \xFCber Schl\xFCsselpaare und Wallets, das Signieren und Verifizieren von Nachrichten und weitere Referenzen f\xFCr Building on Solana im Solana-Kochbuch."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"So generieren Sie ein neues Schl\xFCsselpaar",slug:"so-generieren-sie-ein-neues-schlusselpaar",children:[]},{level:2,title:"So stellen Sie ein Schl\xFCsselpaar aus einem Geheimnis wieder her",slug:"so-stellen-sie-ein-schlusselpaar-aus-einem-geheimnis-wieder-her",children:[]},{level:2,title:"So verifizieren Sie ein Schl\xFCsselpaar",slug:"so-verifizieren-sie-ein-schlusselpaar",children:[]},{level:2,title:"So \xFCberpr\xFCfen Sie, ob ein \xF6ffentlicher Schl\xFCssel einen zugeh\xF6rigen privaten Schl\xFCssel hat",slug:"so-uberprufen-sie-ob-ein-offentlicher-schlussel-einen-zugehorigen-privaten-schlussel-hat",children:[]},{level:2,title:"Wie man eine mnemonische Phrase generiert",slug:"wie-man-eine-mnemonische-phrase-generiert",children:[]},{level:2,title:"So stellen Sie ein Schl\xFCsselpaar aus einer mnemonischen Phrase wieder her",slug:"so-stellen-sie-ein-schlusselpaar-aus-einer-mnemonischen-phrase-wieder-her",children:[]},{level:2,title:"So generieren Sie eine Vanity-Adresse",slug:"so-generieren-sie-eine-vanity-adresse",children:[]},{level:2,title:"So signieren und verifizieren Sie Nachrichten mit Wallets",slug:"so-signieren-und-verifizieren-sie-nachrichten-mit-wallets",children:[]},{level:2,title:"So verbinden Sie sich mit einer Brieftasche",slug:"so-verbinden-sie-sich-mit-einer-brieftasche",children:[{level:3,title:"React",slug:"react",children:[]},{level:3,title:"Vue",slug:"vue",children:[]},{level:3,title:"Svelte",slug:"svelte",children:[]}]}],git:{updatedTime:1672345621e3},filePathRelative:"de/references/keypairs-and-wallets.md"};export{e as data}; +const e={key:"v-4ec78794",path:"/de/references/keypairs-and-wallets.html",title:"Keypairs and Wallets",lang:"de-DE",frontmatter:{title:"Keypairs and Wallets",head:[["meta",{name:"title",content:"Solana Kochbuch | Schl\xFCsselpaare und Geldb\xF6rsen"}],["meta",{name:"og:title",content:"Solana Kochbuch | Schl\xFCsselpaare und Geldb\xF6rsen"}],["meta",{name:"description",content:"Erfahren Sie mehr \xFCber Schl\xFCsselpaare und Wallets, das Signieren und Verifizieren von Nachrichten und weitere Referenzen f\xFCr Building on Solana im Solana-Kochbuch."}],["meta",{name:"og:description",content:"Erfahren Sie mehr \xFCber Schl\xFCsselpaare und Wallets, das Signieren und Verifizieren von Nachrichten und weitere Referenzen f\xFCr Building on Solana im Solana-Kochbuch."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"So generieren Sie ein neues Schl\xFCsselpaar",slug:"so-generieren-sie-ein-neues-schlusselpaar",children:[]},{level:2,title:"So stellen Sie ein Schl\xFCsselpaar aus einem Geheimnis wieder her",slug:"so-stellen-sie-ein-schlusselpaar-aus-einem-geheimnis-wieder-her",children:[]},{level:2,title:"So verifizieren Sie ein Schl\xFCsselpaar",slug:"so-verifizieren-sie-ein-schlusselpaar",children:[]},{level:2,title:"So \xFCberpr\xFCfen Sie, ob ein \xF6ffentlicher Schl\xFCssel einen zugeh\xF6rigen privaten Schl\xFCssel hat",slug:"so-uberprufen-sie-ob-ein-offentlicher-schlussel-einen-zugehorigen-privaten-schlussel-hat",children:[]},{level:2,title:"Wie man eine mnemonische Phrase generiert",slug:"wie-man-eine-mnemonische-phrase-generiert",children:[]},{level:2,title:"So stellen Sie ein Schl\xFCsselpaar aus einer mnemonischen Phrase wieder her",slug:"so-stellen-sie-ein-schlusselpaar-aus-einer-mnemonischen-phrase-wieder-her",children:[]},{level:2,title:"So generieren Sie eine Vanity-Adresse",slug:"so-generieren-sie-eine-vanity-adresse",children:[]},{level:2,title:"So signieren und verifizieren Sie Nachrichten mit Wallets",slug:"so-signieren-und-verifizieren-sie-nachrichten-mit-wallets",children:[]},{level:2,title:"So verbinden Sie sich mit einer Brieftasche",slug:"so-verbinden-sie-sich-mit-einer-brieftasche",children:[{level:3,title:"React",slug:"react",children:[]},{level:3,title:"Vue",slug:"vue",children:[]},{level:3,title:"Svelte",slug:"svelte",children:[]}]}],git:{updatedTime:1676666728e3},filePathRelative:"de/references/keypairs-and-wallets.md"};export{e as data}; diff --git a/docs/.vuepress/dist/assets/keypairs-and-wallets.html.c8b5fdf9.js b/docs/.vuepress/dist/assets/keypairs-and-wallets.html.6da52a07.js similarity index 98% rename from docs/.vuepress/dist/assets/keypairs-and-wallets.html.c8b5fdf9.js rename to docs/.vuepress/dist/assets/keypairs-and-wallets.html.6da52a07.js index c73f6c64f..a8e7a925f 100644 --- a/docs/.vuepress/dist/assets/keypairs-and-wallets.html.c8b5fdf9.js +++ b/docs/.vuepress/dist/assets/keypairs-and-wallets.html.6da52a07.js @@ -1 +1 @@ -const e={key:"v-e6b8f3ba",path:"/th/references/keypairs-and-wallets.html",title:"Keypairs \u0E41\u0E25\u0E30 Wallets",lang:"th-TH",frontmatter:{title:"Keypairs \u0E41\u0E25\u0E30 Wallets",head:[["meta",{name:"title",content:"\u0E04\u0E39\u0E48\u0E21\u0E37\u0E2D Solana | Keypairs \u0E41\u0E25\u0E30 Wallets"}],["meta",{name:"og:title",content:"\u0E04\u0E39\u0E48\u0E21\u0E37\u0E2D Solana | Keypairs \u0E41\u0E25\u0E30 Wallets"}],["meta",{name:"description",content:"\u0E40\u0E23\u0E35\u0E22\u0E19\u0E23\u0E39\u0E49\u0E40\u0E01\u0E35\u0E48\u0E22\u0E27\u0E01\u0E31\u0E1A Keypairs \u0E41\u0E25\u0E30 Wallets, Signing \u0E41\u0E25\u0E30 Verifying Messages \u0E41\u0E25\u0E30\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E49\u0E32\u0E07\u0E2D\u0E34\u0E07\u0E2D\u0E37\u0E48\u0E19\u0E46 \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E1E\u0E31\u0E12\u0E19\u0E32\u0E1A\u0E19 Solana \u0E44\u0E14\u0E49\u0E17\u0E35\u0E48\u0E04\u0E39\u0E48\u0E21\u0E37\u0E2D Solana."}],["meta",{name:"og:description",content:"\u0E40\u0E23\u0E35\u0E22\u0E19\u0E23\u0E39\u0E49\u0E40\u0E01\u0E35\u0E48\u0E22\u0E27\u0E01\u0E31\u0E1A Keypairs \u0E41\u0E25\u0E30 Wallets, Signing \u0E41\u0E25\u0E30 Verifying Messages \u0E41\u0E25\u0E30\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E49\u0E32\u0E07\u0E2D\u0E34\u0E07\u0E2D\u0E37\u0E48\u0E19\u0E46 \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E1E\u0E31\u0E12\u0E19\u0E32\u0E1A\u0E19 Solana \u0E44\u0E14\u0E49\u0E17\u0E35\u0E48\u0E04\u0E39\u0E48\u0E21\u0E37\u0E2D Solana."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07 Keypair \u0E43\u0E2B\u0E21\u0E48",slug:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07-keypair-\u0E43\u0E2B\u0E21\u0E48",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35 restore a Keypair from a secret",slug:"\u0E27\u0E34\u0E18\u0E35-restore-a-keypair-from-a-secret",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35 verify a Keypair",slug:"\u0E27\u0E34\u0E18\u0E35-verify-a-keypair",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35 check if a public key has an associated private key",slug:"\u0E27\u0E34\u0E18\u0E35-check-if-a-public-key-has-an-associated-private-key",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35 generate a mnemonic phrase",slug:"\u0E27\u0E34\u0E18\u0E35-generate-a-mnemonic-phrase",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E01\u0E39\u0E49 Keypair \u0E08\u0E32\u0E01 mnemonic phrase",slug:"\u0E27\u0E34\u0E18\u0E35\u0E01\u0E39\u0E49-keypair-\u0E08\u0E32\u0E01-mnemonic-phrase",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35 generate a vanity address",slug:"\u0E27\u0E34\u0E18\u0E35-generate-a-vanity-address",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35 sign \u0E41\u0E25\u0E30 verify messages with wallets",slug:"\u0E27\u0E34\u0E18\u0E35-sign-\u0E41\u0E25\u0E30-verify-messages-with-wallets",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E40\u0E0A\u0E37\u0E48\u0E2D\u0E21\u0E15\u0E48\u0E2D\u0E01\u0E31\u0E1A wallet",slug:"\u0E27\u0E34\u0E18\u0E35\u0E40\u0E0A\u0E37\u0E48\u0E2D\u0E21\u0E15\u0E48\u0E2D\u0E01\u0E31\u0E1A-wallet",children:[{level:3,title:"React",slug:"react",children:[]},{level:3,title:"Vue",slug:"vue",children:[]},{level:3,title:"Svelte",slug:"svelte",children:[]}]}],git:{updatedTime:1660787553e3},filePathRelative:"th/references/keypairs-and-wallets.md"};export{e as data}; +const e={key:"v-e6b8f3ba",path:"/th/references/keypairs-and-wallets.html",title:"Keypairs \u0E41\u0E25\u0E30 Wallets",lang:"th-TH",frontmatter:{title:"Keypairs \u0E41\u0E25\u0E30 Wallets",head:[["meta",{name:"title",content:"\u0E04\u0E39\u0E48\u0E21\u0E37\u0E2D Solana | Keypairs \u0E41\u0E25\u0E30 Wallets"}],["meta",{name:"og:title",content:"\u0E04\u0E39\u0E48\u0E21\u0E37\u0E2D Solana | Keypairs \u0E41\u0E25\u0E30 Wallets"}],["meta",{name:"description",content:"\u0E40\u0E23\u0E35\u0E22\u0E19\u0E23\u0E39\u0E49\u0E40\u0E01\u0E35\u0E48\u0E22\u0E27\u0E01\u0E31\u0E1A Keypairs \u0E41\u0E25\u0E30 Wallets, Signing \u0E41\u0E25\u0E30 Verifying Messages \u0E41\u0E25\u0E30\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E49\u0E32\u0E07\u0E2D\u0E34\u0E07\u0E2D\u0E37\u0E48\u0E19\u0E46 \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E1E\u0E31\u0E12\u0E19\u0E32\u0E1A\u0E19 Solana \u0E44\u0E14\u0E49\u0E17\u0E35\u0E48\u0E04\u0E39\u0E48\u0E21\u0E37\u0E2D Solana."}],["meta",{name:"og:description",content:"\u0E40\u0E23\u0E35\u0E22\u0E19\u0E23\u0E39\u0E49\u0E40\u0E01\u0E35\u0E48\u0E22\u0E27\u0E01\u0E31\u0E1A Keypairs \u0E41\u0E25\u0E30 Wallets, Signing \u0E41\u0E25\u0E30 Verifying Messages \u0E41\u0E25\u0E30\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E49\u0E32\u0E07\u0E2D\u0E34\u0E07\u0E2D\u0E37\u0E48\u0E19\u0E46 \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E1E\u0E31\u0E12\u0E19\u0E32\u0E1A\u0E19 Solana \u0E44\u0E14\u0E49\u0E17\u0E35\u0E48\u0E04\u0E39\u0E48\u0E21\u0E37\u0E2D Solana."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07 Keypair \u0E43\u0E2B\u0E21\u0E48",slug:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07-keypair-\u0E43\u0E2B\u0E21\u0E48",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35 restore a Keypair from a secret",slug:"\u0E27\u0E34\u0E18\u0E35-restore-a-keypair-from-a-secret",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35 verify a Keypair",slug:"\u0E27\u0E34\u0E18\u0E35-verify-a-keypair",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35 check if a public key has an associated private key",slug:"\u0E27\u0E34\u0E18\u0E35-check-if-a-public-key-has-an-associated-private-key",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35 generate a mnemonic phrase",slug:"\u0E27\u0E34\u0E18\u0E35-generate-a-mnemonic-phrase",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E01\u0E39\u0E49 Keypair \u0E08\u0E32\u0E01 mnemonic phrase",slug:"\u0E27\u0E34\u0E18\u0E35\u0E01\u0E39\u0E49-keypair-\u0E08\u0E32\u0E01-mnemonic-phrase",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35 generate a vanity address",slug:"\u0E27\u0E34\u0E18\u0E35-generate-a-vanity-address",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35 sign \u0E41\u0E25\u0E30 verify messages with wallets",slug:"\u0E27\u0E34\u0E18\u0E35-sign-\u0E41\u0E25\u0E30-verify-messages-with-wallets",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E40\u0E0A\u0E37\u0E48\u0E2D\u0E21\u0E15\u0E48\u0E2D\u0E01\u0E31\u0E1A wallet",slug:"\u0E27\u0E34\u0E18\u0E35\u0E40\u0E0A\u0E37\u0E48\u0E2D\u0E21\u0E15\u0E48\u0E2D\u0E01\u0E31\u0E1A-wallet",children:[{level:3,title:"React",slug:"react",children:[]},{level:3,title:"Vue",slug:"vue",children:[]},{level:3,title:"Svelte",slug:"svelte",children:[]}]}],git:{updatedTime:1676666728e3},filePathRelative:"th/references/keypairs-and-wallets.md"};export{e as data}; diff --git a/docs/.vuepress/dist/assets/keypairs-and-wallets.html.767bf812.js b/docs/.vuepress/dist/assets/keypairs-and-wallets.html.77e957b4.js similarity index 97% rename from docs/.vuepress/dist/assets/keypairs-and-wallets.html.767bf812.js rename to docs/.vuepress/dist/assets/keypairs-and-wallets.html.77e957b4.js index 2001abc16..f277dc07a 100644 --- a/docs/.vuepress/dist/assets/keypairs-and-wallets.html.767bf812.js +++ b/docs/.vuepress/dist/assets/keypairs-and-wallets.html.77e957b4.js @@ -1 +1 @@ -const e={key:"v-4dc29afa",path:"/references/keypairs-and-wallets.html",title:"Keypairs and Wallets",lang:"en-US",frontmatter:{title:"Keypairs and Wallets",head:[["meta",{name:"title",content:"Solana Cookbook | Keypairs and Wallets"}],["meta",{name:"og:title",content:"Solana Cookbook | Keypairs and Wallets"}],["meta",{name:"description",content:"Learn about Keypairs and Wallets, Signing and Verifying Messages and more references for Building on Solana at The Solana cookbook."}],["meta",{name:"og:description",content:"Learn about Keypairs and Wallets, Signing and Verifying Messages and more references for Building on Solana at The Solana cookbook."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"How to generate a new Keypair",slug:"how-to-generate-a-new-keypair",children:[]},{level:2,title:"How to restore a Keypair from a secret",slug:"how-to-restore-a-keypair-from-a-secret",children:[]},{level:2,title:"How to verify a Keypair",slug:"how-to-verify-a-keypair",children:[]},{level:2,title:"How to check if a public key has an associated private key",slug:"how-to-check-if-a-public-key-has-an-associated-private-key",children:[]},{level:2,title:"How to generate a mnemonic phrase",slug:"how-to-generate-a-mnemonic-phrase",children:[]},{level:2,title:"How to restore a Keypair from a mnemonic phrase",slug:"how-to-restore-a-keypair-from-a-mnemonic-phrase",children:[]},{level:2,title:"How to generate a vanity address",slug:"how-to-generate-a-vanity-address",children:[]},{level:2,title:"How to sign and verify messages with wallets",slug:"how-to-sign-and-verify-messages-with-wallets",children:[]},{level:2,title:"How to connect to a wallet",slug:"how-to-connect-to-a-wallet",children:[{level:3,title:"React",slug:"react",children:[]},{level:3,title:"Vue",slug:"vue",children:[]},{level:3,title:"Svelte",slug:"svelte",children:[]}]}],git:{updatedTime:1657289166e3},filePathRelative:"references/keypairs-and-wallets.md"};export{e as data}; +const e={key:"v-4dc29afa",path:"/references/keypairs-and-wallets.html",title:"Keypairs and Wallets",lang:"en-US",frontmatter:{title:"Keypairs and Wallets",head:[["meta",{name:"title",content:"Solana Cookbook | Keypairs and Wallets"}],["meta",{name:"og:title",content:"Solana Cookbook | Keypairs and Wallets"}],["meta",{name:"description",content:"Learn about Keypairs and Wallets, Signing and Verifying Messages and more references for Building on Solana at The Solana cookbook."}],["meta",{name:"og:description",content:"Learn about Keypairs and Wallets, Signing and Verifying Messages and more references for Building on Solana at The Solana cookbook."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"How to generate a new Keypair",slug:"how-to-generate-a-new-keypair",children:[]},{level:2,title:"How to restore a Keypair from a secret",slug:"how-to-restore-a-keypair-from-a-secret",children:[]},{level:2,title:"How to verify a Keypair",slug:"how-to-verify-a-keypair",children:[]},{level:2,title:"How to check if a public key has an associated private key",slug:"how-to-check-if-a-public-key-has-an-associated-private-key",children:[]},{level:2,title:"How to generate a mnemonic phrase",slug:"how-to-generate-a-mnemonic-phrase",children:[]},{level:2,title:"How to restore a Keypair from a mnemonic phrase",slug:"how-to-restore-a-keypair-from-a-mnemonic-phrase",children:[]},{level:2,title:"How to generate a vanity address",slug:"how-to-generate-a-vanity-address",children:[]},{level:2,title:"How to sign and verify messages with wallets",slug:"how-to-sign-and-verify-messages-with-wallets",children:[]},{level:2,title:"How to connect to a wallet",slug:"how-to-connect-to-a-wallet",children:[{level:3,title:"React",slug:"react",children:[]},{level:3,title:"Vue",slug:"vue",children:[]},{level:3,title:"Svelte",slug:"svelte",children:[]}]}],git:{updatedTime:1676666728e3},filePathRelative:"references/keypairs-and-wallets.md"};export{e as data}; diff --git a/docs/.vuepress/dist/assets/keypairs-and-wallets.html.65225507.js b/docs/.vuepress/dist/assets/keypairs-and-wallets.html.837fef59.js similarity index 74% rename from docs/.vuepress/dist/assets/keypairs-and-wallets.html.65225507.js rename to docs/.vuepress/dist/assets/keypairs-and-wallets.html.837fef59.js index 5a772245d..15454a7d7 100644 --- a/docs/.vuepress/dist/assets/keypairs-and-wallets.html.65225507.js +++ b/docs/.vuepress/dist/assets/keypairs-and-wallets.html.837fef59.js @@ -1,24 +1,39 @@ -import{_ as u,r as p,o as i,c as k,b as t,w as a,a as n,F as r,d as s,e as l}from"./app.cfdf84e7.js";const b={},m=n("h1",{id:"keypairs-and-wallets",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#keypairs-and-wallets","aria-hidden":"true"},"#"),s(" Keypairs and Wallets")],-1),d=n("h2",{id:"how-to-generate-a-new-keypair",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-generate-a-new-keypair","aria-hidden":"true"},"#"),s(" How to generate a new Keypair")],-1),y=n("p",null,"Keypair \uB610\uB294 Wallet\uC744 \uC694\uAD6C\uD558\uB294 \uB2E4\uC591\uD55C Solana \uB77C\uC774\uBE0C\uB7EC\uB9AC\uB4E4\uC5D0 \uB300\uD574 \uB2F9\uC2E0\uC740 \uB9CE\uC740 \uB2E4\uB978 \uC561\uC158\uB4E4\uC744 \uCDE8\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uB9CC\uC57D \uB2F9\uC2E0\uC774 wallet\uC5D0 \uC5F0\uACB0\uD558\uACE0 \uC788\uB2E4\uBA74 \uAC71\uC815\uD560 \uD544\uC694\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4. \uD558\uC9C0\uB9CC \uB2F9\uC2E0\uC774 keypair\uAC00 \uD544\uC694\uD558\uB2E4\uBA74, \uD558\uB098\uB97C \uC0DD\uC131\uD560 \uD544\uC694\uAC00 \uC788\uC2B5\uB2C8\uB2E4.",-1),g=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +import{_ as l,r as p,o as i,c as k,b as t,w as a,a as n,F as r,d as s,e as u}from"./app.2fbb9e96.js";const b={},m=n("h1",{id:"keypairs-and-wallets",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#keypairs-and-wallets","aria-hidden":"true"},"#"),s(" Keypairs and Wallets")],-1),d=n("h2",{id:"how-to-generate-a-new-keypair",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-generate-a-new-keypair","aria-hidden":"true"},"#"),s(" How to generate a new Keypair")],-1),y=n("p",null,"Keypair \uB610\uB294 Wallet\uC744 \uC694\uAD6C\uD558\uB294 \uB2E4\uC591\uD55C Solana \uB77C\uC774\uBE0C\uB7EC\uB9AC\uB4E4\uC5D0 \uB300\uD574 \uB2F9\uC2E0\uC740 \uB9CE\uC740 \uB2E4\uB978 \uC561\uC158\uB4E4\uC744 \uCDE8\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uB9CC\uC57D \uB2F9\uC2E0\uC774 wallet\uC5D0 \uC5F0\uACB0\uD558\uACE0 \uC788\uB2E4\uBA74 \uAC71\uC815\uD560 \uD544\uC694\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4. \uD558\uC9C0\uB9CC \uB2F9\uC2E0\uC774 keypair\uAC00 \uD544\uC694\uD558\uB2E4\uBA74, \uD558\uB098\uB97C \uC0DD\uC131\uD560 \uD544\uC694\uAC00 \uC788\uC2B5\uB2C8\uB2E4.",-1),g=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"let"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br")])],-1),h=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),w=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),w=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),_=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),f=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("signature"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),f=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token comment"},"// clang++ generate_keypair.cpp -o generate_keypair -std=c++17 -lssl -lcrypto -lsodium"),s(` + +`),n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + `),n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"auto"),s(" public_key "),n("span",{class:"token operator"},"="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"public_key = "'),s(),n("span",{class:"token operator"},"<<"),s(" public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"return"),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br")])],-1),v=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),x=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("signature"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"let"),s(" wallet "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br")])],-1),v=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" wallet "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),x=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s(`$ solana-keygen new +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br")])],-1),K=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" wallet "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),P=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s(`$ solana-keygen new `),n("span",{class:"token comment"},"# pubkey: 9ZNTfG4NyQgxy2SWjSiQoUyBPEvXT2xo7fKc5hPYYJ7b"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),K=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen new -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),W=n("h2",{id:"how-to-restore-a-keypair-from-a-secret",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-restore-a-keypair-from-a-secret","aria-hidden":"true"},"#"),s(" How to restore a Keypair from a secret")],-1),P=n("p",null,"\uB9CC\uC57D \uB2F9\uC2E0\uC774 secret\uC744 \uC774\uBBF8 \uAC00\uC9C0\uACE0 \uC788\uB2E4\uBA74, \uB2F9\uC2E0\uC740 dApp\uC744 \uD14C\uC2A4\uD2B8\uD558\uAE30 \uC704\uD574 secret\uC73C\uB85C\uBD80\uD130 Keypair\uB97C \uC5BB\uC744 \uC218 \uC788\uC2B5\uB2C8\uB2E4.",-1),S=n("ol",null,[n("li",null,"Bytes\uB85C\uBD80\uD130")],-1),A=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),W=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen new +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),S=n("h2",{id:"how-to-restore-a-keypair-from-a-secret",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-restore-a-keypair-from-a-secret","aria-hidden":"true"},"#"),s(" How to restore a Keypair from a secret")],-1),C=n("p",null,"\uB9CC\uC57D \uB2F9\uC2E0\uC774 secret\uC744 \uC774\uBBF8 \uAC00\uC9C0\uACE0 \uC788\uB2E4\uBA74, \uB2F9\uC2E0\uC740 dApp\uC744 \uD14C\uC2A4\uD2B8\uD558\uAE30 \uC704\uD574 secret\uC73C\uB85C\uBD80\uD130 Keypair\uB97C \uC5BB\uC744 \uC218 \uC788\uC2B5\uB2C8\uB2E4.",-1),A=n("ol",null,[n("li",null,"Bytes\uB85C\uBD80\uD130")],-1),j=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSecretKey"),n("span",{class:"token punctuation"},"("),s(` @@ -30,7 +45,7 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br")])],-1),C=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSecretKey"),n("span",{class:"token punctuation"},"("),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br")])],-1),T=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSecretKey"),n("span",{class:"token punctuation"},"("),s(` Uint8Array`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"["),s(` `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"189"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"224"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"216"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"117"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"173"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"149"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"45"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"73"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"237"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"246"),n("span",{class:"token punctuation"},","),s(` @@ -38,7 +53,7 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),j=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),D=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair secret_key`),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"["),s(` `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(` @@ -47,17 +62,40 @@ secret_key`),n("span",{class:"token operator"},"="),s(),n("span",{class:"token p `),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"]"),s(` -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"bytes"),n("span",{class:"token punctuation"},"("),s("secret_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created Keypair with Public Key: {}"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),T=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("secret_key"),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"["),s(` +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_bytes"),n("span",{class:"token punctuation"},"("),s("secret_key"),n("span",{class:"token punctuation"},")"),s(` +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created Keypair with Public Key: {}"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),N=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("secret_key"),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"["),s(` `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"189"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"224"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"216"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"117"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"173"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"149"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"45"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"73"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"237"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"246"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"15"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"185"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"186"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"82"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"177"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"]"),s(` -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"bytes"),n("span",{class:"token punctuation"},"("),s("secret_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),B=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("signature"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"Signer"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_bytes"),n("span",{class:"token punctuation"},"("),s("secret_key"),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),R=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token comment"},"// clang++ keypair_from_seed.cpp -o keypair_from_seed -std=c++17 -lssl -lcrypto -lsodium"),s(` + +`),n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + `),n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token keyword"},"uint8_t"),s(" bytes"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},"]"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"{"),s(` + `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(` + `),n("span",{class:"token number"},"189"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"224"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"216"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"117"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"173"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"149"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"45"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"73"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"237"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"246"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"15"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"185"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"186"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"82"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"177"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(` + `),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(` + `),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` + `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` + Keypair key_pair `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"from_seed"),n("span",{class:"token punctuation"},"("),s("bytes"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"Created Keypair with Public Key: "'),s(),n("span",{class:"token operator"},"<<"),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br")])],-1),z=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token keyword"},"uint8_t"),s(" secret_key"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},"]"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"{"),s(` +`),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(` +`),n("span",{class:"token number"},"189"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"224"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"216"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"117"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"173"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"149"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"45"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"73"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"237"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"246"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"15"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"185"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"186"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"82"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"177"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(` +`),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(` +`),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` +`),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` +Keypair key_pair `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"from_seed"),n("span",{class:"token punctuation"},"("),s("secret_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),B=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("signature"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"Signer"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"let"),s(" secret_key"),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token punctuation"},"["),n("span",{class:"token keyword"},"u8"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token number"},"64"),n("span",{class:"token punctuation"},"]"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"["),s(` @@ -80,9 +118,9 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"let"),s(" wallet "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from_bytes"),n("span",{class:"token punctuation"},"("),n("span",{class:"token operator"},"&"),s("secret_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),R=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# input your secret into the Keypath listed under solana config get"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),D=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# input your secret into the Keypath listed under solana config get"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),N=n("ol",{start:"2"},[n("li",null,"Base58 String\uC73C\uB85C\uBD80\uD130")],-1),z=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),E=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# input your secret into the Keypath listed under solana config get"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),H=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# input your secret into the Keypath listed under solana config get"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),J=n("ol",{start:"2"},[n("li",null,"Base58 String\uC73C\uB85C\uBD80\uD130")],-1),U=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" bs58 "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"bs58"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -92,20 +130,19 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),E=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSecretKey"),n("span",{class:"token punctuation"},"("),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),V=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSecretKey"),n("span",{class:"token punctuation"},"("),s(` bs58`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"decode"),n("span",{class:"token punctuation"},"("),s(` `),n("span",{class:"token string"},'"5MaiiCavjCmn9Hs1o3eznqDEhRwxo7pXiAYez7keQUviUkauRiTMD8DrESdrNjN8zd9mTmVhRvBJeg5vhyvgrAhG"'),s(` `),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br")])],-1),H=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(` base58 -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br")])],-1),Y=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair b58_string `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"5MaiiCavjCmn9Hs1o3eznqDEhRwxo7pXiAYez7keQUviUkauRiTMD8DrESdrNjN8zd9mTmVhRvBJeg5vhyvgrAhG"'),s(` -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),s("base58"),n("span",{class:"token punctuation"},"."),s("b58decode"),n("span",{class:"token punctuation"},"("),s("b58_string"),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created Keypair with Public Key: {}"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),U=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("b58_string "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"5MaiiCavjCmn9Hs1o3eznqDEhRwxo7pXiAYez7keQUviUkauRiTMD8DrESdrNjN8zd9mTmVhRvBJeg5vhyvgrAhG"'),s(` -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),s("base58"),n("span",{class:"token punctuation"},"."),s("b58decode"),n("span",{class:"token punctuation"},"("),s("b58_string"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),V=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("signature"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"Signer"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_string"),n("span",{class:"token punctuation"},"("),s("b58_string"),n("span",{class:"token punctuation"},")"),s(` +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created Keypair with Public Key: {}"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br")])],-1),L=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("b58_string "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"5MaiiCavjCmn9Hs1o3eznqDEhRwxo7pXiAYez7keQUviUkauRiTMD8DrESdrNjN8zd9mTmVhRvBJeg5vhyvgrAhG"'),s(` +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_string"),n("span",{class:"token punctuation"},"("),s("b58_string"),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),q=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("signature"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"Signer"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"let"),s(" wallet "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from_base58_string"),n("span",{class:"token punctuation"},"("),s(` @@ -114,10 +151,10 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token keyword"},"let"),s(" pubkey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Signer"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token operator"},"&"),s("wallet"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token macro property"},"println!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created keypair: {}"'),n("span",{class:"token punctuation"},","),s(" pubkey"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br")])],-1),J=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" wallet "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from_base58_string"),n("span",{class:"token punctuation"},"("),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br")])],-1),F=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" wallet "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from_base58_string"),n("span",{class:"token punctuation"},"("),s(` `),n("span",{class:"token string"},'"5MaiiCavjCmn9Hs1o3eznqDEhRwxo7pXiAYez7keQUviUkauRiTMD8DrESdrNjN8zd9mTmVhRvBJeg5vhyvgrAhG"'),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),L=n("h2",{id:"how-to-verify-a-keypair",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-verify-a-keypair","aria-hidden":"true"},"#"),s(" How to verify a Keypair")],-1),Y=n("p",null,"keypair\uAC00 \uC8FC\uC5B4\uC84C\uB2E4\uBA74 \uB2F9\uC2E0\uC740 secret\uC774 \uC8FC\uC5B4\uC9C4 public key\uC640 \uC77C\uCE58\uD558\uB294\uC9C0 \uAC80\uC99D\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.",-1),q=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),I=n("h2",{id:"how-to-verify-a-keypair",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-verify-a-keypair","aria-hidden":"true"},"#"),s(" How to verify a Keypair")],-1),X=n("p",null,"keypair\uAC00 \uC8FC\uC5B4\uC84C\uB2E4\uBA74 \uB2F9\uC2E0\uC740 secret\uC774 \uC8FC\uC5B4\uC9C4 public key\uC640 \uC77C\uCE58\uD558\uB294\uC9C0 \uAC80\uC99D\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.",-1),Z=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"const"),s(" publicKey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),s(` @@ -134,7 +171,7 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"==="),s(" publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token comment"},"// true"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br")])],-1),F=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" publicKey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br")])],-1),$=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" publicKey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSecretKey"),n("span",{class:"token punctuation"},"("),s(` Uint8Array`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"["),s(` `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(` @@ -145,10 +182,10 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"==="),s(" publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token comment"},"// true"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),I=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("publickey "),n("span",{class:"token keyword"},"import"),s(` PublicKey +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),G=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("pubkey "),n("span",{class:"token keyword"},"import"),s(` Pubkey -public_key `),n("span",{class:"token operator"},"="),s(" PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p"'),n("span",{class:"token punctuation"},")"),s(` +public_key `),n("span",{class:"token operator"},"="),s(" Pubkey"),n("span",{class:"token punctuation"},"."),s("from_string"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p"'),n("span",{class:"token punctuation"},")"),s(` keys `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"["),s(` `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(` @@ -156,11 +193,11 @@ keys `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctu `),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"]"),s(` -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"bytes"),n("span",{class:"token punctuation"},"("),s("keys"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_bytes"),n("span",{class:"token punctuation"},"("),s("keys"),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},"."),s("to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=="),s(" public_key"),n("span",{class:"token punctuation"},"."),s("to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=="),s(" public_key"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"# True"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br")])],-1),X=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("public_key "),n("span",{class:"token operator"},"="),s(" PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p"'),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br")])],-1),Q=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("public_key "),n("span",{class:"token operator"},"="),s(" Pubkey"),n("span",{class:"token punctuation"},"."),s("from_string"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p"'),n("span",{class:"token punctuation"},")"),s(` keys `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"["),s(` `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(` @@ -168,13 +205,44 @@ keys `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctu `),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"]"),s(` -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"bytes"),n("span",{class:"token punctuation"},"("),s("keys"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_bytes"),n("span",{class:"token punctuation"},"("),s("keys"),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},"."),s("to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=="),s(" public_key"),n("span",{class:"token punctuation"},"."),s("to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=="),s(" public_key"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"# True"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br")])],-1),Z=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana-keygen verify "),n("span",{class:"token operator"},"<"),s("PUBKEY"),n("span",{class:"token operator"},">"),s(` prompt:// -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),$=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana-keygen verify "),n("span",{class:"token operator"},"<"),s("PUBKEY"),n("span",{class:"token operator"},">"),s(` prompt:// -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),G=n("h2",{id:"how-to-check-if-a-public-key-has-an-associated-private-key",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-check-if-a-public-key-has-an-associated-private-key","aria-hidden":"true"},"#"),s(" How to check if a public key has an associated private key")],-1),Q=n("p",null,"\uD2B9\uBCC4\uD55C \uCF00\uC774\uC2A4 (e.g. a Program Derived Address)\uC5D0\uC11C, public key\uB4E4\uC740 \uC5F0\uAD00\uB41C private key\uB97C \uAC00\uC9C0\uACE0 \uC788\uC9C0 \uC54A\uC744\uC9C0 \uBAA8\uB985\uB2C8\uB2E4. \uB2F9\uC2E0\uC740 \uC774 public key\uAC00 ed25519 \uACE1\uC120\uC5D0 \uB193\uC5EC\uC788\uB294\uC9C0\uB97C \uD655\uC778\uD568\uC73C\uB85C\uC368 \uC774\uAC83\uC744 \uCCB4\uD06C\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uC774 \uACE1\uC120\uC5D0 \uB193\uC5EC\uC788\uB294 public key\uB4E4\uC740 \uC9C0\uAC11\uC744 \uAC16\uACE0 \uC788\uB294 \uC0AC\uC6A9\uC790\uB4E4\uC5D0 \uC758\uD574\uC11C\uB9CC \uB2E4\uB904\uC9C8 \uC218 \uC788\uC2B5\uB2C8\uB2E4.",-1),O=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br")])],-1),O=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token comment"},"// clang++ verify_keypair.cpp -o verify_keypair -std=c++17 -lssl -lcrypto -lsodium"),s(` + +`),n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + PublicKey public_key `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token keyword"},"uint8_t"),s(" bytes"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},"]"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"{"),s(` + `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(` + `),n("span",{class:"token number"},"189"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"224"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"216"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"117"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"173"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"149"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"45"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"73"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"237"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"246"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"15"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"185"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"186"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"82"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"177"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(` + `),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(` + `),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` + `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` + Keypair key_pair `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"from_seed"),n("span",{class:"token punctuation"},"("),s("bytes"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token punctuation"},"("),s("public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br")])],-1),nn=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[s("PublicKey public_key "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token keyword"},"uint8_t"),s(" bytes"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},"]"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"{"),s(` +`),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(` +`),n("span",{class:"token number"},"189"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"224"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"216"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"117"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"173"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"149"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"45"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"73"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"237"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"246"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"15"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"185"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"186"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"82"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"177"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(` +`),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(` +`),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` +`),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` +Keypair key_pair `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"from_seed"),n("span",{class:"token punctuation"},"("),s("bytes"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + +std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token punctuation"},"("),s("public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token comment"},"// 1"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br")])],-1),sn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana-keygen verify "),n("span",{class:"token operator"},"<"),s("PUBKEY"),n("span",{class:"token operator"},">"),s(` prompt:// +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),an=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana-keygen verify "),n("span",{class:"token operator"},"<"),s("PUBKEY"),n("span",{class:"token operator"},">"),s(` prompt:// +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),tn=n("h2",{id:"how-to-check-if-a-public-key-has-an-associated-private-key",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-check-if-a-public-key-has-an-associated-private-key","aria-hidden":"true"},"#"),s(" How to check if a public key has an associated private key")],-1),en=n("p",null,"\uD2B9\uBCC4\uD55C \uCF00\uC774\uC2A4 (e.g. a Program Derived Address)\uC5D0\uC11C, public key\uB4E4\uC740 \uC5F0\uAD00\uB41C private key\uB97C \uAC00\uC9C0\uACE0 \uC788\uC9C0 \uC54A\uC744\uC9C0 \uBAA8\uB985\uB2C8\uB2E4. \uB2F9\uC2E0\uC740 \uC774 public key\uAC00 ed25519 \uACE1\uC120\uC5D0 \uB193\uC5EC\uC788\uB294\uC9C0\uB97C \uD655\uC778\uD568\uC73C\uB85C\uC368 \uC774\uAC83\uC744 \uCCB4\uD06C\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uC774 \uACE1\uC120\uC5D0 \uB193\uC5EC\uC788\uB294 public key\uB4E4\uC740 \uC9C0\uAC11\uC744 \uAC16\uACE0 \uC788\uB294 \uC0AC\uC6A9\uC790\uB4E4\uC5D0 \uC758\uD574\uC11C\uB9CC \uB2E4\uB904\uC9C8 \uC218 \uC788\uC2B5\uB2C8\uB2E4.",-1),on=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token keyword"},"function"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token comment"},"// Note that Keypair.generate() will always give a public key that is valid for users"),s(` @@ -188,23 +256,34 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token keyword"},"const"),s(" errorPubkey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"testPubkey"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token comment"},"// Is not a valid public key"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br")])],-1),nn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" key "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br")])],-1),cn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" key "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("PublicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"isOnCurve"),n("span",{class:"token punctuation"},"("),s("key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBytes"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),sn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("publickey "),n("span",{class:"token keyword"},"import"),s(` PublicKey -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("utils"),n("span",{class:"token punctuation"},"."),s("ed25519_base "),n("span",{class:"token keyword"},"import"),s(` is_on_curve +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),pn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("pubkey "),n("span",{class:"token keyword"},"import"),s(` Pubkey `),n("span",{class:"token comment"},"# Note that Keypair() will always give a public key that is valid for users"),s(` -key `),n("span",{class:"token operator"},"="),s(" PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},"'5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY'"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# Valid public key"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("is_on_curve"),n("span",{class:"token punctuation"},"("),s("key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# Lies on the ed25519 curve and is suitable for users"),s(` +key `),n("span",{class:"token operator"},"="),s(" Pubkey"),n("span",{class:"token punctuation"},"."),s("from_string"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},"'5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY'"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# Valid public key"),s(` +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("key"),n("span",{class:"token punctuation"},"."),s("is_on_curve"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# Lies on the ed25519 curve and is suitable for users"),s(` + +off_curve_address `),n("span",{class:"token operator"},"="),s(" Pubkey"),n("span",{class:"token punctuation"},"."),s("from_string"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},"'4BJXYkfvg37zEmBbsacZjeQDpTNx91KppxFJxRqrz48e'"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# Valid public key"),s(` +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("off_curve_address"),n("span",{class:"token punctuation"},"."),s("is_on_curve"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# Not on the ed25519 curve, therefore not suitable for users"),s(` + +error_pubkey `),n("span",{class:"token operator"},"="),s(" Pubkey"),n("span",{class:"token punctuation"},"."),s("from_string"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"testPubkey"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token comment"},"# Is not a valid public key"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),un=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("key "),n("span",{class:"token operator"},"="),s(" Pubkey"),n("span",{class:"token punctuation"},"."),s("from_string"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},"'5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY'"),n("span",{class:"token punctuation"},")"),s(` +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("key"),n("span",{class:"token punctuation"},"."),s("is_on_curve"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),ln=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},"")]),s(` +`),n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},"")]),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` +`),n("span",{class:"token punctuation"},"{"),s(` + `),n("span",{class:"token keyword"},"auto"),s(" public_key "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -off_curve_address `),n("span",{class:"token operator"},"="),s(" PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},"'4BJXYkfvg37zEmBbsacZjeQDpTNx91KppxFJxRqrz48e'"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# Valid public key"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("PublicKey"),n("span",{class:"token punctuation"},"."),s("_is_on_curve"),n("span",{class:"token punctuation"},"("),s("off_curve_address"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# Not on the ed25519 curve, therefore not suitable for users"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(" public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"is_on_curve"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` -error_pubkey `),n("span",{class:"token operator"},"="),s(" PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"testPubkey"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token comment"},"# Is not a valid public key"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br")])],-1),an=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("key "),n("span",{class:"token operator"},"="),s(" PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},"'5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY'"),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("is_on_curve"),n("span",{class:"token punctuation"},"("),s("key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),tn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("pubkey"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Pubkey"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token keyword"},"return"),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),kn=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token keyword"},"auto"),s(" public_key "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(" public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"is_on_curve"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),rn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("pubkey"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Pubkey"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("std"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token keyword"},"str"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token class-name"},"FromStr"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -217,21 +296,21 @@ error_pubkey `),n("span",{class:"token operator"},"="),s(" PublicKey"),n("span", `),n("span",{class:"token keyword"},"let"),s(" error_pubkey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Pubkey"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from_str"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"testPubkey"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token comment"},"// Is not a valid public key"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br")])],-1),en=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" pubkey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Pubkey"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from_str"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br")])],-1),bn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" pubkey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Pubkey"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from_str"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token macro property"},"println!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"{:?}"'),n("span",{class:"token punctuation"},","),s(" pubkey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"is_on_curve"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),on=n("h2",{id:"how-to-generate-a-mnemonic-phrase",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-generate-a-mnemonic-phrase","aria-hidden":"true"},"#"),s(" How to generate a mnemonic phrase")],-1),cn=n("p",null,"\uB9CC\uC57D \uB2F9\uC2E0\uC774 wallet\uC744 \uC0DD\uC131\uD558\uACE0 \uC788\uB2E4\uBA74, \uB2F9\uC2E0\uC740 \uC0AC\uC6A9\uC790\uB4E4\uC774 \uBC31\uC5C5\uC744 \uC704\uD574 \uC800\uC7A5\uD560 \uC5F0\uC0C1 \uBB38\uAD6C\uB97C \uC0DD\uC131\uD560 \uD544\uC694\uAC00 \uC788\uC744 \uAC83\uC785\uB2C8\uB2E4.",-1),pn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" bip39 "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"bip39"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),mn=n("h2",{id:"how-to-generate-a-mnemonic-phrase",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-generate-a-mnemonic-phrase","aria-hidden":"true"},"#"),s(" How to generate a mnemonic phrase")],-1),dn=n("p",null,"\uB9CC\uC57D \uB2F9\uC2E0\uC774 wallet\uC744 \uC0DD\uC131\uD558\uACE0 \uC788\uB2E4\uBA74, \uB2F9\uC2E0\uC740 \uC0AC\uC6A9\uC790\uB4E4\uC774 \uBC31\uC5C5\uC744 \uC704\uD574 \uC800\uC7A5\uD560 \uC5F0\uC0C1 \uBB38\uAD6C\uB97C \uC0DD\uC131\uD560 \uD544\uC694\uAC00 \uC788\uC744 \uAC83\uC785\uB2C8\uB2E4.",-1),yn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" bip39 "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"bip39"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" mnemonic "),n("span",{class:"token operator"},"="),s(" bip39"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generateMnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),ln=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" mnemonic "),n("span",{class:"token operator"},"="),s(" bip39"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generateMnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),un=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" mnemonic "),n("span",{class:"token keyword"},"import"),s(` Mnemonic +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),gn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" mnemonic "),n("span",{class:"token operator"},"="),s(" bip39"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generateMnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),hn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" mnemonic "),n("span",{class:"token keyword"},"import"),s(` Mnemonic mnemo `),n("span",{class:"token operator"},"="),s(" Mnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"english"'),n("span",{class:"token punctuation"},")"),s(` words `),n("span",{class:"token operator"},"="),s(" mnemo"),n("span",{class:"token punctuation"},"."),s("generate"),n("span",{class:"token punctuation"},"("),s("strength"),n("span",{class:"token operator"},"="),n("span",{class:"token number"},"256"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),kn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("mnemo "),n("span",{class:"token operator"},"="),s(" Mnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"english"'),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),wn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("mnemo "),n("span",{class:"token operator"},"="),s(" Mnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"english"'),n("span",{class:"token punctuation"},")"),s(` words `),n("span",{class:"token operator"},"="),s(" mnemo"),n("span",{class:"token punctuation"},"."),s("generate"),n("span",{class:"token punctuation"},"("),s("strength"),n("span",{class:"token operator"},"="),n("span",{class:"token number"},"256"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),rn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen new -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),bn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen new -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),mn=n("h2",{id:"how-to-restore-a-keypair-from-a-mnemonic-phrase",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-restore-a-keypair-from-a-mnemonic-phrase","aria-hidden":"true"},"#"),s(" How to restore a Keypair from a mnemonic phrase")],-1),dn=n("p",null,"\uB9CE\uC740 \uC9C0\uAC11\uB4E4\uC774 Secret key\uB4E4\uC744 \uB300\uBCC0\uD558\uB294 \uC5F0\uC0C1 \uAD6C\uBB38\uB4E4\uC744 \uC0AC\uC6A9\uD569\uB2C8\uB2E4. \uB2F9\uC2E0\uC740 \uC774 \uC5F0\uC0C1 \uAD6C\uBB38\uB4E4\uC744 keypair\uB85C \uBCC0\uD658\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.",-1),yn=n("ol",null,[n("li",null,"BIP39 - \uB2E8\uC77C \uC9C0\uAC11 \uC0DD\uC131")],-1),gn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),_n=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen new +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),fn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen new +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),vn=n("h2",{id:"how-to-restore-a-keypair-from-a-mnemonic-phrase",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-restore-a-keypair-from-a-mnemonic-phrase","aria-hidden":"true"},"#"),s(" How to restore a Keypair from a mnemonic phrase")],-1),xn=n("p",null,"\uB9CE\uC740 \uC9C0\uAC11\uB4E4\uC774 Secret key\uB4E4\uC744 \uB300\uBCC0\uD558\uB294 \uC5F0\uC0C1 \uAD6C\uBB38\uB4E4\uC744 \uC0AC\uC6A9\uD569\uB2C8\uB2E4. \uB2F9\uC2E0\uC740 \uC774 \uC5F0\uC0C1 \uAD6C\uBB38\uB4E4\uC744 keypair\uB85C \uBCC0\uD658\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.",-1),Kn=n("ol",null,[n("li",null,"BIP39 - \uB2E8\uC77C \uC9C0\uAC11 \uC0DD\uC131")],-1),Pn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" bip39 "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"bip39"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -241,23 +320,23 @@ words `),n("span",{class:"token operator"},"="),s(" mnemo"),n("span",{class:"tok `),n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSeed"),n("span",{class:"token punctuation"},"("),s("seed"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"slice"),n("span",{class:"token punctuation"},"("),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"32"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),n("span",{class:"token template-string"},[n("span",{class:"token template-punctuation string"},"`"),n("span",{class:"token interpolation"},[n("span",{class:"token interpolation-punctuation punctuation"},"${"),s("keypair"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token interpolation-punctuation punctuation"},"}")]),n("span",{class:"token template-punctuation string"},"`")]),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token comment"},"// 5ZWj7a1f8tWkjBESHKgrLmXshuXxqeY9SYcfbshpAqPG"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),hn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" mnemonic "),n("span",{class:"token operator"},"="),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),Wn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" mnemonic "),n("span",{class:"token operator"},"="),s(` `),n("span",{class:"token string"},'"pill tomorrow foster begin walnut borrow virtual kick shift mutual shoe scatter"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" seed "),n("span",{class:"token operator"},"="),s(" bip39"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"mnemonicToSeedSync"),n("span",{class:"token punctuation"},"("),s("mnemonic"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token string"},'""'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token comment"},"// (mnemonic, password)"),s(` `),n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSeed"),n("span",{class:"token punctuation"},"("),s("seed"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"slice"),n("span",{class:"token punctuation"},"("),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"32"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),wn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),Sn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair `),n("span",{class:"token keyword"},"from"),s(" mnemonic "),n("span",{class:"token keyword"},"import"),s(` Mnemonic mnemo `),n("span",{class:"token operator"},"="),s(" Mnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"english"'),n("span",{class:"token punctuation"},")"),s(` seed `),n("span",{class:"token operator"},"="),s(" mnemo"),n("span",{class:"token punctuation"},"."),s("to_seed"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"pill tomorrow foster begin walnut borrow virtual kick shift mutual shoe scatter"'),n("span",{class:"token punctuation"},")"),s(` -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),s("seed"),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created Keypair with Public Key: {}"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),_n=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("mnemo "),n("span",{class:"token operator"},"="),s(" Mnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"english"'),n("span",{class:"token punctuation"},")"),s(` +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_bytes"),n("span",{class:"token punctuation"},"("),s("seed"),n("span",{class:"token punctuation"},")"),s(` +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created Keypair with Public Key: {}"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),Cn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("mnemo "),n("span",{class:"token operator"},"="),s(" Mnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"english"'),n("span",{class:"token punctuation"},")"),s(` seed `),n("span",{class:"token operator"},"="),s(" mnemo"),n("span",{class:"token punctuation"},"."),s("to_seed"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"pill tomorrow foster begin walnut borrow virtual kick shift mutual shoe scatter"'),n("span",{class:"token punctuation"},")"),s(` -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),s("seed"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),fn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen recover -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),vn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen recover -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),xn=n("ol",{start:"2"},[n("li",null,"BIP44 (HD \uC9C0\uAC11\uC73C\uB85C\uB3C4 \uC54C\uB824\uC9C4 \uB2E4\uC911 \uC9C0\uAC11)")],-1),Kn=n("p",null,"\uB2F9\uC2E0\uC740 \uD558\uB098\uC758 seed\uB85C\uBD80\uD130 \uB2E4\uC911 \uC9C0\uAC11\uC744 \uB9CC\uB4E4 \uC218 \uC788\uC2B5\uB2C8\uB2E4. - 'Hierarchical Deterministic wallets' or HD wallets\uC73C\uB85C\uB3C4 \uC54C\uB824\uC9C4:",-1),Wn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_bytes"),n("span",{class:"token punctuation"},"("),s("seed"),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),An=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen recover +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),jn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen recover +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Tn=n("ol",{start:"2"},[n("li",null,"BIP44 (HD \uC9C0\uAC11\uC73C\uB85C\uB3C4 \uC54C\uB824\uC9C4 \uB2E4\uC911 \uC9C0\uAC11)")],-1),Dn=n("p",null,"\uB2F9\uC2E0\uC740 \uD558\uB098\uC758 seed\uB85C\uBD80\uD130 \uB2E4\uC911 \uC9C0\uAC11\uC744 \uB9CC\uB4E4 \uC218 \uC788\uC2B5\uB2C8\uB2E4. - 'Hierarchical Deterministic wallets' or HD wallets\uC73C\uB85C\uB3C4 \uC54C\uB824\uC9C4:",-1),Nn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" HDKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"micro-ed25519-hdkey"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" bip39 "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"bip39"'),n("span",{class:"token punctuation"},";"),s(` @@ -272,7 +351,7 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),n("span",{class:"token template-string"},[n("span",{class:"token template-punctuation string"},"`"),n("span",{class:"token interpolation"},[n("span",{class:"token interpolation-punctuation punctuation"},"${"),s("path"),n("span",{class:"token interpolation-punctuation punctuation"},"}")]),n("span",{class:"token string"}," => "),n("span",{class:"token interpolation"},[n("span",{class:"token interpolation-punctuation punctuation"},"${"),s("keypair"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token interpolation-punctuation punctuation"},"}")]),n("span",{class:"token template-punctuation string"},"`")]),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br")])],-1),Pn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" mnemonic "),n("span",{class:"token operator"},"="),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br")])],-1),Rn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" mnemonic "),n("span",{class:"token operator"},"="),s(` `),n("span",{class:"token string"},'"neither lonely flavor argue grass remind eye tag avocado spot unusual intact"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" seed "),n("span",{class:"token operator"},"="),s(" bip39"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"mnemonicToSeedSync"),n("span",{class:"token punctuation"},"("),s("mnemonic"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token string"},'""'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token comment"},"// (mnemonic, password)"),s(` `),n("span",{class:"token keyword"},"for"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"let"),s(" i "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(" i "),n("span",{class:"token operator"},"<"),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},";"),s(" i"),n("span",{class:"token operator"},"++"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -280,9 +359,9 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSeed"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"derivePath"),n("span",{class:"token punctuation"},"("),s("path"),n("span",{class:"token punctuation"},","),s(" seed"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toString"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"hex"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),s("key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),n("span",{class:"token template-string"},[n("span",{class:"token template-punctuation string"},"`"),n("span",{class:"token interpolation"},[n("span",{class:"token interpolation-punctuation punctuation"},"${"),s("path"),n("span",{class:"token interpolation-punctuation punctuation"},"}")]),n("span",{class:"token string"}," => "),n("span",{class:"token interpolation"},[n("span",{class:"token interpolation-punctuation punctuation"},"${"),s("keypair"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token interpolation-punctuation punctuation"},"}")]),n("span",{class:"token template-punctuation string"},"`")]),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),Sn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana-keygen recover "),n("span",{class:"token string"},"'prompt:?key=0/0'"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),An=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana-keygen recover "),n("span",{class:"token string"},"'prompt:?key=0/0'"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Cn=n("h2",{id:"how-to-generate-a-vanity-address",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-generate-a-vanity-address","aria-hidden":"true"},"#"),s(" How to generate a vanity address")],-1),jn=n("p",null,'Vanity publickeys \uB610\uB294 custom addresses\uB294 \uD2B9\uBCC4\uD55C \uBB38\uC790\uB4E4\uB85C \uC2DC\uC791\uD558\uB294 key\uB4E4\uC785\uB2C8\uB2E4. \uC608\uB97C\uB4E4\uC5B4, \uC5B4\uB5A4 \uC0AC\uB78C\uC740 publickey\uAC00 "elv1s" \uB610\uB294 "cook"\uC73C\uB85C \uC2DC\uC791\uD558\uAE38 \uC6D0\uD560 \uC218\uB3C4 \uC788\uC2B5\uB2C8\uB2E4. \uC774\uAC83\uB4E4\uC740 \uB2E4\uB978 \uC0AC\uB78C\uB4E4\uC774 \uC774 key\uAC00 \uB204\uAD6C\uC758 \uAC83\uC778\uC9C0 \uAE30\uC5B5\uD560 \uC218 \uC788\uAC8C \uB3C4\uC640\uC90D\uB2C8\uB2E4. \uC989 \uC774 key\uB97C \uB354 \uC27D\uAC8C \uC2DD\uBCC4 \uAC00\uB2A5\uD558\uAC8C \uB9CC\uB4E4\uC5B4 \uC90D\uB2C8\uB2E4.',-1),Tn=n("p",null,"Note: \uB2F9\uC2E0\uC758 vanity address\uC5D0 \uBB38\uC790\uB4E4\uC774 \uB9CE\uC744\uC218\uB85D \uB354 \uC624\uB798 \uAC78\uB9BD\uB2C8\uB2E4.",-1),Bn=n("div",{class:"custom-container warning"},[n("p",{class:"custom-container-title"},"WARNING"),n("p",null,"\uC774 \uC791\uC5C5\uC744 \uC704\uD574\uC11C\uB294 CLI\uB97C \uC0AC\uC6A9\uD574\uC57C \uD569\uB2C8\uB2E4. Python \uACFC TypeScript \uC608\uC81C\uB4E4\uC740 \uBCF4\uC5EC\uC8FC\uAE30 \uC704\uD55C \uBAA9\uC801\uC73C\uB85C CLI\uBCF4\uB2E4 \uD6E8\uC52C \uB290\uB9BD\uB2C8\uB2E4.")],-1),Mn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),zn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana-keygen recover "),n("span",{class:"token string"},"'prompt:?key=0/0'"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Bn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana-keygen recover "),n("span",{class:"token string"},"'prompt:?key=0/0'"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Mn=n("h2",{id:"how-to-generate-a-vanity-address",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-generate-a-vanity-address","aria-hidden":"true"},"#"),s(" How to generate a vanity address")],-1),En=n("p",null,'Vanity publickeys \uB610\uB294 custom addresses\uB294 \uD2B9\uBCC4\uD55C \uBB38\uC790\uB4E4\uB85C \uC2DC\uC791\uD558\uB294 key\uB4E4\uC785\uB2C8\uB2E4. \uC608\uB97C\uB4E4\uC5B4, \uC5B4\uB5A4 \uC0AC\uB78C\uC740 publickey\uAC00 "elv1s" \uB610\uB294 "cook"\uC73C\uB85C \uC2DC\uC791\uD558\uAE38 \uC6D0\uD560 \uC218\uB3C4 \uC788\uC2B5\uB2C8\uB2E4. \uC774\uAC83\uB4E4\uC740 \uB2E4\uB978 \uC0AC\uB78C\uB4E4\uC774 \uC774 key\uAC00 \uB204\uAD6C\uC758 \uAC83\uC778\uC9C0 \uAE30\uC5B5\uD560 \uC218 \uC788\uAC8C \uB3C4\uC640\uC90D\uB2C8\uB2E4. \uC989 \uC774 key\uB97C \uB354 \uC27D\uAC8C \uC2DD\uBCC4 \uAC00\uB2A5\uD558\uAC8C \uB9CC\uB4E4\uC5B4 \uC90D\uB2C8\uB2E4.',-1),Hn=n("p",null,"Note: \uB2F9\uC2E0\uC758 vanity address\uC5D0 \uBB38\uC790\uB4E4\uC774 \uB9CE\uC744\uC218\uB85D \uB354 \uC624\uB798 \uAC78\uB9BD\uB2C8\uB2E4.",-1),Jn=n("div",{class:"custom-container warning"},[n("p",{class:"custom-container-title"},"WARNING"),n("p",null,"\uC774 \uC791\uC5C5\uC744 \uC704\uD574\uC11C\uB294 CLI\uB97C \uC0AC\uC6A9\uD574\uC57C \uD569\uB2C8\uB2E4. Python \uACFC TypeScript \uC608\uC81C\uB4E4\uC740 \uBCF4\uC5EC\uC8FC\uAE30 \uC704\uD55C \uBAA9\uC801\uC73C\uB85C CLI\uBCF4\uB2E4 \uD6E8\uC52C \uB290\uB9BD\uB2C8\uB2E4.")],-1),Un=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"let"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` @@ -290,23 +369,42 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),Rn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),Vn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"while"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token operator"},"!"),s("keypair"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"startsWith"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"elv1s"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),Dn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),Yn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"while"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"str"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},":"),n("span",{class:"token number"},"5"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token operator"},"!="),n("span",{class:"token string"},'"elv1s"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},":"),s(` +`),n("span",{class:"token keyword"},"while"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"str"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},":"),n("span",{class:"token number"},"5"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token operator"},"!="),n("span",{class:"token string"},'"elv1s"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},":"),s(` keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created Keypair with Public Key: {}"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),Nn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"while"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"str"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},":"),n("span",{class:"token number"},"5"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token operator"},"!="),n("span",{class:"token string"},'"elv1s"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},":"),s(` +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created Keypair with Public Key: {}"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),Ln=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` +`),n("span",{class:"token keyword"},"while"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"str"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},":"),n("span",{class:"token number"},"5"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token operator"},"!="),n("span",{class:"token string"},'"elv1s"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},":"),s(` keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),zn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen grind --starts-with e1v1s:1 -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),En=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen grind --starts-with e1v1s:1 -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Hn=n("h2",{id:"how-to-sign-and-verify-messages-with-wallets",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-sign-and-verify-messages-with-wallets","aria-hidden":"true"},"#"),s(" How to sign and verify messages with wallets")],-1),Un=n("p",null,"keypair\uC758 \uC8FC\uB41C \uAE30\uB2A5\uC740 message\uB4E4\uC5D0 \uC11C\uBA85\uD558\uACE0 \uC774 \uC11C\uBA85\uC744 \uAC80\uC99D \uAC00\uB2A5\uD558\uAC8C \uB9CC\uB4DC\uB294 \uAC83\uC785\uB2C8\uB2E4. \uC11C\uBA85\uC5D0 \uB300\uD55C \uAC80\uC99D\uC740 \uC218\uC2E0\uC790\uAC00 \uC774 \uB370\uC774\uD130\uAC00 \uD2B9\uC815 private key\uC758 \uC18C\uC720\uC790\uC5D0 \uC758\uD574 \uC11C\uBA85\uB418\uC5C8\uB2E4\uB294 \uAC83\uC744 \uD655\uC2E0\uD560 \uC218 \uC788\uAC8C \uD574 \uC90D\uB2C8\uB2E4.",-1),Vn=s("\uC774\uAC78 \uD558\uAE30 \uC704\uD574 \uC6B0\uB9AC\uB294 "),Jn={href:"https://www.npmjs.com/package/tweetnacl",target:"_blank",rel:"noopener noreferrer"},Ln=s("TweetNaCl"),Yn=s(" \uB77C\uC774\uBE0C\uB7EC\uB9AC\uB97C import \uD560 \uAC83\uC785\uB2C8\uB2E4."),qn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),qn=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token comment"},"// clang++ vanity_keypair.cpp -o vanity_keypair -std=c++17 -lssl -lcrypto -lsodium"),s(` + +`),n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + `),n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"while"),s(),n("span",{class:"token punctuation"},"("),s("key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"substr"),n("span",{class:"token punctuation"},"("),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"5"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"!="),s(),n("span",{class:"token string"},'"elv1s"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + key_pair `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token punctuation"},"}"),s(` + + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"Created Keypair with Public Key: "'),s(),n("span",{class:"token operator"},"<<"),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br")])],-1),Fn=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token keyword"},"while"),s(),n("span",{class:"token punctuation"},"("),s("key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"substr"),n("span",{class:"token punctuation"},"("),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"5"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"!="),s(),n("span",{class:"token string"},'"elv1s"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + key_pair `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),In=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen grind --starts-with e1v1s:1 +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Xn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen grind --starts-with e1v1s:1 +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Zn=n("h2",{id:"how-to-sign-and-verify-messages-with-wallets",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-sign-and-verify-messages-with-wallets","aria-hidden":"true"},"#"),s(" How to sign and verify messages with wallets")],-1),$n=n("p",null,"keypair\uC758 \uC8FC\uB41C \uAE30\uB2A5\uC740 message\uB4E4\uC5D0 \uC11C\uBA85\uD558\uACE0 \uC774 \uC11C\uBA85\uC744 \uAC80\uC99D \uAC00\uB2A5\uD558\uAC8C \uB9CC\uB4DC\uB294 \uAC83\uC785\uB2C8\uB2E4. \uC11C\uBA85\uC5D0 \uB300\uD55C \uAC80\uC99D\uC740 \uC218\uC2E0\uC790\uAC00 \uC774 \uB370\uC774\uD130\uAC00 \uD2B9\uC815 private key\uC758 \uC18C\uC720\uC790\uC5D0 \uC758\uD574 \uC11C\uBA85\uB418\uC5C8\uB2E4\uB294 \uAC83\uC744 \uD655\uC2E0\uD560 \uC218 \uC788\uAC8C \uD574 \uC90D\uB2C8\uB2E4.",-1),Gn=s("\uC774\uAC78 \uD558\uAE30 \uC704\uD574 \uC6B0\uB9AC\uB294 "),Qn={href:"https://www.npmjs.com/package/tweetnacl",target:"_blank",rel:"noopener noreferrer"},On=s("TweetNaCl"),ns=s(" \uB77C\uC774\uBE0C\uB7EC\uB9AC\uB97C import \uD560 \uAC83\uC785\uB2C8\uB2E4."),ss=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(" nacl "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"tweetnacl"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" decodeUTF8 "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"tweetnacl-util"'),n("span",{class:"token punctuation"},";"),s(` @@ -332,7 +430,7 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("result"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br")])],-1),Fn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" message "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"The quick brown fox jumps over the lazy dog"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br")])],-1),as=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" message "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"The quick brown fox jumps over the lazy dog"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" messageBytes "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"decodeUTF8"),n("span",{class:"token punctuation"},"("),s("message"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" signature "),n("span",{class:"token operator"},"="),s(" nacl"),n("span",{class:"token punctuation"},"."),s("sign"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"detached"),n("span",{class:"token punctuation"},"("),s("messageBytes"),n("span",{class:"token punctuation"},","),s(" keypair"),n("span",{class:"token punctuation"},"."),s("secretKey"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` @@ -343,42 +441,26 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("result"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),In=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" nacl"),n("span",{class:"token punctuation"},"."),s("signing "),n("span",{class:"token keyword"},"import"),s(` VerifyKey -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),ts=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair secret_key `),n("span",{class:"token operator"},"="),s(" "),n("span",{class:"token punctuation"},"["),s(` `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"189"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"224"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"216"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"117"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"173"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"149"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"45"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"73"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"237"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"246"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"15"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"185"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"186"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"82"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"177"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` - `),n("span",{class:"token punctuation"},"]"),s(` - -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"bytes"),n("span",{class:"token punctuation"},"("),s("secret_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -pubkey_bytes `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token builtin"},"bytes"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),s(` -message `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"The quick brown fox jumps over the lazy dog"'),s(` -message_bytes `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token builtin"},"bytes"),n("span",{class:"token punctuation"},"("),s("message"),n("span",{class:"token punctuation"},","),n("span",{class:"token string"},"'utf8'"),n("span",{class:"token punctuation"},")"),s(` -signed_message `),n("span",{class:"token operator"},"="),s(" keypair"),n("span",{class:"token punctuation"},"."),s("sign"),n("span",{class:"token punctuation"},"("),s("message_bytes"),n("span",{class:"token punctuation"},")"),s(` - -verify_sign `),n("span",{class:"token operator"},"="),s(" VerifyKey"),n("span",{class:"token punctuation"},"("),s(` - pubkey_bytes -`),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),s("verify"),n("span",{class:"token punctuation"},"("),s(` - smessage`),n("span",{class:"token operator"},"="),s("message_bytes"),n("span",{class:"token punctuation"},","),s(` - signature`),n("span",{class:"token operator"},"="),s("signed_message"),n("span",{class:"token punctuation"},"."),s(`signature -`),n("span",{class:"token punctuation"},")"),s(` - -`),n("span",{class:"token comment"},"#Returns original message if the signature has not been tampered with"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("verify_sign"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br")])],-1),Xn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("message "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"The quick brown fox jumps over the lazy dog"'),s(` -message_bytes `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token builtin"},"bytes"),n("span",{class:"token punctuation"},"("),s("message"),n("span",{class:"token punctuation"},","),n("span",{class:"token string"},"'utf8'"),n("span",{class:"token punctuation"},")"),s(` -signed_message `),n("span",{class:"token operator"},"="),s(" keypair"),n("span",{class:"token punctuation"},"."),s("sign"),n("span",{class:"token punctuation"},"("),s("message_bytes"),n("span",{class:"token punctuation"},")"),s(` - -verify_sign `),n("span",{class:"token operator"},"="),s(" VerifyKey"),n("span",{class:"token punctuation"},"("),s(` - pubkey_bytes -`),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),s("verify"),n("span",{class:"token punctuation"},"("),s(` - smessage`),n("span",{class:"token operator"},"="),s("message_bytes"),n("span",{class:"token punctuation"},","),s(` - signature`),n("span",{class:"token operator"},"="),s("signed_message"),n("span",{class:"token punctuation"},"."),s(`signature -`),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),Zn=n("h2",{id:"how-to-connect-to-a-wallet",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-connect-to-a-wallet","aria-hidden":"true"},"#"),s(" How to connect to a wallet")],-1),$n=s("Solana\uC758 "),Gn={href:"https://github.com/solana-labs/wallet-adapter",target:"_blank",rel:"noopener noreferrer"},Qn=s("wallet-adapter"),On=s(" \uB77C\uC774\uBE0C\uB7EC\uB9AC\uB4E4\uC740 client-side\uC5D0\uC11C wallet \uC5F0\uACB0 \uAD00\uB9AC\uB97C \uC27D\uAC8C \uD574 \uC90D\uB2C8\uB2E4."),ns=l(`

    React

    \uC694\uAD6C\uB418\uB294 \uC758\uC874\uC131\uB4E4\uC744 \uC124\uCE58\uD558\uAE30 \uC704\uD574 \uC544\uB798\uC758 \uBA85\uB839\uC5B4\uB97C \uC2E4\uD589\uD558\uC138\uC694:

    yarn add @solana/wallet-adapter-react @solana/wallet-adapter-react-ui @solana/wallet-adapter-base @solana/wallet-adapter-wallets
    -

    React\uC758 wallet-adapter \uB77C\uC774\uBE0C\uB7EC\uB9AC\uB4E4\uC740 hook\uB4E4\uACFC useWallet, WalletProvider, useConnection, \uADF8\uB9AC\uACE0 ConnectionProvider\uB85C \uBD88\uB9AC\uB294 Context provider\uB4E4\uC744 \uD1B5\uD574 \uC9C0\uAC11 \uC5F0\uACB0 \uC0C1\uD0DC\uB97C \uC9C0\uC18D\uD558\uACE0 \uC811\uADFC\uD560 \uC218 \uC788\uAC8C \uD574 \uC90D\uB2C8\uB2E4.

    \uCD94\uAC00\uC801\uC73C\uB85C, \uC6B0\uB9AC\uB294 \uC5F0\uACB0 modal\uC758 \uAED0\uB2E4 \uCF30\uB2E4\uD558\uB294 useWalletModal\uC744 \uC0AC\uC6A9\uD574 \uC720\uC800\uB4E4\uC774 \uC5F0\uACB0\uD558\uB3C4\uB85D \uC720\uB3C4\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4. useWalletModal\uC740 @solana/wallet-adapter-react-ui\uC5D0 \uC788\uB294 WalletModalProvider\uB97C \uAC00\uC9C4 \uC571\uC744 \uAC10\uC2F8\uACE0 \uC788\uC2B5\uB2C8\uB2E4. \uC5F0\uACB0 modal\uC740 \uC6B0\uB9AC\uAC00 \uC5F0\uACB0 \uD750\uB984\uC744 \uB2E4\uB8F0 \uC218 \uC788\uAC8C \uD574 \uC904 \uAC83\uC785\uB2C8\uB2E4. \uADF8\uB798\uC11C \uC6B0\uB9AC\uB294 \uC9C0\uAC11\uC774 \uC5F0\uACB0\uB418\uC5C8\uC744 \uB54C \uB3D9\uC548 \uB2E8\uC9C0 \uC218\uC2E0\uD558\uBA74 \uB429\uB2C8\uB2E4. \uC6B0\uB9AC\uB294 userWallet \uC751\uB2F5\uC774 null\uC774 \uC544\uB2CC wallet \uC18D\uC131\uC744 \uAC00\uC9C8 \uB54C, \uC9C0\uAC11\uC774 \uC5F0\uACB0\uB41C \uAC83\uC744 \uC54C \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uBC18\uB300\uB85C, \uB9CC\uC57D \uC774 \uC18D\uC131\uC774 null\uC774\uB77C\uBA74 \uC9C0\uAC11\uC774 \uC5F0\uACB0\uB418\uC9C0 \uC54A\uC740 \uAC83\uC744 \uC54C \uC218 \uC788\uC2B5\uB2C8\uB2E4.

    `,5),ss=n("div",{class:"language-tsx ext-tsx line-numbers-mode"},[n("pre",{class:"language-tsx"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(" React"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token punctuation"},"{"),s(" useMemo"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token constant"},"FC"),n("span",{class:"token punctuation"},","),s(" PropsWithChildren "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"react"'),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token punctuation"},"]"),s(` +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_bytes"),n("span",{class:"token punctuation"},"("),s("secret_key"),n("span",{class:"token punctuation"},")"),s(` +message `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'b"The quick brown fox jumps over the lazy dog"'),s(` +signature `),n("span",{class:"token operator"},"="),s(" keypair"),n("span",{class:"token punctuation"},"."),s("sign_message"),n("span",{class:"token punctuation"},"("),s("message"),n("span",{class:"token punctuation"},")"),s(` +verify_sign `),n("span",{class:"token operator"},"="),s(" signature"),n("span",{class:"token punctuation"},"."),s("verify"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(" message"),n("span",{class:"token punctuation"},")"),s(` + +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("verify_sign"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# bool"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br")])],-1),es=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("message "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'b"The quick brown fox jumps over the lazy dog"'),s(` +signature `),n("span",{class:"token operator"},"="),s(" keypair"),n("span",{class:"token punctuation"},"."),s("sign_message"),n("span",{class:"token punctuation"},"("),s("message"),n("span",{class:"token punctuation"},")"),s(` +verify_sign `),n("span",{class:"token operator"},"="),s(" signature"),n("span",{class:"token punctuation"},"."),s("verify"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(" message"),n("span",{class:"token punctuation"},")"),s(` + +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("verify_sign"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# bool"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br")])],-1),os=n("h2",{id:"how-to-connect-to-a-wallet",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-connect-to-a-wallet","aria-hidden":"true"},"#"),s(" How to connect to a wallet")],-1),cs=s("Solana\uC758 "),ps={href:"https://github.com/solana-labs/wallet-adapter",target:"_blank",rel:"noopener noreferrer"},us=s("wallet-adapter"),ls=s(" \uB77C\uC774\uBE0C\uB7EC\uB9AC\uB4E4\uC740 client-side\uC5D0\uC11C wallet \uC5F0\uACB0 \uAD00\uB9AC\uB97C \uC27D\uAC8C \uD574 \uC90D\uB2C8\uB2E4."),is=u(`

    React

    \uC694\uAD6C\uB418\uB294 \uC758\uC874\uC131\uB4E4\uC744 \uC124\uCE58\uD558\uAE30 \uC704\uD574 \uC544\uB798\uC758 \uBA85\uB839\uC5B4\uB97C \uC2E4\uD589\uD558\uC138\uC694:

    yarn add @solana/wallet-adapter-react @solana/wallet-adapter-react-ui @solana/wallet-adapter-base @solana/wallet-adapter-wallets
    +

    React\uC758 wallet-adapter \uB77C\uC774\uBE0C\uB7EC\uB9AC\uB4E4\uC740 hook\uB4E4\uACFC useWallet, WalletProvider, useConnection, \uADF8\uB9AC\uACE0 ConnectionProvider\uB85C \uBD88\uB9AC\uB294 Context provider\uB4E4\uC744 \uD1B5\uD574 \uC9C0\uAC11 \uC5F0\uACB0 \uC0C1\uD0DC\uB97C \uC9C0\uC18D\uD558\uACE0 \uC811\uADFC\uD560 \uC218 \uC788\uAC8C \uD574 \uC90D\uB2C8\uB2E4.

    \uCD94\uAC00\uC801\uC73C\uB85C, \uC6B0\uB9AC\uB294 \uC5F0\uACB0 modal\uC758 \uAED0\uB2E4 \uCF30\uB2E4\uD558\uB294 useWalletModal\uC744 \uC0AC\uC6A9\uD574 \uC720\uC800\uB4E4\uC774 \uC5F0\uACB0\uD558\uB3C4\uB85D \uC720\uB3C4\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4. useWalletModal\uC740 @solana/wallet-adapter-react-ui\uC5D0 \uC788\uB294 WalletModalProvider\uB97C \uAC00\uC9C4 \uC571\uC744 \uAC10\uC2F8\uACE0 \uC788\uC2B5\uB2C8\uB2E4. \uC5F0\uACB0 modal\uC740 \uC6B0\uB9AC\uAC00 \uC5F0\uACB0 \uD750\uB984\uC744 \uB2E4\uB8F0 \uC218 \uC788\uAC8C \uD574 \uC904 \uAC83\uC785\uB2C8\uB2E4. \uADF8\uB798\uC11C \uC6B0\uB9AC\uB294 \uC9C0\uAC11\uC774 \uC5F0\uACB0\uB418\uC5C8\uC744 \uB54C \uB3D9\uC548 \uB2E8\uC9C0 \uC218\uC2E0\uD558\uBA74 \uB429\uB2C8\uB2E4. \uC6B0\uB9AC\uB294 userWallet \uC751\uB2F5\uC774 null\uC774 \uC544\uB2CC wallet \uC18D\uC131\uC744 \uAC00\uC9C8 \uB54C, \uC9C0\uAC11\uC774 \uC5F0\uACB0\uB41C \uAC83\uC744 \uC54C \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uBC18\uB300\uB85C, \uB9CC\uC57D \uC774 \uC18D\uC131\uC774 null\uC774\uB77C\uBA74 \uC9C0\uAC11\uC774 \uC5F0\uACB0\uB418\uC9C0 \uC54A\uC740 \uAC83\uC744 \uC54C \uC218 \uC788\uC2B5\uB2C8\uB2E4.

    `,5),ks=n("div",{class:"language-tsx ext-tsx line-numbers-mode"},[n("pre",{class:"language-tsx"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(" React"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token punctuation"},"{"),s(" useMemo"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token constant"},"FC"),n("span",{class:"token punctuation"},","),s(" PropsWithChildren "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"react"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` ConnectionProvider`),n("span",{class:"token punctuation"},","),s(` WalletProvider`),n("span",{class:"token punctuation"},","),s(` @@ -460,7 +542,7 @@ verify_sign `),n("span",{class:"token operator"},"="),s(" VerifyKey"),n("span",{ `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br"),n("span",{class:"line-number"},"69"),n("br"),n("span",{class:"line-number"},"70"),n("br"),n("span",{class:"line-number"},"71"),n("br"),n("span",{class:"line-number"},"72"),n("br"),n("span",{class:"line-number"},"73"),n("br"),n("span",{class:"line-number"},"74"),n("br"),n("span",{class:"line-number"},"75"),n("br"),n("span",{class:"line-number"},"76"),n("br"),n("span",{class:"line-number"},"77"),n("br"),n("span",{class:"line-number"},"78"),n("br"),n("span",{class:"line-number"},"79"),n("br"),n("span",{class:"line-number"},"80"),n("br"),n("span",{class:"line-number"},"81"),n("br"),n("span",{class:"line-number"},"82"),n("br")])],-1),as=n("div",{class:"language-tsx ext-tsx line-numbers-mode"},[n("pre",{class:"language-tsx"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token punctuation"},"{"),s(" wallet "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"useWallet"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br"),n("span",{class:"line-number"},"69"),n("br"),n("span",{class:"line-number"},"70"),n("br"),n("span",{class:"line-number"},"71"),n("br"),n("span",{class:"line-number"},"72"),n("br"),n("span",{class:"line-number"},"73"),n("br"),n("span",{class:"line-number"},"74"),n("br"),n("span",{class:"line-number"},"75"),n("br"),n("span",{class:"line-number"},"76"),n("br"),n("span",{class:"line-number"},"77"),n("br"),n("span",{class:"line-number"},"78"),n("br"),n("span",{class:"line-number"},"79"),n("br"),n("span",{class:"line-number"},"80"),n("br"),n("span",{class:"line-number"},"81"),n("br"),n("span",{class:"line-number"},"82"),n("br")])],-1),rs=n("div",{class:"language-tsx ext-tsx line-numbers-mode"},[n("pre",{class:"language-tsx"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token punctuation"},"{"),s(" wallet "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"useWallet"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token punctuation"},"{"),s(" setVisible "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"useWalletModal"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token function-variable function"},"onRequestConnectWallet"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -479,8 +561,8 @@ verify_sign `),n("span",{class:"token operator"},"="),s(" VerifyKey"),n("span",{ `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("p")]),n("span",{class:"token punctuation"},">")]),n("span",{class:"token punctuation"},"{"),s("wallet"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),n("span",{class:"token plain-text"},` `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br")])],-1),ts=l(`

    Vue

    \uC694\uAD6C\uB418\uB294 \uC758\uC874\uC131\uB4E4\uC744 \uC124\uCE58\uD558\uAE30 \uC704\uD574 \uC544\uB798\uC758 \uBA85\uB839\uC5B4\uB97C \uC2E4\uD589\uD558\uC138\uC694:

    npm install solana-wallets-vue @solana/wallet-adapter-wallets
    -
    `,3),es={href:"https://github.com/lorisleiva/solana-wallets-vue",target:"_blank",rel:"noopener noreferrer"},os=s("Solana Wallets Vue"),cs=s(" \uD50C\uB7EC\uADF8\uC778\uC740 \uC6B0\uB9AC\uAC00 \uC9C0\uAC11 \uC800\uC7A5\uC18C\uB97C \uCD08\uAE30\uD654\uD558\uACE0 \uC5B4\uB5A4 \uCEF4\uD3EC\uB10C\uD2B8 \uC548\uC5D0\uC11C\uB3C4 \uC811\uADFC\uD560 \uC218 \uC788\uB294 "),ps=n("code",null,"$wallet",-1),ls=s(" \uAE00\uB85C\uBC8C \uC18D\uC131\uC744 \uC0DD\uC131\uD560 \uC218 \uC788\uAC8C \uD574 \uC90D\uB2C8\uB2E4. \uB2F9\uC2E0\uC774 "),us=n("code",null,"userWallet()",-1),is=s("\uC744 \uC0AC\uC6A9\uD574 \uC5BB\uC744 \uC218 \uC788\uB294 \uBAA8\uB4E0 \uC18D\uC131\uACFC \uBA54\uC18C\uB4DC\uB4E4\uC740 "),ks={href:"https://github.com/lorisleiva/solana-wallets-vue#usewallet-references",target:"_blank",rel:"noopener noreferrer"},rs=s("\uC5EC\uAE30"),bs=s("\uC5D0 \uB098\uC640 \uC788\uC2B5\uB2C8\uB2E4. \uC6B0\uB9AC\uB294 \uB610\uD55C WalletMultiButton \uCEF4\uD3EC\uB10C\uD2B8\uB97C import \uD558\uACE0 render \uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uC774\uAC83\uC740 \uC0AC\uC6A9\uC790\uB4E4\uC774 \uC5F0\uACB0\uD558\uAE30 \uC704\uD55C \uC9C0\uAC11\uC744 \uC120\uD0DD\uD560 \uC218 \uC788\uAC8C \uD574 \uC90D\uB2C8\uB2E4."),ms=n("div",{class:"language-vue ext-vue line-numbers-mode"},[n("pre",{class:"language-vue"},[n("code",null,[n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("script")]),s(),n("span",{class:"token attr-name"},"setup"),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"},[n("span",{class:"token language-javascript"},[s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br")])],-1),bs=u(`

    Vue

    \uC694\uAD6C\uB418\uB294 \uC758\uC874\uC131\uB4E4\uC744 \uC124\uCE58\uD558\uAE30 \uC704\uD574 \uC544\uB798\uC758 \uBA85\uB839\uC5B4\uB97C \uC2E4\uD589\uD558\uC138\uC694:

    npm install solana-wallets-vue @solana/wallet-adapter-wallets
    +
    `,3),ms={href:"https://github.com/lorisleiva/solana-wallets-vue",target:"_blank",rel:"noopener noreferrer"},ds=s("Solana Wallets Vue"),ys=s(" \uD50C\uB7EC\uADF8\uC778\uC740 \uC6B0\uB9AC\uAC00 \uC9C0\uAC11 \uC800\uC7A5\uC18C\uB97C \uCD08\uAE30\uD654\uD558\uACE0 \uC5B4\uB5A4 \uCEF4\uD3EC\uB10C\uD2B8 \uC548\uC5D0\uC11C\uB3C4 \uC811\uADFC\uD560 \uC218 \uC788\uB294 "),gs=n("code",null,"$wallet",-1),hs=s(" \uAE00\uB85C\uBC8C \uC18D\uC131\uC744 \uC0DD\uC131\uD560 \uC218 \uC788\uAC8C \uD574 \uC90D\uB2C8\uB2E4. \uB2F9\uC2E0\uC774 "),ws=n("code",null,"userWallet()",-1),_s=s("\uC744 \uC0AC\uC6A9\uD574 \uC5BB\uC744 \uC218 \uC788\uB294 \uBAA8\uB4E0 \uC18D\uC131\uACFC \uBA54\uC18C\uB4DC\uB4E4\uC740 "),fs={href:"https://github.com/lorisleiva/solana-wallets-vue#usewallet-references",target:"_blank",rel:"noopener noreferrer"},vs=s("\uC5EC\uAE30"),xs=s("\uC5D0 \uB098\uC640 \uC788\uC2B5\uB2C8\uB2E4. \uC6B0\uB9AC\uB294 \uB610\uD55C WalletMultiButton \uCEF4\uD3EC\uB10C\uD2B8\uB97C import \uD558\uACE0 render \uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uC774\uAC83\uC740 \uC0AC\uC6A9\uC790\uB4E4\uC774 \uC5F0\uACB0\uD558\uAE30 \uC704\uD55C \uC9C0\uAC11\uC744 \uC120\uD0DD\uD560 \uC218 \uC788\uAC8C \uD574 \uC90D\uB2C8\uB2E4."),Ks=n("div",{class:"language-vue ext-vue line-numbers-mode"},[n("pre",{class:"language-vue"},[n("code",null,[n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("script")]),s(),n("span",{class:"token attr-name"},"setup"),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"},[n("span",{class:"token language-javascript"},[s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" WalletMultiButton "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"solana-wallets-vue"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` LedgerWalletAdapter`),n("span",{class:"token punctuation"},","),s(` @@ -513,15 +595,15 @@ verify_sign `),n("span",{class:"token operator"},"="),s(" VerifyKey"),n("span",{ `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br")])],-1),ds=n("div",{class:"language-vue ext-vue line-numbers-mode"},[n("pre",{class:"language-vue"},[n("code",null,[n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("script")]),s(),n("span",{class:"token attr-name"},"setup"),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"},[n("span",{class:"token language-javascript"},[s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br")])],-1),Ps=n("div",{class:"language-vue ext-vue line-numbers-mode"},[n("pre",{class:"language-vue"},[n("code",null,[n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("script")]),s(),n("span",{class:"token attr-name"},"setup"),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"},[n("span",{class:"token language-javascript"},[s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" WalletMultiButton "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"solana-wallets-vue"'),n("span",{class:"token punctuation"},";"),s(` `)])]),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("template")]),n("span",{class:"token punctuation"},">")]),s(` `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("wallet-multi-button")]),n("span",{class:"token punctuation"},">")]),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),ys=l(`

    Svelte

    \uC694\uAD6C\uB418\uB294 \uC758\uC874\uC131\uB4E4\uC744 \uC124\uCE58\uD558\uAE30 \uC704\uD574 \uC544\uB798\uC758 \uBA85\uB839\uC5B4\uB97C \uC2E4\uD589\uD558\uC138\uC694:

    npm install @svelte-on-solana/wallet-adapter-core @svelte-on-solana/wallet-adapter-ui @solana/wallet-adapter-base @solana/wallet-adapter-wallets @solana/web3.js
    -
    `,3),gs={href:"https://github.com/svelte-on-solana/wallet-adapter",target:"_blank",rel:"noopener noreferrer"},hs=s("Svelte Wallet Adapter"),ws=s(" \uD328\uD0A4\uC9C0\uB294 \uD504\uB85C\uC81D\uD2B8 \uB0B4\uC758 \uBAA8\uB4E0 JS, TS \uB610\uB294/\uADF8\uB9AC\uACE0 Svelte \uD30C\uC77C\uB4E4\uC5D0\uC11C \uC811\uADFC\uD560 \uC218 \uC788\uB294 Svelte Store ("),_s=n("code",null,"$walletStore",-1),fs=s(")\uC744 \uCD94\uAC00\uD560 \uC218 \uC788\uAC8C \uD574 \uC90D\uB2C8\uB2E4. "),vs={href:"https://github.com/svelte-on-solana/wallet-adapter/blob/master/packages/core/README.md/",target:"_blank",rel:"noopener noreferrer"},xs=s("\uC5EC\uAE30"),Ks=s(" \uC788\uB294 \uB808\uD37C\uB7F0\uC2A4\uB97C \uC0AC\uC6A9\uD574\uC11C \uB2F9\uC2E0\uC740 SSR \uB610\uB294 SPA\uB97C \uC704\uD55C \uC5B4\uB311\uD130\uB97C \uC0AC\uC6A9\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4. UI \uD328\uD0A4\uC9C0\uB294 "),Ws=n("code",null,"",-1),Ps=s(" \uCEF4\uD3EC\uB10C\uD2B8\uB97C \uD3EC\uD568\uD558\uACE0 \uC788\uACE0 \uC774\uAC83\uC740 \uC0AC\uC6A9\uC790\uB4E4\uC774 \uC5F0\uACB0\uD560 \uC9C0\uAC11\uC744 \uC120\uD0DD\uD560 \uC218 \uC788\uAC8C \uD574 \uC90D\uB2C8\uB2E4."),Ss=n("div",{class:"language-html ext-html line-numbers-mode"},[n("pre",{class:"language-html"},[n("code",null,[n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("script")]),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"},[n("span",{class:"token language-javascript"},[s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),Ws=u(`

    Svelte

    \uC694\uAD6C\uB418\uB294 \uC758\uC874\uC131\uB4E4\uC744 \uC124\uCE58\uD558\uAE30 \uC704\uD574 \uC544\uB798\uC758 \uBA85\uB839\uC5B4\uB97C \uC2E4\uD589\uD558\uC138\uC694:

    npm install @svelte-on-solana/wallet-adapter-core @svelte-on-solana/wallet-adapter-ui @solana/wallet-adapter-base @solana/wallet-adapter-wallets @solana/web3.js
    +
    `,3),Ss={href:"https://github.com/svelte-on-solana/wallet-adapter",target:"_blank",rel:"noopener noreferrer"},Cs=s("Svelte Wallet Adapter"),As=s(" \uD328\uD0A4\uC9C0\uB294 \uD504\uB85C\uC81D\uD2B8 \uB0B4\uC758 \uBAA8\uB4E0 JS, TS \uB610\uB294/\uADF8\uB9AC\uACE0 Svelte \uD30C\uC77C\uB4E4\uC5D0\uC11C \uC811\uADFC\uD560 \uC218 \uC788\uB294 Svelte Store ("),js=n("code",null,"$walletStore",-1),Ts=s(")\uC744 \uCD94\uAC00\uD560 \uC218 \uC788\uAC8C \uD574 \uC90D\uB2C8\uB2E4. "),Ds={href:"https://github.com/svelte-on-solana/wallet-adapter/blob/master/packages/core/README.md/",target:"_blank",rel:"noopener noreferrer"},Ns=s("\uC5EC\uAE30"),Rs=s(" \uC788\uB294 \uB808\uD37C\uB7F0\uC2A4\uB97C \uC0AC\uC6A9\uD574\uC11C \uB2F9\uC2E0\uC740 SSR \uB610\uB294 SPA\uB97C \uC704\uD55C \uC5B4\uB311\uD130\uB97C \uC0AC\uC6A9\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4. UI \uD328\uD0A4\uC9C0\uB294 "),zs=n("code",null,"",-1),Bs=s(" \uCEF4\uD3EC\uB10C\uD2B8\uB97C \uD3EC\uD568\uD558\uACE0 \uC788\uACE0 \uC774\uAC83\uC740 \uC0AC\uC6A9\uC790\uB4E4\uC774 \uC5F0\uACB0\uD560 \uC9C0\uAC11\uC744 \uC120\uD0DD\uD560 \uC218 \uC788\uAC8C \uD574 \uC90D\uB2C8\uB2E4."),Ms=n("div",{class:"language-html ext-html line-numbers-mode"},[n("pre",{class:"language-html"},[n("code",null,[n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("script")]),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"},[n("span",{class:"token language-javascript"},[s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" walletStore "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@svelte-on-solana/wallet-adapter-core"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` WalletProvider`),n("span",{class:"token punctuation"},","),s(` @@ -554,7 +636,7 @@ verify_sign `),n("span",{class:"token operator"},"="),s(" VerifyKey"),n("span",{ successfully connected! {:else} `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("WalletMultiButton")]),s(),n("span",{class:"token punctuation"},"/>")]),s(` {/if} -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br")])],-1),As=n("div",{class:"language-html ext-html line-numbers-mode"},[n("pre",{class:"language-html"},[n("code",null,[n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("script")]),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"},[n("span",{class:"token language-javascript"},[s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br")])],-1),Es=n("div",{class:"language-html ext-html line-numbers-mode"},[n("pre",{class:"language-html"},[n("code",null,[n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("script")]),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"},[n("span",{class:"token language-javascript"},[s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" walletStore "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@svelte-on-solana/wallet-adapter-core"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" WalletMultiButton "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@svelte-on-solana/wallet-adapter-ui"'),n("span",{class:"token punctuation"},";"),s(` `)])]),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` @@ -563,4 +645,4 @@ successfully connected! {:else} successfully connected! {:else} `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("WalletMultiButton")]),s(),n("span",{class:"token punctuation"},"/>")]),s(` {/if} -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br")])],-1);function Cs(js,Ts){const e=p("SolanaCodeGroupItem"),o=p("SolanaCodeGroup"),c=p("ExternalLinkIcon");return i(),k(r,null,[m,d,y,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[g]),preview:a(()=>[h]),_:1}),t(e,{title:"Python"},{default:a(()=>[w]),preview:a(()=>[_]),_:1}),t(e,{title:"Rust"},{default:a(()=>[f]),preview:a(()=>[v]),_:1}),t(e,{title:"CLI"},{default:a(()=>[x]),preview:a(()=>[K]),_:1})]),_:1}),W,P,S,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[A]),preview:a(()=>[C]),_:1}),t(e,{title:"Python"},{default:a(()=>[j]),preview:a(()=>[T]),_:1}),t(e,{title:"Rust"},{default:a(()=>[B]),preview:a(()=>[M]),_:1}),t(e,{title:"CLI"},{default:a(()=>[R]),preview:a(()=>[D]),_:1})]),_:1}),N,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[z]),preview:a(()=>[E]),_:1}),t(e,{title:"Python"},{default:a(()=>[H]),preview:a(()=>[U]),_:1}),t(e,{title:"Rust"},{default:a(()=>[V]),preview:a(()=>[J]),_:1})]),_:1}),L,Y,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[q]),preview:a(()=>[F]),_:1}),t(e,{title:"Python"},{default:a(()=>[I]),preview:a(()=>[X]),_:1}),t(e,{title:"CLI"},{default:a(()=>[Z]),preview:a(()=>[$]),_:1})]),_:1}),G,Q,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[O]),preview:a(()=>[nn]),_:1}),t(e,{title:"Python",active:""},{default:a(()=>[sn]),preview:a(()=>[an]),_:1}),t(e,{title:"Rust",active:""},{default:a(()=>[tn]),preview:a(()=>[en]),_:1})]),_:1}),on,cn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[pn]),preview:a(()=>[ln]),_:1}),t(e,{title:"Python"},{default:a(()=>[un]),preview:a(()=>[kn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[rn]),preview:a(()=>[bn]),_:1})]),_:1}),mn,dn,yn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[gn]),preview:a(()=>[hn]),_:1}),t(e,{title:"Python"},{default:a(()=>[wn]),preview:a(()=>[_n]),_:1}),t(e,{title:"CLI"},{default:a(()=>[fn]),preview:a(()=>[vn]),_:1})]),_:1}),xn,Kn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Wn]),preview:a(()=>[Pn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[Sn]),preview:a(()=>[An]),_:1})]),_:1}),Cn,jn,Tn,Bn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Mn]),preview:a(()=>[Rn]),_:1}),t(e,{title:"Python"},{default:a(()=>[Dn]),preview:a(()=>[Nn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[zn]),preview:a(()=>[En]),_:1})]),_:1}),Hn,Un,n("p",null,[Vn,n("a",Jn,[Ln,t(c)]),Yn]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[qn]),preview:a(()=>[Fn]),_:1}),t(e,{title:"Python"},{default:a(()=>[In]),preview:a(()=>[Xn]),_:1})]),_:1}),Zn,n("p",null,[$n,n("a",Gn,[Qn,t(c)]),On]),ns,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[ss]),preview:a(()=>[as]),_:1})]),_:1}),ts,n("p",null,[n("a",es,[os,t(c)]),cs,ps,ls,us,is,n("a",ks,[rs,t(c)]),bs]),t(o,null,{default:a(()=>[t(e,{title:"Vue",active:""},{default:a(()=>[ms]),preview:a(()=>[ds]),_:1})]),_:1}),ys,n("p",null,[n("a",gs,[hs,t(c)]),ws,_s,fs,n("a",vs,[xs,t(c)]),Ks,Ws,Ps]),t(o,null,{default:a(()=>[t(e,{title:"Svelte",active:""},{default:a(()=>[Ss]),preview:a(()=>[As]),_:1})]),_:1})],64)}var Ms=u(b,[["render",Cs]]);export{Ms as default}; +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br")])],-1);function Hs(Js,Us){const e=p("SolanaCodeGroupItem"),o=p("SolanaCodeGroup"),c=p("ExternalLinkIcon");return i(),k(r,null,[m,d,y,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[g]),preview:a(()=>[h]),_:1}),t(e,{title:"Python"},{default:a(()=>[w]),preview:a(()=>[_]),_:1}),t(e,{title:"C++"},{default:a(()=>[f]),preview:a(()=>[v]),_:1}),t(e,{title:"Rust"},{default:a(()=>[x]),preview:a(()=>[K]),_:1}),t(e,{title:"CLI"},{default:a(()=>[P]),preview:a(()=>[W]),_:1})]),_:1}),S,C,A,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[j]),preview:a(()=>[T]),_:1}),t(e,{title:"Python"},{default:a(()=>[D]),preview:a(()=>[N]),_:1}),t(e,{title:"C++"},{default:a(()=>[R]),preview:a(()=>[z]),_:1}),t(e,{title:"Rust"},{default:a(()=>[B]),preview:a(()=>[M]),_:1}),t(e,{title:"CLI"},{default:a(()=>[E]),preview:a(()=>[H]),_:1})]),_:1}),J,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[U]),preview:a(()=>[V]),_:1}),t(e,{title:"Python"},{default:a(()=>[Y]),preview:a(()=>[L]),_:1}),t(e,{title:"Rust"},{default:a(()=>[q]),preview:a(()=>[F]),_:1})]),_:1}),I,X,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Z]),preview:a(()=>[$]),_:1}),t(e,{title:"Python"},{default:a(()=>[G]),preview:a(()=>[Q]),_:1}),t(e,{title:"C++"},{default:a(()=>[O]),preview:a(()=>[nn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[sn]),preview:a(()=>[an]),_:1})]),_:1}),tn,en,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[on]),preview:a(()=>[cn]),_:1}),t(e,{title:"Python",active:""},{default:a(()=>[pn]),preview:a(()=>[un]),_:1}),t(e,{title:"C++",active:""},{default:a(()=>[ln]),preview:a(()=>[kn]),_:1}),t(e,{title:"Rust",active:""},{default:a(()=>[rn]),preview:a(()=>[bn]),_:1})]),_:1}),mn,dn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[yn]),preview:a(()=>[gn]),_:1}),t(e,{title:"Python"},{default:a(()=>[hn]),preview:a(()=>[wn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[_n]),preview:a(()=>[fn]),_:1})]),_:1}),vn,xn,Kn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Pn]),preview:a(()=>[Wn]),_:1}),t(e,{title:"Python"},{default:a(()=>[Sn]),preview:a(()=>[Cn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[An]),preview:a(()=>[jn]),_:1})]),_:1}),Tn,Dn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Nn]),preview:a(()=>[Rn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[zn]),preview:a(()=>[Bn]),_:1})]),_:1}),Mn,En,Hn,Jn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Un]),preview:a(()=>[Vn]),_:1}),t(e,{title:"Python"},{default:a(()=>[Yn]),preview:a(()=>[Ln]),_:1}),t(e,{title:"C++"},{default:a(()=>[qn]),preview:a(()=>[Fn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[In]),preview:a(()=>[Xn]),_:1})]),_:1}),Zn,$n,n("p",null,[Gn,n("a",Qn,[On,t(c)]),ns]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[ss]),preview:a(()=>[as]),_:1}),t(e,{title:"Python"},{default:a(()=>[ts]),preview:a(()=>[es]),_:1})]),_:1}),os,n("p",null,[cs,n("a",ps,[us,t(c)]),ls]),is,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[ks]),preview:a(()=>[rs]),_:1})]),_:1}),bs,n("p",null,[n("a",ms,[ds,t(c)]),ys,gs,hs,ws,_s,n("a",fs,[vs,t(c)]),xs]),t(o,null,{default:a(()=>[t(e,{title:"Vue",active:""},{default:a(()=>[Ks]),preview:a(()=>[Ps]),_:1})]),_:1}),Ws,n("p",null,[n("a",Ss,[Cs,t(c)]),As,js,Ts,n("a",Ds,[Ns,t(c)]),Rs,zs,Bs]),t(o,null,{default:a(()=>[t(e,{title:"Svelte",active:""},{default:a(()=>[Ms]),preview:a(()=>[Es]),_:1})]),_:1})],64)}var Ys=l(b,[["render",Hs]]);export{Ys as default}; diff --git a/docs/.vuepress/dist/assets/keypairs-and-wallets.html.f48d6797.js b/docs/.vuepress/dist/assets/keypairs-and-wallets.html.ad78d040.js similarity index 98% rename from docs/.vuepress/dist/assets/keypairs-and-wallets.html.f48d6797.js rename to docs/.vuepress/dist/assets/keypairs-and-wallets.html.ad78d040.js index 4cd2e2b31..a4eb69874 100644 --- a/docs/.vuepress/dist/assets/keypairs-and-wallets.html.f48d6797.js +++ b/docs/.vuepress/dist/assets/keypairs-and-wallets.html.ad78d040.js @@ -1 +1 @@ -const t={key:"v-7ff81144",path:"/vi/references/keypairs-and-wallets.html",title:"C\u1EB7p kho\xE1 v\xE0 V\xED",lang:"vi-VN",frontmatter:{title:"C\u1EB7p kho\xE1 v\xE0 V\xED",head:[["meta",{name:"title",content:"To\xE0n t\u1EADp Solana | C\u1EB7p kho\xE1 v\xE0 V\xED"}],["meta",{name:"og:title",content:"To\xE0n t\u1EADp Solana | C\u1EB7p kho\xE1 v\xE0 V\xED"}],["meta",{name:"description",content:"T\xECm hi\u1EC3u v\u1EC1 C\u1EB7p kho\xE1 v\xE0 V\xED, k\xFD v\xE0 x\xE1c nh\u1EADn tin nh\u1EAFn, c\u0169ng nh\u01B0 c\xE1c t\xE0i li\u1EC7u tham kh\u1EA3o kh\xE1c cho l\u1EADp tr\xECnh tr\xEAn Solana trong To\xE0n t\u1EADp Solana."}],["meta",{name:"og:description",content:"T\xECm hi\u1EC3u v\u1EC1 C\u1EB7p kho\xE1 v\xE0 V\xED, k\xFD v\xE0 x\xE1c nh\u1EADn tin nh\u1EAFn, c\u0169ng nh\u01B0 c\xE1c t\xE0i li\u1EC7u tham kh\u1EA3o kh\xE1c cho l\u1EADp tr\xECnh tr\xEAn Solana trong To\xE0n t\u1EADp Solana."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 sinh C\u1EB7p kho\xE1",slug:"lam-the-nao-\u0111e-sinh-cap-khoa",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 ph\u1EE5c h\u1ED3i m\u1ED9t C\u1EB7p kho\xE1 t\u1EEB kho\xE1 ri\xEAng t\u01B0",slug:"lam-the-nao-\u0111e-phuc-hoi-mot-cap-khoa-tu-khoa-rieng-tu",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 ki\u1EC3m tra m\u1ED9t c\u1EB7p kho\xE1",slug:"lam-the-nao-\u0111e-kiem-tra-mot-cap-khoa",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 ki\u1EC3m tra n\u1EBFu m\u1ED9t kho\xE1 c\xF4ng khai kh\xF4ng t\u1ED3n t\u1EA1i kho\xE1 ri\xEAng t\u01B0 t\u01B0\u01A1ng \u1EE8ng",slug:"lam-the-nao-\u0111e-kiem-tra-neu-mot-khoa-cong-khai-khong-ton-tai-khoa-rieng-tu-tuong-ung",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 sinh ra c\u1EE5m mnemonic",slug:"lam-the-nao-\u0111e-sinh-ra-cum-mnemonic",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 ph\u1EE5c h\u1ED3i l\u1EA1i c\u1EB7p kho\xE1 t\u1EEB c\u1EE5m mnemonic",slug:"lam-the-nao-\u0111e-phuc-hoi-lai-cap-khoa-tu-cum-mnemonic",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 sinh m\u1ED9t \u0111\u1ECBa ch\u1EC9 danh ngh\u0129a",slug:"lam-the-nao-\u0111e-sinh-mot-\u0111ia-chi-danh-nghia",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o k\xFD v\xE0 ki\u1EC3m tra tinh nh\u1EAFn b\u1EB1ng v\xED",slug:"lam-the-nao-ky-va-kiem-tra-tinh-nhan-bang-vi",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 k\u1EBFt n\u1ED1i v\xED",slug:"lam-the-nao-\u0111e-ket-noi-vi",children:[{level:3,title:"React",slug:"react",children:[]},{level:3,title:"Vue",slug:"vue",children:[]},{level:3,title:"Svelte",slug:"svelte",children:[]}]}],git:{updatedTime:1658932681e3},filePathRelative:"vi/references/keypairs-and-wallets.md"};export{t as data}; +const t={key:"v-7ff81144",path:"/vi/references/keypairs-and-wallets.html",title:"C\u1EB7p kho\xE1 v\xE0 V\xED",lang:"vi-VN",frontmatter:{title:"C\u1EB7p kho\xE1 v\xE0 V\xED",head:[["meta",{name:"title",content:"To\xE0n t\u1EADp Solana | C\u1EB7p kho\xE1 v\xE0 V\xED"}],["meta",{name:"og:title",content:"To\xE0n t\u1EADp Solana | C\u1EB7p kho\xE1 v\xE0 V\xED"}],["meta",{name:"description",content:"T\xECm hi\u1EC3u v\u1EC1 C\u1EB7p kho\xE1 v\xE0 V\xED, k\xFD v\xE0 x\xE1c nh\u1EADn tin nh\u1EAFn, c\u0169ng nh\u01B0 c\xE1c t\xE0i li\u1EC7u tham kh\u1EA3o kh\xE1c cho l\u1EADp tr\xECnh tr\xEAn Solana trong To\xE0n t\u1EADp Solana."}],["meta",{name:"og:description",content:"T\xECm hi\u1EC3u v\u1EC1 C\u1EB7p kho\xE1 v\xE0 V\xED, k\xFD v\xE0 x\xE1c nh\u1EADn tin nh\u1EAFn, c\u0169ng nh\u01B0 c\xE1c t\xE0i li\u1EC7u tham kh\u1EA3o kh\xE1c cho l\u1EADp tr\xECnh tr\xEAn Solana trong To\xE0n t\u1EADp Solana."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 sinh C\u1EB7p kho\xE1",slug:"lam-the-nao-\u0111e-sinh-cap-khoa",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 ph\u1EE5c h\u1ED3i m\u1ED9t C\u1EB7p kho\xE1 t\u1EEB kho\xE1 ri\xEAng t\u01B0",slug:"lam-the-nao-\u0111e-phuc-hoi-mot-cap-khoa-tu-khoa-rieng-tu",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 ki\u1EC3m tra m\u1ED9t c\u1EB7p kho\xE1",slug:"lam-the-nao-\u0111e-kiem-tra-mot-cap-khoa",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 ki\u1EC3m tra n\u1EBFu m\u1ED9t kho\xE1 c\xF4ng khai kh\xF4ng t\u1ED3n t\u1EA1i kho\xE1 ri\xEAng t\u01B0 t\u01B0\u01A1ng \u1EE8ng",slug:"lam-the-nao-\u0111e-kiem-tra-neu-mot-khoa-cong-khai-khong-ton-tai-khoa-rieng-tu-tuong-ung",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 sinh ra c\u1EE5m mnemonic",slug:"lam-the-nao-\u0111e-sinh-ra-cum-mnemonic",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 ph\u1EE5c h\u1ED3i l\u1EA1i c\u1EB7p kho\xE1 t\u1EEB c\u1EE5m mnemonic",slug:"lam-the-nao-\u0111e-phuc-hoi-lai-cap-khoa-tu-cum-mnemonic",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 sinh m\u1ED9t \u0111\u1ECBa ch\u1EC9 danh ngh\u0129a",slug:"lam-the-nao-\u0111e-sinh-mot-\u0111ia-chi-danh-nghia",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o k\xFD v\xE0 ki\u1EC3m tra tinh nh\u1EAFn b\u1EB1ng v\xED",slug:"lam-the-nao-ky-va-kiem-tra-tinh-nhan-bang-vi",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 k\u1EBFt n\u1ED1i v\xED",slug:"lam-the-nao-\u0111e-ket-noi-vi",children:[{level:3,title:"React",slug:"react",children:[]},{level:3,title:"Vue",slug:"vue",children:[]},{level:3,title:"Svelte",slug:"svelte",children:[]}]}],git:{updatedTime:1676666728e3},filePathRelative:"vi/references/keypairs-and-wallets.md"};export{t as data}; diff --git a/docs/.vuepress/dist/assets/keypairs-and-wallets.html.08dc2fba.js b/docs/.vuepress/dist/assets/keypairs-and-wallets.html.ad81e611.js similarity index 97% rename from docs/.vuepress/dist/assets/keypairs-and-wallets.html.08dc2fba.js rename to docs/.vuepress/dist/assets/keypairs-and-wallets.html.ad81e611.js index d9f32f5f0..0a341c46a 100644 --- a/docs/.vuepress/dist/assets/keypairs-and-wallets.html.08dc2fba.js +++ b/docs/.vuepress/dist/assets/keypairs-and-wallets.html.ad81e611.js @@ -1 +1 @@ -const e={key:"v-48d4f310",path:"/kr/references/keypairs-and-wallets.html",title:"Keypairs and Wallets",lang:"kr-KR",frontmatter:{title:"Keypairs and Wallets",head:[["meta",{name:"title",content:"Solana Cookbook | Keypairs and Wallets"}],["meta",{name:"og:title",content:"Solana Cookbook | Keypairs and Wallets"}],["meta",{name:"description",content:"Learn about Keypairs and Wallets, Signing and Verifying Messages and more references for Building on Solana at The Solana cookbook."}],["meta",{name:"og:description",content:"Learn about Keypairs and Wallets, Signing and Verifying Messages and more references for Building on Solana at The Solana cookbook."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"How to generate a new Keypair",slug:"how-to-generate-a-new-keypair",children:[]},{level:2,title:"How to restore a Keypair from a secret",slug:"how-to-restore-a-keypair-from-a-secret",children:[]},{level:2,title:"How to verify a Keypair",slug:"how-to-verify-a-keypair",children:[]},{level:2,title:"How to check if a public key has an associated private key",slug:"how-to-check-if-a-public-key-has-an-associated-private-key",children:[]},{level:2,title:"How to generate a mnemonic phrase",slug:"how-to-generate-a-mnemonic-phrase",children:[]},{level:2,title:"How to restore a Keypair from a mnemonic phrase",slug:"how-to-restore-a-keypair-from-a-mnemonic-phrase",children:[]},{level:2,title:"How to generate a vanity address",slug:"how-to-generate-a-vanity-address",children:[]},{level:2,title:"How to sign and verify messages with wallets",slug:"how-to-sign-and-verify-messages-with-wallets",children:[]},{level:2,title:"How to connect to a wallet",slug:"how-to-connect-to-a-wallet",children:[{level:3,title:"React",slug:"react",children:[]},{level:3,title:"Vue",slug:"vue",children:[]},{level:3,title:"Svelte",slug:"svelte",children:[]}]}],git:{updatedTime:1672765954e3},filePathRelative:"kr/references/keypairs-and-wallets.md"};export{e as data}; +const e={key:"v-48d4f310",path:"/kr/references/keypairs-and-wallets.html",title:"Keypairs and Wallets",lang:"kr-KR",frontmatter:{title:"Keypairs and Wallets",head:[["meta",{name:"title",content:"Solana Cookbook | Keypairs and Wallets"}],["meta",{name:"og:title",content:"Solana Cookbook | Keypairs and Wallets"}],["meta",{name:"description",content:"Learn about Keypairs and Wallets, Signing and Verifying Messages and more references for Building on Solana at The Solana cookbook."}],["meta",{name:"og:description",content:"Learn about Keypairs and Wallets, Signing and Verifying Messages and more references for Building on Solana at The Solana cookbook."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"How to generate a new Keypair",slug:"how-to-generate-a-new-keypair",children:[]},{level:2,title:"How to restore a Keypair from a secret",slug:"how-to-restore-a-keypair-from-a-secret",children:[]},{level:2,title:"How to verify a Keypair",slug:"how-to-verify-a-keypair",children:[]},{level:2,title:"How to check if a public key has an associated private key",slug:"how-to-check-if-a-public-key-has-an-associated-private-key",children:[]},{level:2,title:"How to generate a mnemonic phrase",slug:"how-to-generate-a-mnemonic-phrase",children:[]},{level:2,title:"How to restore a Keypair from a mnemonic phrase",slug:"how-to-restore-a-keypair-from-a-mnemonic-phrase",children:[]},{level:2,title:"How to generate a vanity address",slug:"how-to-generate-a-vanity-address",children:[]},{level:2,title:"How to sign and verify messages with wallets",slug:"how-to-sign-and-verify-messages-with-wallets",children:[]},{level:2,title:"How to connect to a wallet",slug:"how-to-connect-to-a-wallet",children:[{level:3,title:"React",slug:"react",children:[]},{level:3,title:"Vue",slug:"vue",children:[]},{level:3,title:"Svelte",slug:"svelte",children:[]}]}],git:{updatedTime:1676666728e3},filePathRelative:"kr/references/keypairs-and-wallets.md"};export{e as data}; diff --git a/docs/.vuepress/dist/assets/keypairs-and-wallets.html.9ebf8bd5.js b/docs/.vuepress/dist/assets/keypairs-and-wallets.html.b8096ec4.js similarity index 74% rename from docs/.vuepress/dist/assets/keypairs-and-wallets.html.9ebf8bd5.js rename to docs/.vuepress/dist/assets/keypairs-and-wallets.html.b8096ec4.js index 530820285..f51837aa4 100644 --- a/docs/.vuepress/dist/assets/keypairs-and-wallets.html.9ebf8bd5.js +++ b/docs/.vuepress/dist/assets/keypairs-and-wallets.html.b8096ec4.js @@ -1,24 +1,39 @@ -import{_ as u,r as p,o as i,c as r,b as t,w as a,a as n,F as k,d as s,e as l}from"./app.cfdf84e7.js";const b={},m=n("h1",{id:"schlusselpaare-und-brieftaschen",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#schlusselpaare-und-brieftaschen","aria-hidden":"true"},"#"),s(" Schl\xFCsselpaare und Brieftaschen")],-1),d=n("h2",{id:"so-generieren-sie-ein-neues-schlusselpaar",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#so-generieren-sie-ein-neues-schlusselpaar","aria-hidden":"true"},"#"),s(" So generieren Sie ein neues Schl\xFCsselpaar")],-1),g=n("p",null,"Viele der verschiedenen Aktionen k\xF6nnen Sie mit den verschiedenen Solana durchf\xFChren Bibliotheken erfordern ein Schl\xFCsselpaar oder eine Brieftasche. Wenn Sie eine Verbindung zu einer Brieftasche (Wallet), m\xFCssen Sie sich keine Sorgen machen. Wenn Sie jedoch ein Schl\xFCsselpaar ben\xF6tigen, m\xFCssen Sie eines generieren.",-1),y=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +import{_ as l,r as p,o as i,c as r,b as t,w as a,a as n,F as k,d as s,e as u}from"./app.2fbb9e96.js";const b={},m=n("h1",{id:"schlusselpaare-und-brieftaschen",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#schlusselpaare-und-brieftaschen","aria-hidden":"true"},"#"),s(" Schl\xFCsselpaare und Brieftaschen")],-1),d=n("h2",{id:"so-generieren-sie-ein-neues-schlusselpaar",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#so-generieren-sie-ein-neues-schlusselpaar","aria-hidden":"true"},"#"),s(" So generieren Sie ein neues Schl\xFCsselpaar")],-1),y=n("p",null,"Viele der verschiedenen Aktionen k\xF6nnen Sie mit den verschiedenen Solana durchf\xFChren Bibliotheken erfordern ein Schl\xFCsselpaar oder eine Brieftasche. Wenn Sie eine Verbindung zu einer Brieftasche (Wallet), m\xFCssen Sie sich keine Sorgen machen. Wenn Sie jedoch ein Schl\xFCsselpaar ben\xF6tigen, m\xFCssen Sie eines generieren.",-1),g=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"let"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br")])],-1),h=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),w=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),w=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),f=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),_=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("signature"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),_=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token comment"},"// clang++ generate_keypair.cpp -o generate_keypair -std=c++17 -lssl -lcrypto -lsodium"),s(` + +`),n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + `),n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"auto"),s(" public_key "),n("span",{class:"token operator"},"="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"public_key = "'),s(),n("span",{class:"token operator"},"<<"),s(" public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"return"),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br")])],-1),v=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),x=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("signature"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"let"),s(" wallet "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br")])],-1),v=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" wallet "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),x=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s(`$ solana-keygen new +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br")])],-1),K=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" wallet "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),S=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s(`$ solana-keygen new `),n("span",{class:"token comment"},"# pubkey: 9ZNTfG4NyQgxy2SWjSiQoUyBPEvXT2xo7fKc5hPYYJ7b"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),S=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen new -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),K=n("h2",{id:"so-stellen-sie-ein-schlusselpaar-aus-einem-geheimnis-wieder-her",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#so-stellen-sie-ein-schlusselpaar-aus-einem-geheimnis-wieder-her","aria-hidden":"true"},"#"),s(" So stellen Sie ein Schl\xFCsselpaar aus einem Geheimnis wieder her")],-1),W=n("p",null,"Wenn Sie Ihr Geheimnis bereits haben, k\xF6nnen Sie Ihr Schl\xFCsselpaar aus dem Geheimnis beziehen um Ihre dApp zu testen.",-1),P=n("ol",null,[n("li",null,"Aus Bytes")],-1),z=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),W=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen new +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),P=n("h2",{id:"so-stellen-sie-ein-schlusselpaar-aus-einem-geheimnis-wieder-her",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#so-stellen-sie-ein-schlusselpaar-aus-einem-geheimnis-wieder-her","aria-hidden":"true"},"#"),s(" So stellen Sie ein Schl\xFCsselpaar aus einem Geheimnis wieder her")],-1),z=n("p",null,"Wenn Sie Ihr Geheimnis bereits haben, k\xF6nnen Sie Ihr Schl\xFCsselpaar aus dem Geheimnis beziehen um Ihre dApp zu testen.",-1),A=n("ol",null,[n("li",null,"Aus Bytes")],-1),B=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSecretKey"),n("span",{class:"token punctuation"},"("),s(` @@ -30,7 +45,7 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br")])],-1),A=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSecretKey"),n("span",{class:"token punctuation"},"("),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br")])],-1),C=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSecretKey"),n("span",{class:"token punctuation"},"("),s(` Uint8Array`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"["),s(` `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"189"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"224"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"216"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"117"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"173"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"149"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"45"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"73"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"237"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"246"),n("span",{class:"token punctuation"},","),s(` @@ -38,7 +53,7 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),B=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),j=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair secret_key`),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"["),s(` `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(` @@ -47,17 +62,40 @@ secret_key`),n("span",{class:"token operator"},"="),s(),n("span",{class:"token p `),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"]"),s(` -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"bytes"),n("span",{class:"token punctuation"},"("),s("secret_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created Keypair with Public Key: {}"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),C=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("secret_key"),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"["),s(` +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_bytes"),n("span",{class:"token punctuation"},"("),s("secret_key"),n("span",{class:"token punctuation"},")"),s(` +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created Keypair with Public Key: {}"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),D=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("secret_key"),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"["),s(` `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"189"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"224"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"216"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"117"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"173"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"149"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"45"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"73"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"237"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"246"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"15"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"185"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"186"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"82"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"177"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"]"),s(` -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"bytes"),n("span",{class:"token punctuation"},"("),s("secret_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),j=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("signature"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"Signer"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_bytes"),n("span",{class:"token punctuation"},"("),s("secret_key"),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),T=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token comment"},"// clang++ keypair_from_seed.cpp -o keypair_from_seed -std=c++17 -lssl -lcrypto -lsodium"),s(` + +`),n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + `),n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token keyword"},"uint8_t"),s(" bytes"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},"]"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"{"),s(` + `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(` + `),n("span",{class:"token number"},"189"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"224"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"216"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"117"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"173"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"149"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"45"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"73"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"237"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"246"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"15"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"185"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"186"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"82"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"177"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(` + `),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(` + `),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` + `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` + Keypair key_pair `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"from_seed"),n("span",{class:"token punctuation"},"("),s("bytes"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"Created Keypair with Public Key: "'),s(),n("span",{class:"token operator"},"<<"),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br")])],-1),R=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token keyword"},"uint8_t"),s(" secret_key"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},"]"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"{"),s(` +`),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(` +`),n("span",{class:"token number"},"189"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"224"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"216"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"117"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"173"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"149"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"45"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"73"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"237"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"246"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"15"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"185"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"186"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"82"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"177"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(` +`),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(` +`),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` +`),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` +Keypair key_pair `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"from_seed"),n("span",{class:"token punctuation"},"("),s("secret_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),N=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("signature"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"Signer"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"let"),s(" secret_key"),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token punctuation"},"["),n("span",{class:"token keyword"},"u8"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token number"},"64"),n("span",{class:"token punctuation"},"]"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"["),s(` @@ -72,7 +110,7 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token macro property"},"println!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created keypair: {}"'),n("span",{class:"token punctuation"},","),s(" pubkey"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br")])],-1),T=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" secret_key"),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token punctuation"},"["),n("span",{class:"token keyword"},"u8"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token number"},"64"),n("span",{class:"token punctuation"},"]"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"["),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br")])],-1),E=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" secret_key"),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token punctuation"},"["),n("span",{class:"token keyword"},"u8"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token number"},"64"),n("span",{class:"token punctuation"},"]"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"["),s(` `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"189"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"224"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"216"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"117"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"173"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"149"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"45"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"73"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"237"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"246"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"15"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"185"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"186"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"82"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"177"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(` @@ -80,9 +118,9 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"let"),s(" wallet "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from_bytes"),n("span",{class:"token punctuation"},"("),n("span",{class:"token operator"},"&"),s("secret_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),D=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# input your secret into the Keypath listed under solana config get"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),M=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# input your secret into the Keypath listed under solana config get"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),R=n("ol",{start:"2"},[n("li",null,"Aus Base58 String")],-1),N=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),M=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# input your secret into the Keypath listed under solana config get"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),V=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# input your secret into the Keypath listed under solana config get"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),J=n("ol",{start:"2"},[n("li",null,"Aus Base58 String")],-1),U=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" bs58 "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"bs58"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -92,20 +130,19 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),E=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSecretKey"),n("span",{class:"token punctuation"},"("),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),H=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSecretKey"),n("span",{class:"token punctuation"},"("),s(` bs58`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"decode"),n("span",{class:"token punctuation"},"("),s(` `),n("span",{class:"token string"},'"5MaiiCavjCmn9Hs1o3eznqDEhRwxo7pXiAYez7keQUviUkauRiTMD8DrESdrNjN8zd9mTmVhRvBJeg5vhyvgrAhG"'),s(` `),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br")])],-1),V=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(` base58 -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br")])],-1),Y=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair b58_string `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"5MaiiCavjCmn9Hs1o3eznqDEhRwxo7pXiAYez7keQUviUkauRiTMD8DrESdrNjN8zd9mTmVhRvBJeg5vhyvgrAhG"'),s(` -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),s("base58"),n("span",{class:"token punctuation"},"."),s("b58decode"),n("span",{class:"token punctuation"},"("),s("b58_string"),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created Keypair with Public Key: {}"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),U=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("b58_string "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"5MaiiCavjCmn9Hs1o3eznqDEhRwxo7pXiAYez7keQUviUkauRiTMD8DrESdrNjN8zd9mTmVhRvBJeg5vhyvgrAhG"'),s(` -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),s("base58"),n("span",{class:"token punctuation"},"."),s("b58decode"),n("span",{class:"token punctuation"},"("),s("b58_string"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),J=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("signature"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"Signer"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_string"),n("span",{class:"token punctuation"},"("),s("b58_string"),n("span",{class:"token punctuation"},")"),s(` +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created Keypair with Public Key: {}"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br")])],-1),L=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("b58_string "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"5MaiiCavjCmn9Hs1o3eznqDEhRwxo7pXiAYez7keQUviUkauRiTMD8DrESdrNjN8zd9mTmVhRvBJeg5vhyvgrAhG"'),s(` +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_string"),n("span",{class:"token punctuation"},"("),s("b58_string"),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),F=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("signature"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"Signer"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"let"),s(" wallet "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from_base58_string"),n("span",{class:"token punctuation"},"("),s(` @@ -114,10 +151,10 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token keyword"},"let"),s(" pubkey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Signer"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token operator"},"&"),s("wallet"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token macro property"},"println!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created keypair: {}"'),n("span",{class:"token punctuation"},","),s(" pubkey"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br")])],-1),H=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" wallet "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from_base58_string"),n("span",{class:"token punctuation"},"("),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br")])],-1),q=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" wallet "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from_base58_string"),n("span",{class:"token punctuation"},"("),s(` `),n("span",{class:"token string"},'"5MaiiCavjCmn9Hs1o3eznqDEhRwxo7pXiAYez7keQUviUkauRiTMD8DrESdrNjN8zd9mTmVhRvBJeg5vhyvgrAhG"'),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),L=n("h2",{id:"so-verifizieren-sie-ein-schlusselpaar",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#so-verifizieren-sie-ein-schlusselpaar","aria-hidden":"true"},"#"),s(" So verifizieren Sie ein Schl\xFCsselpaar")],-1),Y=n("p",null,"Wenn Sie ein Schl\xFCsselpaar erhalten, k\xF6nnen Sie \xFCberpr\xFCfen, ob es das Geheimnis ist oder nicht mit dem angegebenen \xF6ffentlichen Schl\xFCssel \xFCberein stimmt.",-1),I=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),I=n("h2",{id:"so-verifizieren-sie-ein-schlusselpaar",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#so-verifizieren-sie-ein-schlusselpaar","aria-hidden":"true"},"#"),s(" So verifizieren Sie ein Schl\xFCsselpaar")],-1),X=n("p",null,"Wenn Sie ein Schl\xFCsselpaar erhalten, k\xF6nnen Sie \xFCberpr\xFCfen, ob es das Geheimnis ist oder nicht mit dem angegebenen \xF6ffentlichen Schl\xFCssel \xFCberein stimmt.",-1),Z=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"const"),s(" publicKey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),s(` @@ -134,7 +171,7 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"==="),s(" publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token comment"},"// true"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br")])],-1),q=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" publicKey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br")])],-1),G=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" publicKey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSecretKey"),n("span",{class:"token punctuation"},"("),s(` Uint8Array`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"["),s(` `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(` @@ -145,10 +182,10 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"==="),s(" publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token comment"},"// true"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),F=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("publickey "),n("span",{class:"token keyword"},"import"),s(` PublicKey +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),$=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("pubkey "),n("span",{class:"token keyword"},"import"),s(` Pubkey -public_key `),n("span",{class:"token operator"},"="),s(" PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p"'),n("span",{class:"token punctuation"},")"),s(` +public_key `),n("span",{class:"token operator"},"="),s(" Pubkey"),n("span",{class:"token punctuation"},"."),s("from_string"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p"'),n("span",{class:"token punctuation"},")"),s(` keys `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"["),s(` `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(` @@ -156,11 +193,11 @@ keys `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctu `),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"]"),s(` -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"bytes"),n("span",{class:"token punctuation"},"("),s("keys"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_bytes"),n("span",{class:"token punctuation"},"("),s("keys"),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},"."),s("to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=="),s(" public_key"),n("span",{class:"token punctuation"},"."),s("to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=="),s(" public_key"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"# True"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br")])],-1),X=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("public_key "),n("span",{class:"token operator"},"="),s(" PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p"'),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br")])],-1),Q=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("public_key "),n("span",{class:"token operator"},"="),s(" Pubkey"),n("span",{class:"token punctuation"},"."),s("from_string"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p"'),n("span",{class:"token punctuation"},")"),s(` keys `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"["),s(` `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(` @@ -168,13 +205,44 @@ keys `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctu `),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"]"),s(` -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"bytes"),n("span",{class:"token punctuation"},"("),s("keys"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_bytes"),n("span",{class:"token punctuation"},"("),s("keys"),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},"."),s("to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=="),s(" public_key"),n("span",{class:"token punctuation"},"."),s("to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=="),s(" public_key"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"# True"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br")])],-1),G=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana-keygen verify "),n("span",{class:"token operator"},"<"),s("PUBKEY"),n("span",{class:"token operator"},">"),s(` prompt:// -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Z=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana-keygen verify "),n("span",{class:"token operator"},"<"),s("PUBKEY"),n("span",{class:"token operator"},">"),s(` prompt:// -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),$=n("h2",{id:"so-uberprufen-sie-ob-ein-offentlicher-schlussel-einen-zugehorigen-privaten-schlussel-hat",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#so-uberprufen-sie-ob-ein-offentlicher-schlussel-einen-zugehorigen-privaten-schlussel-hat","aria-hidden":"true"},"#"),s(" So \xFCberpr\xFCfen Sie, ob ein \xF6ffentlicher Schl\xFCssel einen zugeh\xF6rigen privaten Schl\xFCssel hat")],-1),Q=n("p",null,"In bestimmten Sonderf\xE4llen (z. B. einer vom Programm abgeleiteten Adresse) kann es sein, dass \xF6ffentlichen Schl\xFCsseln kein privater Schl\xFCssel zugeordnet ist. Sie k\xF6nnen dies \xFCberpr\xFCfen, indem Sie nachsehen, ob der \xF6ffentliche Schl\xFCssel auf der Kurve ed25519 liegt. Nur \xF6ffentliche Schl\xFCssel, die auf der Kurve liegen, k\xF6nnen von Benutzern mit Wallets kontrolliert werden.",-1),O=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br")])],-1),O=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token comment"},"// clang++ verify_keypair.cpp -o verify_keypair -std=c++17 -lssl -lcrypto -lsodium"),s(` + +`),n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + PublicKey public_key `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token keyword"},"uint8_t"),s(" bytes"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},"]"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"{"),s(` + `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(` + `),n("span",{class:"token number"},"189"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"224"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"216"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"117"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"173"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"149"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"45"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"73"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"237"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"246"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"15"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"185"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"186"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"82"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"177"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(` + `),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(` + `),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` + `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` + Keypair key_pair `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"from_seed"),n("span",{class:"token punctuation"},"("),s("bytes"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token punctuation"},"("),s("public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br")])],-1),nn=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[s("PublicKey public_key "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token keyword"},"uint8_t"),s(" bytes"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},"]"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"{"),s(` +`),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(` +`),n("span",{class:"token number"},"189"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"224"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"216"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"117"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"173"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"149"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"45"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"73"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"237"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"246"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"15"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"185"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"186"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"82"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"177"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(` +`),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(` +`),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` +`),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` +Keypair key_pair `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"from_seed"),n("span",{class:"token punctuation"},"("),s("bytes"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + +std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token punctuation"},"("),s("public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token comment"},"// 1"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br")])],-1),sn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana-keygen verify "),n("span",{class:"token operator"},"<"),s("PUBKEY"),n("span",{class:"token operator"},">"),s(` prompt:// +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),an=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana-keygen verify "),n("span",{class:"token operator"},"<"),s("PUBKEY"),n("span",{class:"token operator"},">"),s(` prompt:// +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),tn=n("h2",{id:"so-uberprufen-sie-ob-ein-offentlicher-schlussel-einen-zugehorigen-privaten-schlussel-hat",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#so-uberprufen-sie-ob-ein-offentlicher-schlussel-einen-zugehorigen-privaten-schlussel-hat","aria-hidden":"true"},"#"),s(" So \xFCberpr\xFCfen Sie, ob ein \xF6ffentlicher Schl\xFCssel einen zugeh\xF6rigen privaten Schl\xFCssel hat")],-1),en=n("p",null,"In bestimmten Sonderf\xE4llen (z. B. einer vom Programm abgeleiteten Adresse) kann es sein, dass \xF6ffentlichen Schl\xFCsseln kein privater Schl\xFCssel zugeordnet ist. Sie k\xF6nnen dies \xFCberpr\xFCfen, indem Sie nachsehen, ob der \xF6ffentliche Schl\xFCssel auf der Kurve ed25519 liegt. Nur \xF6ffentliche Schl\xFCssel, die auf der Kurve liegen, k\xF6nnen von Benutzern mit Wallets kontrolliert werden.",-1),on=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token keyword"},"function"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token comment"},"// Note that Keypair.generate() will always give a public key that is valid for users"),s(` @@ -188,23 +256,34 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token keyword"},"const"),s(" errorPubkey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"testPubkey"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token comment"},"// Is not a valid public key"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br")])],-1),nn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" key "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br")])],-1),cn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" key "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("PublicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"isOnCurve"),n("span",{class:"token punctuation"},"("),s("key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBytes"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),sn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("publickey "),n("span",{class:"token keyword"},"import"),s(` PublicKey -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("utils"),n("span",{class:"token punctuation"},"."),s("ed25519_base "),n("span",{class:"token keyword"},"import"),s(` is_on_curve +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),pn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("pubkey "),n("span",{class:"token keyword"},"import"),s(` Pubkey `),n("span",{class:"token comment"},"# Note that Keypair() will always give a public key that is valid for users"),s(` -key `),n("span",{class:"token operator"},"="),s(" PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},"'5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY'"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# Valid public key"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("is_on_curve"),n("span",{class:"token punctuation"},"("),s("key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# Lies on the ed25519 curve and is suitable for users"),s(` +key `),n("span",{class:"token operator"},"="),s(" Pubkey"),n("span",{class:"token punctuation"},"."),s("from_string"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},"'5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY'"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# Valid public key"),s(` +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("key"),n("span",{class:"token punctuation"},"."),s("is_on_curve"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# Lies on the ed25519 curve and is suitable for users"),s(` + +off_curve_address `),n("span",{class:"token operator"},"="),s(" Pubkey"),n("span",{class:"token punctuation"},"."),s("from_string"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},"'4BJXYkfvg37zEmBbsacZjeQDpTNx91KppxFJxRqrz48e'"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# Valid public key"),s(` +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("off_curve_address"),n("span",{class:"token punctuation"},"."),s("is_on_curve"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# Not on the ed25519 curve, therefore not suitable for users"),s(` + +error_pubkey `),n("span",{class:"token operator"},"="),s(" Pubkey"),n("span",{class:"token punctuation"},"."),s("from_string"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"testPubkey"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token comment"},"# Is not a valid public key"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),un=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("key "),n("span",{class:"token operator"},"="),s(" Pubkey"),n("span",{class:"token punctuation"},"."),s("from_string"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},"'5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY'"),n("span",{class:"token punctuation"},")"),s(` +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("key"),n("span",{class:"token punctuation"},"."),s("is_on_curve"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),ln=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},"")]),s(` +`),n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},"")]),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` +`),n("span",{class:"token punctuation"},"{"),s(` + `),n("span",{class:"token keyword"},"auto"),s(" public_key "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -off_curve_address `),n("span",{class:"token operator"},"="),s(" PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},"'4BJXYkfvg37zEmBbsacZjeQDpTNx91KppxFJxRqrz48e'"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# Valid public key"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("PublicKey"),n("span",{class:"token punctuation"},"."),s("_is_on_curve"),n("span",{class:"token punctuation"},"("),s("off_curve_address"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# Not on the ed25519 curve, therefore not suitable for users"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(" public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"is_on_curve"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` -error_pubkey `),n("span",{class:"token operator"},"="),s(" PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"testPubkey"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token comment"},"# Is not a valid public key"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br")])],-1),an=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("key "),n("span",{class:"token operator"},"="),s(" PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},"'5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY'"),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("is_on_curve"),n("span",{class:"token punctuation"},"("),s("key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),tn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("pubkey"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Pubkey"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token keyword"},"return"),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),rn=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token keyword"},"auto"),s(" public_key "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(" public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"is_on_curve"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),kn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("pubkey"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Pubkey"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("std"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token keyword"},"str"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token class-name"},"FromStr"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -217,21 +296,21 @@ error_pubkey `),n("span",{class:"token operator"},"="),s(" PublicKey"),n("span", `),n("span",{class:"token keyword"},"let"),s(" error_pubkey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Pubkey"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from_str"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"testPubkey"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token comment"},"// Is not a valid public key"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br")])],-1),en=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" pubkey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Pubkey"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from_str"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br")])],-1),bn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" pubkey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Pubkey"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from_str"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token macro property"},"println!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"{:?}"'),n("span",{class:"token punctuation"},","),s(" pubkey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"is_on_curve"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),on=n("h2",{id:"wie-man-eine-mnemonische-phrase-generiert",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#wie-man-eine-mnemonische-phrase-generiert","aria-hidden":"true"},"#"),s(" Wie man eine mnemonische Phrase generiert")],-1),cn=n("p",null,"Wenn Sie eine Wallet erstellen, m\xFCssen Sie eine mnemonische Phrase generieren, damit der Benutzer sie als Backup speichern kann.",-1),pn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" bip39 "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"bip39"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),mn=n("h2",{id:"wie-man-eine-mnemonische-phrase-generiert",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#wie-man-eine-mnemonische-phrase-generiert","aria-hidden":"true"},"#"),s(" Wie man eine mnemonische Phrase generiert")],-1),dn=n("p",null,"Wenn Sie eine Wallet erstellen, m\xFCssen Sie eine mnemonische Phrase generieren, damit der Benutzer sie als Backup speichern kann.",-1),yn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" bip39 "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"bip39"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" mnemonic "),n("span",{class:"token operator"},"="),s(" bip39"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generateMnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),ln=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" mnemonic "),n("span",{class:"token operator"},"="),s(" bip39"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generateMnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),un=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" mnemonic "),n("span",{class:"token keyword"},"import"),s(` Mnemonic +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),gn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" mnemonic "),n("span",{class:"token operator"},"="),s(" bip39"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generateMnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),hn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" mnemonic "),n("span",{class:"token keyword"},"import"),s(` Mnemonic mnemo `),n("span",{class:"token operator"},"="),s(" Mnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"english"'),n("span",{class:"token punctuation"},")"),s(` words `),n("span",{class:"token operator"},"="),s(" mnemo"),n("span",{class:"token punctuation"},"."),s("generate"),n("span",{class:"token punctuation"},"("),s("strength"),n("span",{class:"token operator"},"="),n("span",{class:"token number"},"256"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),rn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("mnemo "),n("span",{class:"token operator"},"="),s(" Mnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"english"'),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),wn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("mnemo "),n("span",{class:"token operator"},"="),s(" Mnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"english"'),n("span",{class:"token punctuation"},")"),s(` words `),n("span",{class:"token operator"},"="),s(" mnemo"),n("span",{class:"token punctuation"},"."),s("generate"),n("span",{class:"token punctuation"},"("),s("strength"),n("span",{class:"token operator"},"="),n("span",{class:"token number"},"256"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),kn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen new -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),bn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen new -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),mn=n("h2",{id:"so-stellen-sie-ein-schlusselpaar-aus-einer-mnemonischen-phrase-wieder-her",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#so-stellen-sie-ein-schlusselpaar-aus-einer-mnemonischen-phrase-wieder-her","aria-hidden":"true"},"#"),s(" So stellen Sie ein Schl\xFCsselpaar aus einer mnemonischen Phrase wieder her")],-1),dn=n("p",null,"Viele Wallet-Erweiterungen verwenden Mnemonics, um ihre geheimen Schl\xFCssel darzustellen. Sie k\xF6nnen die Mnemonik f\xFCr lokale Tests in Schl\xFCsselpaare konvertieren.",-1),gn=n("ol",null,[n("li",null,"BIP39 - Erstellen einer einzigen Brieftasche")],-1),yn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),fn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen new +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),_n=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen new +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),vn=n("h2",{id:"so-stellen-sie-ein-schlusselpaar-aus-einer-mnemonischen-phrase-wieder-her",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#so-stellen-sie-ein-schlusselpaar-aus-einer-mnemonischen-phrase-wieder-her","aria-hidden":"true"},"#"),s(" So stellen Sie ein Schl\xFCsselpaar aus einer mnemonischen Phrase wieder her")],-1),xn=n("p",null,"Viele Wallet-Erweiterungen verwenden Mnemonics, um ihre geheimen Schl\xFCssel darzustellen. Sie k\xF6nnen die Mnemonik f\xFCr lokale Tests in Schl\xFCsselpaare konvertieren.",-1),Kn=n("ol",null,[n("li",null,"BIP39 - Erstellen einer einzigen Brieftasche")],-1),Sn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" bip39 "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"bip39"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -241,23 +320,23 @@ words `),n("span",{class:"token operator"},"="),s(" mnemo"),n("span",{class:"tok `),n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSeed"),n("span",{class:"token punctuation"},"("),s("seed"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"slice"),n("span",{class:"token punctuation"},"("),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"32"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),n("span",{class:"token template-string"},[n("span",{class:"token template-punctuation string"},"`"),n("span",{class:"token interpolation"},[n("span",{class:"token interpolation-punctuation punctuation"},"${"),s("keypair"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token interpolation-punctuation punctuation"},"}")]),n("span",{class:"token template-punctuation string"},"`")]),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token comment"},"// 5ZWj7a1f8tWkjBESHKgrLmXshuXxqeY9SYcfbshpAqPG"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),hn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" mnemonic "),n("span",{class:"token operator"},"="),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),Wn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" mnemonic "),n("span",{class:"token operator"},"="),s(` `),n("span",{class:"token string"},'"pill tomorrow foster begin walnut borrow virtual kick shift mutual shoe scatter"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" seed "),n("span",{class:"token operator"},"="),s(" bip39"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"mnemonicToSeedSync"),n("span",{class:"token punctuation"},"("),s("mnemonic"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token string"},'""'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token comment"},"// (mnemonic, password)"),s(` `),n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSeed"),n("span",{class:"token punctuation"},"("),s("seed"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"slice"),n("span",{class:"token punctuation"},"("),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"32"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),wn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),Pn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair `),n("span",{class:"token keyword"},"from"),s(" mnemonic "),n("span",{class:"token keyword"},"import"),s(` Mnemonic mnemo `),n("span",{class:"token operator"},"="),s(" Mnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"english"'),n("span",{class:"token punctuation"},")"),s(` seed `),n("span",{class:"token operator"},"="),s(" mnemo"),n("span",{class:"token punctuation"},"."),s("to_seed"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"pill tomorrow foster begin walnut borrow virtual kick shift mutual shoe scatter"'),n("span",{class:"token punctuation"},")"),s(` -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),s("seed"),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created Keypair with Public Key: {}"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),fn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("mnemo "),n("span",{class:"token operator"},"="),s(" Mnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"english"'),n("span",{class:"token punctuation"},")"),s(` +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_bytes"),n("span",{class:"token punctuation"},"("),s("seed"),n("span",{class:"token punctuation"},")"),s(` +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created Keypair with Public Key: {}"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),zn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("mnemo "),n("span",{class:"token operator"},"="),s(" Mnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"english"'),n("span",{class:"token punctuation"},")"),s(` seed `),n("span",{class:"token operator"},"="),s(" mnemo"),n("span",{class:"token punctuation"},"."),s("to_seed"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"pill tomorrow foster begin walnut borrow virtual kick shift mutual shoe scatter"'),n("span",{class:"token punctuation"},")"),s(` -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),s("seed"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),_n=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen recover -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),vn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen recover -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),xn=n("p",null,"2.BIP44 (mehrere Wallets, auch HD-Wallets genannt)",-1),Sn=n("p",null,"Sie k\xF6nnen mehrere Wallets aus einem einzigen Seed erstellen \u2013 auch bekannt als \u201Ehierarchische deterministische Wallets\u201C oder HD-Wallets:",-1),Kn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_bytes"),n("span",{class:"token punctuation"},"("),s("seed"),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),An=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen recover +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Bn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen recover +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Cn=n("p",null,"2.BIP44 (mehrere Wallets, auch HD-Wallets genannt)",-1),jn=n("p",null,"Sie k\xF6nnen mehrere Wallets aus einem einzigen Seed erstellen \u2013 auch bekannt als \u201Ehierarchische deterministische Wallets\u201C oder HD-Wallets:",-1),Dn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" HDKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"micro-ed25519-hdkey"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" bip39 "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"bip39"'),n("span",{class:"token punctuation"},";"),s(` @@ -272,7 +351,7 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),n("span",{class:"token template-string"},[n("span",{class:"token template-punctuation string"},"`"),n("span",{class:"token interpolation"},[n("span",{class:"token interpolation-punctuation punctuation"},"${"),s("path"),n("span",{class:"token interpolation-punctuation punctuation"},"}")]),n("span",{class:"token string"}," => "),n("span",{class:"token interpolation"},[n("span",{class:"token interpolation-punctuation punctuation"},"${"),s("keypair"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token interpolation-punctuation punctuation"},"}")]),n("span",{class:"token template-punctuation string"},"`")]),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br")])],-1),Wn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" mnemonic "),n("span",{class:"token operator"},"="),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br")])],-1),Tn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" mnemonic "),n("span",{class:"token operator"},"="),s(` `),n("span",{class:"token string"},'"neither lonely flavor argue grass remind eye tag avocado spot unusual intact"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" seed "),n("span",{class:"token operator"},"="),s(" bip39"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"mnemonicToSeedSync"),n("span",{class:"token punctuation"},"("),s("mnemonic"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token string"},'""'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token comment"},"// (mnemonic, password)"),s(` `),n("span",{class:"token keyword"},"for"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"let"),s(" i "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(" i "),n("span",{class:"token operator"},"<"),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},";"),s(" i"),n("span",{class:"token operator"},"++"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -280,9 +359,9 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSeed"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"derivePath"),n("span",{class:"token punctuation"},"("),s("path"),n("span",{class:"token punctuation"},","),s(" seed"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toString"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"hex"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),s("key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),n("span",{class:"token template-string"},[n("span",{class:"token template-punctuation string"},"`"),n("span",{class:"token interpolation"},[n("span",{class:"token interpolation-punctuation punctuation"},"${"),s("path"),n("span",{class:"token interpolation-punctuation punctuation"},"}")]),n("span",{class:"token string"}," => "),n("span",{class:"token interpolation"},[n("span",{class:"token interpolation-punctuation punctuation"},"${"),s("keypair"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token interpolation-punctuation punctuation"},"}")]),n("span",{class:"token template-punctuation string"},"`")]),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),Pn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana-keygen recover "),n("span",{class:"token string"},"'prompt:?key=0/0'"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),zn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana-keygen recover "),n("span",{class:"token string"},"'prompt:?key=0/0'"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),An=n("h2",{id:"so-generieren-sie-eine-vanity-adresse",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#so-generieren-sie-eine-vanity-adresse","aria-hidden":"true"},"#"),s(" So generieren Sie eine Vanity-Adresse")],-1),Bn=n("p",null,'Vanity-Publickeys oder benutzerdefinierte Adressen sind Schl\xFCssel, die mit bestimmten Charakteren beginnen. Beispielsweise kann eine Person einen \xF6ffentlichen Schl\xFCssel w\xFCnschen. Beginnen Sie mit "elv1s" oder vielleicht sogar mit "cook". Dies kann anderen Menschen helfen, sich zu merken, wem der Schl\xFCssel geh\xF6rt, und wodurch der Schl\xFCssel leichter zu identifizieren ist.',-1),Cn=n("p",null,"Hinweis: Je mehr Zeichen Ihre Vanity-Adresse enth\xE4lt, desto l\xE4nger wird sie nehmen.",-1),jn=n("p",null,"::: Warnung Sie sollten f\xFCr diese Aufgabe einfach die CLI verwenden. Die Python- und TypeScript-Beispiele dienen der Veranschaulichung und sind viel langsamer als die CLI. :::",-1),Tn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),Rn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana-keygen recover "),n("span",{class:"token string"},"'prompt:?key=0/0'"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Nn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana-keygen recover "),n("span",{class:"token string"},"'prompt:?key=0/0'"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),En=n("h2",{id:"so-generieren-sie-eine-vanity-adresse",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#so-generieren-sie-eine-vanity-adresse","aria-hidden":"true"},"#"),s(" So generieren Sie eine Vanity-Adresse")],-1),Mn=n("p",null,'Vanity-Publickeys oder benutzerdefinierte Adressen sind Schl\xFCssel, die mit bestimmten Charakteren beginnen. Beispielsweise kann eine Person einen \xF6ffentlichen Schl\xFCssel w\xFCnschen. Beginnen Sie mit "elv1s" oder vielleicht sogar mit "cook". Dies kann anderen Menschen helfen, sich zu merken, wem der Schl\xFCssel geh\xF6rt, und wodurch der Schl\xFCssel leichter zu identifizieren ist.',-1),Vn=n("p",null,"Hinweis: Je mehr Zeichen Ihre Vanity-Adresse enth\xE4lt, desto l\xE4nger wird sie nehmen.",-1),Jn=n("p",null,"::: Warnung Sie sollten f\xFCr diese Aufgabe einfach die CLI verwenden. Die Python- und TypeScript-Beispiele dienen der Veranschaulichung und sind viel langsamer als die CLI. :::",-1),Un=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"let"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` @@ -290,23 +369,42 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),Dn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),Hn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"while"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token operator"},"!"),s("keypair"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"startsWith"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"elv1s"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),Mn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),Yn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"while"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"str"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},":"),n("span",{class:"token number"},"5"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token operator"},"!="),n("span",{class:"token string"},'"elv1s"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},":"),s(` +`),n("span",{class:"token keyword"},"while"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"str"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},":"),n("span",{class:"token number"},"5"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token operator"},"!="),n("span",{class:"token string"},'"elv1s"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},":"),s(` keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created Keypair with Public Key: {}"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),Rn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"while"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"str"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},":"),n("span",{class:"token number"},"5"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token operator"},"!="),n("span",{class:"token string"},'"elv1s"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},":"),s(` +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created Keypair with Public Key: {}"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),Ln=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` +`),n("span",{class:"token keyword"},"while"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"str"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},":"),n("span",{class:"token number"},"5"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token operator"},"!="),n("span",{class:"token string"},'"elv1s"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},":"),s(` keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),Nn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen grind --starts-with e1v1s:1 -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),En=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen grind --starts-with e1v1s:1 -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Vn=n("h2",{id:"so-signieren-und-verifizieren-sie-nachrichten-mit-wallets",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#so-signieren-und-verifizieren-sie-nachrichten-mit-wallets","aria-hidden":"true"},"#"),s(" So signieren und verifizieren Sie Nachrichten mit Wallets")],-1),Un=n("p",null,"Die Hauptfunktion eines Schl\xFCsselpaars besteht darin, Nachrichten zu signieren und zu aktivieren. \xDCberpr\xFCfung einer Unterschrift erm\xF6glicht der Empf\xE4nger sich zu vergewissern, dass die Daten vom Eigent\xFCmer signiert wurden.",-1),Jn=s("Dazu importieren wir die Kryptobibliothek "),Hn={href:"https://www.npmjs.com/package/tweetnacl",target:"_blank",rel:"noopener noreferrer"},Ln=s("TweetNaCl"),Yn=s("."),In=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),Fn=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token comment"},"// clang++ vanity_keypair.cpp -o vanity_keypair -std=c++17 -lssl -lcrypto -lsodium"),s(` + +`),n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + `),n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"while"),s(),n("span",{class:"token punctuation"},"("),s("key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"substr"),n("span",{class:"token punctuation"},"("),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"5"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"!="),s(),n("span",{class:"token string"},'"elv1s"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + key_pair `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token punctuation"},"}"),s(` + + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"Created Keypair with Public Key: "'),s(),n("span",{class:"token operator"},"<<"),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br")])],-1),qn=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token keyword"},"while"),s(),n("span",{class:"token punctuation"},"("),s("key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"substr"),n("span",{class:"token punctuation"},"("),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"5"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"!="),s(),n("span",{class:"token string"},'"elv1s"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + key_pair `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),In=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen grind --starts-with e1v1s:1 +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Xn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen grind --starts-with e1v1s:1 +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Zn=n("h2",{id:"so-signieren-und-verifizieren-sie-nachrichten-mit-wallets",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#so-signieren-und-verifizieren-sie-nachrichten-mit-wallets","aria-hidden":"true"},"#"),s(" So signieren und verifizieren Sie Nachrichten mit Wallets")],-1),Gn=n("p",null,"Die Hauptfunktion eines Schl\xFCsselpaars besteht darin, Nachrichten zu signieren und zu aktivieren. \xDCberpr\xFCfung einer Unterschrift erm\xF6glicht der Empf\xE4nger sich zu vergewissern, dass die Daten vom Eigent\xFCmer signiert wurden.",-1),$n=s("Dazu importieren wir die Kryptobibliothek "),Qn={href:"https://www.npmjs.com/package/tweetnacl",target:"_blank",rel:"noopener noreferrer"},On=s("TweetNaCl"),ns=s("."),ss=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(" nacl "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"tweetnacl"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" decodeUTF8 "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"tweetnacl-util"'),n("span",{class:"token punctuation"},";"),s(` @@ -332,7 +430,7 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("result"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br")])],-1),qn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" message "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"The quick brown fox jumps over the lazy dog"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br")])],-1),as=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" message "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"The quick brown fox jumps over the lazy dog"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" messageBytes "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"decodeUTF8"),n("span",{class:"token punctuation"},"("),s("message"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" signature "),n("span",{class:"token operator"},"="),s(" nacl"),n("span",{class:"token punctuation"},"."),s("sign"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"detached"),n("span",{class:"token punctuation"},"("),s("messageBytes"),n("span",{class:"token punctuation"},","),s(" keypair"),n("span",{class:"token punctuation"},"."),s("secretKey"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` @@ -343,42 +441,26 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("result"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),Fn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" nacl"),n("span",{class:"token punctuation"},"."),s("signing "),n("span",{class:"token keyword"},"import"),s(` VerifyKey -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),ts=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair secret_key `),n("span",{class:"token operator"},"="),s(" "),n("span",{class:"token punctuation"},"["),s(` `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"189"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"224"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"216"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"117"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"173"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"149"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"45"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"73"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"237"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"246"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"15"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"185"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"186"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"82"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"177"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` - `),n("span",{class:"token punctuation"},"]"),s(` - -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"bytes"),n("span",{class:"token punctuation"},"("),s("secret_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -pubkey_bytes `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token builtin"},"bytes"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),s(` -message `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"The quick brown fox jumps over the lazy dog"'),s(` -message_bytes `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token builtin"},"bytes"),n("span",{class:"token punctuation"},"("),s("message"),n("span",{class:"token punctuation"},","),n("span",{class:"token string"},"'utf8'"),n("span",{class:"token punctuation"},")"),s(` -signed_message `),n("span",{class:"token operator"},"="),s(" keypair"),n("span",{class:"token punctuation"},"."),s("sign"),n("span",{class:"token punctuation"},"("),s("message_bytes"),n("span",{class:"token punctuation"},")"),s(` - -verify_sign `),n("span",{class:"token operator"},"="),s(" VerifyKey"),n("span",{class:"token punctuation"},"("),s(` - pubkey_bytes -`),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),s("verify"),n("span",{class:"token punctuation"},"("),s(` - smessage`),n("span",{class:"token operator"},"="),s("message_bytes"),n("span",{class:"token punctuation"},","),s(` - signature`),n("span",{class:"token operator"},"="),s("signed_message"),n("span",{class:"token punctuation"},"."),s(`signature -`),n("span",{class:"token punctuation"},")"),s(` - -`),n("span",{class:"token comment"},"#Returns original message if the signature has not been tampered with"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("verify_sign"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br")])],-1),Xn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("message "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"The quick brown fox jumps over the lazy dog"'),s(` -message_bytes `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token builtin"},"bytes"),n("span",{class:"token punctuation"},"("),s("message"),n("span",{class:"token punctuation"},","),n("span",{class:"token string"},"'utf8'"),n("span",{class:"token punctuation"},")"),s(` -signed_message `),n("span",{class:"token operator"},"="),s(" keypair"),n("span",{class:"token punctuation"},"."),s("sign"),n("span",{class:"token punctuation"},"("),s("message_bytes"),n("span",{class:"token punctuation"},")"),s(` - -verify_sign `),n("span",{class:"token operator"},"="),s(" VerifyKey"),n("span",{class:"token punctuation"},"("),s(` - pubkey_bytes -`),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),s("verify"),n("span",{class:"token punctuation"},"("),s(` - smessage`),n("span",{class:"token operator"},"="),s("message_bytes"),n("span",{class:"token punctuation"},","),s(` - signature`),n("span",{class:"token operator"},"="),s("signed_message"),n("span",{class:"token punctuation"},"."),s(`signature -`),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),Gn=n("h2",{id:"so-verbinden-sie-sich-mit-einer-brieftasche",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#so-verbinden-sie-sich-mit-einer-brieftasche","aria-hidden":"true"},"#"),s(" So verbinden Sie sich mit einer Brieftasche")],-1),Zn=s("Die "),$n={href:"https://github.com/solana-labs/wallet-adapter",target:"_blank",rel:"noopener noreferrer"},Qn=s("Wallet-Adapter"),On=s("-Bibliotheken von Solana machen es einfach, Wallet-Verbindungen clientseitig zu verwalten."),ns=l(`

    React

    F\xFChren Sie den folgenden Befehl aus, um die erforderlichen Abh\xE4ngigkeiten zu installieren:

    yarn add @solana/wallet-adapter-react @solana/wallet-adapter-react-ui @solana/wallet-adapter-base @solana/wallet-adapter-wallets
    -

    Die React-Wallet-Adapter-Bibliotheken erm\xF6glichen es uns, Wallet-Verbindungszust\xE4nde \xFCber Hooks und Kontextanbieter, n\xE4mlich useWallet, WalletProvider, useConnection und ConnectionProvider, beizubehalten und darauf zuzugreifen. Die React App muss mit WalletProvider und ConnectionProvider umschlossen werden.

    Dar\xFCber hinaus k\xF6nnen wir Benutzer auffordern, eine Verbindung herzustellen, indem wir useWalletModal verwenden, um die Sichtbarkeit des Verbindungsmodals umzuschalten und die App auch mit WalletProvider von @solana/wallet-adapter-react-ui zu umschlie\xDFen. Das Verbindungsmodal wickelt diesen Verbindungsfluss f\xFCr uns ab, sodass wir einfach abh\xF6ren k\xF6nnen, wann sich eine Brieftasche verbunden hat. Wir wissen, dass eine Wallet verbunden ist, wenn die \u201EuseWallet\u201C-Antwort eine \u201Ewallet\u201C-Eigenschaft ungleich Null hat. Umgekehrt, wenn diese Eigenschaft null ist, wissen wir, dass die Brieftasche getrennt ist.

    `,5),ss=n("div",{class:"language-tsx ext-tsx line-numbers-mode"},[n("pre",{class:"language-tsx"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(" React"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token punctuation"},"{"),s(" useMemo"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token constant"},"FC"),n("span",{class:"token punctuation"},","),s(" PropsWithChildren "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"react"'),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token punctuation"},"]"),s(` +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_bytes"),n("span",{class:"token punctuation"},"("),s("secret_key"),n("span",{class:"token punctuation"},")"),s(` +message `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'b"The quick brown fox jumps over the lazy dog"'),s(` +signature `),n("span",{class:"token operator"},"="),s(" keypair"),n("span",{class:"token punctuation"},"."),s("sign_message"),n("span",{class:"token punctuation"},"("),s("message"),n("span",{class:"token punctuation"},")"),s(` +verify_sign `),n("span",{class:"token operator"},"="),s(" signature"),n("span",{class:"token punctuation"},"."),s("verify"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(" message"),n("span",{class:"token punctuation"},")"),s(` + +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("verify_sign"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# bool"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br")])],-1),es=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("message "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'b"The quick brown fox jumps over the lazy dog"'),s(` +signature `),n("span",{class:"token operator"},"="),s(" keypair"),n("span",{class:"token punctuation"},"."),s("sign_message"),n("span",{class:"token punctuation"},"("),s("message"),n("span",{class:"token punctuation"},")"),s(` +verify_sign `),n("span",{class:"token operator"},"="),s(" signature"),n("span",{class:"token punctuation"},"."),s("verify"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(" message"),n("span",{class:"token punctuation"},")"),s(` + +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("verify_sign"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# bool"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br")])],-1),os=n("h2",{id:"so-verbinden-sie-sich-mit-einer-brieftasche",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#so-verbinden-sie-sich-mit-einer-brieftasche","aria-hidden":"true"},"#"),s(" So verbinden Sie sich mit einer Brieftasche")],-1),cs=s("Die "),ps={href:"https://github.com/solana-labs/wallet-adapter",target:"_blank",rel:"noopener noreferrer"},us=s("Wallet-Adapter"),ls=s("-Bibliotheken von Solana machen es einfach, Wallet-Verbindungen clientseitig zu verwalten."),is=u(`

    React

    F\xFChren Sie den folgenden Befehl aus, um die erforderlichen Abh\xE4ngigkeiten zu installieren:

    yarn add @solana/wallet-adapter-react @solana/wallet-adapter-react-ui @solana/wallet-adapter-base @solana/wallet-adapter-wallets
    +

    Die React-Wallet-Adapter-Bibliotheken erm\xF6glichen es uns, Wallet-Verbindungszust\xE4nde \xFCber Hooks und Kontextanbieter, n\xE4mlich useWallet, WalletProvider, useConnection und ConnectionProvider, beizubehalten und darauf zuzugreifen. Die React App muss mit WalletProvider und ConnectionProvider umschlossen werden.

    Dar\xFCber hinaus k\xF6nnen wir Benutzer auffordern, eine Verbindung herzustellen, indem wir useWalletModal verwenden, um die Sichtbarkeit des Verbindungsmodals umzuschalten und die App auch mit WalletProvider von @solana/wallet-adapter-react-ui zu umschlie\xDFen. Das Verbindungsmodal wickelt diesen Verbindungsfluss f\xFCr uns ab, sodass wir einfach abh\xF6ren k\xF6nnen, wann sich eine Brieftasche verbunden hat. Wir wissen, dass eine Wallet verbunden ist, wenn die \u201EuseWallet\u201C-Antwort eine \u201Ewallet\u201C-Eigenschaft ungleich Null hat. Umgekehrt, wenn diese Eigenschaft null ist, wissen wir, dass die Brieftasche getrennt ist.

    `,5),rs=n("div",{class:"language-tsx ext-tsx line-numbers-mode"},[n("pre",{class:"language-tsx"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(" React"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token punctuation"},"{"),s(" useMemo"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token constant"},"FC"),n("span",{class:"token punctuation"},","),s(" PropsWithChildren "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"react"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` ConnectionProvider`),n("span",{class:"token punctuation"},","),s(` WalletProvider`),n("span",{class:"token punctuation"},","),s(` @@ -460,7 +542,7 @@ verify_sign `),n("span",{class:"token operator"},"="),s(" VerifyKey"),n("span",{ `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br"),n("span",{class:"line-number"},"69"),n("br"),n("span",{class:"line-number"},"70"),n("br"),n("span",{class:"line-number"},"71"),n("br"),n("span",{class:"line-number"},"72"),n("br"),n("span",{class:"line-number"},"73"),n("br"),n("span",{class:"line-number"},"74"),n("br"),n("span",{class:"line-number"},"75"),n("br"),n("span",{class:"line-number"},"76"),n("br"),n("span",{class:"line-number"},"77"),n("br"),n("span",{class:"line-number"},"78"),n("br"),n("span",{class:"line-number"},"79"),n("br"),n("span",{class:"line-number"},"80"),n("br"),n("span",{class:"line-number"},"81"),n("br"),n("span",{class:"line-number"},"82"),n("br")])],-1),as=n("div",{class:"language-tsx ext-tsx line-numbers-mode"},[n("pre",{class:"language-tsx"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token punctuation"},"{"),s(" wallet "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"useWallet"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br"),n("span",{class:"line-number"},"69"),n("br"),n("span",{class:"line-number"},"70"),n("br"),n("span",{class:"line-number"},"71"),n("br"),n("span",{class:"line-number"},"72"),n("br"),n("span",{class:"line-number"},"73"),n("br"),n("span",{class:"line-number"},"74"),n("br"),n("span",{class:"line-number"},"75"),n("br"),n("span",{class:"line-number"},"76"),n("br"),n("span",{class:"line-number"},"77"),n("br"),n("span",{class:"line-number"},"78"),n("br"),n("span",{class:"line-number"},"79"),n("br"),n("span",{class:"line-number"},"80"),n("br"),n("span",{class:"line-number"},"81"),n("br"),n("span",{class:"line-number"},"82"),n("br")])],-1),ks=n("div",{class:"language-tsx ext-tsx line-numbers-mode"},[n("pre",{class:"language-tsx"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token punctuation"},"{"),s(" wallet "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"useWallet"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token punctuation"},"{"),s(" setVisible "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"useWalletModal"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token function-variable function"},"onRequestConnectWallet"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -479,8 +561,8 @@ verify_sign `),n("span",{class:"token operator"},"="),s(" VerifyKey"),n("span",{ `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("p")]),n("span",{class:"token punctuation"},">")]),n("span",{class:"token punctuation"},"{"),s("wallet"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),n("span",{class:"token plain-text"},` `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br")])],-1),ts=l(`

    Vue

    F\xFChren Sie den folgenden Befehl aus, um die erforderlichen Abh\xE4ngigkeiten zu installieren:

    npm install solana-wallets-vue @solana/wallet-adapter-wallets
    -
    `,3),es=s("Das Plugin "),os={href:"https://github.com/lorisleiva/solana-wallets-vue",target:"_blank",rel:"noopener noreferrer"},cs=s("Solana Wallets Vue"),ps=s(" erm\xF6glicht es uns, einen Brieftaschenspeicher zu initialisieren und eine neue globale Eigenschaft \u201E$wallet\u201C zu erstellen, auf die in jeder Komponente zugegriffen werden kann. Alle Eigenschaften und Methoden, die Sie von "),ls=n("code",null,"useWallet()",-1),us=s(" erhalten k\xF6nnen, werden "),is={href:"https://github.com/lorisleiva/solana-wallets-vue#usewallet-references",target:"_blank",rel:"noopener noreferrer"},rs=s("hier"),ks=s(" angezeigt. Wir importieren und rendern auch die WalletMultiButton-Komponente, damit Benutzer eine Brieftasche ausw\xE4hlen und sich damit verbinden k\xF6nnen."),bs=n("div",{class:"language-vue ext-vue line-numbers-mode"},[n("pre",{class:"language-vue"},[n("code",null,[n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("script")]),s(),n("span",{class:"token attr-name"},"setup"),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"},[n("span",{class:"token language-javascript"},[s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br")])],-1),bs=u(`

    Vue

    F\xFChren Sie den folgenden Befehl aus, um die erforderlichen Abh\xE4ngigkeiten zu installieren:

    npm install solana-wallets-vue @solana/wallet-adapter-wallets
    +
    `,3),ms=s("Das Plugin "),ds={href:"https://github.com/lorisleiva/solana-wallets-vue",target:"_blank",rel:"noopener noreferrer"},ys=s("Solana Wallets Vue"),gs=s(" erm\xF6glicht es uns, einen Brieftaschenspeicher zu initialisieren und eine neue globale Eigenschaft \u201E$wallet\u201C zu erstellen, auf die in jeder Komponente zugegriffen werden kann. Alle Eigenschaften und Methoden, die Sie von "),hs=n("code",null,"useWallet()",-1),ws=s(" erhalten k\xF6nnen, werden "),fs={href:"https://github.com/lorisleiva/solana-wallets-vue#usewallet-references",target:"_blank",rel:"noopener noreferrer"},_s=s("hier"),vs=s(" angezeigt. Wir importieren und rendern auch die WalletMultiButton-Komponente, damit Benutzer eine Brieftasche ausw\xE4hlen und sich damit verbinden k\xF6nnen."),xs=n("div",{class:"language-vue ext-vue line-numbers-mode"},[n("pre",{class:"language-vue"},[n("code",null,[n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("script")]),s(),n("span",{class:"token attr-name"},"setup"),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"},[n("span",{class:"token language-javascript"},[s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" WalletMultiButton "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"solana-wallets-vue"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` LedgerWalletAdapter`),n("span",{class:"token punctuation"},","),s(` @@ -513,15 +595,15 @@ verify_sign `),n("span",{class:"token operator"},"="),s(" VerifyKey"),n("span",{ `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br")])],-1),ms=n("div",{class:"language-vue ext-vue line-numbers-mode"},[n("pre",{class:"language-vue"},[n("code",null,[n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("script")]),s(),n("span",{class:"token attr-name"},"setup"),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"},[n("span",{class:"token language-javascript"},[s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br")])],-1),Ks=n("div",{class:"language-vue ext-vue line-numbers-mode"},[n("pre",{class:"language-vue"},[n("code",null,[n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("script")]),s(),n("span",{class:"token attr-name"},"setup"),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"},[n("span",{class:"token language-javascript"},[s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" WalletMultiButton "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"solana-wallets-vue"'),n("span",{class:"token punctuation"},";"),s(` `)])]),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("template")]),n("span",{class:"token punctuation"},">")]),s(` `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("wallet-multi-button")]),n("span",{class:"token punctuation"},">")]),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),ds=l(`

    Svelte

    F\xFChren Sie den folgenden Befehl aus, um die erforderlichen Abh\xE4ngigkeiten zu installieren:

    npm install @svelte-on-solana/wallet-adapter-core @svelte-on-solana/wallet-adapter-ui @solana/wallet-adapter-base @solana/wallet-adapter-wallets @solana/web3.js
    -
    `,3),gs=s("Das Paket "),ys={href:"https://github.com/svelte-on-solana/wallet-adapter",target:"_blank",rel:"noopener noreferrer"},hs=s("Svelte Wallet Adapter"),ws=s(" erm\xF6glicht es, einen Svelte Store ("),fs=n("code",null,"$walletStore",-1),_s=s(") hinzuzuf\xFCgen, auf den unter allen JS-, TS- oder/und Svelte-Dateien zugegriffen werden kann innerhalb eines Projekts, das mit Svelte Template oder SvelteKit erstellt wurde. Unter Verwendung der Repo-Referenz "),vs={href:"https://github.com/svelte-on-solana/wallet-adapter/blob/master/packages/core/README.md/",target:"_blank",rel:"noopener noreferrer"},xs=s("hier"),Ss=s(" k\xF6nnen Sie den Adapter f\xFCr SSR oder verwenden SPA. Das UI-Paket enth\xE4lt eine "),Ks=n("code",null,"",-1),Ws=s("-Komponente, mit der Benutzer eine Brieftasche ausw\xE4hlen k\xF6nnen, um sich damit zu verbinden."),Ps=n("div",{class:"language-html ext-html line-numbers-mode"},[n("pre",{class:"language-html"},[n("code",null,[n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("script")]),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"},[n("span",{class:"token language-javascript"},[s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),Ss=u(`

    Svelte

    F\xFChren Sie den folgenden Befehl aus, um die erforderlichen Abh\xE4ngigkeiten zu installieren:

    npm install @svelte-on-solana/wallet-adapter-core @svelte-on-solana/wallet-adapter-ui @solana/wallet-adapter-base @solana/wallet-adapter-wallets @solana/web3.js
    +
    `,3),Ws=s("Das Paket "),Ps={href:"https://github.com/svelte-on-solana/wallet-adapter",target:"_blank",rel:"noopener noreferrer"},zs=s("Svelte Wallet Adapter"),As=s(" erm\xF6glicht es, einen Svelte Store ("),Bs=n("code",null,"$walletStore",-1),Cs=s(") hinzuzuf\xFCgen, auf den unter allen JS-, TS- oder/und Svelte-Dateien zugegriffen werden kann innerhalb eines Projekts, das mit Svelte Template oder SvelteKit erstellt wurde. Unter Verwendung der Repo-Referenz "),js={href:"https://github.com/svelte-on-solana/wallet-adapter/blob/master/packages/core/README.md/",target:"_blank",rel:"noopener noreferrer"},Ds=s("hier"),Ts=s(" k\xF6nnen Sie den Adapter f\xFCr SSR oder verwenden SPA. Das UI-Paket enth\xE4lt eine "),Rs=n("code",null,"",-1),Ns=s("-Komponente, mit der Benutzer eine Brieftasche ausw\xE4hlen k\xF6nnen, um sich damit zu verbinden."),Es=n("div",{class:"language-html ext-html line-numbers-mode"},[n("pre",{class:"language-html"},[n("code",null,[n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("script")]),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"},[n("span",{class:"token language-javascript"},[s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" walletStore "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@svelte-on-solana/wallet-adapter-core"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` WalletProvider`),n("span",{class:"token punctuation"},","),s(` @@ -554,7 +636,7 @@ verify_sign `),n("span",{class:"token operator"},"="),s(" VerifyKey"),n("span",{ successfully connected! {:else} `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("WalletMultiButton")]),s(),n("span",{class:"token punctuation"},"/>")]),s(` {/if} -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br")])],-1),zs=n("div",{class:"language-html ext-html line-numbers-mode"},[n("pre",{class:"language-html"},[n("code",null,[n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("script")]),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"},[n("span",{class:"token language-javascript"},[s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br")])],-1),Ms=n("div",{class:"language-html ext-html line-numbers-mode"},[n("pre",{class:"language-html"},[n("code",null,[n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("script")]),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"},[n("span",{class:"token language-javascript"},[s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" walletStore "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@svelte-on-solana/wallet-adapter-core"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" WalletMultiButton "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@svelte-on-solana/wallet-adapter-ui"'),n("span",{class:"token punctuation"},";"),s(` `)])]),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` @@ -563,4 +645,4 @@ successfully connected! {:else} successfully connected! {:else} `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("WalletMultiButton")]),s(),n("span",{class:"token punctuation"},"/>")]),s(` {/if} -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br")])],-1);function As(Bs,Cs){const e=p("SolanaCodeGroupItem"),o=p("SolanaCodeGroup"),c=p("ExternalLinkIcon");return i(),r(k,null,[m,d,g,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[y]),preview:a(()=>[h]),_:1}),t(e,{title:"Python"},{default:a(()=>[w]),preview:a(()=>[f]),_:1}),t(e,{title:"Rust"},{default:a(()=>[_]),preview:a(()=>[v]),_:1}),t(e,{title:"CLI"},{default:a(()=>[x]),preview:a(()=>[S]),_:1})]),_:1}),K,W,P,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[z]),preview:a(()=>[A]),_:1}),t(e,{title:"Python"},{default:a(()=>[B]),preview:a(()=>[C]),_:1}),t(e,{title:"Rust"},{default:a(()=>[j]),preview:a(()=>[T]),_:1}),t(e,{title:"CLI"},{default:a(()=>[D]),preview:a(()=>[M]),_:1})]),_:1}),R,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[N]),preview:a(()=>[E]),_:1}),t(e,{title:"Python"},{default:a(()=>[V]),preview:a(()=>[U]),_:1}),t(e,{title:"Rust"},{default:a(()=>[J]),preview:a(()=>[H]),_:1})]),_:1}),L,Y,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[I]),preview:a(()=>[q]),_:1}),t(e,{title:"Python"},{default:a(()=>[F]),preview:a(()=>[X]),_:1}),t(e,{title:"CLI"},{default:a(()=>[G]),preview:a(()=>[Z]),_:1})]),_:1}),$,Q,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[O]),preview:a(()=>[nn]),_:1}),t(e,{title:"Python",active:""},{default:a(()=>[sn]),preview:a(()=>[an]),_:1}),t(e,{title:"Rust",active:""},{default:a(()=>[tn]),preview:a(()=>[en]),_:1})]),_:1}),on,cn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[pn]),preview:a(()=>[ln]),_:1}),t(e,{title:"Python"},{default:a(()=>[un]),preview:a(()=>[rn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[kn]),preview:a(()=>[bn]),_:1})]),_:1}),mn,dn,gn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[yn]),preview:a(()=>[hn]),_:1}),t(e,{title:"Python"},{default:a(()=>[wn]),preview:a(()=>[fn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[_n]),preview:a(()=>[vn]),_:1})]),_:1}),xn,Sn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Kn]),preview:a(()=>[Wn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[Pn]),preview:a(()=>[zn]),_:1})]),_:1}),An,Bn,Cn,jn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Tn]),preview:a(()=>[Dn]),_:1}),t(e,{title:"Python"},{default:a(()=>[Mn]),preview:a(()=>[Rn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[Nn]),preview:a(()=>[En]),_:1})]),_:1}),Vn,Un,n("p",null,[Jn,n("a",Hn,[Ln,t(c)]),Yn]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[In]),preview:a(()=>[qn]),_:1}),t(e,{title:"Python"},{default:a(()=>[Fn]),preview:a(()=>[Xn]),_:1})]),_:1}),Gn,n("p",null,[Zn,n("a",$n,[Qn,t(c)]),On]),ns,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[ss]),preview:a(()=>[as]),_:1})]),_:1}),ts,n("p",null,[es,n("a",os,[cs,t(c)]),ps,ls,us,n("a",is,[rs,t(c)]),ks]),t(o,null,{default:a(()=>[t(e,{title:"Vue",active:""},{default:a(()=>[bs]),preview:a(()=>[ms]),_:1})]),_:1}),ds,n("p",null,[gs,n("a",ys,[hs,t(c)]),ws,fs,_s,n("a",vs,[xs,t(c)]),Ss,Ks,Ws]),t(o,null,{default:a(()=>[t(e,{title:"Svelte",active:""},{default:a(()=>[Ps]),preview:a(()=>[zs]),_:1})]),_:1})],64)}var Ts=u(b,[["render",As]]);export{Ts as default}; +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br")])],-1);function Vs(Js,Us){const e=p("SolanaCodeGroupItem"),o=p("SolanaCodeGroup"),c=p("ExternalLinkIcon");return i(),r(k,null,[m,d,y,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[g]),preview:a(()=>[h]),_:1}),t(e,{title:"Python"},{default:a(()=>[w]),preview:a(()=>[f]),_:1}),t(e,{title:"C++"},{default:a(()=>[_]),preview:a(()=>[v]),_:1}),t(e,{title:"Rust"},{default:a(()=>[x]),preview:a(()=>[K]),_:1}),t(e,{title:"CLI"},{default:a(()=>[S]),preview:a(()=>[W]),_:1})]),_:1}),P,z,A,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[B]),preview:a(()=>[C]),_:1}),t(e,{title:"Python"},{default:a(()=>[j]),preview:a(()=>[D]),_:1}),t(e,{title:"C++"},{default:a(()=>[T]),preview:a(()=>[R]),_:1}),t(e,{title:"Rust"},{default:a(()=>[N]),preview:a(()=>[E]),_:1}),t(e,{title:"CLI"},{default:a(()=>[M]),preview:a(()=>[V]),_:1})]),_:1}),J,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[U]),preview:a(()=>[H]),_:1}),t(e,{title:"Python"},{default:a(()=>[Y]),preview:a(()=>[L]),_:1}),t(e,{title:"Rust"},{default:a(()=>[F]),preview:a(()=>[q]),_:1})]),_:1}),I,X,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Z]),preview:a(()=>[G]),_:1}),t(e,{title:"Python"},{default:a(()=>[$]),preview:a(()=>[Q]),_:1}),t(e,{title:"C++"},{default:a(()=>[O]),preview:a(()=>[nn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[sn]),preview:a(()=>[an]),_:1})]),_:1}),tn,en,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[on]),preview:a(()=>[cn]),_:1}),t(e,{title:"Python",active:""},{default:a(()=>[pn]),preview:a(()=>[un]),_:1}),t(e,{title:"C++",active:""},{default:a(()=>[ln]),preview:a(()=>[rn]),_:1}),t(e,{title:"Rust",active:""},{default:a(()=>[kn]),preview:a(()=>[bn]),_:1})]),_:1}),mn,dn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[yn]),preview:a(()=>[gn]),_:1}),t(e,{title:"Python"},{default:a(()=>[hn]),preview:a(()=>[wn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[fn]),preview:a(()=>[_n]),_:1})]),_:1}),vn,xn,Kn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Sn]),preview:a(()=>[Wn]),_:1}),t(e,{title:"Python"},{default:a(()=>[Pn]),preview:a(()=>[zn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[An]),preview:a(()=>[Bn]),_:1})]),_:1}),Cn,jn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Dn]),preview:a(()=>[Tn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[Rn]),preview:a(()=>[Nn]),_:1})]),_:1}),En,Mn,Vn,Jn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Un]),preview:a(()=>[Hn]),_:1}),t(e,{title:"Python"},{default:a(()=>[Yn]),preview:a(()=>[Ln]),_:1}),t(e,{title:"C++"},{default:a(()=>[Fn]),preview:a(()=>[qn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[In]),preview:a(()=>[Xn]),_:1})]),_:1}),Zn,Gn,n("p",null,[$n,n("a",Qn,[On,t(c)]),ns]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[ss]),preview:a(()=>[as]),_:1}),t(e,{title:"Python"},{default:a(()=>[ts]),preview:a(()=>[es]),_:1})]),_:1}),os,n("p",null,[cs,n("a",ps,[us,t(c)]),ls]),is,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[rs]),preview:a(()=>[ks]),_:1})]),_:1}),bs,n("p",null,[ms,n("a",ds,[ys,t(c)]),gs,hs,ws,n("a",fs,[_s,t(c)]),vs]),t(o,null,{default:a(()=>[t(e,{title:"Vue",active:""},{default:a(()=>[xs]),preview:a(()=>[Ks]),_:1})]),_:1}),Ss,n("p",null,[Ws,n("a",Ps,[zs,t(c)]),As,Bs,Cs,n("a",js,[Ds,t(c)]),Ts,Rs,Ns]),t(o,null,{default:a(()=>[t(e,{title:"Svelte",active:""},{default:a(()=>[Es]),preview:a(()=>[Ms]),_:1})]),_:1})],64)}var Ys=l(b,[["render",Vs]]);export{Ys as default}; diff --git a/docs/.vuepress/dist/assets/keypairs-and-wallets.html.2edd4832.js b/docs/.vuepress/dist/assets/keypairs-and-wallets.html.b96ee178.js similarity index 74% rename from docs/.vuepress/dist/assets/keypairs-and-wallets.html.2edd4832.js rename to docs/.vuepress/dist/assets/keypairs-and-wallets.html.b96ee178.js index 798544538..804c3c82e 100644 --- a/docs/.vuepress/dist/assets/keypairs-and-wallets.html.2edd4832.js +++ b/docs/.vuepress/dist/assets/keypairs-and-wallets.html.b96ee178.js @@ -1,24 +1,39 @@ -import{_ as u,r as p,o as i,c as r,b as t,w as a,a as n,F as k,d as s,e as l}from"./app.cfdf84e7.js";const b={},m=n("h1",{id:"pares-de-llaves-y-billeteras",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#pares-de-llaves-y-billeteras","aria-hidden":"true"},"#"),s(" Pares de llaves y billeteras")],-1),d=n("h2",{id:"como-generar-un-nuevo-keypair-par-de-llaves",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#como-generar-un-nuevo-keypair-par-de-llaves","aria-hidden":"true"},"#"),s(" C\xF3mo generar un nuevo Keypair (par de llaves)")],-1),y=n("p",null,"Muchas de las acciones que vas a realizar con las librer\xEDas de Solana requieren un par de llaves o una billetera. Si te conectas con una billetera, no tienes que preocuparte, sin embargo, si necesitas un par de llaves, deber\xE1s de generarlas.",-1),g=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +import{_ as u,r as p,o as i,c as r,b as t,w as a,a as n,F as k,d as s,e as l}from"./app.2fbb9e96.js";const b={},m=n("h1",{id:"pares-de-llaves-y-billeteras",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#pares-de-llaves-y-billeteras","aria-hidden":"true"},"#"),s(" Pares de llaves y billeteras")],-1),d=n("h2",{id:"como-generar-un-nuevo-keypair-par-de-llaves",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#como-generar-un-nuevo-keypair-par-de-llaves","aria-hidden":"true"},"#"),s(" C\xF3mo generar un nuevo Keypair (par de llaves)")],-1),y=n("p",null,"Muchas de las acciones que vas a realizar con las librer\xEDas de Solana requieren un par de llaves o una billetera. Si te conectas con una billetera, no tienes que preocuparte, sin embargo, si necesitas un par de llaves, deber\xE1s de generarlas.",-1),g=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"let"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br")])],-1),h=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),w=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),w=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),v=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),_=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("signature"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),_=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token comment"},"// clang++ generate_keypair.cpp -o generate_keypair -std=c++17 -lssl -lcrypto -lsodium"),s(` + +`),n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + `),n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"auto"),s(" public_key "),n("span",{class:"token operator"},"="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"public_key = "'),s(),n("span",{class:"token operator"},"<<"),s(" public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"return"),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br")])],-1),f=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),x=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("signature"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"let"),s(" wallet "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br")])],-1),f=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" wallet "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),x=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s(`$ solana-keygen new +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br")])],-1),K=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" wallet "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),P=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s(`$ solana-keygen new `),n("span",{class:"token comment"},"# pubkey: 9ZNTfG4NyQgxy2SWjSiQoUyBPEvXT2xo7fKc5hPYYJ7b"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),K=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen new -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),P=n("h2",{id:"como-restaurar-un-par-de-llaves-a-partir-de-una-llave-privada",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#como-restaurar-un-par-de-llaves-a-partir-de-una-llave-privada","aria-hidden":"true"},"#"),s(" C\xF3mo restaurar un par de llaves a partir de una llave privada")],-1),S=n("p",null,"Si ya tienes tu llave privada, puedes generar un Keypair a partir de la llave privada para probar tu dApp.",-1),W=n("ol",null,[n("li",null,"Con Bytes")],-1),C=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),S=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen new +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),W=n("h2",{id:"como-restaurar-un-par-de-llaves-a-partir-de-una-llave-privada",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#como-restaurar-un-par-de-llaves-a-partir-de-una-llave-privada","aria-hidden":"true"},"#"),s(" C\xF3mo restaurar un par de llaves a partir de una llave privada")],-1),C=n("p",null,"Si ya tienes tu llave privada, puedes generar un Keypair a partir de la llave privada para probar tu dApp.",-1),j=n("ol",null,[n("li",null,"Con Bytes")],-1),A=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSecretKey"),n("span",{class:"token punctuation"},"("),s(` @@ -30,7 +45,7 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br")])],-1),j=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSecretKey"),n("span",{class:"token punctuation"},"("),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br")])],-1),T=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSecretKey"),n("span",{class:"token punctuation"},"("),s(` Uint8Array`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"["),s(` `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"189"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"224"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"216"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"117"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"173"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"149"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"45"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"73"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"237"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"246"),n("span",{class:"token punctuation"},","),s(` @@ -38,7 +53,7 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),A=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),z=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair secret_key`),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"["),s(` `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(` @@ -47,17 +62,40 @@ secret_key`),n("span",{class:"token operator"},"="),s(),n("span",{class:"token p `),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"]"),s(` -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"bytes"),n("span",{class:"token punctuation"},"("),s("secret_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created Keypair with Public Key: {}"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),T=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("secret_key"),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"["),s(` +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_bytes"),n("span",{class:"token punctuation"},"("),s("secret_key"),n("span",{class:"token punctuation"},")"),s(` +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created Keypair with Public Key: {}"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),q=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("secret_key"),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"["),s(` `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"189"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"224"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"216"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"117"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"173"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"149"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"45"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"73"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"237"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"246"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"15"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"185"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"186"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"82"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"177"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"]"),s(` -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"bytes"),n("span",{class:"token punctuation"},"("),s("secret_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),z=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("signature"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"Signer"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_bytes"),n("span",{class:"token punctuation"},"("),s("secret_key"),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),E=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token comment"},"// clang++ keypair_from_seed.cpp -o keypair_from_seed -std=c++17 -lssl -lcrypto -lsodium"),s(` + +`),n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + `),n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token keyword"},"uint8_t"),s(" bytes"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},"]"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"{"),s(` + `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(` + `),n("span",{class:"token number"},"189"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"224"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"216"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"117"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"173"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"149"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"45"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"73"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"237"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"246"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"15"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"185"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"186"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"82"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"177"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(` + `),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(` + `),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` + `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` + Keypair key_pair `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"from_seed"),n("span",{class:"token punctuation"},"("),s("bytes"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"Created Keypair with Public Key: "'),s(),n("span",{class:"token operator"},"<<"),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br")])],-1),R=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token keyword"},"uint8_t"),s(" secret_key"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},"]"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"{"),s(` +`),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(` +`),n("span",{class:"token number"},"189"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"224"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"216"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"117"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"173"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"149"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"45"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"73"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"237"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"246"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"15"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"185"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"186"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"82"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"177"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(` +`),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(` +`),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` +`),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` +Keypair key_pair `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"from_seed"),n("span",{class:"token punctuation"},"("),s("secret_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),B=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("signature"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"Signer"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"let"),s(" secret_key"),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token punctuation"},"["),n("span",{class:"token keyword"},"u8"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token number"},"64"),n("span",{class:"token punctuation"},"]"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"["),s(` @@ -72,7 +110,7 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token macro property"},"println!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created keypair: {}"'),n("span",{class:"token punctuation"},","),s(" pubkey"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br")])],-1),q=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" secret_key"),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token punctuation"},"["),n("span",{class:"token keyword"},"u8"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token number"},"64"),n("span",{class:"token punctuation"},"]"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"["),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br")])],-1),M=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" secret_key"),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token punctuation"},"["),n("span",{class:"token keyword"},"u8"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token number"},"64"),n("span",{class:"token punctuation"},"]"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"["),s(` `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"189"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"224"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"216"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"117"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"173"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"149"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"45"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"73"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"237"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"246"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"15"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"185"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"186"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"82"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"177"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(` @@ -80,9 +118,9 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"let"),s(" wallet "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from_bytes"),n("span",{class:"token punctuation"},"("),n("span",{class:"token operator"},"&"),s("secret_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),B=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# input your secret into the Keypath listed under solana config get"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),M=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# input your secret into the Keypath listed under solana config get"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),R=n("ol",{start:"2"},[n("li",null,"Con una cadena Base58")],-1),E=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),D=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# input your secret into the Keypath listed under solana config get"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),N=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# input your secret into the Keypath listed under solana config get"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),J=n("ol",{start:"2"},[n("li",null,"Con una cadena Base58")],-1),U=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" bs58 "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"bs58"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -92,20 +130,19 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),D=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSecretKey"),n("span",{class:"token punctuation"},"("),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),L=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSecretKey"),n("span",{class:"token punctuation"},"("),s(` bs58`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"decode"),n("span",{class:"token punctuation"},"("),s(` `),n("span",{class:"token string"},'"5MaiiCavjCmn9Hs1o3eznqDEhRwxo7pXiAYez7keQUviUkauRiTMD8DrESdrNjN8zd9mTmVhRvBJeg5vhyvgrAhG"'),s(` `),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br")])],-1),N=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(` base58 -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br")])],-1),V=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair b58_string `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"5MaiiCavjCmn9Hs1o3eznqDEhRwxo7pXiAYez7keQUviUkauRiTMD8DrESdrNjN8zd9mTmVhRvBJeg5vhyvgrAhG"'),s(` -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),s("base58"),n("span",{class:"token punctuation"},"."),s("b58decode"),n("span",{class:"token punctuation"},"("),s("b58_string"),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created Keypair with Public Key: {}"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),U=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("b58_string "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"5MaiiCavjCmn9Hs1o3eznqDEhRwxo7pXiAYez7keQUviUkauRiTMD8DrESdrNjN8zd9mTmVhRvBJeg5vhyvgrAhG"'),s(` -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),s("base58"),n("span",{class:"token punctuation"},"."),s("b58decode"),n("span",{class:"token punctuation"},"("),s("b58_string"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),V=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("signature"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"Signer"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_string"),n("span",{class:"token punctuation"},"("),s("b58_string"),n("span",{class:"token punctuation"},")"),s(` +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created Keypair with Public Key: {}"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br")])],-1),H=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("b58_string "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"5MaiiCavjCmn9Hs1o3eznqDEhRwxo7pXiAYez7keQUviUkauRiTMD8DrESdrNjN8zd9mTmVhRvBJeg5vhyvgrAhG"'),s(` +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_string"),n("span",{class:"token punctuation"},"("),s("b58_string"),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),Y=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("signature"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"Signer"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"let"),s(" wallet "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from_base58_string"),n("span",{class:"token punctuation"},"("),s(` @@ -114,10 +151,10 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token keyword"},"let"),s(" pubkey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Signer"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token operator"},"&"),s("wallet"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token macro property"},"println!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created keypair: {}"'),n("span",{class:"token punctuation"},","),s(" pubkey"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br")])],-1),L=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" wallet "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from_base58_string"),n("span",{class:"token punctuation"},"("),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br")])],-1),F=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" wallet "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from_base58_string"),n("span",{class:"token punctuation"},"("),s(` `),n("span",{class:"token string"},'"5MaiiCavjCmn9Hs1o3eznqDEhRwxo7pXiAYez7keQUviUkauRiTMD8DrESdrNjN8zd9mTmVhRvBJeg5vhyvgrAhG"'),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),J=n("h2",{id:"como-verificar-un-par-de-llaves",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#como-verificar-un-par-de-llaves","aria-hidden":"true"},"#"),s(" C\xF3mo verificar un par de llaves")],-1),Y=n("p",null,"Si cuentas con un par de llaves, puedes verificar si la llave privada coincide con la llave p\xFAblica",-1),H=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),X=n("h2",{id:"como-verificar-un-par-de-llaves",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#como-verificar-un-par-de-llaves","aria-hidden":"true"},"#"),s(" C\xF3mo verificar un par de llaves")],-1),I=n("p",null,"Si cuentas con un par de llaves, puedes verificar si la llave privada coincide con la llave p\xFAblica",-1),Z=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"const"),s(" publicKey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),s(` @@ -134,7 +171,7 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"==="),s(" publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token comment"},"// true"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br")])],-1),F=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" publicKey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br")])],-1),$=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" publicKey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSecretKey"),n("span",{class:"token punctuation"},"("),s(` Uint8Array`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"["),s(` `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(` @@ -145,10 +182,10 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"==="),s(" publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token comment"},"// true"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),I=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("publickey "),n("span",{class:"token keyword"},"import"),s(` PublicKey +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),G=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("pubkey "),n("span",{class:"token keyword"},"import"),s(` Pubkey -public_key `),n("span",{class:"token operator"},"="),s(" PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p"'),n("span",{class:"token punctuation"},")"),s(` +public_key `),n("span",{class:"token operator"},"="),s(" Pubkey"),n("span",{class:"token punctuation"},"."),s("from_string"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p"'),n("span",{class:"token punctuation"},")"),s(` keys `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"["),s(` `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(` @@ -156,11 +193,11 @@ keys `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctu `),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"]"),s(` -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"bytes"),n("span",{class:"token punctuation"},"("),s("keys"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_bytes"),n("span",{class:"token punctuation"},"("),s("keys"),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},"."),s("to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=="),s(" public_key"),n("span",{class:"token punctuation"},"."),s("to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=="),s(" public_key"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"# True"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br")])],-1),X=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("public_key "),n("span",{class:"token operator"},"="),s(" PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p"'),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br")])],-1),Q=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("public_key "),n("span",{class:"token operator"},"="),s(" Pubkey"),n("span",{class:"token punctuation"},"."),s("from_string"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p"'),n("span",{class:"token punctuation"},")"),s(` keys `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"["),s(` `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(` @@ -168,13 +205,44 @@ keys `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctu `),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"]"),s(` -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"bytes"),n("span",{class:"token punctuation"},"("),s("keys"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_bytes"),n("span",{class:"token punctuation"},"("),s("keys"),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},"."),s("to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=="),s(" public_key"),n("span",{class:"token punctuation"},"."),s("to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=="),s(" public_key"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"# True"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br")])],-1),Z=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana-keygen verify "),n("span",{class:"token operator"},"<"),s("PUBKEY"),n("span",{class:"token operator"},">"),s(` prompt:// -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),$=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana-keygen verify "),n("span",{class:"token operator"},"<"),s("PUBKEY"),n("span",{class:"token operator"},">"),s(` prompt:// -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),G=n("h2",{id:"como-comprobar-si-una-llave-publica-tiene-una-llave-privada-asociada",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#como-comprobar-si-una-llave-publica-tiene-una-llave-privada-asociada","aria-hidden":"true"},"#"),s(" C\xF3mo comprobar si una llave p\xFAblica tiene una llave privada asociada")],-1),Q=n("p",null,"En ciertos casos especiales (por ejemplo, una direcci\xF3n derivada de un programa), es posible que las claves p\xFAblicas no tengan una clave privada asociada. Puedes verificar esto observando si la llave p\xFAblica se encuentra en la curva ed25519. Solo las claves p\xFAblicas que se encuentran en la curva pueden ser controladas por usuarios con billeteras.",-1),O=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br")])],-1),O=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token comment"},"// clang++ verify_keypair.cpp -o verify_keypair -std=c++17 -lssl -lcrypto -lsodium"),s(` + +`),n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + PublicKey public_key `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token keyword"},"uint8_t"),s(" bytes"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},"]"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"{"),s(` + `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(` + `),n("span",{class:"token number"},"189"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"224"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"216"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"117"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"173"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"149"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"45"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"73"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"237"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"246"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"15"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"185"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"186"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"82"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"177"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(` + `),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(` + `),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` + `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` + Keypair key_pair `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"from_seed"),n("span",{class:"token punctuation"},"("),s("bytes"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token punctuation"},"("),s("public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br")])],-1),nn=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[s("PublicKey public_key "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token keyword"},"uint8_t"),s(" bytes"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},"]"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"{"),s(` +`),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(` +`),n("span",{class:"token number"},"189"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"224"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"216"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"117"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"173"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"149"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"45"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"73"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"237"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"246"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"15"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"185"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"186"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"82"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"177"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(` +`),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(` +`),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` +`),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` +Keypair key_pair `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"from_seed"),n("span",{class:"token punctuation"},"("),s("bytes"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + +std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token punctuation"},"("),s("public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token comment"},"// 1"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br")])],-1),sn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana-keygen verify "),n("span",{class:"token operator"},"<"),s("PUBKEY"),n("span",{class:"token operator"},">"),s(` prompt:// +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),an=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana-keygen verify "),n("span",{class:"token operator"},"<"),s("PUBKEY"),n("span",{class:"token operator"},">"),s(` prompt:// +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),tn=n("h2",{id:"como-comprobar-si-una-llave-publica-tiene-una-llave-privada-asociada",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#como-comprobar-si-una-llave-publica-tiene-una-llave-privada-asociada","aria-hidden":"true"},"#"),s(" C\xF3mo comprobar si una llave p\xFAblica tiene una llave privada asociada")],-1),en=n("p",null,"En ciertos casos especiales (por ejemplo, una direcci\xF3n derivada de un programa), es posible que las claves p\xFAblicas no tengan una clave privada asociada. Puedes verificar esto observando si la llave p\xFAblica se encuentra en la curva ed25519. Solo las claves p\xFAblicas que se encuentran en la curva pueden ser controladas por usuarios con billeteras.",-1),on=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token keyword"},"function"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token comment"},"// Note that Keypair.generate() will always give a public key that is valid for users"),s(` @@ -188,23 +256,34 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token keyword"},"const"),s(" errorPubkey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"testPubkey"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token comment"},"// Is not a valid public key"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br")])],-1),nn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" key "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br")])],-1),cn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" key "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("PublicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"isOnCurve"),n("span",{class:"token punctuation"},"("),s("key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBytes"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),sn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("publickey "),n("span",{class:"token keyword"},"import"),s(` PublicKey -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("utils"),n("span",{class:"token punctuation"},"."),s("ed25519_base "),n("span",{class:"token keyword"},"import"),s(` is_on_curve +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),pn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("pubkey "),n("span",{class:"token keyword"},"import"),s(` Pubkey `),n("span",{class:"token comment"},"# Note that Keypair() will always give a public key that is valid for users"),s(` -key `),n("span",{class:"token operator"},"="),s(" PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},"'5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY'"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# Valid public key"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("is_on_curve"),n("span",{class:"token punctuation"},"("),s("key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# Lies on the ed25519 curve and is suitable for users"),s(` +key `),n("span",{class:"token operator"},"="),s(" Pubkey"),n("span",{class:"token punctuation"},"."),s("from_string"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},"'5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY'"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# Valid public key"),s(` +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("key"),n("span",{class:"token punctuation"},"."),s("is_on_curve"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# Lies on the ed25519 curve and is suitable for users"),s(` + +off_curve_address `),n("span",{class:"token operator"},"="),s(" Pubkey"),n("span",{class:"token punctuation"},"."),s("from_string"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},"'4BJXYkfvg37zEmBbsacZjeQDpTNx91KppxFJxRqrz48e'"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# Valid public key"),s(` +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("off_curve_address"),n("span",{class:"token punctuation"},"."),s("is_on_curve"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# Not on the ed25519 curve, therefore not suitable for users"),s(` + +error_pubkey `),n("span",{class:"token operator"},"="),s(" Pubkey"),n("span",{class:"token punctuation"},"."),s("from_string"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"testPubkey"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token comment"},"# Is not a valid public key"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),ln=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("key "),n("span",{class:"token operator"},"="),s(" Pubkey"),n("span",{class:"token punctuation"},"."),s("from_string"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},"'5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY'"),n("span",{class:"token punctuation"},")"),s(` +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("key"),n("span",{class:"token punctuation"},"."),s("is_on_curve"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),un=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},"")]),s(` +`),n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},"")]),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` +`),n("span",{class:"token punctuation"},"{"),s(` + `),n("span",{class:"token keyword"},"auto"),s(" public_key "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -off_curve_address `),n("span",{class:"token operator"},"="),s(" PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},"'4BJXYkfvg37zEmBbsacZjeQDpTNx91KppxFJxRqrz48e'"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# Valid public key"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("PublicKey"),n("span",{class:"token punctuation"},"."),s("_is_on_curve"),n("span",{class:"token punctuation"},"("),s("off_curve_address"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# Not on the ed25519 curve, therefore not suitable for users"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(" public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"is_on_curve"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` -error_pubkey `),n("span",{class:"token operator"},"="),s(" PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"testPubkey"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token comment"},"# Is not a valid public key"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br")])],-1),an=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("key "),n("span",{class:"token operator"},"="),s(" PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},"'5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY'"),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("is_on_curve"),n("span",{class:"token punctuation"},"("),s("key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),tn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("pubkey"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Pubkey"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token keyword"},"return"),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),rn=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token keyword"},"auto"),s(" public_key "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(" public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"is_on_curve"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),kn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("pubkey"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Pubkey"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("std"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token keyword"},"str"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token class-name"},"FromStr"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -217,21 +296,21 @@ error_pubkey `),n("span",{class:"token operator"},"="),s(" PublicKey"),n("span", `),n("span",{class:"token keyword"},"let"),s(" error_pubkey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Pubkey"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from_str"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"testPubkey"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token comment"},"// Is not a valid public key"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br")])],-1),en=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" pubkey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Pubkey"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from_str"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br")])],-1),bn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" pubkey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Pubkey"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from_str"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token macro property"},"println!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"{:?}"'),n("span",{class:"token punctuation"},","),s(" pubkey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"is_on_curve"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),on=n("h2",{id:"como-generar-una-frase-semilla-mnemonic",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#como-generar-una-frase-semilla-mnemonic","aria-hidden":"true"},"#"),s(" C\xF3mo generar una frase semilla (mnemonic)")],-1),cn=n("p",null,"Si est\xE1s creando una billetera, deber\xE1s generar una frase semilla para que el usuario pueda guardarla como respaldo.",-1),pn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" bip39 "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"bip39"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),mn=n("h2",{id:"como-generar-una-frase-semilla-mnemonic",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#como-generar-una-frase-semilla-mnemonic","aria-hidden":"true"},"#"),s(" C\xF3mo generar una frase semilla (mnemonic)")],-1),dn=n("p",null,"Si est\xE1s creando una billetera, deber\xE1s generar una frase semilla para que el usuario pueda guardarla como respaldo.",-1),yn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" bip39 "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"bip39"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" mnemonic "),n("span",{class:"token operator"},"="),s(" bip39"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generateMnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),ln=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" mnemonic "),n("span",{class:"token operator"},"="),s(" bip39"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generateMnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),un=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" mnemonic "),n("span",{class:"token keyword"},"import"),s(` Mnemonic +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),gn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" mnemonic "),n("span",{class:"token operator"},"="),s(" bip39"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generateMnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),hn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" mnemonic "),n("span",{class:"token keyword"},"import"),s(` Mnemonic mnemo `),n("span",{class:"token operator"},"="),s(" Mnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"english"'),n("span",{class:"token punctuation"},")"),s(` words `),n("span",{class:"token operator"},"="),s(" mnemo"),n("span",{class:"token punctuation"},"."),s("generate"),n("span",{class:"token punctuation"},"("),s("strength"),n("span",{class:"token operator"},"="),n("span",{class:"token number"},"256"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),rn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("mnemo "),n("span",{class:"token operator"},"="),s(" Mnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"english"'),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),wn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("mnemo "),n("span",{class:"token operator"},"="),s(" Mnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"english"'),n("span",{class:"token punctuation"},")"),s(` words `),n("span",{class:"token operator"},"="),s(" mnemo"),n("span",{class:"token punctuation"},"."),s("generate"),n("span",{class:"token punctuation"},"("),s("strength"),n("span",{class:"token operator"},"="),n("span",{class:"token number"},"256"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),kn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen new -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),bn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen new -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),mn=n("h2",{id:"como-restaurar-un-par-de-llaves-desde-una-frase-semilla",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#como-restaurar-un-par-de-llaves-desde-una-frase-semilla","aria-hidden":"true"},"#"),s(" C\xF3mo restaurar un par de llaves desde una frase semilla")],-1),dn=n("p",null,"Muchas extensiones de billetera usan frases semilla para representar sus llaves secretas. Puede convertir la frase semilla en pares de llaves para realizar pruebas locales.",-1),yn=n("ol",null,[n("li",null,"BIP39 - creando una wallet simple")],-1),gn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),vn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen new +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),_n=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen new +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),fn=n("h2",{id:"como-restaurar-un-par-de-llaves-desde-una-frase-semilla",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#como-restaurar-un-par-de-llaves-desde-una-frase-semilla","aria-hidden":"true"},"#"),s(" C\xF3mo restaurar un par de llaves desde una frase semilla")],-1),xn=n("p",null,"Muchas extensiones de billetera usan frases semilla para representar sus llaves secretas. Puede convertir la frase semilla en pares de llaves para realizar pruebas locales.",-1),Kn=n("ol",null,[n("li",null,"BIP39 - creando una wallet simple")],-1),Pn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" bip39 "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"bip39"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -241,23 +320,23 @@ words `),n("span",{class:"token operator"},"="),s(" mnemo"),n("span",{class:"tok `),n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSeed"),n("span",{class:"token punctuation"},"("),s("seed"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"slice"),n("span",{class:"token punctuation"},"("),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"32"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),n("span",{class:"token template-string"},[n("span",{class:"token template-punctuation string"},"`"),n("span",{class:"token interpolation"},[n("span",{class:"token interpolation-punctuation punctuation"},"${"),s("keypair"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token interpolation-punctuation punctuation"},"}")]),n("span",{class:"token template-punctuation string"},"`")]),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token comment"},"// 5ZWj7a1f8tWkjBESHKgrLmXshuXxqeY9SYcfbshpAqPG"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),hn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" mnemonic "),n("span",{class:"token operator"},"="),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),Sn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" mnemonic "),n("span",{class:"token operator"},"="),s(` `),n("span",{class:"token string"},'"pill tomorrow foster begin walnut borrow virtual kick shift mutual shoe scatter"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" seed "),n("span",{class:"token operator"},"="),s(" bip39"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"mnemonicToSeedSync"),n("span",{class:"token punctuation"},"("),s("mnemonic"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token string"},'""'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token comment"},"// (mnemonic, password)"),s(` `),n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSeed"),n("span",{class:"token punctuation"},"("),s("seed"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"slice"),n("span",{class:"token punctuation"},"("),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"32"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),wn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),Wn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair `),n("span",{class:"token keyword"},"from"),s(" mnemonic "),n("span",{class:"token keyword"},"import"),s(` Mnemonic mnemo `),n("span",{class:"token operator"},"="),s(" Mnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"english"'),n("span",{class:"token punctuation"},")"),s(` seed `),n("span",{class:"token operator"},"="),s(" mnemo"),n("span",{class:"token punctuation"},"."),s("to_seed"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"pill tomorrow foster begin walnut borrow virtual kick shift mutual shoe scatter"'),n("span",{class:"token punctuation"},")"),s(` -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),s("seed"),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created Keypair with Public Key: {}"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),vn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("mnemo "),n("span",{class:"token operator"},"="),s(" Mnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"english"'),n("span",{class:"token punctuation"},")"),s(` +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_bytes"),n("span",{class:"token punctuation"},"("),s("seed"),n("span",{class:"token punctuation"},")"),s(` +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created Keypair with Public Key: {}"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),Cn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("mnemo "),n("span",{class:"token operator"},"="),s(" Mnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"english"'),n("span",{class:"token punctuation"},")"),s(` seed `),n("span",{class:"token operator"},"="),s(" mnemo"),n("span",{class:"token punctuation"},"."),s("to_seed"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"pill tomorrow foster begin walnut borrow virtual kick shift mutual shoe scatter"'),n("span",{class:"token punctuation"},")"),s(` -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),s("seed"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),_n=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen recover -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),fn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen recover -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),xn=n("ol",{start:"2"},[n("li",null,"BIP44 (varios wallets, tambi\xE9n conocido como HD wallets)")],-1),Kn=n("p",null,'Puede crear varias carteras a partir de una sola semilla, tambi\xE9n conocidas como "carteras deterministas jer\xE1rquicas" o carteras HD:',-1),Pn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_bytes"),n("span",{class:"token punctuation"},"("),s("seed"),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),jn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen recover +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),An=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen recover +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Tn=n("ol",{start:"2"},[n("li",null,"BIP44 (varios wallets, tambi\xE9n conocido como HD wallets)")],-1),zn=n("p",null,'Puede crear varias carteras a partir de una sola semilla, tambi\xE9n conocidas como "carteras deterministas jer\xE1rquicas" o carteras HD:',-1),qn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" HDKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"micro-ed25519-hdkey"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" bip39 "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"bip39"'),n("span",{class:"token punctuation"},";"),s(` @@ -272,7 +351,7 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),n("span",{class:"token template-string"},[n("span",{class:"token template-punctuation string"},"`"),n("span",{class:"token interpolation"},[n("span",{class:"token interpolation-punctuation punctuation"},"${"),s("path"),n("span",{class:"token interpolation-punctuation punctuation"},"}")]),n("span",{class:"token string"}," => "),n("span",{class:"token interpolation"},[n("span",{class:"token interpolation-punctuation punctuation"},"${"),s("keypair"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token interpolation-punctuation punctuation"},"}")]),n("span",{class:"token template-punctuation string"},"`")]),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br")])],-1),Sn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" mnemonic "),n("span",{class:"token operator"},"="),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br")])],-1),En=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" mnemonic "),n("span",{class:"token operator"},"="),s(` `),n("span",{class:"token string"},'"neither lonely flavor argue grass remind eye tag avocado spot unusual intact"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" seed "),n("span",{class:"token operator"},"="),s(" bip39"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"mnemonicToSeedSync"),n("span",{class:"token punctuation"},"("),s("mnemonic"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token string"},'""'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token comment"},"// (mnemonic, password)"),s(` `),n("span",{class:"token keyword"},"for"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"let"),s(" i "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(" i "),n("span",{class:"token operator"},"<"),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},";"),s(" i"),n("span",{class:"token operator"},"++"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -280,9 +359,9 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSeed"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"derivePath"),n("span",{class:"token punctuation"},"("),s("path"),n("span",{class:"token punctuation"},","),s(" seed"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toString"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"hex"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),s("key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),n("span",{class:"token template-string"},[n("span",{class:"token template-punctuation string"},"`"),n("span",{class:"token interpolation"},[n("span",{class:"token interpolation-punctuation punctuation"},"${"),s("path"),n("span",{class:"token interpolation-punctuation punctuation"},"}")]),n("span",{class:"token string"}," => "),n("span",{class:"token interpolation"},[n("span",{class:"token interpolation-punctuation punctuation"},"${"),s("keypair"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token interpolation-punctuation punctuation"},"}")]),n("span",{class:"token template-punctuation string"},"`")]),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),Wn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana-keygen recover "),n("span",{class:"token string"},"'prompt:?key=0/0'"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Cn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana-keygen recover "),n("span",{class:"token string"},"'prompt:?key=0/0'"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),jn=n("h2",{id:"como-generar-una-direccion-personalizada",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#como-generar-una-direccion-personalizada","aria-hidden":"true"},"#"),s(" C\xF3mo generar una direcci\xF3n personalizada")],-1),An=n("p",null,'Vanity publickeys o direcciones personalizadas son llaves que comienzan con caracteres espec\xEDficos. Por ejemplo, una persona puede querer que una llave p\xFAblica comience con "elv1s", o tal vez incluso "cook". Estos pueden ayudar a otras personas. Recordar a qui\xE9n pertenece la llave, haciendo que la llave sea m\xE1s f\xE1cilmente identificable.',-1),Tn=n("p",null,"Nota: Cuantos m\xE1s caracteres haya en su direcci\xF3n personalizada, m\xE1s tiempo durar\xE1. tomar.",-1),zn=n("p",null,"::: advertencia Solo debe usar la CLI para esta tarea. Los ejemplos de Python y TypeScript tienen fines ilustrativos y son mucho m\xE1s lentos que la CLI. :::",-1),qn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),Rn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana-keygen recover "),n("span",{class:"token string"},"'prompt:?key=0/0'"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Bn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana-keygen recover "),n("span",{class:"token string"},"'prompt:?key=0/0'"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Mn=n("h2",{id:"como-generar-una-direccion-personalizada",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#como-generar-una-direccion-personalizada","aria-hidden":"true"},"#"),s(" C\xF3mo generar una direcci\xF3n personalizada")],-1),Dn=n("p",null,'Vanity publickeys o direcciones personalizadas son llaves que comienzan con caracteres espec\xEDficos. Por ejemplo, una persona puede querer que una llave p\xFAblica comience con "elv1s", o tal vez incluso "cook". Estos pueden ayudar a otras personas. Recordar a qui\xE9n pertenece la llave, haciendo que la llave sea m\xE1s f\xE1cilmente identificable.',-1),Nn=n("p",null,"Nota: Cuantos m\xE1s caracteres haya en su direcci\xF3n personalizada, m\xE1s tiempo durar\xE1. tomar.",-1),Jn=n("p",null,"::: advertencia Solo debe usar la CLI para esta tarea. Los ejemplos de Python y TypeScript tienen fines ilustrativos y son mucho m\xE1s lentos que la CLI. :::",-1),Un=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"let"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` @@ -290,23 +369,42 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),Bn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),Ln=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"while"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token operator"},"!"),s("keypair"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"startsWith"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"elv1s"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),Mn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),Vn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"while"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"str"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},":"),n("span",{class:"token number"},"5"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token operator"},"!="),n("span",{class:"token string"},'"elv1s"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},":"),s(` +`),n("span",{class:"token keyword"},"while"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"str"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},":"),n("span",{class:"token number"},"5"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token operator"},"!="),n("span",{class:"token string"},'"elv1s"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},":"),s(` keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created Keypair with Public Key: {}"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),Rn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"while"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"str"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},":"),n("span",{class:"token number"},"5"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token operator"},"!="),n("span",{class:"token string"},'"elv1s"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},":"),s(` +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created Keypair with Public Key: {}"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),Hn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` +`),n("span",{class:"token keyword"},"while"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"str"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},":"),n("span",{class:"token number"},"5"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token operator"},"!="),n("span",{class:"token string"},'"elv1s"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},":"),s(` keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),En=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen grind --starts-with e1v1s:1 -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Dn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen grind --starts-with e1v1s:1 -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Nn=n("h2",{id:"como-firmar-y-verificar-mensajes-con-wallets",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#como-firmar-y-verificar-mensajes-con-wallets","aria-hidden":"true"},"#"),s(" C\xF3mo firmar y verificar mensajes con wallets")],-1),Un=n("p",null,"La funci\xF3n principal de un par de llaves es firmar mensajes y habilitar la verificaci\xF3n de la firma. La verificaci\xF3n de una firma permite el destinatario asegurarse de que los datos fueron firmados por el propietario de un clave privada espec\xEDfica.",-1),Vn=s("Para hacerlo vamos a importar la librer\xEDa crypto "),Ln={href:"https://www.npmjs.com/package/tweetnacl",target:"_blank",rel:"noopener noreferrer"},Jn=s("TweetNaCl"),Yn=s("."),Hn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),Yn=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token comment"},"// clang++ vanity_keypair.cpp -o vanity_keypair -std=c++17 -lssl -lcrypto -lsodium"),s(` + +`),n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + `),n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"while"),s(),n("span",{class:"token punctuation"},"("),s("key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"substr"),n("span",{class:"token punctuation"},"("),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"5"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"!="),s(),n("span",{class:"token string"},'"elv1s"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + key_pair `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token punctuation"},"}"),s(` + + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"Created Keypair with Public Key: "'),s(),n("span",{class:"token operator"},"<<"),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br")])],-1),Fn=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token keyword"},"while"),s(),n("span",{class:"token punctuation"},"("),s("key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"substr"),n("span",{class:"token punctuation"},"("),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"5"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"!="),s(),n("span",{class:"token string"},'"elv1s"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + key_pair `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),Xn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen grind --starts-with e1v1s:1 +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),In=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen grind --starts-with e1v1s:1 +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Zn=n("h2",{id:"como-firmar-y-verificar-mensajes-con-wallets",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#como-firmar-y-verificar-mensajes-con-wallets","aria-hidden":"true"},"#"),s(" C\xF3mo firmar y verificar mensajes con wallets")],-1),$n=n("p",null,"La funci\xF3n principal de un par de llaves es firmar mensajes y habilitar la verificaci\xF3n de la firma. La verificaci\xF3n de una firma permite el destinatario asegurarse de que los datos fueron firmados por el propietario de un clave privada espec\xEDfica.",-1),Gn=s("Para hacerlo vamos a importar la librer\xEDa crypto "),Qn={href:"https://www.npmjs.com/package/tweetnacl",target:"_blank",rel:"noopener noreferrer"},On=s("TweetNaCl"),ns=s("."),ss=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(" nacl "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"tweetnacl"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" decodeUTF8 "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"tweetnacl-util"'),n("span",{class:"token punctuation"},";"),s(` @@ -332,7 +430,7 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("result"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br")])],-1),Fn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" message "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"The quick brown fox jumps over the lazy dog"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br")])],-1),as=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" message "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"The quick brown fox jumps over the lazy dog"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" messageBytes "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"decodeUTF8"),n("span",{class:"token punctuation"},"("),s("message"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" signature "),n("span",{class:"token operator"},"="),s(" nacl"),n("span",{class:"token punctuation"},"."),s("sign"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"detached"),n("span",{class:"token punctuation"},"("),s("messageBytes"),n("span",{class:"token punctuation"},","),s(" keypair"),n("span",{class:"token punctuation"},"."),s("secretKey"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` @@ -343,42 +441,26 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("result"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),In=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" nacl"),n("span",{class:"token punctuation"},"."),s("signing "),n("span",{class:"token keyword"},"import"),s(` VerifyKey -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),ts=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair secret_key `),n("span",{class:"token operator"},"="),s(" "),n("span",{class:"token punctuation"},"["),s(` `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"189"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"224"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"216"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"117"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"173"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"149"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"45"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"73"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"237"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"246"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"15"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"185"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"186"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"82"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"177"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` - `),n("span",{class:"token punctuation"},"]"),s(` - -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"bytes"),n("span",{class:"token punctuation"},"("),s("secret_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -pubkey_bytes `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token builtin"},"bytes"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),s(` -message `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"The quick brown fox jumps over the lazy dog"'),s(` -message_bytes `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token builtin"},"bytes"),n("span",{class:"token punctuation"},"("),s("message"),n("span",{class:"token punctuation"},","),n("span",{class:"token string"},"'utf8'"),n("span",{class:"token punctuation"},")"),s(` -signed_message `),n("span",{class:"token operator"},"="),s(" keypair"),n("span",{class:"token punctuation"},"."),s("sign"),n("span",{class:"token punctuation"},"("),s("message_bytes"),n("span",{class:"token punctuation"},")"),s(` - -verify_sign `),n("span",{class:"token operator"},"="),s(" VerifyKey"),n("span",{class:"token punctuation"},"("),s(` - pubkey_bytes -`),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),s("verify"),n("span",{class:"token punctuation"},"("),s(` - smessage`),n("span",{class:"token operator"},"="),s("message_bytes"),n("span",{class:"token punctuation"},","),s(` - signature`),n("span",{class:"token operator"},"="),s("signed_message"),n("span",{class:"token punctuation"},"."),s(`signature -`),n("span",{class:"token punctuation"},")"),s(` - -`),n("span",{class:"token comment"},"#Returns original message if the signature has not been tampered with"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("verify_sign"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br")])],-1),Xn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("message "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"The quick brown fox jumps over the lazy dog"'),s(` -message_bytes `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token builtin"},"bytes"),n("span",{class:"token punctuation"},"("),s("message"),n("span",{class:"token punctuation"},","),n("span",{class:"token string"},"'utf8'"),n("span",{class:"token punctuation"},")"),s(` -signed_message `),n("span",{class:"token operator"},"="),s(" keypair"),n("span",{class:"token punctuation"},"."),s("sign"),n("span",{class:"token punctuation"},"("),s("message_bytes"),n("span",{class:"token punctuation"},")"),s(` - -verify_sign `),n("span",{class:"token operator"},"="),s(" VerifyKey"),n("span",{class:"token punctuation"},"("),s(` - pubkey_bytes -`),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),s("verify"),n("span",{class:"token punctuation"},"("),s(` - smessage`),n("span",{class:"token operator"},"="),s("message_bytes"),n("span",{class:"token punctuation"},","),s(` - signature`),n("span",{class:"token operator"},"="),s("signed_message"),n("span",{class:"token punctuation"},"."),s(`signature -`),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),Zn=n("h2",{id:"como-conectar-una-wallet",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#como-conectar-una-wallet","aria-hidden":"true"},"#"),s(" C\xF3mo conectar una wallet")],-1),$n=s("La librereia de Solana "),Gn={href:"https://github.com/solana-labs/wallet-adapter",target:"_blank",rel:"noopener noreferrer"},Qn=s("wallet-adapter"),On=s(" hace m\xE1s f\xE1cil el manejo de conexiones de wallets del lado cliente."),ns=l(`

    React

    Ejecute el siguiente comando para instalar las dependencias requeridas:

    yarn add @solana/wallet-adapter-react @solana/wallet-adapter-react-ui @solana/wallet-adapter-base @solana/wallet-adapter-wallets
    -

    Las librer\xEDa wallet-adapter de React te permite persistir y acceder a los estados de conexi\xF3n de una billetera a trav\xE9s de hooks y proveedores de contexto llamados, useWallet, WalletProvider, useConnection y ConnectionProvider. La aplicaci\xF3n React debe estar envuelta con WalletProvider y ConnectionProvider.

    Adem\xE1s, podemos solicitar a los usuarios que se conecten usando useWalletModal para alternar la visibilidad del modal de conexi\xF3n y tambi\xE9n envolver la aplicaci\xF3n con WalletModalProvider de @solana/wallet-adapter-react-ui. El modal de conexi\xF3n manejar\xE1 ese flujo de conexi\xF3n por nosotros, por lo que solo necesitamos escuchar cu\xE1ndo se ha conectado una billetera. Sabemos que una billetera est\xE1 conectada cuando la respuesta useWallet tiene una propiedad wallet no nula. Viceversa, si esa propiedad es nula, sabemos que la billetera est\xE1 desconectada.

    `,5),ss=n("div",{class:"language-tsx ext-tsx line-numbers-mode"},[n("pre",{class:"language-tsx"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(" React"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token punctuation"},"{"),s(" useMemo"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token constant"},"FC"),n("span",{class:"token punctuation"},","),s(" PropsWithChildren "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"react"'),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token punctuation"},"]"),s(` +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_bytes"),n("span",{class:"token punctuation"},"("),s("secret_key"),n("span",{class:"token punctuation"},")"),s(` +message `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'b"The quick brown fox jumps over the lazy dog"'),s(` +signature `),n("span",{class:"token operator"},"="),s(" keypair"),n("span",{class:"token punctuation"},"."),s("sign_message"),n("span",{class:"token punctuation"},"("),s("message"),n("span",{class:"token punctuation"},")"),s(` +verify_sign `),n("span",{class:"token operator"},"="),s(" signature"),n("span",{class:"token punctuation"},"."),s("verify"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(" message"),n("span",{class:"token punctuation"},")"),s(` + +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("verify_sign"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# bool"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br")])],-1),es=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("message "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'b"The quick brown fox jumps over the lazy dog"'),s(` +signature `),n("span",{class:"token operator"},"="),s(" keypair"),n("span",{class:"token punctuation"},"."),s("sign_message"),n("span",{class:"token punctuation"},"("),s("message"),n("span",{class:"token punctuation"},")"),s(` +verify_sign `),n("span",{class:"token operator"},"="),s(" signature"),n("span",{class:"token punctuation"},"."),s("verify"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(" message"),n("span",{class:"token punctuation"},")"),s(` + +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("verify_sign"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# bool"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br")])],-1),os=n("h2",{id:"como-conectar-una-wallet",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#como-conectar-una-wallet","aria-hidden":"true"},"#"),s(" C\xF3mo conectar una wallet")],-1),cs=s("La librereia de Solana "),ps={href:"https://github.com/solana-labs/wallet-adapter",target:"_blank",rel:"noopener noreferrer"},ls=s("wallet-adapter"),us=s(" hace m\xE1s f\xE1cil el manejo de conexiones de wallets del lado cliente."),is=l(`

    React

    Ejecute el siguiente comando para instalar las dependencias requeridas:

    yarn add @solana/wallet-adapter-react @solana/wallet-adapter-react-ui @solana/wallet-adapter-base @solana/wallet-adapter-wallets
    +

    Las librer\xEDa wallet-adapter de React te permite persistir y acceder a los estados de conexi\xF3n de una billetera a trav\xE9s de hooks y proveedores de contexto llamados, useWallet, WalletProvider, useConnection y ConnectionProvider. La aplicaci\xF3n React debe estar envuelta con WalletProvider y ConnectionProvider.

    Adem\xE1s, podemos solicitar a los usuarios que se conecten usando useWalletModal para alternar la visibilidad del modal de conexi\xF3n y tambi\xE9n envolver la aplicaci\xF3n con WalletModalProvider de @solana/wallet-adapter-react-ui. El modal de conexi\xF3n manejar\xE1 ese flujo de conexi\xF3n por nosotros, por lo que solo necesitamos escuchar cu\xE1ndo se ha conectado una billetera. Sabemos que una billetera est\xE1 conectada cuando la respuesta useWallet tiene una propiedad wallet no nula. Viceversa, si esa propiedad es nula, sabemos que la billetera est\xE1 desconectada.

    `,5),rs=n("div",{class:"language-tsx ext-tsx line-numbers-mode"},[n("pre",{class:"language-tsx"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(" React"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token punctuation"},"{"),s(" useMemo"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token constant"},"FC"),n("span",{class:"token punctuation"},","),s(" PropsWithChildren "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"react"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` ConnectionProvider`),n("span",{class:"token punctuation"},","),s(` WalletProvider`),n("span",{class:"token punctuation"},","),s(` @@ -460,7 +542,7 @@ verify_sign `),n("span",{class:"token operator"},"="),s(" VerifyKey"),n("span",{ `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br"),n("span",{class:"line-number"},"69"),n("br"),n("span",{class:"line-number"},"70"),n("br"),n("span",{class:"line-number"},"71"),n("br"),n("span",{class:"line-number"},"72"),n("br"),n("span",{class:"line-number"},"73"),n("br"),n("span",{class:"line-number"},"74"),n("br"),n("span",{class:"line-number"},"75"),n("br"),n("span",{class:"line-number"},"76"),n("br"),n("span",{class:"line-number"},"77"),n("br"),n("span",{class:"line-number"},"78"),n("br"),n("span",{class:"line-number"},"79"),n("br"),n("span",{class:"line-number"},"80"),n("br"),n("span",{class:"line-number"},"81"),n("br"),n("span",{class:"line-number"},"82"),n("br")])],-1),as=n("div",{class:"language-tsx ext-tsx line-numbers-mode"},[n("pre",{class:"language-tsx"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token punctuation"},"{"),s(" wallet "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"useWallet"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br"),n("span",{class:"line-number"},"69"),n("br"),n("span",{class:"line-number"},"70"),n("br"),n("span",{class:"line-number"},"71"),n("br"),n("span",{class:"line-number"},"72"),n("br"),n("span",{class:"line-number"},"73"),n("br"),n("span",{class:"line-number"},"74"),n("br"),n("span",{class:"line-number"},"75"),n("br"),n("span",{class:"line-number"},"76"),n("br"),n("span",{class:"line-number"},"77"),n("br"),n("span",{class:"line-number"},"78"),n("br"),n("span",{class:"line-number"},"79"),n("br"),n("span",{class:"line-number"},"80"),n("br"),n("span",{class:"line-number"},"81"),n("br"),n("span",{class:"line-number"},"82"),n("br")])],-1),ks=n("div",{class:"language-tsx ext-tsx line-numbers-mode"},[n("pre",{class:"language-tsx"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token punctuation"},"{"),s(" wallet "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"useWallet"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token punctuation"},"{"),s(" setVisible "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"useWalletModal"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token function-variable function"},"onRequestConnectWallet"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -479,8 +561,8 @@ verify_sign `),n("span",{class:"token operator"},"="),s(" VerifyKey"),n("span",{ `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("p")]),n("span",{class:"token punctuation"},">")]),n("span",{class:"token punctuation"},"{"),s("wallet"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),n("span",{class:"token plain-text"},` `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br")])],-1),ts=l(`

    Vue

    Ejecuta el siguiente comando para instalar las dependencias requeridas:

    npm install solana-wallets-vue @solana/wallet-adapter-wallets
    -
    `,3),es=s("El complemento "),os={href:"https://github.com/lorisleiva/solana-wallets-vue",target:"_blank",rel:"noopener noreferrer"},cs=s("Solana Wallets Vue"),ps=s(" nos permite inicializar una lista de billeteras y crear una nueva propiedad global "),ls=n("code",null,"$wallet",-1),us=s(" a la que se puede acceder desde cualquier componente. Todas las propiedades y m\xE9todos que puede obtener de "),is=n("code",null,"useWallet()",-1),rs=s(" se muestran "),ks={href:"https://github.com/lorisleiva/solana-wallets-vue#usewallet-references",target:"_blank",rel:"noopener noreferrer"},bs=s("aqu\xED"),ms=s(". Tambi\xE9n importamos y renderizamos el componente WalletMultiButton para permitir a los usuarios seleccionar una billetera y conectarse a ella."),ds=n("div",{class:"language-vue ext-vue line-numbers-mode"},[n("pre",{class:"language-vue"},[n("code",null,[n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("script")]),s(),n("span",{class:"token attr-name"},"setup"),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"},[n("span",{class:"token language-javascript"},[s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br")])],-1),bs=l(`

    Vue

    Ejecuta el siguiente comando para instalar las dependencias requeridas:

    npm install solana-wallets-vue @solana/wallet-adapter-wallets
    +
    `,3),ms=s("El complemento "),ds={href:"https://github.com/lorisleiva/solana-wallets-vue",target:"_blank",rel:"noopener noreferrer"},ys=s("Solana Wallets Vue"),gs=s(" nos permite inicializar una lista de billeteras y crear una nueva propiedad global "),hs=n("code",null,"$wallet",-1),ws=s(" a la que se puede acceder desde cualquier componente. Todas las propiedades y m\xE9todos que puede obtener de "),vs=n("code",null,"useWallet()",-1),_s=s(" se muestran "),fs={href:"https://github.com/lorisleiva/solana-wallets-vue#usewallet-references",target:"_blank",rel:"noopener noreferrer"},xs=s("aqu\xED"),Ks=s(". Tambi\xE9n importamos y renderizamos el componente WalletMultiButton para permitir a los usuarios seleccionar una billetera y conectarse a ella."),Ps=n("div",{class:"language-vue ext-vue line-numbers-mode"},[n("pre",{class:"language-vue"},[n("code",null,[n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("script")]),s(),n("span",{class:"token attr-name"},"setup"),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"},[n("span",{class:"token language-javascript"},[s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" WalletMultiButton "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"solana-wallets-vue"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` LedgerWalletAdapter`),n("span",{class:"token punctuation"},","),s(` @@ -513,15 +595,15 @@ verify_sign `),n("span",{class:"token operator"},"="),s(" VerifyKey"),n("span",{ `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br")])],-1),ys=n("div",{class:"language-vue ext-vue line-numbers-mode"},[n("pre",{class:"language-vue"},[n("code",null,[n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("script")]),s(),n("span",{class:"token attr-name"},"setup"),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"},[n("span",{class:"token language-javascript"},[s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br")])],-1),Ss=n("div",{class:"language-vue ext-vue line-numbers-mode"},[n("pre",{class:"language-vue"},[n("code",null,[n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("script")]),s(),n("span",{class:"token attr-name"},"setup"),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"},[n("span",{class:"token language-javascript"},[s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" WalletMultiButton "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"solana-wallets-vue"'),n("span",{class:"token punctuation"},";"),s(` `)])]),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("template")]),n("span",{class:"token punctuation"},">")]),s(` `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("wallet-multi-button")]),n("span",{class:"token punctuation"},">")]),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),gs=l(`

    Svelte

    Ejecute el siguiente comando para instalar las dependencias requeridas:

    npm install @svelte-on-solana/wallet-adapter-core @svelte-on-solana/wallet-adapter-ui @solana/wallet-adapter-base @solana/wallet-adapter-wallets @solana/web3.js
    -
    `,3),hs=s("El paquete "),ws={href:"https://github.com/svelte-on-solana/wallet-adapter",target:"_blank",rel:"noopener noreferrer"},vs=s("Svelte Wallet Adapter"),_s=s(" permite agregar una tienda Svelte ("),fs=n("code",null,"$walletStore",-1),xs=s(") accesible entre todos los archivos JS, TS y/o Svelte dentro de un proyecto realizado con Svelte Template o SvelteKit. Usando la referencia del repositorio "),Ks={href:"https://github.com/svelte-on-solana/wallet-adapter/blob/master/packages/core/README.md/",target:"_blank",rel:"noopener noreferrer"},Ps=s("aqu\xED"),Ss=s(" puede usar el adaptador para SSR o SPA. El paquete de la interfaz de usuario contiene un componente "),Ws=n("code",null,"",-1),Cs=s(" que permite a los usuarios seleccionar una billetera para conectar a ella."),js=n("div",{class:"language-html ext-html line-numbers-mode"},[n("pre",{class:"language-html"},[n("code",null,[n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("script")]),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"},[n("span",{class:"token language-javascript"},[s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),Ws=l(`

    Svelte

    Ejecute el siguiente comando para instalar las dependencias requeridas:

    npm install @svelte-on-solana/wallet-adapter-core @svelte-on-solana/wallet-adapter-ui @solana/wallet-adapter-base @solana/wallet-adapter-wallets @solana/web3.js
    +
    `,3),Cs=s("El paquete "),js={href:"https://github.com/svelte-on-solana/wallet-adapter",target:"_blank",rel:"noopener noreferrer"},As=s("Svelte Wallet Adapter"),Ts=s(" permite agregar una tienda Svelte ("),zs=n("code",null,"$walletStore",-1),qs=s(") accesible entre todos los archivos JS, TS y/o Svelte dentro de un proyecto realizado con Svelte Template o SvelteKit. Usando la referencia del repositorio "),Es={href:"https://github.com/svelte-on-solana/wallet-adapter/blob/master/packages/core/README.md/",target:"_blank",rel:"noopener noreferrer"},Rs=s("aqu\xED"),Bs=s(" puede usar el adaptador para SSR o SPA. El paquete de la interfaz de usuario contiene un componente "),Ms=n("code",null,"",-1),Ds=s(" que permite a los usuarios seleccionar una billetera para conectar a ella."),Ns=n("div",{class:"language-html ext-html line-numbers-mode"},[n("pre",{class:"language-html"},[n("code",null,[n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("script")]),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"},[n("span",{class:"token language-javascript"},[s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" walletStore "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@svelte-on-solana/wallet-adapter-core"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` WalletProvider`),n("span",{class:"token punctuation"},","),s(` @@ -554,7 +636,7 @@ verify_sign `),n("span",{class:"token operator"},"="),s(" VerifyKey"),n("span",{ successfully connected! {:else} `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("WalletMultiButton")]),s(),n("span",{class:"token punctuation"},"/>")]),s(` {/if} -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br")])],-1),As=n("div",{class:"language-html ext-html line-numbers-mode"},[n("pre",{class:"language-html"},[n("code",null,[n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("script")]),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"},[n("span",{class:"token language-javascript"},[s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br")])],-1),Js=n("div",{class:"language-html ext-html line-numbers-mode"},[n("pre",{class:"language-html"},[n("code",null,[n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("script")]),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"},[n("span",{class:"token language-javascript"},[s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" walletStore "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@svelte-on-solana/wallet-adapter-core"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" WalletMultiButton "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@svelte-on-solana/wallet-adapter-ui"'),n("span",{class:"token punctuation"},";"),s(` `)])]),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` @@ -563,4 +645,4 @@ successfully connected! {:else} successfully connected! {:else} `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("WalletMultiButton")]),s(),n("span",{class:"token punctuation"},"/>")]),s(` {/if} -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br")])],-1);function Ts(zs,qs){const e=p("SolanaCodeGroupItem"),o=p("SolanaCodeGroup"),c=p("ExternalLinkIcon");return i(),r(k,null,[m,d,y,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[g]),preview:a(()=>[h]),_:1}),t(e,{title:"Python"},{default:a(()=>[w]),preview:a(()=>[v]),_:1}),t(e,{title:"Rust"},{default:a(()=>[_]),preview:a(()=>[f]),_:1}),t(e,{title:"CLI"},{default:a(()=>[x]),preview:a(()=>[K]),_:1})]),_:1}),P,S,W,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[C]),preview:a(()=>[j]),_:1}),t(e,{title:"Python"},{default:a(()=>[A]),preview:a(()=>[T]),_:1}),t(e,{title:"Rust"},{default:a(()=>[z]),preview:a(()=>[q]),_:1}),t(e,{title:"CLI"},{default:a(()=>[B]),preview:a(()=>[M]),_:1})]),_:1}),R,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[E]),preview:a(()=>[D]),_:1}),t(e,{title:"Python"},{default:a(()=>[N]),preview:a(()=>[U]),_:1}),t(e,{title:"Rust"},{default:a(()=>[V]),preview:a(()=>[L]),_:1})]),_:1}),J,Y,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[H]),preview:a(()=>[F]),_:1}),t(e,{title:"Python"},{default:a(()=>[I]),preview:a(()=>[X]),_:1}),t(e,{title:"CLI"},{default:a(()=>[Z]),preview:a(()=>[$]),_:1})]),_:1}),G,Q,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[O]),preview:a(()=>[nn]),_:1}),t(e,{title:"Python",active:""},{default:a(()=>[sn]),preview:a(()=>[an]),_:1}),t(e,{title:"Rust",active:""},{default:a(()=>[tn]),preview:a(()=>[en]),_:1})]),_:1}),on,cn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[pn]),preview:a(()=>[ln]),_:1}),t(e,{title:"Python"},{default:a(()=>[un]),preview:a(()=>[rn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[kn]),preview:a(()=>[bn]),_:1})]),_:1}),mn,dn,yn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[gn]),preview:a(()=>[hn]),_:1}),t(e,{title:"Python"},{default:a(()=>[wn]),preview:a(()=>[vn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[_n]),preview:a(()=>[fn]),_:1})]),_:1}),xn,Kn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Pn]),preview:a(()=>[Sn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[Wn]),preview:a(()=>[Cn]),_:1})]),_:1}),jn,An,Tn,zn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[qn]),preview:a(()=>[Bn]),_:1}),t(e,{title:"Python"},{default:a(()=>[Mn]),preview:a(()=>[Rn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[En]),preview:a(()=>[Dn]),_:1})]),_:1}),Nn,Un,n("p",null,[Vn,n("a",Ln,[Jn,t(c)]),Yn]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Hn]),preview:a(()=>[Fn]),_:1}),t(e,{title:"Python"},{default:a(()=>[In]),preview:a(()=>[Xn]),_:1})]),_:1}),Zn,n("p",null,[$n,n("a",Gn,[Qn,t(c)]),On]),ns,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[ss]),preview:a(()=>[as]),_:1})]),_:1}),ts,n("p",null,[es,n("a",os,[cs,t(c)]),ps,ls,us,is,rs,n("a",ks,[bs,t(c)]),ms]),t(o,null,{default:a(()=>[t(e,{title:"Vue",active:""},{default:a(()=>[ds]),preview:a(()=>[ys]),_:1})]),_:1}),gs,n("p",null,[hs,n("a",ws,[vs,t(c)]),_s,fs,xs,n("a",Ks,[Ps,t(c)]),Ss,Ws,Cs]),t(o,null,{default:a(()=>[t(e,{title:"Svelte",active:""},{default:a(()=>[js]),preview:a(()=>[As]),_:1})]),_:1})],64)}var Ms=u(b,[["render",Ts]]);export{Ms as default}; +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br")])],-1);function Us(Ls,Vs){const e=p("SolanaCodeGroupItem"),o=p("SolanaCodeGroup"),c=p("ExternalLinkIcon");return i(),r(k,null,[m,d,y,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[g]),preview:a(()=>[h]),_:1}),t(e,{title:"Python"},{default:a(()=>[w]),preview:a(()=>[v]),_:1}),t(e,{title:"C++"},{default:a(()=>[_]),preview:a(()=>[f]),_:1}),t(e,{title:"Rust"},{default:a(()=>[x]),preview:a(()=>[K]),_:1}),t(e,{title:"CLI"},{default:a(()=>[P]),preview:a(()=>[S]),_:1})]),_:1}),W,C,j,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[A]),preview:a(()=>[T]),_:1}),t(e,{title:"Python"},{default:a(()=>[z]),preview:a(()=>[q]),_:1}),t(e,{title:"C++"},{default:a(()=>[E]),preview:a(()=>[R]),_:1}),t(e,{title:"Rust"},{default:a(()=>[B]),preview:a(()=>[M]),_:1}),t(e,{title:"CLI"},{default:a(()=>[D]),preview:a(()=>[N]),_:1})]),_:1}),J,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[U]),preview:a(()=>[L]),_:1}),t(e,{title:"Python"},{default:a(()=>[V]),preview:a(()=>[H]),_:1}),t(e,{title:"Rust"},{default:a(()=>[Y]),preview:a(()=>[F]),_:1})]),_:1}),X,I,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Z]),preview:a(()=>[$]),_:1}),t(e,{title:"Python"},{default:a(()=>[G]),preview:a(()=>[Q]),_:1}),t(e,{title:"C++"},{default:a(()=>[O]),preview:a(()=>[nn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[sn]),preview:a(()=>[an]),_:1})]),_:1}),tn,en,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[on]),preview:a(()=>[cn]),_:1}),t(e,{title:"Python",active:""},{default:a(()=>[pn]),preview:a(()=>[ln]),_:1}),t(e,{title:"C++",active:""},{default:a(()=>[un]),preview:a(()=>[rn]),_:1}),t(e,{title:"Rust",active:""},{default:a(()=>[kn]),preview:a(()=>[bn]),_:1})]),_:1}),mn,dn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[yn]),preview:a(()=>[gn]),_:1}),t(e,{title:"Python"},{default:a(()=>[hn]),preview:a(()=>[wn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[vn]),preview:a(()=>[_n]),_:1})]),_:1}),fn,xn,Kn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Pn]),preview:a(()=>[Sn]),_:1}),t(e,{title:"Python"},{default:a(()=>[Wn]),preview:a(()=>[Cn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[jn]),preview:a(()=>[An]),_:1})]),_:1}),Tn,zn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[qn]),preview:a(()=>[En]),_:1}),t(e,{title:"CLI"},{default:a(()=>[Rn]),preview:a(()=>[Bn]),_:1})]),_:1}),Mn,Dn,Nn,Jn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Un]),preview:a(()=>[Ln]),_:1}),t(e,{title:"Python"},{default:a(()=>[Vn]),preview:a(()=>[Hn]),_:1}),t(e,{title:"C++"},{default:a(()=>[Yn]),preview:a(()=>[Fn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[Xn]),preview:a(()=>[In]),_:1})]),_:1}),Zn,$n,n("p",null,[Gn,n("a",Qn,[On,t(c)]),ns]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[ss]),preview:a(()=>[as]),_:1}),t(e,{title:"Python"},{default:a(()=>[ts]),preview:a(()=>[es]),_:1})]),_:1}),os,n("p",null,[cs,n("a",ps,[ls,t(c)]),us]),is,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[rs]),preview:a(()=>[ks]),_:1})]),_:1}),bs,n("p",null,[ms,n("a",ds,[ys,t(c)]),gs,hs,ws,vs,_s,n("a",fs,[xs,t(c)]),Ks]),t(o,null,{default:a(()=>[t(e,{title:"Vue",active:""},{default:a(()=>[Ps]),preview:a(()=>[Ss]),_:1})]),_:1}),Ws,n("p",null,[Cs,n("a",js,[As,t(c)]),Ts,zs,qs,n("a",Es,[Rs,t(c)]),Bs,Ms,Ds]),t(o,null,{default:a(()=>[t(e,{title:"Svelte",active:""},{default:a(()=>[Ns]),preview:a(()=>[Js]),_:1})]),_:1})],64)}var Ys=u(b,[["render",Us]]);export{Ys as default}; diff --git a/docs/.vuepress/dist/assets/keypairs-and-wallets.html.86f82e90.js b/docs/.vuepress/dist/assets/keypairs-and-wallets.html.bd52e0aa.js similarity index 97% rename from docs/.vuepress/dist/assets/keypairs-and-wallets.html.86f82e90.js rename to docs/.vuepress/dist/assets/keypairs-and-wallets.html.bd52e0aa.js index 39400802c..7149eac72 100644 --- a/docs/.vuepress/dist/assets/keypairs-and-wallets.html.86f82e90.js +++ b/docs/.vuepress/dist/assets/keypairs-and-wallets.html.bd52e0aa.js @@ -1 +1 @@ -const e={key:"v-17bc77ae",path:"/es/references/keypairs-and-wallets.html",title:"Pares de llaves y billeteras",lang:"es",frontmatter:{title:"Pares de llaves y billeteras",head:[["meta",{name:"title",content:"Libro de recetas de Solana | Pares de llaves y billeteras"}],["meta",{name:"og:title",content:"Libro de recetas de Solana | Pares de llaves y billeteras"}],["meta",{name:"description",content:"Aprende sobre Pares de llaves y billeteras, firmas, verificaci\xF3n de mensajes y m\xE1s referencias para desarrollar en Solana en el Libro de recetas de Solana."}],["meta",{name:"og:description",content:"Aprende sobre Pares de llaves y billeteras, firmas, verificaci\xF3n de mensajes y m\xE1s referencias para desarrollar en Solana en el Libro de recetas de Solana."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"C\xF3mo generar un nuevo Keypair (par de llaves)",slug:"como-generar-un-nuevo-keypair-par-de-llaves",children:[]},{level:2,title:"C\xF3mo restaurar un par de llaves a partir de una llave privada",slug:"como-restaurar-un-par-de-llaves-a-partir-de-una-llave-privada",children:[]},{level:2,title:"C\xF3mo verificar un par de llaves",slug:"como-verificar-un-par-de-llaves",children:[]},{level:2,title:"C\xF3mo comprobar si una llave p\xFAblica tiene una llave privada asociada",slug:"como-comprobar-si-una-llave-publica-tiene-una-llave-privada-asociada",children:[]},{level:2,title:"C\xF3mo generar una frase semilla (mnemonic)",slug:"como-generar-una-frase-semilla-mnemonic",children:[]},{level:2,title:"C\xF3mo restaurar un par de llaves desde una frase semilla",slug:"como-restaurar-un-par-de-llaves-desde-una-frase-semilla",children:[]},{level:2,title:"C\xF3mo generar una direcci\xF3n personalizada",slug:"como-generar-una-direccion-personalizada",children:[]},{level:2,title:"C\xF3mo firmar y verificar mensajes con wallets",slug:"como-firmar-y-verificar-mensajes-con-wallets",children:[]},{level:2,title:"C\xF3mo conectar una wallet",slug:"como-conectar-una-wallet",children:[{level:3,title:"React",slug:"react",children:[]},{level:3,title:"Vue",slug:"vue",children:[]},{level:3,title:"Svelte",slug:"svelte",children:[]}]}],git:{updatedTime:1663621463e3},filePathRelative:"es/references/keypairs-and-wallets.md"};export{e as data}; +const e={key:"v-17bc77ae",path:"/es/references/keypairs-and-wallets.html",title:"Pares de llaves y billeteras",lang:"es",frontmatter:{title:"Pares de llaves y billeteras",head:[["meta",{name:"title",content:"Libro de recetas de Solana | Pares de llaves y billeteras"}],["meta",{name:"og:title",content:"Libro de recetas de Solana | Pares de llaves y billeteras"}],["meta",{name:"description",content:"Aprende sobre Pares de llaves y billeteras, firmas, verificaci\xF3n de mensajes y m\xE1s referencias para desarrollar en Solana en el Libro de recetas de Solana."}],["meta",{name:"og:description",content:"Aprende sobre Pares de llaves y billeteras, firmas, verificaci\xF3n de mensajes y m\xE1s referencias para desarrollar en Solana en el Libro de recetas de Solana."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"C\xF3mo generar un nuevo Keypair (par de llaves)",slug:"como-generar-un-nuevo-keypair-par-de-llaves",children:[]},{level:2,title:"C\xF3mo restaurar un par de llaves a partir de una llave privada",slug:"como-restaurar-un-par-de-llaves-a-partir-de-una-llave-privada",children:[]},{level:2,title:"C\xF3mo verificar un par de llaves",slug:"como-verificar-un-par-de-llaves",children:[]},{level:2,title:"C\xF3mo comprobar si una llave p\xFAblica tiene una llave privada asociada",slug:"como-comprobar-si-una-llave-publica-tiene-una-llave-privada-asociada",children:[]},{level:2,title:"C\xF3mo generar una frase semilla (mnemonic)",slug:"como-generar-una-frase-semilla-mnemonic",children:[]},{level:2,title:"C\xF3mo restaurar un par de llaves desde una frase semilla",slug:"como-restaurar-un-par-de-llaves-desde-una-frase-semilla",children:[]},{level:2,title:"C\xF3mo generar una direcci\xF3n personalizada",slug:"como-generar-una-direccion-personalizada",children:[]},{level:2,title:"C\xF3mo firmar y verificar mensajes con wallets",slug:"como-firmar-y-verificar-mensajes-con-wallets",children:[]},{level:2,title:"C\xF3mo conectar una wallet",slug:"como-conectar-una-wallet",children:[{level:3,title:"React",slug:"react",children:[]},{level:3,title:"Vue",slug:"vue",children:[]},{level:3,title:"Svelte",slug:"svelte",children:[]}]}],git:{updatedTime:1676666728e3},filePathRelative:"es/references/keypairs-and-wallets.md"};export{e as data}; diff --git a/docs/.vuepress/dist/assets/keypairs-and-wallets.html.507ff925.js b/docs/.vuepress/dist/assets/keypairs-and-wallets.html.be77a35d.js similarity index 99% rename from docs/.vuepress/dist/assets/keypairs-and-wallets.html.507ff925.js rename to docs/.vuepress/dist/assets/keypairs-and-wallets.html.be77a35d.js index 8c52b30e7..13b4d1221 100644 --- a/docs/.vuepress/dist/assets/keypairs-and-wallets.html.507ff925.js +++ b/docs/.vuepress/dist/assets/keypairs-and-wallets.html.be77a35d.js @@ -1,4 +1,4 @@ -import{_ as p,r as o,o as l,c,a,b as e,F as u,e as t,d as n}from"./app.cfdf84e7.js";const i={},r=t(`

    Keypairs and Wallets

    How to generate a new Keypair (Yeni Keypair nas\u0131l olu\u015Fturulur)

    \xC7e\u015Fitli Solana kitapl\u0131klar\u0131 ile ger\xE7ekle\u015Ftirebilece\u011Finiz farkl\u0131 i\u015Flemlerin \xE7o\u011Fu, bir Keypair veya C\xFCzdan gerektirir. Bir c\xFCzdana ba\u011Flan\u0131yorsan\u0131z endi\u015Felenmenize gerek yok. Ancak, bir Keypair\u2019e ihtiyac\u0131n\u0131z varsa, bir tane olu\u015Fturman\u0131z gerekecektir.

    How to restore a Keypair from a secret(Secret\u2019tan Keypair nas\u0131l geri y\xFCklenir) Secret\u2019\u0131n\u0131z varsa, dApp'inizi test etmek i\xE7in keypair\u2019i secret\u2019tan alabilirsiniz.

    1. Byte\u2019tan
    const keypair = Keypair.fromSecretKey(
    +import{_ as p,r as o,o as l,c,a,b as e,F as u,e as t,d as n}from"./app.2fbb9e96.js";const i={},r=t(`

    Keypairs and Wallets

    How to generate a new Keypair (Yeni Keypair nas\u0131l olu\u015Fturulur)

    \xC7e\u015Fitli Solana kitapl\u0131klar\u0131 ile ger\xE7ekle\u015Ftirebilece\u011Finiz farkl\u0131 i\u015Flemlerin \xE7o\u011Fu, bir Keypair veya C\xFCzdan gerektirir. Bir c\xFCzdana ba\u011Flan\u0131yorsan\u0131z endi\u015Felenmenize gerek yok. Ancak, bir Keypair\u2019e ihtiyac\u0131n\u0131z varsa, bir tane olu\u015Fturman\u0131z gerekecektir.

    How to restore a Keypair from a secret(Secret\u2019tan Keypair nas\u0131l geri y\xFCklenir) Secret\u2019\u0131n\u0131z varsa, dApp'inizi test etmek i\xE7in keypair\u2019i secret\u2019tan alabilirsiniz.

    1. Byte\u2019tan
    const keypair = Keypair.fromSecretKey(
       Uint8Array.from([
         174, 47, 154, 16, 202, 193, 206, 113, 199, 190, 53, 133, 169, 175, 31, 56,
         222, 53, 138, 189, 224, 216, 117, 173, 10, 149, 53, 45, 73, 251, 237, 246,
    diff --git a/docs/.vuepress/dist/assets/keypairs-and-wallets.html.014763d1.js b/docs/.vuepress/dist/assets/keypairs-and-wallets.html.caea0fb1.js
    similarity index 77%
    rename from docs/.vuepress/dist/assets/keypairs-and-wallets.html.014763d1.js
    rename to docs/.vuepress/dist/assets/keypairs-and-wallets.html.caea0fb1.js
    index 9611865fd..2e6e74d44 100644
    --- a/docs/.vuepress/dist/assets/keypairs-and-wallets.html.014763d1.js
    +++ b/docs/.vuepress/dist/assets/keypairs-and-wallets.html.caea0fb1.js
    @@ -1,10 +1,10 @@
    -import{_ as u,r as p,o as i,c as k,b as t,w as a,a as n,F as r,d as s,e as l}from"./app.cfdf84e7.js";const b={},m=n("h1",{id:"cap-khoa-va-vi",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#cap-khoa-va-vi","aria-hidden":"true"},"#"),s(" C\u1EB7p kho\xE1 v\xE0 V\xED")],-1),d=n("h2",{id:"lam-the-nao-\u0111e-sinh-cap-khoa",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#lam-the-nao-\u0111e-sinh-cap-khoa","aria-hidden":"true"},"#"),s(" L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 sinh C\u1EB7p kho\xE1")],-1),h=n("p",null,"C\xF3 r\u1EA5t nhi\u1EC1u ch\u1EE9c n\u0103ng trong c\xE1c th\u01B0 vi\u1EC7n Solana \u0111\u1EC3 t\u01B0\u01A1ng t\xE1c \u0111\u01B0\u1EE3c b\u1EA1n s\u1EBD ph\u1EA3i c\u1EA7n c\xF3 C\u1EB7p kho\xE1 ho\u1EB7c V\xED. N\u1EBFu b\u1EA1n \u0111ang k\u1EBFt n\u1ED1i v\u1EDBi m\u1ED9t v\xED, b\u1EA1n s\u1EBD kh\xF4ng ph\u1EA3i lo l\u1EAFng chuy\u1EC7n \u0111\xF3 n\u1EEFa. Tuy nhi\xEAn, n\u1EBFu b\u1EA1n \u0111ang c\u1EA7n m\u1ED9t C\u1EB7p kho\xE1, b\u1EA1n s\u1EBD ph\u1EA3i sinh ra ch\xFAng.",-1),g=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(`
    +import{_ as l,r as p,o as i,c as k,b as t,w as a,a as n,F as r,d as s,e as u}from"./app.2fbb9e96.js";const b={},m=n("h1",{id:"cap-khoa-va-vi",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#cap-khoa-va-vi","aria-hidden":"true"},"#"),s(" C\u1EB7p kho\xE1 v\xE0 V\xED")],-1),d=n("h2",{id:"lam-the-nao-\u0111e-sinh-cap-khoa",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#lam-the-nao-\u0111e-sinh-cap-khoa","aria-hidden":"true"},"#"),s(" L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 sinh C\u1EB7p kho\xE1")],-1),h=n("p",null,"C\xF3 r\u1EA5t nhi\u1EC1u ch\u1EE9c n\u0103ng trong c\xE1c th\u01B0 vi\u1EC7n Solana \u0111\u1EC3 t\u01B0\u01A1ng t\xE1c \u0111\u01B0\u1EE3c b\u1EA1n s\u1EBD ph\u1EA3i c\u1EA7n c\xF3 C\u1EB7p kho\xE1 ho\u1EB7c V\xED. N\u1EBFu b\u1EA1n \u0111ang k\u1EBFt n\u1ED1i v\u1EDBi m\u1ED9t v\xED, b\u1EA1n s\u1EBD kh\xF4ng ph\u1EA3i lo l\u1EAFng chuy\u1EC7n \u0111\xF3 n\u1EEFa. Tuy nhi\xEAn, n\u1EBFu b\u1EA1n \u0111ang c\u1EA7n m\u1ED9t C\u1EB7p kho\xE1, b\u1EA1n s\u1EBD ph\u1EA3i sinh ra ch\xFAng.",-1),g=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(`
     
     `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(`
       `),n("span",{class:"token keyword"},"let"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
     `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
     `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br")])],-1),y=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
    -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),w=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair
    +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),w=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair
     
     keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(`
     `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),v=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(`
    @@ -18,7 +18,7 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:
     
     `),n("span",{class:"token comment"},"# pubkey: 9ZNTfG4NyQgxy2SWjSiQoUyBPEvXT2xo7fKc5hPYYJ7b"),s(`
     `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),K=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen new
    -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),P=n("h2",{id:"lam-the-nao-\u0111e-phuc-hoi-mot-cap-khoa-tu-khoa-rieng-tu",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#lam-the-nao-\u0111e-phuc-hoi-mot-cap-khoa-tu-khoa-rieng-tu","aria-hidden":"true"},"#"),s(" L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 ph\u1EE5c h\u1ED3i m\u1ED9t C\u1EB7p kho\xE1 t\u1EEB kho\xE1 ri\xEAng t\u01B0")],-1),W=n("p",null,"N\u1EBFu b\u1EA1n \u0111\xE3 c\xF3 kho\xE1 ri\xEAng t\u01B0, b\u1EA1n c\xF3 th\u1EC3 ph\u1EE5c h\u1ED3i l\u1EA1i c\u1EB7p kho\xE1 t\u1EEB kho\xE1 ri\xEAng t\u01B0 \u0111\xF3 v\xE0 d\xF9ng n\u1ED1 \u0111\u1EC3 k\u1EBFt n\u1ED1i v\u1EDBi dApp c\u1EE7a b\u1EA1n.",-1),S=n("ol",null,[n("li",null,"T\u1EEB Bytes")],-1),C=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(`
    +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),P=n("h2",{id:"lam-the-nao-\u0111e-phuc-hoi-mot-cap-khoa-tu-khoa-rieng-tu",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#lam-the-nao-\u0111e-phuc-hoi-mot-cap-khoa-tu-khoa-rieng-tu","aria-hidden":"true"},"#"),s(" L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 ph\u1EE5c h\u1ED3i m\u1ED9t C\u1EB7p kho\xE1 t\u1EEB kho\xE1 ri\xEAng t\u01B0")],-1),W=n("p",null,"N\u1EBFu b\u1EA1n \u0111\xE3 c\xF3 kho\xE1 ri\xEAng t\u01B0, b\u1EA1n c\xF3 th\u1EC3 ph\u1EE5c h\u1ED3i l\u1EA1i c\u1EB7p kho\xE1 t\u1EEB kho\xE1 ri\xEAng t\u01B0 \u0111\xF3 v\xE0 d\xF9ng n\u1ED1 \u0111\u1EC3 k\u1EBFt n\u1ED1i v\u1EDBi dApp c\u1EE7a b\u1EA1n.",-1),C=n("ol",null,[n("li",null,"T\u1EEB Bytes")],-1),S=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(`
     
     `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(`
       `),n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSecretKey"),n("span",{class:"token punctuation"},"("),s(`
    @@ -38,7 +38,7 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:
         `),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(`
       `),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),s(`
     `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
    -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),T=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair
    +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),T=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair
     
     secret_key`),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"["),s(`
             `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(`
    @@ -47,8 +47,8 @@ secret_key`),n("span",{class:"token operator"},"="),s(),n("span",{class:"token p
             `),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(`
         `),n("span",{class:"token punctuation"},"]"),s(`
         
    -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"bytes"),n("span",{class:"token punctuation"},"("),s("secret_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(`
    -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created Keypair with Public Key: {}"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(`
    +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_bytes"),n("span",{class:"token punctuation"},"("),s("secret_key"),n("span",{class:"token punctuation"},")"),s(`
    +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created Keypair with Public Key: {}"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(`
     `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),j=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("secret_key"),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"["),s(`
             `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(`
             `),n("span",{class:"token number"},"189"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"224"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"216"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"117"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"173"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"149"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"45"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"73"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"237"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"246"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"15"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"185"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"186"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"82"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"177"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(`
    @@ -56,8 +56,31 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:
             `),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(`
         `),n("span",{class:"token punctuation"},"]"),s(`
         
    -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"bytes"),n("span",{class:"token punctuation"},"("),s("secret_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(`
    -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),B=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("signature"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"Signer"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(`
    +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_bytes"),n("span",{class:"token punctuation"},"("),s("secret_key"),n("span",{class:"token punctuation"},")"),s(`
    +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),N=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token comment"},"// clang++ keypair_from_seed.cpp -o keypair_from_seed -std=c++17 -lssl -lcrypto -lsodium"),s(`
    +
    +`),n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(`
    +
    +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(`
    +
    +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(`
    +  `),n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token keyword"},"uint8_t"),s(" bytes"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},"]"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"{"),s(`
    +    `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(`
    +    `),n("span",{class:"token number"},"189"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"224"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"216"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"117"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"173"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"149"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"45"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"73"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"237"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"246"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"15"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"185"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"186"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"82"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"177"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(`
    +    `),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(`
    +    `),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(`
    +  `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(`
    +  Keypair key_pair `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"from_seed"),n("span",{class:"token punctuation"},"("),s("bytes"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
    +  std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"Created Keypair with Public Key: "'),s(),n("span",{class:"token operator"},"<<"),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(`
    +`),n("span",{class:"token punctuation"},"}"),s(`
    +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br")])],-1),B=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token keyword"},"uint8_t"),s(" secret_key"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},"]"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"{"),s(`
    +`),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(`
    +`),n("span",{class:"token number"},"189"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"224"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"216"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"117"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"173"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"149"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"45"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"73"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"237"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"246"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"15"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"185"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"186"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"82"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"177"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(`
    +`),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(`
    +`),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(`
    +`),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(`
    +Keypair key_pair `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"from_seed"),n("span",{class:"token punctuation"},"("),s("secret_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
    +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),R=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("signature"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"Signer"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(`
     
     `),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(`
         `),n("span",{class:"token keyword"},"let"),s(" secret_key"),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token punctuation"},"["),n("span",{class:"token keyword"},"u8"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token number"},"64"),n("span",{class:"token punctuation"},"]"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"["),s(`
    @@ -72,7 +95,7 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:
             `),n("span",{class:"token macro property"},"println!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created keypair: {}"'),n("span",{class:"token punctuation"},","),s(" pubkey"),n("span",{class:"token punctuation"},")"),s(`
         `),n("span",{class:"token punctuation"},"}"),s(`
     `),n("span",{class:"token punctuation"},"}"),s(`
    -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br")])],-1),N=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" secret_key"),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token punctuation"},"["),n("span",{class:"token keyword"},"u8"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token number"},"64"),n("span",{class:"token punctuation"},"]"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"["),s(`
    +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br")])],-1),M=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" secret_key"),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token punctuation"},"["),n("span",{class:"token keyword"},"u8"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token number"},"64"),n("span",{class:"token punctuation"},"]"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"["),s(`
         `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(`
         `),n("span",{class:"token number"},"189"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"224"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"216"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"117"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"173"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"149"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"45"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"73"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"237"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"246"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"15"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"185"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"186"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"82"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"177"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(`
         `),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(`
    @@ -80,9 +103,9 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:
     `),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},";"),s(`
     
     `),n("span",{class:"token keyword"},"let"),s(" wallet "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from_bytes"),n("span",{class:"token punctuation"},"("),n("span",{class:"token operator"},"&"),s("secret_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),n("span",{class:"token punctuation"},";"),s(`
    -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),M=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# input your secret into the Keypath listed under solana config get"),s(`
    -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),R=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# input your secret into the Keypath listed under solana config get"),s(`
    -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),D=n("ol",{start:"2"},[n("li",null,"T\u1EEB chu\u1ED7i Base58")],-1),z=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(`
    +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),D=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# input your secret into the Keypath listed under solana config get"),s(`
    +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),z=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# input your secret into the Keypath listed under solana config get"),s(`
    +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),E=n("ol",{start:"2"},[n("li",null,"T\u1EEB chu\u1ED7i Base58")],-1),L=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(`
     `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" bs58 "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"bs58"'),n("span",{class:"token punctuation"},";"),s(`
     
     `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(`
    @@ -92,20 +115,19 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:
         `),n("span",{class:"token punctuation"},")"),s(`
       `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
     `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
    -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),E=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSecretKey"),n("span",{class:"token punctuation"},"("),s(`
    +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),U=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSecretKey"),n("span",{class:"token punctuation"},"("),s(`
       bs58`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"decode"),n("span",{class:"token punctuation"},"("),s(`
         `),n("span",{class:"token string"},'"5MaiiCavjCmn9Hs1o3eznqDEhRwxo7pXiAYez7keQUviUkauRiTMD8DrESdrNjN8zd9mTmVhRvBJeg5vhyvgrAhG"'),s(`
       `),n("span",{class:"token punctuation"},")"),s(`
     `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
    -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br")])],-1),L=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(` base58
    -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair
    +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br")])],-1),V=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair
     
     b58_string `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"5MaiiCavjCmn9Hs1o3eznqDEhRwxo7pXiAYez7keQUviUkauRiTMD8DrESdrNjN8zd9mTmVhRvBJeg5vhyvgrAhG"'),s(`
    -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),s("base58"),n("span",{class:"token punctuation"},"."),s("b58decode"),n("span",{class:"token punctuation"},"("),s("b58_string"),n("span",{class:"token punctuation"},")"),s(`
    -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created Keypair with Public Key: {}"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(`
    -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),V=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("b58_string "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"5MaiiCavjCmn9Hs1o3eznqDEhRwxo7pXiAYez7keQUviUkauRiTMD8DrESdrNjN8zd9mTmVhRvBJeg5vhyvgrAhG"'),s(`
    -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),s("base58"),n("span",{class:"token punctuation"},"."),s("b58decode"),n("span",{class:"token punctuation"},"("),s("b58_string"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(`
    -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),U=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("signature"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"Signer"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(`
    +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_string"),n("span",{class:"token punctuation"},"("),s("b58_string"),n("span",{class:"token punctuation"},")"),s(`
    +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created Keypair with Public Key: {}"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(`
    +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br")])],-1),H=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("b58_string "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"5MaiiCavjCmn9Hs1o3eznqDEhRwxo7pXiAYez7keQUviUkauRiTMD8DrESdrNjN8zd9mTmVhRvBJeg5vhyvgrAhG"'),s(`
    +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_string"),n("span",{class:"token punctuation"},"("),s("b58_string"),n("span",{class:"token punctuation"},")"),s(`
    +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),J=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("signature"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"Signer"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(`
     
     `),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(`
         `),n("span",{class:"token keyword"},"let"),s(" wallet "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from_base58_string"),n("span",{class:"token punctuation"},"("),s(`
    @@ -114,10 +136,10 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:
         `),n("span",{class:"token keyword"},"let"),s(" pubkey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Signer"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token operator"},"&"),s("wallet"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
         `),n("span",{class:"token macro property"},"println!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created keypair: {}"'),n("span",{class:"token punctuation"},","),s(" pubkey"),n("span",{class:"token punctuation"},")"),s(`
     `),n("span",{class:"token punctuation"},"}"),s(`
    -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br")])],-1),J=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" wallet "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from_base58_string"),n("span",{class:"token punctuation"},"("),s(`
    +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br")])],-1),q=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" wallet "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from_base58_string"),n("span",{class:"token punctuation"},"("),s(`
         `),n("span",{class:"token string"},'"5MaiiCavjCmn9Hs1o3eznqDEhRwxo7pXiAYez7keQUviUkauRiTMD8DrESdrNjN8zd9mTmVhRvBJeg5vhyvgrAhG"'),n("span",{class:"token punctuation"},","),s(`
     `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
    -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),H=n("h2",{id:"lam-the-nao-\u0111e-kiem-tra-mot-cap-khoa",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#lam-the-nao-\u0111e-kiem-tra-mot-cap-khoa","aria-hidden":"true"},"#"),s(" L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 ki\u1EC3m tra m\u1ED9t c\u1EB7p kho\xE1")],-1),q=n("p",null,"N\u1EBFu b\u1EA1n \u0111\u01B0\u1EE3c cho m\u1ED9t c\u1EB7p kho\xE1, b\u1EA1n c\xF3 th\u1EC3 x\xE1c nh\u1EADn r\u1EB1ng c\u1EB7p kho\xE1 \u0111\xF3 c\xF3 kh\u1EDBp gi\u1EEFa kho\xE1 ri\xEAng t\u01B0 v\xE0 kho\xE1 c\xF4ng khai hay kh\xF4ng.",-1),Y=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(`
    +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),Y=n("h2",{id:"lam-the-nao-\u0111e-kiem-tra-mot-cap-khoa",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#lam-the-nao-\u0111e-kiem-tra-mot-cap-khoa","aria-hidden":"true"},"#"),s(" L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 ki\u1EC3m tra m\u1ED9t c\u1EB7p kho\xE1")],-1),F=n("p",null,"N\u1EBFu b\u1EA1n \u0111\u01B0\u1EE3c cho m\u1ED9t c\u1EB7p kho\xE1, b\u1EA1n c\xF3 th\u1EC3 x\xE1c nh\u1EADn r\u1EB1ng c\u1EB7p kho\xE1 \u0111\xF3 c\xF3 kh\u1EDBp gi\u1EEFa kho\xE1 ri\xEAng t\u01B0 v\xE0 kho\xE1 c\xF4ng khai hay kh\xF4ng.",-1),I=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(`
     
     `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(`
       `),n("span",{class:"token keyword"},"const"),s(" publicKey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),s(`
    @@ -134,7 +156,7 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:
       `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"==="),s(" publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
       `),n("span",{class:"token comment"},"// true"),s(`
     `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
    -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br")])],-1),F=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" publicKey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
    +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br")])],-1),X=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" publicKey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
     `),n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSecretKey"),n("span",{class:"token punctuation"},"("),s(`
       Uint8Array`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"["),s(`
         `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(`
    @@ -145,10 +167,10 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:
     `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
     `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"==="),s(" publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
     `),n("span",{class:"token comment"},"// true"),s(`
    -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),I=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair
    -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("publickey "),n("span",{class:"token keyword"},"import"),s(` PublicKey
    +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),Z=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair
    +`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("pubkey "),n("span",{class:"token keyword"},"import"),s(` Pubkey
     
    -public_key `),n("span",{class:"token operator"},"="),s(" PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p"'),n("span",{class:"token punctuation"},")"),s(`
    +public_key `),n("span",{class:"token operator"},"="),s(" Pubkey"),n("span",{class:"token punctuation"},"."),s("from_string"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p"'),n("span",{class:"token punctuation"},")"),s(`
     
     keys `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"["),s(`
             `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(`
    @@ -156,11 +178,11 @@ keys `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctu
             `),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(`
             `),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(`
         `),n("span",{class:"token punctuation"},"]"),s(`
    -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"bytes"),n("span",{class:"token punctuation"},"("),s("keys"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(`
    +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_bytes"),n("span",{class:"token punctuation"},"("),s("keys"),n("span",{class:"token punctuation"},")"),s(`
     
    -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},"."),s("to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=="),s(" public_key"),n("span",{class:"token punctuation"},"."),s("to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(`
    +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=="),s(" public_key"),n("span",{class:"token punctuation"},")"),s(`
     `),n("span",{class:"token comment"},"# True"),s(`
    -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br")])],-1),X=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("public_key "),n("span",{class:"token operator"},"="),s(" PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p"'),n("span",{class:"token punctuation"},")"),s(`
    +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br")])],-1),G=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("public_key "),n("span",{class:"token operator"},"="),s(" Pubkey"),n("span",{class:"token punctuation"},"."),s("from_string"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p"'),n("span",{class:"token punctuation"},")"),s(`
     
     keys `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"["),s(`
             `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(`
    @@ -168,13 +190,44 @@ keys `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctu
             `),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(`
             `),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(`
         `),n("span",{class:"token punctuation"},"]"),s(`
    -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"bytes"),n("span",{class:"token punctuation"},"("),s("keys"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(`
    +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_bytes"),n("span",{class:"token punctuation"},"("),s("keys"),n("span",{class:"token punctuation"},")"),s(`
     
    -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},"."),s("to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=="),s(" public_key"),n("span",{class:"token punctuation"},"."),s("to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(`
    +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=="),s(" public_key"),n("span",{class:"token punctuation"},")"),s(`
     `),n("span",{class:"token comment"},"# True"),s(`
    -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br")])],-1),G=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana-keygen verify "),n("span",{class:"token operator"},"<"),s("PUBKEY"),n("span",{class:"token operator"},">"),s(` prompt://
    -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Z=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana-keygen verify "),n("span",{class:"token operator"},"<"),s("PUBKEY"),n("span",{class:"token operator"},">"),s(` prompt://
    -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),$=n("h2",{id:"lam-the-nao-\u0111e-kiem-tra-neu-mot-khoa-cong-khai-khong-ton-tai-khoa-rieng-tu-tuong-ung",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#lam-the-nao-\u0111e-kiem-tra-neu-mot-khoa-cong-khai-khong-ton-tai-khoa-rieng-tu-tuong-ung","aria-hidden":"true"},"#"),s(" L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 ki\u1EC3m tra n\u1EBFu m\u1ED9t kho\xE1 c\xF4ng khai kh\xF4ng t\u1ED3n t\u1EA1i kho\xE1 ri\xEAng t\u01B0 t\u01B0\u01A1ng \u1EE8ng")],-1),Q=n("p",null,"Trong m\u1ED9t v\xE0i tr\u01B0\u1EDDng h\u1EE3p \u0111\u1EB7c bi\u1EC7t (v\xED d\u1EE5 nh\u01B0 PDA), kho\xE1 c\xF4ng khai s\u1EBD kh\xF4ng h\u1EC1 t\u1ED3n t\u1EA1i kho\xE1 ri\xEAng t\u01B0 t\u01B0\u01A1ng \u1EE9ng v\u1EDBi n\xF3. B\u1EA1n c\xF3 th\u1EC3 ki\u1EC3m tra \u0111\u01B0\u1EE3c \u0111i\u1EC1u n\xE0y b\u1EB1ng c\xE1ch th\u1EED xem kho\xE1 c\xF4ng khai c\xF3 n\u1EB1m tr\xEAn \u0111\u01B0\u1EDDng cong ed25519 hay kh\xF4ng. Ch\u1EC9 nh\u1EEFng kho\xE1 c\xF4ng khai n\u1EB1m tr\xEAn \u0111\u01B0\u1EDDng cong m\u1EDBi c\xF3 kho\xE1 ri\xEAng t\u01B0, hay n\xF3i c\xE1ch kh\xE1c l\xE0 \u0111\u01B0\u1EE3c ki\u1EC3m so\xE1t b\u1EDFi m\u1ED9t v\xED ng\u01B0\u1EDDi d\xF9ng.",-1),O=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(`
    +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br")])],-1),$=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token comment"},"// clang++ verify_keypair.cpp -o verify_keypair -std=c++17 -lssl -lcrypto -lsodium"),s(`
    +
    +`),n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(`
    +
    +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(`
    +
    +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(`
    +  PublicKey public_key `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
    +
    +  `),n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token keyword"},"uint8_t"),s(" bytes"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},"]"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"{"),s(`
    +    `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(`
    +    `),n("span",{class:"token number"},"189"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"224"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"216"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"117"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"173"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"149"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"45"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"73"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"237"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"246"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"15"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"185"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"186"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"82"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"177"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(`
    +    `),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(`
    +    `),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(`
    +  `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(`
    +  Keypair key_pair `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"from_seed"),n("span",{class:"token punctuation"},"("),s("bytes"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
    +
    +  std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token punctuation"},"("),s("public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(`
    +`),n("span",{class:"token punctuation"},"}"),s(`
    +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br")])],-1),Q=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[s("PublicKey public_key "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
    +
    +`),n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token keyword"},"uint8_t"),s(" bytes"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},"]"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"{"),s(`
    +`),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(`
    +`),n("span",{class:"token number"},"189"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"224"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"216"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"117"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"173"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"149"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"45"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"73"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"237"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"246"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"15"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"185"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"186"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"82"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"177"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(`
    +`),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(`
    +`),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(`
    +`),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(`
    +Keypair key_pair `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"from_seed"),n("span",{class:"token punctuation"},"("),s("bytes"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
    +
    +std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token punctuation"},"("),s("public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(`
    +`),n("span",{class:"token comment"},"// 1"),s(`
    +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br")])],-1),O=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana-keygen verify "),n("span",{class:"token operator"},"<"),s("PUBKEY"),n("span",{class:"token operator"},">"),s(` prompt://
    +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),nn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana-keygen verify "),n("span",{class:"token operator"},"<"),s("PUBKEY"),n("span",{class:"token operator"},">"),s(` prompt://
    +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),sn=n("h2",{id:"lam-the-nao-\u0111e-kiem-tra-neu-mot-khoa-cong-khai-khong-ton-tai-khoa-rieng-tu-tuong-ung",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#lam-the-nao-\u0111e-kiem-tra-neu-mot-khoa-cong-khai-khong-ton-tai-khoa-rieng-tu-tuong-ung","aria-hidden":"true"},"#"),s(" L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 ki\u1EC3m tra n\u1EBFu m\u1ED9t kho\xE1 c\xF4ng khai kh\xF4ng t\u1ED3n t\u1EA1i kho\xE1 ri\xEAng t\u01B0 t\u01B0\u01A1ng \u1EE8ng")],-1),an=n("p",null,"Trong m\u1ED9t v\xE0i tr\u01B0\u1EDDng h\u1EE3p \u0111\u1EB7c bi\u1EC7t (v\xED d\u1EE5 nh\u01B0 PDA), kho\xE1 c\xF4ng khai s\u1EBD kh\xF4ng h\u1EC1 t\u1ED3n t\u1EA1i kho\xE1 ri\xEAng t\u01B0 t\u01B0\u01A1ng \u1EE9ng v\u1EDBi n\xF3. B\u1EA1n c\xF3 th\u1EC3 ki\u1EC3m tra \u0111\u01B0\u1EE3c \u0111i\u1EC1u n\xE0y b\u1EB1ng c\xE1ch th\u1EED xem kho\xE1 c\xF4ng khai c\xF3 n\u1EB1m tr\xEAn \u0111\u01B0\u1EDDng cong ed25519 hay kh\xF4ng. Ch\u1EC9 nh\u1EEFng kho\xE1 c\xF4ng khai n\u1EB1m tr\xEAn \u0111\u01B0\u1EDDng cong m\u1EDBi c\xF3 kho\xE1 ri\xEAng t\u01B0, hay n\xF3i c\xE1ch kh\xE1c l\xE0 \u0111\u01B0\u1EE3c ki\u1EC3m so\xE1t b\u1EDFi m\u1ED9t v\xED ng\u01B0\u1EDDi d\xF9ng.",-1),tn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(`
     
     `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token keyword"},"function"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(`
       `),n("span",{class:"token comment"},"// Note that Keypair.generate() will always give a public key that is valid for users"),s(`
    @@ -188,23 +241,21 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:
     
       `),n("span",{class:"token keyword"},"const"),s(" errorPubkey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"testPubkey"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token comment"},"// Is not a valid public key"),s(`
     `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
    -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br")])],-1),nn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" key "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
    +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br")])],-1),en=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" key "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
     `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("PublicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"isOnCurve"),n("span",{class:"token punctuation"},"("),s("key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBytes"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
    -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),sn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair
    -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("publickey "),n("span",{class:"token keyword"},"import"),s(` PublicKey
    -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("utils"),n("span",{class:"token punctuation"},"."),s("ed25519_base "),n("span",{class:"token keyword"},"import"),s(` is_on_curve
    +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),on=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("pubkey "),n("span",{class:"token keyword"},"import"),s(` Pubkey
     
     `),n("span",{class:"token comment"},"# Note that Keypair() will always give a public key that is valid for users"),s(`
    -key `),n("span",{class:"token operator"},"="),s(" PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},"'5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY'"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# Valid public key"),s(`
    -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("is_on_curve"),n("span",{class:"token punctuation"},"("),s("key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# Lies on the ed25519 curve and is suitable for users"),s(`
    +key `),n("span",{class:"token operator"},"="),s(" Pubkey"),n("span",{class:"token punctuation"},"."),s("from_string"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},"'5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY'"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# Valid public key"),s(`
    +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("key"),n("span",{class:"token punctuation"},"."),s("is_on_curve"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# Lies on the ed25519 curve and is suitable for users"),s(`
     
    -off_curve_address `),n("span",{class:"token operator"},"="),s(" PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},"'4BJXYkfvg37zEmBbsacZjeQDpTNx91KppxFJxRqrz48e'"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# Valid public key"),s(`
    -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("PublicKey"),n("span",{class:"token punctuation"},"."),s("_is_on_curve"),n("span",{class:"token punctuation"},"("),s("off_curve_address"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# Not on the ed25519 curve, therefore not suitable for users"),s(`
    +off_curve_address `),n("span",{class:"token operator"},"="),s(" Pubkey"),n("span",{class:"token punctuation"},"."),s("from_string"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},"'4BJXYkfvg37zEmBbsacZjeQDpTNx91KppxFJxRqrz48e'"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# Valid public key"),s(`
    +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("off_curve_address"),n("span",{class:"token punctuation"},"."),s("is_on_curve"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# Not on the ed25519 curve, therefore not suitable for users"),s(`
     
    -error_pubkey `),n("span",{class:"token operator"},"="),s(" PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"testPubkey"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token comment"},"# Is not a valid public key"),s(`
    -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br")])],-1),an=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("key "),n("span",{class:"token operator"},"="),s(" PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},"'5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY'"),n("span",{class:"token punctuation"},")"),s(`
    -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("is_on_curve"),n("span",{class:"token punctuation"},"("),s("key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(`
    -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),tn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("pubkey"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Pubkey"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(`
    +error_pubkey `),n("span",{class:"token operator"},"="),s(" Pubkey"),n("span",{class:"token punctuation"},"."),s("from_string"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"testPubkey"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token comment"},"# Is not a valid public key"),s(`
    +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),cn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("key "),n("span",{class:"token operator"},"="),s(" Pubkey"),n("span",{class:"token punctuation"},"."),s("from_string"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},"'5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY'"),n("span",{class:"token punctuation"},")"),s(`
    +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("key"),n("span",{class:"token punctuation"},"."),s("is_on_curve"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(`
    +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),pn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("pubkey"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Pubkey"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(`
     `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("std"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token keyword"},"str"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token class-name"},"FromStr"),n("span",{class:"token punctuation"},";"),s(`
     
     `),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(`
    @@ -217,21 +268,21 @@ error_pubkey `),n("span",{class:"token operator"},"="),s(" PublicKey"),n("span",
     
         `),n("span",{class:"token keyword"},"let"),s(" error_pubkey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Pubkey"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from_str"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"testPubkey"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token comment"},"// Is not a valid public key"),s(`
     `),n("span",{class:"token punctuation"},"}"),s(`
    -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br")])],-1),en=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" pubkey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Pubkey"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from_str"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
    +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br")])],-1),un=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" pubkey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Pubkey"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from_str"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
     `),n("span",{class:"token macro property"},"println!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"{:?}"'),n("span",{class:"token punctuation"},","),s(" pubkey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"is_on_curve"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(`
    -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),on=n("h2",{id:"lam-the-nao-\u0111e-sinh-ra-cum-mnemonic",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#lam-the-nao-\u0111e-sinh-ra-cum-mnemonic","aria-hidden":"true"},"#"),s(" L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 sinh ra c\u1EE5m mnemonic")],-1),cn=n("p",null,"N\u1EBFu b\u1EA1n \u0111ang t\u1EA1o v\xED, b\u1EA1n s\u1EBD c\u1EA7n sinh ra m\u1ED9t c\u1EE5m mnemonic \u0111\u1EC3 ng\u01B0\u1EDDi d\xF9ng c\xF3 th\u1EC3 l\u01B0u v\xE0 ph\u1EE5c h\u1ED3i l\u1EA1i v\xED trong tr\u01B0\u1EDDng h\u1EE3p c\u1EA7n.",-1),pn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" bip39 "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"bip39"'),n("span",{class:"token punctuation"},";"),s(`
    +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),ln=n("h2",{id:"lam-the-nao-\u0111e-sinh-ra-cum-mnemonic",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#lam-the-nao-\u0111e-sinh-ra-cum-mnemonic","aria-hidden":"true"},"#"),s(" L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 sinh ra c\u1EE5m mnemonic")],-1),kn=n("p",null,"N\u1EBFu b\u1EA1n \u0111ang t\u1EA1o v\xED, b\u1EA1n s\u1EBD c\u1EA7n sinh ra m\u1ED9t c\u1EE5m mnemonic \u0111\u1EC3 ng\u01B0\u1EDDi d\xF9ng c\xF3 th\u1EC3 l\u01B0u v\xE0 ph\u1EE5c h\u1ED3i l\u1EA1i v\xED trong tr\u01B0\u1EDDng h\u1EE3p c\u1EA7n.",-1),rn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" bip39 "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"bip39"'),n("span",{class:"token punctuation"},";"),s(`
     
     `),n("span",{class:"token keyword"},"const"),s(" mnemonic "),n("span",{class:"token operator"},"="),s(" bip39"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generateMnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
    -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),ln=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" mnemonic "),n("span",{class:"token operator"},"="),s(" bip39"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generateMnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
    -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),un=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" mnemonic "),n("span",{class:"token keyword"},"import"),s(` Mnemonic
    +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),bn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" mnemonic "),n("span",{class:"token operator"},"="),s(" bip39"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generateMnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
    +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),mn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" mnemonic "),n("span",{class:"token keyword"},"import"),s(` Mnemonic
     
     mnemo `),n("span",{class:"token operator"},"="),s(" Mnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"english"'),n("span",{class:"token punctuation"},")"),s(`
     words `),n("span",{class:"token operator"},"="),s(" mnemo"),n("span",{class:"token punctuation"},"."),s("generate"),n("span",{class:"token punctuation"},"("),s("strength"),n("span",{class:"token operator"},"="),n("span",{class:"token number"},"256"),n("span",{class:"token punctuation"},")"),s(`
    -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),kn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("mnemo "),n("span",{class:"token operator"},"="),s(" Mnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"english"'),n("span",{class:"token punctuation"},")"),s(`
    +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),dn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("mnemo "),n("span",{class:"token operator"},"="),s(" Mnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"english"'),n("span",{class:"token punctuation"},")"),s(`
     words `),n("span",{class:"token operator"},"="),s(" mnemo"),n("span",{class:"token punctuation"},"."),s("generate"),n("span",{class:"token punctuation"},"("),s("strength"),n("span",{class:"token operator"},"="),n("span",{class:"token number"},"256"),n("span",{class:"token punctuation"},")"),s(`
    -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),rn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen new
    -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),bn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen new
    -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),mn=n("h2",{id:"lam-the-nao-\u0111e-phuc-hoi-lai-cap-khoa-tu-cum-mnemonic",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#lam-the-nao-\u0111e-phuc-hoi-lai-cap-khoa-tu-cum-mnemonic","aria-hidden":"true"},"#"),s(" L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 ph\u1EE5c h\u1ED3i l\u1EA1i c\u1EB7p kho\xE1 t\u1EEB c\u1EE5m mnemonic")],-1),dn=n("p",null,"C\xF3 r\u1EA5t nhi\u1EC1u v\xED s\u1EED d\u1EE5ng c\u1EE5m mnemonics \u0111\u1EC3 bi\u1EC3u di\u1EC5n kho\xE1 ri\xEAng t\u01B0. B\u1EA1n c\xF3 th\u1EC3 chuy\u1EC3n \u0111\u1ED5i gi\u1EEFa mnemonic v\xE0 c\u1EB7p kho\xE1 \u0111\u1EC3 ki\u1EC3m th\u1EED d\u01B0\u1EDBi m\xF4i tr\u01B0\u1EDDng \u0111\u1ECBa ph\u01B0\u01A1ng.",-1),hn=n("ol",null,[n("li",null,"BIP39 - t\u1EA1o m\u1ED9t v\xED \u0111\u01A1n")],-1),gn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(`
    +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),hn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen new
    +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),gn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen new
    +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),yn=n("h2",{id:"lam-the-nao-\u0111e-phuc-hoi-lai-cap-khoa-tu-cum-mnemonic",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#lam-the-nao-\u0111e-phuc-hoi-lai-cap-khoa-tu-cum-mnemonic","aria-hidden":"true"},"#"),s(" L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 ph\u1EE5c h\u1ED3i l\u1EA1i c\u1EB7p kho\xE1 t\u1EEB c\u1EE5m mnemonic")],-1),wn=n("p",null,"C\xF3 r\u1EA5t nhi\u1EC1u v\xED s\u1EED d\u1EE5ng c\u1EE5m mnemonics \u0111\u1EC3 bi\u1EC3u di\u1EC5n kho\xE1 ri\xEAng t\u01B0. B\u1EA1n c\xF3 th\u1EC3 chuy\u1EC3n \u0111\u1ED5i gi\u1EEFa mnemonic v\xE0 c\u1EB7p kho\xE1 \u0111\u1EC3 ki\u1EC3m th\u1EED d\u01B0\u1EDBi m\xF4i tr\u01B0\u1EDDng \u0111\u1ECBa ph\u01B0\u01A1ng.",-1),vn=n("ol",null,[n("li",null,"BIP39 - t\u1EA1o m\u1ED9t v\xED \u0111\u01A1n")],-1),_n=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(`
     `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" bip39 "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"bip39"'),n("span",{class:"token punctuation"},";"),s(`
     
     `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(`
    @@ -241,23 +292,23 @@ words `),n("span",{class:"token operator"},"="),s(" mnemo"),n("span",{class:"tok
       `),n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSeed"),n("span",{class:"token punctuation"},"("),s("seed"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"slice"),n("span",{class:"token punctuation"},"("),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"32"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
       `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),n("span",{class:"token template-string"},[n("span",{class:"token template-punctuation string"},"`"),n("span",{class:"token interpolation"},[n("span",{class:"token interpolation-punctuation punctuation"},"${"),s("keypair"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token interpolation-punctuation punctuation"},"}")]),n("span",{class:"token template-punctuation string"},"`")]),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token comment"},"// 5ZWj7a1f8tWkjBESHKgrLmXshuXxqeY9SYcfbshpAqPG"),s(`
     `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
    -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),yn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" mnemonic "),n("span",{class:"token operator"},"="),s(`
    +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),fn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" mnemonic "),n("span",{class:"token operator"},"="),s(`
       `),n("span",{class:"token string"},'"pill tomorrow foster begin walnut borrow virtual kick shift mutual shoe scatter"'),n("span",{class:"token punctuation"},";"),s(`
     `),n("span",{class:"token keyword"},"const"),s(" seed "),n("span",{class:"token operator"},"="),s(" bip39"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"mnemonicToSeedSync"),n("span",{class:"token punctuation"},"("),s("mnemonic"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token string"},'""'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token comment"},"// (mnemonic, password)"),s(`
     `),n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSeed"),n("span",{class:"token punctuation"},"("),s("seed"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"slice"),n("span",{class:"token punctuation"},"("),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"32"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
    -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),wn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair
    +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),xn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair
     `),n("span",{class:"token keyword"},"from"),s(" mnemonic "),n("span",{class:"token keyword"},"import"),s(` Mnemonic
     
     mnemo `),n("span",{class:"token operator"},"="),s(" Mnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"english"'),n("span",{class:"token punctuation"},")"),s(`
     seed `),n("span",{class:"token operator"},"="),s(" mnemo"),n("span",{class:"token punctuation"},"."),s("to_seed"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"pill tomorrow foster begin walnut borrow virtual kick shift mutual shoe scatter"'),n("span",{class:"token punctuation"},")"),s(`
    -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),s("seed"),n("span",{class:"token punctuation"},")"),s(`
    -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created Keypair with Public Key: {}"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),s(`
    -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),vn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("mnemo "),n("span",{class:"token operator"},"="),s(" Mnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"english"'),n("span",{class:"token punctuation"},")"),s(`
    +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_bytes"),n("span",{class:"token punctuation"},"("),s("seed"),n("span",{class:"token punctuation"},")"),s(`
    +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created Keypair with Public Key: {}"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(`
    +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),Kn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("mnemo "),n("span",{class:"token operator"},"="),s(" Mnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"english"'),n("span",{class:"token punctuation"},")"),s(`
     seed `),n("span",{class:"token operator"},"="),s(" mnemo"),n("span",{class:"token punctuation"},"."),s("to_seed"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"pill tomorrow foster begin walnut borrow virtual kick shift mutual shoe scatter"'),n("span",{class:"token punctuation"},")"),s(`
    -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),s("seed"),n("span",{class:"token punctuation"},")"),s(`
    -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),_n=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen recover
    -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),fn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen recover
    -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),xn=n("ol",{start:"2"},[n("li",null,"BIP44 - nhi\u1EC1u v\xED, th\u01B0\u1EDDng \u0111\u01B0\u1EE3c bi\u1EBFt \u0111\u1EBFn v\u1EDBi t\xEAn g\u1ECDi v\xED HD (Hierarchical Deterministic - Ph\xE2n quy\u1EC1n T\u1EA5t \u0111\u1ECBnh)")],-1),Kn=n("p",null,"B\u1EA1n c\xF3 th\u1EC3 t\u1EA1o nhi\u1EC1u v\xED t\u1EEB m\u1ED9t seed \u0111\u01A1n v\xE0 \u0111\u01B0\u1EE3c g\u1ECDi l\xE0 v\xED HD:",-1),Pn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(`
    +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_bytes"),n("span",{class:"token punctuation"},"("),s("seed"),n("span",{class:"token punctuation"},")"),s(`
    +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),Pn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen recover
    +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Wn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen recover
    +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Cn=n("ol",{start:"2"},[n("li",null,"BIP44 - nhi\u1EC1u v\xED, th\u01B0\u1EDDng \u0111\u01B0\u1EE3c bi\u1EBFt \u0111\u1EBFn v\u1EDBi t\xEAn g\u1ECDi v\xED HD (Hierarchical Deterministic - Ph\xE2n quy\u1EC1n T\u1EA5t \u0111\u1ECBnh)")],-1),Sn=n("p",null,"B\u1EA1n c\xF3 th\u1EC3 t\u1EA1o nhi\u1EC1u v\xED t\u1EEB m\u1ED9t seed \u0111\u01A1n v\xE0 \u0111\u01B0\u1EE3c g\u1ECDi l\xE0 v\xED HD:",-1),An=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(`
     `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" HDKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"micro-ed25519-hdkey"'),n("span",{class:"token punctuation"},";"),s(`
     `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" bip39 "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"bip39"'),n("span",{class:"token punctuation"},";"),s(`
     
    @@ -272,7 +323,7 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:
         `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),n("span",{class:"token template-string"},[n("span",{class:"token template-punctuation string"},"`"),n("span",{class:"token interpolation"},[n("span",{class:"token interpolation-punctuation punctuation"},"${"),s("path"),n("span",{class:"token interpolation-punctuation punctuation"},"}")]),n("span",{class:"token string"}," => "),n("span",{class:"token interpolation"},[n("span",{class:"token interpolation-punctuation punctuation"},"${"),s("keypair"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token interpolation-punctuation punctuation"},"}")]),n("span",{class:"token template-punctuation string"},"`")]),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
       `),n("span",{class:"token punctuation"},"}"),s(`
     `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
    -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br")])],-1),Wn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" mnemonic "),n("span",{class:"token operator"},"="),s(`
    +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br")])],-1),Tn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" mnemonic "),n("span",{class:"token operator"},"="),s(`
       `),n("span",{class:"token string"},'"neither lonely flavor argue grass remind eye tag avocado spot unusual intact"'),n("span",{class:"token punctuation"},";"),s(`
     `),n("span",{class:"token keyword"},"const"),s(" seed "),n("span",{class:"token operator"},"="),s(" bip39"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"mnemonicToSeedSync"),n("span",{class:"token punctuation"},"("),s("mnemonic"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token string"},'""'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token comment"},"// (mnemonic, password)"),s(`
     `),n("span",{class:"token keyword"},"for"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"let"),s(" i "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(" i "),n("span",{class:"token operator"},"<"),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},";"),s(" i"),n("span",{class:"token operator"},"++"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(`
    @@ -280,9 +331,9 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:
       `),n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSeed"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"derivePath"),n("span",{class:"token punctuation"},"("),s("path"),n("span",{class:"token punctuation"},","),s(" seed"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toString"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"hex"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),s("key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
       `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),n("span",{class:"token template-string"},[n("span",{class:"token template-punctuation string"},"`"),n("span",{class:"token interpolation"},[n("span",{class:"token interpolation-punctuation punctuation"},"${"),s("path"),n("span",{class:"token interpolation-punctuation punctuation"},"}")]),n("span",{class:"token string"}," => "),n("span",{class:"token interpolation"},[n("span",{class:"token interpolation-punctuation punctuation"},"${"),s("keypair"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token interpolation-punctuation punctuation"},"}")]),n("span",{class:"token template-punctuation string"},"`")]),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
     `),n("span",{class:"token punctuation"},"}"),s(`
    -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),Sn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana-keygen recover "),n("span",{class:"token string"},"'prompt:?key=0/0'"),s(`
    -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Cn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana-keygen recover "),n("span",{class:"token string"},"'prompt:?key=0/0'"),s(`
    -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),An=n("h2",{id:"lam-the-nao-\u0111e-sinh-mot-\u0111ia-chi-danh-nghia",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#lam-the-nao-\u0111e-sinh-mot-\u0111ia-chi-danh-nghia","aria-hidden":"true"},"#"),s(" L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 sinh m\u1ED9t \u0111\u1ECBa ch\u1EC9 danh ngh\u0129a")],-1),Tn=n("p",null,'\u0110\u1ECBa ch\u1EC9 danh ngh\u0129a, hay \u0111\u1ECBa ch\u1EC9 tu\u1EF3 ch\u1EC9nh l\xE0 nh\u1EEFng \u0111\u1ECBa ch\u1EC9 v\u1EDBi c\xE1c ti\u1EC1n t\u1ED1 l\xE0 nh\u1EEFng k\xFD t\u1EF1 c\u1EE5 th\u1EC3. V\xED d\u1EE5, m\u1ED9t ng\u01B0\u1EDDi mu\u1ED1n m\u1ED9t kho\xE1 c\xF4ng khai sao cho n\xF3 b\u1EAFt \u0111\u1EA7u v\u1EDBi c\u1EE5m t\u1EEB "elv1s", ho\u1EB7c "cook". Nh\u1EEFng \u0111\u1EA1i ch\u1EC9 n\xE0o gi\xFAp ng\u01B0\u1EDDi kh\xE1c c\xF3 th\u1EC3 bi\u1EBFt \u0111\u01B0\u1EE3c ch\u1EE7 s\u1EDF h\u1EEFu c\u1EE7a kho\xE1 v\xE0 thu\u1EADn ti\u1EC7n cho vi\u1EC7c nh\u1EADn d\u1EA1ng h\u01A1n.',-1),jn=n("p",null,"L\u01B0u \xFD: C\xE0ng nhi\u1EC1u k\xFD t\u1EF1 ti\u1EC1n t\u1ED1 trong \u0111\u1EA1i ch\u1EC9 danh ngh\u0129a, s\u1EBD c\xE0ng y\xEAu c\u1EA7u nhi\u1EC1u th\u1EDDi gian t\xEDnh to\xE1n h\u01A1n.",-1),Bn=n("div",{class:"custom-container warning"},[n("p",{class:"custom-container-title"},"WARNING"),n("p",null,"B\u1EA1n n\xEAn s\u1EED d\u1EE5ng CLI cho nhi\u1EC7m v\u1EE5 n\xE0y. V\xED d\u1EE5 tr\xEAn Python v\xE0 TypeScript ch\u1EC9 nh\u1EB1m m\u1EE5c \u0111\xEDch minh ho\u1EA1 v\xE0 c\xF3 hi\u1EC7u su\u1EA5t ch\u1EADm h\u01A1n r\u1EA5t nhi\u1EC1u so v\u1EDBi CLI.")],-1),Nn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(`
    +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),jn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana-keygen recover "),n("span",{class:"token string"},"'prompt:?key=0/0'"),s(`
    +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Nn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana-keygen recover "),n("span",{class:"token string"},"'prompt:?key=0/0'"),s(`
    +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Bn=n("h2",{id:"lam-the-nao-\u0111e-sinh-mot-\u0111ia-chi-danh-nghia",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#lam-the-nao-\u0111e-sinh-mot-\u0111ia-chi-danh-nghia","aria-hidden":"true"},"#"),s(" L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 sinh m\u1ED9t \u0111\u1ECBa ch\u1EC9 danh ngh\u0129a")],-1),Rn=n("p",null,'\u0110\u1ECBa ch\u1EC9 danh ngh\u0129a, hay \u0111\u1ECBa ch\u1EC9 tu\u1EF3 ch\u1EC9nh l\xE0 nh\u1EEFng \u0111\u1ECBa ch\u1EC9 v\u1EDBi c\xE1c ti\u1EC1n t\u1ED1 l\xE0 nh\u1EEFng k\xFD t\u1EF1 c\u1EE5 th\u1EC3. V\xED d\u1EE5, m\u1ED9t ng\u01B0\u1EDDi mu\u1ED1n m\u1ED9t kho\xE1 c\xF4ng khai sao cho n\xF3 b\u1EAFt \u0111\u1EA7u v\u1EDBi c\u1EE5m t\u1EEB "elv1s", ho\u1EB7c "cook". Nh\u1EEFng \u0111\u1EA1i ch\u1EC9 n\xE0o gi\xFAp ng\u01B0\u1EDDi kh\xE1c c\xF3 th\u1EC3 bi\u1EBFt \u0111\u01B0\u1EE3c ch\u1EE7 s\u1EDF h\u1EEFu c\u1EE7a kho\xE1 v\xE0 thu\u1EADn ti\u1EC7n cho vi\u1EC7c nh\u1EADn d\u1EA1ng h\u01A1n.',-1),Mn=n("p",null,"L\u01B0u \xFD: C\xE0ng nhi\u1EC1u k\xFD t\u1EF1 ti\u1EC1n t\u1ED1 trong \u0111\u1EA1i ch\u1EC9 danh ngh\u0129a, s\u1EBD c\xE0ng y\xEAu c\u1EA7u nhi\u1EC1u th\u1EDDi gian t\xEDnh to\xE1n h\u01A1n.",-1),Dn=n("div",{class:"custom-container warning"},[n("p",{class:"custom-container-title"},"WARNING"),n("p",null,"B\u1EA1n n\xEAn s\u1EED d\u1EE5ng CLI cho nhi\u1EC7m v\u1EE5 n\xE0y. V\xED d\u1EE5 tr\xEAn Python v\xE0 TypeScript ch\u1EC9 nh\u1EB1m m\u1EE5c \u0111\xEDch minh ho\u1EA1 v\xE0 c\xF3 hi\u1EC7u su\u1EA5t ch\u1EADm h\u01A1n r\u1EA5t nhi\u1EC1u so v\u1EDBi CLI.")],-1),zn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(`
     
     `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(`
       `),n("span",{class:"token keyword"},"let"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
    @@ -290,23 +341,42 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:
         keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
       `),n("span",{class:"token punctuation"},"}"),s(`
     `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
    -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),Mn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
    +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),En=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
     `),n("span",{class:"token keyword"},"while"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token operator"},"!"),s("keypair"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"startsWith"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"elv1s"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(`
       keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
     `),n("span",{class:"token punctuation"},"}"),s(`
    -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),Rn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair
    +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),Ln=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair
     
     keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(`
    -`),n("span",{class:"token keyword"},"while"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"str"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},":"),n("span",{class:"token number"},"5"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token operator"},"!="),n("span",{class:"token string"},'"elv1s"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},":"),s(`
    +`),n("span",{class:"token keyword"},"while"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"str"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},":"),n("span",{class:"token number"},"5"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token operator"},"!="),n("span",{class:"token string"},'"elv1s"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},":"),s(`
         keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(`
         
    -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created Keypair with Public Key: {}"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(`
    -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),Dn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(`
    -`),n("span",{class:"token keyword"},"while"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"str"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},":"),n("span",{class:"token number"},"5"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token operator"},"!="),n("span",{class:"token string"},'"elv1s"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},":"),s(`
    +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created Keypair with Public Key: {}"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(`
    +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),Un=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(`
    +`),n("span",{class:"token keyword"},"while"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"str"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},":"),n("span",{class:"token number"},"5"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token operator"},"!="),n("span",{class:"token string"},'"elv1s"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},":"),s(`
         keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(`
    -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),zn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen grind --starts-with e1v1s:1
    -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),En=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen grind --starts-with e1v1s:1
    -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Ln=n("h2",{id:"lam-the-nao-ky-va-kiem-tra-tinh-nhan-bang-vi",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#lam-the-nao-ky-va-kiem-tra-tinh-nhan-bang-vi","aria-hidden":"true"},"#"),s(" L\xE0m th\u1EBF n\xE0o k\xFD v\xE0 ki\u1EC3m tra tinh nh\u1EAFn b\u1EB1ng v\xED")],-1),Vn=n("p",null,"M\u1ED9t ch\u1EE9c n\u0103ng c\u01A1 b\u1EA3n c\u1EE7a m\u1ED9t c\u1EB7p kho\xE1 l\xE0 k\xFD m\u1ED9t tin nh\u1EAFn v\xE0 cho ph\xE9p ki\u1EC3m tra ch\u1EEF k\xFD c\xF9ng tin nh\u1EAFn \u0111\xF3. Wuas tr\xECnh x\xE1c nh\u1EADn m\u1ED9t ch\u1EEF k\xFD cho ph\xE9p ng\u01B0\u1EDDi nh\u1EADn ch\u1EAFc ch\u1EAFn r\u1EB1ng d\u1EEF li\u1EC7u \u0111\u01B0\u1EE3c k\xFD l\xE0 do ch\u1EE7 s\u1EDF h\u1EEFu th\u1EF1c s\u1EF1 c\u1EE7a c\u1EB7p kho\xE1 k\xFD l\xEAn.",-1),Un=s("\u0110\u1EC3 l\xE0m \u0111\u01B0\u1EE3c \u0111i\u1EC1u \u0111\xF3 ch\xFAng ta c\u1EA7n s\u1EED d\u1EE5ng th\u01B0 vi\u1EC7n m\u1EADt m\xE3 h\u1ECDc "),Jn={href:"https://www.npmjs.com/package/tweetnacl",target:"_blank",rel:"noopener noreferrer"},Hn=s("TweetNaCl"),qn=s("."),Yn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(`
    +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),Vn=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token comment"},"// clang++ vanity_keypair.cpp -o vanity_keypair -std=c++17 -lssl -lcrypto -lsodium"),s(`
    +
    +`),n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(`
    +
    +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(`
    +
    +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(`
    +  `),n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
    +
    +  `),n("span",{class:"token keyword"},"while"),s(),n("span",{class:"token punctuation"},"("),s("key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"substr"),n("span",{class:"token punctuation"},"("),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"5"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"!="),s(),n("span",{class:"token string"},'"elv1s"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(`
    +    key_pair `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
    +  `),n("span",{class:"token punctuation"},"}"),s(`
    +
    +  std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"Created Keypair with Public Key: "'),s(),n("span",{class:"token operator"},"<<"),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(`
    +`),n("span",{class:"token punctuation"},"}"),s(`
    +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br")])],-1),Hn=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
    +`),n("span",{class:"token keyword"},"while"),s(),n("span",{class:"token punctuation"},"("),s("key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"substr"),n("span",{class:"token punctuation"},"("),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"5"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"!="),s(),n("span",{class:"token string"},'"elv1s"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(`
    +    key_pair `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
    +`),n("span",{class:"token punctuation"},"}"),s(`
    +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),Jn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen grind --starts-with e1v1s:1
    +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),qn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen grind --starts-with e1v1s:1
    +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Yn=n("h2",{id:"lam-the-nao-ky-va-kiem-tra-tinh-nhan-bang-vi",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#lam-the-nao-ky-va-kiem-tra-tinh-nhan-bang-vi","aria-hidden":"true"},"#"),s(" L\xE0m th\u1EBF n\xE0o k\xFD v\xE0 ki\u1EC3m tra tinh nh\u1EAFn b\u1EB1ng v\xED")],-1),Fn=n("p",null,"M\u1ED9t ch\u1EE9c n\u0103ng c\u01A1 b\u1EA3n c\u1EE7a m\u1ED9t c\u1EB7p kho\xE1 l\xE0 k\xFD m\u1ED9t tin nh\u1EAFn v\xE0 cho ph\xE9p ki\u1EC3m tra ch\u1EEF k\xFD c\xF9ng tin nh\u1EAFn \u0111\xF3. Wuas tr\xECnh x\xE1c nh\u1EADn m\u1ED9t ch\u1EEF k\xFD cho ph\xE9p ng\u01B0\u1EDDi nh\u1EADn ch\u1EAFc ch\u1EAFn r\u1EB1ng d\u1EEF li\u1EC7u \u0111\u01B0\u1EE3c k\xFD l\xE0 do ch\u1EE7 s\u1EDF h\u1EEFu th\u1EF1c s\u1EF1 c\u1EE7a c\u1EB7p kho\xE1 k\xFD l\xEAn.",-1),In=s("\u0110\u1EC3 l\xE0m \u0111\u01B0\u1EE3c \u0111i\u1EC1u \u0111\xF3 ch\xFAng ta c\u1EA7n s\u1EED d\u1EE5ng th\u01B0 vi\u1EC7n m\u1EADt m\xE3 h\u1ECDc "),Xn={href:"https://www.npmjs.com/package/tweetnacl",target:"_blank",rel:"noopener noreferrer"},Zn=s("TweetNaCl"),Gn=s("."),$n=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(`
     `),n("span",{class:"token keyword"},"import"),s(" nacl "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"tweetnacl"'),n("span",{class:"token punctuation"},";"),s(`
     `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" decodeUTF8 "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"tweetnacl-util"'),n("span",{class:"token punctuation"},";"),s(`
     
    @@ -332,7 +402,7 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:
     
       `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("result"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
     `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
    -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br")])],-1),Fn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" message "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"The quick brown fox jumps over the lazy dog"'),n("span",{class:"token punctuation"},";"),s(`
    +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br")])],-1),Qn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" message "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"The quick brown fox jumps over the lazy dog"'),n("span",{class:"token punctuation"},";"),s(`
     `),n("span",{class:"token keyword"},"const"),s(" messageBytes "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"decodeUTF8"),n("span",{class:"token punctuation"},"("),s("message"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
     
     `),n("span",{class:"token keyword"},"const"),s(" signature "),n("span",{class:"token operator"},"="),s(" nacl"),n("span",{class:"token punctuation"},"."),s("sign"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"detached"),n("span",{class:"token punctuation"},"("),s("messageBytes"),n("span",{class:"token punctuation"},","),s(" keypair"),n("span",{class:"token punctuation"},"."),s("secretKey"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
    @@ -343,42 +413,26 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:
     `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
     
     `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("result"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
    -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),In=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" nacl"),n("span",{class:"token punctuation"},"."),s("signing "),n("span",{class:"token keyword"},"import"),s(` VerifyKey
    -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair
    +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),On=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair
     
     secret_key `),n("span",{class:"token operator"},"="),s("  "),n("span",{class:"token punctuation"},"["),s(`
           `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"189"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"224"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"216"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"117"),n("span",{class:"token punctuation"},","),s(`
           `),n("span",{class:"token number"},"173"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"149"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"45"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"73"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"237"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"246"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"15"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"185"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"186"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"82"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"177"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(`
           `),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(`
    -    `),n("span",{class:"token punctuation"},"]"),s(`
    -     
    -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"bytes"),n("span",{class:"token punctuation"},"("),s("secret_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(`
    -pubkey_bytes `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token builtin"},"bytes"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),s(`
    -message `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"The quick brown fox jumps over the lazy dog"'),s(`
    -message_bytes `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token builtin"},"bytes"),n("span",{class:"token punctuation"},"("),s("message"),n("span",{class:"token punctuation"},","),n("span",{class:"token string"},"'utf8'"),n("span",{class:"token punctuation"},")"),s(`
    -signed_message `),n("span",{class:"token operator"},"="),s(" keypair"),n("span",{class:"token punctuation"},"."),s("sign"),n("span",{class:"token punctuation"},"("),s("message_bytes"),n("span",{class:"token punctuation"},")"),s(`
    -
    -verify_sign `),n("span",{class:"token operator"},"="),s(" VerifyKey"),n("span",{class:"token punctuation"},"("),s(`
    -    pubkey_bytes
    -`),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),s("verify"),n("span",{class:"token punctuation"},"("),s(`
    -    smessage`),n("span",{class:"token operator"},"="),s("message_bytes"),n("span",{class:"token punctuation"},","),s(`  
    -    signature`),n("span",{class:"token operator"},"="),s("signed_message"),n("span",{class:"token punctuation"},"."),s(`signature
    -`),n("span",{class:"token punctuation"},")"),s(`
    -
    -`),n("span",{class:"token comment"},"#Returns original message if the signature has not been tampered with"),s(`
    -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("verify_sign"),n("span",{class:"token punctuation"},")"),s(`
    -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br")])],-1),Xn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("message "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"The quick brown fox jumps over the lazy dog"'),s(`
    -message_bytes `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token builtin"},"bytes"),n("span",{class:"token punctuation"},"("),s("message"),n("span",{class:"token punctuation"},","),n("span",{class:"token string"},"'utf8'"),n("span",{class:"token punctuation"},")"),s(`
    -signed_message `),n("span",{class:"token operator"},"="),s(" keypair"),n("span",{class:"token punctuation"},"."),s("sign"),n("span",{class:"token punctuation"},"("),s("message_bytes"),n("span",{class:"token punctuation"},")"),s(`
    -
    -verify_sign `),n("span",{class:"token operator"},"="),s(" VerifyKey"),n("span",{class:"token punctuation"},"("),s(`
    -    pubkey_bytes
    -`),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),s("verify"),n("span",{class:"token punctuation"},"("),s(`
    -    smessage`),n("span",{class:"token operator"},"="),s("message_bytes"),n("span",{class:"token punctuation"},","),s(`  
    -    signature`),n("span",{class:"token operator"},"="),s("signed_message"),n("span",{class:"token punctuation"},"."),s(`signature
    -`),n("span",{class:"token punctuation"},")"),s(`
    -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),Gn=n("h2",{id:"lam-the-nao-\u0111e-ket-noi-vi",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#lam-the-nao-\u0111e-ket-noi-vi","aria-hidden":"true"},"#"),s(" L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 k\u1EBFt n\u1ED1i v\xED")],-1),Zn=s("Th\u01B0 vi\u1EC7n "),$n={href:"https://github.com/solana-labs/wallet-adapter",target:"_blank",rel:"noopener noreferrer"},Qn=s("wallet-adapter"),On=s(" c\u1EE7a Solana s\u1EBD gi\xFAp cho vi\u1EC7c qu\u1EA3n l\xFD v\xE0 k\u1EBFt n\u1ED1i v\xED tr\u1EDF n\xEAn h\u1EBFt s\u1EE9c \u0111\u01A1n gi\u1EA3n."),ns=l(`

    React

    Ch\u1EA1y \u0111o\u1EA1n m\xE3 b\xEAn d\u01B0\u1EDBi \u0111\u1EC3 c\xE0i \u0111\u1EB7t c\xE1c th\u01B0 vi\u1EC7n c\u1EA7n thi\u1EBFt:

    yarn add @solana/wallet-adapter-react @solana/wallet-adapter-react-ui @solana/wallet-adapter-base @solana/wallet-adapter-wallets
    -

    Th\u01B0 vi\u1EC7n React wallet-adapter cho ph\xE9p l\u1EADp tr\xECnh vi\xEAn duy tr\xEC k\u1EBFt n\u1ED1i c\u0169ng nh\u01B0 truy c\u1EADp v\xE0o c\xE1c tr\u1EA1ng th\xE1i c\u1EE7a v\xED th\xF4ng qua Hook v\xE0 Context Provider nh\u01B0 useWallet, WalletProvider, useConnection, v\xE0 ConnectionProvider. \u1EE8ng d\u1EE5ng React ph\u1EA3i \u0111\u01B0\u1EE3c b\u1ECDc b\u1EDFi WalletProvider v\xE0 ConnectionProvider.

    Ngo\xE0i ra, l\u1EADp tr\xECnh vi\xEAn c\u0169ng c\xF3 th\u1EC3 hi\u1EC3n th\u1ECB k\u1EBFt n\u1ED1i \u0111\u1EBFn ng\u01B0\u1EDDi d\xF9ng b\u1EB1ng c\xE1ch s\u1EED d\u1EE5ng useWalletModal \u0111\u1EC3 m\u1EDF m\u1ED9t c\u1EEDa s\u1ED5 th\xF4ng b\xE1o. L\u01B0u \xFD, b\u1EA1n c\u1EA7n ph\u1EA3i b\u1ECDc to\xE0n b\u1ED9 \u1EE9ng d\u1EE5ng b\u1EB1ng WalletModalProvider t\u1EEB th\u01B0 vi\u1EC7n @solana/wallet-adapter-react-ui. C\u1EEDa s\u1ED5 k\u1EBFt n\u1ED1i s\u1EBD x\u1EED l\xFD t\u1EA5t c\u1EA3 c\xE1c b\u01B0\u1EDBc k\u1EBFt n\u1ED1i n\xEAn ch\xFAng ta ch\u1EC9 c\u1EA7n l\u1EAFng nghe s\u1EF1 ki\u1EC7n k\u1EBFt n\u1ED1i v\xED th\xE0nh c\xF4ng. useWallet s\u1EBD tr\u1EA3 v\u1EC1 gi\xE1 tr\u1ECB kh\xE1c r\u1ED7ng l\xE0 wallet n\u1EBFu k\u1EBFt n\u1ED1i th\xE0nh c\xF4ng. Ng\u01B0\u1EE3c l\u1EA1i, n\xF3 s\u1EBD tr\u1EA3 v\u1EC1 r\u1ED7ng n\u1EBFu k\u1EBFt n\u1ED1i ch\u01B0a th\xE0nh c\xF4ng ho\u1EB7c ng\u01B0\u1EDDi d\xF9ng \u0111\xE3 ng\u1EAFt k\u1EBFt n\u1ED1i.

    `,5),ss=n("div",{class:"language-tsx ext-tsx line-numbers-mode"},[n("pre",{class:"language-tsx"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(" React"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token punctuation"},"{"),s(" useMemo"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token constant"},"FC"),n("span",{class:"token punctuation"},","),s(" PropsWithChildren "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"react"'),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token punctuation"},"]"),s(` +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_bytes"),n("span",{class:"token punctuation"},"("),s("secret_key"),n("span",{class:"token punctuation"},")"),s(` +message `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'b"The quick brown fox jumps over the lazy dog"'),s(` +signature `),n("span",{class:"token operator"},"="),s(" keypair"),n("span",{class:"token punctuation"},"."),s("sign_message"),n("span",{class:"token punctuation"},"("),s("message"),n("span",{class:"token punctuation"},")"),s(` +verify_sign `),n("span",{class:"token operator"},"="),s(" signature"),n("span",{class:"token punctuation"},"."),s("verify"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(" message"),n("span",{class:"token punctuation"},")"),s(` + +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("verify_sign"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# bool"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br")])],-1),ns=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("message "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'b"The quick brown fox jumps over the lazy dog"'),s(` +signature `),n("span",{class:"token operator"},"="),s(" keypair"),n("span",{class:"token punctuation"},"."),s("sign_message"),n("span",{class:"token punctuation"},"("),s("message"),n("span",{class:"token punctuation"},")"),s(` +verify_sign `),n("span",{class:"token operator"},"="),s(" signature"),n("span",{class:"token punctuation"},"."),s("verify"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(" message"),n("span",{class:"token punctuation"},")"),s(` + +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("verify_sign"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# bool"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br")])],-1),ss=n("h2",{id:"lam-the-nao-\u0111e-ket-noi-vi",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#lam-the-nao-\u0111e-ket-noi-vi","aria-hidden":"true"},"#"),s(" L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 k\u1EBFt n\u1ED1i v\xED")],-1),as=s("Th\u01B0 vi\u1EC7n "),ts={href:"https://github.com/solana-labs/wallet-adapter",target:"_blank",rel:"noopener noreferrer"},es=s("wallet-adapter"),os=s(" c\u1EE7a Solana s\u1EBD gi\xFAp cho vi\u1EC7c qu\u1EA3n l\xFD v\xE0 k\u1EBFt n\u1ED1i v\xED tr\u1EDF n\xEAn h\u1EBFt s\u1EE9c \u0111\u01A1n gi\u1EA3n."),cs=u(`

    React

    Ch\u1EA1y \u0111o\u1EA1n m\xE3 b\xEAn d\u01B0\u1EDBi \u0111\u1EC3 c\xE0i \u0111\u1EB7t c\xE1c th\u01B0 vi\u1EC7n c\u1EA7n thi\u1EBFt:

    yarn add @solana/wallet-adapter-react @solana/wallet-adapter-react-ui @solana/wallet-adapter-base @solana/wallet-adapter-wallets
    +

    Th\u01B0 vi\u1EC7n React wallet-adapter cho ph\xE9p l\u1EADp tr\xECnh vi\xEAn duy tr\xEC k\u1EBFt n\u1ED1i c\u0169ng nh\u01B0 truy c\u1EADp v\xE0o c\xE1c tr\u1EA1ng th\xE1i c\u1EE7a v\xED th\xF4ng qua Hook v\xE0 Context Provider nh\u01B0 useWallet, WalletProvider, useConnection, v\xE0 ConnectionProvider. \u1EE8ng d\u1EE5ng React ph\u1EA3i \u0111\u01B0\u1EE3c b\u1ECDc b\u1EDFi WalletProvider v\xE0 ConnectionProvider.

    Ngo\xE0i ra, l\u1EADp tr\xECnh vi\xEAn c\u0169ng c\xF3 th\u1EC3 hi\u1EC3n th\u1ECB k\u1EBFt n\u1ED1i \u0111\u1EBFn ng\u01B0\u1EDDi d\xF9ng b\u1EB1ng c\xE1ch s\u1EED d\u1EE5ng useWalletModal \u0111\u1EC3 m\u1EDF m\u1ED9t c\u1EEDa s\u1ED5 th\xF4ng b\xE1o. L\u01B0u \xFD, b\u1EA1n c\u1EA7n ph\u1EA3i b\u1ECDc to\xE0n b\u1ED9 \u1EE9ng d\u1EE5ng b\u1EB1ng WalletModalProvider t\u1EEB th\u01B0 vi\u1EC7n @solana/wallet-adapter-react-ui. C\u1EEDa s\u1ED5 k\u1EBFt n\u1ED1i s\u1EBD x\u1EED l\xFD t\u1EA5t c\u1EA3 c\xE1c b\u01B0\u1EDBc k\u1EBFt n\u1ED1i n\xEAn ch\xFAng ta ch\u1EC9 c\u1EA7n l\u1EAFng nghe s\u1EF1 ki\u1EC7n k\u1EBFt n\u1ED1i v\xED th\xE0nh c\xF4ng. useWallet s\u1EBD tr\u1EA3 v\u1EC1 gi\xE1 tr\u1ECB kh\xE1c r\u1ED7ng l\xE0 wallet n\u1EBFu k\u1EBFt n\u1ED1i th\xE0nh c\xF4ng. Ng\u01B0\u1EE3c l\u1EA1i, n\xF3 s\u1EBD tr\u1EA3 v\u1EC1 r\u1ED7ng n\u1EBFu k\u1EBFt n\u1ED1i ch\u01B0a th\xE0nh c\xF4ng ho\u1EB7c ng\u01B0\u1EDDi d\xF9ng \u0111\xE3 ng\u1EAFt k\u1EBFt n\u1ED1i.

    `,5),ps=n("div",{class:"language-tsx ext-tsx line-numbers-mode"},[n("pre",{class:"language-tsx"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(" React"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token punctuation"},"{"),s(" useMemo"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token constant"},"FC"),n("span",{class:"token punctuation"},","),s(" PropsWithChildren "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"react"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` ConnectionProvider`),n("span",{class:"token punctuation"},","),s(` WalletProvider`),n("span",{class:"token punctuation"},","),s(` @@ -460,7 +514,7 @@ verify_sign `),n("span",{class:"token operator"},"="),s(" VerifyKey"),n("span",{ `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br"),n("span",{class:"line-number"},"69"),n("br"),n("span",{class:"line-number"},"70"),n("br"),n("span",{class:"line-number"},"71"),n("br"),n("span",{class:"line-number"},"72"),n("br"),n("span",{class:"line-number"},"73"),n("br"),n("span",{class:"line-number"},"74"),n("br"),n("span",{class:"line-number"},"75"),n("br"),n("span",{class:"line-number"},"76"),n("br"),n("span",{class:"line-number"},"77"),n("br"),n("span",{class:"line-number"},"78"),n("br"),n("span",{class:"line-number"},"79"),n("br"),n("span",{class:"line-number"},"80"),n("br"),n("span",{class:"line-number"},"81"),n("br"),n("span",{class:"line-number"},"82"),n("br")])],-1),as=n("div",{class:"language-tsx ext-tsx line-numbers-mode"},[n("pre",{class:"language-tsx"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token punctuation"},"{"),s(" wallet "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"useWallet"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br"),n("span",{class:"line-number"},"69"),n("br"),n("span",{class:"line-number"},"70"),n("br"),n("span",{class:"line-number"},"71"),n("br"),n("span",{class:"line-number"},"72"),n("br"),n("span",{class:"line-number"},"73"),n("br"),n("span",{class:"line-number"},"74"),n("br"),n("span",{class:"line-number"},"75"),n("br"),n("span",{class:"line-number"},"76"),n("br"),n("span",{class:"line-number"},"77"),n("br"),n("span",{class:"line-number"},"78"),n("br"),n("span",{class:"line-number"},"79"),n("br"),n("span",{class:"line-number"},"80"),n("br"),n("span",{class:"line-number"},"81"),n("br"),n("span",{class:"line-number"},"82"),n("br")])],-1),us=n("div",{class:"language-tsx ext-tsx line-numbers-mode"},[n("pre",{class:"language-tsx"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token punctuation"},"{"),s(" wallet "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"useWallet"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token punctuation"},"{"),s(" setVisible "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"useWalletModal"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token function-variable function"},"onRequestConnectWallet"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -479,8 +533,8 @@ verify_sign `),n("span",{class:"token operator"},"="),s(" VerifyKey"),n("span",{ `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("p")]),n("span",{class:"token punctuation"},">")]),n("span",{class:"token punctuation"},"{"),s("wallet"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),n("span",{class:"token plain-text"},` `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br")])],-1),ts=l(`

    Vue

    Ch\u1EA1y \u0111o\u1EA1n m\xE3 sau \u0111\xE2y \u0111\u1EC3 c\xE0i c\xE1c th\u01B0 vi\u1EC7n c\u1EA7n thi\u1EBFt:

    npm install solana-wallets-vue @solana/wallet-adapter-wallets
    -
    `,3),es=s("Plugin "),os={href:"https://github.com/lorisleiva/solana-wallets-vue",target:"_blank",rel:"noopener noreferrer"},cs=s("Solana Wallets Vue"),ps=s(" cho ph\xE9p ch\xFAng ta kh\u1EDFi t\u1EA1o m\u1ED9t v\xF9ng nh\u1EDB cho v\xED v\xE0 t\u1EA1o m\u1ED9t thu\u1ED9c t\xEDnh "),ls=n("code",null,"$wallet",-1),us=s(" m\u1EDBi v\u1EDBi ph\u1EA1m vi to\xE0n c\u1EE5c. Thu\u1ED9c t\xEDnh n\xE0y c\xF3 th\u1EC3 \u0111\u01B0\u1EE3c truy c\u1EADp \u1EDF b\u1EA5t k\u1EF3 m\u1ED9t th\xE0nh ph\u1EA7n n\xE0o. T\u1EA5t c\u1EA3 c\xE1c thu\u1ED9c t\xEDnh v\xE0 ph\u01B0\u01A1ng th\u1EE9c b\u1EA1n c\xF3 th\u1EC3 l\u1EA5y t\u1EEB "),is=n("code",null,"useWallet()",-1),ks=s(" \u0111\u1EC1u \u0111\u01B0\u1EE3c tr\xECnh b\xE0y "),rs={href:"https://github.com/lorisleiva/solana-wallets-vue#usewallet-references",target:"_blank",rel:"noopener noreferrer"},bs=s("\u1EDF \u0111\xE2y"),ms=s(". Ch\xFAng ta c\u0169ng c\u1EA7n c\xE0i v\xE0 hi\u1EC3n th\u1ECB th\xE0nh ph\u1EA7n "),ds=n("code",null,"WalletMultiButton",-1),hs=s(" \u0111\u1EC3 cho ph\xE9p ng\u01B0\u1EDDi d\xF9ng c\xF3 th\u1EC3 ch\u1ECDn v\xED c\u0169ng nh\u01B0 k\u1EBFt n\u1ED1i v\xED."),gs=n("div",{class:"language-vue ext-vue line-numbers-mode"},[n("pre",{class:"language-vue"},[n("code",null,[n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("script")]),s(),n("span",{class:"token attr-name"},"setup"),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"},[n("span",{class:"token language-javascript"},[s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br")])],-1),ls=u(`

    Vue

    Ch\u1EA1y \u0111o\u1EA1n m\xE3 sau \u0111\xE2y \u0111\u1EC3 c\xE0i c\xE1c th\u01B0 vi\u1EC7n c\u1EA7n thi\u1EBFt:

    npm install solana-wallets-vue @solana/wallet-adapter-wallets
    +
    `,3),is=s("Plugin "),ks={href:"https://github.com/lorisleiva/solana-wallets-vue",target:"_blank",rel:"noopener noreferrer"},rs=s("Solana Wallets Vue"),bs=s(" cho ph\xE9p ch\xFAng ta kh\u1EDFi t\u1EA1o m\u1ED9t v\xF9ng nh\u1EDB cho v\xED v\xE0 t\u1EA1o m\u1ED9t thu\u1ED9c t\xEDnh "),ms=n("code",null,"$wallet",-1),ds=s(" m\u1EDBi v\u1EDBi ph\u1EA1m vi to\xE0n c\u1EE5c. Thu\u1ED9c t\xEDnh n\xE0y c\xF3 th\u1EC3 \u0111\u01B0\u1EE3c truy c\u1EADp \u1EDF b\u1EA5t k\u1EF3 m\u1ED9t th\xE0nh ph\u1EA7n n\xE0o. T\u1EA5t c\u1EA3 c\xE1c thu\u1ED9c t\xEDnh v\xE0 ph\u01B0\u01A1ng th\u1EE9c b\u1EA1n c\xF3 th\u1EC3 l\u1EA5y t\u1EEB "),hs=n("code",null,"useWallet()",-1),gs=s(" \u0111\u1EC1u \u0111\u01B0\u1EE3c tr\xECnh b\xE0y "),ys={href:"https://github.com/lorisleiva/solana-wallets-vue#usewallet-references",target:"_blank",rel:"noopener noreferrer"},ws=s("\u1EDF \u0111\xE2y"),vs=s(". Ch\xFAng ta c\u0169ng c\u1EA7n c\xE0i v\xE0 hi\u1EC3n th\u1ECB th\xE0nh ph\u1EA7n "),_s=n("code",null,"WalletMultiButton",-1),fs=s(" \u0111\u1EC3 cho ph\xE9p ng\u01B0\u1EDDi d\xF9ng c\xF3 th\u1EC3 ch\u1ECDn v\xED c\u0169ng nh\u01B0 k\u1EBFt n\u1ED1i v\xED."),xs=n("div",{class:"language-vue ext-vue line-numbers-mode"},[n("pre",{class:"language-vue"},[n("code",null,[n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("script")]),s(),n("span",{class:"token attr-name"},"setup"),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"},[n("span",{class:"token language-javascript"},[s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" WalletMultiButton "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"solana-wallets-vue"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` LedgerWalletAdapter`),n("span",{class:"token punctuation"},","),s(` @@ -513,15 +567,15 @@ verify_sign `),n("span",{class:"token operator"},"="),s(" VerifyKey"),n("span",{ `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br")])],-1),ys=n("div",{class:"language-vue ext-vue line-numbers-mode"},[n("pre",{class:"language-vue"},[n("code",null,[n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("script")]),s(),n("span",{class:"token attr-name"},"setup"),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"},[n("span",{class:"token language-javascript"},[s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br")])],-1),Ks=n("div",{class:"language-vue ext-vue line-numbers-mode"},[n("pre",{class:"language-vue"},[n("code",null,[n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("script")]),s(),n("span",{class:"token attr-name"},"setup"),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"},[n("span",{class:"token language-javascript"},[s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" WalletMultiButton "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"solana-wallets-vue"'),n("span",{class:"token punctuation"},";"),s(` `)])]),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("template")]),n("span",{class:"token punctuation"},">")]),s(` `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("wallet-multi-button")]),n("span",{class:"token punctuation"},">")]),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),ws=l(`

    Svelte

    Ch\u1EA1y \u0111o\u1EA1n m\xE3 sau \u0111\xE2y \u0111\u1EC3 c\xE0i c\xE1c th\u01B0 vi\u1EC7n c\u1EA7n thi\u1EBFt:

    npm install @svelte-on-solana/wallet-adapter-core @svelte-on-solana/wallet-adapter-ui @solana/wallet-adapter-base @solana/wallet-adapter-wallets @solana/web3.js
    -
    `,3),vs=s("G\xF3i "),_s={href:"https://github.com/svelte-on-solana/wallet-adapter",target:"_blank",rel:"noopener noreferrer"},fs=s("Svelte Wallet Adapter"),xs=s(" cho ph\xE9p th\xEAm m\u1ED9t Svelte Store ("),Ks=n("code",null,"$walletStore",-1),Ps=s(") c\xF3 kh\u1EA3 n\u0103ng truy xu\u1EA5t t\u1EEB c\xE1c t\u1EADp tin JS, TS or/and Svelte b\xEAn trong d\u1EF1 \xE1n \u0111\u01B0\u1EE3c t\u1EA1o t\u1EEB Svelte Template ho\u1EB7c SvelteKit. S\u1EED d\u1EE5ng m\xE3 ngu\u1ED3n tham kh\u1EA3o "),Ws={href:"https://github.com/svelte-on-solana/wallet-adapter/blob/master/packages/core/README.md/",target:"_blank",rel:"noopener noreferrer"},Ss=s("t\u1EA1i \u0111\xE2y"),Cs=s(" b\u1EA1n c\xF3 th\u1EC3 s\u1EED d\u1EE5ng b\u1ED9 ti\u1EBFp h\u1EE3p cho SSR v\xE0 c\u1EA3 SPA. G\xF3i giao di\u1EC7n ng\u01B0\u1EDDi d\xF9ng c\xF3 ch\u1EE9a m\u1ED9t th\xE0nh ph\u1EA7n l\xE0 "),As=n("code",null,"",-1),Ts=s(", n\xF3 cho ph\xE9p ng\u01B0\u1EDDi d\xF9ng c\xF3 th\u1EC3 ch\u1ECDn v\xE0 t\u1EA1o k\u1EBFt n\u1ED1i \u0111\u1EBFn v\xED."),js=n("div",{class:"language-html ext-html line-numbers-mode"},[n("pre",{class:"language-html"},[n("code",null,[n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("script")]),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"},[n("span",{class:"token language-javascript"},[s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),Ps=u(`

    Svelte

    Ch\u1EA1y \u0111o\u1EA1n m\xE3 sau \u0111\xE2y \u0111\u1EC3 c\xE0i c\xE1c th\u01B0 vi\u1EC7n c\u1EA7n thi\u1EBFt:

    npm install @svelte-on-solana/wallet-adapter-core @svelte-on-solana/wallet-adapter-ui @solana/wallet-adapter-base @solana/wallet-adapter-wallets @solana/web3.js
    +
    `,3),Ws=s("G\xF3i "),Cs={href:"https://github.com/svelte-on-solana/wallet-adapter",target:"_blank",rel:"noopener noreferrer"},Ss=s("Svelte Wallet Adapter"),As=s(" cho ph\xE9p th\xEAm m\u1ED9t Svelte Store ("),Ts=n("code",null,"$walletStore",-1),js=s(") c\xF3 kh\u1EA3 n\u0103ng truy xu\u1EA5t t\u1EEB c\xE1c t\u1EADp tin JS, TS or/and Svelte b\xEAn trong d\u1EF1 \xE1n \u0111\u01B0\u1EE3c t\u1EA1o t\u1EEB Svelte Template ho\u1EB7c SvelteKit. S\u1EED d\u1EE5ng m\xE3 ngu\u1ED3n tham kh\u1EA3o "),Ns={href:"https://github.com/svelte-on-solana/wallet-adapter/blob/master/packages/core/README.md/",target:"_blank",rel:"noopener noreferrer"},Bs=s("t\u1EA1i \u0111\xE2y"),Rs=s(" b\u1EA1n c\xF3 th\u1EC3 s\u1EED d\u1EE5ng b\u1ED9 ti\u1EBFp h\u1EE3p cho SSR v\xE0 c\u1EA3 SPA. G\xF3i giao di\u1EC7n ng\u01B0\u1EDDi d\xF9ng c\xF3 ch\u1EE9a m\u1ED9t th\xE0nh ph\u1EA7n l\xE0 "),Ms=n("code",null,"",-1),Ds=s(", n\xF3 cho ph\xE9p ng\u01B0\u1EDDi d\xF9ng c\xF3 th\u1EC3 ch\u1ECDn v\xE0 t\u1EA1o k\u1EBFt n\u1ED1i \u0111\u1EBFn v\xED."),zs=n("div",{class:"language-html ext-html line-numbers-mode"},[n("pre",{class:"language-html"},[n("code",null,[n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("script")]),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"},[n("span",{class:"token language-javascript"},[s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" walletStore "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@svelte-on-solana/wallet-adapter-core"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` WalletProvider`),n("span",{class:"token punctuation"},","),s(` @@ -554,7 +608,7 @@ verify_sign `),n("span",{class:"token operator"},"="),s(" VerifyKey"),n("span",{ successfully connected! {:else} `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("WalletMultiButton")]),s(),n("span",{class:"token punctuation"},"/>")]),s(` {/if} -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br")])],-1),Bs=n("div",{class:"language-html ext-html line-numbers-mode"},[n("pre",{class:"language-html"},[n("code",null,[n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("script")]),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"},[n("span",{class:"token language-javascript"},[s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br")])],-1),Es=n("div",{class:"language-html ext-html line-numbers-mode"},[n("pre",{class:"language-html"},[n("code",null,[n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("script")]),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"},[n("span",{class:"token language-javascript"},[s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" walletStore "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@svelte-on-solana/wallet-adapter-core"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" WalletMultiButton "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@svelte-on-solana/wallet-adapter-ui"'),n("span",{class:"token punctuation"},";"),s(` `)])]),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` @@ -563,4 +617,4 @@ successfully connected! {:else} successfully connected! {:else} `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("WalletMultiButton")]),s(),n("span",{class:"token punctuation"},"/>")]),s(` {/if} -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br")])],-1);function Ns(Ms,Rs){const e=p("SolanaCodeGroupItem"),o=p("SolanaCodeGroup"),c=p("ExternalLinkIcon");return i(),k(r,null,[m,d,h,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[g]),preview:a(()=>[y]),_:1}),t(e,{title:"Python"},{default:a(()=>[w]),preview:a(()=>[v]),_:1}),t(e,{title:"Rust"},{default:a(()=>[_]),preview:a(()=>[f]),_:1}),t(e,{title:"CLI"},{default:a(()=>[x]),preview:a(()=>[K]),_:1})]),_:1}),P,W,S,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[C]),preview:a(()=>[A]),_:1}),t(e,{title:"Python"},{default:a(()=>[T]),preview:a(()=>[j]),_:1}),t(e,{title:"Rust"},{default:a(()=>[B]),preview:a(()=>[N]),_:1}),t(e,{title:"CLI"},{default:a(()=>[M]),preview:a(()=>[R]),_:1})]),_:1}),D,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[z]),preview:a(()=>[E]),_:1}),t(e,{title:"Python"},{default:a(()=>[L]),preview:a(()=>[V]),_:1}),t(e,{title:"Rust"},{default:a(()=>[U]),preview:a(()=>[J]),_:1})]),_:1}),H,q,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Y]),preview:a(()=>[F]),_:1}),t(e,{title:"Python"},{default:a(()=>[I]),preview:a(()=>[X]),_:1}),t(e,{title:"CLI"},{default:a(()=>[G]),preview:a(()=>[Z]),_:1})]),_:1}),$,Q,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[O]),preview:a(()=>[nn]),_:1}),t(e,{title:"Python",active:""},{default:a(()=>[sn]),preview:a(()=>[an]),_:1}),t(e,{title:"Rust",active:""},{default:a(()=>[tn]),preview:a(()=>[en]),_:1})]),_:1}),on,cn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[pn]),preview:a(()=>[ln]),_:1}),t(e,{title:"Python"},{default:a(()=>[un]),preview:a(()=>[kn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[rn]),preview:a(()=>[bn]),_:1})]),_:1}),mn,dn,hn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[gn]),preview:a(()=>[yn]),_:1}),t(e,{title:"Python"},{default:a(()=>[wn]),preview:a(()=>[vn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[_n]),preview:a(()=>[fn]),_:1})]),_:1}),xn,Kn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Pn]),preview:a(()=>[Wn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[Sn]),preview:a(()=>[Cn]),_:1})]),_:1}),An,Tn,jn,Bn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Nn]),preview:a(()=>[Mn]),_:1}),t(e,{title:"Python"},{default:a(()=>[Rn]),preview:a(()=>[Dn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[zn]),preview:a(()=>[En]),_:1})]),_:1}),Ln,Vn,n("p",null,[Un,n("a",Jn,[Hn,t(c)]),qn]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Yn]),preview:a(()=>[Fn]),_:1}),t(e,{title:"Python"},{default:a(()=>[In]),preview:a(()=>[Xn]),_:1})]),_:1}),Gn,n("p",null,[Zn,n("a",$n,[Qn,t(c)]),On]),ns,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[ss]),preview:a(()=>[as]),_:1})]),_:1}),ts,n("p",null,[es,n("a",os,[cs,t(c)]),ps,ls,us,is,ks,n("a",rs,[bs,t(c)]),ms,ds,hs]),t(o,null,{default:a(()=>[t(e,{title:"Vue",active:""},{default:a(()=>[gs]),preview:a(()=>[ys]),_:1})]),_:1}),ws,n("p",null,[vs,n("a",_s,[fs,t(c)]),xs,Ks,Ps,n("a",Ws,[Ss,t(c)]),Cs,As,Ts]),t(o,null,{default:a(()=>[t(e,{title:"Svelte",active:""},{default:a(()=>[js]),preview:a(()=>[Bs]),_:1})]),_:1})],64)}var zs=u(b,[["render",Ns]]);export{zs as default}; +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br")])],-1);function Ls(Us,Vs){const e=p("SolanaCodeGroupItem"),o=p("SolanaCodeGroup"),c=p("ExternalLinkIcon");return i(),k(r,null,[m,d,h,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[g]),preview:a(()=>[y]),_:1}),t(e,{title:"Python"},{default:a(()=>[w]),preview:a(()=>[v]),_:1}),t(e,{title:"Rust"},{default:a(()=>[_]),preview:a(()=>[f]),_:1}),t(e,{title:"CLI"},{default:a(()=>[x]),preview:a(()=>[K]),_:1})]),_:1}),P,W,C,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[S]),preview:a(()=>[A]),_:1}),t(e,{title:"Python"},{default:a(()=>[T]),preview:a(()=>[j]),_:1}),t(e,{title:"C++"},{default:a(()=>[N]),preview:a(()=>[B]),_:1}),t(e,{title:"Rust"},{default:a(()=>[R]),preview:a(()=>[M]),_:1}),t(e,{title:"CLI"},{default:a(()=>[D]),preview:a(()=>[z]),_:1})]),_:1}),E,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[L]),preview:a(()=>[U]),_:1}),t(e,{title:"Python"},{default:a(()=>[V]),preview:a(()=>[H]),_:1}),t(e,{title:"Rust"},{default:a(()=>[J]),preview:a(()=>[q]),_:1})]),_:1}),Y,F,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[I]),preview:a(()=>[X]),_:1}),t(e,{title:"Python"},{default:a(()=>[Z]),preview:a(()=>[G]),_:1}),t(e,{title:"C++"},{default:a(()=>[$]),preview:a(()=>[Q]),_:1}),t(e,{title:"CLI"},{default:a(()=>[O]),preview:a(()=>[nn]),_:1})]),_:1}),sn,an,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[tn]),preview:a(()=>[en]),_:1}),t(e,{title:"Python",active:""},{default:a(()=>[on]),preview:a(()=>[cn]),_:1}),t(e,{title:"Rust",active:""},{default:a(()=>[pn]),preview:a(()=>[un]),_:1})]),_:1}),ln,kn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[rn]),preview:a(()=>[bn]),_:1}),t(e,{title:"Python"},{default:a(()=>[mn]),preview:a(()=>[dn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[hn]),preview:a(()=>[gn]),_:1})]),_:1}),yn,wn,vn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[_n]),preview:a(()=>[fn]),_:1}),t(e,{title:"Python"},{default:a(()=>[xn]),preview:a(()=>[Kn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[Pn]),preview:a(()=>[Wn]),_:1})]),_:1}),Cn,Sn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[An]),preview:a(()=>[Tn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[jn]),preview:a(()=>[Nn]),_:1})]),_:1}),Bn,Rn,Mn,Dn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[zn]),preview:a(()=>[En]),_:1}),t(e,{title:"Python"},{default:a(()=>[Ln]),preview:a(()=>[Un]),_:1}),t(e,{title:"C++"},{default:a(()=>[Vn]),preview:a(()=>[Hn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[Jn]),preview:a(()=>[qn]),_:1})]),_:1}),Yn,Fn,n("p",null,[In,n("a",Xn,[Zn,t(c)]),Gn]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[$n]),preview:a(()=>[Qn]),_:1}),t(e,{title:"Python"},{default:a(()=>[On]),preview:a(()=>[ns]),_:1})]),_:1}),ss,n("p",null,[as,n("a",ts,[es,t(c)]),os]),cs,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[ps]),preview:a(()=>[us]),_:1})]),_:1}),ls,n("p",null,[is,n("a",ks,[rs,t(c)]),bs,ms,ds,hs,gs,n("a",ys,[ws,t(c)]),vs,_s,fs]),t(o,null,{default:a(()=>[t(e,{title:"Vue",active:""},{default:a(()=>[xs]),preview:a(()=>[Ks]),_:1})]),_:1}),Ps,n("p",null,[Ws,n("a",Cs,[Ss,t(c)]),As,Ts,js,n("a",Ns,[Bs,t(c)]),Rs,Ms,Ds]),t(o,null,{default:a(()=>[t(e,{title:"Svelte",active:""},{default:a(()=>[zs]),preview:a(()=>[Es]),_:1})]),_:1})],64)}var Js=l(b,[["render",Ls]]);export{Js as default}; diff --git a/docs/.vuepress/dist/assets/keypairs-and-wallets.html.4fbbb166.js b/docs/.vuepress/dist/assets/keypairs-and-wallets.html.ec5ebd4d.js similarity index 74% rename from docs/.vuepress/dist/assets/keypairs-and-wallets.html.4fbbb166.js rename to docs/.vuepress/dist/assets/keypairs-and-wallets.html.ec5ebd4d.js index c5b48610f..eb0ddd4c2 100644 --- a/docs/.vuepress/dist/assets/keypairs-and-wallets.html.4fbbb166.js +++ b/docs/.vuepress/dist/assets/keypairs-and-wallets.html.ec5ebd4d.js @@ -1,24 +1,39 @@ -import{_ as u,r as p,o as i,c as k,b as t,w as a,a as n,F as r,d as s,e as l}from"./app.cfdf84e7.js";const b={},m=n("h1",{id:"keypairs-wallets",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#keypairs-wallets","aria-hidden":"true"},"#"),s(" Keypairs & Wallets")],-1),d=n("h2",{id:"bagaimana-cara-membuat-sebuah-keypair-baru",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#bagaimana-cara-membuat-sebuah-keypair-baru","aria-hidden":"true"},"#"),s(" Bagaimana cara membuat sebuah Keypair baru")],-1),y=n("p",null,"Banyak action-action yang dapat anda ambil dari beragam Solana libaries memerlukan sebuah Keypair atau Wallet. Jika anda terhubung dengan sebuah wallet, anda tidak perlu khawatir. Namun, jika anda memerlukan sebuah keypair, and perlu meng-generatenya.",-1),g=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +import{_ as l,r as p,o as i,c as k,b as t,w as a,a as n,F as r,d as s,e as u}from"./app.2fbb9e96.js";const b={},m=n("h1",{id:"keypairs-wallets",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#keypairs-wallets","aria-hidden":"true"},"#"),s(" Keypairs & Wallets")],-1),d=n("h2",{id:"bagaimana-cara-membuat-sebuah-keypair-baru",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#bagaimana-cara-membuat-sebuah-keypair-baru","aria-hidden":"true"},"#"),s(" Bagaimana cara membuat sebuah Keypair baru")],-1),y=n("p",null,"Banyak action-action yang dapat anda ambil dari beragam Solana libaries memerlukan sebuah Keypair atau Wallet. Jika anda terhubung dengan sebuah wallet, anda tidak perlu khawatir. Namun, jika anda memerlukan sebuah keypair, and perlu meng-generatenya.",-1),g=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"let"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br")])],-1),h=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),w=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),w=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),_=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),v=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("signature"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),v=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token comment"},"// clang++ generate_keypair.cpp -o generate_keypair -std=c++17 -lssl -lcrypto -lsodium"),s(` + +`),n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + `),n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"auto"),s(" public_key "),n("span",{class:"token operator"},"="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"public_key = "'),s(),n("span",{class:"token operator"},"<<"),s(" public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"return"),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br")])],-1),f=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),x=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("signature"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"let"),s(" wallet "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br")])],-1),f=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" wallet "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),x=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s(`$ solana-keygen new +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br")])],-1),K=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" wallet "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),P=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s(`$ solana-keygen new `),n("span",{class:"token comment"},"# pubkey: 9ZNTfG4NyQgxy2SWjSiQoUyBPEvXT2xo7fKc5hPYYJ7b"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),K=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen new -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),P=n("h2",{id:"bagaimana-cara-me-restore-sebuah-keypair-dari-sebuah-secret",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#bagaimana-cara-me-restore-sebuah-keypair-dari-sebuah-secret","aria-hidden":"true"},"#"),s(" Bagaimana cara me-restore sebuah Keypair dari sebuah secret")],-1),S=n("p",null,"Jika anda sudah mempunyai sebuah secret, anda dapat mendapatkan Keypair dari sebuah secret untuk mentest dApp anda.",-1),W=n("ol",null,[n("li",null,"Dari Bytes")],-1),A=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),W=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen new +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),S=n("h2",{id:"bagaimana-cara-me-restore-sebuah-keypair-dari-sebuah-secret",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#bagaimana-cara-me-restore-sebuah-keypair-dari-sebuah-secret","aria-hidden":"true"},"#"),s(" Bagaimana cara me-restore sebuah Keypair dari sebuah secret")],-1),j=n("p",null,"Jika anda sudah mempunyai sebuah secret, anda dapat mendapatkan Keypair dari sebuah secret untuk mentest dApp anda.",-1),A=n("ol",null,[n("li",null,"Dari Bytes")],-1),C=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSecretKey"),n("span",{class:"token punctuation"},"("),s(` @@ -30,7 +45,7 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br")])],-1),j=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSecretKey"),n("span",{class:"token punctuation"},"("),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br")])],-1),T=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSecretKey"),n("span",{class:"token punctuation"},"("),s(` Uint8Array`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"["),s(` `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"189"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"224"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"216"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"117"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"173"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"149"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"45"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"73"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"237"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"246"),n("span",{class:"token punctuation"},","),s(` @@ -38,7 +53,7 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),C=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),B=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair secret_key`),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"["),s(` `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(` @@ -47,17 +62,40 @@ secret_key`),n("span",{class:"token operator"},"="),s(),n("span",{class:"token p `),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"]"),s(` -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"bytes"),n("span",{class:"token punctuation"},"("),s("secret_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created Keypair with Public Key: {}"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),B=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("secret_key"),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"["),s(` +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_bytes"),n("span",{class:"token punctuation"},"("),s("secret_key"),n("span",{class:"token punctuation"},")"),s(` +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created Keypair with Public Key: {}"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),D=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("secret_key"),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"["),s(` `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"189"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"224"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"216"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"117"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"173"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"149"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"45"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"73"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"237"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"246"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"15"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"185"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"186"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"82"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"177"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"]"),s(` -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"bytes"),n("span",{class:"token punctuation"},"("),s("secret_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),T=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("signature"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"Signer"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_bytes"),n("span",{class:"token punctuation"},"("),s("secret_key"),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),R=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token comment"},"// clang++ keypair_from_seed.cpp -o keypair_from_seed -std=c++17 -lssl -lcrypto -lsodium"),s(` + +`),n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + `),n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token keyword"},"uint8_t"),s(" bytes"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},"]"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"{"),s(` + `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(` + `),n("span",{class:"token number"},"189"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"224"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"216"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"117"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"173"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"149"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"45"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"73"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"237"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"246"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"15"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"185"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"186"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"82"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"177"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(` + `),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(` + `),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` + `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` + Keypair key_pair `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"from_seed"),n("span",{class:"token punctuation"},"("),s("bytes"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"Created Keypair with Public Key: "'),s(),n("span",{class:"token operator"},"<<"),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br")])],-1),z=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token keyword"},"uint8_t"),s(" secret_key"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},"]"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"{"),s(` +`),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(` +`),n("span",{class:"token number"},"189"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"224"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"216"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"117"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"173"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"149"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"45"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"73"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"237"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"246"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"15"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"185"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"186"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"82"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"177"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(` +`),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(` +`),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` +`),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` +Keypair key_pair `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"from_seed"),n("span",{class:"token punctuation"},"("),s("secret_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),M=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("signature"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"Signer"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"let"),s(" secret_key"),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token punctuation"},"["),n("span",{class:"token keyword"},"u8"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token number"},"64"),n("span",{class:"token punctuation"},"]"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"["),s(` @@ -72,7 +110,7 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token macro property"},"println!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created keypair: {}"'),n("span",{class:"token punctuation"},","),s(" pubkey"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br")])],-1),R=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" secret_key"),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token punctuation"},"["),n("span",{class:"token keyword"},"u8"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token number"},"64"),n("span",{class:"token punctuation"},"]"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"["),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br")])],-1),N=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" secret_key"),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token punctuation"},"["),n("span",{class:"token keyword"},"u8"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token number"},"64"),n("span",{class:"token punctuation"},"]"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"["),s(` `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"189"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"224"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"216"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"117"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"173"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"149"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"45"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"73"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"237"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"246"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"15"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"185"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"186"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"82"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"177"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(` @@ -80,9 +118,9 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"let"),s(" wallet "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from_bytes"),n("span",{class:"token punctuation"},"("),n("span",{class:"token operator"},"&"),s("secret_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),D=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# input your secret into the Keypath listed under solana config get"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),M=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# input your secret into the Keypath listed under solana config get"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),z=n("ol",{start:"2"},[n("li",null,"Dari Base58 String")],-1),N=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),E=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# input your secret into the Keypath listed under solana config get"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),J=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# input your secret into the Keypath listed under solana config get"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),U=n("ol",{start:"2"},[n("li",null,"Dari Base58 String")],-1),H=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" bs58 "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"bs58"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -92,20 +130,19 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),E=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSecretKey"),n("span",{class:"token punctuation"},"("),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),V=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSecretKey"),n("span",{class:"token punctuation"},"("),s(` bs58`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"decode"),n("span",{class:"token punctuation"},"("),s(` `),n("span",{class:"token string"},'"5MaiiCavjCmn9Hs1o3eznqDEhRwxo7pXiAYez7keQUviUkauRiTMD8DrESdrNjN8zd9mTmVhRvBJeg5vhyvgrAhG"'),s(` `),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br")])],-1),J=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(` base58 -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br")])],-1),Y=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair b58_string `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"5MaiiCavjCmn9Hs1o3eznqDEhRwxo7pXiAYez7keQUviUkauRiTMD8DrESdrNjN8zd9mTmVhRvBJeg5vhyvgrAhG"'),s(` -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),s("base58"),n("span",{class:"token punctuation"},"."),s("b58decode"),n("span",{class:"token punctuation"},"("),s("b58_string"),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created Keypair with Public Key: {}"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),U=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("b58_string "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"5MaiiCavjCmn9Hs1o3eznqDEhRwxo7pXiAYez7keQUviUkauRiTMD8DrESdrNjN8zd9mTmVhRvBJeg5vhyvgrAhG"'),s(` -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),s("base58"),n("span",{class:"token punctuation"},"."),s("b58decode"),n("span",{class:"token punctuation"},"("),s("b58_string"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),V=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("signature"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"Signer"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_string"),n("span",{class:"token punctuation"},"("),s("b58_string"),n("span",{class:"token punctuation"},")"),s(` +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created Keypair with Public Key: {}"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br")])],-1),L=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("b58_string "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"5MaiiCavjCmn9Hs1o3eznqDEhRwxo7pXiAYez7keQUviUkauRiTMD8DrESdrNjN8zd9mTmVhRvBJeg5vhyvgrAhG"'),s(` +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_string"),n("span",{class:"token punctuation"},"("),s("b58_string"),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),q=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("signature"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"Signer"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"let"),s(" wallet "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from_base58_string"),n("span",{class:"token punctuation"},"("),s(` @@ -114,10 +151,10 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token keyword"},"let"),s(" pubkey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Signer"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token operator"},"&"),s("wallet"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token macro property"},"println!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created keypair: {}"'),n("span",{class:"token punctuation"},","),s(" pubkey"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br")])],-1),H=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" wallet "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from_base58_string"),n("span",{class:"token punctuation"},"("),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br")])],-1),F=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" wallet "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from_base58_string"),n("span",{class:"token punctuation"},"("),s(` `),n("span",{class:"token string"},'"5MaiiCavjCmn9Hs1o3eznqDEhRwxo7pXiAYez7keQUviUkauRiTMD8DrESdrNjN8zd9mTmVhRvBJeg5vhyvgrAhG"'),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),Y=n("h2",{id:"bagaimana-cara-menverifikasi-sebuah-keypair",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#bagaimana-cara-menverifikasi-sebuah-keypair","aria-hidden":"true"},"#"),s(" Bagaimana cara menverifikasi sebuah Keypair")],-1),L=n("p",null,"Jika anda diberikan sebuah keypair, anda dapat menverifikasi apakah secret sesuai dengan public key yang diberikan.",-1),q=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),I=n("h2",{id:"bagaimana-cara-menverifikasi-sebuah-keypair",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#bagaimana-cara-menverifikasi-sebuah-keypair","aria-hidden":"true"},"#"),s(" Bagaimana cara menverifikasi sebuah Keypair")],-1),X=n("p",null,"Jika anda diberikan sebuah keypair, anda dapat menverifikasi apakah secret sesuai dengan public key yang diberikan.",-1),Z=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"const"),s(" publicKey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),s(` @@ -134,7 +171,7 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"==="),s(" publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token comment"},"// true"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br")])],-1),F=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" publicKey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br")])],-1),$=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" publicKey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSecretKey"),n("span",{class:"token punctuation"},"("),s(` Uint8Array`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"["),s(` `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(` @@ -145,10 +182,10 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"==="),s(" publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token comment"},"// true"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),I=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("publickey "),n("span",{class:"token keyword"},"import"),s(` PublicKey +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),G=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("pubkey "),n("span",{class:"token keyword"},"import"),s(` Pubkey -public_key `),n("span",{class:"token operator"},"="),s(" PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p"'),n("span",{class:"token punctuation"},")"),s(` +public_key `),n("span",{class:"token operator"},"="),s(" Pubkey"),n("span",{class:"token punctuation"},"."),s("from_string"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p"'),n("span",{class:"token punctuation"},")"),s(` keys `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"["),s(` `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(` @@ -156,11 +193,11 @@ keys `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctu `),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"]"),s(` -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"bytes"),n("span",{class:"token punctuation"},"("),s("keys"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_bytes"),n("span",{class:"token punctuation"},"("),s("keys"),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},"."),s("to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=="),s(" public_key"),n("span",{class:"token punctuation"},"."),s("to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=="),s(" public_key"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"# True"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br")])],-1),X=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("public_key "),n("span",{class:"token operator"},"="),s(" PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p"'),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br")])],-1),Q=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("public_key "),n("span",{class:"token operator"},"="),s(" Pubkey"),n("span",{class:"token punctuation"},"."),s("from_string"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p"'),n("span",{class:"token punctuation"},")"),s(` keys `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"["),s(` `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(` @@ -168,13 +205,44 @@ keys `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctu `),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"]"),s(` -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"bytes"),n("span",{class:"token punctuation"},"("),s("keys"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_bytes"),n("span",{class:"token punctuation"},"("),s("keys"),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},"."),s("to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=="),s(" public_key"),n("span",{class:"token punctuation"},"."),s("to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=="),s(" public_key"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"# True"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br")])],-1),Z=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana-keygen verify "),n("span",{class:"token operator"},"<"),s("PUBKEY"),n("span",{class:"token operator"},">"),s(` prompt:// -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),$=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana-keygen verify "),n("span",{class:"token operator"},"<"),s("PUBKEY"),n("span",{class:"token operator"},">"),s(` prompt:// -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),G=n("h2",{id:"bagaimana-cara-untuk-check-jika-sebuah-public-key-telah-terhubung-dengan-sebuah-private-key",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#bagaimana-cara-untuk-check-jika-sebuah-public-key-telah-terhubung-dengan-sebuah-private-key","aria-hidden":"true"},"#"),s(" Bagaimana cara untuk check jika sebuah public key telah terhubung dengan sebuah private key")],-1),Q=n("p",null,"Dalam beberapa kasus khusus (contohnya sebuah Program Derived Address), public key mungkin tidak mempunyai sebuah private key yang terhubung. Anda dapat check hal ini dengan melihat apakah public key terdapat dalam kurva ed25519. Hanya public key yang terdapat dalam kurva yang bisa dikontrol oleh user dengan menggunakan wallet.",-1),O=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br")])],-1),O=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token comment"},"// clang++ verify_keypair.cpp -o verify_keypair -std=c++17 -lssl -lcrypto -lsodium"),s(` + +`),n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + PublicKey public_key `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token keyword"},"uint8_t"),s(" bytes"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},"]"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"{"),s(` + `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(` + `),n("span",{class:"token number"},"189"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"224"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"216"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"117"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"173"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"149"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"45"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"73"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"237"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"246"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"15"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"185"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"186"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"82"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"177"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(` + `),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(` + `),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` + `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` + Keypair key_pair `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"from_seed"),n("span",{class:"token punctuation"},"("),s("bytes"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token punctuation"},"("),s("public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br")])],-1),nn=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[s("PublicKey public_key "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token keyword"},"uint8_t"),s(" bytes"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},"]"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"{"),s(` +`),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(` +`),n("span",{class:"token number"},"189"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"224"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"216"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"117"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"173"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"149"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"45"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"73"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"237"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"246"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"15"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"185"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"186"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"82"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"177"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(` +`),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(` +`),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` +`),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` +Keypair key_pair `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"from_seed"),n("span",{class:"token punctuation"},"("),s("bytes"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + +std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token punctuation"},"("),s("public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token comment"},"// 1"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br")])],-1),sn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana-keygen verify "),n("span",{class:"token operator"},"<"),s("PUBKEY"),n("span",{class:"token operator"},">"),s(` prompt:// +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),an=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana-keygen verify "),n("span",{class:"token operator"},"<"),s("PUBKEY"),n("span",{class:"token operator"},">"),s(` prompt:// +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),tn=n("h2",{id:"bagaimana-cara-untuk-check-jika-sebuah-public-key-telah-terhubung-dengan-sebuah-private-key",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#bagaimana-cara-untuk-check-jika-sebuah-public-key-telah-terhubung-dengan-sebuah-private-key","aria-hidden":"true"},"#"),s(" Bagaimana cara untuk check jika sebuah public key telah terhubung dengan sebuah private key")],-1),en=n("p",null,"Dalam beberapa kasus khusus (contohnya sebuah Program Derived Address), public key mungkin tidak mempunyai sebuah private key yang terhubung. Anda dapat check hal ini dengan melihat apakah public key terdapat dalam kurva ed25519. Hanya public key yang terdapat dalam kurva yang bisa dikontrol oleh user dengan menggunakan wallet.",-1),on=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token keyword"},"function"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token comment"},"// Note that Keypair.generate() will always give a public key that is valid for users"),s(` @@ -188,23 +256,34 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token keyword"},"const"),s(" errorPubkey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"testPubkey"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token comment"},"// Is not a valid public key"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br")])],-1),nn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" key "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br")])],-1),cn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" key "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("PublicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"isOnCurve"),n("span",{class:"token punctuation"},"("),s("key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBytes"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),sn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("publickey "),n("span",{class:"token keyword"},"import"),s(` PublicKey -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("utils"),n("span",{class:"token punctuation"},"."),s("ed25519_base "),n("span",{class:"token keyword"},"import"),s(` is_on_curve +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),pn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("pubkey "),n("span",{class:"token keyword"},"import"),s(` Pubkey `),n("span",{class:"token comment"},"# Note that Keypair() will always give a public key that is valid for users"),s(` -key `),n("span",{class:"token operator"},"="),s(" PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},"'5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY'"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# Valid public key"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("is_on_curve"),n("span",{class:"token punctuation"},"("),s("key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# Lies on the ed25519 curve and is suitable for users"),s(` +key `),n("span",{class:"token operator"},"="),s(" Pubkey"),n("span",{class:"token punctuation"},"."),s("from_string"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},"'5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY'"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# Valid public key"),s(` +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("key"),n("span",{class:"token punctuation"},"."),s("is_on_curve"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# Lies on the ed25519 curve and is suitable for users"),s(` + +off_curve_address `),n("span",{class:"token operator"},"="),s(" Pubkey"),n("span",{class:"token punctuation"},"."),s("from_string"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},"'4BJXYkfvg37zEmBbsacZjeQDpTNx91KppxFJxRqrz48e'"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# Valid public key"),s(` +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("off_curve_address"),n("span",{class:"token punctuation"},"."),s("is_on_curve"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# Not on the ed25519 curve, therefore not suitable for users"),s(` + +error_pubkey `),n("span",{class:"token operator"},"="),s(" Pubkey"),n("span",{class:"token punctuation"},"."),s("from_string"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"testPubkey"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token comment"},"# Is not a valid public key"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),un=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("key "),n("span",{class:"token operator"},"="),s(" Pubkey"),n("span",{class:"token punctuation"},"."),s("from_string"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},"'5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY'"),n("span",{class:"token punctuation"},")"),s(` +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("key"),n("span",{class:"token punctuation"},"."),s("is_on_curve"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),ln=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},"")]),s(` +`),n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},"")]),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` +`),n("span",{class:"token punctuation"},"{"),s(` + `),n("span",{class:"token keyword"},"auto"),s(" public_key "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -off_curve_address `),n("span",{class:"token operator"},"="),s(" PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},"'4BJXYkfvg37zEmBbsacZjeQDpTNx91KppxFJxRqrz48e'"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# Valid public key"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("PublicKey"),n("span",{class:"token punctuation"},"."),s("_is_on_curve"),n("span",{class:"token punctuation"},"("),s("off_curve_address"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# Not on the ed25519 curve, therefore not suitable for users"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(" public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"is_on_curve"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` -error_pubkey `),n("span",{class:"token operator"},"="),s(" PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"testPubkey"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token comment"},"# Is not a valid public key"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br")])],-1),an=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("key "),n("span",{class:"token operator"},"="),s(" PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},"'5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY'"),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("is_on_curve"),n("span",{class:"token punctuation"},"("),s("key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),tn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("pubkey"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Pubkey"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token keyword"},"return"),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),kn=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token keyword"},"auto"),s(" public_key "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(" public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"is_on_curve"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),rn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("pubkey"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Pubkey"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("std"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token keyword"},"str"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token class-name"},"FromStr"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -217,21 +296,21 @@ error_pubkey `),n("span",{class:"token operator"},"="),s(" PublicKey"),n("span", `),n("span",{class:"token keyword"},"let"),s(" error_pubkey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Pubkey"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from_str"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"testPubkey"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token comment"},"// Is not a valid public key"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br")])],-1),en=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" pubkey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Pubkey"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from_str"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br")])],-1),bn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" pubkey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Pubkey"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from_str"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token macro property"},"println!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"{:?}"'),n("span",{class:"token punctuation"},","),s(" pubkey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"is_on_curve"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),on=n("h2",{id:"bagaimana-cara-membuat-mnemonic-phrase",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#bagaimana-cara-membuat-mnemonic-phrase","aria-hidden":"true"},"#"),s(" Bagaimana cara membuat mnemonic phrase")],-1),cn=n("p",null,"Jika anda akan membuat sebuah wallet, anda perlu untuk membuat sebuah mnemonic phrase sehingga user dapat menyimpannya sebagai sebuah backup.",-1),pn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" bip39 "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"bip39"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),mn=n("h2",{id:"bagaimana-cara-membuat-mnemonic-phrase",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#bagaimana-cara-membuat-mnemonic-phrase","aria-hidden":"true"},"#"),s(" Bagaimana cara membuat mnemonic phrase")],-1),dn=n("p",null,"Jika anda akan membuat sebuah wallet, anda perlu untuk membuat sebuah mnemonic phrase sehingga user dapat menyimpannya sebagai sebuah backup.",-1),yn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" bip39 "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"bip39"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" mnemonic "),n("span",{class:"token operator"},"="),s(" bip39"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generateMnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),ln=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" mnemonic "),n("span",{class:"token operator"},"="),s(" bip39"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generateMnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),un=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" mnemonic "),n("span",{class:"token keyword"},"import"),s(` Mnemonic +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),gn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" mnemonic "),n("span",{class:"token operator"},"="),s(" bip39"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generateMnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),hn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" mnemonic "),n("span",{class:"token keyword"},"import"),s(` Mnemonic mnemo `),n("span",{class:"token operator"},"="),s(" Mnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"english"'),n("span",{class:"token punctuation"},")"),s(` words `),n("span",{class:"token operator"},"="),s(" mnemo"),n("span",{class:"token punctuation"},"."),s("generate"),n("span",{class:"token punctuation"},"("),s("strength"),n("span",{class:"token operator"},"="),n("span",{class:"token number"},"256"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),kn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("mnemo "),n("span",{class:"token operator"},"="),s(" Mnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"english"'),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),wn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("mnemo "),n("span",{class:"token operator"},"="),s(" Mnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"english"'),n("span",{class:"token punctuation"},")"),s(` words `),n("span",{class:"token operator"},"="),s(" mnemo"),n("span",{class:"token punctuation"},"."),s("generate"),n("span",{class:"token punctuation"},"("),s("strength"),n("span",{class:"token operator"},"="),n("span",{class:"token number"},"256"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),rn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen new -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),bn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen new -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),mn=n("h2",{id:"bagaimana-cara-restore-sebuah-keypair-dari-sebuah-mnemonic-phrase",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#bagaimana-cara-restore-sebuah-keypair-dari-sebuah-mnemonic-phrase","aria-hidden":"true"},"#"),s(" Bagaimana cara restore sebuah Keypair dari sebuah mnemonic phrase")],-1),dn=n("p",null,"Banyak ektension-extension wallet menggunakan mnemonics untuk memrepresentasikan secret key-secret key mereka. Anda dapat menkonversikan mnemonic ke Keypairs untuk local testing.",-1),yn=n("ol",null,[n("li",null,"BIP39 - membuat sebuah single wallet")],-1),gn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),_n=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen new +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),vn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen new +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),fn=n("h2",{id:"bagaimana-cara-restore-sebuah-keypair-dari-sebuah-mnemonic-phrase",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#bagaimana-cara-restore-sebuah-keypair-dari-sebuah-mnemonic-phrase","aria-hidden":"true"},"#"),s(" Bagaimana cara restore sebuah Keypair dari sebuah mnemonic phrase")],-1),xn=n("p",null,"Banyak ektension-extension wallet menggunakan mnemonics untuk memrepresentasikan secret key-secret key mereka. Anda dapat menkonversikan mnemonic ke Keypairs untuk local testing.",-1),Kn=n("ol",null,[n("li",null,"BIP39 - membuat sebuah single wallet")],-1),Pn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" bip39 "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"bip39"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -241,23 +320,23 @@ words `),n("span",{class:"token operator"},"="),s(" mnemo"),n("span",{class:"tok `),n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSeed"),n("span",{class:"token punctuation"},"("),s("seed"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"slice"),n("span",{class:"token punctuation"},"("),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"32"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),n("span",{class:"token template-string"},[n("span",{class:"token template-punctuation string"},"`"),n("span",{class:"token interpolation"},[n("span",{class:"token interpolation-punctuation punctuation"},"${"),s("keypair"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token interpolation-punctuation punctuation"},"}")]),n("span",{class:"token template-punctuation string"},"`")]),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token comment"},"// 5ZWj7a1f8tWkjBESHKgrLmXshuXxqeY9SYcfbshpAqPG"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),hn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" mnemonic "),n("span",{class:"token operator"},"="),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),Wn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" mnemonic "),n("span",{class:"token operator"},"="),s(` `),n("span",{class:"token string"},'"pill tomorrow foster begin walnut borrow virtual kick shift mutual shoe scatter"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" seed "),n("span",{class:"token operator"},"="),s(" bip39"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"mnemonicToSeedSync"),n("span",{class:"token punctuation"},"("),s("mnemonic"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token string"},'""'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token comment"},"// (mnemonic, password)"),s(` `),n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSeed"),n("span",{class:"token punctuation"},"("),s("seed"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"slice"),n("span",{class:"token punctuation"},"("),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"32"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),wn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),Sn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair `),n("span",{class:"token keyword"},"from"),s(" mnemonic "),n("span",{class:"token keyword"},"import"),s(` Mnemonic mnemo `),n("span",{class:"token operator"},"="),s(" Mnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"english"'),n("span",{class:"token punctuation"},")"),s(` seed `),n("span",{class:"token operator"},"="),s(" mnemo"),n("span",{class:"token punctuation"},"."),s("to_seed"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"pill tomorrow foster begin walnut borrow virtual kick shift mutual shoe scatter"'),n("span",{class:"token punctuation"},")"),s(` -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),s("seed"),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created Keypair with Public Key: {}"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),_n=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("mnemo "),n("span",{class:"token operator"},"="),s(" Mnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"english"'),n("span",{class:"token punctuation"},")"),s(` +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_bytes"),n("span",{class:"token punctuation"},"("),s("seed"),n("span",{class:"token punctuation"},")"),s(` +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created Keypair with Public Key: {}"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),jn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("mnemo "),n("span",{class:"token operator"},"="),s(" Mnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"english"'),n("span",{class:"token punctuation"},")"),s(` seed `),n("span",{class:"token operator"},"="),s(" mnemo"),n("span",{class:"token punctuation"},"."),s("to_seed"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"pill tomorrow foster begin walnut borrow virtual kick shift mutual shoe scatter"'),n("span",{class:"token punctuation"},")"),s(` -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),s("seed"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),vn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen recover -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),fn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen recover -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),xn=n("ol",{start:"2"},[n("li",null,"BIP44 (multiple wallets, also known HD wallets)")],-1),Kn=n("p",null,"You can make multiple wallets from a single seed - also known as 'Hierarchical Deterministic wallets' or HD wallets:",-1),Pn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_bytes"),n("span",{class:"token punctuation"},"("),s("seed"),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),An=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen recover +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Cn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen recover +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Tn=n("ol",{start:"2"},[n("li",null,"BIP44 (multiple wallets, also known HD wallets)")],-1),Bn=n("p",null,"You can make multiple wallets from a single seed - also known as 'Hierarchical Deterministic wallets' or HD wallets:",-1),Dn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" HDKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"micro-ed25519-hdkey"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" bip39 "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"bip39"'),n("span",{class:"token punctuation"},";"),s(` @@ -272,7 +351,7 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),n("span",{class:"token template-string"},[n("span",{class:"token template-punctuation string"},"`"),n("span",{class:"token interpolation"},[n("span",{class:"token interpolation-punctuation punctuation"},"${"),s("path"),n("span",{class:"token interpolation-punctuation punctuation"},"}")]),n("span",{class:"token string"}," => "),n("span",{class:"token interpolation"},[n("span",{class:"token interpolation-punctuation punctuation"},"${"),s("keypair"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token interpolation-punctuation punctuation"},"}")]),n("span",{class:"token template-punctuation string"},"`")]),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br")])],-1),Sn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" mnemonic "),n("span",{class:"token operator"},"="),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br")])],-1),Rn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" mnemonic "),n("span",{class:"token operator"},"="),s(` `),n("span",{class:"token string"},'"neither lonely flavor argue grass remind eye tag avocado spot unusual intact"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" seed "),n("span",{class:"token operator"},"="),s(" bip39"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"mnemonicToSeedSync"),n("span",{class:"token punctuation"},"("),s("mnemonic"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token string"},'""'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token comment"},"// (mnemonic, password)"),s(` `),n("span",{class:"token keyword"},"for"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"let"),s(" i "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(" i "),n("span",{class:"token operator"},"<"),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},";"),s(" i"),n("span",{class:"token operator"},"++"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -280,9 +359,9 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSeed"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"derivePath"),n("span",{class:"token punctuation"},"("),s("path"),n("span",{class:"token punctuation"},","),s(" seed"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toString"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"hex"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),s("key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),n("span",{class:"token template-string"},[n("span",{class:"token template-punctuation string"},"`"),n("span",{class:"token interpolation"},[n("span",{class:"token interpolation-punctuation punctuation"},"${"),s("path"),n("span",{class:"token interpolation-punctuation punctuation"},"}")]),n("span",{class:"token string"}," => "),n("span",{class:"token interpolation"},[n("span",{class:"token interpolation-punctuation punctuation"},"${"),s("keypair"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token interpolation-punctuation punctuation"},"}")]),n("span",{class:"token template-punctuation string"},"`")]),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),Wn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana-keygen recover "),n("span",{class:"token string"},"'prompt:?key=0/0'"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),An=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana-keygen recover "),n("span",{class:"token string"},"'prompt:?key=0/0'"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),jn=n("h2",{id:"bagaimana-cara-membuat-sebuah-vanity-address",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#bagaimana-cara-membuat-sebuah-vanity-address","aria-hidden":"true"},"#"),s(" Bagaimana cara membuat sebuah vanity address")],-1),Cn=n("p",null,'Vanity publickeys, atau custom address adalah keys yang dimulai dengan character spesifik. Sebagai contoh, jika seseorang ingin publickey dimulai dengan "elv1s", atau mungkin juga "cook". Ini dapat membantu orang lain untuk mengingat siapa yang mempunyai key itu, membuat key lebih mudah untuk diidentifikasi.',-1),Bn=n("p",null,"Catatan: Semakin banyak character di dalam vanity address anda, semakin lama prosesnya.",-1),Tn=n("p",null,"::: peringatan Anda harus menggunakan CLI untuk task ini. Python dan TypeScript hanyalah contoh untuk ilustrasi saja dan lebih lambat dibandingkan dengan CLI.",-1),Rn=n("p",null,":::",-1),Dn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),zn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana-keygen recover "),n("span",{class:"token string"},"'prompt:?key=0/0'"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Mn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana-keygen recover "),n("span",{class:"token string"},"'prompt:?key=0/0'"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Nn=n("h2",{id:"bagaimana-cara-membuat-sebuah-vanity-address",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#bagaimana-cara-membuat-sebuah-vanity-address","aria-hidden":"true"},"#"),s(" Bagaimana cara membuat sebuah vanity address")],-1),En=n("p",null,'Vanity publickeys, atau custom address adalah keys yang dimulai dengan character spesifik. Sebagai contoh, jika seseorang ingin publickey dimulai dengan "elv1s", atau mungkin juga "cook". Ini dapat membantu orang lain untuk mengingat siapa yang mempunyai key itu, membuat key lebih mudah untuk diidentifikasi.',-1),Jn=n("p",null,"Catatan: Semakin banyak character di dalam vanity address anda, semakin lama prosesnya.",-1),Un=n("p",null,"::: peringatan Anda harus menggunakan CLI untuk task ini. Python dan TypeScript hanyalah contoh untuk ilustrasi saja dan lebih lambat dibandingkan dengan CLI.",-1),Hn=n("p",null,":::",-1),Vn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"let"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` @@ -290,23 +369,42 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),Mn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),Yn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"while"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token operator"},"!"),s("keypair"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"startsWith"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"elv1s"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),zn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),Ln=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"while"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"str"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},":"),n("span",{class:"token number"},"5"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token operator"},"!="),n("span",{class:"token string"},'"elv1s"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},":"),s(` +`),n("span",{class:"token keyword"},"while"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"str"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},":"),n("span",{class:"token number"},"5"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token operator"},"!="),n("span",{class:"token string"},'"elv1s"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},":"),s(` keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created Keypair with Public Key: {}"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),Nn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"while"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"str"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},":"),n("span",{class:"token number"},"5"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token operator"},"!="),n("span",{class:"token string"},'"elv1s"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},":"),s(` +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created Keypair with Public Key: {}"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),qn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` +`),n("span",{class:"token keyword"},"while"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"str"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},":"),n("span",{class:"token number"},"5"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token operator"},"!="),n("span",{class:"token string"},'"elv1s"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},":"),s(` keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),En=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen grind --starts-with e1v1s:1 -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Jn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen grind --starts-with e1v1s:1 -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Un=n("h2",{id:"bagaimana-cara-untuk-sign-dan-menverifikasi-messages-dalam-wallet",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#bagaimana-cara-untuk-sign-dan-menverifikasi-messages-dalam-wallet","aria-hidden":"true"},"#"),s(" Bagaimana cara untuk sign dan menverifikasi messages dalam wallet")],-1),Vn=n("p",null,"Fungsi utama dari sebuah keypair adalah untuk sign messages dan mengaktifkan verifikasi dari signature. Verifikasi signature menyakinkan recipient bahwa data telah disign oleh pemilik dengan spesifik private key.",-1),Hn=s("Untuk melakukan itu, kita perlu import "),Yn={href:"https://www.npmjs.com/package/tweetnacl",target:"_blank",rel:"noopener noreferrer"},Ln=s("TweetNaCl"),qn=s(" crypto library."),Fn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),Fn=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token comment"},"// clang++ vanity_keypair.cpp -o vanity_keypair -std=c++17 -lssl -lcrypto -lsodium"),s(` + +`),n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + `),n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"while"),s(),n("span",{class:"token punctuation"},"("),s("key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"substr"),n("span",{class:"token punctuation"},"("),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"5"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"!="),s(),n("span",{class:"token string"},'"elv1s"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + key_pair `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token punctuation"},"}"),s(` + + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"Created Keypair with Public Key: "'),s(),n("span",{class:"token operator"},"<<"),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br")])],-1),In=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token keyword"},"while"),s(),n("span",{class:"token punctuation"},"("),s("key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"substr"),n("span",{class:"token punctuation"},"("),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"5"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"!="),s(),n("span",{class:"token string"},'"elv1s"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + key_pair `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),Xn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen grind --starts-with e1v1s:1 +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Zn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen grind --starts-with e1v1s:1 +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),$n=n("h2",{id:"bagaimana-cara-untuk-sign-dan-menverifikasi-messages-dalam-wallet",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#bagaimana-cara-untuk-sign-dan-menverifikasi-messages-dalam-wallet","aria-hidden":"true"},"#"),s(" Bagaimana cara untuk sign dan menverifikasi messages dalam wallet")],-1),Gn=n("p",null,"Fungsi utama dari sebuah keypair adalah untuk sign messages dan mengaktifkan verifikasi dari signature. Verifikasi signature menyakinkan recipient bahwa data telah disign oleh pemilik dengan spesifik private key.",-1),Qn=s("Untuk melakukan itu, kita perlu import "),On={href:"https://www.npmjs.com/package/tweetnacl",target:"_blank",rel:"noopener noreferrer"},ns=s("TweetNaCl"),ss=s(" crypto library."),as=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(" nacl "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"tweetnacl"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" decodeUTF8 "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"tweetnacl-util"'),n("span",{class:"token punctuation"},";"),s(` @@ -332,7 +430,7 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("result"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br")])],-1),In=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" message "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"The quick brown fox jumps over the lazy dog"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br")])],-1),ts=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" message "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"The quick brown fox jumps over the lazy dog"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" messageBytes "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"decodeUTF8"),n("span",{class:"token punctuation"},"("),s("message"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" signature "),n("span",{class:"token operator"},"="),s(" nacl"),n("span",{class:"token punctuation"},"."),s("sign"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"detached"),n("span",{class:"token punctuation"},"("),s("messageBytes"),n("span",{class:"token punctuation"},","),s(" keypair"),n("span",{class:"token punctuation"},"."),s("secretKey"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` @@ -343,42 +441,26 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("result"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),Xn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" nacl"),n("span",{class:"token punctuation"},"."),s("signing "),n("span",{class:"token keyword"},"import"),s(` VerifyKey -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),es=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair secret_key `),n("span",{class:"token operator"},"="),s(" "),n("span",{class:"token punctuation"},"["),s(` `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"189"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"224"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"216"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"117"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"173"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"149"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"45"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"73"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"237"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"246"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"15"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"185"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"186"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"82"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"177"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` - `),n("span",{class:"token punctuation"},"]"),s(` - -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"bytes"),n("span",{class:"token punctuation"},"("),s("secret_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -pubkey_bytes `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token builtin"},"bytes"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),s(` -message `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"The quick brown fox jumps over the lazy dog"'),s(` -message_bytes `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token builtin"},"bytes"),n("span",{class:"token punctuation"},"("),s("message"),n("span",{class:"token punctuation"},","),n("span",{class:"token string"},"'utf8'"),n("span",{class:"token punctuation"},")"),s(` -signed_message `),n("span",{class:"token operator"},"="),s(" keypair"),n("span",{class:"token punctuation"},"."),s("sign"),n("span",{class:"token punctuation"},"("),s("message_bytes"),n("span",{class:"token punctuation"},")"),s(` - -verify_sign `),n("span",{class:"token operator"},"="),s(" VerifyKey"),n("span",{class:"token punctuation"},"("),s(` - pubkey_bytes -`),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),s("verify"),n("span",{class:"token punctuation"},"("),s(` - smessage`),n("span",{class:"token operator"},"="),s("message_bytes"),n("span",{class:"token punctuation"},","),s(` - signature`),n("span",{class:"token operator"},"="),s("signed_message"),n("span",{class:"token punctuation"},"."),s(`signature -`),n("span",{class:"token punctuation"},")"),s(` - -`),n("span",{class:"token comment"},"#Returns original message if the signature has not been tampered with"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("verify_sign"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br")])],-1),Zn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("message "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"The quick brown fox jumps over the lazy dog"'),s(` -message_bytes `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token builtin"},"bytes"),n("span",{class:"token punctuation"},"("),s("message"),n("span",{class:"token punctuation"},","),n("span",{class:"token string"},"'utf8'"),n("span",{class:"token punctuation"},")"),s(` -signed_message `),n("span",{class:"token operator"},"="),s(" keypair"),n("span",{class:"token punctuation"},"."),s("sign"),n("span",{class:"token punctuation"},"("),s("message_bytes"),n("span",{class:"token punctuation"},")"),s(` - -verify_sign `),n("span",{class:"token operator"},"="),s(" VerifyKey"),n("span",{class:"token punctuation"},"("),s(` - pubkey_bytes -`),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),s("verify"),n("span",{class:"token punctuation"},"("),s(` - smessage`),n("span",{class:"token operator"},"="),s("message_bytes"),n("span",{class:"token punctuation"},","),s(` - signature`),n("span",{class:"token operator"},"="),s("signed_message"),n("span",{class:"token punctuation"},"."),s(`signature -`),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),$n=n("h2",{id:"bagaimana-cara-mengkoneksi-ke-sebuah-wallet",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#bagaimana-cara-mengkoneksi-ke-sebuah-wallet","aria-hidden":"true"},"#"),s(" Bagaimana cara mengkoneksi ke sebuah wallet")],-1),Gn=s("Solana "),Qn={href:"https://github.com/solana-labs/wallet-adapter",target:"_blank",rel:"noopener noreferrer"},On=s("wallet-adapter"),ns=s(" libraries mempermudah untuk mengatur koneksi wallet di client-side."),ss=l(`

    React

    Run command berikut untuk menginstall dependencies yang diperlukan:

    yarn add @solana/wallet-adapter-react @solana/wallet-adapter-react-ui @solana/wallet-adapter-base @solana/wallet-adapter-wallets
    -

    React wallet-adapter libraries mengijinkan kita untuk mempertahankan dan mengakses states koneksi wallet melalui hooks dan Context providers bernama, useWallet, WalletProvider, useConnection, dan ConnectionProvider. React App harus di-wrap dengan WalletProvider dan ConnectionProvider.

    Sebagai tambahan, kita dapat memperingatkan user untuk terhubung dengan menggunakan useWalletModal untuk mengganti visibility dari connection modal dan men-wrap App dengan WalletModalProvider dari @solana/wallet-adapter-react-ui. Connection modal akan menghandle arus koneksi untuk kita, jadi kita cukup untuk listen kapan sebuah wallet terkoneksi. Kita dapat mengetahui sebuah wallet terkoneksi ketika useWallet response menjadi non-null di property wallet. Sebaliknya, jika property tersebut null, kita tahu bahwa wallet itu tidak terkoneksi.

    `,5),as=n("div",{class:"language-tsx ext-tsx line-numbers-mode"},[n("pre",{class:"language-tsx"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(" React"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token punctuation"},"{"),s(" useMemo"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token constant"},"FC"),n("span",{class:"token punctuation"},","),s(" PropsWithChildren "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"react"'),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token punctuation"},"]"),s(` +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_bytes"),n("span",{class:"token punctuation"},"("),s("secret_key"),n("span",{class:"token punctuation"},")"),s(` +message `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'b"The quick brown fox jumps over the lazy dog"'),s(` +signature `),n("span",{class:"token operator"},"="),s(" keypair"),n("span",{class:"token punctuation"},"."),s("sign_message"),n("span",{class:"token punctuation"},"("),s("message"),n("span",{class:"token punctuation"},")"),s(` +verify_sign `),n("span",{class:"token operator"},"="),s(" signature"),n("span",{class:"token punctuation"},"."),s("verify"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(" message"),n("span",{class:"token punctuation"},")"),s(` + +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("verify_sign"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# bool"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br")])],-1),os=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("message "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'b"The quick brown fox jumps over the lazy dog"'),s(` +signature `),n("span",{class:"token operator"},"="),s(" keypair"),n("span",{class:"token punctuation"},"."),s("sign_message"),n("span",{class:"token punctuation"},"("),s("message"),n("span",{class:"token punctuation"},")"),s(` +verify_sign `),n("span",{class:"token operator"},"="),s(" signature"),n("span",{class:"token punctuation"},"."),s("verify"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(" message"),n("span",{class:"token punctuation"},")"),s(` + +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("verify_sign"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# bool"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br")])],-1),cs=n("h2",{id:"bagaimana-cara-mengkoneksi-ke-sebuah-wallet",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#bagaimana-cara-mengkoneksi-ke-sebuah-wallet","aria-hidden":"true"},"#"),s(" Bagaimana cara mengkoneksi ke sebuah wallet")],-1),ps=s("Solana "),us={href:"https://github.com/solana-labs/wallet-adapter",target:"_blank",rel:"noopener noreferrer"},ls=s("wallet-adapter"),is=s(" libraries mempermudah untuk mengatur koneksi wallet di client-side."),ks=u(`

    React

    Run command berikut untuk menginstall dependencies yang diperlukan:

    yarn add @solana/wallet-adapter-react @solana/wallet-adapter-react-ui @solana/wallet-adapter-base @solana/wallet-adapter-wallets
    +

    React wallet-adapter libraries mengijinkan kita untuk mempertahankan dan mengakses states koneksi wallet melalui hooks dan Context providers bernama, useWallet, WalletProvider, useConnection, dan ConnectionProvider. React App harus di-wrap dengan WalletProvider dan ConnectionProvider.

    Sebagai tambahan, kita dapat memperingatkan user untuk terhubung dengan menggunakan useWalletModal untuk mengganti visibility dari connection modal dan men-wrap App dengan WalletModalProvider dari @solana/wallet-adapter-react-ui. Connection modal akan menghandle arus koneksi untuk kita, jadi kita cukup untuk listen kapan sebuah wallet terkoneksi. Kita dapat mengetahui sebuah wallet terkoneksi ketika useWallet response menjadi non-null di property wallet. Sebaliknya, jika property tersebut null, kita tahu bahwa wallet itu tidak terkoneksi.

    `,5),rs=n("div",{class:"language-tsx ext-tsx line-numbers-mode"},[n("pre",{class:"language-tsx"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(" React"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token punctuation"},"{"),s(" useMemo"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token constant"},"FC"),n("span",{class:"token punctuation"},","),s(" PropsWithChildren "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"react"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` ConnectionProvider`),n("span",{class:"token punctuation"},","),s(` WalletProvider`),n("span",{class:"token punctuation"},","),s(` @@ -460,7 +542,7 @@ verify_sign `),n("span",{class:"token operator"},"="),s(" VerifyKey"),n("span",{ `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br"),n("span",{class:"line-number"},"69"),n("br"),n("span",{class:"line-number"},"70"),n("br"),n("span",{class:"line-number"},"71"),n("br"),n("span",{class:"line-number"},"72"),n("br"),n("span",{class:"line-number"},"73"),n("br"),n("span",{class:"line-number"},"74"),n("br"),n("span",{class:"line-number"},"75"),n("br"),n("span",{class:"line-number"},"76"),n("br"),n("span",{class:"line-number"},"77"),n("br"),n("span",{class:"line-number"},"78"),n("br"),n("span",{class:"line-number"},"79"),n("br"),n("span",{class:"line-number"},"80"),n("br"),n("span",{class:"line-number"},"81"),n("br"),n("span",{class:"line-number"},"82"),n("br")])],-1),ts=n("div",{class:"language-tsx ext-tsx line-numbers-mode"},[n("pre",{class:"language-tsx"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token punctuation"},"{"),s(" wallet "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"useWallet"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br"),n("span",{class:"line-number"},"69"),n("br"),n("span",{class:"line-number"},"70"),n("br"),n("span",{class:"line-number"},"71"),n("br"),n("span",{class:"line-number"},"72"),n("br"),n("span",{class:"line-number"},"73"),n("br"),n("span",{class:"line-number"},"74"),n("br"),n("span",{class:"line-number"},"75"),n("br"),n("span",{class:"line-number"},"76"),n("br"),n("span",{class:"line-number"},"77"),n("br"),n("span",{class:"line-number"},"78"),n("br"),n("span",{class:"line-number"},"79"),n("br"),n("span",{class:"line-number"},"80"),n("br"),n("span",{class:"line-number"},"81"),n("br"),n("span",{class:"line-number"},"82"),n("br")])],-1),bs=n("div",{class:"language-tsx ext-tsx line-numbers-mode"},[n("pre",{class:"language-tsx"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token punctuation"},"{"),s(" wallet "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"useWallet"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token punctuation"},"{"),s(" setVisible "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"useWalletModal"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token function-variable function"},"onRequestConnectWallet"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -479,8 +561,8 @@ verify_sign `),n("span",{class:"token operator"},"="),s(" VerifyKey"),n("span",{ `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("p")]),n("span",{class:"token punctuation"},">")]),n("span",{class:"token punctuation"},"{"),s("wallet"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),n("span",{class:"token plain-text"},` `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br")])],-1),es=l(`

    Vue

    Run command dibawah ini untuk menginstall dependencies yang diperlukan:

    npm install solana-wallets-vue @solana/wallet-adapter-wallets
    -
    `,3),os={href:"https://github.com/lorisleiva/solana-wallets-vue",target:"_blank",rel:"noopener noreferrer"},cs=s("Solana Wallets Vue"),ps=s(" plugin mengijinkan kita untuk menginisiasi sebuah wallet store dan membuat sebuah global property "),ls=n("code",null,"$wallet",-1),us=s(" baru yang dapat diakses di dalam beragam compenent. Semua property dan method yang didapat dari "),is=n("code",null,"useWallet()",-1),ks=s(" dapat dilihat di "),rs={href:"https://github.com/lorisleiva/solana-wallets-vue#usewallet-references",target:"_blank",rel:"noopener noreferrer"},bs=s("sini"),ms=s(". Kita juga mengimport dan menrender WalletMultiButton component agar user dapat memilih wallet yang terkoneksi dengannya."),ds=n("div",{class:"language-vue ext-vue line-numbers-mode"},[n("pre",{class:"language-vue"},[n("code",null,[n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("script")]),s(),n("span",{class:"token attr-name"},"setup"),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"},[n("span",{class:"token language-javascript"},[s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br")])],-1),ms=u(`

    Vue

    Run command dibawah ini untuk menginstall dependencies yang diperlukan:

    npm install solana-wallets-vue @solana/wallet-adapter-wallets
    +
    `,3),ds={href:"https://github.com/lorisleiva/solana-wallets-vue",target:"_blank",rel:"noopener noreferrer"},ys=s("Solana Wallets Vue"),gs=s(" plugin mengijinkan kita untuk menginisiasi sebuah wallet store dan membuat sebuah global property "),hs=n("code",null,"$wallet",-1),ws=s(" baru yang dapat diakses di dalam beragam compenent. Semua property dan method yang didapat dari "),_s=n("code",null,"useWallet()",-1),vs=s(" dapat dilihat di "),fs={href:"https://github.com/lorisleiva/solana-wallets-vue#usewallet-references",target:"_blank",rel:"noopener noreferrer"},xs=s("sini"),Ks=s(". Kita juga mengimport dan menrender WalletMultiButton component agar user dapat memilih wallet yang terkoneksi dengannya."),Ps=n("div",{class:"language-vue ext-vue line-numbers-mode"},[n("pre",{class:"language-vue"},[n("code",null,[n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("script")]),s(),n("span",{class:"token attr-name"},"setup"),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"},[n("span",{class:"token language-javascript"},[s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" WalletMultiButton "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"solana-wallets-vue"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` LedgerWalletAdapter`),n("span",{class:"token punctuation"},","),s(` @@ -513,15 +595,15 @@ verify_sign `),n("span",{class:"token operator"},"="),s(" VerifyKey"),n("span",{ `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br")])],-1),ys=n("div",{class:"language-vue ext-vue line-numbers-mode"},[n("pre",{class:"language-vue"},[n("code",null,[n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("script")]),s(),n("span",{class:"token attr-name"},"setup"),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"},[n("span",{class:"token language-javascript"},[s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br")])],-1),Ws=n("div",{class:"language-vue ext-vue line-numbers-mode"},[n("pre",{class:"language-vue"},[n("code",null,[n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("script")]),s(),n("span",{class:"token attr-name"},"setup"),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"},[n("span",{class:"token language-javascript"},[s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" WalletMultiButton "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"solana-wallets-vue"'),n("span",{class:"token punctuation"},";"),s(` `)])]),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("template")]),n("span",{class:"token punctuation"},">")]),s(` `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("wallet-multi-button")]),n("span",{class:"token punctuation"},">")]),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),gs=l(`

    Svelte

    Run command berikut ini untuk menginstall dependencies yang dibutuhkan:

    npm install @svelte-on-solana/wallet-adapter-core @svelte-on-solana/wallet-adapter-ui @solana/wallet-adapter-base @solana/wallet-adapter-wallets @solana/web3.js
    -
    `,3),hs={href:"https://github.com/svelte-on-solana/wallet-adapter",target:"_blank",rel:"noopener noreferrer"},ws=s("Svelte Wallet Adapter"),_s=s(" package dapat menambahkan sebuah Svelte Store("),vs=n("code",null,"$walletStore",-1),fs=s(") yang dapat diakses oleh semua JS, TS dan/atau Svelte files di dalam sebuah project yang telah dikerjakan dengan Svelte Template atau SvelteKit. Menggunakan repo reference "),xs={href:"https://github.com/svelte-on-solana/wallet-adapter/blob/master/packages/core/README.md/",target:"_blank",rel:"noopener noreferrer"},Ks=s("ini"),Ps=s(" anda dapat mengunakan adapter untuk SSR atau SPA. UI package mempunyai sebuah "),Ss=n("code",null,"",-1),Ws=s(" component untuk membantu user untuk memilih wallet yang terkoneksi dengannya."),As=n("div",{class:"language-html ext-html line-numbers-mode"},[n("pre",{class:"language-html"},[n("code",null,[n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("script")]),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"},[n("span",{class:"token language-javascript"},[s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),Ss=u(`

    Svelte

    Run command berikut ini untuk menginstall dependencies yang dibutuhkan:

    npm install @svelte-on-solana/wallet-adapter-core @svelte-on-solana/wallet-adapter-ui @solana/wallet-adapter-base @solana/wallet-adapter-wallets @solana/web3.js
    +
    `,3),js={href:"https://github.com/svelte-on-solana/wallet-adapter",target:"_blank",rel:"noopener noreferrer"},As=s("Svelte Wallet Adapter"),Cs=s(" package dapat menambahkan sebuah Svelte Store("),Ts=n("code",null,"$walletStore",-1),Bs=s(") yang dapat diakses oleh semua JS, TS dan/atau Svelte files di dalam sebuah project yang telah dikerjakan dengan Svelte Template atau SvelteKit. Menggunakan repo reference "),Ds={href:"https://github.com/svelte-on-solana/wallet-adapter/blob/master/packages/core/README.md/",target:"_blank",rel:"noopener noreferrer"},Rs=s("ini"),zs=s(" anda dapat mengunakan adapter untuk SSR atau SPA. UI package mempunyai sebuah "),Ms=n("code",null,"",-1),Ns=s(" component untuk membantu user untuk memilih wallet yang terkoneksi dengannya."),Es=n("div",{class:"language-html ext-html line-numbers-mode"},[n("pre",{class:"language-html"},[n("code",null,[n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("script")]),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"},[n("span",{class:"token language-javascript"},[s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" walletStore "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@svelte-on-solana/wallet-adapter-core"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` WalletProvider`),n("span",{class:"token punctuation"},","),s(` @@ -554,7 +636,7 @@ verify_sign `),n("span",{class:"token operator"},"="),s(" VerifyKey"),n("span",{ successfully connected! {:else} `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("WalletMultiButton")]),s(),n("span",{class:"token punctuation"},"/>")]),s(` {/if} -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br")])],-1),js=n("div",{class:"language-html ext-html line-numbers-mode"},[n("pre",{class:"language-html"},[n("code",null,[n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("script")]),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"},[n("span",{class:"token language-javascript"},[s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br")])],-1),Js=n("div",{class:"language-html ext-html line-numbers-mode"},[n("pre",{class:"language-html"},[n("code",null,[n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("script")]),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"},[n("span",{class:"token language-javascript"},[s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" walletStore "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@svelte-on-solana/wallet-adapter-core"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" WalletMultiButton "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@svelte-on-solana/wallet-adapter-ui"'),n("span",{class:"token punctuation"},";"),s(` `)])]),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` @@ -563,4 +645,4 @@ successfully connected! {:else} successfully connected! {:else} `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("WalletMultiButton")]),s(),n("span",{class:"token punctuation"},"/>")]),s(` {/if} -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br")])],-1);function Cs(Bs,Ts){const e=p("SolanaCodeGroupItem"),o=p("SolanaCodeGroup"),c=p("ExternalLinkIcon");return i(),k(r,null,[m,d,y,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[g]),preview:a(()=>[h]),_:1}),t(e,{title:"Python"},{default:a(()=>[w]),preview:a(()=>[_]),_:1}),t(e,{title:"Rust"},{default:a(()=>[v]),preview:a(()=>[f]),_:1}),t(e,{title:"CLI"},{default:a(()=>[x]),preview:a(()=>[K]),_:1})]),_:1}),P,S,W,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[A]),preview:a(()=>[j]),_:1}),t(e,{title:"Python"},{default:a(()=>[C]),preview:a(()=>[B]),_:1}),t(e,{title:"Rust"},{default:a(()=>[T]),preview:a(()=>[R]),_:1}),t(e,{title:"CLI"},{default:a(()=>[D]),preview:a(()=>[M]),_:1})]),_:1}),z,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[N]),preview:a(()=>[E]),_:1}),t(e,{title:"Python"},{default:a(()=>[J]),preview:a(()=>[U]),_:1}),t(e,{title:"Rust"},{default:a(()=>[V]),preview:a(()=>[H]),_:1})]),_:1}),Y,L,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[q]),preview:a(()=>[F]),_:1}),t(e,{title:"Python"},{default:a(()=>[I]),preview:a(()=>[X]),_:1}),t(e,{title:"CLI"},{default:a(()=>[Z]),preview:a(()=>[$]),_:1})]),_:1}),G,Q,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[O]),preview:a(()=>[nn]),_:1}),t(e,{title:"Python",active:""},{default:a(()=>[sn]),preview:a(()=>[an]),_:1}),t(e,{title:"Rust",active:""},{default:a(()=>[tn]),preview:a(()=>[en]),_:1})]),_:1}),on,cn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[pn]),preview:a(()=>[ln]),_:1}),t(e,{title:"Python"},{default:a(()=>[un]),preview:a(()=>[kn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[rn]),preview:a(()=>[bn]),_:1})]),_:1}),mn,dn,yn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[gn]),preview:a(()=>[hn]),_:1}),t(e,{title:"Python"},{default:a(()=>[wn]),preview:a(()=>[_n]),_:1}),t(e,{title:"CLI"},{default:a(()=>[vn]),preview:a(()=>[fn]),_:1})]),_:1}),xn,Kn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Pn]),preview:a(()=>[Sn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[Wn]),preview:a(()=>[An]),_:1})]),_:1}),jn,Cn,Bn,Tn,Rn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Dn]),preview:a(()=>[Mn]),_:1}),t(e,{title:"Python"},{default:a(()=>[zn]),preview:a(()=>[Nn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[En]),preview:a(()=>[Jn]),_:1})]),_:1}),Un,Vn,n("p",null,[Hn,n("a",Yn,[Ln,t(c)]),qn]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Fn]),preview:a(()=>[In]),_:1}),t(e,{title:"Python"},{default:a(()=>[Xn]),preview:a(()=>[Zn]),_:1})]),_:1}),$n,n("p",null,[Gn,n("a",Qn,[On,t(c)]),ns]),ss,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[as]),preview:a(()=>[ts]),_:1})]),_:1}),es,n("p",null,[n("a",os,[cs,t(c)]),ps,ls,us,is,ks,n("a",rs,[bs,t(c)]),ms]),t(o,null,{default:a(()=>[t(e,{title:"Vue",active:""},{default:a(()=>[ds]),preview:a(()=>[ys]),_:1})]),_:1}),gs,n("p",null,[n("a",hs,[ws,t(c)]),_s,vs,fs,n("a",xs,[Ks,t(c)]),Ps,Ss,Ws]),t(o,null,{default:a(()=>[t(e,{title:"Svelte",active:""},{default:a(()=>[As]),preview:a(()=>[js]),_:1})]),_:1})],64)}var Ds=u(b,[["render",Cs]]);export{Ds as default}; +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br")])],-1);function Us(Hs,Vs){const e=p("SolanaCodeGroupItem"),o=p("SolanaCodeGroup"),c=p("ExternalLinkIcon");return i(),k(r,null,[m,d,y,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[g]),preview:a(()=>[h]),_:1}),t(e,{title:"Python"},{default:a(()=>[w]),preview:a(()=>[_]),_:1}),t(e,{title:"C++"},{default:a(()=>[v]),preview:a(()=>[f]),_:1}),t(e,{title:"Rust"},{default:a(()=>[x]),preview:a(()=>[K]),_:1}),t(e,{title:"CLI"},{default:a(()=>[P]),preview:a(()=>[W]),_:1})]),_:1}),S,j,A,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[C]),preview:a(()=>[T]),_:1}),t(e,{title:"Python"},{default:a(()=>[B]),preview:a(()=>[D]),_:1}),t(e,{title:"C++"},{default:a(()=>[R]),preview:a(()=>[z]),_:1}),t(e,{title:"Rust"},{default:a(()=>[M]),preview:a(()=>[N]),_:1}),t(e,{title:"CLI"},{default:a(()=>[E]),preview:a(()=>[J]),_:1})]),_:1}),U,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[H]),preview:a(()=>[V]),_:1}),t(e,{title:"Python"},{default:a(()=>[Y]),preview:a(()=>[L]),_:1}),t(e,{title:"Rust"},{default:a(()=>[q]),preview:a(()=>[F]),_:1})]),_:1}),I,X,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Z]),preview:a(()=>[$]),_:1}),t(e,{title:"Python"},{default:a(()=>[G]),preview:a(()=>[Q]),_:1}),t(e,{title:"C++"},{default:a(()=>[O]),preview:a(()=>[nn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[sn]),preview:a(()=>[an]),_:1})]),_:1}),tn,en,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[on]),preview:a(()=>[cn]),_:1}),t(e,{title:"Python",active:""},{default:a(()=>[pn]),preview:a(()=>[un]),_:1}),t(e,{title:"C++",active:""},{default:a(()=>[ln]),preview:a(()=>[kn]),_:1}),t(e,{title:"Rust",active:""},{default:a(()=>[rn]),preview:a(()=>[bn]),_:1})]),_:1}),mn,dn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[yn]),preview:a(()=>[gn]),_:1}),t(e,{title:"Python"},{default:a(()=>[hn]),preview:a(()=>[wn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[_n]),preview:a(()=>[vn]),_:1})]),_:1}),fn,xn,Kn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Pn]),preview:a(()=>[Wn]),_:1}),t(e,{title:"Python"},{default:a(()=>[Sn]),preview:a(()=>[jn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[An]),preview:a(()=>[Cn]),_:1})]),_:1}),Tn,Bn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Dn]),preview:a(()=>[Rn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[zn]),preview:a(()=>[Mn]),_:1})]),_:1}),Nn,En,Jn,Un,Hn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Vn]),preview:a(()=>[Yn]),_:1}),t(e,{title:"Python"},{default:a(()=>[Ln]),preview:a(()=>[qn]),_:1}),t(e,{title:"C++"},{default:a(()=>[Fn]),preview:a(()=>[In]),_:1}),t(e,{title:"CLI"},{default:a(()=>[Xn]),preview:a(()=>[Zn]),_:1})]),_:1}),$n,Gn,n("p",null,[Qn,n("a",On,[ns,t(c)]),ss]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[as]),preview:a(()=>[ts]),_:1}),t(e,{title:"Python"},{default:a(()=>[es]),preview:a(()=>[os]),_:1})]),_:1}),cs,n("p",null,[ps,n("a",us,[ls,t(c)]),is]),ks,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[rs]),preview:a(()=>[bs]),_:1})]),_:1}),ms,n("p",null,[n("a",ds,[ys,t(c)]),gs,hs,ws,_s,vs,n("a",fs,[xs,t(c)]),Ks]),t(o,null,{default:a(()=>[t(e,{title:"Vue",active:""},{default:a(()=>[Ps]),preview:a(()=>[Ws]),_:1})]),_:1}),Ss,n("p",null,[n("a",js,[As,t(c)]),Cs,Ts,Bs,n("a",Ds,[Rs,t(c)]),zs,Ms,Ns]),t(o,null,{default:a(()=>[t(e,{title:"Svelte",active:""},{default:a(()=>[Es]),preview:a(()=>[Js]),_:1})]),_:1})],64)}var Ls=l(b,[["render",Us]]);export{Ls as default}; diff --git a/docs/.vuepress/dist/assets/keypairs-and-wallets.html.cc722935.js b/docs/.vuepress/dist/assets/keypairs-and-wallets.html.faaa4153.js similarity index 74% rename from docs/.vuepress/dist/assets/keypairs-and-wallets.html.cc722935.js rename to docs/.vuepress/dist/assets/keypairs-and-wallets.html.faaa4153.js index 815768d7e..5775b94b8 100644 --- a/docs/.vuepress/dist/assets/keypairs-and-wallets.html.cc722935.js +++ b/docs/.vuepress/dist/assets/keypairs-and-wallets.html.faaa4153.js @@ -1,24 +1,39 @@ -import{_ as u,r as p,o as i,c as r,b as t,w as a,a as n,F as k,d as s,e as l}from"./app.cfdf84e7.js";const b={},m=n("h1",{id:"keypairs-and-wallets",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#keypairs-and-wallets","aria-hidden":"true"},"#"),s(" Keypairs and Wallets")],-1),d=n("h2",{id:"how-to-generate-a-new-keypair",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-generate-a-new-keypair","aria-hidden":"true"},"#"),s(" How to generate a new Keypair")],-1),y=n("p",null,"Many of the different actions you can take with the various Solana libraries require a Keypair or Wallet. If you are connecting to a wallet, you do not have to worry. However, if you are in need of a keypair, you will need to generate one.",-1),g=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +import{_ as u,r as p,o as i,c as k,b as t,w as a,a as n,F as r,d as s,e as l}from"./app.2fbb9e96.js";const b={},m=n("h1",{id:"keypairs-and-wallets",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#keypairs-and-wallets","aria-hidden":"true"},"#"),s(" Keypairs and Wallets")],-1),d=n("h2",{id:"how-to-generate-a-new-keypair",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-generate-a-new-keypair","aria-hidden":"true"},"#"),s(" How to generate a new Keypair")],-1),y=n("p",null,"Many of the different actions you can take with the various Solana libraries require a Keypair or Wallet. If you are connecting to a wallet, you do not have to worry. However, if you are in need of a keypair, you will need to generate one.",-1),g=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"let"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br")])],-1),h=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),w=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),w=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),f=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),_=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("signature"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),_=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),f=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token comment"},"// clang++ generate_keypair.cpp -o generate_keypair -std=c++17 -lssl -lcrypto -lsodium"),s(` + +`),n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + `),n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"auto"),s(" public_key "),n("span",{class:"token operator"},"="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"public_key = "'),s(),n("span",{class:"token operator"},"<<"),s(" public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"return"),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br")])],-1),v=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),x=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("signature"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"let"),s(" wallet "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br")])],-1),v=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" wallet "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),x=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s(`$ solana-keygen new +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br")])],-1),K=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" wallet "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),P=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s(`$ solana-keygen new `),n("span",{class:"token comment"},"# pubkey: 9ZNTfG4NyQgxy2SWjSiQoUyBPEvXT2xo7fKc5hPYYJ7b"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),K=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen new -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),W=n("h2",{id:"how-to-restore-a-keypair-from-a-secret",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-restore-a-keypair-from-a-secret","aria-hidden":"true"},"#"),s(" How to restore a Keypair from a secret")],-1),P=n("p",null,"If you already have your secret, you can get your Keypair from the secret to test out your dApp.",-1),S=n("ol",null,[n("li",null,"From Bytes")],-1),A=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),W=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen new +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),S=n("h2",{id:"how-to-restore-a-keypair-from-a-secret",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-restore-a-keypair-from-a-secret","aria-hidden":"true"},"#"),s(" How to restore a Keypair from a secret")],-1),A=n("p",null,"If you already have your secret, you can get your Keypair from the secret to test out your dApp.",-1),C=n("ol",null,[n("li",null,"From Bytes")],-1),T=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSecretKey"),n("span",{class:"token punctuation"},"("),s(` @@ -30,7 +45,7 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br")])],-1),T=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSecretKey"),n("span",{class:"token punctuation"},"("),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br")])],-1),j=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSecretKey"),n("span",{class:"token punctuation"},"("),s(` Uint8Array`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"["),s(` `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"189"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"224"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"216"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"117"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"173"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"149"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"45"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"73"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"237"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"246"),n("span",{class:"token punctuation"},","),s(` @@ -38,7 +53,7 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),C=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),R=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair secret_key`),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"["),s(` `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(` @@ -47,17 +62,40 @@ secret_key`),n("span",{class:"token operator"},"="),s(),n("span",{class:"token p `),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"]"),s(` -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"bytes"),n("span",{class:"token punctuation"},"("),s("secret_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created Keypair with Public Key: {}"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),j=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("secret_key"),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"["),s(` +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_bytes"),n("span",{class:"token punctuation"},"("),s("secret_key"),n("span",{class:"token punctuation"},")"),s(` +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created Keypair with Public Key: {}"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),D=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("secret_key"),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"["),s(` `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"189"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"224"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"216"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"117"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"173"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"149"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"45"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"73"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"237"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"246"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"15"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"185"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"186"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"82"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"177"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"]"),s(` -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"bytes"),n("span",{class:"token punctuation"},"("),s("secret_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),B=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("signature"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"Signer"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_bytes"),n("span",{class:"token punctuation"},"("),s("secret_key"),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),N=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token comment"},"// clang++ keypair_from_seed.cpp -o keypair_from_seed -std=c++17 -lssl -lcrypto -lsodium"),s(` + +`),n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + `),n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token keyword"},"uint8_t"),s(" bytes"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},"]"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"{"),s(` + `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(` + `),n("span",{class:"token number"},"189"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"224"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"216"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"117"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"173"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"149"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"45"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"73"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"237"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"246"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"15"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"185"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"186"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"82"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"177"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(` + `),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(` + `),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` + `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` + Keypair key_pair `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"from_seed"),n("span",{class:"token punctuation"},"("),s("bytes"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"Created Keypair with Public Key: "'),s(),n("span",{class:"token operator"},"<<"),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br")])],-1),z=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token keyword"},"uint8_t"),s(" secret_key"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},"]"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"{"),s(` +`),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(` +`),n("span",{class:"token number"},"189"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"224"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"216"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"117"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"173"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"149"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"45"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"73"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"237"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"246"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"15"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"185"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"186"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"82"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"177"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(` +`),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(` +`),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` +`),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` +Keypair key_pair `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"from_seed"),n("span",{class:"token punctuation"},"("),s("secret_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),B=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("signature"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"Signer"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"let"),s(" secret_key"),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token punctuation"},"["),n("span",{class:"token keyword"},"u8"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token number"},"64"),n("span",{class:"token punctuation"},"]"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"["),s(` @@ -72,7 +110,7 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token macro property"},"println!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created keypair: {}"'),n("span",{class:"token punctuation"},","),s(" pubkey"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br")])],-1),R=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" secret_key"),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token punctuation"},"["),n("span",{class:"token keyword"},"u8"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token number"},"64"),n("span",{class:"token punctuation"},"]"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"["),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br")])],-1),M=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" secret_key"),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token punctuation"},"["),n("span",{class:"token keyword"},"u8"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token number"},"64"),n("span",{class:"token punctuation"},"]"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"["),s(` `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"189"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"224"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"216"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"117"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"173"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"149"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"45"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"73"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"237"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"246"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"15"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"185"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"186"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"82"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"177"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(` @@ -80,9 +118,9 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"let"),s(" wallet "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from_bytes"),n("span",{class:"token punctuation"},"("),n("span",{class:"token operator"},"&"),s("secret_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),M=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# input your secret into the Keypath listed under solana config get"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),D=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# input your secret into the Keypath listed under solana config get"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),N=n("ol",{start:"2"},[n("li",null,"From Base58 String")],-1),z=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),E=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# input your secret into the Keypath listed under solana config get"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),H=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# input your secret into the Keypath listed under solana config get"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),J=n("ol",{start:"2"},[n("li",null,"From Base58 String")],-1),U=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" bs58 "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"bs58"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -92,20 +130,19 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),E=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSecretKey"),n("span",{class:"token punctuation"},"("),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),Y=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSecretKey"),n("span",{class:"token punctuation"},"("),s(` bs58`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"decode"),n("span",{class:"token punctuation"},"("),s(` `),n("span",{class:"token string"},'"5MaiiCavjCmn9Hs1o3eznqDEhRwxo7pXiAYez7keQUviUkauRiTMD8DrESdrNjN8zd9mTmVhRvBJeg5vhyvgrAhG"'),s(` `),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br")])],-1),H=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(` base58 -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br")])],-1),V=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair b58_string `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"5MaiiCavjCmn9Hs1o3eznqDEhRwxo7pXiAYez7keQUviUkauRiTMD8DrESdrNjN8zd9mTmVhRvBJeg5vhyvgrAhG"'),s(` -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),s("base58"),n("span",{class:"token punctuation"},"."),s("b58decode"),n("span",{class:"token punctuation"},"("),s("b58_string"),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created Keypair with Public Key: {}"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),U=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("b58_string "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"5MaiiCavjCmn9Hs1o3eznqDEhRwxo7pXiAYez7keQUviUkauRiTMD8DrESdrNjN8zd9mTmVhRvBJeg5vhyvgrAhG"'),s(` -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),s("base58"),n("span",{class:"token punctuation"},"."),s("b58decode"),n("span",{class:"token punctuation"},"("),s("b58_string"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),V=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("signature"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"Signer"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_string"),n("span",{class:"token punctuation"},"("),s("b58_string"),n("span",{class:"token punctuation"},")"),s(` +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created Keypair with Public Key: {}"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br")])],-1),q=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("b58_string "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"5MaiiCavjCmn9Hs1o3eznqDEhRwxo7pXiAYez7keQUviUkauRiTMD8DrESdrNjN8zd9mTmVhRvBJeg5vhyvgrAhG"'),s(` +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_string"),n("span",{class:"token punctuation"},"("),s("b58_string"),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),L=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("signature"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"Signer"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"let"),s(" wallet "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from_base58_string"),n("span",{class:"token punctuation"},"("),s(` @@ -114,10 +151,10 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token keyword"},"let"),s(" pubkey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Signer"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token operator"},"&"),s("wallet"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token macro property"},"println!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created keypair: {}"'),n("span",{class:"token punctuation"},","),s(" pubkey"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br")])],-1),J=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" wallet "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from_base58_string"),n("span",{class:"token punctuation"},"("),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br")])],-1),F=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" wallet "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from_base58_string"),n("span",{class:"token punctuation"},"("),s(` `),n("span",{class:"token string"},'"5MaiiCavjCmn9Hs1o3eznqDEhRwxo7pXiAYez7keQUviUkauRiTMD8DrESdrNjN8zd9mTmVhRvBJeg5vhyvgrAhG"'),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),Y=n("h2",{id:"how-to-verify-a-keypair",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-verify-a-keypair","aria-hidden":"true"},"#"),s(" How to verify a Keypair")],-1),q=n("p",null,"If you are given a keypair, you can verify whether or not the secret matches the given public key",-1),L=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),I=n("h2",{id:"how-to-verify-a-keypair",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-verify-a-keypair","aria-hidden":"true"},"#"),s(" How to verify a Keypair")],-1),X=n("p",null,"If you are given a keypair, you can verify whether or not the secret matches the given public key",-1),Z=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"const"),s(" publicKey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),s(` @@ -134,7 +171,7 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"==="),s(" publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token comment"},"// true"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br")])],-1),I=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" publicKey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br")])],-1),$=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" publicKey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSecretKey"),n("span",{class:"token punctuation"},"("),s(` Uint8Array`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"["),s(` `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(` @@ -145,10 +182,10 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"==="),s(" publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token comment"},"// true"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),F=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("publickey "),n("span",{class:"token keyword"},"import"),s(` PublicKey +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),G=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("pubkey "),n("span",{class:"token keyword"},"import"),s(` Pubkey -public_key `),n("span",{class:"token operator"},"="),s(" PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p"'),n("span",{class:"token punctuation"},")"),s(` +public_key `),n("span",{class:"token operator"},"="),s(" Pubkey"),n("span",{class:"token punctuation"},"."),s("from_string"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p"'),n("span",{class:"token punctuation"},")"),s(` keys `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"["),s(` `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(` @@ -156,11 +193,11 @@ keys `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctu `),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"]"),s(` -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"bytes"),n("span",{class:"token punctuation"},"("),s("keys"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_bytes"),n("span",{class:"token punctuation"},"("),s("keys"),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},"."),s("to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=="),s(" public_key"),n("span",{class:"token punctuation"},"."),s("to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=="),s(" public_key"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"# True"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br")])],-1),X=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("public_key "),n("span",{class:"token operator"},"="),s(" PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p"'),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br")])],-1),Q=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("public_key "),n("span",{class:"token operator"},"="),s(" Pubkey"),n("span",{class:"token punctuation"},"."),s("from_string"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p"'),n("span",{class:"token punctuation"},")"),s(` keys `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"["),s(` `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(` @@ -168,13 +205,44 @@ keys `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctu `),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"]"),s(` -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"bytes"),n("span",{class:"token punctuation"},"("),s("keys"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_bytes"),n("span",{class:"token punctuation"},"("),s("keys"),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},"."),s("to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=="),s(" public_key"),n("span",{class:"token punctuation"},"."),s("to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=="),s(" public_key"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"# True"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br")])],-1),Z=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana-keygen verify "),n("span",{class:"token operator"},"<"),s("PUBKEY"),n("span",{class:"token operator"},">"),s(` prompt:// -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),$=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana-keygen verify "),n("span",{class:"token operator"},"<"),s("PUBKEY"),n("span",{class:"token operator"},">"),s(` prompt:// -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),G=n("h2",{id:"how-to-check-if-a-public-key-has-an-associated-private-key",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-check-if-a-public-key-has-an-associated-private-key","aria-hidden":"true"},"#"),s(" How to check if a public key has an associated private key")],-1),Q=n("p",null,"In certain special cases (e.g. a Program Derived Address), public keys may not have a private key associated with them. You can check this by looking to see if the public key lies on the ed25519 curve. Only public keys that lie on the curve can be controlled by users with wallets.",-1),O=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br")])],-1),O=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token comment"},"// clang++ verify_keypair.cpp -o verify_keypair -std=c++17 -lssl -lcrypto -lsodium"),s(` + +`),n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + PublicKey public_key `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token keyword"},"uint8_t"),s(" bytes"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},"]"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"{"),s(` + `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(` + `),n("span",{class:"token number"},"189"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"224"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"216"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"117"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"173"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"149"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"45"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"73"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"237"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"246"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"15"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"185"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"186"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"82"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"177"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(` + `),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(` + `),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` + `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` + Keypair key_pair `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"from_seed"),n("span",{class:"token punctuation"},"("),s("bytes"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token punctuation"},"("),s("public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br")])],-1),nn=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[s("PublicKey public_key "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token keyword"},"uint8_t"),s(" bytes"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},"]"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"{"),s(` +`),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(` +`),n("span",{class:"token number"},"189"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"224"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"216"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"117"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"173"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"149"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"45"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"73"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"237"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"246"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"15"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"185"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"186"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"82"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"177"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(` +`),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(` +`),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` +`),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` +Keypair key_pair `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"from_seed"),n("span",{class:"token punctuation"},"("),s("bytes"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + +std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token punctuation"},"("),s("public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=="),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token comment"},"// 1"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br")])],-1),sn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana-keygen verify "),n("span",{class:"token operator"},"<"),s("PUBKEY"),n("span",{class:"token operator"},">"),s(` prompt:// +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),an=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana-keygen verify "),n("span",{class:"token operator"},"<"),s("PUBKEY"),n("span",{class:"token operator"},">"),s(` prompt:// +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),tn=n("h2",{id:"how-to-check-if-a-public-key-has-an-associated-private-key",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-check-if-a-public-key-has-an-associated-private-key","aria-hidden":"true"},"#"),s(" How to check if a public key has an associated private key")],-1),en=n("p",null,"In certain special cases (e.g. a Program Derived Address), public keys may not have a private key associated with them. You can check this by looking to see if the public key lies on the ed25519 curve. Only public keys that lie on the curve can be controlled by users with wallets.",-1),on=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token keyword"},"function"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token comment"},"// Note that Keypair.generate() will always give a public key that is valid for users"),s(` @@ -188,23 +256,34 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token keyword"},"const"),s(" errorPubkey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"testPubkey"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token comment"},"// Is not a valid public key"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br")])],-1),nn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" key "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br")])],-1),cn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" key "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("PublicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"isOnCurve"),n("span",{class:"token punctuation"},"("),s("key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBytes"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),sn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("publickey "),n("span",{class:"token keyword"},"import"),s(` PublicKey -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("utils"),n("span",{class:"token punctuation"},"."),s("ed25519_base "),n("span",{class:"token keyword"},"import"),s(` is_on_curve +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),pn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("pubkey "),n("span",{class:"token keyword"},"import"),s(` Pubkey `),n("span",{class:"token comment"},"# Note that Keypair() will always give a public key that is valid for users"),s(` -key `),n("span",{class:"token operator"},"="),s(" PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},"'5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY'"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# Valid public key"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("is_on_curve"),n("span",{class:"token punctuation"},"("),s("key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# Lies on the ed25519 curve and is suitable for users"),s(` +key `),n("span",{class:"token operator"},"="),s(" Pubkey"),n("span",{class:"token punctuation"},"."),s("from_string"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},"'5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY'"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# Valid public key"),s(` +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("key"),n("span",{class:"token punctuation"},"."),s("is_on_curve"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# Lies on the ed25519 curve and is suitable for users"),s(` + +off_curve_address `),n("span",{class:"token operator"},"="),s(" Pubkey"),n("span",{class:"token punctuation"},"."),s("from_string"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},"'4BJXYkfvg37zEmBbsacZjeQDpTNx91KppxFJxRqrz48e'"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# Valid public key"),s(` +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("off_curve_address"),n("span",{class:"token punctuation"},"."),s("is_on_curve"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# Not on the ed25519 curve, therefore not suitable for users"),s(` + +error_pubkey `),n("span",{class:"token operator"},"="),s(" Pubkey"),n("span",{class:"token punctuation"},"."),s("from_string"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"testPubkey"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token comment"},"# Is not a valid public key"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),ln=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("key "),n("span",{class:"token operator"},"="),s(" Pubkey"),n("span",{class:"token punctuation"},"."),s("from_string"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},"'5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY'"),n("span",{class:"token punctuation"},")"),s(` +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("key"),n("span",{class:"token punctuation"},"."),s("is_on_curve"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),un=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},"")]),s(` +`),n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},"")]),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` +`),n("span",{class:"token punctuation"},"{"),s(` + `),n("span",{class:"token keyword"},"auto"),s(" public_key "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -off_curve_address `),n("span",{class:"token operator"},"="),s(" PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},"'4BJXYkfvg37zEmBbsacZjeQDpTNx91KppxFJxRqrz48e'"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# Valid public key"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("PublicKey"),n("span",{class:"token punctuation"},"."),s("_is_on_curve"),n("span",{class:"token punctuation"},"("),s("off_curve_address"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# Not on the ed25519 curve, therefore not suitable for users"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(" public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"is_on_curve"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` -error_pubkey `),n("span",{class:"token operator"},"="),s(" PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"testPubkey"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token comment"},"# Is not a valid public key"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br")])],-1),an=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("key "),n("span",{class:"token operator"},"="),s(" PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},"'5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY'"),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("is_on_curve"),n("span",{class:"token punctuation"},"("),s("key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),tn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("pubkey"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Pubkey"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token keyword"},"return"),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),kn=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token keyword"},"auto"),s(" public_key "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(" public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"is_on_curve"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),rn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("pubkey"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Pubkey"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("std"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token keyword"},"str"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token class-name"},"FromStr"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -217,21 +296,21 @@ error_pubkey `),n("span",{class:"token operator"},"="),s(" PublicKey"),n("span", `),n("span",{class:"token keyword"},"let"),s(" error_pubkey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Pubkey"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from_str"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"testPubkey"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token comment"},"// Is not a valid public key"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br")])],-1),en=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" pubkey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Pubkey"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from_str"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br")])],-1),bn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" pubkey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Pubkey"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from_str"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token macro property"},"println!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"{:?}"'),n("span",{class:"token punctuation"},","),s(" pubkey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"is_on_curve"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),on=n("h2",{id:"how-to-generate-a-mnemonic-phrase",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-generate-a-mnemonic-phrase","aria-hidden":"true"},"#"),s(" How to generate a mnemonic phrase")],-1),cn=n("p",null,"If you're creating a wallet, you will need to generate a mnemonic phrase so that the user can save it as a backup.",-1),pn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" bip39 "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"bip39"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),mn=n("h2",{id:"how-to-generate-a-mnemonic-phrase",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-generate-a-mnemonic-phrase","aria-hidden":"true"},"#"),s(" How to generate a mnemonic phrase")],-1),dn=n("p",null,"If you're creating a wallet, you will need to generate a mnemonic phrase so that the user can save it as a backup.",-1),yn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" bip39 "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"bip39"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" mnemonic "),n("span",{class:"token operator"},"="),s(" bip39"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generateMnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),ln=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" mnemonic "),n("span",{class:"token operator"},"="),s(" bip39"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generateMnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),un=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" mnemonic "),n("span",{class:"token keyword"},"import"),s(` Mnemonic +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),gn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" mnemonic "),n("span",{class:"token operator"},"="),s(" bip39"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generateMnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),hn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" mnemonic "),n("span",{class:"token keyword"},"import"),s(` Mnemonic mnemo `),n("span",{class:"token operator"},"="),s(" Mnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"english"'),n("span",{class:"token punctuation"},")"),s(` words `),n("span",{class:"token operator"},"="),s(" mnemo"),n("span",{class:"token punctuation"},"."),s("generate"),n("span",{class:"token punctuation"},"("),s("strength"),n("span",{class:"token operator"},"="),n("span",{class:"token number"},"256"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),rn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("mnemo "),n("span",{class:"token operator"},"="),s(" Mnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"english"'),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),wn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("mnemo "),n("span",{class:"token operator"},"="),s(" Mnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"english"'),n("span",{class:"token punctuation"},")"),s(` words `),n("span",{class:"token operator"},"="),s(" mnemo"),n("span",{class:"token punctuation"},"."),s("generate"),n("span",{class:"token punctuation"},"("),s("strength"),n("span",{class:"token operator"},"="),n("span",{class:"token number"},"256"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),kn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen new -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),bn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen new -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),mn=n("h2",{id:"how-to-restore-a-keypair-from-a-mnemonic-phrase",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-restore-a-keypair-from-a-mnemonic-phrase","aria-hidden":"true"},"#"),s(" How to restore a Keypair from a mnemonic phrase")],-1),dn=n("p",null,"Many wallet extensions use mnemonics to represent their secret keys. You can convert the mnemonic to Keypairs for local testing.",-1),yn=n("ol",null,[n("li",null,"BIP39 - creating a single wallet")],-1),gn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),_n=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen new +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),fn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen new +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),vn=n("h2",{id:"how-to-restore-a-keypair-from-a-mnemonic-phrase",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-restore-a-keypair-from-a-mnemonic-phrase","aria-hidden":"true"},"#"),s(" How to restore a Keypair from a mnemonic phrase")],-1),xn=n("p",null,"Many wallet extensions use mnemonics to represent their secret keys. You can convert the mnemonic to Keypairs for local testing.",-1),Kn=n("ol",null,[n("li",null,"BIP39 - creating a single wallet")],-1),Pn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" bip39 "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"bip39"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -241,23 +320,23 @@ words `),n("span",{class:"token operator"},"="),s(" mnemo"),n("span",{class:"tok `),n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSeed"),n("span",{class:"token punctuation"},"("),s("seed"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"slice"),n("span",{class:"token punctuation"},"("),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"32"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),n("span",{class:"token template-string"},[n("span",{class:"token template-punctuation string"},"`"),n("span",{class:"token interpolation"},[n("span",{class:"token interpolation-punctuation punctuation"},"${"),s("keypair"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token interpolation-punctuation punctuation"},"}")]),n("span",{class:"token template-punctuation string"},"`")]),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token comment"},"// 5ZWj7a1f8tWkjBESHKgrLmXshuXxqeY9SYcfbshpAqPG"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),hn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" mnemonic "),n("span",{class:"token operator"},"="),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),Wn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" mnemonic "),n("span",{class:"token operator"},"="),s(` `),n("span",{class:"token string"},'"pill tomorrow foster begin walnut borrow virtual kick shift mutual shoe scatter"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" seed "),n("span",{class:"token operator"},"="),s(" bip39"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"mnemonicToSeedSync"),n("span",{class:"token punctuation"},"("),s("mnemonic"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token string"},'""'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token comment"},"// (mnemonic, password)"),s(` `),n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSeed"),n("span",{class:"token punctuation"},"("),s("seed"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"slice"),n("span",{class:"token punctuation"},"("),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"32"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),wn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),Sn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair `),n("span",{class:"token keyword"},"from"),s(" mnemonic "),n("span",{class:"token keyword"},"import"),s(` Mnemonic mnemo `),n("span",{class:"token operator"},"="),s(" Mnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"english"'),n("span",{class:"token punctuation"},")"),s(` seed `),n("span",{class:"token operator"},"="),s(" mnemo"),n("span",{class:"token punctuation"},"."),s("to_seed"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"pill tomorrow foster begin walnut borrow virtual kick shift mutual shoe scatter"'),n("span",{class:"token punctuation"},")"),s(` -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),s("seed"),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created Keypair with Public Key: {}"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),fn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("mnemo "),n("span",{class:"token operator"},"="),s(" Mnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"english"'),n("span",{class:"token punctuation"},")"),s(` +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_bytes"),n("span",{class:"token punctuation"},"("),s("seed"),n("span",{class:"token punctuation"},")"),s(` +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created Keypair with Public Key: {}"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),An=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("mnemo "),n("span",{class:"token operator"},"="),s(" Mnemonic"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"english"'),n("span",{class:"token punctuation"},")"),s(` seed `),n("span",{class:"token operator"},"="),s(" mnemo"),n("span",{class:"token punctuation"},"."),s("to_seed"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"pill tomorrow foster begin walnut borrow virtual kick shift mutual shoe scatter"'),n("span",{class:"token punctuation"},")"),s(` -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),s("seed"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),_n=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen recover -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),vn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen recover -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),xn=n("ol",{start:"2"},[n("li",null,"BIP44 (multiple wallets, also known HD wallets)")],-1),Kn=n("p",null,"You can make multiple wallets from a single seed - also known as 'Hierarchical Deterministic wallets' or HD wallets:",-1),Wn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_bytes"),n("span",{class:"token punctuation"},"("),s("seed"),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),Cn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen recover +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Tn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen recover +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),jn=n("ol",{start:"2"},[n("li",null,"BIP44 (multiple wallets, also known HD wallets)")],-1),Rn=n("p",null,"You can make multiple wallets from a single seed - also known as 'Hierarchical Deterministic wallets' or HD wallets:",-1),Dn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" HDKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"micro-ed25519-hdkey"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" bip39 "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"bip39"'),n("span",{class:"token punctuation"},";"),s(` @@ -272,7 +351,7 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),n("span",{class:"token template-string"},[n("span",{class:"token template-punctuation string"},"`"),n("span",{class:"token interpolation"},[n("span",{class:"token interpolation-punctuation punctuation"},"${"),s("path"),n("span",{class:"token interpolation-punctuation punctuation"},"}")]),n("span",{class:"token string"}," => "),n("span",{class:"token interpolation"},[n("span",{class:"token interpolation-punctuation punctuation"},"${"),s("keypair"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token interpolation-punctuation punctuation"},"}")]),n("span",{class:"token template-punctuation string"},"`")]),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br")])],-1),Pn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" mnemonic "),n("span",{class:"token operator"},"="),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br")])],-1),Nn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" mnemonic "),n("span",{class:"token operator"},"="),s(` `),n("span",{class:"token string"},'"neither lonely flavor argue grass remind eye tag avocado spot unusual intact"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" seed "),n("span",{class:"token operator"},"="),s(" bip39"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"mnemonicToSeedSync"),n("span",{class:"token punctuation"},"("),s("mnemonic"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token string"},'""'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(),n("span",{class:"token comment"},"// (mnemonic, password)"),s(` `),n("span",{class:"token keyword"},"for"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"let"),s(" i "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(" i "),n("span",{class:"token operator"},"<"),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},";"),s(" i"),n("span",{class:"token operator"},"++"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -280,9 +359,9 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"fromSeed"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"derivePath"),n("span",{class:"token punctuation"},"("),s("path"),n("span",{class:"token punctuation"},","),s(" seed"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toString"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"hex"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),s("key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),n("span",{class:"token template-string"},[n("span",{class:"token template-punctuation string"},"`"),n("span",{class:"token interpolation"},[n("span",{class:"token interpolation-punctuation punctuation"},"${"),s("path"),n("span",{class:"token interpolation-punctuation punctuation"},"}")]),n("span",{class:"token string"}," => "),n("span",{class:"token interpolation"},[n("span",{class:"token interpolation-punctuation punctuation"},"${"),s("keypair"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token interpolation-punctuation punctuation"},"}")]),n("span",{class:"token template-punctuation string"},"`")]),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),Sn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana-keygen recover "),n("span",{class:"token string"},"'prompt:?key=0/0'"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),An=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana-keygen recover "),n("span",{class:"token string"},"'prompt:?key=0/0'"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Tn=n("h2",{id:"how-to-generate-a-vanity-address",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-generate-a-vanity-address","aria-hidden":"true"},"#"),s(" How to generate a vanity address")],-1),Cn=n("p",null,'Vanity publickeys, or custom addresses are keys that have start with specific characters. For example, a person may want a publickey to start with "elv1s", or maybe even "cook". These can help other people remember who the key belongs to, making the key more easily identifiable.',-1),jn=n("p",null,"Note: The more characters in your vanity address, the longer it will take.",-1),Bn=n("div",{class:"custom-container warning"},[n("p",{class:"custom-container-title"},"WARNING"),n("p",null,"You should just use the CLI for this task. The Python and TypeScript examples are for illustrative purposes and are much slower than the CLI.")],-1),Rn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),zn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana-keygen recover "),n("span",{class:"token string"},"'prompt:?key=0/0'"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Bn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana-keygen recover "),n("span",{class:"token string"},"'prompt:?key=0/0'"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Mn=n("h2",{id:"how-to-generate-a-vanity-address",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-generate-a-vanity-address","aria-hidden":"true"},"#"),s(" How to generate a vanity address")],-1),En=n("p",null,'Vanity publickeys, or custom addresses are keys that have start with specific characters. For example, a person may want a publickey to start with "elv1s", or maybe even "cook". These can help other people remember who the key belongs to, making the key more easily identifiable.',-1),Hn=n("p",null,"Note: The more characters in your vanity address, the longer it will take.",-1),Jn=n("div",{class:"custom-container warning"},[n("p",{class:"custom-container-title"},"WARNING"),n("p",null,"You should just use the CLI for this task. The Python and TypeScript examples are for illustrative purposes and are much slower than the CLI.")],-1),Un=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"let"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` @@ -290,23 +369,42 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),Mn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),Yn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"while"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token operator"},"!"),s("keypair"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"startsWith"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"elv1s"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),Dn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),Vn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"while"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"str"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},":"),n("span",{class:"token number"},"5"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token operator"},"!="),n("span",{class:"token string"},'"elv1s"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},":"),s(` +`),n("span",{class:"token keyword"},"while"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"str"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},":"),n("span",{class:"token number"},"5"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token operator"},"!="),n("span",{class:"token string"},'"elv1s"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},":"),s(` keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created Keypair with Public Key: {}"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),Nn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"while"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"str"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},":"),n("span",{class:"token number"},"5"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token operator"},"!="),n("span",{class:"token string"},'"elv1s"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},":"),s(` +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Created Keypair with Public Key: {}"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),qn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` +`),n("span",{class:"token keyword"},"while"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"str"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"["),n("span",{class:"token punctuation"},":"),n("span",{class:"token number"},"5"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token operator"},"!="),n("span",{class:"token string"},'"elv1s"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},":"),s(` keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),zn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen grind --starts-with e1v1s:1 -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),En=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen grind --starts-with e1v1s:1 -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Hn=n("h2",{id:"how-to-sign-and-verify-messages-with-wallets",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-sign-and-verify-messages-with-wallets","aria-hidden":"true"},"#"),s(" How to sign and verify messages with wallets")],-1),Un=n("p",null,"The primary function of a keypair is to sign messages and enable verification of the signature. Verification of a signature allows the recipient to be sure that the data was signed by the owner of a specific private key.",-1),Vn=s("To do so we will import the "),Jn={href:"https://www.npmjs.com/package/tweetnacl",target:"_blank",rel:"noopener noreferrer"},Yn=s("TweetNaCl"),qn=s(" crypto library."),Ln=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),Ln=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token comment"},"// clang++ vanity_keypair.cpp -o vanity_keypair -std=c++17 -lssl -lcrypto -lsodium"),s(` + +`),n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + `),n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"while"),s(),n("span",{class:"token punctuation"},"("),s("key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"substr"),n("span",{class:"token punctuation"},"("),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"5"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"!="),s(),n("span",{class:"token string"},'"elv1s"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + key_pair `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token punctuation"},"}"),s(` + + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"Created Keypair with Public Key: "'),s(),n("span",{class:"token operator"},"<<"),s(" key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br")])],-1),Fn=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token keyword"},"while"),s(),n("span",{class:"token punctuation"},"("),s("key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"substr"),n("span",{class:"token punctuation"},"("),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"5"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"!="),s(),n("span",{class:"token string"},'"elv1s"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + key_pair `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),In=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen grind --starts-with e1v1s:1 +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Xn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-keygen grind --starts-with e1v1s:1 +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Zn=n("h2",{id:"how-to-sign-and-verify-messages-with-wallets",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-sign-and-verify-messages-with-wallets","aria-hidden":"true"},"#"),s(" How to sign and verify messages with wallets")],-1),$n=n("p",null,"The primary function of a keypair is to sign messages and enable verification of the signature. Verification of a signature allows the recipient to be sure that the data was signed by the owner of a specific private key.",-1),Gn=s("To do so we will import the "),Qn={href:"https://www.npmjs.com/package/tweetnacl",target:"_blank",rel:"noopener noreferrer"},On=s("TweetNaCl"),ns=s(" crypto library."),ss=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(" nacl "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"tweetnacl"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" decodeUTF8 "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"tweetnacl-util"'),n("span",{class:"token punctuation"},";"),s(` @@ -332,7 +430,7 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("result"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br")])],-1),In=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" message "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"The quick brown fox jumps over the lazy dog"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br")])],-1),as=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" message "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"The quick brown fox jumps over the lazy dog"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" messageBytes "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"decodeUTF8"),n("span",{class:"token punctuation"},"("),s("message"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" signature "),n("span",{class:"token operator"},"="),s(" nacl"),n("span",{class:"token punctuation"},"."),s("sign"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"detached"),n("span",{class:"token punctuation"},"("),s("messageBytes"),n("span",{class:"token punctuation"},","),s(" keypair"),n("span",{class:"token punctuation"},"."),s("secretKey"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` @@ -343,42 +441,26 @@ keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class: `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("result"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),Fn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" nacl"),n("span",{class:"token punctuation"},"."),s("signing "),n("span",{class:"token keyword"},"import"),s(` VerifyKey -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),ts=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair secret_key `),n("span",{class:"token operator"},"="),s(" "),n("span",{class:"token punctuation"},"["),s(` `),n("span",{class:"token number"},"174"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"47"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"154"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"16"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"202"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"193"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"206"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"113"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"199"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"190"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"133"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"169"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"175"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"31"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"56"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"222"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"138"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"189"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"224"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"216"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"117"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"173"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"149"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"53"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"45"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"73"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"237"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"246"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"15"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"185"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"186"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"82"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"177"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"148"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"69"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"241"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"227"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"167"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"80"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"141"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"240"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"121"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"35"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"172"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"247"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"68"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"251"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"226"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"218"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"48"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"63"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"176"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"109"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"168"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"89"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"238"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"135"),n("span",{class:"token punctuation"},","),s(` - `),n("span",{class:"token punctuation"},"]"),s(` - -keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_secret_key"),n("span",{class:"token punctuation"},"("),n("span",{class:"token builtin"},"bytes"),n("span",{class:"token punctuation"},"("),s("secret_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -pubkey_bytes `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token builtin"},"bytes"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),s(` -message `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"The quick brown fox jumps over the lazy dog"'),s(` -message_bytes `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token builtin"},"bytes"),n("span",{class:"token punctuation"},"("),s("message"),n("span",{class:"token punctuation"},","),n("span",{class:"token string"},"'utf8'"),n("span",{class:"token punctuation"},")"),s(` -signed_message `),n("span",{class:"token operator"},"="),s(" keypair"),n("span",{class:"token punctuation"},"."),s("sign"),n("span",{class:"token punctuation"},"("),s("message_bytes"),n("span",{class:"token punctuation"},")"),s(` - -verify_sign `),n("span",{class:"token operator"},"="),s(" VerifyKey"),n("span",{class:"token punctuation"},"("),s(` - pubkey_bytes -`),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),s("verify"),n("span",{class:"token punctuation"},"("),s(` - smessage`),n("span",{class:"token operator"},"="),s("message_bytes"),n("span",{class:"token punctuation"},","),s(` - signature`),n("span",{class:"token operator"},"="),s("signed_message"),n("span",{class:"token punctuation"},"."),s(`signature -`),n("span",{class:"token punctuation"},")"),s(` - -`),n("span",{class:"token comment"},"#Returns original message if the signature has not been tampered with"),s(` -`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("verify_sign"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br")])],-1),Xn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("message "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"The quick brown fox jumps over the lazy dog"'),s(` -message_bytes `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token builtin"},"bytes"),n("span",{class:"token punctuation"},"("),s("message"),n("span",{class:"token punctuation"},","),n("span",{class:"token string"},"'utf8'"),n("span",{class:"token punctuation"},")"),s(` -signed_message `),n("span",{class:"token operator"},"="),s(" keypair"),n("span",{class:"token punctuation"},"."),s("sign"),n("span",{class:"token punctuation"},"("),s("message_bytes"),n("span",{class:"token punctuation"},")"),s(` - -verify_sign `),n("span",{class:"token operator"},"="),s(" VerifyKey"),n("span",{class:"token punctuation"},"("),s(` - pubkey_bytes -`),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),s("verify"),n("span",{class:"token punctuation"},"("),s(` - smessage`),n("span",{class:"token operator"},"="),s("message_bytes"),n("span",{class:"token punctuation"},","),s(` - signature`),n("span",{class:"token operator"},"="),s("signed_message"),n("span",{class:"token punctuation"},"."),s(`signature -`),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),Zn=n("h2",{id:"how-to-connect-to-a-wallet",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-connect-to-a-wallet","aria-hidden":"true"},"#"),s(" How to connect to a wallet")],-1),$n=s("Solana's "),Gn={href:"https://github.com/solana-labs/wallet-adapter",target:"_blank",rel:"noopener noreferrer"},Qn=s("wallet-adapter"),On=s(" libraries make it easy to manage wallet connections client-side."),ns=l(`

    React

    Run the following command to install the required dependencies:

    yarn add @solana/wallet-adapter-react @solana/wallet-adapter-react-ui @solana/wallet-adapter-base @solana/wallet-adapter-wallets
    -

    The React wallet-adapter libraries allow us to persist and access wallet connection states through hooks and Context providers, namely, useWallet, WalletProvider, useConnection, and ConnectionProvider. The React App must be wrapped with WalletProvider and ConnectionProvider.

    Additionally, we can prompt users to connect by using useWalletModal to toggle visibility of the connection modal and wrapping the App with WalletModalProvider from @solana/wallet-adapter-react-ui, as well. The connection modal will handle that connection flow for us, so we can just listen for when a wallet has connected. We know a wallet is connected when the useWallet response has a non-null wallet property. Vice versa, if that property is null, we know the wallet is disconnected.

    `,5),ss=n("div",{class:"language-tsx ext-tsx line-numbers-mode"},[n("pre",{class:"language-tsx"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(" React"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token punctuation"},"{"),s(" useMemo"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token constant"},"FC"),n("span",{class:"token punctuation"},","),s(" PropsWithChildren "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"react"'),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token punctuation"},"]"),s(` +keypair `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),s("from_bytes"),n("span",{class:"token punctuation"},"("),s("secret_key"),n("span",{class:"token punctuation"},")"),s(` +message `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'b"The quick brown fox jumps over the lazy dog"'),s(` +signature `),n("span",{class:"token operator"},"="),s(" keypair"),n("span",{class:"token punctuation"},"."),s("sign_message"),n("span",{class:"token punctuation"},"("),s("message"),n("span",{class:"token punctuation"},")"),s(` +verify_sign `),n("span",{class:"token operator"},"="),s(" signature"),n("span",{class:"token punctuation"},"."),s("verify"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(" message"),n("span",{class:"token punctuation"},")"),s(` + +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("verify_sign"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# bool"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br")])],-1),es=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("message "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'b"The quick brown fox jumps over the lazy dog"'),s(` +signature `),n("span",{class:"token operator"},"="),s(" keypair"),n("span",{class:"token punctuation"},"."),s("sign_message"),n("span",{class:"token punctuation"},"("),s("message"),n("span",{class:"token punctuation"},")"),s(` +verify_sign `),n("span",{class:"token operator"},"="),s(" signature"),n("span",{class:"token punctuation"},"."),s("verify"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(" message"),n("span",{class:"token punctuation"},")"),s(` + +`),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("verify_sign"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token comment"},"# bool"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br")])],-1),os=n("h2",{id:"how-to-connect-to-a-wallet",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-connect-to-a-wallet","aria-hidden":"true"},"#"),s(" How to connect to a wallet")],-1),cs=s("Solana's "),ps={href:"https://github.com/solana-labs/wallet-adapter",target:"_blank",rel:"noopener noreferrer"},ls=s("wallet-adapter"),us=s(" libraries make it easy to manage wallet connections client-side."),is=l(`

    React

    Run the following command to install the required dependencies:

    yarn add @solana/wallet-adapter-react @solana/wallet-adapter-react-ui @solana/wallet-adapter-base @solana/wallet-adapter-wallets
    +

    The React wallet-adapter libraries allow us to persist and access wallet connection states through hooks and Context providers, namely, useWallet, WalletProvider, useConnection, and ConnectionProvider. The React App must be wrapped with WalletProvider and ConnectionProvider.

    Additionally, we can prompt users to connect by using useWalletModal to toggle visibility of the connection modal and wrapping the App with WalletModalProvider from @solana/wallet-adapter-react-ui, as well. The connection modal will handle that connection flow for us, so we can just listen for when a wallet has connected. We know a wallet is connected when the useWallet response has a non-null wallet property. Vice versa, if that property is null, we know the wallet is disconnected.

    `,5),ks=n("div",{class:"language-tsx ext-tsx line-numbers-mode"},[n("pre",{class:"language-tsx"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(" React"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token punctuation"},"{"),s(" useMemo"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token constant"},"FC"),n("span",{class:"token punctuation"},","),s(" PropsWithChildren "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"react"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` ConnectionProvider`),n("span",{class:"token punctuation"},","),s(` WalletProvider`),n("span",{class:"token punctuation"},","),s(` @@ -460,7 +542,7 @@ verify_sign `),n("span",{class:"token operator"},"="),s(" VerifyKey"),n("span",{ `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br"),n("span",{class:"line-number"},"69"),n("br"),n("span",{class:"line-number"},"70"),n("br"),n("span",{class:"line-number"},"71"),n("br"),n("span",{class:"line-number"},"72"),n("br"),n("span",{class:"line-number"},"73"),n("br"),n("span",{class:"line-number"},"74"),n("br"),n("span",{class:"line-number"},"75"),n("br"),n("span",{class:"line-number"},"76"),n("br"),n("span",{class:"line-number"},"77"),n("br"),n("span",{class:"line-number"},"78"),n("br"),n("span",{class:"line-number"},"79"),n("br"),n("span",{class:"line-number"},"80"),n("br"),n("span",{class:"line-number"},"81"),n("br"),n("span",{class:"line-number"},"82"),n("br")])],-1),as=n("div",{class:"language-tsx ext-tsx line-numbers-mode"},[n("pre",{class:"language-tsx"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token punctuation"},"{"),s(" wallet "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"useWallet"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br"),n("span",{class:"line-number"},"69"),n("br"),n("span",{class:"line-number"},"70"),n("br"),n("span",{class:"line-number"},"71"),n("br"),n("span",{class:"line-number"},"72"),n("br"),n("span",{class:"line-number"},"73"),n("br"),n("span",{class:"line-number"},"74"),n("br"),n("span",{class:"line-number"},"75"),n("br"),n("span",{class:"line-number"},"76"),n("br"),n("span",{class:"line-number"},"77"),n("br"),n("span",{class:"line-number"},"78"),n("br"),n("span",{class:"line-number"},"79"),n("br"),n("span",{class:"line-number"},"80"),n("br"),n("span",{class:"line-number"},"81"),n("br"),n("span",{class:"line-number"},"82"),n("br")])],-1),rs=n("div",{class:"language-tsx ext-tsx line-numbers-mode"},[n("pre",{class:"language-tsx"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token punctuation"},"{"),s(" wallet "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"useWallet"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token punctuation"},"{"),s(" setVisible "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token function"},"useWalletModal"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(),n("span",{class:"token function-variable function"},"onRequestConnectWallet"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -479,8 +561,8 @@ verify_sign `),n("span",{class:"token operator"},"="),s(" VerifyKey"),n("span",{ `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("p")]),n("span",{class:"token punctuation"},">")]),n("span",{class:"token punctuation"},"{"),s("wallet"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toBase58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),n("span",{class:"token plain-text"},` `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br")])],-1),ts=l(`

    Vue

    Run the following command to install the required dependencies:

    npm install solana-wallets-vue @solana/wallet-adapter-wallets
    -
    `,3),es=s("The "),os={href:"https://github.com/lorisleiva/solana-wallets-vue",target:"_blank",rel:"noopener noreferrer"},cs=s("Solana Wallets Vue"),ps=s(" plugin allows us to initialise a wallet store and create a new "),ls=n("code",null,"$wallet",-1),us=s(" global property that can be accessed inside any component. All the properties and methods you can get from "),is=n("code",null,"useWallet()",-1),rs=s(" are displayed "),ks={href:"https://github.com/lorisleiva/solana-wallets-vue#usewallet-references",target:"_blank",rel:"noopener noreferrer"},bs=s("here"),ms=s(". We also import and render the WalletMultiButton component to allow users to select a wallet et connect to it."),ds=n("div",{class:"language-vue ext-vue line-numbers-mode"},[n("pre",{class:"language-vue"},[n("code",null,[n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("script")]),s(),n("span",{class:"token attr-name"},"setup"),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"},[n("span",{class:"token language-javascript"},[s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br")])],-1),bs=l(`

    Vue

    Run the following command to install the required dependencies:

    npm install solana-wallets-vue @solana/wallet-adapter-wallets
    +
    `,3),ms=s("The "),ds={href:"https://github.com/lorisleiva/solana-wallets-vue",target:"_blank",rel:"noopener noreferrer"},ys=s("Solana Wallets Vue"),gs=s(" plugin allows us to initialise a wallet store and create a new "),hs=n("code",null,"$wallet",-1),ws=s(" global property that can be accessed inside any component. All the properties and methods you can get from "),_s=n("code",null,"useWallet()",-1),fs=s(" are displayed "),vs={href:"https://github.com/lorisleiva/solana-wallets-vue#usewallet-references",target:"_blank",rel:"noopener noreferrer"},xs=s("here"),Ks=s(". We also import and render the WalletMultiButton component to allow users to select a wallet et connect to it."),Ps=n("div",{class:"language-vue ext-vue line-numbers-mode"},[n("pre",{class:"language-vue"},[n("code",null,[n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("script")]),s(),n("span",{class:"token attr-name"},"setup"),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"},[n("span",{class:"token language-javascript"},[s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" WalletMultiButton "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"solana-wallets-vue"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` LedgerWalletAdapter`),n("span",{class:"token punctuation"},","),s(` @@ -513,15 +595,15 @@ verify_sign `),n("span",{class:"token operator"},"="),s(" VerifyKey"),n("span",{ `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br")])],-1),ys=n("div",{class:"language-vue ext-vue line-numbers-mode"},[n("pre",{class:"language-vue"},[n("code",null,[n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("script")]),s(),n("span",{class:"token attr-name"},"setup"),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"},[n("span",{class:"token language-javascript"},[s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br")])],-1),Ws=n("div",{class:"language-vue ext-vue line-numbers-mode"},[n("pre",{class:"language-vue"},[n("code",null,[n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("script")]),s(),n("span",{class:"token attr-name"},"setup"),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"},[n("span",{class:"token language-javascript"},[s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" WalletMultiButton "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"solana-wallets-vue"'),n("span",{class:"token punctuation"},";"),s(` `)])]),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("template")]),n("span",{class:"token punctuation"},">")]),s(` `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("wallet-multi-button")]),n("span",{class:"token punctuation"},">")]),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),gs=l(`

    Svelte

    Run the following command to install the required dependencies:

    npm install @svelte-on-solana/wallet-adapter-core @svelte-on-solana/wallet-adapter-ui @solana/wallet-adapter-base @solana/wallet-adapter-wallets @solana/web3.js
    -
    `,3),hs=s("The "),ws={href:"https://github.com/svelte-on-solana/wallet-adapter",target:"_blank",rel:"noopener noreferrer"},fs=s("Svelte Wallet Adapter"),_s=s(" package allows to add a Svelte Store ("),vs=n("code",null,"$walletStore",-1),xs=s(") accessible among all the JS, TS or/and Svelte files inside a project done with Svelte Template or SvelteKit. Using the repo reference "),Ks={href:"https://github.com/svelte-on-solana/wallet-adapter/blob/master/packages/core/README.md/",target:"_blank",rel:"noopener noreferrer"},Ws=s("here"),Ps=s(" you can be able to use the adapter for SSR or SPA. The UI package contains a "),Ss=n("code",null,"",-1),As=s(" component to allow users to select a wallet to connect to it."),Ts=n("div",{class:"language-html ext-html line-numbers-mode"},[n("pre",{class:"language-html"},[n("code",null,[n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("script")]),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"},[n("span",{class:"token language-javascript"},[s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),Ss=l(`

    Svelte

    Run the following command to install the required dependencies:

    npm install @svelte-on-solana/wallet-adapter-core @svelte-on-solana/wallet-adapter-ui @solana/wallet-adapter-base @solana/wallet-adapter-wallets @solana/web3.js
    +
    `,3),As=s("The "),Cs={href:"https://github.com/svelte-on-solana/wallet-adapter",target:"_blank",rel:"noopener noreferrer"},Ts=s("Svelte Wallet Adapter"),js=s(" package allows to add a Svelte Store ("),Rs=n("code",null,"$walletStore",-1),Ds=s(") accessible among all the JS, TS or/and Svelte files inside a project done with Svelte Template or SvelteKit. Using the repo reference "),Ns={href:"https://github.com/svelte-on-solana/wallet-adapter/blob/master/packages/core/README.md/",target:"_blank",rel:"noopener noreferrer"},zs=s("here"),Bs=s(" you can be able to use the adapter for SSR or SPA. The UI package contains a "),Ms=n("code",null,"",-1),Es=s(" component to allow users to select a wallet to connect to it."),Hs=n("div",{class:"language-html ext-html line-numbers-mode"},[n("pre",{class:"language-html"},[n("code",null,[n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("script")]),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"},[n("span",{class:"token language-javascript"},[s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" walletStore "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@svelte-on-solana/wallet-adapter-core"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` WalletProvider`),n("span",{class:"token punctuation"},","),s(` @@ -554,7 +636,7 @@ verify_sign `),n("span",{class:"token operator"},"="),s(" VerifyKey"),n("span",{ successfully connected! {:else} `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("WalletMultiButton")]),s(),n("span",{class:"token punctuation"},"/>")]),s(` {/if} -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br")])],-1),Cs=n("div",{class:"language-html ext-html line-numbers-mode"},[n("pre",{class:"language-html"},[n("code",null,[n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("script")]),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"},[n("span",{class:"token language-javascript"},[s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br")])],-1),Js=n("div",{class:"language-html ext-html line-numbers-mode"},[n("pre",{class:"language-html"},[n("code",null,[n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("script")]),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"},[n("span",{class:"token language-javascript"},[s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" walletStore "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@svelte-on-solana/wallet-adapter-core"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" WalletMultiButton "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@svelte-on-solana/wallet-adapter-ui"'),n("span",{class:"token punctuation"},";"),s(` `)])]),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"")]),s(` @@ -563,4 +645,4 @@ successfully connected! {:else} successfully connected! {:else} `),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),s("WalletMultiButton")]),s(),n("span",{class:"token punctuation"},"/>")]),s(` {/if} -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br")])],-1);function js(Bs,Rs){const e=p("SolanaCodeGroupItem"),o=p("SolanaCodeGroup"),c=p("ExternalLinkIcon");return i(),r(k,null,[m,d,y,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[g]),preview:a(()=>[h]),_:1}),t(e,{title:"Python"},{default:a(()=>[w]),preview:a(()=>[f]),_:1}),t(e,{title:"Rust"},{default:a(()=>[_]),preview:a(()=>[v]),_:1}),t(e,{title:"CLI"},{default:a(()=>[x]),preview:a(()=>[K]),_:1})]),_:1}),W,P,S,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[A]),preview:a(()=>[T]),_:1}),t(e,{title:"Python"},{default:a(()=>[C]),preview:a(()=>[j]),_:1}),t(e,{title:"Rust"},{default:a(()=>[B]),preview:a(()=>[R]),_:1}),t(e,{title:"CLI"},{default:a(()=>[M]),preview:a(()=>[D]),_:1})]),_:1}),N,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[z]),preview:a(()=>[E]),_:1}),t(e,{title:"Python"},{default:a(()=>[H]),preview:a(()=>[U]),_:1}),t(e,{title:"Rust"},{default:a(()=>[V]),preview:a(()=>[J]),_:1})]),_:1}),Y,q,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[L]),preview:a(()=>[I]),_:1}),t(e,{title:"Python"},{default:a(()=>[F]),preview:a(()=>[X]),_:1}),t(e,{title:"CLI"},{default:a(()=>[Z]),preview:a(()=>[$]),_:1})]),_:1}),G,Q,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[O]),preview:a(()=>[nn]),_:1}),t(e,{title:"Python",active:""},{default:a(()=>[sn]),preview:a(()=>[an]),_:1}),t(e,{title:"Rust",active:""},{default:a(()=>[tn]),preview:a(()=>[en]),_:1})]),_:1}),on,cn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[pn]),preview:a(()=>[ln]),_:1}),t(e,{title:"Python"},{default:a(()=>[un]),preview:a(()=>[rn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[kn]),preview:a(()=>[bn]),_:1})]),_:1}),mn,dn,yn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[gn]),preview:a(()=>[hn]),_:1}),t(e,{title:"Python"},{default:a(()=>[wn]),preview:a(()=>[fn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[_n]),preview:a(()=>[vn]),_:1})]),_:1}),xn,Kn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Wn]),preview:a(()=>[Pn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[Sn]),preview:a(()=>[An]),_:1})]),_:1}),Tn,Cn,jn,Bn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Rn]),preview:a(()=>[Mn]),_:1}),t(e,{title:"Python"},{default:a(()=>[Dn]),preview:a(()=>[Nn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[zn]),preview:a(()=>[En]),_:1})]),_:1}),Hn,Un,n("p",null,[Vn,n("a",Jn,[Yn,t(c)]),qn]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Ln]),preview:a(()=>[In]),_:1}),t(e,{title:"Python"},{default:a(()=>[Fn]),preview:a(()=>[Xn]),_:1})]),_:1}),Zn,n("p",null,[$n,n("a",Gn,[Qn,t(c)]),On]),ns,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[ss]),preview:a(()=>[as]),_:1})]),_:1}),ts,n("p",null,[es,n("a",os,[cs,t(c)]),ps,ls,us,is,rs,n("a",ks,[bs,t(c)]),ms]),t(o,null,{default:a(()=>[t(e,{title:"Vue",active:""},{default:a(()=>[ds]),preview:a(()=>[ys]),_:1})]),_:1}),gs,n("p",null,[hs,n("a",ws,[fs,t(c)]),_s,vs,xs,n("a",Ks,[Ws,t(c)]),Ps,Ss,As]),t(o,null,{default:a(()=>[t(e,{title:"Svelte",active:""},{default:a(()=>[Ts]),preview:a(()=>[Cs]),_:1})]),_:1})],64)}var Ds=u(b,[["render",js]]);export{Ds as default}; +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br")])],-1);function Us(Ys,Vs){const e=p("SolanaCodeGroupItem"),o=p("SolanaCodeGroup"),c=p("ExternalLinkIcon");return i(),k(r,null,[m,d,y,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[g]),preview:a(()=>[h]),_:1}),t(e,{title:"Python"},{default:a(()=>[w]),preview:a(()=>[_]),_:1}),t(e,{title:"C++"},{default:a(()=>[f]),preview:a(()=>[v]),_:1}),t(e,{title:"Rust"},{default:a(()=>[x]),preview:a(()=>[K]),_:1}),t(e,{title:"CLI"},{default:a(()=>[P]),preview:a(()=>[W]),_:1})]),_:1}),S,A,C,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[T]),preview:a(()=>[j]),_:1}),t(e,{title:"Python"},{default:a(()=>[R]),preview:a(()=>[D]),_:1}),t(e,{title:"C++"},{default:a(()=>[N]),preview:a(()=>[z]),_:1}),t(e,{title:"Rust"},{default:a(()=>[B]),preview:a(()=>[M]),_:1}),t(e,{title:"CLI"},{default:a(()=>[E]),preview:a(()=>[H]),_:1})]),_:1}),J,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[U]),preview:a(()=>[Y]),_:1}),t(e,{title:"Python"},{default:a(()=>[V]),preview:a(()=>[q]),_:1}),t(e,{title:"Rust"},{default:a(()=>[L]),preview:a(()=>[F]),_:1})]),_:1}),I,X,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Z]),preview:a(()=>[$]),_:1}),t(e,{title:"Python"},{default:a(()=>[G]),preview:a(()=>[Q]),_:1}),t(e,{title:"C++"},{default:a(()=>[O]),preview:a(()=>[nn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[sn]),preview:a(()=>[an]),_:1})]),_:1}),tn,en,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[on]),preview:a(()=>[cn]),_:1}),t(e,{title:"Python",active:""},{default:a(()=>[pn]),preview:a(()=>[ln]),_:1}),t(e,{title:"C++",active:""},{default:a(()=>[un]),preview:a(()=>[kn]),_:1}),t(e,{title:"Rust",active:""},{default:a(()=>[rn]),preview:a(()=>[bn]),_:1})]),_:1}),mn,dn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[yn]),preview:a(()=>[gn]),_:1}),t(e,{title:"Python"},{default:a(()=>[hn]),preview:a(()=>[wn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[_n]),preview:a(()=>[fn]),_:1})]),_:1}),vn,xn,Kn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Pn]),preview:a(()=>[Wn]),_:1}),t(e,{title:"Python"},{default:a(()=>[Sn]),preview:a(()=>[An]),_:1}),t(e,{title:"CLI"},{default:a(()=>[Cn]),preview:a(()=>[Tn]),_:1})]),_:1}),jn,Rn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Dn]),preview:a(()=>[Nn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[zn]),preview:a(()=>[Bn]),_:1})]),_:1}),Mn,En,Hn,Jn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Un]),preview:a(()=>[Yn]),_:1}),t(e,{title:"Python"},{default:a(()=>[Vn]),preview:a(()=>[qn]),_:1}),t(e,{title:"C++"},{default:a(()=>[Ln]),preview:a(()=>[Fn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[In]),preview:a(()=>[Xn]),_:1})]),_:1}),Zn,$n,n("p",null,[Gn,n("a",Qn,[On,t(c)]),ns]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[ss]),preview:a(()=>[as]),_:1}),t(e,{title:"Python"},{default:a(()=>[ts]),preview:a(()=>[es]),_:1})]),_:1}),os,n("p",null,[cs,n("a",ps,[ls,t(c)]),us]),is,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[ks]),preview:a(()=>[rs]),_:1})]),_:1}),bs,n("p",null,[ms,n("a",ds,[ys,t(c)]),gs,hs,ws,_s,fs,n("a",vs,[xs,t(c)]),Ks]),t(o,null,{default:a(()=>[t(e,{title:"Vue",active:""},{default:a(()=>[Ps]),preview:a(()=>[Ws]),_:1})]),_:1}),Ss,n("p",null,[As,n("a",Cs,[Ts,t(c)]),js,Rs,Ds,n("a",Ns,[zs,t(c)]),Bs,Ms,Es]),t(o,null,{default:a(()=>[t(e,{title:"Svelte",active:""},{default:a(()=>[Hs]),preview:a(()=>[Js]),_:1})]),_:1})],64)}var Ls=u(b,[["render",Us]]);export{Ls as default}; diff --git a/docs/.vuepress/dist/assets/local-development.html.4e40c888.js b/docs/.vuepress/dist/assets/local-development.html.1115a589.js similarity index 96% rename from docs/.vuepress/dist/assets/local-development.html.4e40c888.js rename to docs/.vuepress/dist/assets/local-development.html.1115a589.js index e74fe9f2e..23c23a071 100644 --- a/docs/.vuepress/dist/assets/local-development.html.4e40c888.js +++ b/docs/.vuepress/dist/assets/local-development.html.1115a589.js @@ -1 +1 @@ -const e={key:"v-32949b1c",path:"/de/references/local-development.html",title:"Local Development",lang:"de-DE",frontmatter:{title:"Local Development",head:[["meta",{name:"title",content:"Solana Kochbuch | Lokale Entwicklung"}],["meta",{name:"og:title",content:"Solana Kochbuch | Lokale Entwicklung"}],["meta",{name:"description",content:"Richten Sie Local Validator f\xFCr die lokale Entwicklerumgebung und Airdrop SOL ein. Erfahren Sie mehr \xFCber lokale Entwicklung und weitere Referenzen f\xFCr Building on Solana im Solana-Kochbuch."}],["meta",{name:"og:description",content:"Richten Sie Local Validator f\xFCr die lokale Entwicklerumgebung und Airdrop SOL ein. Erfahren Sie mehr \xFCber lokale Entwicklung und weitere Referenzen f\xFCr Building on Solana im Solana-Kochbuch."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"Starten eines lokalen Validators",slug:"starten-eines-lokalen-validators",children:[]},{level:2,title:"Verbindung zu Umgebungen",slug:"verbindung-zu-umgebungen",children:[]},{level:2,title:"Abonnieren von Veranstaltungen",slug:"abonnieren-von-veranstaltungen",children:[]},{level:2,title:"Test SOL erhalten",slug:"test-sol-erhalten",children:[]},{level:2,title:"Verwenden von Mainnet-Konten und -Programmen",slug:"verwenden-von-mainnet-konten-und-programmen",children:[{level:3,title:"So laden Sie Konten aus dem Mainnet",slug:"so-laden-sie-konten-aus-dem-mainnet",children:[]},{level:3,title:"So laden Sie Programme aus dem Mainnet",slug:"so-laden-sie-programme-aus-dem-mainnet",children:[]}]}],git:{updatedTime:1672345621e3},filePathRelative:"de/references/local-development.md"};export{e as data}; +const e={key:"v-32949b1c",path:"/de/references/local-development.html",title:"Local Development",lang:"de-DE",frontmatter:{title:"Local Development",head:[["meta",{name:"title",content:"Solana Kochbuch | Lokale Entwicklung"}],["meta",{name:"og:title",content:"Solana Kochbuch | Lokale Entwicklung"}],["meta",{name:"description",content:"Richten Sie Local Validator f\xFCr die lokale Entwicklerumgebung und Airdrop SOL ein. Erfahren Sie mehr \xFCber lokale Entwicklung und weitere Referenzen f\xFCr Building on Solana im Solana-Kochbuch."}],["meta",{name:"og:description",content:"Richten Sie Local Validator f\xFCr die lokale Entwicklerumgebung und Airdrop SOL ein. Erfahren Sie mehr \xFCber lokale Entwicklung und weitere Referenzen f\xFCr Building on Solana im Solana-Kochbuch."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"Starten eines lokalen Validators",slug:"starten-eines-lokalen-validators",children:[]},{level:2,title:"Verbindung zu Umgebungen",slug:"verbindung-zu-umgebungen",children:[]},{level:2,title:"Abonnieren von Veranstaltungen",slug:"abonnieren-von-veranstaltungen",children:[]},{level:2,title:"Test SOL erhalten",slug:"test-sol-erhalten",children:[]},{level:2,title:"Verwenden von Mainnet-Konten und -Programmen",slug:"verwenden-von-mainnet-konten-und-programmen",children:[{level:3,title:"So laden Sie Konten aus dem Mainnet",slug:"so-laden-sie-konten-aus-dem-mainnet",children:[]},{level:3,title:"So laden Sie Programme aus dem Mainnet",slug:"so-laden-sie-programme-aus-dem-mainnet",children:[]}]}],git:{updatedTime:1676666728e3},filePathRelative:"de/references/local-development.md"};export{e as data}; diff --git a/docs/.vuepress/dist/assets/local-development.html.ce38d019.js b/docs/.vuepress/dist/assets/local-development.html.2c4ea044.js similarity index 99% rename from docs/.vuepress/dist/assets/local-development.html.ce38d019.js rename to docs/.vuepress/dist/assets/local-development.html.2c4ea044.js index 0276390a7..653e587ae 100644 --- a/docs/.vuepress/dist/assets/local-development.html.ce38d019.js +++ b/docs/.vuepress/dist/assets/local-development.html.2c4ea044.js @@ -1,4 +1,4 @@ -import{_ as r,r as t,o as i,c,a as n,b as e,w as p,F as u,d as a,e as o}from"./app.cfdf84e7.js";const d={},m=n("h1",{id:"local-development-yerel-gelistirme",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#local-development-yerel-gelistirme","aria-hidden":"true"},"#"),a(" Local Development (Yerel Geli\u015Ftirme)")],-1),b=n("h2",{id:"starting-a-local-validator-yerel-validator-baslatma",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#starting-a-local-validator-yerel-validator-baslatma","aria-hidden":"true"},"#"),a(" Starting a local validator (Yerel validator ba\u015Flatma)")],-1),k=n("p",null,"Program kodunuzu yerel olarak test etmek, devnet'te test etmekten \xE7ok daha g\xFCvenilir olabilir ve onu devnet'te denemeden \xF6nce test etmenize yard\u0131mc\u0131 olabilir.",-1),g=a("solana tool suite"),h=a(" y\xFCkleyerek ve \xE7al\u0131\u015Ft\u0131rarak yerel test do\u011Frulay\u0131c\u0131n\u0131z\u0131 kurabilirsiniz."),y=o(`
    solana-test-validator
    +import{_ as r,r as t,o as i,c,a as n,b as e,w as p,F as u,d as a,e as o}from"./app.2fbb9e96.js";const d={},m=n("h1",{id:"local-development-yerel-gelistirme",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#local-development-yerel-gelistirme","aria-hidden":"true"},"#"),a(" Local Development (Yerel Geli\u015Ftirme)")],-1),b=n("h2",{id:"starting-a-local-validator-yerel-validator-baslatma",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#starting-a-local-validator-yerel-validator-baslatma","aria-hidden":"true"},"#"),a(" Starting a local validator (Yerel validator ba\u015Flatma)")],-1),k=n("p",null,"Program kodunuzu yerel olarak test etmek, devnet'te test etmekten \xE7ok daha g\xFCvenilir olabilir ve onu devnet'te denemeden \xF6nce test etmenize yard\u0131mc\u0131 olabilir.",-1),g=a("solana tool suite"),h=a(" y\xFCkleyerek ve \xE7al\u0131\u015Ft\u0131rarak yerel test do\u011Frulay\u0131c\u0131n\u0131z\u0131 kurabilirsiniz."),y=o(`
    solana-test-validator
     

    Yerel test do\u011Frulay\u0131c\u0131 kullanman\u0131n faydalar\u0131 \u015Funlar\u0131 i\xE7erir:

    • RPC h\u0131z s\u0131n\u0131r\u0131 yoktur
    • Airdrop limiti yoktur
    • Do\u011Frudan zincir \xFCzerinde program da\u011F\u0131t\u0131m\u0131 yap\u0131l\u0131r (--bpf-program ...)
    • Programlar da dahil olmak \xFCzere genel bir k\xFCmeden account'lar\u0131 klonlayabilirsiniz (--clone ...)
    • Yap\u0131land\u0131r\u0131labilir i\u015Flem ge\xE7mi\u015Fi saklars\u0131n\u0131z (--limit-ledger-size ...)
    • Epoch uzunlu\u011Fu yap\u0131land\u0131r\u0131labilir (--slots-per-epoch ...)
    • \u0130ste\u011Fe ba\u011Fl\u0131 bir slota atlayabilirsiniz (--warp-slot ...)

    Connecting to Environments (Ortamlara Ba\u011Flanma)

    Solana geli\u015Ftirme \xFCzerinde \xE7al\u0131\u015F\u0131rken, belirli bir RPC API u\xE7 noktas\u0131na ba\u011Flanman\u0131z gerekecektir. Solana'n\u0131n 3 genel geli\u015Ftirme ortam\u0131 vard\u0131r:

    • mainnet-beta https://api.mainnet-beta.solana.com
    • devnet https://api.devnet.solana.com
    • testnet https://api.testnet.solana.com
    const connection = new Connection(clusterApiUrl("mainnet-beta"), "confirmed");
     
     

    Son olarak, a\u015Fa\u011F\u0131dakilerle yerel veya uzaktan \xE7al\u0131\u015Fan \xF6zel bir k\xFCmeye de ba\u011Flanabilirsiniz:

    const connection = new Connection("http://127.0.0.1:8899", "confirmed");
    diff --git a/docs/.vuepress/dist/assets/local-development.html.e7d6218e.js b/docs/.vuepress/dist/assets/local-development.html.33d72e8a.js
    similarity index 93%
    rename from docs/.vuepress/dist/assets/local-development.html.e7d6218e.js
    rename to docs/.vuepress/dist/assets/local-development.html.33d72e8a.js
    index 22a8c67b1..41239b852 100644
    --- a/docs/.vuepress/dist/assets/local-development.html.e7d6218e.js
    +++ b/docs/.vuepress/dist/assets/local-development.html.33d72e8a.js
    @@ -1 +1 @@
    -const e={key:"v-75cde6e8",path:"/id/references/local-development.html",title:"Development Lokal",lang:"id-ID",frontmatter:{title:"Development Lokal",head:[["meta",{name:"title",content:"Buku Panduan Solana | Development Lokal"}],["meta",{name:"og:title",content:"Buku Panduan Solana | Development Lokal"}],["meta",{name:"description",content:"Menyiapkan Validator Lokal untuk environment pengembangan lokal dan Airdrop SOL. Pelajari tentang development lokal dan referensi lainnya untuk Membangun Solana di Buku Panduan Solana."}],["meta",{name:"og:description",content:"Menyiapkan Validator Lokal untuk environment pengembangan lokal dan Airdrop SOL. Pelajari tentang development lokal dan referensi lainnya untuk Membangun Solana di Buku Panduan Solana."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"Memulai Validator Lokal",slug:"memulai-validator-lokal",children:[]},{level:2,title:"Menghubungkan Ke Environment",slug:"menghubungkan-ke-environment",children:[]},{level:2,title:"Subskripsi Event",slug:"subskripsi-event",children:[]},{level:2,title:"Mendapatkan Tes SOL",slug:"mendapatkan-tes-sol",children:[]},{level:2,title:"Menggunakan Akun dan Program Mainnet",slug:"menggunakan-akun-dan-program-mainnet",children:[{level:3,title:"Cara memuat akun dari mainnet",slug:"cara-memuat-akun-dari-mainnet",children:[]},{level:3,title:"Cara memuat program dari mainnet",slug:"cara-memuat-program-dari-mainnet",children:[]}]}],git:{updatedTime:1663636948e3},filePathRelative:"id/references/local-development.md"};export{e as data};
    +const e={key:"v-75cde6e8",path:"/id/references/local-development.html",title:"Development Lokal",lang:"id-ID",frontmatter:{title:"Development Lokal",head:[["meta",{name:"title",content:"Buku Panduan Solana | Development Lokal"}],["meta",{name:"og:title",content:"Buku Panduan Solana | Development Lokal"}],["meta",{name:"description",content:"Menyiapkan Validator Lokal untuk environment pengembangan lokal dan Airdrop SOL. Pelajari tentang development lokal dan referensi lainnya untuk Membangun Solana di Buku Panduan Solana."}],["meta",{name:"og:description",content:"Menyiapkan Validator Lokal untuk environment pengembangan lokal dan Airdrop SOL. Pelajari tentang development lokal dan referensi lainnya untuk Membangun Solana di Buku Panduan Solana."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"Memulai Validator Lokal",slug:"memulai-validator-lokal",children:[]},{level:2,title:"Menghubungkan Ke Environment",slug:"menghubungkan-ke-environment",children:[]},{level:2,title:"Subskripsi Event",slug:"subskripsi-event",children:[]},{level:2,title:"Mendapatkan Tes SOL",slug:"mendapatkan-tes-sol",children:[]},{level:2,title:"Menggunakan Akun dan Program Mainnet",slug:"menggunakan-akun-dan-program-mainnet",children:[{level:3,title:"Cara memuat akun dari mainnet",slug:"cara-memuat-akun-dari-mainnet",children:[]},{level:3,title:"Cara memuat program dari mainnet",slug:"cara-memuat-program-dari-mainnet",children:[]}]}],git:{updatedTime:1676666728e3},filePathRelative:"id/references/local-development.md"};export{e as data};
    diff --git a/docs/.vuepress/dist/assets/local-development.html.39b4fef9.js b/docs/.vuepress/dist/assets/local-development.html.34489fb3.js
    similarity index 68%
    rename from docs/.vuepress/dist/assets/local-development.html.39b4fef9.js
    rename to docs/.vuepress/dist/assets/local-development.html.34489fb3.js
    index 9eb2ef0ed..34afbb617 100644
    --- a/docs/.vuepress/dist/assets/local-development.html.39b4fef9.js
    +++ b/docs/.vuepress/dist/assets/local-development.html.34489fb3.js
    @@ -1,4 +1,4 @@
    -import{_ as u,r as l,o as i,c as r,a as n,b as t,w as a,F as k,d as s,e as m}from"./app.cfdf84e7.js";const d={},b=n("h1",{id:"development-lokal",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#development-lokal","aria-hidden":"true"},"#"),s(" Development Lokal")],-1),g=n("h2",{id:"memulai-validator-lokal",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#memulai-validator-lokal","aria-hidden":"true"},"#"),s(" Memulai Validator Lokal")],-1),h=n("p",null,"Menguji kode program anda secara lokal bisa jauh lebih andal daripada pengujian di devnet, dan bisa membantu anda menguji sebelum mencobanya di devnet.",-1),_=s("Anda bisa mengatur validator pengujian lokal anda dengan menginstal "),w=s("solana tool suite"),y=s(" dan menjalankannya."),f=m(`
    solana-test-validator
    +import{_ as u,r as l,o as i,c as r,a as n,b as t,w as a,F as k,d as s,e as b}from"./app.2fbb9e96.js";const m={},d=n("h1",{id:"development-lokal",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#development-lokal","aria-hidden":"true"},"#"),s(" Development Lokal")],-1),g=n("h2",{id:"memulai-validator-lokal",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#memulai-validator-lokal","aria-hidden":"true"},"#"),s(" Memulai Validator Lokal")],-1),h=n("p",null,"Menguji kode program anda secara lokal bisa jauh lebih andal daripada pengujian di devnet, dan bisa membantu anda menguji sebelum mencobanya di devnet.",-1),_=s("Anda bisa mengatur validator pengujian lokal anda dengan menginstal "),y=s("solana tool suite"),w=s(" dan menjalankannya."),f=b(`
    solana-test-validator
     

    Keuntungan menggunakan validator uji lokal meliputi:

    • Tidak ada batas kecepatan RPC
    • Tidak ada batasan airdrop
    • Penyebaran program on-chain langsung (--bpf-program ...)
    • Mengkloning akun dari cluster publik, termasuk program (--clone ...)
    • Retensi riwayat transaksi yang dapat dikonfigurasi (--limit-ledger-size ...)
    • Panjang zaman yang dapat dikonfigurasi (--slots-per-epoch ...)
    • Lompat ke slot arbitrer (--warp-slot ...)

    Menghubungkan Ke Environment

    Saat anda mengerjakan pengembangan Solana, anda harus terhubung ke titik akhir API RPC tertentu. Solana memiliki 3 alamat environment:

    • mainnet-beta https://api.mainnet-beta.solana.com
    • devnet https://api.devnet.solana.com
    • testnet https://api.testnet.solana.com
    `,6),v=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" clusterApiUrl"),n("span",{class:"token punctuation"},","),s(" Connection "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -9,40 +9,58 @@ import{_ as u,r as l,o as i,c as r,a as n,b as t,w as a,F as k,d as s,e as m}fro client `),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.mainnet-beta.solana.com"'),n("span",{class:"token punctuation"},")"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),S=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("client "),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.mainnet-beta.solana.com"'),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),A=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),A=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + Connection `),n("span",{class:"token function"},"connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.mainnet-beta.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token keyword"},"return"),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),R=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[s("Connection "),n("span",{class:"token function"},"connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.mainnet-beta.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),L=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("commitment_config"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"let"),s(" rpc_url "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"String"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.mainnet-beta.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"let"),s(" client "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new_with_commitment"),n("span",{class:"token punctuation"},"("),s("rpc_url"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"confirmed"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),R=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" rpc_url "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"String"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.mainnet-beta.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),P=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" rpc_url "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"String"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.mainnet-beta.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"let"),s(" client "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new_with_commitment"),n("span",{class:"token punctuation"},"("),s("rpc_url"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"confirmed"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),L=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana config "),n("span",{class:"token builtin class-name"},"set"),s(` --url https://api.mainnet-beta.solana.com -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),P=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana config "),n("span",{class:"token builtin class-name"},"set"),s(` --url https://api.mainnet-beta.solana.com -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),j=n("p",null,"Terakhir, anda juga dapat terhubung ke cluster pribadi, baik satu lokal atau berjalan dari jarak jauh sebagai berikut:",-1),M=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),j=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana config "),n("span",{class:"token builtin class-name"},"set"),s(` --url https://api.mainnet-beta.solana.com +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),M=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana config "),n("span",{class:"token builtin class-name"},"set"),s(` --url https://api.mainnet-beta.solana.com +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),T=n("p",null,"Terakhir, anda juga dapat terhubung ke cluster pribadi, baik satu lokal atau berjalan dari jarak jauh sebagai berikut:",-1),K=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token comment"},"// This will connect you to your local validator"),s(` `),n("span",{class:"token keyword"},"const"),s(" connection "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token string"},'"confirmed"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),T=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" connection "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token string"},'"confirmed"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),I=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" connection "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token string"},'"confirmed"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),O=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("api "),n("span",{class:"token keyword"},"import"),s(` Client client `),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),K=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("client "),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),E=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),E=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("client "),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),U=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + Connection `),n("span",{class:"token function"},"connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token keyword"},"return"),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),V=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[s("Connection "),n("span",{class:"token function"},"connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),W=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("commitment_config"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"let"),s(" rpc_url "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"String"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"let"),s(" client "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new_with_commitment"),n("span",{class:"token punctuation"},"("),s("rpc_url"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"confirmed"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),I=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" rpc_url "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"String"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),q=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" rpc_url "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"String"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"let"),s(" client "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new_with_commitment"),n("span",{class:"token punctuation"},"("),s("rpc_url"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"confirmed"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),U=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana config "),n("span",{class:"token builtin class-name"},"set"),s(` --url http://privaterpc.com -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),V=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana config "),n("span",{class:"token builtin class-name"},"set"),s(` --url http://privaterpc.com -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),W=n("h2",{id:"subskripsi-event",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#subskripsi-event","aria-hidden":"true"},"#"),s(" Subskripsi Event")],-1),G=n("p",null,[s("Soket web menyediakan antarmuka pub/sub dimana anda bisa mendengarkan "),n("em",null,"event"),s(" tertentu. Alih-alih melakukan ping ke titik akhir HTTP biasa pada suatu interval untuk mendapatkan pembaruan yang sering, Anda dapat menerima pembaruan tersebut hanya ketika itu terjadi.")],-1),N=s("Web3 Solana "),X={href:"https://solana-labs.github.io/solana-web3.js/classes/Connection.html",target:"_blank",rel:"noopener noreferrer"},H=n("code",null,"Connection",-1),B=s(" di bawah tenda menghasilkan titik akhir websocket dan mendaftarkan klien websocket saat anda membuat instansi "),D=n("code",null,"Connection",-1),q=s(" baru. (see source code "),Z={href:"https://github.com/solana-labs/solana-web3.js/blob/45923ca00e4cc1ed079d8e55ecbee83e5b4dc174/src/connection.ts#L2100",target:"_blank",rel:"noopener noreferrer"},z=s("here"),F=s(")."),Q=s("Kelas "),J=n("code",null,"Connection",-1),Y=s(" mengekspos metode pub/sub - semuanya dimulai dengan "),$=n("code",null,"on",-1),nn=s(", seperti pemancar peristiwa. Saat anda memanggil metode pendengar ini, itu mendaftarkan langganan baru ke klien websocket dari instansi "),sn=n("code",null,"Connection",-1),an=s(" itu. Contoh metode pub/sub yang kami gunakan di bawah ini adalah "),tn={href:"https://solana-labs.github.io/solana-web3.js/classes/Connection.html#onAccountChange",target:"_blank",rel:"noopener noreferrer"},en=n("code",null,"onAccountChange",-1),on=s(". Panggilan balik akan memberikan data status yang diperbarui melalui argumen (see "),cn={href:"https://solana-labs.github.io/solana-web3.js/modules.html#AccountChangeCallback",target:"_blank",rel:"noopener noreferrer"},ln=n("code",null,"AccountChangeCallback",-1),pn=s(" as an example)."),un=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" clusterApiUrl"),n("span",{class:"token punctuation"},","),s(" Connection"),n("span",{class:"token punctuation"},","),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),G=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana config "),n("span",{class:"token builtin class-name"},"set"),s(` --url http://privaterpc.com +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),N=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana config "),n("span",{class:"token builtin class-name"},"set"),s(` --url http://privaterpc.com +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),X=n("h2",{id:"subskripsi-event",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#subskripsi-event","aria-hidden":"true"},"#"),s(" Subskripsi Event")],-1),H=n("p",null,[s("Soket web menyediakan antarmuka pub/sub dimana anda bisa mendengarkan "),n("em",null,"event"),s(" tertentu. Alih-alih melakukan ping ke titik akhir HTTP biasa pada suatu interval untuk mendapatkan pembaruan yang sering, Anda dapat menerima pembaruan tersebut hanya ketika itu terjadi.")],-1),B=s("Web3 Solana "),D={href:"https://solana-labs.github.io/solana-web3.js/classes/Connection.html",target:"_blank",rel:"noopener noreferrer"},Z=n("code",null,"Connection",-1),z=s(" di bawah tenda menghasilkan titik akhir websocket dan mendaftarkan klien websocket saat anda membuat instansi "),F=n("code",null,"Connection",-1),Q=s(" baru. (see source code "),J={href:"https://github.com/solana-labs/solana-web3.js/blob/45923ca00e4cc1ed079d8e55ecbee83e5b4dc174/src/connection.ts#L2100",target:"_blank",rel:"noopener noreferrer"},Y=s("here"),$=s(")."),nn=s("Kelas "),sn=n("code",null,"Connection",-1),an=s(" mengekspos metode pub/sub - semuanya dimulai dengan "),tn=n("code",null,"on",-1),en=s(", seperti pemancar peristiwa. Saat anda memanggil metode pendengar ini, itu mendaftarkan langganan baru ke klien websocket dari instansi "),on=n("code",null,"Connection",-1),cn=s(" itu. Contoh metode pub/sub yang kami gunakan di bawah ini adalah "),ln={href:"https://solana-labs.github.io/solana-web3.js/classes/Connection.html#onAccountChange",target:"_blank",rel:"noopener noreferrer"},pn=n("code",null,"onAccountChange",-1),un=s(". Panggilan balik akan memberikan data status yang diperbarui melalui argumen (see "),rn={href:"https://solana-labs.github.io/solana-web3.js/modules.html#AccountChangeCallback",target:"_blank",rel:"noopener noreferrer"},kn=n("code",null,"AccountChangeCallback",-1),bn=s(" as an example)."),mn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" clusterApiUrl"),n("span",{class:"token punctuation"},","),s(" Connection"),n("span",{class:"token punctuation"},","),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token comment"},"// Establish new connect to devnet - websocket client connected to devnet will also be registered here"),s(` @@ -59,7 +77,7 @@ client `),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"t `),n("span",{class:"token string"},'"confirmed"'),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br")])],-1),rn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token comment"},"// Establish new connect to devnet - websocket client connected to devnet will also be registered here"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br")])],-1),dn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token comment"},"// Establish new connect to devnet - websocket client connected to devnet will also be registered here"),s(` `),n("span",{class:"token keyword"},"const"),s(" connection "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"clusterApiUrl"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"devnet"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token string"},'"confirmed"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token comment"},"// Create a test wallet to listen to"),s(` @@ -72,8 +90,8 @@ connection`),n("span",{class:"token punctuation"},"."),n("span",{class:"token fu `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Updated account info: "'),n("span",{class:"token punctuation"},","),s(" updatedAccountInfo"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token string"},'"confirmed"'),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br")])],-1),kn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(` asyncio -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br")])],-1),gn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(` asyncio +`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair `),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("websocket_api "),n("span",{class:"token keyword"},"import"),s(` connect `),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token keyword"},"def"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},":"),s(` @@ -81,7 +99,7 @@ connection`),n("span",{class:"token punctuation"},"."),n("span",{class:"token fu `),n("span",{class:"token comment"},"# Create a Test Wallet"),s(` wallet `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"# Subscribe to the Test wallet to listen for events"),s(` - `),n("span",{class:"token keyword"},"await"),s(" websocket"),n("span",{class:"token punctuation"},"."),s("account_subscribe"),n("span",{class:"token punctuation"},"("),s("wallet"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),s(` + `),n("span",{class:"token keyword"},"await"),s(" websocket"),n("span",{class:"token punctuation"},"."),s("account_subscribe"),n("span",{class:"token punctuation"},"("),s("wallet"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"# Capture response from account subscription "),s(` first_resp `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" websocket"),n("span",{class:"token punctuation"},"."),s("recv"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Subscription successful with id {}, listening for events \\n"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("first_resp"),n("span",{class:"token punctuation"},"."),s("result"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` @@ -89,17 +107,66 @@ connection`),n("span",{class:"token punctuation"},"."),n("span",{class:"token fu `),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("updated_account_info"),n("span",{class:"token punctuation"},")"),s(` asyncio`),n("span",{class:"token punctuation"},"."),s("run"),n("span",{class:"token punctuation"},"("),s("main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br")])],-1),mn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token keyword"},"with"),s(" connect"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"wss://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token keyword"},"as"),s(" websocket"),n("span",{class:"token punctuation"},":"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br")])],-1),hn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token keyword"},"with"),s(" connect"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"wss://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token keyword"},"as"),s(" websocket"),n("span",{class:"token punctuation"},":"),s(` `),n("span",{class:"token comment"},"# Create a Test Wallet"),s(` wallet `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"# Subscribe to the Test wallet to listen for events"),s(` - `),n("span",{class:"token keyword"},"await"),s(" websocket"),n("span",{class:"token punctuation"},"."),s("account_subscribe"),n("span",{class:"token punctuation"},"("),s("wallet"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),s(` + `),n("span",{class:"token keyword"},"await"),s(" websocket"),n("span",{class:"token punctuation"},"."),s("account_subscribe"),n("span",{class:"token punctuation"},"("),s("wallet"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"# Capture response from account subscription "),s(` first_resp `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" websocket"),n("span",{class:"token punctuation"},"."),s("recv"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Subscription successful with id {}, listening for events \\n"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("first_resp"),n("span",{class:"token punctuation"},"."),s("result"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` updated_account_info `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" websocket"),n("span",{class:"token punctuation"},"."),s("recv"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("updated_account_info"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),dn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("pubsub_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"PubsubClient"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),_n=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token comment"},"// clang++ on_account_change.cpp -o on_account_change -std=c++17 -lssl -lcrypto -lsodium"),s(` + +`),n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + Connection `),n("span",{class:"token function"},"connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"int"),s(" subscriptionId "),n("span",{class:"token operator"},"="),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"on_account_change"),n("span",{class:"token punctuation"},"("),s("key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token punctuation"},"["),n("span",{class:"token operator"},"&"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},"("),s("Result"),n("span",{class:"token operator"},"<"),s("Account"),n("span",{class:"token operator"},">"),s(" result"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + Account account `),n("span",{class:"token operator"},"="),s(" result"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"owner = "'),s(),n("span",{class:"token operator"},"<<"),s(" account"),n("span",{class:"token punctuation"},"."),s("owner"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"lamports = "'),s(),n("span",{class:"token operator"},"<<"),s(" account"),n("span",{class:"token punctuation"},"."),s("lamports "),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"data = "'),s(),n("span",{class:"token operator"},"<<"),s(" account"),n("span",{class:"token punctuation"},"."),s("data "),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"executable = "'),s(),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token punctuation"},"("),s("account"),n("span",{class:"token punctuation"},"."),s("executable "),n("span",{class:"token operator"},"?"),s(),n("span",{class:"token string"},'"true"'),s(),n("span",{class:"token operator"},":"),s(),n("span",{class:"token string"},'"false"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token function"},"sleep"),n("span",{class:"token punctuation"},"("),n("span",{class:"token number"},"1"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + std`),n("span",{class:"token double-colon punctuation"},"::"),s("string tx_hash "),n("span",{class:"token operator"},"="),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"request_airdrop"),n("span",{class:"token punctuation"},"("),s("key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"tx hash = "'),s(),n("span",{class:"token operator"},"<<"),s(" tx_hash "),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"for"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"int"),s(" i "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(" i "),n("span",{class:"token operator"},"<"),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},";"),s(" i"),n("span",{class:"token operator"},"++"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + connection`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"poll"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token function"},"sleep"),n("span",{class:"token punctuation"},"("),n("span",{class:"token number"},"1"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token punctuation"},"}"),s(` + + connection`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"remove_account_listener"),n("span",{class:"token punctuation"},"("),s("subscriptionId"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"return"),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br")])],-1),yn=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(" subscriptionId "),n("span",{class:"token operator"},"="),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"on_account_change"),n("span",{class:"token punctuation"},"("),s("key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token punctuation"},"["),n("span",{class:"token operator"},"&"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},"("),s("Result"),n("span",{class:"token operator"},"<"),s("Account"),n("span",{class:"token operator"},">"),s(" result"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + Account account `),n("span",{class:"token operator"},"="),s(" result"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"owner = "'),s(),n("span",{class:"token operator"},"<<"),s(" account"),n("span",{class:"token punctuation"},"."),s("owner"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"lamports = "'),s(),n("span",{class:"token operator"},"<<"),s(" account"),n("span",{class:"token punctuation"},"."),s("lamports "),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"data = "'),s(),n("span",{class:"token operator"},"<<"),s(" account"),n("span",{class:"token punctuation"},"."),s("data "),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"executable = "'),s(),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token punctuation"},"("),s("account"),n("span",{class:"token punctuation"},"."),s("executable "),n("span",{class:"token operator"},"?"),s(),n("span",{class:"token string"},'"true"'),s(),n("span",{class:"token operator"},":"),s(),n("span",{class:"token string"},'"false"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"for"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"int"),s(" i "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(" i "),n("span",{class:"token operator"},"<"),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},";"),s(" i"),n("span",{class:"token operator"},"++"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + connection`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"poll"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token function"},"sleep"),n("span",{class:"token punctuation"},"("),n("span",{class:"token number"},"1"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` + +connection`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"remove_account_listener"),n("span",{class:"token punctuation"},"("),s("subscriptionId"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br")])],-1),wn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("pubsub_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"PubsubClient"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_config"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcAccountInfoConfig"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("commitment_config"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("signature"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"Signer"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` @@ -136,7 +203,7 @@ asyncio`),n("span",{class:"token punctuation"},"."),s("run"),n("span",{class:"to `),n("span",{class:"token macro property"},"println!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Errooooor"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br")])],-1),bn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" ws_url "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"String"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"wss://api.devnet.solana.com/"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br")])],-1),fn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" ws_url "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"String"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"wss://api.devnet.solana.com/"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"let"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"mut"),s(" client"),n("span",{class:"token punctuation"},","),s(" receiver"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"PubsubClient"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"account_subscribe"),n("span",{class:"token punctuation"},"("),s(` `),n("span",{class:"token operator"},"&"),s("ws_url"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token operator"},"&"),s("pubkey"),n("span",{class:"token punctuation"},","),s(` @@ -148,7 +215,7 @@ asyncio`),n("span",{class:"token punctuation"},"."),s("run"),n("span",{class:"to `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"let"),s(" message "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"match"),s(" receiver"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"recv"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token macro property"},"println!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"{:?}"'),n("span",{class:"token punctuation"},","),s(" message"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br")])],-1),gn=n("h2",{id:"mendapatkan-tes-sol",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#mendapatkan-tes-sol","aria-hidden":"true"},"#"),s(" Mendapatkan Tes SOL")],-1),hn=n("p",null,"Saat anda bekerja secara lokal, anda memerlukan beberapa SOL untuk mengirim transaksi. Di lingkungan non-mainnet anda dapat menerima SOL dengan mengirimkannya ke alamat anda.",-1),_n=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection"),n("span",{class:"token punctuation"},","),s(" Keypair"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token constant"},"LAMPORTS_PER_SOL"),s(),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br")])],-1),vn=n("h2",{id:"mendapatkan-tes-sol",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#mendapatkan-tes-sol","aria-hidden":"true"},"#"),s(" Mendapatkan Tes SOL")],-1),Cn=n("p",null,"Saat anda bekerja secara lokal, anda memerlukan beberapa SOL untuk mengirim transaksi. Di lingkungan non-mainnet anda dapat menerima SOL dengan mengirimkannya ke alamat anda.",-1),xn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection"),n("span",{class:"token punctuation"},","),s(" Keypair"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token constant"},"LAMPORTS_PER_SOL"),s(),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` @@ -166,13 +233,13 @@ asyncio`),n("span",{class:"token punctuation"},"."),s("run"),n("span",{class:"to signature `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br")])],-1),wn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" airdropSignature "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"requestAirdrop"),n("span",{class:"token punctuation"},"("),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br")])],-1),Sn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" airdropSignature "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"requestAirdrop"),n("span",{class:"token punctuation"},"("),s(` keypair`),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token constant"},"LAMPORTS_PER_SOL"),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"await"),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"confirmTransaction"),n("span",{class:"token punctuation"},"("),s("airdropSignature"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),yn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),An=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair `),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("api "),n("span",{class:"token keyword"},"import"),s(` Client wallet `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` @@ -180,14 +247,32 @@ wallet `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:" client `),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"#Input Airdrop amount in LAMPORTS"),s(` -client`),n("span",{class:"token punctuation"},"."),s("request_airdrop"),n("span",{class:"token punctuation"},"("),s("wallet"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"1000000000"),n("span",{class:"token punctuation"},")"),s(` +client`),n("span",{class:"token punctuation"},"."),s("request_airdrop"),n("span",{class:"token punctuation"},"("),s("wallet"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"1000000000"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"#Airdrops 1 SOL"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),fn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token comment"},"#Input Airdrop amount in LAMPORTS"),s(` -client`),n("span",{class:"token punctuation"},"."),s("request_airdrop"),n("span",{class:"token punctuation"},"("),s("wallet"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"1000000000"),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),Rn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token comment"},"#Input Airdrop amount in LAMPORTS"),s(` +client`),n("span",{class:"token punctuation"},"."),s("request_airdrop"),n("span",{class:"token punctuation"},"("),s("wallet"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"1000000000"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"#Airdrops 1 SOL"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),vn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),Ln=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token comment"},"// clang++ request_airdrop.cpp -o request_airdrop -std=c++17 -lssl -lcrypto -lsodium"),s(` + +`),n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + Connection `),n("span",{class:"token function"},"connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + std`),n("span",{class:"token double-colon punctuation"},"::"),s("string tx_hash "),n("span",{class:"token operator"},"="),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"request_airdrop"),n("span",{class:"token punctuation"},"("),s("key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"tx hash = "'),s(),n("span",{class:"token operator"},"<<"),s(" tx_hash "),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"return"),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br")])],-1),Pn=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[s("connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"request_airdrop"),n("span",{class:"token punctuation"},"("),s("key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),jn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("commitment_config"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("native_token"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token constant"},"LAMPORTS_PER_SOL"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("signature"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"Signer"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` @@ -209,7 +294,7 @@ client`),n("span",{class:"token punctuation"},"."),s("request_airdrop"),n("span" `),n("span",{class:"token class-name"},"Err"),n("span",{class:"token punctuation"},"("),s("_"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token macro property"},"println!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Error requesting airdrop"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br")])],-1),Cn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"match"),s(" client"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"request_airdrop"),n("span",{class:"token punctuation"},"("),n("span",{class:"token operator"},"&"),s("pubkey"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token constant"},"LAMPORTS_PER_SOL"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br")])],-1),Mn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"match"),s(" client"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"request_airdrop"),n("span",{class:"token punctuation"},"("),n("span",{class:"token operator"},"&"),s("pubkey"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token constant"},"LAMPORTS_PER_SOL"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token class-name"},"Ok"),n("span",{class:"token punctuation"},"("),s("sig"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token keyword"},"loop"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"if"),s(),n("span",{class:"token keyword"},"let"),s(),n("span",{class:"token class-name"},"Ok"),n("span",{class:"token punctuation"},"("),s("confirmed"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"="),s(" client"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"confirm_transaction"),n("span",{class:"token punctuation"},"("),n("span",{class:"token operator"},"&"),s("sig"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"if"),s(" confirmed "),n("span",{class:"token punctuation"},"{"),s(` @@ -220,21 +305,21 @@ client`),n("span",{class:"token punctuation"},"."),s("request_airdrop"),n("span" `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token class-name"},"Err"),n("span",{class:"token punctuation"},"("),s("_"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token macro property"},"println!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Error requesting airdrop"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),xn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana airdrop "),n("span",{class:"token number"},"1"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),Tn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana airdrop "),n("span",{class:"token number"},"1"),s(` `),n("span",{class:"token comment"},"# Return"),s(` `),n("span",{class:"token comment"},'# "1 SOL"'),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),Sn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana airdrop "),n("span",{class:"token number"},"1"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),An=n("h2",{id:"menggunakan-akun-dan-program-mainnet",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#menggunakan-akun-dan-program-mainnet","aria-hidden":"true"},"#"),s(" Menggunakan Akun dan Program Mainnet")],-1),Rn=n("p",null,"Seringkali, pengujian lokal bergantung pada program dan akun yang hanya tersedia di mainnet. Solana CLI mengizinkan keduanya:",-1),Ln=n("ul",null,[n("li",null,"Mengunduh Program dan Akun"),n("li",null,"Memuat Program dan Akun ke validator lokal")],-1),Pn=n("h3",{id:"cara-memuat-akun-dari-mainnet",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#cara-memuat-akun-dari-mainnet","aria-hidden":"true"},"#"),s(" Cara memuat akun dari mainnet")],-1),jn=n("p",null,"Dimungkinkan untuk mengunduh akun mint token SRM ke file:",-1),Mn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# solana account -u --output --output-file
    "),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),Kn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana airdrop "),n("span",{class:"token number"},"1"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),In=n("h2",{id:"menggunakan-akun-dan-program-mainnet",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#menggunakan-akun-dan-program-mainnet","aria-hidden":"true"},"#"),s(" Menggunakan Akun dan Program Mainnet")],-1),On=n("p",null,"Seringkali, pengujian lokal bergantung pada program dan akun yang hanya tersedia di mainnet. Solana CLI mengizinkan keduanya:",-1),En=n("ul",null,[n("li",null,"Mengunduh Program dan Akun"),n("li",null,"Memuat Program dan Akun ke validator lokal")],-1),Un=n("h3",{id:"cara-memuat-akun-dari-mainnet",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#cara-memuat-akun-dari-mainnet","aria-hidden":"true"},"#"),s(" Cara memuat akun dari mainnet")],-1),Vn=n("p",null,"Dimungkinkan untuk mengunduh akun mint token SRM ke file:",-1),Wn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# solana account -u --output --output-file
    "),s(` solana account -u m --output json-compact --output-file SRM_token.json SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),Tn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana account -u m --output json-compact --output-file SRM_token.json SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),On=n("p",null,"Memuatnya ke localnet anda kemudian dilakukan dengan meneruskan file akun dan alamat ujuan (pada cluster lokal) saat memulai validator:",-1),Kn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-test-validator --account SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt SRM_token.json --reset -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),En=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# solana-test-validator --account
    --reset"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),qn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana account -u m --output json-compact --output-file SRM_token.json SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Gn=n("p",null,"Memuatnya ke localnet anda kemudian dilakukan dengan meneruskan file akun dan alamat ujuan (pada cluster lokal) saat memulai validator:",-1),Nn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-test-validator --account SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt SRM_token.json --reset +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Xn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# solana-test-validator --account
    --reset"),s(` solana-test-validator --account SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt SRM_token.json --reset -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),In=n("h3",{id:"cara-memuat-program-dari-mainnet",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#cara-memuat-program-dari-mainnet","aria-hidden":"true"},"#"),s(" Cara memuat program dari mainnet")],-1),Un=n("p",null,"Demikian pula, dimungkinkan untuk mengunduh program Serum Dex v3:",-1),Vn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# solana program dump -u
    "),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),Hn=n("h3",{id:"cara-memuat-program-dari-mainnet",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#cara-memuat-program-dari-mainnet","aria-hidden":"true"},"#"),s(" Cara memuat program dari mainnet")],-1),Bn=n("p",null,"Demikian pula, dimungkinkan untuk mengunduh program Serum Dex v3:",-1),Dn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# solana program dump -u
    "),s(` solana program dump -u m 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin serum_dex_v3.so -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),Wn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana program dump -u m 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin serum_dex_v3.so -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Gn=n("p",null,"Memuatnya ke localnet anda kemudian dilakukan dengan meneruskan file program dan alamat tujuan (pada cluster lokal) saat memulai validator:",-1),Nn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-test-validator --bpf-program 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin serum_dex_v3.so --reset -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Xn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# solana-test-validator --bpf-program
    --reset"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),Zn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana program dump -u m 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin serum_dex_v3.so +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),zn=n("p",null,"Memuatnya ke localnet anda kemudian dilakukan dengan meneruskan file program dan alamat tujuan (pada cluster lokal) saat memulai validator:",-1),Fn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-test-validator --bpf-program 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin serum_dex_v3.so --reset +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Qn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# solana-test-validator --bpf-program
    --reset"),s(` solana-test-validator --bpf-program 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin serum_dex_v3.so --reset -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1);function Hn(Bn,Dn){const p=l("RouterLink"),e=l("SolanaCodeGroupItem"),o=l("SolanaCodeGroup"),c=l("ExternalLinkIcon");return i(),r(k,null,[b,g,h,n("p",null,[_,t(p,{to:"/getting-started/installation.html#install-cli"},{default:a(()=>[w]),_:1}),y]),f,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[v]),preview:a(()=>[C]),_:1}),t(e,{title:"Python"},{default:a(()=>[x]),preview:a(()=>[S]),_:1}),t(e,{title:"Rust"},{default:a(()=>[A]),preview:a(()=>[R]),_:1}),t(e,{title:"CLI"},{default:a(()=>[L]),preview:a(()=>[P]),_:1})]),_:1}),j,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[M]),preview:a(()=>[T]),_:1}),t(e,{title:"Python"},{default:a(()=>[O]),preview:a(()=>[K]),_:1}),t(e,{title:"Rust"},{default:a(()=>[E]),preview:a(()=>[I]),_:1}),t(e,{title:"CLI"},{default:a(()=>[U]),preview:a(()=>[V]),_:1})]),_:1}),W,G,n("p",null,[N,n("a",X,[H,t(c)]),B,D,q,n("a",Z,[z,t(c)]),F]),n("p",null,[Q,J,Y,$,nn,sn,an,n("a",tn,[en,t(c)]),on,n("a",cn,[ln,t(c)]),pn]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[un]),preview:a(()=>[rn]),_:1}),t(e,{title:"Python"},{default:a(()=>[kn]),preview:a(()=>[mn]),_:1}),t(e,{title:"Rust"},{default:a(()=>[dn]),preview:a(()=>[bn]),_:1})]),_:1}),gn,hn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[_n]),preview:a(()=>[wn]),_:1}),t(e,{title:"Python"},{default:a(()=>[yn]),preview:a(()=>[fn]),_:1}),t(e,{title:"Rust"},{default:a(()=>[vn]),preview:a(()=>[Cn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[xn]),preview:a(()=>[Sn]),_:1})]),_:1}),An,Rn,Ln,Pn,jn,t(o,null,{default:a(()=>[t(e,{title:"CLI"},{default:a(()=>[Mn]),preview:a(()=>[Tn]),_:1})]),_:1}),On,t(o,null,{default:a(()=>[t(e,{title:"CLI"},{preview:a(()=>[Kn]),default:a(()=>[En]),_:1})]),_:1}),In,Un,t(o,null,{default:a(()=>[t(e,{title:"CLI"},{default:a(()=>[Vn]),preview:a(()=>[Wn]),_:1})]),_:1}),Gn,t(o,null,{default:a(()=>[t(e,{title:"CLI"},{preview:a(()=>[Nn]),default:a(()=>[Xn]),_:1})]),_:1})],64)}var Zn=u(d,[["render",Hn]]);export{Zn as default}; +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1);function Jn(Yn,$n){const p=l("RouterLink"),e=l("SolanaCodeGroupItem"),o=l("SolanaCodeGroup"),c=l("ExternalLinkIcon");return i(),r(k,null,[d,g,h,n("p",null,[_,t(p,{to:"/getting-started/installation.html#install-cli"},{default:a(()=>[y]),_:1}),w]),f,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[v]),preview:a(()=>[C]),_:1}),t(e,{title:"Python"},{default:a(()=>[x]),preview:a(()=>[S]),_:1}),t(e,{title:"C++"},{default:a(()=>[A]),preview:a(()=>[R]),_:1}),t(e,{title:"Rust"},{default:a(()=>[L]),preview:a(()=>[P]),_:1}),t(e,{title:"CLI"},{default:a(()=>[j]),preview:a(()=>[M]),_:1})]),_:1}),T,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[K]),preview:a(()=>[I]),_:1}),t(e,{title:"Python"},{default:a(()=>[O]),preview:a(()=>[E]),_:1}),t(e,{title:"C++"},{default:a(()=>[U]),preview:a(()=>[V]),_:1}),t(e,{title:"Rust"},{default:a(()=>[W]),preview:a(()=>[q]),_:1}),t(e,{title:"CLI"},{default:a(()=>[G]),preview:a(()=>[N]),_:1})]),_:1}),X,H,n("p",null,[B,n("a",D,[Z,t(c)]),z,F,Q,n("a",J,[Y,t(c)]),$]),n("p",null,[nn,sn,an,tn,en,on,cn,n("a",ln,[pn,t(c)]),un,n("a",rn,[kn,t(c)]),bn]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[mn]),preview:a(()=>[dn]),_:1}),t(e,{title:"Python"},{default:a(()=>[gn]),preview:a(()=>[hn]),_:1}),t(e,{title:"C++"},{default:a(()=>[_n]),preview:a(()=>[yn]),_:1}),t(e,{title:"Rust"},{default:a(()=>[wn]),preview:a(()=>[fn]),_:1})]),_:1}),vn,Cn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[xn]),preview:a(()=>[Sn]),_:1}),t(e,{title:"Python"},{default:a(()=>[An]),preview:a(()=>[Rn]),_:1}),t(e,{title:"C++"},{default:a(()=>[Ln]),preview:a(()=>[Pn]),_:1}),t(e,{title:"Rust"},{default:a(()=>[jn]),preview:a(()=>[Mn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[Tn]),preview:a(()=>[Kn]),_:1})]),_:1}),In,On,En,Un,Vn,t(o,null,{default:a(()=>[t(e,{title:"CLI"},{default:a(()=>[Wn]),preview:a(()=>[qn]),_:1})]),_:1}),Gn,t(o,null,{default:a(()=>[t(e,{title:"CLI"},{preview:a(()=>[Nn]),default:a(()=>[Xn]),_:1})]),_:1}),Hn,Bn,t(o,null,{default:a(()=>[t(e,{title:"CLI"},{default:a(()=>[Dn]),preview:a(()=>[Zn]),_:1})]),_:1}),zn,t(o,null,{default:a(()=>[t(e,{title:"CLI"},{preview:a(()=>[Fn]),default:a(()=>[Qn]),_:1})]),_:1})],64)}var ss=u(m,[["render",Jn]]);export{ss as default}; diff --git a/docs/.vuepress/dist/assets/local-development.html.0b35df29.js b/docs/.vuepress/dist/assets/local-development.html.3adcb5b4.js similarity index 68% rename from docs/.vuepress/dist/assets/local-development.html.0b35df29.js rename to docs/.vuepress/dist/assets/local-development.html.3adcb5b4.js index c6baa2522..81c32556d 100644 --- a/docs/.vuepress/dist/assets/local-development.html.0b35df29.js +++ b/docs/.vuepress/dist/assets/local-development.html.3adcb5b4.js @@ -1,4 +1,4 @@ -import{_ as u,r as l,o as i,c as r,a as n,b as t,w as a,F as k,d as s,e as m}from"./app.cfdf84e7.js";const b={},d=n("h1",{id:"local-development",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#local-development","aria-hidden":"true"},"#"),s(" Local Development")],-1),g=n("h2",{id:"\u0E40\u0E23\u0E34\u0E48\u0E21\u0E43\u0E0A\u0E49-local-validator",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E40\u0E23\u0E34\u0E48\u0E21\u0E43\u0E0A\u0E49-local-validator","aria-hidden":"true"},"#"),s(" \u0E40\u0E23\u0E34\u0E48\u0E21\u0E43\u0E0A\u0E49 Local Validator")],-1),h=n("p",null,"\u0E01\u0E32\u0E23\u0E17\u0E14\u0E2A\u0E2D\u0E1A program \u0E17\u0E35\u0E48 local \u0E08\u0E30\u0E40\u0E2A\u0E16\u0E35\u0E22\u0E23\u0E01\u0E27\u0E48\u0E32\u0E01\u0E32\u0E23\u0E17\u0E14\u0E2A\u0E2D\u0E1A\u0E1A\u0E19 devnet \u0E41\u0E25\u0E30\u0E21\u0E31\u0E19\u0E22\u0E31\u0E07\u0E0A\u0E48\u0E27\u0E22\u0E40\u0E23\u0E32\u0E17\u0E14\u0E2A\u0E2D\u0E1A\u0E01\u0E48\u0E2D\u0E19\u0E17\u0E35\u0E48\u0E08\u0E30\u0E44\u0E1B\u0E25\u0E2D\u0E07\u0E1A\u0E19 devnet \u0E2D\u0E35\u0E01\u0E14\u0E49\u0E27\u0E22",-1),_=s("\u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07 local-test-validator \u0E42\u0E14\u0E22\u0E01\u0E32\u0E23\u0E25\u0E07 "),w=s("solana tool suite"),f=s(" \u0E41\u0E25\u0E30 run \u0E04\u0E33\u0E2A\u0E31\u0E48\u0E07\u0E19\u0E35\u0E49"),y=m(`
    solana-test-validator
    +import{_ as u,r as l,o as i,c as r,a as n,b as t,w as a,F as k,d as s,e as b}from"./app.2fbb9e96.js";const m={},d=n("h1",{id:"local-development",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#local-development","aria-hidden":"true"},"#"),s(" Local Development")],-1),g=n("h2",{id:"\u0E40\u0E23\u0E34\u0E48\u0E21\u0E43\u0E0A\u0E49-local-validator",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E40\u0E23\u0E34\u0E48\u0E21\u0E43\u0E0A\u0E49-local-validator","aria-hidden":"true"},"#"),s(" \u0E40\u0E23\u0E34\u0E48\u0E21\u0E43\u0E0A\u0E49 Local Validator")],-1),h=n("p",null,"\u0E01\u0E32\u0E23\u0E17\u0E14\u0E2A\u0E2D\u0E1A program \u0E17\u0E35\u0E48 local \u0E08\u0E30\u0E40\u0E2A\u0E16\u0E35\u0E22\u0E23\u0E01\u0E27\u0E48\u0E32\u0E01\u0E32\u0E23\u0E17\u0E14\u0E2A\u0E2D\u0E1A\u0E1A\u0E19 devnet \u0E41\u0E25\u0E30\u0E21\u0E31\u0E19\u0E22\u0E31\u0E07\u0E0A\u0E48\u0E27\u0E22\u0E40\u0E23\u0E32\u0E17\u0E14\u0E2A\u0E2D\u0E1A\u0E01\u0E48\u0E2D\u0E19\u0E17\u0E35\u0E48\u0E08\u0E30\u0E44\u0E1B\u0E25\u0E2D\u0E07\u0E1A\u0E19 devnet \u0E2D\u0E35\u0E01\u0E14\u0E49\u0E27\u0E22",-1),_=s("\u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07 local-test-validator \u0E42\u0E14\u0E22\u0E01\u0E32\u0E23\u0E25\u0E07 "),w=s("solana tool suite"),y=s(" \u0E41\u0E25\u0E30 run \u0E04\u0E33\u0E2A\u0E31\u0E48\u0E07\u0E19\u0E35\u0E49"),f=b(`
    solana-test-validator
     

    \u0E1B\u0E23\u0E30\u0E42\u0E22\u0E0A\u0E19\u0E4C\u0E02\u0E2D\u0E07\u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49 local-test-validator \u0E04\u0E37\u0E2D:

    • \u0E44\u0E21\u0E48\u0E21\u0E35\u0E02\u0E49\u0E2D\u0E08\u0E33\u0E01\u0E31\u0E14 (rate-limits) \u200B\u0E43\u0E19\u0E01\u0E32\u0E23\u0E40\u0E23\u0E35\u0E22\u0E01 RPC
    • \u0E44\u0E21\u0E48\u0E21\u0E35\u0E02\u0E49\u0E2D\u0E08\u0E33\u0E01\u0E31\u0E14\u0E43\u0E19\u0E01\u0E32\u0E23\u0E02\u0E2D airdrop
    • deploy program on-chain \u0E44\u0E14\u0E49\u0E42\u0E14\u0E22\u0E15\u0E23\u0E07 (--bpf-program ...)
    • \u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 clone accounts \u0E41\u0E25\u0E30 programs \u0E08\u0E32\u0E01 public cluster \u0E44\u0E14\u0E49 (--clone ...)
    • \u0E15\u0E31\u0E49\u0E07\u0E04\u0E48\u0E32 transaction history retention \u0E44\u0E14\u0E49 (--limit-ledger-size ...)
    • \u0E15\u0E31\u0E49\u0E07\u0E04\u0E48\u0E32\u0E04\u0E27\u0E32\u0E21\u0E22\u0E32\u0E27 epoch \u0E44\u0E14\u0E49 (--slots-per-epoch ...)
    • \u0E02\u0E49\u0E32\u0E21\u0E44\u0E1B slot \u0E44\u0E2B\u0E19\u0E01\u0E47\u0E44\u0E14\u0E49\u0E15\u0E32\u0E21\u0E43\u0E08 (--warp-slot ...)

    Connecting to Environments

    \u0E40\u0E27\u0E25\u0E32 dev \u0E1A\u0E19 Solana development \u0E40\u0E23\u0E32\u0E15\u0E49\u0E2D\u0E07 connect \u0E44\u0E1B\u0E17\u0E35\u0E48 RPC API endpoint \u0E0B\u0E36\u0E48\u0E07 Solana \u0E08\u0E30\u0E21\u0E35\u0E2D\u0E22\u0E39\u0E48 3 public development environments:

    • mainnet-beta https://api.mainnet-beta.solana.com
    • devnet https://api.devnet.solana.com
    • testnet https://api.testnet.solana.com
    `,6),v=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" clusterApiUrl"),n("span",{class:"token punctuation"},","),s(" Connection "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -9,40 +9,58 @@ import{_ as u,r as l,o as i,c as r,a as n,b as t,w as a,F as k,d as s,e as m}fro client `),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.mainnet-beta.solana.com"'),n("span",{class:"token punctuation"},")"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),S=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("client "),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.mainnet-beta.solana.com"'),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),A=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),A=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + Connection `),n("span",{class:"token function"},"connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.mainnet-beta.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token keyword"},"return"),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),R=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[s("Connection "),n("span",{class:"token function"},"connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.mainnet-beta.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),L=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("commitment_config"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"let"),s(" rpc_url "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"String"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.mainnet-beta.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"let"),s(" client "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new_with_commitment"),n("span",{class:"token punctuation"},"("),s("rpc_url"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"confirmed"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),R=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" rpc_url "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"String"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.mainnet-beta.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),P=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" rpc_url "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"String"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.mainnet-beta.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"let"),s(" client "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new_with_commitment"),n("span",{class:"token punctuation"},"("),s("rpc_url"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"confirmed"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),L=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana config "),n("span",{class:"token builtin class-name"},"set"),s(` --url https://api.mainnet-beta.solana.com -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),P=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana config "),n("span",{class:"token builtin class-name"},"set"),s(` --url https://api.mainnet-beta.solana.com -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),T=n("p",null,"Finally, you \u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 also connect to a private cluster, either one local or running remotely with the following:",-1),M=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),T=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana config "),n("span",{class:"token builtin class-name"},"set"),s(` --url https://api.mainnet-beta.solana.com +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),I=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana config "),n("span",{class:"token builtin class-name"},"set"),s(` --url https://api.mainnet-beta.solana.com +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),M=n("p",null,"Finally, you \u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 also connect to a private cluster, either one local or running remotely with the following:",-1),O=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token comment"},"// This will connect you to your local validator"),s(` `),n("span",{class:"token keyword"},"const"),s(" connection "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token string"},'"confirmed"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),O=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" connection "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token string"},'"confirmed"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),K=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" connection "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token string"},'"confirmed"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),E=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("api "),n("span",{class:"token keyword"},"import"),s(` Client client `),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),I=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("client "),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),K=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),U=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("client "),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),j=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + Connection `),n("span",{class:"token function"},"connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token keyword"},"return"),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),V=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[s("Connection "),n("span",{class:"token function"},"connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),W=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("commitment_config"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"let"),s(" rpc_url "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"String"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"let"),s(" client "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new_with_commitment"),n("span",{class:"token punctuation"},"("),s("rpc_url"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"confirmed"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),U=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" rpc_url "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"String"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),q=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" rpc_url "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"String"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"let"),s(" client "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new_with_commitment"),n("span",{class:"token punctuation"},"("),s("rpc_url"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"confirmed"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),j=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana config "),n("span",{class:"token builtin class-name"},"set"),s(` --url http://privaterpc.com -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),V=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana config "),n("span",{class:"token builtin class-name"},"set"),s(` --url http://privaterpc.com -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),W=n("h2",{id:"subscribing-to-events",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#subscribing-to-events","aria-hidden":"true"},"#"),s(" Subscribing to Events")],-1),G=n("p",null,"Websockets \u0E08\u0E30\u0E21\u0E35 pub/sub interface \u0E17\u0E35\u0E48\u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E1F\u0E31\u0E07 events \u0E17\u0E35\u0E48\u0E40\u0E23\u0E32\u0E2A\u0E19\u0E43\u0E08\u0E41\u0E17\u0E19\u0E17\u0E35\u0E48\u0E08\u0E30\u0E04\u0E2D\u0E22\u0E27\u0E19\u0E46 \u0E40\u0E23\u0E35\u0E22\u0E01 HTTP endpoint \u0E1A\u0E48\u0E2D\u0E22\u0E46 \u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E23\u0E31\u0E1A\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E40\u0E09\u0E1E\u0E32\u0E30\u0E15\u0E2D\u0E19\u0E21\u0E31\u0E19\u0E40\u0E01\u0E34\u0E14\u0E02\u0E36\u0E49\u0E19\u0E44\u0E14\u0E49",-1),N=s("Solana's web3 "),X={href:"https://solana-labs.github.io/solana-web3.js/classes/Connection.html",target:"_blank",rel:"noopener noreferrer"},H=n("code",null,"Connection",-1),B=s(" \u0E08\u0E30\u0E21\u0E35 websocket endpoint \u0E41\u0E25\u0E30\u0E08\u0E30 registers \u0E15\u0E31\u0E27 websocket client \u0E40\u0E21\u0E37\u0E48\u0E2D\u0E40\u0E23\u0E32 new "),q=n("code",null,"Connection",-1),D=s(" \u0E02\u0E36\u0E49\u0E19\u0E21\u0E32\u0E43\u0E2B\u0E21\u0E48 (\u0E14\u0E39 source code "),Z={href:"https://github.com/solana-labs/solana-web3.js/blob/45923ca00e4cc1ed079d8e55ecbee83e5b4dc174/src/connection.ts#L2100",target:"_blank",rel:"noopener noreferrer"},F=s("\u0E17\u0E35\u0E48\u0E19\u0E35\u0E48"),z=s(")."),Q=n("code",null,"Connection",-1),J=s(" class \u0E08\u0E30\u0E21\u0E35 pub/sub methods - \u0E17\u0E35\u0E48\u0E08\u0E30\u0E21\u0E35\u0E0A\u0E37\u0E48\u0E2D\u0E40\u0E23\u0E34\u0E48\u0E21\u0E14\u0E49\u0E27\u0E22 "),Y=n("code",null,"on",-1),$=s(" \u0E40\u0E2B\u0E21\u0E37\u0E2D\u0E19 event emitters \u0E17\u0E31\u0E48\u0E27\u0E44\u0E1B \u0E40\u0E27\u0E25\u0E32\u0E40\u0E23\u0E32\u0E40\u0E23\u0E35\u0E22\u0E01 listener methods \u0E1E\u0E27\u0E01\u0E19\u0E35\u0E49 \u0E21\u0E31\u0E19\u0E08\u0E30 registers subscription \u0E43\u0E2B\u0E21\u0E48\u0E44\u0E1B\u0E17\u0E35\u0E48 websocket client \u0E02\u0E2D\u0E07 "),nn=n("code",null,"Connection",-1),sn=s(" \u0E19\u0E31\u0E49\u0E19\u0E46 \u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E02\u0E2D\u0E07 pub/sub method \u0E17\u0E35\u0E48\u0E40\u0E23\u0E32\u0E43\u0E0A\u0E49\u0E14\u0E49\u0E32\u0E19\u0E25\u0E48\u0E32\u0E07\u0E04\u0E37\u0E2D "),an={href:"https://solana-labs.github.io/solana-web3.js/classes/Connection.html#onAccountChange",target:"_blank",rel:"noopener noreferrer"},tn=n("code",null,"onAccountChange",-1),en=s(". \u0E2A\u0E48\u0E27\u0E19 callback \u0E08\u0E30\u0E43\u0E2B\u0E49 updated state data \u0E1C\u0E48\u0E32\u0E19 arguments (\u0E14\u0E39\u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E44\u0E14\u0E49\u0E17\u0E35\u0E48 "),on={href:"https://solana-labs.github.io/solana-web3.js/modules.html#AccountChangeCallback",target:"_blank",rel:"noopener noreferrer"},cn=n("code",null,"AccountChangeCallback",-1),ln=s(")."),pn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" clusterApiUrl"),n("span",{class:"token punctuation"},","),s(" Connection"),n("span",{class:"token punctuation"},","),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),G=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana config "),n("span",{class:"token builtin class-name"},"set"),s(` --url http://privaterpc.com +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),N=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana config "),n("span",{class:"token builtin class-name"},"set"),s(` --url http://privaterpc.com +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),X=n("h2",{id:"subscribing-to-events",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#subscribing-to-events","aria-hidden":"true"},"#"),s(" Subscribing to Events")],-1),H=n("p",null,"Websockets \u0E08\u0E30\u0E21\u0E35 pub/sub interface \u0E17\u0E35\u0E48\u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E1F\u0E31\u0E07 events \u0E17\u0E35\u0E48\u0E40\u0E23\u0E32\u0E2A\u0E19\u0E43\u0E08\u0E41\u0E17\u0E19\u0E17\u0E35\u0E48\u0E08\u0E30\u0E04\u0E2D\u0E22\u0E27\u0E19\u0E46 \u0E40\u0E23\u0E35\u0E22\u0E01 HTTP endpoint \u0E1A\u0E48\u0E2D\u0E22\u0E46 \u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E23\u0E31\u0E1A\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E40\u0E09\u0E1E\u0E32\u0E30\u0E15\u0E2D\u0E19\u0E21\u0E31\u0E19\u0E40\u0E01\u0E34\u0E14\u0E02\u0E36\u0E49\u0E19\u0E44\u0E14\u0E49",-1),B=s("Solana's web3 "),D={href:"https://solana-labs.github.io/solana-web3.js/classes/Connection.html",target:"_blank",rel:"noopener noreferrer"},Z=n("code",null,"Connection",-1),F=s(" \u0E08\u0E30\u0E21\u0E35 websocket endpoint \u0E41\u0E25\u0E30\u0E08\u0E30 registers \u0E15\u0E31\u0E27 websocket client \u0E40\u0E21\u0E37\u0E48\u0E2D\u0E40\u0E23\u0E32 new "),z=n("code",null,"Connection",-1),Q=s(" \u0E02\u0E36\u0E49\u0E19\u0E21\u0E32\u0E43\u0E2B\u0E21\u0E48 (\u0E14\u0E39 source code "),J={href:"https://github.com/solana-labs/solana-web3.js/blob/45923ca00e4cc1ed079d8e55ecbee83e5b4dc174/src/connection.ts#L2100",target:"_blank",rel:"noopener noreferrer"},Y=s("\u0E17\u0E35\u0E48\u0E19\u0E35\u0E48"),$=s(")."),nn=n("code",null,"Connection",-1),sn=s(" class \u0E08\u0E30\u0E21\u0E35 pub/sub methods - \u0E17\u0E35\u0E48\u0E08\u0E30\u0E21\u0E35\u0E0A\u0E37\u0E48\u0E2D\u0E40\u0E23\u0E34\u0E48\u0E21\u0E14\u0E49\u0E27\u0E22 "),an=n("code",null,"on",-1),tn=s(" \u0E40\u0E2B\u0E21\u0E37\u0E2D\u0E19 event emitters \u0E17\u0E31\u0E48\u0E27\u0E44\u0E1B \u0E40\u0E27\u0E25\u0E32\u0E40\u0E23\u0E32\u0E40\u0E23\u0E35\u0E22\u0E01 listener methods \u0E1E\u0E27\u0E01\u0E19\u0E35\u0E49 \u0E21\u0E31\u0E19\u0E08\u0E30 registers subscription \u0E43\u0E2B\u0E21\u0E48\u0E44\u0E1B\u0E17\u0E35\u0E48 websocket client \u0E02\u0E2D\u0E07 "),en=n("code",null,"Connection",-1),on=s(" \u0E19\u0E31\u0E49\u0E19\u0E46 \u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E02\u0E2D\u0E07 pub/sub method \u0E17\u0E35\u0E48\u0E40\u0E23\u0E32\u0E43\u0E0A\u0E49\u0E14\u0E49\u0E32\u0E19\u0E25\u0E48\u0E32\u0E07\u0E04\u0E37\u0E2D "),cn={href:"https://solana-labs.github.io/solana-web3.js/classes/Connection.html#onAccountChange",target:"_blank",rel:"noopener noreferrer"},ln=n("code",null,"onAccountChange",-1),pn=s(". \u0E2A\u0E48\u0E27\u0E19 callback \u0E08\u0E30\u0E43\u0E2B\u0E49 updated state data \u0E1C\u0E48\u0E32\u0E19 arguments (\u0E14\u0E39\u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E44\u0E14\u0E49\u0E17\u0E35\u0E48 "),un={href:"https://solana-labs.github.io/solana-web3.js/modules.html#AccountChangeCallback",target:"_blank",rel:"noopener noreferrer"},rn=n("code",null,"AccountChangeCallback",-1),kn=s(")."),bn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" clusterApiUrl"),n("span",{class:"token punctuation"},","),s(" Connection"),n("span",{class:"token punctuation"},","),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token comment"},"// Establish new connect to devnet - websocket client connected to devnet will also be registered here"),s(` @@ -59,7 +77,7 @@ client `),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"t `),n("span",{class:"token string"},'"confirmed"'),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br")])],-1),un=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token comment"},"// Establish new connect to devnet - websocket client connected to devnet will also be registered here"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br")])],-1),mn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token comment"},"// Establish new connect to devnet - websocket client connected to devnet will also be registered here"),s(` `),n("span",{class:"token keyword"},"const"),s(" connection "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"clusterApiUrl"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"devnet"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token string"},'"confirmed"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token comment"},"// Create a test wallet to listen to"),s(` @@ -72,8 +90,8 @@ connection`),n("span",{class:"token punctuation"},"."),n("span",{class:"token fu `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Updated account info: "'),n("span",{class:"token punctuation"},","),s(" updatedAccountInfo"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token string"},'"confirmed"'),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br")])],-1),rn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(` asyncio -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br")])],-1),dn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(` asyncio +`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair `),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("websocket_api "),n("span",{class:"token keyword"},"import"),s(` connect `),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token keyword"},"def"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},":"),s(` @@ -81,7 +99,7 @@ connection`),n("span",{class:"token punctuation"},"."),n("span",{class:"token fu `),n("span",{class:"token comment"},"# Create a Test Wallet"),s(` wallet `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"# Subscribe to the Test wallet to listen for events"),s(` - `),n("span",{class:"token keyword"},"await"),s(" websocket"),n("span",{class:"token punctuation"},"."),s("account_subscribe"),n("span",{class:"token punctuation"},"("),s("wallet"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),s(` + `),n("span",{class:"token keyword"},"await"),s(" websocket"),n("span",{class:"token punctuation"},"."),s("account_subscribe"),n("span",{class:"token punctuation"},"("),s("wallet"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"# Capture response from account subscription "),s(` first_resp `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" websocket"),n("span",{class:"token punctuation"},"."),s("recv"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Subscription successful with id {}, listening for events \\n"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("first_resp"),n("span",{class:"token punctuation"},"."),s("result"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` @@ -89,17 +107,66 @@ connection`),n("span",{class:"token punctuation"},"."),n("span",{class:"token fu `),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("updated_account_info"),n("span",{class:"token punctuation"},")"),s(` asyncio`),n("span",{class:"token punctuation"},"."),s("run"),n("span",{class:"token punctuation"},"("),s("main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br")])],-1),kn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token keyword"},"with"),s(" connect"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"wss://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token keyword"},"as"),s(" websocket"),n("span",{class:"token punctuation"},":"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br")])],-1),gn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token keyword"},"with"),s(" connect"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"wss://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token keyword"},"as"),s(" websocket"),n("span",{class:"token punctuation"},":"),s(` `),n("span",{class:"token comment"},"# Create a Test Wallet"),s(` wallet `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"# Subscribe to the Test wallet to listen for events"),s(` - `),n("span",{class:"token keyword"},"await"),s(" websocket"),n("span",{class:"token punctuation"},"."),s("account_subscribe"),n("span",{class:"token punctuation"},"("),s("wallet"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),s(` + `),n("span",{class:"token keyword"},"await"),s(" websocket"),n("span",{class:"token punctuation"},"."),s("account_subscribe"),n("span",{class:"token punctuation"},"("),s("wallet"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"# Capture response from account subscription "),s(` first_resp `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" websocket"),n("span",{class:"token punctuation"},"."),s("recv"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Subscription successful with id {}, listening for events \\n"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("first_resp"),n("span",{class:"token punctuation"},"."),s("result"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` updated_account_info `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" websocket"),n("span",{class:"token punctuation"},"."),s("recv"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("updated_account_info"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),mn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("pubsub_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"PubsubClient"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),hn=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token comment"},"// clang++ on_account_change.cpp -o on_account_change -std=c++17 -lssl -lcrypto -lsodium"),s(` + +`),n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + Connection `),n("span",{class:"token function"},"connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"int"),s(" subscriptionId "),n("span",{class:"token operator"},"="),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"on_account_change"),n("span",{class:"token punctuation"},"("),s("key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token punctuation"},"["),n("span",{class:"token operator"},"&"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},"("),s("Result"),n("span",{class:"token operator"},"<"),s("Account"),n("span",{class:"token operator"},">"),s(" result"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + Account account `),n("span",{class:"token operator"},"="),s(" result"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"owner = "'),s(),n("span",{class:"token operator"},"<<"),s(" account"),n("span",{class:"token punctuation"},"."),s("owner"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"lamports = "'),s(),n("span",{class:"token operator"},"<<"),s(" account"),n("span",{class:"token punctuation"},"."),s("lamports "),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"data = "'),s(),n("span",{class:"token operator"},"<<"),s(" account"),n("span",{class:"token punctuation"},"."),s("data "),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"executable = "'),s(),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token punctuation"},"("),s("account"),n("span",{class:"token punctuation"},"."),s("executable "),n("span",{class:"token operator"},"?"),s(),n("span",{class:"token string"},'"true"'),s(),n("span",{class:"token operator"},":"),s(),n("span",{class:"token string"},'"false"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token function"},"sleep"),n("span",{class:"token punctuation"},"("),n("span",{class:"token number"},"1"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + std`),n("span",{class:"token double-colon punctuation"},"::"),s("string tx_hash "),n("span",{class:"token operator"},"="),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"request_airdrop"),n("span",{class:"token punctuation"},"("),s("key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"tx hash = "'),s(),n("span",{class:"token operator"},"<<"),s(" tx_hash "),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"for"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"int"),s(" i "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(" i "),n("span",{class:"token operator"},"<"),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},";"),s(" i"),n("span",{class:"token operator"},"++"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + connection`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"poll"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token function"},"sleep"),n("span",{class:"token punctuation"},"("),n("span",{class:"token number"},"1"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token punctuation"},"}"),s(` + + connection`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"remove_account_listener"),n("span",{class:"token punctuation"},"("),s("subscriptionId"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"return"),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br")])],-1),_n=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(" subscriptionId "),n("span",{class:"token operator"},"="),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"on_account_change"),n("span",{class:"token punctuation"},"("),s("key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token punctuation"},"["),n("span",{class:"token operator"},"&"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},"("),s("Result"),n("span",{class:"token operator"},"<"),s("Account"),n("span",{class:"token operator"},">"),s(" result"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + Account account `),n("span",{class:"token operator"},"="),s(" result"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"owner = "'),s(),n("span",{class:"token operator"},"<<"),s(" account"),n("span",{class:"token punctuation"},"."),s("owner"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"lamports = "'),s(),n("span",{class:"token operator"},"<<"),s(" account"),n("span",{class:"token punctuation"},"."),s("lamports "),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"data = "'),s(),n("span",{class:"token operator"},"<<"),s(" account"),n("span",{class:"token punctuation"},"."),s("data "),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"executable = "'),s(),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token punctuation"},"("),s("account"),n("span",{class:"token punctuation"},"."),s("executable "),n("span",{class:"token operator"},"?"),s(),n("span",{class:"token string"},'"true"'),s(),n("span",{class:"token operator"},":"),s(),n("span",{class:"token string"},'"false"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"for"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"int"),s(" i "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(" i "),n("span",{class:"token operator"},"<"),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},";"),s(" i"),n("span",{class:"token operator"},"++"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + connection`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"poll"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token function"},"sleep"),n("span",{class:"token punctuation"},"("),n("span",{class:"token number"},"1"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` + +connection`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"remove_account_listener"),n("span",{class:"token punctuation"},"("),s("subscriptionId"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br")])],-1),wn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("pubsub_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"PubsubClient"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_config"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcAccountInfoConfig"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("commitment_config"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("signature"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"Signer"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` @@ -136,7 +203,7 @@ asyncio`),n("span",{class:"token punctuation"},"."),s("run"),n("span",{class:"to `),n("span",{class:"token macro property"},"println!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Errooooor"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br")])],-1),bn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" ws_url "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"String"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"wss://api.devnet.solana.com/"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br")])],-1),yn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" ws_url "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"String"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"wss://api.devnet.solana.com/"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"let"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"mut"),s(" client"),n("span",{class:"token punctuation"},","),s(" receiver"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"PubsubClient"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"account_subscribe"),n("span",{class:"token punctuation"},"("),s(` `),n("span",{class:"token operator"},"&"),s("ws_url"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token operator"},"&"),s("pubkey"),n("span",{class:"token punctuation"},","),s(` @@ -148,7 +215,7 @@ asyncio`),n("span",{class:"token punctuation"},"."),s("run"),n("span",{class:"to `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"let"),s(" message "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"match"),s(" receiver"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"recv"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token macro property"},"println!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"{:?}"'),n("span",{class:"token punctuation"},","),s(" message"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br")])],-1),dn=n("h2",{id:"getting-test-sol",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#getting-test-sol","aria-hidden":"true"},"#"),s(" Getting Test SOL")],-1),gn=n("p",null,"\u0E40\u0E21\u0E37\u0E48\u0E2D\u0E40\u0E23\u0E32\u0E17\u0E33\u0E07\u0E32\u0E19\u0E17\u0E35\u0E48 local \u0E40\u0E23\u0E32\u0E08\u0E30\u0E15\u0E49\u0E2D\u0E07\u0E01\u0E32\u0E23 SOL \u0E43\u0E19\u0E01\u0E32\u0E23\u0E2A\u0E48\u0E07 transactions \u0E1A\u0E19 non-mainnet environments \u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E02\u0E2D SOL \u0E44\u0E14\u0E49\u0E14\u0E49\u0E27\u0E22\u0E01\u0E32\u0E23 airdrop \u0E44\u0E1B\u0E17\u0E35\u0E48 address \u0E02\u0E2D\u0E07\u0E40\u0E23\u0E32",-1),hn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection"),n("span",{class:"token punctuation"},","),s(" Keypair"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token constant"},"LAMPORTS_PER_SOL"),s(),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br")])],-1),fn=n("h2",{id:"getting-test-sol",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#getting-test-sol","aria-hidden":"true"},"#"),s(" Getting Test SOL")],-1),vn=n("p",null,"\u0E40\u0E21\u0E37\u0E48\u0E2D\u0E40\u0E23\u0E32\u0E17\u0E33\u0E07\u0E32\u0E19\u0E17\u0E35\u0E48 local \u0E40\u0E23\u0E32\u0E08\u0E30\u0E15\u0E49\u0E2D\u0E07\u0E01\u0E32\u0E23 SOL \u0E43\u0E19\u0E01\u0E32\u0E23\u0E2A\u0E48\u0E07 transactions \u0E1A\u0E19 non-mainnet environments \u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E02\u0E2D SOL \u0E44\u0E14\u0E49\u0E14\u0E49\u0E27\u0E22\u0E01\u0E32\u0E23 airdrop \u0E44\u0E1B\u0E17\u0E35\u0E48 address \u0E02\u0E2D\u0E07\u0E40\u0E23\u0E32",-1),Cn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection"),n("span",{class:"token punctuation"},","),s(" Keypair"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token constant"},"LAMPORTS_PER_SOL"),s(),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` @@ -166,13 +233,13 @@ asyncio`),n("span",{class:"token punctuation"},"."),s("run"),n("span",{class:"to signature `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br")])],-1),_n=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" airdropSignature "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"requestAirdrop"),n("span",{class:"token punctuation"},"("),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br")])],-1),xn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" airdropSignature "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"requestAirdrop"),n("span",{class:"token punctuation"},"("),s(` keypair`),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token constant"},"LAMPORTS_PER_SOL"),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"await"),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"confirmTransaction"),n("span",{class:"token punctuation"},"("),s("airdropSignature"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),wn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),Sn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair `),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("api "),n("span",{class:"token keyword"},"import"),s(` Client wallet `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` @@ -180,14 +247,32 @@ wallet `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:" client `),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"#Input Airdrop amount in LAMPORTS"),s(` -client`),n("span",{class:"token punctuation"},"."),s("request_airdrop"),n("span",{class:"token punctuation"},"("),s("wallet"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"1000000000"),n("span",{class:"token punctuation"},")"),s(` +client`),n("span",{class:"token punctuation"},"."),s("request_airdrop"),n("span",{class:"token punctuation"},"("),s("wallet"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"1000000000"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"#Airdrops 1 SOL"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),fn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token comment"},"#Input Airdrop amount in LAMPORTS"),s(` -client`),n("span",{class:"token punctuation"},"."),s("request_airdrop"),n("span",{class:"token punctuation"},"("),s("wallet"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"1000000000"),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),An=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token comment"},"#Input Airdrop amount in LAMPORTS"),s(` +client`),n("span",{class:"token punctuation"},"."),s("request_airdrop"),n("span",{class:"token punctuation"},"("),s("wallet"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"1000000000"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"#Airdrops 1 SOL"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),yn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),Rn=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token comment"},"// clang++ request_airdrop.cpp -o request_airdrop -std=c++17 -lssl -lcrypto -lsodium"),s(` + +`),n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + Connection `),n("span",{class:"token function"},"connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + std`),n("span",{class:"token double-colon punctuation"},"::"),s("string tx_hash "),n("span",{class:"token operator"},"="),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"request_airdrop"),n("span",{class:"token punctuation"},"("),s("key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"tx hash = "'),s(),n("span",{class:"token operator"},"<<"),s(" tx_hash "),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"return"),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br")])],-1),Ln=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[s("connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"request_airdrop"),n("span",{class:"token punctuation"},"("),s("key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Pn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("commitment_config"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("native_token"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token constant"},"LAMPORTS_PER_SOL"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("signature"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"Signer"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` @@ -209,7 +294,7 @@ client`),n("span",{class:"token punctuation"},"."),s("request_airdrop"),n("span" `),n("span",{class:"token class-name"},"Err"),n("span",{class:"token punctuation"},"("),s("_"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token macro property"},"println!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Error requesting airdrop"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br")])],-1),vn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"match"),s(" client"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"request_airdrop"),n("span",{class:"token punctuation"},"("),n("span",{class:"token operator"},"&"),s("pubkey"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token constant"},"LAMPORTS_PER_SOL"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br")])],-1),Tn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"match"),s(" client"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"request_airdrop"),n("span",{class:"token punctuation"},"("),n("span",{class:"token operator"},"&"),s("pubkey"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token constant"},"LAMPORTS_PER_SOL"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token class-name"},"Ok"),n("span",{class:"token punctuation"},"("),s("sig"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token keyword"},"loop"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"if"),s(),n("span",{class:"token keyword"},"let"),s(),n("span",{class:"token class-name"},"Ok"),n("span",{class:"token punctuation"},"("),s("confirmed"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"="),s(" client"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"confirm_transaction"),n("span",{class:"token punctuation"},"("),n("span",{class:"token operator"},"&"),s("sig"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"if"),s(" confirmed "),n("span",{class:"token punctuation"},"{"),s(` @@ -220,21 +305,21 @@ client`),n("span",{class:"token punctuation"},"."),s("request_airdrop"),n("span" `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token class-name"},"Err"),n("span",{class:"token punctuation"},"("),s("_"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token macro property"},"println!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Error requesting airdrop"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),Cn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana airdrop "),n("span",{class:"token number"},"1"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),In=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana airdrop "),n("span",{class:"token number"},"1"),s(` `),n("span",{class:"token comment"},"# Return"),s(` `),n("span",{class:"token comment"},'# "1 SOL"'),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),xn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana airdrop "),n("span",{class:"token number"},"1"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Sn=n("h2",{id:"\u0E27\u0E34\u0E18\u0E35\u0E43\u0E0A\u0E49-mainnet-accounts-\u0E41\u0E25\u0E30-programs",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E27\u0E34\u0E18\u0E35\u0E43\u0E0A\u0E49-mainnet-accounts-\u0E41\u0E25\u0E30-programs","aria-hidden":"true"},"#"),s(" \u0E27\u0E34\u0E18\u0E35\u0E43\u0E0A\u0E49 Mainnet Accounts \u0E41\u0E25\u0E30 Programs")],-1),An=n("p",null,"local tests \u0E21\u0E31\u0E01\u0E08\u0E30\u0E15\u0E49\u0E2D\u0E07\u0E43\u0E0A\u0E49 programs \u0E41\u0E25\u0E30 accounts \u0E17\u0E35\u0E48\u0E21\u0E35\u0E2D\u0E22\u0E39\u0E48\u0E41\u0E25\u0E49\u0E27\u0E1A\u0E19 mainnet Solana CLI \u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E17\u0E35\u0E48\u0E08\u0E30:",-1),Rn=n("ul",null,[n("li",null,"Download Programs \u0E41\u0E25\u0E30 Accounts"),n("li",null,"Load Programs \u0E41\u0E25\u0E30 Accounts \u0E21\u0E32\u0E17\u0E35\u0E48 local validator")],-1),Ln=n("h3",{id:"\u0E27\u0E34\u0E18\u0E35-load-accounts-\u0E08\u0E32\u0E01-mainnet",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E27\u0E34\u0E18\u0E35-load-accounts-\u0E08\u0E32\u0E01-mainnet","aria-hidden":"true"},"#"),s(" \u0E27\u0E34\u0E18\u0E35 load accounts \u0E08\u0E32\u0E01 mainnet")],-1),Pn=n("p",null,"\u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 download SRM token mint account \u0E21\u0E32\u0E40\u0E1B\u0E47\u0E19 file \u0E44\u0E14\u0E49\u0E15\u0E32\u0E21\u0E19\u0E35\u0E49:",-1),Tn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# solana account -u --output --output-file
    "),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),Mn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana airdrop "),n("span",{class:"token number"},"1"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),On=n("h2",{id:"\u0E27\u0E34\u0E18\u0E35\u0E43\u0E0A\u0E49-mainnet-accounts-\u0E41\u0E25\u0E30-programs",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E27\u0E34\u0E18\u0E35\u0E43\u0E0A\u0E49-mainnet-accounts-\u0E41\u0E25\u0E30-programs","aria-hidden":"true"},"#"),s(" \u0E27\u0E34\u0E18\u0E35\u0E43\u0E0A\u0E49 Mainnet Accounts \u0E41\u0E25\u0E30 Programs")],-1),Kn=n("p",null,"local tests \u0E21\u0E31\u0E01\u0E08\u0E30\u0E15\u0E49\u0E2D\u0E07\u0E43\u0E0A\u0E49 programs \u0E41\u0E25\u0E30 accounts \u0E17\u0E35\u0E48\u0E21\u0E35\u0E2D\u0E22\u0E39\u0E48\u0E41\u0E25\u0E49\u0E27\u0E1A\u0E19 mainnet Solana CLI \u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E17\u0E35\u0E48\u0E08\u0E30:",-1),En=n("ul",null,[n("li",null,"Download Programs \u0E41\u0E25\u0E30 Accounts"),n("li",null,"Load Programs \u0E41\u0E25\u0E30 Accounts \u0E21\u0E32\u0E17\u0E35\u0E48 local validator")],-1),Un=n("h3",{id:"\u0E27\u0E34\u0E18\u0E35-load-accounts-\u0E08\u0E32\u0E01-mainnet",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E27\u0E34\u0E18\u0E35-load-accounts-\u0E08\u0E32\u0E01-mainnet","aria-hidden":"true"},"#"),s(" \u0E27\u0E34\u0E18\u0E35 load accounts \u0E08\u0E32\u0E01 mainnet")],-1),jn=n("p",null,"\u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 download SRM token mint account \u0E21\u0E32\u0E40\u0E1B\u0E47\u0E19 file \u0E44\u0E14\u0E49\u0E15\u0E32\u0E21\u0E19\u0E35\u0E49:",-1),Vn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# solana account -u --output --output-file
    "),s(` solana account -u m --output json-compact --output-file SRM_token.json SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),Mn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana account -u m --output json-compact --output-file SRM_token.json SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),On=n("p",null,"\u0E01\u0E32\u0E23 load \u0E21\u0E32\u0E17\u0E35\u0E48 localnet \u0E02\u0E2D\u0E07\u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E17\u0E33\u0E44\u0E14\u0E49\u0E42\u0E14\u0E22\u0E01\u0E32\u0E23\u0E2A\u0E48\u0E07 account's file \u0E41\u0E25\u0E30 address \u0E40\u0E1B\u0E49\u0E32\u0E2B\u0E21\u0E32\u0E22(\u0E44\u0E1B\u0E22\u0E31\u0E07 local cluster) \u0E15\u0E2D\u0E19\u0E40\u0E23\u0E34\u0E48\u0E21\u0E40\u0E1B\u0E34\u0E14\u0E43\u0E0A\u0E49 validator:",-1),En=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-test-validator --account SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt SRM_token.json --reset -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),In=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# solana-test-validator --account
    --reset"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),Wn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana account -u m --output json-compact --output-file SRM_token.json SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),qn=n("p",null,"\u0E01\u0E32\u0E23 load \u0E21\u0E32\u0E17\u0E35\u0E48 localnet \u0E02\u0E2D\u0E07\u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E17\u0E33\u0E44\u0E14\u0E49\u0E42\u0E14\u0E22\u0E01\u0E32\u0E23\u0E2A\u0E48\u0E07 account's file \u0E41\u0E25\u0E30 address \u0E40\u0E1B\u0E49\u0E32\u0E2B\u0E21\u0E32\u0E22(\u0E44\u0E1B\u0E22\u0E31\u0E07 local cluster) \u0E15\u0E2D\u0E19\u0E40\u0E23\u0E34\u0E48\u0E21\u0E40\u0E1B\u0E34\u0E14\u0E43\u0E0A\u0E49 validator:",-1),Gn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-test-validator --account SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt SRM_token.json --reset +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Nn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# solana-test-validator --account
    --reset"),s(` solana-test-validator --account SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt SRM_token.json --reset -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),Kn=n("h3",{id:"\u0E27\u0E34\u0E18\u0E35-load-programs-from-mainnet",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E27\u0E34\u0E18\u0E35-load-programs-from-mainnet","aria-hidden":"true"},"#"),s(" \u0E27\u0E34\u0E18\u0E35 load programs from mainnet")],-1),Un=n("p",null,"\u0E41\u0E25\u0E30\u0E40\u0E0A\u0E48\u0E19\u0E01\u0E31\u0E19\u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 download Serum Dex v3 program \u0E44\u0E14\u0E49:",-1),jn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# solana program dump -u
    "),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),Xn=n("h3",{id:"\u0E27\u0E34\u0E18\u0E35-load-programs-from-mainnet",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E27\u0E34\u0E18\u0E35-load-programs-from-mainnet","aria-hidden":"true"},"#"),s(" \u0E27\u0E34\u0E18\u0E35 load programs from mainnet")],-1),Hn=n("p",null,"\u0E41\u0E25\u0E30\u0E40\u0E0A\u0E48\u0E19\u0E01\u0E31\u0E19\u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 download Serum Dex v3 program \u0E44\u0E14\u0E49:",-1),Bn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# solana program dump -u
    "),s(` solana program dump -u m 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin serum_dex_v3.so -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),Vn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana program dump -u m 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin serum_dex_v3.so -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Wn=n("p",null,"\u0E01\u0E32\u0E23 load \u0E21\u0E32\u0E17\u0E35\u0E48 localnet \u0E02\u0E2D\u0E07\u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E17\u0E33\u0E44\u0E14\u0E49\u0E42\u0E14\u0E22\u0E01\u0E32\u0E23\u0E2A\u0E48\u0E07 account's file \u0E41\u0E25\u0E30 address \u0E40\u0E1B\u0E49\u0E32\u0E2B\u0E21\u0E32\u0E22(\u0E44\u0E1B\u0E22\u0E31\u0E07 local cluster) \u0E15\u0E2D\u0E19\u0E40\u0E23\u0E34\u0E48\u0E21\u0E40\u0E1B\u0E34\u0E14\u0E43\u0E0A\u0E49 validator:",-1),Gn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-test-validator --bpf-program 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin serum_dex_v3.so --reset -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Nn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# solana-test-validator --bpf-program
    --reset"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),Dn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana program dump -u m 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin serum_dex_v3.so +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Zn=n("p",null,"\u0E01\u0E32\u0E23 load \u0E21\u0E32\u0E17\u0E35\u0E48 localnet \u0E02\u0E2D\u0E07\u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E17\u0E33\u0E44\u0E14\u0E49\u0E42\u0E14\u0E22\u0E01\u0E32\u0E23\u0E2A\u0E48\u0E07 account's file \u0E41\u0E25\u0E30 address \u0E40\u0E1B\u0E49\u0E32\u0E2B\u0E21\u0E32\u0E22(\u0E44\u0E1B\u0E22\u0E31\u0E07 local cluster) \u0E15\u0E2D\u0E19\u0E40\u0E23\u0E34\u0E48\u0E21\u0E40\u0E1B\u0E34\u0E14\u0E43\u0E0A\u0E49 validator:",-1),Fn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-test-validator --bpf-program 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin serum_dex_v3.so --reset +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),zn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# solana-test-validator --bpf-program
    --reset"),s(` solana-test-validator --bpf-program 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin serum_dex_v3.so --reset -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1);function Xn(Hn,Bn){const p=l("RouterLink"),e=l("SolanaCodeGroupItem"),o=l("SolanaCodeGroup"),c=l("ExternalLinkIcon");return i(),r(k,null,[d,g,h,n("p",null,[_,t(p,{to:"/getting-started/installation.html#install-cli"},{default:a(()=>[w]),_:1}),f]),y,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[v]),preview:a(()=>[C]),_:1}),t(e,{title:"Python"},{default:a(()=>[x]),preview:a(()=>[S]),_:1}),t(e,{title:"Rust"},{default:a(()=>[A]),preview:a(()=>[R]),_:1}),t(e,{title:"CLI"},{default:a(()=>[L]),preview:a(()=>[P]),_:1})]),_:1}),T,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[M]),preview:a(()=>[O]),_:1}),t(e,{title:"Python"},{default:a(()=>[E]),preview:a(()=>[I]),_:1}),t(e,{title:"Rust"},{default:a(()=>[K]),preview:a(()=>[U]),_:1}),t(e,{title:"CLI"},{default:a(()=>[j]),preview:a(()=>[V]),_:1})]),_:1}),W,G,n("p",null,[N,n("a",X,[H,t(c)]),B,q,D,n("a",Z,[F,t(c)]),z]),n("p",null,[Q,J,Y,$,nn,sn,n("a",an,[tn,t(c)]),en,n("a",on,[cn,t(c)]),ln]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[pn]),preview:a(()=>[un]),_:1}),t(e,{title:"Python"},{default:a(()=>[rn]),preview:a(()=>[kn]),_:1}),t(e,{title:"Rust"},{default:a(()=>[mn]),preview:a(()=>[bn]),_:1})]),_:1}),dn,gn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[hn]),preview:a(()=>[_n]),_:1}),t(e,{title:"Python"},{default:a(()=>[wn]),preview:a(()=>[fn]),_:1}),t(e,{title:"Rust"},{default:a(()=>[yn]),preview:a(()=>[vn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[Cn]),preview:a(()=>[xn]),_:1})]),_:1}),Sn,An,Rn,Ln,Pn,t(o,null,{default:a(()=>[t(e,{title:"CLI"},{default:a(()=>[Tn]),preview:a(()=>[Mn]),_:1})]),_:1}),On,t(o,null,{default:a(()=>[t(e,{title:"CLI"},{preview:a(()=>[En]),default:a(()=>[In]),_:1})]),_:1}),Kn,Un,t(o,null,{default:a(()=>[t(e,{title:"CLI"},{default:a(()=>[jn]),preview:a(()=>[Vn]),_:1})]),_:1}),Wn,t(o,null,{default:a(()=>[t(e,{title:"CLI"},{preview:a(()=>[Gn]),default:a(()=>[Nn]),_:1})]),_:1})],64)}var Dn=u(b,[["render",Xn]]);export{Dn as default}; +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1);function Qn(Jn,Yn){const p=l("RouterLink"),e=l("SolanaCodeGroupItem"),o=l("SolanaCodeGroup"),c=l("ExternalLinkIcon");return i(),r(k,null,[d,g,h,n("p",null,[_,t(p,{to:"/getting-started/installation.html#install-cli"},{default:a(()=>[w]),_:1}),y]),f,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[v]),preview:a(()=>[C]),_:1}),t(e,{title:"Python"},{default:a(()=>[x]),preview:a(()=>[S]),_:1}),t(e,{title:"C++"},{default:a(()=>[A]),preview:a(()=>[R]),_:1}),t(e,{title:"Rust"},{default:a(()=>[L]),preview:a(()=>[P]),_:1}),t(e,{title:"CLI"},{default:a(()=>[T]),preview:a(()=>[I]),_:1})]),_:1}),M,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[O]),preview:a(()=>[K]),_:1}),t(e,{title:"Python"},{default:a(()=>[E]),preview:a(()=>[U]),_:1}),t(e,{title:"C++"},{default:a(()=>[j]),preview:a(()=>[V]),_:1}),t(e,{title:"Rust"},{default:a(()=>[W]),preview:a(()=>[q]),_:1}),t(e,{title:"CLI"},{default:a(()=>[G]),preview:a(()=>[N]),_:1})]),_:1}),X,H,n("p",null,[B,n("a",D,[Z,t(c)]),F,z,Q,n("a",J,[Y,t(c)]),$]),n("p",null,[nn,sn,an,tn,en,on,n("a",cn,[ln,t(c)]),pn,n("a",un,[rn,t(c)]),kn]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[bn]),preview:a(()=>[mn]),_:1}),t(e,{title:"Python"},{default:a(()=>[dn]),preview:a(()=>[gn]),_:1}),t(e,{title:"C++"},{default:a(()=>[hn]),preview:a(()=>[_n]),_:1}),t(e,{title:"Rust"},{default:a(()=>[wn]),preview:a(()=>[yn]),_:1})]),_:1}),fn,vn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Cn]),preview:a(()=>[xn]),_:1}),t(e,{title:"Python"},{default:a(()=>[Sn]),preview:a(()=>[An]),_:1}),t(e,{title:"C++"},{default:a(()=>[Rn]),preview:a(()=>[Ln]),_:1}),t(e,{title:"Rust"},{default:a(()=>[Pn]),preview:a(()=>[Tn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[In]),preview:a(()=>[Mn]),_:1})]),_:1}),On,Kn,En,Un,jn,t(o,null,{default:a(()=>[t(e,{title:"CLI"},{default:a(()=>[Vn]),preview:a(()=>[Wn]),_:1})]),_:1}),qn,t(o,null,{default:a(()=>[t(e,{title:"CLI"},{preview:a(()=>[Gn]),default:a(()=>[Nn]),_:1})]),_:1}),Xn,Hn,t(o,null,{default:a(()=>[t(e,{title:"CLI"},{default:a(()=>[Bn]),preview:a(()=>[Dn]),_:1})]),_:1}),Zn,t(o,null,{default:a(()=>[t(e,{title:"CLI"},{preview:a(()=>[Fn]),default:a(()=>[zn]),_:1})]),_:1})],64)}var ns=u(m,[["render",Qn]]);export{ns as default}; diff --git a/docs/.vuepress/dist/assets/local-development.html.6ddccf34.js b/docs/.vuepress/dist/assets/local-development.html.4fd16255.js similarity index 97% rename from docs/.vuepress/dist/assets/local-development.html.6ddccf34.js rename to docs/.vuepress/dist/assets/local-development.html.4fd16255.js index 6d8f3b363..135769783 100644 --- a/docs/.vuepress/dist/assets/local-development.html.6ddccf34.js +++ b/docs/.vuepress/dist/assets/local-development.html.4fd16255.js @@ -1 +1 @@ -const t={key:"v-a2eaafb8",path:"/vi/references/local-development.html",title:"L\u1EADp tr\xECnh \u1EDF Local",lang:"vi-VN",frontmatter:{title:"L\u1EADp tr\xECnh \u1EDF Local",head:[["meta",{name:"title",content:"To\xE0n t\u1EADp Solana | L\u1EADp tr\xECnh \u1EDF Local"}],["meta",{name:"og:title",content:"To\xE0n t\u1EADp Solana | L\u1EADp tr\xECnh \u1EDF Local"}],["meta",{name:"description",content:"C\xE0i \u0111\u1EB7t m\u1ED9t local validator cho m\xF4i tr\u01B0\u1EDDng l\u1EADp tr\xECnh d\u01B0\u1EDBi local v\xE0 nh\u1EADn SOL \u0111\u1EC3 ki\u1EC3m th\u1EED. Chi ti\u1EBFt v\u1EC1 L\u1EADp tr\xECnh \u1EDF Local v\xE0 c\xE1c t\xE0i li\u1EC7u tham kh\u1EA3o kh\xE1c trong To\xE0n t\u1EADp Solana."}],["meta",{name:"og:description",content:"C\xE0i \u0111\u1EB7t m\u1ED9t local validator cho m\xF4i tr\u01B0\u1EDDng l\u1EADp tr\xECnh d\u01B0\u1EDBi local v\xE0 nh\u1EADn SOL \u0111\u1EC3 ki\u1EC3m th\u1EED. Chi ti\u1EBFt v\u1EC1 L\u1EADp tr\xECnh \u1EDF Local v\xE0 c\xE1c t\xE0i li\u1EC7u tham kh\u1EA3o kh\xE1c trong To\xE0n t\u1EADp Solana."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"Kh\u1EDFi ch\u1EA1y Local Validator",slug:"khoi-chay-local-validator",children:[]},{level:2,title:"K\u1EBFt n\u1ED1i \u0111\u1EBFn m\xF4i tr\u01B0\u1EDDng",slug:"ket-noi-\u0111en-moi-truong",children:[]},{level:2,title:"L\u1EAFng nghe c\xE1c s\u1EF1 ki\u1EC7n",slug:"lang-nghe-cac-su-kien",children:[]},{level:2,title:"Nh\u1EADn SOL \u0111\u1EC3 ki\u1EC3m th\u1EED",slug:"nhan-sol-\u0111e-kiem-thu",children:[]},{level:2,title:"S\u1EED d\u1EE5ng Accounts v\xE0 Programs tr\xEAn Mainnet",slug:"su-dung-accounts-va-programs-tren-mainnet",children:[{level:3,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 c\xE0i \u0111\u1EB7t accounts t\u1EEB mainnet",slug:"lam-the-nao-\u0111e-cai-\u0111at-accounts-tu-mainnet",children:[]},{level:3,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 c\u1EA3i \u0111\u1EB7t programs t\u1EEB mainnet",slug:"lam-the-nao-\u0111e-cai-\u0111at-programs-tu-mainnet",children:[]}]}],git:{updatedTime:1658783638e3},filePathRelative:"vi/references/local-development.md"};export{t as data}; +const t={key:"v-a2eaafb8",path:"/vi/references/local-development.html",title:"L\u1EADp tr\xECnh \u1EDF Local",lang:"vi-VN",frontmatter:{title:"L\u1EADp tr\xECnh \u1EDF Local",head:[["meta",{name:"title",content:"To\xE0n t\u1EADp Solana | L\u1EADp tr\xECnh \u1EDF Local"}],["meta",{name:"og:title",content:"To\xE0n t\u1EADp Solana | L\u1EADp tr\xECnh \u1EDF Local"}],["meta",{name:"description",content:"C\xE0i \u0111\u1EB7t m\u1ED9t local validator cho m\xF4i tr\u01B0\u1EDDng l\u1EADp tr\xECnh d\u01B0\u1EDBi local v\xE0 nh\u1EADn SOL \u0111\u1EC3 ki\u1EC3m th\u1EED. Chi ti\u1EBFt v\u1EC1 L\u1EADp tr\xECnh \u1EDF Local v\xE0 c\xE1c t\xE0i li\u1EC7u tham kh\u1EA3o kh\xE1c trong To\xE0n t\u1EADp Solana."}],["meta",{name:"og:description",content:"C\xE0i \u0111\u1EB7t m\u1ED9t local validator cho m\xF4i tr\u01B0\u1EDDng l\u1EADp tr\xECnh d\u01B0\u1EDBi local v\xE0 nh\u1EADn SOL \u0111\u1EC3 ki\u1EC3m th\u1EED. Chi ti\u1EBFt v\u1EC1 L\u1EADp tr\xECnh \u1EDF Local v\xE0 c\xE1c t\xE0i li\u1EC7u tham kh\u1EA3o kh\xE1c trong To\xE0n t\u1EADp Solana."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"Kh\u1EDFi ch\u1EA1y Local Validator",slug:"khoi-chay-local-validator",children:[]},{level:2,title:"K\u1EBFt n\u1ED1i \u0111\u1EBFn m\xF4i tr\u01B0\u1EDDng",slug:"ket-noi-\u0111en-moi-truong",children:[]},{level:2,title:"L\u1EAFng nghe c\xE1c s\u1EF1 ki\u1EC7n",slug:"lang-nghe-cac-su-kien",children:[]},{level:2,title:"Nh\u1EADn SOL \u0111\u1EC3 ki\u1EC3m th\u1EED",slug:"nhan-sol-\u0111e-kiem-thu",children:[]},{level:2,title:"S\u1EED d\u1EE5ng Accounts v\xE0 Programs tr\xEAn Mainnet",slug:"su-dung-accounts-va-programs-tren-mainnet",children:[{level:3,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 c\xE0i \u0111\u1EB7t accounts t\u1EEB mainnet",slug:"lam-the-nao-\u0111e-cai-\u0111at-accounts-tu-mainnet",children:[]},{level:3,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 c\u1EA3i \u0111\u1EB7t programs t\u1EEB mainnet",slug:"lam-the-nao-\u0111e-cai-\u0111at-programs-tu-mainnet",children:[]}]}],git:{updatedTime:1676666728e3},filePathRelative:"vi/references/local-development.md"};export{t as data}; diff --git a/docs/.vuepress/dist/assets/local-development.html.da89da5e.js b/docs/.vuepress/dist/assets/local-development.html.6e3488ec.js similarity index 68% rename from docs/.vuepress/dist/assets/local-development.html.da89da5e.js rename to docs/.vuepress/dist/assets/local-development.html.6e3488ec.js index cf4d75dad..1417ff4ed 100644 --- a/docs/.vuepress/dist/assets/local-development.html.da89da5e.js +++ b/docs/.vuepress/dist/assets/local-development.html.6e3488ec.js @@ -1,4 +1,4 @@ -import{_ as u,r as l,o as i,c as r,a as n,b as t,w as a,F as k,d as s,e as m}from"./app.cfdf84e7.js";const b={},d=n("h1",{id:"lap-trinh-o-local",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#lap-trinh-o-local","aria-hidden":"true"},"#"),s(" L\u1EADp tr\xECnh \u1EDF Local")],-1),h=n("h2",{id:"khoi-chay-local-validator",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#khoi-chay-local-validator","aria-hidden":"true"},"#"),s(" Kh\u1EDFi ch\u1EA1y Local Validator")],-1),g=n("p",null,"Ki\u1EC3m th\u1EED program c\u1EE7a b\u1EA1n tr\xEAn m\xE1y c\xE1 nh\xE2n s\u1EBD nhanh v\xE0 \u0111\xE1ng tin c\u1EADy h\u01A1n nhi\u1EC1u so v\u1EDBi devnet. Qu\xE1 tr\xECnh n\xE0y gi\xFAp b\u1EA1n c\xF3 th\u1EC3 ki\u1EC3m tra ch\u01B0\u01A1ng tr\xECnh tr\u01B0\u1EDBc khi tri\u1EC3n khai v\xE0 ki\u1EC3m th\u1EE9 ch\xFAng tr\xEAn devnet.",-1),_=s("B\u1EA1n c\xF3 th\u1EC3 thi\u1EBFt l\u1EADp "),y=n("code",null,"local-test-validator",-1),w=s(" b\u1EB1ng c\xE1ch c\xE0i \u0111\u1EB7t "),f=s("b\u1ED9 c\xF4ng c\u1EE5 solana"),v=s(" v\xE0 ch\u1EA1y l\u1EC7nh sau:"),C=m(`
    solana-test-validator
    +import{_ as u,r as p,o as i,c as r,a as n,b as t,w as a,F as k,d as s,e as b}from"./app.2fbb9e96.js";const m={},d=n("h1",{id:"lap-trinh-o-local",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#lap-trinh-o-local","aria-hidden":"true"},"#"),s(" L\u1EADp tr\xECnh \u1EDF Local")],-1),h=n("h2",{id:"khoi-chay-local-validator",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#khoi-chay-local-validator","aria-hidden":"true"},"#"),s(" Kh\u1EDFi ch\u1EA1y Local Validator")],-1),g=n("p",null,"Ki\u1EC3m th\u1EED program c\u1EE7a b\u1EA1n tr\xEAn m\xE1y c\xE1 nh\xE2n s\u1EBD nhanh v\xE0 \u0111\xE1ng tin c\u1EADy h\u01A1n nhi\u1EC1u so v\u1EDBi devnet. Qu\xE1 tr\xECnh n\xE0y gi\xFAp b\u1EA1n c\xF3 th\u1EC3 ki\u1EC3m tra ch\u01B0\u01A1ng tr\xECnh tr\u01B0\u1EDBc khi tri\u1EC3n khai v\xE0 ki\u1EC3m th\u1EE9 ch\xFAng tr\xEAn devnet.",-1),_=s("B\u1EA1n c\xF3 th\u1EC3 thi\u1EBFt l\u1EADp "),y=n("code",null,"local-test-validator",-1),w=s(" b\u1EB1ng c\xE1ch c\xE0i \u0111\u1EB7t "),f=s("b\u1ED9 c\xF4ng c\u1EE5 solana"),v=s(" v\xE0 ch\u1EA1y l\u1EC7nh sau:"),C=b(`
    solana-test-validator
     

    L\u1EE3i \xEDch c\u1EE7a vi\u1EC7c ch\u1EA1y local-test-validator g\u1ED3m:

    • Kh\xF4ng gi\u1EDBi h\u1EA1n truy v\u1EA5n RPC
    • Kh\xF4ng gi\u1EDBi h\u1EA1n s\u1ED1 l\u01B0\u1EE3ng SOL nh\u1EADn \u0111\u01B0\u1EE3c \u0111\u1EC3 ki\u1EC3m th\u1EED
    • Tri\u1EC3n khai tr\u1EF1c ti\u1EBFp program l\xEAn on-chain (--bpf-program ...)
    • Sao ch\xE9p account t\u1EEB c\xE1c m\u1EA1ng c\xF4ng c\u1ED9ng, bao g\u1ED3m c\u1EA3 c\xE1c program (--clone ...)
    • C\xF3 th\u1EC3 \u0111i\u1EC1u ch\u1EC9nh s\u1ED1 l\u01B0\u1EE3ng l\u1ECBch s\u1EED transaction (--limit-ledger-size ...)
    • C\xF3 th\u1EC3 \u0111i\u1EC1u ch\u1EC9nh \u0111\u1ED9 d\xE0i epoch (--slots-per-epoch ...)
    • Nh\u1EA3y \u0111\u1EBFn b\u1EA5y k\u1EF3 ch\u1ED7 tr\u1ED1ng n\xE0o (--warp-slot ...)

    K\u1EBFt n\u1ED1i \u0111\u1EBFn m\xF4i tr\u01B0\u1EDDng

    M\u1ED9t khi b\u1EAFt \u0111\u1EA7u l\xE0m vi\u1EC7c v\u1EDBi m\xF4i tr\u01B0\u1EDDng ph\xE1t tri\u1EC3n \u1EE9ng d\u1EE5ng tr\xEAn Solana, b\u1EA1n s\u1EBD c\u1EA7n ph\u1EA3i k\u1EBFt n\u1ED1i \u1EE9ng d\u1EE5ng c\u1EE7a b\u1EA1n \u0111\u1EBFn m\u1ED9t \u0111i\u1EC3m RPC API c\u1EE5 th\u1EC3. Solana c\xF3 3 m\xF4i tr\u01B0\u1EDDng c\xF4ng c\u1ED9ng cho qu\xE1 tr\xECnh ph\xE1t tri\u1EC3n \u1EE9ng d\u1EE5ng:

    • mainnet-beta: https://api.mainnet-beta.solana.com
    • devnet: https://api.devnet.solana.com
    • testnet: https://api.testnet.solana.com
    `,6),x=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" clusterApiUrl"),n("span",{class:"token punctuation"},","),s(" Connection "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -9,40 +9,58 @@ import{_ as u,r as l,o as i,c as r,a as n,b as t,w as a,F as k,d as s,e as m}fro client `),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.mainnet-beta.solana.com"'),n("span",{class:"token punctuation"},")"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),R=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("client "),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.mainnet-beta.solana.com"'),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),L=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),L=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + Connection `),n("span",{class:"token function"},"connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.mainnet-beta.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token keyword"},"return"),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),T=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[s("Connection "),n("span",{class:"token function"},"connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.mainnet-beta.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),P=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("commitment_config"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"let"),s(" rpc_url "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"String"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.mainnet-beta.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"let"),s(" client "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new_with_commitment"),n("span",{class:"token punctuation"},"("),s("rpc_url"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"confirmed"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),T=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" rpc_url "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"String"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.mainnet-beta.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),K=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" rpc_url "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"String"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.mainnet-beta.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"let"),s(" client "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new_with_commitment"),n("span",{class:"token punctuation"},"("),s("rpc_url"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"confirmed"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),P=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana config "),n("span",{class:"token builtin class-name"},"set"),s(` --url https://api.mainnet-beta.solana.com -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),K=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana config "),n("span",{class:"token builtin class-name"},"set"),s(` --url https://api.mainnet-beta.solana.com -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),M=n("p",null,"Cu\u1ED1i c\xF9ng b\u1EA1n c\u0169ng c\xF3 th\u1EC3 k\u1EBFt n\u1ED1i \u0111\u1EBFn c\xE1c m\u1EA1ng ri\xEAng, ho\u1EB7c t\u1EEB m\u1ED9t \u0111i\u1EC3m truy c\u1EADp c\xE1 nh\xE2n, ho\u1EB7c t\u1EEB m\u1ED9t d\u1ECBch v\u1EE5 t\u1EEB xa v\xED d\u1EE5 nh\u01B0:",-1),O=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),M=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana config "),n("span",{class:"token builtin class-name"},"set"),s(` --url https://api.mainnet-beta.solana.com +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),O=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana config "),n("span",{class:"token builtin class-name"},"set"),s(` --url https://api.mainnet-beta.solana.com +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),I=n("p",null,"Cu\u1ED1i c\xF9ng b\u1EA1n c\u0169ng c\xF3 th\u1EC3 k\u1EBFt n\u1ED1i \u0111\u1EBFn c\xE1c m\u1EA1ng ri\xEAng, ho\u1EB7c t\u1EEB m\u1ED9t \u0111i\u1EC3m truy c\u1EADp c\xE1 nh\xE2n, ho\u1EB7c t\u1EEB m\u1ED9t d\u1ECBch v\u1EE5 t\u1EEB xa v\xED d\u1EE5 nh\u01B0:",-1),E=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token comment"},"// This will connect you to your local validator"),s(` `),n("span",{class:"token keyword"},"const"),s(" connection "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token string"},'"confirmed"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),I=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" connection "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token string"},'"confirmed"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),E=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("api "),n("span",{class:"token keyword"},"import"),s(` Client +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),U=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" connection "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token string"},'"confirmed"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),V=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("api "),n("span",{class:"token keyword"},"import"),s(` Client client `),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),U=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("client "),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),V=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),j=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("client "),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),W=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + Connection `),n("span",{class:"token function"},"connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token keyword"},"return"),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),q=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[s("Connection "),n("span",{class:"token function"},"connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),N=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("commitment_config"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"let"),s(" rpc_url "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"String"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"let"),s(" client "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new_with_commitment"),n("span",{class:"token punctuation"},"("),s("rpc_url"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"confirmed"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),j=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" rpc_url "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"String"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),B=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" rpc_url "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"String"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"let"),s(" client "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new_with_commitment"),n("span",{class:"token punctuation"},"("),s("rpc_url"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"confirmed"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),W=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana config "),n("span",{class:"token builtin class-name"},"set"),s(` --url http://privaterpc.com -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),N=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana config "),n("span",{class:"token builtin class-name"},"set"),s(` --url http://privaterpc.com -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),B=n("h2",{id:"lang-nghe-cac-su-kien",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#lang-nghe-cac-su-kien","aria-hidden":"true"},"#"),s(" L\u1EAFng nghe c\xE1c s\u1EF1 ki\u1EC7n")],-1),G=n("p",null,"Websockets cung c\u1EA5p m\u1ED9t giao di\u1EC7n pub/sub \u0111\u1EC3 b\u1EA1n c\xF3 th\u1EC3 l\u1EAFng nghe c\xE1c s\u1EF1 ki\u1EC7n c\u1EE5 th\u1EC3. Thay v\xEC li\xEAn t\u1EE5c g\u1ECDi v\xE0o c\xE1c \u0111i\u1EC3m th\xF4ng tin th\xF4ng qua HTTP \u0111\u1EC3 th\u01B0\u1EDDng xuy\xEAn c\u1EADp nh\u1EADt d\u1EEF li\u1EC7u, b\u1EA1n c\xF3 th\u1EC3 nh\u1EADn \u0111\u01B0\u1EE3c d\u1EEF li\u1EC7u c\u1EADp nh\u1EADt m\u1ED7i khi c\xF3 thay \u0111\u1ED5i x\u1EA3y ra.",-1),H={href:"https://solana-labs.github.io/solana-web3.js/classes/Connection.html",target:"_blank",rel:"noopener noreferrer"},X=n("code",null,"Connection",-1),q=s(" trong web3 c\u1EE7a Solana s\u1EBD ch\u1EE7 \u0111\u1ED9ng t\u1EA1o ra m\u1ED9t k\u1EBFt n\u1ED1i websocket m\u1ED7i khi b\u1EA1n t\u1EA1o m\u1EDBi "),Z=n("code",null,"Connection",-1),D=s(" (chi ti\u1EBFt m\xE3 ngu\u1ED3n "),F={href:"https://github.com/solana-labs/solana-web3.js/blob/45923ca00e4cc1ed079d8e55ecbee83e5b4dc174/src/connection.ts#L2100",target:"_blank",rel:"noopener noreferrer"},z=s("t\u1EA1i \u0111\xE2y"),Q=s(")."),J=s("L\u1EDBp "),Y=n("code",null,"Connection",-1),$=s(" s\u1EBD cung c\u1EA5p c\xE1c ph\u01B0\u01A1ng th\u1EE9c pub/sub - t\u1EA5t c\u1EA3 ch\xFAng \u0111\u1EC1u b\u1EAFt \u0111\u1EA7u v\u1EDBi ti\u1EC1n t\u1ED1 "),nn=n("code",null,"on",-1),sn=s(", gi\u1ED1ng nh\u01B0 c\xE1c "),an=n("code",null,"emitter",-1),tn=s(". Khi b\u1EA1n g\u1ECDi v\xE0o m\u1ED9t ph\u01B0\u01A1ng th\u1EE9c nghe, n\xF3 s\u1EBD \u0111\u0103ng k\xFD m\u1ED9t s\u1EF1 ki\u1EC7n m\u1EDBi v\xE0o websocket ng\u01B0\u1EDDi d\xF9ng c\u1EE7a "),en=n("code",null,"Connection",-1),on=s(" v\u1EEBa t\u1EA1o. V\xED d\u1EE5 cho ph\u01B0\u01A1ng th\u1EE9c pub/sub b\xEAn d\u01B0\u1EDBi s\u1EBD s\u1EED d\u1EE5ng "),cn={href:"https://solana-labs.github.io/solana-web3.js/classes/Connection.html#onAccountChange",target:"_blank",rel:"noopener noreferrer"},ln=n("code",null,"onAccountChange",-1),pn=s(". H\xE0m g\u1ECDi l\u1EA1i (callback) s\u1EBD nh\u1EADn c\xE1c tham s\u1ED1 v\xE0 c\u1EADp nh\u1EADt l\u1EA1i tr\u1EA1ng th\xE1i m\u1EDBi (tham kh\u1EA3o v\xED d\u1EE5 "),un={href:"https://solana-labs.github.io/solana-web3.js/modules.html#AccountChangeCallback",target:"_blank",rel:"noopener noreferrer"},rn=n("code",null,"AccountChangeCallback",-1),kn=s(")."),mn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" clusterApiUrl"),n("span",{class:"token punctuation"},","),s(" Connection"),n("span",{class:"token punctuation"},","),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),G=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana config "),n("span",{class:"token builtin class-name"},"set"),s(` --url http://privaterpc.com +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),H=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana config "),n("span",{class:"token builtin class-name"},"set"),s(` --url http://privaterpc.com +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),X=n("h2",{id:"lang-nghe-cac-su-kien",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#lang-nghe-cac-su-kien","aria-hidden":"true"},"#"),s(" L\u1EAFng nghe c\xE1c s\u1EF1 ki\u1EC7n")],-1),Z=n("p",null,"Websockets cung c\u1EA5p m\u1ED9t giao di\u1EC7n pub/sub \u0111\u1EC3 b\u1EA1n c\xF3 th\u1EC3 l\u1EAFng nghe c\xE1c s\u1EF1 ki\u1EC7n c\u1EE5 th\u1EC3. Thay v\xEC li\xEAn t\u1EE5c g\u1ECDi v\xE0o c\xE1c \u0111i\u1EC3m th\xF4ng tin th\xF4ng qua HTTP \u0111\u1EC3 th\u01B0\u1EDDng xuy\xEAn c\u1EADp nh\u1EADt d\u1EEF li\u1EC7u, b\u1EA1n c\xF3 th\u1EC3 nh\u1EADn \u0111\u01B0\u1EE3c d\u1EEF li\u1EC7u c\u1EADp nh\u1EADt m\u1ED7i khi c\xF3 thay \u0111\u1ED5i x\u1EA3y ra.",-1),D={href:"https://solana-labs.github.io/solana-web3.js/classes/Connection.html",target:"_blank",rel:"noopener noreferrer"},F=n("code",null,"Connection",-1),z=s(" trong web3 c\u1EE7a Solana s\u1EBD ch\u1EE7 \u0111\u1ED9ng t\u1EA1o ra m\u1ED9t k\u1EBFt n\u1ED1i websocket m\u1ED7i khi b\u1EA1n t\u1EA1o m\u1EDBi "),Q=n("code",null,"Connection",-1),J=s(" (chi ti\u1EBFt m\xE3 ngu\u1ED3n "),Y={href:"https://github.com/solana-labs/solana-web3.js/blob/45923ca00e4cc1ed079d8e55ecbee83e5b4dc174/src/connection.ts#L2100",target:"_blank",rel:"noopener noreferrer"},$=s("t\u1EA1i \u0111\xE2y"),nn=s(")."),sn=s("L\u1EDBp "),an=n("code",null,"Connection",-1),tn=s(" s\u1EBD cung c\u1EA5p c\xE1c ph\u01B0\u01A1ng th\u1EE9c pub/sub - t\u1EA5t c\u1EA3 ch\xFAng \u0111\u1EC1u b\u1EAFt \u0111\u1EA7u v\u1EDBi ti\u1EC1n t\u1ED1 "),en=n("code",null,"on",-1),on=s(", gi\u1ED1ng nh\u01B0 c\xE1c "),cn=n("code",null,"emitter",-1),pn=s(". Khi b\u1EA1n g\u1ECDi v\xE0o m\u1ED9t ph\u01B0\u01A1ng th\u1EE9c nghe, n\xF3 s\u1EBD \u0111\u0103ng k\xFD m\u1ED9t s\u1EF1 ki\u1EC7n m\u1EDBi v\xE0o websocket ng\u01B0\u1EDDi d\xF9ng c\u1EE7a "),ln=n("code",null,"Connection",-1),un=s(" v\u1EEBa t\u1EA1o. V\xED d\u1EE5 cho ph\u01B0\u01A1ng th\u1EE9c pub/sub b\xEAn d\u01B0\u1EDBi s\u1EBD s\u1EED d\u1EE5ng "),rn={href:"https://solana-labs.github.io/solana-web3.js/classes/Connection.html#onAccountChange",target:"_blank",rel:"noopener noreferrer"},kn=n("code",null,"onAccountChange",-1),bn=s(". H\xE0m g\u1ECDi l\u1EA1i (callback) s\u1EBD nh\u1EADn c\xE1c tham s\u1ED1 v\xE0 c\u1EADp nh\u1EADt l\u1EA1i tr\u1EA1ng th\xE1i m\u1EDBi (tham kh\u1EA3o v\xED d\u1EE5 "),mn={href:"https://solana-labs.github.io/solana-web3.js/modules.html#AccountChangeCallback",target:"_blank",rel:"noopener noreferrer"},dn=n("code",null,"AccountChangeCallback",-1),hn=s(")."),gn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" clusterApiUrl"),n("span",{class:"token punctuation"},","),s(" Connection"),n("span",{class:"token punctuation"},","),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token comment"},"// Establish new connect to devnet - websocket client connected to devnet will also be registered here"),s(` @@ -59,7 +77,7 @@ client `),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"t `),n("span",{class:"token string"},'"confirmed"'),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br")])],-1),bn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token comment"},"// Establish new connect to devnet - websocket client connected to devnet will also be registered here"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br")])],-1),_n=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token comment"},"// Establish new connect to devnet - websocket client connected to devnet will also be registered here"),s(` `),n("span",{class:"token keyword"},"const"),s(" connection "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"clusterApiUrl"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"devnet"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token string"},'"confirmed"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token comment"},"// Create a test wallet to listen to"),s(` @@ -72,8 +90,8 @@ connection`),n("span",{class:"token punctuation"},"."),n("span",{class:"token fu `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Updated account info: "'),n("span",{class:"token punctuation"},","),s(" updatedAccountInfo"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token string"},'"confirmed"'),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br")])],-1),dn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(` asyncio -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br")])],-1),yn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(` asyncio +`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair `),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("websocket_api "),n("span",{class:"token keyword"},"import"),s(` connect `),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token keyword"},"def"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},":"),s(` @@ -81,7 +99,7 @@ connection`),n("span",{class:"token punctuation"},"."),n("span",{class:"token fu `),n("span",{class:"token comment"},"# Create a Test Wallet"),s(` wallet `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"# Subscribe to the Test wallet to listen for events"),s(` - `),n("span",{class:"token keyword"},"await"),s(" websocket"),n("span",{class:"token punctuation"},"."),s("account_subscribe"),n("span",{class:"token punctuation"},"("),s("wallet"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),s(` + `),n("span",{class:"token keyword"},"await"),s(" websocket"),n("span",{class:"token punctuation"},"."),s("account_subscribe"),n("span",{class:"token punctuation"},"("),s("wallet"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"# Capture response from account subscription "),s(` first_resp `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" websocket"),n("span",{class:"token punctuation"},"."),s("recv"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Subscription successful with id {}, listening for events \\n"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("first_resp"),n("span",{class:"token punctuation"},"."),s("result"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` @@ -89,17 +107,66 @@ connection`),n("span",{class:"token punctuation"},"."),n("span",{class:"token fu `),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("updated_account_info"),n("span",{class:"token punctuation"},")"),s(` asyncio`),n("span",{class:"token punctuation"},"."),s("run"),n("span",{class:"token punctuation"},"("),s("main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br")])],-1),hn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token keyword"},"with"),s(" connect"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"wss://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token keyword"},"as"),s(" websocket"),n("span",{class:"token punctuation"},":"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br")])],-1),wn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token keyword"},"with"),s(" connect"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"wss://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token keyword"},"as"),s(" websocket"),n("span",{class:"token punctuation"},":"),s(` `),n("span",{class:"token comment"},"# Create a Test Wallet"),s(` wallet `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"# Subscribe to the Test wallet to listen for events"),s(` - `),n("span",{class:"token keyword"},"await"),s(" websocket"),n("span",{class:"token punctuation"},"."),s("account_subscribe"),n("span",{class:"token punctuation"},"("),s("wallet"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),s(` + `),n("span",{class:"token keyword"},"await"),s(" websocket"),n("span",{class:"token punctuation"},"."),s("account_subscribe"),n("span",{class:"token punctuation"},"("),s("wallet"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"# Capture response from account subscription "),s(` first_resp `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" websocket"),n("span",{class:"token punctuation"},"."),s("recv"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Subscription successful with id {}, listening for events \\n"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("first_resp"),n("span",{class:"token punctuation"},"."),s("result"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` updated_account_info `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" websocket"),n("span",{class:"token punctuation"},"."),s("recv"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("updated_account_info"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),gn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("pubsub_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"PubsubClient"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),fn=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token comment"},"// clang++ on_account_change.cpp -o on_account_change -std=c++17 -lssl -lcrypto -lsodium"),s(` + +`),n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + Connection `),n("span",{class:"token function"},"connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"int"),s(" subscriptionId "),n("span",{class:"token operator"},"="),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"on_account_change"),n("span",{class:"token punctuation"},"("),s("key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token punctuation"},"["),n("span",{class:"token operator"},"&"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},"("),s("Result"),n("span",{class:"token operator"},"<"),s("Account"),n("span",{class:"token operator"},">"),s(" result"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + Account account `),n("span",{class:"token operator"},"="),s(" result"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"owner = "'),s(),n("span",{class:"token operator"},"<<"),s(" account"),n("span",{class:"token punctuation"},"."),s("owner"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"lamports = "'),s(),n("span",{class:"token operator"},"<<"),s(" account"),n("span",{class:"token punctuation"},"."),s("lamports "),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"data = "'),s(),n("span",{class:"token operator"},"<<"),s(" account"),n("span",{class:"token punctuation"},"."),s("data "),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"executable = "'),s(),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token punctuation"},"("),s("account"),n("span",{class:"token punctuation"},"."),s("executable "),n("span",{class:"token operator"},"?"),s(),n("span",{class:"token string"},'"true"'),s(),n("span",{class:"token operator"},":"),s(),n("span",{class:"token string"},'"false"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token function"},"sleep"),n("span",{class:"token punctuation"},"("),n("span",{class:"token number"},"1"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + std`),n("span",{class:"token double-colon punctuation"},"::"),s("string tx_hash "),n("span",{class:"token operator"},"="),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"request_airdrop"),n("span",{class:"token punctuation"},"("),s("key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"tx hash = "'),s(),n("span",{class:"token operator"},"<<"),s(" tx_hash "),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"for"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"int"),s(" i "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(" i "),n("span",{class:"token operator"},"<"),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},";"),s(" i"),n("span",{class:"token operator"},"++"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + connection`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"poll"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token function"},"sleep"),n("span",{class:"token punctuation"},"("),n("span",{class:"token number"},"1"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token punctuation"},"}"),s(` + + connection`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"remove_account_listener"),n("span",{class:"token punctuation"},"("),s("subscriptionId"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"return"),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br")])],-1),vn=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(" subscriptionId "),n("span",{class:"token operator"},"="),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"on_account_change"),n("span",{class:"token punctuation"},"("),s("key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token punctuation"},"["),n("span",{class:"token operator"},"&"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},"("),s("Result"),n("span",{class:"token operator"},"<"),s("Account"),n("span",{class:"token operator"},">"),s(" result"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + Account account `),n("span",{class:"token operator"},"="),s(" result"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"owner = "'),s(),n("span",{class:"token operator"},"<<"),s(" account"),n("span",{class:"token punctuation"},"."),s("owner"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"lamports = "'),s(),n("span",{class:"token operator"},"<<"),s(" account"),n("span",{class:"token punctuation"},"."),s("lamports "),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"data = "'),s(),n("span",{class:"token operator"},"<<"),s(" account"),n("span",{class:"token punctuation"},"."),s("data "),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"executable = "'),s(),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token punctuation"},"("),s("account"),n("span",{class:"token punctuation"},"."),s("executable "),n("span",{class:"token operator"},"?"),s(),n("span",{class:"token string"},'"true"'),s(),n("span",{class:"token operator"},":"),s(),n("span",{class:"token string"},'"false"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"for"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"int"),s(" i "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(" i "),n("span",{class:"token operator"},"<"),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},";"),s(" i"),n("span",{class:"token operator"},"++"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + connection`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"poll"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token function"},"sleep"),n("span",{class:"token punctuation"},"("),n("span",{class:"token number"},"1"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` + +connection`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"remove_account_listener"),n("span",{class:"token punctuation"},"("),s("subscriptionId"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br")])],-1),Cn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("pubsub_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"PubsubClient"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_config"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcAccountInfoConfig"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("commitment_config"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("signature"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"Signer"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` @@ -136,7 +203,7 @@ asyncio`),n("span",{class:"token punctuation"},"."),s("run"),n("span",{class:"to `),n("span",{class:"token macro property"},"println!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Errooooor"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br")])],-1),_n=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" ws_url "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"String"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"wss://api.devnet.solana.com/"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br")])],-1),xn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" ws_url "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"String"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"wss://api.devnet.solana.com/"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"let"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"mut"),s(" client"),n("span",{class:"token punctuation"},","),s(" receiver"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"PubsubClient"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"account_subscribe"),n("span",{class:"token punctuation"},"("),s(` `),n("span",{class:"token operator"},"&"),s("ws_url"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token operator"},"&"),s("pubkey"),n("span",{class:"token punctuation"},","),s(` @@ -148,7 +215,7 @@ asyncio`),n("span",{class:"token punctuation"},"."),s("run"),n("span",{class:"to `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"let"),s(" message "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"match"),s(" receiver"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"recv"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token macro property"},"println!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"{:?}"'),n("span",{class:"token punctuation"},","),s(" message"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br")])],-1),yn=n("h2",{id:"nhan-sol-\u0111e-kiem-thu",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#nhan-sol-\u0111e-kiem-thu","aria-hidden":"true"},"#"),s(" Nh\u1EADn SOL \u0111\u1EC3 ki\u1EC3m th\u1EED")],-1),wn=n("p",null,"Khi b\u1EA1n l\xE0m vi\u1EC7c tr\xEAn m\xF4i tr\u01B0\u1EDDng \u0111\u1ECBa ph\u01B0\u01A1ng, b\u1EA1n s\u1EBD ph\u1EA3i c\u1EA7n m\u1ED9t \xEDt SOL \u0111\u1EC3 g\u1EEDi transaction. Trong c\xE1c m\xF4i tr\u01B0\u1EDDng kh\xF4ng ph\u1EA3i mainnet, b\u1EA1n c\xF3 th\u1EC3 nh\u1EADn \u0111\u01B0\u1EE3c SOL mi\u1EC5n ph\xED.",-1),fn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection"),n("span",{class:"token punctuation"},","),s(" Keypair"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token constant"},"LAMPORTS_PER_SOL"),s(),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br")])],-1),Sn=n("h2",{id:"nhan-sol-\u0111e-kiem-thu",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#nhan-sol-\u0111e-kiem-thu","aria-hidden":"true"},"#"),s(" Nh\u1EADn SOL \u0111\u1EC3 ki\u1EC3m th\u1EED")],-1),An=n("p",null,"Khi b\u1EA1n l\xE0m vi\u1EC7c tr\xEAn m\xF4i tr\u01B0\u1EDDng \u0111\u1ECBa ph\u01B0\u01A1ng, b\u1EA1n s\u1EBD ph\u1EA3i c\u1EA7n m\u1ED9t \xEDt SOL \u0111\u1EC3 g\u1EEDi transaction. Trong c\xE1c m\xF4i tr\u01B0\u1EDDng kh\xF4ng ph\u1EA3i mainnet, b\u1EA1n c\xF3 th\u1EC3 nh\u1EADn \u0111\u01B0\u1EE3c SOL mi\u1EC5n ph\xED.",-1),Rn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection"),n("span",{class:"token punctuation"},","),s(" Keypair"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token constant"},"LAMPORTS_PER_SOL"),s(),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` @@ -166,13 +233,13 @@ asyncio`),n("span",{class:"token punctuation"},"."),s("run"),n("span",{class:"to signature `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br")])],-1),vn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" airdropSignature "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"requestAirdrop"),n("span",{class:"token punctuation"},"("),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br")])],-1),Ln=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" airdropSignature "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"requestAirdrop"),n("span",{class:"token punctuation"},"("),s(` keypair`),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token constant"},"LAMPORTS_PER_SOL"),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"await"),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"confirmTransaction"),n("span",{class:"token punctuation"},"("),s("airdropSignature"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),Cn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),Tn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair `),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("api "),n("span",{class:"token keyword"},"import"),s(` Client wallet `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` @@ -180,14 +247,32 @@ wallet `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:" client `),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"#Input Airdrop amount in LAMPORTS"),s(` -client`),n("span",{class:"token punctuation"},"."),s("request_airdrop"),n("span",{class:"token punctuation"},"("),s("wallet"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"1000000000"),n("span",{class:"token punctuation"},")"),s(` +client`),n("span",{class:"token punctuation"},"."),s("request_airdrop"),n("span",{class:"token punctuation"},"("),s("wallet"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"1000000000"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"#Airdrops 1 SOL"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),xn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token comment"},"#Input Airdrop amount in LAMPORTS"),s(` -client`),n("span",{class:"token punctuation"},"."),s("request_airdrop"),n("span",{class:"token punctuation"},"("),s("wallet"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"1000000000"),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),Pn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token comment"},"#Input Airdrop amount in LAMPORTS"),s(` +client`),n("span",{class:"token punctuation"},"."),s("request_airdrop"),n("span",{class:"token punctuation"},"("),s("wallet"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"1000000000"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"#Airdrops 1 SOL"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),Sn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),Kn=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token comment"},"// clang++ request_airdrop.cpp -o request_airdrop -std=c++17 -lssl -lcrypto -lsodium"),s(` + +`),n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + Connection `),n("span",{class:"token function"},"connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + std`),n("span",{class:"token double-colon punctuation"},"::"),s("string tx_hash "),n("span",{class:"token operator"},"="),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"request_airdrop"),n("span",{class:"token punctuation"},"("),s("key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"tx hash = "'),s(),n("span",{class:"token operator"},"<<"),s(" tx_hash "),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"return"),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br")])],-1),Mn=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[s("connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"request_airdrop"),n("span",{class:"token punctuation"},"("),s("key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),On=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("commitment_config"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("native_token"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token constant"},"LAMPORTS_PER_SOL"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("signature"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"Signer"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` @@ -209,7 +294,7 @@ client`),n("span",{class:"token punctuation"},"."),s("request_airdrop"),n("span" `),n("span",{class:"token class-name"},"Err"),n("span",{class:"token punctuation"},"("),s("_"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token macro property"},"println!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Error requesting airdrop"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br")])],-1),An=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"match"),s(" client"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"request_airdrop"),n("span",{class:"token punctuation"},"("),n("span",{class:"token operator"},"&"),s("pubkey"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token constant"},"LAMPORTS_PER_SOL"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br")])],-1),In=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"match"),s(" client"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"request_airdrop"),n("span",{class:"token punctuation"},"("),n("span",{class:"token operator"},"&"),s("pubkey"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token constant"},"LAMPORTS_PER_SOL"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token class-name"},"Ok"),n("span",{class:"token punctuation"},"("),s("sig"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token keyword"},"loop"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"if"),s(),n("span",{class:"token keyword"},"let"),s(),n("span",{class:"token class-name"},"Ok"),n("span",{class:"token punctuation"},"("),s("confirmed"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"="),s(" client"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"confirm_transaction"),n("span",{class:"token punctuation"},"("),n("span",{class:"token operator"},"&"),s("sig"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"if"),s(" confirmed "),n("span",{class:"token punctuation"},"{"),s(` @@ -220,21 +305,21 @@ client`),n("span",{class:"token punctuation"},"."),s("request_airdrop"),n("span" `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token class-name"},"Err"),n("span",{class:"token punctuation"},"("),s("_"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token macro property"},"println!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Error requesting airdrop"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),Rn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana airdrop "),n("span",{class:"token number"},"1"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),En=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana airdrop "),n("span",{class:"token number"},"1"),s(` `),n("span",{class:"token comment"},"# Return"),s(` `),n("span",{class:"token comment"},'# "1 SOL"'),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),Ln=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana airdrop "),n("span",{class:"token number"},"1"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Tn=n("h2",{id:"su-dung-accounts-va-programs-tren-mainnet",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#su-dung-accounts-va-programs-tren-mainnet","aria-hidden":"true"},"#"),s(" S\u1EED d\u1EE5ng Accounts v\xE0 Programs tr\xEAn Mainnet")],-1),Pn=n("p",null,"Th\u01B0\u1EDDng xuy\xEAn, c\xE1c b\xE0i ki\u1EC3m th\u1EED tr\xEAn m\xF4i tr\u01B0\u1EDDng \u0111\u1ECBa ph\u01B0\u01A1ng s\u1EBD d\xF9ng \u0111\u1EBFn c\xE1c account v\xE0 program ch\u1EC9 s\u1EB5n c\xF3 tr\xEAn mainnet. Solana CLI cho ph\xE9p:",-1),Kn=n("ul",null,[n("li",null,"T\u1EA3i xu\u1ED1ng Programs v\xE0 Accounts"),n("li",null,"C\xE0i \u0111\u1EB7t Programs v\xE0 Accounts v\xE0o local validator")],-1),Mn=n("h3",{id:"lam-the-nao-\u0111e-cai-\u0111at-accounts-tu-mainnet",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#lam-the-nao-\u0111e-cai-\u0111at-accounts-tu-mainnet","aria-hidden":"true"},"#"),s(" L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 c\xE0i \u0111\u1EB7t accounts t\u1EEB mainnet")],-1),On=n("p",null,"B\u1EA1n c\xF3 th\u1EC3 t\u1EA3i xu\u1ED1ng mint account c\u1EE7a SRM v\xE0o m\u1ED9t t\u1EADp tin:",-1),In=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# solana account -u --output --output-file
    "),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),Un=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana airdrop "),n("span",{class:"token number"},"1"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Vn=n("h2",{id:"su-dung-accounts-va-programs-tren-mainnet",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#su-dung-accounts-va-programs-tren-mainnet","aria-hidden":"true"},"#"),s(" S\u1EED d\u1EE5ng Accounts v\xE0 Programs tr\xEAn Mainnet")],-1),jn=n("p",null,"Th\u01B0\u1EDDng xuy\xEAn, c\xE1c b\xE0i ki\u1EC3m th\u1EED tr\xEAn m\xF4i tr\u01B0\u1EDDng \u0111\u1ECBa ph\u01B0\u01A1ng s\u1EBD d\xF9ng \u0111\u1EBFn c\xE1c account v\xE0 program ch\u1EC9 s\u1EB5n c\xF3 tr\xEAn mainnet. Solana CLI cho ph\xE9p:",-1),Wn=n("ul",null,[n("li",null,"T\u1EA3i xu\u1ED1ng Programs v\xE0 Accounts"),n("li",null,"C\xE0i \u0111\u1EB7t Programs v\xE0 Accounts v\xE0o local validator")],-1),qn=n("h3",{id:"lam-the-nao-\u0111e-cai-\u0111at-accounts-tu-mainnet",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#lam-the-nao-\u0111e-cai-\u0111at-accounts-tu-mainnet","aria-hidden":"true"},"#"),s(" L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 c\xE0i \u0111\u1EB7t accounts t\u1EEB mainnet")],-1),Nn=n("p",null,"B\u1EA1n c\xF3 th\u1EC3 t\u1EA3i xu\u1ED1ng mint account c\u1EE7a SRM v\xE0o m\u1ED9t t\u1EADp tin:",-1),Bn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# solana account -u --output --output-file
    "),s(` solana account -u m --output json-compact --output-file SRM_token.json SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),En=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana account -u m --output json-compact --output-file SRM_token.json SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Un=n("p",null,"Sau \u0111\xF3, c\xE0i \u0111\u1EB7t n\xF3 v\xE0o m\xF4i tr\u01B0\u1EDDng localnet c\u1EE7a b\u1EA1n b\u1EB1ng c\xE1ch truy\u1EC1n t\u1EADp tin \u1EDF tr\xEAn v\xE0 \u0111\u1ECBa ch\u1EC9 \u0111\xEDch (tr\xEAn m\xF4i tr\u01B0\u1EDDng \u0111\u1ECBa ph\u01B0\u01A1ng) khi b\u1EAFt \u0111\u1EA7u kh\u1EDFi ch\u1EA1y validator:",-1),Vn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-test-validator --account SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt SRM_token.json --reset -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),jn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# solana-test-validator --account
    --reset"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),Gn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana account -u m --output json-compact --output-file SRM_token.json SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Hn=n("p",null,"Sau \u0111\xF3, c\xE0i \u0111\u1EB7t n\xF3 v\xE0o m\xF4i tr\u01B0\u1EDDng localnet c\u1EE7a b\u1EA1n b\u1EB1ng c\xE1ch truy\u1EC1n t\u1EADp tin \u1EDF tr\xEAn v\xE0 \u0111\u1ECBa ch\u1EC9 \u0111\xEDch (tr\xEAn m\xF4i tr\u01B0\u1EDDng \u0111\u1ECBa ph\u01B0\u01A1ng) khi b\u1EAFt \u0111\u1EA7u kh\u1EDFi ch\u1EA1y validator:",-1),Xn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-test-validator --account SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt SRM_token.json --reset +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Zn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# solana-test-validator --account
    --reset"),s(` solana-test-validator --account SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt SRM_token.json --reset -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),Wn=n("h3",{id:"lam-the-nao-\u0111e-cai-\u0111at-programs-tu-mainnet",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#lam-the-nao-\u0111e-cai-\u0111at-programs-tu-mainnet","aria-hidden":"true"},"#"),s(" L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 c\u1EA3i \u0111\u1EB7t programs t\u1EEB mainnet")],-1),Nn=n("p",null,"T\u01B0\u01A1ng t\u1EF1, b\u1EA1n ph\u1EA3i t\u1EA3i xu\u1ED1ng program c\u1EE7a Serum Dex v3:",-1),Bn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# solana program dump -u
    "),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),Dn=n("h3",{id:"lam-the-nao-\u0111e-cai-\u0111at-programs-tu-mainnet",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#lam-the-nao-\u0111e-cai-\u0111at-programs-tu-mainnet","aria-hidden":"true"},"#"),s(" L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 c\u1EA3i \u0111\u1EB7t programs t\u1EEB mainnet")],-1),Fn=n("p",null,"T\u01B0\u01A1ng t\u1EF1, b\u1EA1n ph\u1EA3i t\u1EA3i xu\u1ED1ng program c\u1EE7a Serum Dex v3:",-1),zn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# solana program dump -u
    "),s(` solana program dump -u m 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin serum_dex_v3.so -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),Gn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana program dump -u m 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin serum_dex_v3.so -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Hn=n("p",null,"C\xE0i \u0111\u1EB7t n\xF3 v\xE0o localnet \u0111\u01B0\u1EE3c th\u1EF1c hi\u1EC7n b\u1EB1ng c\xE1ch truy\u1EC1n t\u1EADp tin program v\xE0 \u0111\u1ECBa ch\u1EC9 \u0111\xEDch (tr\xEAn m\xF4i tr\u01B0\u1EDDng \u0111\u1EA1i ph\u01B0\u01A1ng) khi b\u1EAFt \u0111\u1EA7u kh\u1EDFi ch\u1EA1y validator:",-1),Xn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-test-validator --bpf-program 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin serum_dex_v3.so --reset -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),qn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# solana-test-validator --bpf-program
    --reset"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),Qn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana program dump -u m 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin serum_dex_v3.so +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Jn=n("p",null,"C\xE0i \u0111\u1EB7t n\xF3 v\xE0o localnet \u0111\u01B0\u1EE3c th\u1EF1c hi\u1EC7n b\u1EB1ng c\xE1ch truy\u1EC1n t\u1EADp tin program v\xE0 \u0111\u1ECBa ch\u1EC9 \u0111\xEDch (tr\xEAn m\xF4i tr\u01B0\u1EDDng \u0111\u1EA1i ph\u01B0\u01A1ng) khi b\u1EAFt \u0111\u1EA7u kh\u1EDFi ch\u1EA1y validator:",-1),Yn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-test-validator --bpf-program 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin serum_dex_v3.so --reset +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),$n=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# solana-test-validator --bpf-program
    --reset"),s(` solana-test-validator --bpf-program 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin serum_dex_v3.so --reset -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1);function Zn(Dn,Fn){const p=l("RouterLink"),e=l("SolanaCodeGroupItem"),o=l("SolanaCodeGroup"),c=l("ExternalLinkIcon");return i(),r(k,null,[d,h,g,n("p",null,[_,y,w,t(p,{to:"/vi/getting-started/installation.html#cai-%C4%91at-cli"},{default:a(()=>[f]),_:1}),v]),C,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[x]),preview:a(()=>[S]),_:1}),t(e,{title:"Python"},{default:a(()=>[A]),preview:a(()=>[R]),_:1}),t(e,{title:"Rust"},{default:a(()=>[L]),preview:a(()=>[T]),_:1}),t(e,{title:"CLI"},{default:a(()=>[P]),preview:a(()=>[K]),_:1})]),_:1}),M,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[O]),preview:a(()=>[I]),_:1}),t(e,{title:"Python"},{default:a(()=>[E]),preview:a(()=>[U]),_:1}),t(e,{title:"Rust"},{default:a(()=>[V]),preview:a(()=>[j]),_:1}),t(e,{title:"CLI"},{default:a(()=>[W]),preview:a(()=>[N]),_:1})]),_:1}),B,G,n("p",null,[n("a",H,[X,t(c)]),q,Z,D,n("a",F,[z,t(c)]),Q]),n("p",null,[J,Y,$,nn,sn,an,tn,en,on,n("a",cn,[ln,t(c)]),pn,n("a",un,[rn,t(c)]),kn]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[mn]),preview:a(()=>[bn]),_:1}),t(e,{title:"Python"},{default:a(()=>[dn]),preview:a(()=>[hn]),_:1}),t(e,{title:"Rust"},{default:a(()=>[gn]),preview:a(()=>[_n]),_:1})]),_:1}),yn,wn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[fn]),preview:a(()=>[vn]),_:1}),t(e,{title:"Python"},{default:a(()=>[Cn]),preview:a(()=>[xn]),_:1}),t(e,{title:"Rust"},{default:a(()=>[Sn]),preview:a(()=>[An]),_:1}),t(e,{title:"CLI"},{default:a(()=>[Rn]),preview:a(()=>[Ln]),_:1})]),_:1}),Tn,Pn,Kn,Mn,On,t(o,null,{default:a(()=>[t(e,{title:"CLI"},{default:a(()=>[In]),preview:a(()=>[En]),_:1})]),_:1}),Un,t(o,null,{default:a(()=>[t(e,{title:"CLI"},{preview:a(()=>[Vn]),default:a(()=>[jn]),_:1})]),_:1}),Wn,Nn,t(o,null,{default:a(()=>[t(e,{title:"CLI"},{default:a(()=>[Bn]),preview:a(()=>[Gn]),_:1})]),_:1}),Hn,t(o,null,{default:a(()=>[t(e,{title:"CLI"},{preview:a(()=>[Xn]),default:a(()=>[qn]),_:1})]),_:1})],64)}var Qn=u(b,[["render",Zn]]);export{Qn as default}; +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1);function ns(ss,as){const l=p("RouterLink"),e=p("SolanaCodeGroupItem"),o=p("SolanaCodeGroup"),c=p("ExternalLinkIcon");return i(),r(k,null,[d,h,g,n("p",null,[_,y,w,t(l,{to:"/vi/getting-started/installation.html#cai-%C4%91at-cli"},{default:a(()=>[f]),_:1}),v]),C,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[x]),preview:a(()=>[S]),_:1}),t(e,{title:"Python"},{default:a(()=>[A]),preview:a(()=>[R]),_:1}),t(e,{title:"C++"},{default:a(()=>[L]),preview:a(()=>[T]),_:1}),t(e,{title:"Rust"},{default:a(()=>[P]),preview:a(()=>[K]),_:1}),t(e,{title:"CLI"},{default:a(()=>[M]),preview:a(()=>[O]),_:1})]),_:1}),I,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[E]),preview:a(()=>[U]),_:1}),t(e,{title:"Python"},{default:a(()=>[V]),preview:a(()=>[j]),_:1}),t(e,{title:"C++"},{default:a(()=>[W]),preview:a(()=>[q]),_:1}),t(e,{title:"Rust"},{default:a(()=>[N]),preview:a(()=>[B]),_:1}),t(e,{title:"CLI"},{default:a(()=>[G]),preview:a(()=>[H]),_:1})]),_:1}),X,Z,n("p",null,[n("a",D,[F,t(c)]),z,Q,J,n("a",Y,[$,t(c)]),nn]),n("p",null,[sn,an,tn,en,on,cn,pn,ln,un,n("a",rn,[kn,t(c)]),bn,n("a",mn,[dn,t(c)]),hn]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[gn]),preview:a(()=>[_n]),_:1}),t(e,{title:"Python"},{default:a(()=>[yn]),preview:a(()=>[wn]),_:1}),t(e,{title:"C++"},{default:a(()=>[fn]),preview:a(()=>[vn]),_:1}),t(e,{title:"Rust"},{default:a(()=>[Cn]),preview:a(()=>[xn]),_:1})]),_:1}),Sn,An,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[Rn]),preview:a(()=>[Ln]),_:1}),t(e,{title:"Python"},{default:a(()=>[Tn]),preview:a(()=>[Pn]),_:1}),t(e,{title:"C++"},{default:a(()=>[Kn]),preview:a(()=>[Mn]),_:1}),t(e,{title:"Rust"},{default:a(()=>[On]),preview:a(()=>[In]),_:1}),t(e,{title:"CLI"},{default:a(()=>[En]),preview:a(()=>[Un]),_:1})]),_:1}),Vn,jn,Wn,qn,Nn,t(o,null,{default:a(()=>[t(e,{title:"CLI"},{default:a(()=>[Bn]),preview:a(()=>[Gn]),_:1})]),_:1}),Hn,t(o,null,{default:a(()=>[t(e,{title:"CLI"},{preview:a(()=>[Xn]),default:a(()=>[Zn]),_:1})]),_:1}),Dn,Fn,t(o,null,{default:a(()=>[t(e,{title:"CLI"},{default:a(()=>[zn]),preview:a(()=>[Qn]),_:1})]),_:1}),Jn,t(o,null,{default:a(()=>[t(e,{title:"CLI"},{preview:a(()=>[Yn]),default:a(()=>[$n]),_:1})]),_:1})],64)}var es=u(m,[["render",ns]]);export{es as default}; diff --git a/docs/.vuepress/dist/assets/local-development.html.58549e45.js b/docs/.vuepress/dist/assets/local-development.html.73b0d31a.js similarity index 68% rename from docs/.vuepress/dist/assets/local-development.html.58549e45.js rename to docs/.vuepress/dist/assets/local-development.html.73b0d31a.js index 0107b07f5..f521970f7 100644 --- a/docs/.vuepress/dist/assets/local-development.html.58549e45.js +++ b/docs/.vuepress/dist/assets/local-development.html.73b0d31a.js @@ -1,4 +1,4 @@ -import{_ as u,r as l,o as i,c as r,a as n,b as t,w as a,F as k,d as s,e as m}from"./app.cfdf84e7.js";const d={},b=n("h1",{id:"developpement-local",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#developpement-local","aria-hidden":"true"},"#"),s(" D\xE9veloppement Local")],-1),g=n("h2",{id:"demarrer-un-validateur-local",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#demarrer-un-validateur-local","aria-hidden":"true"},"#"),s(" D\xE9marrer un Validateur Local")],-1),h=n("p",null,"Tester le code de votre programme localement peut \xEAtre beaucoup plus fiable que de le tester sur le devnet, et peut vous aider \xE0 faire des tests avant de l'essayer sur le devnet.",-1),_=s("Vous pouvez configurer votre validateur de test local (local-test-validator) en installant la "),f=s("suite d'outils de solana (solana tool suite)"),w=s(" et en ex\xE9cutant"),y=m(`
    solana-test-validator
    +import{_ as u,r as l,o as i,c as r,a as n,b as t,w as a,F as k,d as s,e as m}from"./app.2fbb9e96.js";const b={},d=n("h1",{id:"developpement-local",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#developpement-local","aria-hidden":"true"},"#"),s(" D\xE9veloppement Local")],-1),g=n("h2",{id:"demarrer-un-validateur-local",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#demarrer-un-validateur-local","aria-hidden":"true"},"#"),s(" D\xE9marrer un Validateur Local")],-1),h=n("p",null,"Tester le code de votre programme localement peut \xEAtre beaucoup plus fiable que de le tester sur le devnet, et peut vous aider \xE0 faire des tests avant de l'essayer sur le devnet.",-1),_=s("Vous pouvez configurer votre validateur de test local (local-test-validator) en installant la "),f=s("suite d'outils de solana (solana tool suite)"),w=s(" et en ex\xE9cutant"),y=m(`
    solana-test-validator
     

    Les avantages de l'utilisation de local-test-validator sont les suivants :

    • Pas de limites de d\xE9bit RPC
    • Pas de limites d'airdrop
    • D\xE9ploiement direct de programme sur la blockchain (--bpf-program ...)
    • Clonage de comptes \xE0 partir d'un cluster public, y compris les programmes (--clone ...)
    • Possibilit\xE9 de configurer l'historique de conservation des transactions (--limit-ledger-size ...)
    • Possibilit\xE9 de configurer la dur\xE9e des \xE9poques (--slots-per-epoch ...)
    • Sauter \xE0 un slot pr\xE9cis (--warp-slot ...)

    Connexion aux Environnements

    Lorsque vous d\xE9veloppez sur Solana, vous devez vous connecter \xE0 un point de terminaison API de RPC en particulier. Solana dispose de 3 environnements de d\xE9veloppement publics :

    • mainnet-beta https://api.mainnet-beta.solana.com
    • devnet https://api.devnet.solana.com
    • testnet https://api.testnet.solana.com
    `,6),v=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" clusterApiUrl"),n("span",{class:"token punctuation"},","),s(" Connection "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -9,40 +9,58 @@ import{_ as u,r as l,o as i,c as r,a as n,b as t,w as a,F as k,d as s,e as m}fro client `),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.mainnet-beta.solana.com"'),n("span",{class:"token punctuation"},")"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),S=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("client "),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.mainnet-beta.solana.com"'),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),L=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),L=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + Connection `),n("span",{class:"token function"},"connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.mainnet-beta.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token keyword"},"return"),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),A=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[s("Connection "),n("span",{class:"token function"},"connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.mainnet-beta.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),R=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("commitment_config"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"let"),s(" rpc_url "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"String"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.mainnet-beta.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"let"),s(" client "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new_with_commitment"),n("span",{class:"token punctuation"},"("),s("rpc_url"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"confirmed"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),R=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" rpc_url "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"String"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.mainnet-beta.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),P=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" rpc_url "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"String"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.mainnet-beta.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"let"),s(" client "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new_with_commitment"),n("span",{class:"token punctuation"},"("),s("rpc_url"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"confirmed"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),A=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana config "),n("span",{class:"token builtin class-name"},"set"),s(` --url https://api.mainnet-beta.solana.com -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),P=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana config "),n("span",{class:"token builtin class-name"},"set"),s(` --url https://api.mainnet-beta.solana.com -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),T=n("p",null,"Enfin, vous pouvez \xE9galement vous connecter \xE0 un cluster priv\xE9, qu'il soit local ou fonctionnant \xE0 distance avec l'\xE9l\xE9ment suivant :",-1),O=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),T=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana config "),n("span",{class:"token builtin class-name"},"set"),s(` --url https://api.mainnet-beta.solana.com +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),q=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana config "),n("span",{class:"token builtin class-name"},"set"),s(` --url https://api.mainnet-beta.solana.com +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),I=n("p",null,"Enfin, vous pouvez \xE9galement vous connecter \xE0 un cluster priv\xE9, qu'il soit local ou fonctionnant \xE0 distance avec l'\xE9l\xE9ment suivant :",-1),O=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token comment"},"// This will connect you to your local validator"),s(` `),n("span",{class:"token keyword"},"const"),s(" connection "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token string"},'"confirmed"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),M=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" connection "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token string"},'"confirmed"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),E=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("api "),n("span",{class:"token keyword"},"import"),s(` Client +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),K=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("api "),n("span",{class:"token keyword"},"import"),s(` Client client `),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),I=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("client "),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),j=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),E=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("client "),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),j=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + Connection `),n("span",{class:"token function"},"connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token keyword"},"return"),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),U=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[s("Connection "),n("span",{class:"token function"},"connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),V=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("commitment_config"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"let"),s(" rpc_url "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"String"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"let"),s(" client "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new_with_commitment"),n("span",{class:"token punctuation"},"("),s("rpc_url"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"confirmed"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),q=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" rpc_url "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"String"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),z=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" rpc_url "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"String"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"let"),s(" client "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new_with_commitment"),n("span",{class:"token punctuation"},"("),s("rpc_url"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"confirmed"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),K=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana config "),n("span",{class:"token builtin class-name"},"set"),s(` --url http://privaterpc.com -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),U=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana config "),n("span",{class:"token builtin class-name"},"set"),s(` --url http://privaterpc.com -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),V=n("h2",{id:"inscription-a-des-evenements",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#inscription-a-des-evenements","aria-hidden":"true"},"#"),s(" Inscription \xE0 des Ev\xE9nements")],-1),z=n("p",null,"Les Websockets fournissent une interface pub/sub o\xF9 vous pouvez \xE9couter certains \xE9v\xE9nements. Au lieu d'envoyer une requ\xEAte \xE0 un point de terminaison HTTP classique \xE0 intervalles r\xE9guliers pour obtenir des mises \xE0 jour fr\xE9quentes, vous pouvez recevoir ces mises \xE0 jour uniquement lorsqu'elles se produisent.",-1),W=s("La classe web3 "),G={href:"https://solana-labs.github.io/solana-web3.js/classes/Connection.html",target:"_blank",rel:"noopener noreferrer"},N=n("code",null,"Connection",-1),X=s(" de Solana g\xE9n\xE8re un point de terminaison websocket et enregistre un client websocket lorsque vous cr\xE9ez une nouvelle instance "),D=n("code",null,"Connection",-1),H=s(" (voir le code source "),B={href:"https://github.com/solana-labs/solana-web3.js/blob/45923ca00e4cc1ed079d8e55ecbee83e5b4dc174/src/connection.ts#L2100",target:"_blank",rel:"noopener noreferrer"},Z=s("ici"),F=s(")."),Q=s("La classe "),J=n("code",null,"Connection",-1),Y=s(" pr\xE9sente des m\xE9thodes pub/sub - elles commencent toutes par "),$=n("code",null,"on",-1),nn=s(", comme les \xE9metteurs d'\xE9v\xE9nements. Lorsque vous appelez ces m\xE9thodes d'\xE9coute, un nouvel enregistrement est effectu\xE9 aupr\xE8s du client websocket de l'instance "),sn=n("code",null,"Connection",-1),an=s(". L'exemple de m\xE9thode pub/sub que nous utilisons ci-dessous est "),tn={href:"https://solana-labs.github.io/solana-web3.js/classes/Connection.html#onAccountChange",target:"_blank",rel:"noopener noreferrer"},en=n("code",null,"onAccountChange",-1),on=s(". Le callback fournira les donn\xE9es d'\xE9tat mises \xE0 jour par le biais d'arguments (voir "),cn={href:"https://solana-labs.github.io/solana-web3.js/modules.html#AccountChangeCallback",target:"_blank",rel:"noopener noreferrer"},ln=n("code",null,"AccountChangeCallback",-1),pn=s(" en guise d'exemple)."),un=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" clusterApiUrl"),n("span",{class:"token punctuation"},","),s(" Connection"),n("span",{class:"token punctuation"},","),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),W=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana config "),n("span",{class:"token builtin class-name"},"set"),s(` --url http://privaterpc.com +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),G=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana config "),n("span",{class:"token builtin class-name"},"set"),s(` --url http://privaterpc.com +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),N=n("h2",{id:"inscription-a-des-evenements",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#inscription-a-des-evenements","aria-hidden":"true"},"#"),s(" Inscription \xE0 des Ev\xE9nements")],-1),X=n("p",null,"Les Websockets fournissent une interface pub/sub o\xF9 vous pouvez \xE9couter certains \xE9v\xE9nements. Au lieu d'envoyer une requ\xEAte \xE0 un point de terminaison HTTP classique \xE0 intervalles r\xE9guliers pour obtenir des mises \xE0 jour fr\xE9quentes, vous pouvez recevoir ces mises \xE0 jour uniquement lorsqu'elles se produisent.",-1),D=s("La classe web3 "),H={href:"https://solana-labs.github.io/solana-web3.js/classes/Connection.html",target:"_blank",rel:"noopener noreferrer"},B=n("code",null,"Connection",-1),Z=s(" de Solana g\xE9n\xE8re un point de terminaison websocket et enregistre un client websocket lorsque vous cr\xE9ez une nouvelle instance "),F=n("code",null,"Connection",-1),Q=s(" (voir le code source "),J={href:"https://github.com/solana-labs/solana-web3.js/blob/45923ca00e4cc1ed079d8e55ecbee83e5b4dc174/src/connection.ts#L2100",target:"_blank",rel:"noopener noreferrer"},Y=s("ici"),$=s(")."),nn=s("La classe "),sn=n("code",null,"Connection",-1),an=s(" pr\xE9sente des m\xE9thodes pub/sub - elles commencent toutes par "),tn=n("code",null,"on",-1),en=s(", comme les \xE9metteurs d'\xE9v\xE9nements. Lorsque vous appelez ces m\xE9thodes d'\xE9coute, un nouvel enregistrement est effectu\xE9 aupr\xE8s du client websocket de l'instance "),on=n("code",null,"Connection",-1),cn=s(". L'exemple de m\xE9thode pub/sub que nous utilisons ci-dessous est "),ln={href:"https://solana-labs.github.io/solana-web3.js/classes/Connection.html#onAccountChange",target:"_blank",rel:"noopener noreferrer"},pn=n("code",null,"onAccountChange",-1),un=s(". Le callback fournira les donn\xE9es d'\xE9tat mises \xE0 jour par le biais d'arguments (voir "),rn={href:"https://solana-labs.github.io/solana-web3.js/modules.html#AccountChangeCallback",target:"_blank",rel:"noopener noreferrer"},kn=n("code",null,"AccountChangeCallback",-1),mn=s(" en guise d'exemple)."),bn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" clusterApiUrl"),n("span",{class:"token punctuation"},","),s(" Connection"),n("span",{class:"token punctuation"},","),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token comment"},"// Establish new connect to devnet - websocket client connected to devnet will also be registered here"),s(` @@ -59,7 +77,7 @@ client `),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"t `),n("span",{class:"token string"},'"confirmed"'),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br")])],-1),rn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token comment"},"// Establish new connect to devnet - websocket client connected to devnet will also be registered here"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br")])],-1),dn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token comment"},"// Establish new connect to devnet - websocket client connected to devnet will also be registered here"),s(` `),n("span",{class:"token keyword"},"const"),s(" connection "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"clusterApiUrl"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"devnet"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token string"},'"confirmed"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token comment"},"// Create a test wallet to listen to"),s(` @@ -72,8 +90,8 @@ connection`),n("span",{class:"token punctuation"},"."),n("span",{class:"token fu `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Updated account info: "'),n("span",{class:"token punctuation"},","),s(" updatedAccountInfo"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token string"},'"confirmed"'),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br")])],-1),kn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(` asyncio -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br")])],-1),gn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(` asyncio +`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair `),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("websocket_api "),n("span",{class:"token keyword"},"import"),s(` connect `),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token keyword"},"def"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},":"),s(` @@ -81,7 +99,7 @@ connection`),n("span",{class:"token punctuation"},"."),n("span",{class:"token fu `),n("span",{class:"token comment"},"# Create a Test Wallet"),s(` wallet `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"# Subscribe to the Test wallet to listen for events"),s(` - `),n("span",{class:"token keyword"},"await"),s(" websocket"),n("span",{class:"token punctuation"},"."),s("account_subscribe"),n("span",{class:"token punctuation"},"("),s("wallet"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),s(` + `),n("span",{class:"token keyword"},"await"),s(" websocket"),n("span",{class:"token punctuation"},"."),s("account_subscribe"),n("span",{class:"token punctuation"},"("),s("wallet"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"# Capture response from account subscription "),s(` first_resp `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" websocket"),n("span",{class:"token punctuation"},"."),s("recv"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Subscription successful with id {}, listening for events \\n"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("first_resp"),n("span",{class:"token punctuation"},"."),s("result"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` @@ -89,17 +107,66 @@ connection`),n("span",{class:"token punctuation"},"."),n("span",{class:"token fu `),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("updated_account_info"),n("span",{class:"token punctuation"},")"),s(` asyncio`),n("span",{class:"token punctuation"},"."),s("run"),n("span",{class:"token punctuation"},"("),s("main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br")])],-1),mn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token keyword"},"with"),s(" connect"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"wss://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token keyword"},"as"),s(" websocket"),n("span",{class:"token punctuation"},":"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br")])],-1),hn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token keyword"},"with"),s(" connect"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"wss://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token keyword"},"as"),s(" websocket"),n("span",{class:"token punctuation"},":"),s(` `),n("span",{class:"token comment"},"# Create a Test Wallet"),s(` wallet `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"# Subscribe to the Test wallet to listen for events"),s(` - `),n("span",{class:"token keyword"},"await"),s(" websocket"),n("span",{class:"token punctuation"},"."),s("account_subscribe"),n("span",{class:"token punctuation"},"("),s("wallet"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),s(` + `),n("span",{class:"token keyword"},"await"),s(" websocket"),n("span",{class:"token punctuation"},"."),s("account_subscribe"),n("span",{class:"token punctuation"},"("),s("wallet"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"# Capture response from account subscription "),s(` first_resp `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" websocket"),n("span",{class:"token punctuation"},"."),s("recv"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Subscription successful with id {}, listening for events \\n"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("first_resp"),n("span",{class:"token punctuation"},"."),s("result"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` updated_account_info `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" websocket"),n("span",{class:"token punctuation"},"."),s("recv"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("updated_account_info"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),dn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("pubsub_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"PubsubClient"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),_n=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token comment"},"// clang++ on_account_change.cpp -o on_account_change -std=c++17 -lssl -lcrypto -lsodium"),s(` + +`),n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + Connection `),n("span",{class:"token function"},"connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"int"),s(" subscriptionId "),n("span",{class:"token operator"},"="),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"on_account_change"),n("span",{class:"token punctuation"},"("),s("key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token punctuation"},"["),n("span",{class:"token operator"},"&"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},"("),s("Result"),n("span",{class:"token operator"},"<"),s("Account"),n("span",{class:"token operator"},">"),s(" result"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + Account account `),n("span",{class:"token operator"},"="),s(" result"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"owner = "'),s(),n("span",{class:"token operator"},"<<"),s(" account"),n("span",{class:"token punctuation"},"."),s("owner"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"lamports = "'),s(),n("span",{class:"token operator"},"<<"),s(" account"),n("span",{class:"token punctuation"},"."),s("lamports "),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"data = "'),s(),n("span",{class:"token operator"},"<<"),s(" account"),n("span",{class:"token punctuation"},"."),s("data "),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"executable = "'),s(),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token punctuation"},"("),s("account"),n("span",{class:"token punctuation"},"."),s("executable "),n("span",{class:"token operator"},"?"),s(),n("span",{class:"token string"},'"true"'),s(),n("span",{class:"token operator"},":"),s(),n("span",{class:"token string"},'"false"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token function"},"sleep"),n("span",{class:"token punctuation"},"("),n("span",{class:"token number"},"1"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + std`),n("span",{class:"token double-colon punctuation"},"::"),s("string tx_hash "),n("span",{class:"token operator"},"="),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"request_airdrop"),n("span",{class:"token punctuation"},"("),s("key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"tx hash = "'),s(),n("span",{class:"token operator"},"<<"),s(" tx_hash "),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"for"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"int"),s(" i "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(" i "),n("span",{class:"token operator"},"<"),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},";"),s(" i"),n("span",{class:"token operator"},"++"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + connection`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"poll"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token function"},"sleep"),n("span",{class:"token punctuation"},"("),n("span",{class:"token number"},"1"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token punctuation"},"}"),s(` + + connection`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"remove_account_listener"),n("span",{class:"token punctuation"},"("),s("subscriptionId"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"return"),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br")])],-1),fn=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(" subscriptionId "),n("span",{class:"token operator"},"="),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"on_account_change"),n("span",{class:"token punctuation"},"("),s("key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token punctuation"},"["),n("span",{class:"token operator"},"&"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},"("),s("Result"),n("span",{class:"token operator"},"<"),s("Account"),n("span",{class:"token operator"},">"),s(" result"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + Account account `),n("span",{class:"token operator"},"="),s(" result"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"owner = "'),s(),n("span",{class:"token operator"},"<<"),s(" account"),n("span",{class:"token punctuation"},"."),s("owner"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"lamports = "'),s(),n("span",{class:"token operator"},"<<"),s(" account"),n("span",{class:"token punctuation"},"."),s("lamports "),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"data = "'),s(),n("span",{class:"token operator"},"<<"),s(" account"),n("span",{class:"token punctuation"},"."),s("data "),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"executable = "'),s(),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token punctuation"},"("),s("account"),n("span",{class:"token punctuation"},"."),s("executable "),n("span",{class:"token operator"},"?"),s(),n("span",{class:"token string"},'"true"'),s(),n("span",{class:"token operator"},":"),s(),n("span",{class:"token string"},'"false"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"for"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"int"),s(" i "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(" i "),n("span",{class:"token operator"},"<"),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},";"),s(" i"),n("span",{class:"token operator"},"++"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + connection`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"poll"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token function"},"sleep"),n("span",{class:"token punctuation"},"("),n("span",{class:"token number"},"1"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` + +connection`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"remove_account_listener"),n("span",{class:"token punctuation"},"("),s("subscriptionId"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br")])],-1),wn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("pubsub_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"PubsubClient"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_config"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcAccountInfoConfig"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("commitment_config"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("signature"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"Signer"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` @@ -136,7 +203,7 @@ asyncio`),n("span",{class:"token punctuation"},"."),s("run"),n("span",{class:"to `),n("span",{class:"token macro property"},"println!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Errooooor"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br")])],-1),bn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" ws_url "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"String"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"wss://api.devnet.solana.com/"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br")])],-1),yn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" ws_url "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"String"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"wss://api.devnet.solana.com/"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"let"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"mut"),s(" client"),n("span",{class:"token punctuation"},","),s(" receiver"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"PubsubClient"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"account_subscribe"),n("span",{class:"token punctuation"},"("),s(` `),n("span",{class:"token operator"},"&"),s("ws_url"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token operator"},"&"),s("pubkey"),n("span",{class:"token punctuation"},","),s(` @@ -148,7 +215,7 @@ asyncio`),n("span",{class:"token punctuation"},"."),s("run"),n("span",{class:"to `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"let"),s(" message "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"match"),s(" receiver"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"recv"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token macro property"},"println!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"{:?}"'),n("span",{class:"token punctuation"},","),s(" message"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br")])],-1),gn=n("h2",{id:"obtention-de-sol-pour-les-tests",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#obtention-de-sol-pour-les-tests","aria-hidden":"true"},"#"),s(" Obtention de SOL pour les Tests")],-1),hn=n("p",null,"Lorsque vous travaillez localement, vous avez besoin d'un certain nombre de SOL pour envoyer des transactions. Dans les environnements non-mainnet, vous pouvez recevoir des SOL en les airdroppant \xE0 votre adresse.",-1),_n=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection"),n("span",{class:"token punctuation"},","),s(" Keypair"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token constant"},"LAMPORTS_PER_SOL"),s(),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br")])],-1),vn=n("h2",{id:"obtention-de-sol-pour-les-tests",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#obtention-de-sol-pour-les-tests","aria-hidden":"true"},"#"),s(" Obtention de SOL pour les Tests")],-1),Cn=n("p",null,"Lorsque vous travaillez localement, vous avez besoin d'un certain nombre de SOL pour envoyer des transactions. Dans les environnements non-mainnet, vous pouvez recevoir des SOL en les airdroppant \xE0 votre adresse.",-1),xn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection"),n("span",{class:"token punctuation"},","),s(" Keypair"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token constant"},"LAMPORTS_PER_SOL"),s(),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` @@ -166,13 +233,13 @@ asyncio`),n("span",{class:"token punctuation"},"."),s("run"),n("span",{class:"to signature `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br")])],-1),fn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" airdropSignature "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"requestAirdrop"),n("span",{class:"token punctuation"},"("),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br")])],-1),Sn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" airdropSignature "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"requestAirdrop"),n("span",{class:"token punctuation"},"("),s(` keypair`),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token constant"},"LAMPORTS_PER_SOL"),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"await"),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"confirmTransaction"),n("span",{class:"token punctuation"},"("),s("airdropSignature"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),wn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),Ln=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair `),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("api "),n("span",{class:"token keyword"},"import"),s(` Client wallet `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` @@ -180,14 +247,32 @@ wallet `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:" client `),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"#Input Airdrop amount in LAMPORTS"),s(` -client`),n("span",{class:"token punctuation"},"."),s("request_airdrop"),n("span",{class:"token punctuation"},"("),s("wallet"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"1000000000"),n("span",{class:"token punctuation"},")"),s(` +client`),n("span",{class:"token punctuation"},"."),s("request_airdrop"),n("span",{class:"token punctuation"},"("),s("wallet"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"1000000000"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"#Airdrops 1 SOL"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),yn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token comment"},"#Input Airdrop amount in LAMPORTS"),s(` -client`),n("span",{class:"token punctuation"},"."),s("request_airdrop"),n("span",{class:"token punctuation"},"("),s("wallet"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"1000000000"),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),An=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token comment"},"#Input Airdrop amount in LAMPORTS"),s(` +client`),n("span",{class:"token punctuation"},"."),s("request_airdrop"),n("span",{class:"token punctuation"},"("),s("wallet"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"1000000000"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"#Airdrops 1 SOL"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),vn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),Rn=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token comment"},"// clang++ request_airdrop.cpp -o request_airdrop -std=c++17 -lssl -lcrypto -lsodium"),s(` + +`),n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + Connection `),n("span",{class:"token function"},"connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + std`),n("span",{class:"token double-colon punctuation"},"::"),s("string tx_hash "),n("span",{class:"token operator"},"="),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"request_airdrop"),n("span",{class:"token punctuation"},"("),s("key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"tx hash = "'),s(),n("span",{class:"token operator"},"<<"),s(" tx_hash "),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"return"),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br")])],-1),Pn=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[s("connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"request_airdrop"),n("span",{class:"token punctuation"},"("),s("key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Tn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("commitment_config"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("native_token"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token constant"},"LAMPORTS_PER_SOL"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("signature"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"Signer"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` @@ -209,7 +294,7 @@ client`),n("span",{class:"token punctuation"},"."),s("request_airdrop"),n("span" `),n("span",{class:"token class-name"},"Err"),n("span",{class:"token punctuation"},"("),s("_"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token macro property"},"println!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Error requesting airdrop"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br")])],-1),Cn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"match"),s(" client"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"request_airdrop"),n("span",{class:"token punctuation"},"("),n("span",{class:"token operator"},"&"),s("pubkey"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token constant"},"LAMPORTS_PER_SOL"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br")])],-1),qn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"match"),s(" client"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"request_airdrop"),n("span",{class:"token punctuation"},"("),n("span",{class:"token operator"},"&"),s("pubkey"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token constant"},"LAMPORTS_PER_SOL"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token class-name"},"Ok"),n("span",{class:"token punctuation"},"("),s("sig"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token keyword"},"loop"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"if"),s(),n("span",{class:"token keyword"},"let"),s(),n("span",{class:"token class-name"},"Ok"),n("span",{class:"token punctuation"},"("),s("confirmed"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"="),s(" client"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"confirm_transaction"),n("span",{class:"token punctuation"},"("),n("span",{class:"token operator"},"&"),s("sig"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"if"),s(" confirmed "),n("span",{class:"token punctuation"},"{"),s(` @@ -220,21 +305,21 @@ client`),n("span",{class:"token punctuation"},"."),s("request_airdrop"),n("span" `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token class-name"},"Err"),n("span",{class:"token punctuation"},"("),s("_"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token macro property"},"println!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Error requesting airdrop"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),xn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana airdrop "),n("span",{class:"token number"},"1"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),In=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana airdrop "),n("span",{class:"token number"},"1"),s(` `),n("span",{class:"token comment"},"# Return"),s(` `),n("span",{class:"token comment"},'# "1 SOL"'),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),Sn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana airdrop "),n("span",{class:"token number"},"1"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Ln=n("h2",{id:"utilisation-des-comptes-et-des-programmes-du-mainnet",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#utilisation-des-comptes-et-des-programmes-du-mainnet","aria-hidden":"true"},"#"),s(" Utilisation des Comptes et des Programmes du Mainnet")],-1),Rn=n("p",null,"Parfois, les tests locaux reposent sur des programmes et des comptes disponibles uniquement sur le mainnet. Le CLI de Solana permet \xE0 la fois de :",-1),An=n("ul",null,[n("li",null,"T\xE9l\xE9charger des Programmes et des Comptes"),n("li",null,"Charger des Programmes et des Comptes dans un validateur local")],-1),Pn=n("h3",{id:"comment-charger-des-comptes-depuis-le-mainnet",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#comment-charger-des-comptes-depuis-le-mainnet","aria-hidden":"true"},"#"),s(" Comment charger des comptes depuis le mainnet")],-1),Tn=n("p",null,"Il est possible de t\xE9l\xE9charger les comptes de mint du jeton SRM dans un fichier comme suit :",-1),On=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# solana account -u --output --output-file
    "),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),On=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana airdrop "),n("span",{class:"token number"},"1"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Mn=n("h2",{id:"utilisation-des-comptes-et-des-programmes-du-mainnet",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#utilisation-des-comptes-et-des-programmes-du-mainnet","aria-hidden":"true"},"#"),s(" Utilisation des Comptes et des Programmes du Mainnet")],-1),Kn=n("p",null,"Parfois, les tests locaux reposent sur des programmes et des comptes disponibles uniquement sur le mainnet. Le CLI de Solana permet \xE0 la fois de :",-1),En=n("ul",null,[n("li",null,"T\xE9l\xE9charger des Programmes et des Comptes"),n("li",null,"Charger des Programmes et des Comptes dans un validateur local")],-1),jn=n("h3",{id:"comment-charger-des-comptes-depuis-le-mainnet",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#comment-charger-des-comptes-depuis-le-mainnet","aria-hidden":"true"},"#"),s(" Comment charger des comptes depuis le mainnet")],-1),Un=n("p",null,"Il est possible de t\xE9l\xE9charger les comptes de mint du jeton SRM dans un fichier comme suit :",-1),Vn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# solana account -u --output --output-file
    "),s(` solana account -u m --output json-compact --output-file SRM_token.json SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),Mn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana account -u m --output json-compact --output-file SRM_token.json SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),En=n("p",null,"Le chargement sur votre r\xE9seau local se fait ensuite en passant le fichier contenant les comptes et l'adresse de destination (sur le cluster local) lors du d\xE9marrage du validateur :",-1),In=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-test-validator --account SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt SRM_token.json --reset -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),jn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# solana-test-validator --account
    --reset"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),zn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana account -u m --output json-compact --output-file SRM_token.json SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Wn=n("p",null,"Le chargement sur votre r\xE9seau local se fait ensuite en passant le fichier contenant les comptes et l'adresse de destination (sur le cluster local) lors du d\xE9marrage du validateur :",-1),Gn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-test-validator --account SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt SRM_token.json --reset +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Nn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# solana-test-validator --account
    --reset"),s(` solana-test-validator --account SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt SRM_token.json --reset -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),qn=n("h3",{id:"comment-charger-des-programmes-depuis-le-mainnet",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#comment-charger-des-programmes-depuis-le-mainnet","aria-hidden":"true"},"#"),s(" Comment charger des programmes depuis le mainnet")],-1),Kn=n("p",null,"De m\xEAme, il est possible de t\xE9l\xE9charger le programme Serum Dex v3 :",-1),Un=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# solana program dump -u
    "),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),Xn=n("h3",{id:"comment-charger-des-programmes-depuis-le-mainnet",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#comment-charger-des-programmes-depuis-le-mainnet","aria-hidden":"true"},"#"),s(" Comment charger des programmes depuis le mainnet")],-1),Dn=n("p",null,"De m\xEAme, il est possible de t\xE9l\xE9charger le programme Serum Dex v3 :",-1),Hn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# solana program dump -u
    "),s(` solana program dump -u m 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin serum_dex_v3.so -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),Vn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana program dump -u m 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin serum_dex_v3.so -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),zn=n("p",null,"Le chargement sur votre r\xE9seau local se fait alors en passant le fichier du programme et l'adresse de destination (sur le cluster local) lors du d\xE9marrage du validateur :",-1),Wn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-test-validator --bpf-program 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin serum_dex_v3.so --reset -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Gn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# solana-test-validator --bpf-program
    --reset"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),Bn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana program dump -u m 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin serum_dex_v3.so +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Zn=n("p",null,"Le chargement sur votre r\xE9seau local se fait alors en passant le fichier du programme et l'adresse de destination (sur le cluster local) lors du d\xE9marrage du validateur :",-1),Fn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-test-validator --bpf-program 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin serum_dex_v3.so --reset +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Qn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# solana-test-validator --bpf-program
    --reset"),s(` solana-test-validator --bpf-program 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin serum_dex_v3.so --reset -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1);function Nn(Xn,Dn){const p=l("RouterLink"),e=l("SolanaCodeGroupItem"),o=l("SolanaCodeGroup"),c=l("ExternalLinkIcon");return i(),r(k,null,[b,g,h,n("p",null,[_,t(p,{to:"/getting-started/installation.html#installer-cli"},{default:a(()=>[f]),_:1}),w]),y,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[v]),preview:a(()=>[C]),_:1}),t(e,{title:"Python"},{default:a(()=>[x]),preview:a(()=>[S]),_:1}),t(e,{title:"Rust"},{default:a(()=>[L]),preview:a(()=>[R]),_:1}),t(e,{title:"CLI"},{default:a(()=>[A]),preview:a(()=>[P]),_:1})]),_:1}),T,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[O]),preview:a(()=>[M]),_:1}),t(e,{title:"Python"},{default:a(()=>[E]),preview:a(()=>[I]),_:1}),t(e,{title:"Rust"},{default:a(()=>[j]),preview:a(()=>[q]),_:1}),t(e,{title:"CLI"},{default:a(()=>[K]),preview:a(()=>[U]),_:1})]),_:1}),V,z,n("p",null,[W,n("a",G,[N,t(c)]),X,D,H,n("a",B,[Z,t(c)]),F]),n("p",null,[Q,J,Y,$,nn,sn,an,n("a",tn,[en,t(c)]),on,n("a",cn,[ln,t(c)]),pn]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[un]),preview:a(()=>[rn]),_:1}),t(e,{title:"Python"},{default:a(()=>[kn]),preview:a(()=>[mn]),_:1}),t(e,{title:"Rust"},{default:a(()=>[dn]),preview:a(()=>[bn]),_:1})]),_:1}),gn,hn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[_n]),preview:a(()=>[fn]),_:1}),t(e,{title:"Python"},{default:a(()=>[wn]),preview:a(()=>[yn]),_:1}),t(e,{title:"Rust"},{default:a(()=>[vn]),preview:a(()=>[Cn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[xn]),preview:a(()=>[Sn]),_:1})]),_:1}),Ln,Rn,An,Pn,Tn,t(o,null,{default:a(()=>[t(e,{title:"CLI"},{default:a(()=>[On]),preview:a(()=>[Mn]),_:1})]),_:1}),En,t(o,null,{default:a(()=>[t(e,{title:"CLI"},{preview:a(()=>[In]),default:a(()=>[jn]),_:1})]),_:1}),qn,Kn,t(o,null,{default:a(()=>[t(e,{title:"CLI"},{default:a(()=>[Un]),preview:a(()=>[Vn]),_:1})]),_:1}),zn,t(o,null,{default:a(()=>[t(e,{title:"CLI"},{preview:a(()=>[Wn]),default:a(()=>[Gn]),_:1})]),_:1})],64)}var Bn=u(d,[["render",Nn]]);export{Bn as default}; +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1);function Jn(Yn,$n){const p=l("RouterLink"),e=l("SolanaCodeGroupItem"),o=l("SolanaCodeGroup"),c=l("ExternalLinkIcon");return i(),r(k,null,[d,g,h,n("p",null,[_,t(p,{to:"/getting-started/installation.html#installer-cli"},{default:a(()=>[f]),_:1}),w]),y,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[v]),preview:a(()=>[C]),_:1}),t(e,{title:"Python"},{default:a(()=>[x]),preview:a(()=>[S]),_:1}),t(e,{title:"C++"},{default:a(()=>[L]),preview:a(()=>[A]),_:1}),t(e,{title:"Rust"},{default:a(()=>[R]),preview:a(()=>[P]),_:1}),t(e,{title:"CLI"},{default:a(()=>[T]),preview:a(()=>[q]),_:1})]),_:1}),I,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[O]),preview:a(()=>[M]),_:1}),t(e,{title:"Python"},{default:a(()=>[K]),preview:a(()=>[E]),_:1}),t(e,{title:"C++"},{default:a(()=>[j]),preview:a(()=>[U]),_:1}),t(e,{title:"Rust"},{default:a(()=>[V]),preview:a(()=>[z]),_:1}),t(e,{title:"CLI"},{default:a(()=>[W]),preview:a(()=>[G]),_:1})]),_:1}),N,X,n("p",null,[D,n("a",H,[B,t(c)]),Z,F,Q,n("a",J,[Y,t(c)]),$]),n("p",null,[nn,sn,an,tn,en,on,cn,n("a",ln,[pn,t(c)]),un,n("a",rn,[kn,t(c)]),mn]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[bn]),preview:a(()=>[dn]),_:1}),t(e,{title:"Python"},{default:a(()=>[gn]),preview:a(()=>[hn]),_:1}),t(e,{title:"C++"},{default:a(()=>[_n]),preview:a(()=>[fn]),_:1}),t(e,{title:"Rust"},{default:a(()=>[wn]),preview:a(()=>[yn]),_:1})]),_:1}),vn,Cn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[xn]),preview:a(()=>[Sn]),_:1}),t(e,{title:"Python"},{default:a(()=>[Ln]),preview:a(()=>[An]),_:1}),t(e,{title:"C++"},{default:a(()=>[Rn]),preview:a(()=>[Pn]),_:1}),t(e,{title:"Rust"},{default:a(()=>[Tn]),preview:a(()=>[qn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[In]),preview:a(()=>[On]),_:1})]),_:1}),Mn,Kn,En,jn,Un,t(o,null,{default:a(()=>[t(e,{title:"CLI"},{default:a(()=>[Vn]),preview:a(()=>[zn]),_:1})]),_:1}),Wn,t(o,null,{default:a(()=>[t(e,{title:"CLI"},{preview:a(()=>[Gn]),default:a(()=>[Nn]),_:1})]),_:1}),Xn,Dn,t(o,null,{default:a(()=>[t(e,{title:"CLI"},{default:a(()=>[Hn]),preview:a(()=>[Bn]),_:1})]),_:1}),Zn,t(o,null,{default:a(()=>[t(e,{title:"CLI"},{preview:a(()=>[Fn]),default:a(()=>[Qn]),_:1})]),_:1})],64)}var ss=u(b,[["render",Jn]]);export{ss as default}; diff --git a/docs/.vuepress/dist/assets/local-development.html.60ae4d26.js b/docs/.vuepress/dist/assets/local-development.html.744d3a55.js similarity index 68% rename from docs/.vuepress/dist/assets/local-development.html.60ae4d26.js rename to docs/.vuepress/dist/assets/local-development.html.744d3a55.js index 0a1b63917..64785d582 100644 --- a/docs/.vuepress/dist/assets/local-development.html.60ae4d26.js +++ b/docs/.vuepress/dist/assets/local-development.html.744d3a55.js @@ -1,4 +1,4 @@ -import{_ as u,r as l,o as i,c as r,a as n,b as t,w as a,F as k,d as s,e as d}from"./app.cfdf84e7.js";const m={},b=n("h1",{id:"desarrollo-en-un-entorno-local",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#desarrollo-en-un-entorno-local","aria-hidden":"true"},"#"),s(" Desarrollo en un entorno local")],-1),g=n("h2",{id:"iniciando-un-validador",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#iniciando-un-validador","aria-hidden":"true"},"#"),s(" Iniciando un validador")],-1),h=n("p",null,"Probar el c\xF3digo de tu programa localmente puede ser mucho m\xE1s confiable que probarlo en devnet, y puede ayudarte con las pruebas previas a devnet.",-1),_=s("Puedes configurar un validador de prueba local instalando "),f=s("solana tool suite"),w=s(" y ejecutando"),y=d(`
    solana-test-validator
    +import{_ as u,r as l,o as i,c as r,a as n,b as t,w as a,F as k,d as s,e as b}from"./app.2fbb9e96.js";const d={},m=n("h1",{id:"desarrollo-en-un-entorno-local",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#desarrollo-en-un-entorno-local","aria-hidden":"true"},"#"),s(" Desarrollo en un entorno local")],-1),g=n("h2",{id:"iniciando-un-validador",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#iniciando-un-validador","aria-hidden":"true"},"#"),s(" Iniciando un validador")],-1),h=n("p",null,"Probar el c\xF3digo de tu programa localmente puede ser mucho m\xE1s confiable que probarlo en devnet, y puede ayudarte con las pruebas previas a devnet.",-1),_=s("Puedes configurar un validador de prueba local instalando "),y=s("solana tool suite"),f=s(" y ejecutando"),w=b(`
    solana-test-validator
     

    Beneficios de usar local-test-validator incluyen:

    • No tener limites en el n\xFAmero de llamadas RPC
    • No tener l\xEDmites de airdrop
    • Despliegue directo de un programa on-chain (--bpf-program ...)
    • Conar cuentas de un cluster p\xFAblico, incluyendo programas (--clone ...)
    • La posibilidad de configurar el historial de retenci\xF3n de transacciones (--limit-ledger-size ...)
    • Poder configurar los slots por epoch (--slots-per-epoch ...)
    • Saltar a un slot espec\xEDfico (--warp-slot ...)

    Conect\xE1ndote con los diferentes entornos

    Cuando desarrollas en Solana, debes conectarte a un API de RPC espec\xEDfico. Solana cuenta con 3 entornos distintos para desarrollo:

    • mainnet-beta https://api.mainnet-beta.solana.com
    • devnet https://api.devnet.solana.com
    • testnet https://api.testnet.solana.com
    `,6),v=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" clusterApiUrl"),n("span",{class:"token punctuation"},","),s(" Connection "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -9,40 +9,58 @@ import{_ as u,r as l,o as i,c as r,a as n,b as t,w as a,F as k,d as s,e as d}fro client `),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.mainnet-beta.solana.com"'),n("span",{class:"token punctuation"},")"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),S=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("client "),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.mainnet-beta.solana.com"'),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),R=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),A=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + Connection `),n("span",{class:"token function"},"connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.mainnet-beta.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token keyword"},"return"),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),R=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[s("Connection "),n("span",{class:"token function"},"connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.mainnet-beta.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),L=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("commitment_config"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"let"),s(" rpc_url "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"String"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.mainnet-beta.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"let"),s(" client "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new_with_commitment"),n("span",{class:"token punctuation"},"("),s("rpc_url"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"confirmed"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),A=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" rpc_url "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"String"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.mainnet-beta.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),P=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" rpc_url "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"String"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.mainnet-beta.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"let"),s(" client "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new_with_commitment"),n("span",{class:"token punctuation"},"("),s("rpc_url"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"confirmed"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),L=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana config "),n("span",{class:"token builtin class-name"},"set"),s(` --url https://api.mainnet-beta.solana.com -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),P=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana config "),n("span",{class:"token builtin class-name"},"set"),s(` --url https://api.mainnet-beta.solana.com -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),T=n("p",null,"Finalmente, tambi\xE9n te puedes conectar con un cluster privado, sea local o remoto con lo siguiente:",-1),O=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),T=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana config "),n("span",{class:"token builtin class-name"},"set"),s(` --url https://api.mainnet-beta.solana.com +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),I=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana config "),n("span",{class:"token builtin class-name"},"set"),s(` --url https://api.mainnet-beta.solana.com +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),O=n("p",null,"Finalmente, tambi\xE9n te puedes conectar con un cluster privado, sea local o remoto con lo siguiente:",-1),E=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token comment"},"// This will connect you to your local validator"),s(` `),n("span",{class:"token keyword"},"const"),s(" connection "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token string"},'"confirmed"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),E=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" connection "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token string"},'"confirmed"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),j=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("api "),n("span",{class:"token keyword"},"import"),s(` Client +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),j=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" connection "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token string"},'"confirmed"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),K=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("api "),n("span",{class:"token keyword"},"import"),s(` Client client `),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},")"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),M=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("client "),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),I=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),U=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + Connection `),n("span",{class:"token function"},"connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token keyword"},"return"),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),V=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[s("Connection "),n("span",{class:"token function"},"connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),q=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("commitment_config"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"let"),s(" rpc_url "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"String"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"let"),s(" client "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new_with_commitment"),n("span",{class:"token punctuation"},"("),s("rpc_url"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"confirmed"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),K=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" rpc_url "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"String"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),W=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" rpc_url "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"String"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"let"),s(" client "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new_with_commitment"),n("span",{class:"token punctuation"},"("),s("rpc_url"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"confirmed"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),U=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana config "),n("span",{class:"token builtin class-name"},"set"),s(` --url http://privaterpc.com -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),V=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana config "),n("span",{class:"token builtin class-name"},"set"),s(` --url http://privaterpc.com -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),W=n("h2",{id:"suscripcion-a-eventos",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#suscripcion-a-eventos","aria-hidden":"true"},"#"),s(" Suscripci\xF3n a eventos")],-1),N=n("p",null,"Websockets proporciona una interfaz pub/sub donde puedes escuchar ciertos eventos. En lugar de hacer ping a un endpoint HTTP de forma recurrente para obtener actualizaciones frecuentes, puede recibir esas actualizaciones solo cuando sucedan.",-1),q=s("Solana web3 "),G={href:"https://solana-labs.github.io/solana-web3.js/classes/Connection.html",target:"_blank",rel:"noopener noreferrer"},X=n("code",null,"Connection",-1),z=s(" por debajo genera un endpoint de websocket y registra a un cliente websocket cuando creas una nueva instancia de conexi\xF3n ("),B=n("code",null,"Connection",-1),H=s(") (puedes ver el c\xF3digo fuente "),D={href:"https://github.com/solana-labs/solana-web3.js/blob/45923ca00e4cc1ed079d8e55ecbee83e5b4dc174/src/connection.ts#L2100",target:"_blank",rel:"noopener noreferrer"},Z=s("aqu\xED"),F=s(")."),Q=s("La clase "),J=n("code",null,"Connection",-1),Y=s(" expone methods pub/sub - todos empiezan con "),$=n("code",null,"on",-1),nn=s(", como emisores de eventos. Cuando llamas a estos m\xE9todos de escucha, se registra una nueva suscripci\xF3n al cliente de websocket de esa instancia de conexi\xF3n ("),sn=n("code",null,"Connection",-1),an=s("). El ejemplo de m\xE9todo pub/sub que utilizamos abajo es "),tn={href:"https://solana-labs.github.io/solana-web3.js/classes/Connection.html#onAccountChange",target:"_blank",rel:"noopener noreferrer"},en=n("code",null,"onAccountChange",-1),on=s(". El callback brindar\xE1 informaci\xF3n actualizada a trav\xE9s de los argumentos (ver "),cn={href:"https://solana-labs.github.io/solana-web3.js/modules.html#AccountChangeCallback",target:"_blank",rel:"noopener noreferrer"},ln=n("code",null,"AccountChangeCallback",-1),pn=s(" como un ejemplo)."),un=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" clusterApiUrl"),n("span",{class:"token punctuation"},","),s(" Connection"),n("span",{class:"token punctuation"},","),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),N=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana config "),n("span",{class:"token builtin class-name"},"set"),s(` --url http://privaterpc.com +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),G=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana config "),n("span",{class:"token builtin class-name"},"set"),s(` --url http://privaterpc.com +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),X=n("h2",{id:"suscripcion-a-eventos",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#suscripcion-a-eventos","aria-hidden":"true"},"#"),s(" Suscripci\xF3n a eventos")],-1),z=n("p",null,"Websockets proporciona una interfaz pub/sub donde puedes escuchar ciertos eventos. En lugar de hacer ping a un endpoint HTTP de forma recurrente para obtener actualizaciones frecuentes, puede recibir esas actualizaciones solo cuando sucedan.",-1),B=s("Solana web3 "),H={href:"https://solana-labs.github.io/solana-web3.js/classes/Connection.html",target:"_blank",rel:"noopener noreferrer"},D=n("code",null,"Connection",-1),Z=s(" por debajo genera un endpoint de websocket y registra a un cliente websocket cuando creas una nueva instancia de conexi\xF3n ("),F=n("code",null,"Connection",-1),Q=s(") (puedes ver el c\xF3digo fuente "),J={href:"https://github.com/solana-labs/solana-web3.js/blob/45923ca00e4cc1ed079d8e55ecbee83e5b4dc174/src/connection.ts#L2100",target:"_blank",rel:"noopener noreferrer"},Y=s("aqu\xED"),$=s(")."),nn=s("La clase "),sn=n("code",null,"Connection",-1),an=s(" expone methods pub/sub - todos empiezan con "),tn=n("code",null,"on",-1),en=s(", como emisores de eventos. Cuando llamas a estos m\xE9todos de escucha, se registra una nueva suscripci\xF3n al cliente de websocket de esa instancia de conexi\xF3n ("),on=n("code",null,"Connection",-1),cn=s("). El ejemplo de m\xE9todo pub/sub que utilizamos abajo es "),ln={href:"https://solana-labs.github.io/solana-web3.js/classes/Connection.html#onAccountChange",target:"_blank",rel:"noopener noreferrer"},pn=n("code",null,"onAccountChange",-1),un=s(". El callback brindar\xE1 informaci\xF3n actualizada a trav\xE9s de los argumentos (ver "),rn={href:"https://solana-labs.github.io/solana-web3.js/modules.html#AccountChangeCallback",target:"_blank",rel:"noopener noreferrer"},kn=n("code",null,"AccountChangeCallback",-1),bn=s(" como un ejemplo)."),dn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" clusterApiUrl"),n("span",{class:"token punctuation"},","),s(" Connection"),n("span",{class:"token punctuation"},","),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token comment"},"// Establish new connect to devnet - websocket client connected to devnet will also be registered here"),s(` @@ -59,7 +77,7 @@ client `),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"t `),n("span",{class:"token string"},'"confirmed"'),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br")])],-1),rn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token comment"},"// Establish new connect to devnet - websocket client connected to devnet will also be registered here"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br")])],-1),mn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token comment"},"// Establish new connect to devnet - websocket client connected to devnet will also be registered here"),s(` `),n("span",{class:"token keyword"},"const"),s(" connection "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"clusterApiUrl"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"devnet"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token string"},'"confirmed"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token comment"},"// Create a test wallet to listen to"),s(` @@ -72,8 +90,8 @@ connection`),n("span",{class:"token punctuation"},"."),n("span",{class:"token fu `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Updated account info: "'),n("span",{class:"token punctuation"},","),s(" updatedAccountInfo"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token string"},'"confirmed"'),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br")])],-1),kn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(` asyncio -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br")])],-1),gn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(` asyncio +`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair `),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("websocket_api "),n("span",{class:"token keyword"},"import"),s(` connect `),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token keyword"},"def"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},":"),s(` @@ -81,7 +99,7 @@ connection`),n("span",{class:"token punctuation"},"."),n("span",{class:"token fu `),n("span",{class:"token comment"},"# Create a Test Wallet"),s(` wallet `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"# Subscribe to the Test wallet to listen for events"),s(` - `),n("span",{class:"token keyword"},"await"),s(" websocket"),n("span",{class:"token punctuation"},"."),s("account_subscribe"),n("span",{class:"token punctuation"},"("),s("wallet"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),s(` + `),n("span",{class:"token keyword"},"await"),s(" websocket"),n("span",{class:"token punctuation"},"."),s("account_subscribe"),n("span",{class:"token punctuation"},"("),s("wallet"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"# Capture response from account subscription "),s(` first_resp `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" websocket"),n("span",{class:"token punctuation"},"."),s("recv"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Subscription successful with id {}, listening for events \\n"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("first_resp"),n("span",{class:"token punctuation"},"."),s("result"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` @@ -89,17 +107,66 @@ connection`),n("span",{class:"token punctuation"},"."),n("span",{class:"token fu `),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("updated_account_info"),n("span",{class:"token punctuation"},")"),s(` asyncio`),n("span",{class:"token punctuation"},"."),s("run"),n("span",{class:"token punctuation"},"("),s("main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br")])],-1),dn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token keyword"},"with"),s(" connect"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"wss://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token keyword"},"as"),s(" websocket"),n("span",{class:"token punctuation"},":"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br")])],-1),hn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token keyword"},"with"),s(" connect"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"wss://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token keyword"},"as"),s(" websocket"),n("span",{class:"token punctuation"},":"),s(` `),n("span",{class:"token comment"},"# Create a Test Wallet"),s(` wallet `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"# Subscribe to the Test wallet to listen for events"),s(` - `),n("span",{class:"token keyword"},"await"),s(" websocket"),n("span",{class:"token punctuation"},"."),s("account_subscribe"),n("span",{class:"token punctuation"},"("),s("wallet"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),s(` + `),n("span",{class:"token keyword"},"await"),s(" websocket"),n("span",{class:"token punctuation"},"."),s("account_subscribe"),n("span",{class:"token punctuation"},"("),s("wallet"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"# Capture response from account subscription "),s(` first_resp `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" websocket"),n("span",{class:"token punctuation"},"."),s("recv"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Subscription successful with id {}, listening for events \\n"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("first_resp"),n("span",{class:"token punctuation"},"."),s("result"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` updated_account_info `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" websocket"),n("span",{class:"token punctuation"},"."),s("recv"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("updated_account_info"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),mn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("pubsub_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"PubsubClient"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),_n=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token comment"},"// clang++ on_account_change.cpp -o on_account_change -std=c++17 -lssl -lcrypto -lsodium"),s(` + +`),n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + Connection `),n("span",{class:"token function"},"connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"int"),s(" subscriptionId "),n("span",{class:"token operator"},"="),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"on_account_change"),n("span",{class:"token punctuation"},"("),s("key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token punctuation"},"["),n("span",{class:"token operator"},"&"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},"("),s("Result"),n("span",{class:"token operator"},"<"),s("Account"),n("span",{class:"token operator"},">"),s(" result"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + Account account `),n("span",{class:"token operator"},"="),s(" result"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"owner = "'),s(),n("span",{class:"token operator"},"<<"),s(" account"),n("span",{class:"token punctuation"},"."),s("owner"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"lamports = "'),s(),n("span",{class:"token operator"},"<<"),s(" account"),n("span",{class:"token punctuation"},"."),s("lamports "),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"data = "'),s(),n("span",{class:"token operator"},"<<"),s(" account"),n("span",{class:"token punctuation"},"."),s("data "),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"executable = "'),s(),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token punctuation"},"("),s("account"),n("span",{class:"token punctuation"},"."),s("executable "),n("span",{class:"token operator"},"?"),s(),n("span",{class:"token string"},'"true"'),s(),n("span",{class:"token operator"},":"),s(),n("span",{class:"token string"},'"false"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token function"},"sleep"),n("span",{class:"token punctuation"},"("),n("span",{class:"token number"},"1"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + std`),n("span",{class:"token double-colon punctuation"},"::"),s("string tx_hash "),n("span",{class:"token operator"},"="),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"request_airdrop"),n("span",{class:"token punctuation"},"("),s("key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"tx hash = "'),s(),n("span",{class:"token operator"},"<<"),s(" tx_hash "),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"for"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"int"),s(" i "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(" i "),n("span",{class:"token operator"},"<"),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},";"),s(" i"),n("span",{class:"token operator"},"++"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + connection`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"poll"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token function"},"sleep"),n("span",{class:"token punctuation"},"("),n("span",{class:"token number"},"1"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token punctuation"},"}"),s(` + + connection`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"remove_account_listener"),n("span",{class:"token punctuation"},"("),s("subscriptionId"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"return"),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br")])],-1),yn=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(" subscriptionId "),n("span",{class:"token operator"},"="),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"on_account_change"),n("span",{class:"token punctuation"},"("),s("key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token punctuation"},"["),n("span",{class:"token operator"},"&"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},"("),s("Result"),n("span",{class:"token operator"},"<"),s("Account"),n("span",{class:"token operator"},">"),s(" result"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + Account account `),n("span",{class:"token operator"},"="),s(" result"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"owner = "'),s(),n("span",{class:"token operator"},"<<"),s(" account"),n("span",{class:"token punctuation"},"."),s("owner"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"lamports = "'),s(),n("span",{class:"token operator"},"<<"),s(" account"),n("span",{class:"token punctuation"},"."),s("lamports "),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"data = "'),s(),n("span",{class:"token operator"},"<<"),s(" account"),n("span",{class:"token punctuation"},"."),s("data "),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"executable = "'),s(),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token punctuation"},"("),s("account"),n("span",{class:"token punctuation"},"."),s("executable "),n("span",{class:"token operator"},"?"),s(),n("span",{class:"token string"},'"true"'),s(),n("span",{class:"token operator"},":"),s(),n("span",{class:"token string"},'"false"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"for"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"int"),s(" i "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(" i "),n("span",{class:"token operator"},"<"),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},";"),s(" i"),n("span",{class:"token operator"},"++"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + connection`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"poll"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token function"},"sleep"),n("span",{class:"token punctuation"},"("),n("span",{class:"token number"},"1"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` + +connection`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"remove_account_listener"),n("span",{class:"token punctuation"},"("),s("subscriptionId"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br")])],-1),fn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("pubsub_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"PubsubClient"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_config"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcAccountInfoConfig"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("commitment_config"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("signature"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"Signer"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` @@ -136,7 +203,7 @@ asyncio`),n("span",{class:"token punctuation"},"."),s("run"),n("span",{class:"to `),n("span",{class:"token macro property"},"println!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Errooooor"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br")])],-1),bn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" ws_url "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"String"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"wss://api.devnet.solana.com/"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br")])],-1),wn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" ws_url "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"String"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"wss://api.devnet.solana.com/"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"let"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"mut"),s(" client"),n("span",{class:"token punctuation"},","),s(" receiver"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"PubsubClient"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"account_subscribe"),n("span",{class:"token punctuation"},"("),s(` `),n("span",{class:"token operator"},"&"),s("ws_url"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token operator"},"&"),s("pubkey"),n("span",{class:"token punctuation"},","),s(` @@ -148,7 +215,7 @@ asyncio`),n("span",{class:"token punctuation"},"."),s("run"),n("span",{class:"to `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"let"),s(" message "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"match"),s(" receiver"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"recv"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token macro property"},"println!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"{:?}"'),n("span",{class:"token punctuation"},","),s(" message"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br")])],-1),gn=n("h2",{id:"obteniendo-sol-para-pruebas",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#obteniendo-sol-para-pruebas","aria-hidden":"true"},"#"),s(" Obteniendo SOL para pruebas")],-1),hn=n("p",null,"Cuando trabajas localmente, necesitas SOL para enviar transacciones. En entornos que no son de red principal (mainnet), puedes recibir SOL haciendo airdrop a tu direcci\xF3n",-1),_n=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection"),n("span",{class:"token punctuation"},","),s(" Keypair"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token constant"},"LAMPORTS_PER_SOL"),s(),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br")])],-1),vn=n("h2",{id:"obteniendo-sol-para-pruebas",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#obteniendo-sol-para-pruebas","aria-hidden":"true"},"#"),s(" Obteniendo SOL para pruebas")],-1),Cn=n("p",null,"Cuando trabajas localmente, necesitas SOL para enviar transacciones. En entornos que no son de red principal (mainnet), puedes recibir SOL haciendo airdrop a tu direcci\xF3n",-1),xn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection"),n("span",{class:"token punctuation"},","),s(" Keypair"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token constant"},"LAMPORTS_PER_SOL"),s(),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` @@ -166,13 +233,13 @@ asyncio`),n("span",{class:"token punctuation"},"."),s("run"),n("span",{class:"to signature `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br")])],-1),fn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" airdropSignature "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"requestAirdrop"),n("span",{class:"token punctuation"},"("),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br")])],-1),Sn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" airdropSignature "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"requestAirdrop"),n("span",{class:"token punctuation"},"("),s(` keypair`),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token constant"},"LAMPORTS_PER_SOL"),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"await"),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"confirmTransaction"),n("span",{class:"token punctuation"},"("),s("airdropSignature"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),wn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),An=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair `),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("api "),n("span",{class:"token keyword"},"import"),s(` Client wallet `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` @@ -180,14 +247,32 @@ wallet `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:" client `),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"#Input Airdrop amount in LAMPORTS"),s(` -client`),n("span",{class:"token punctuation"},"."),s("request_airdrop"),n("span",{class:"token punctuation"},"("),s("wallet"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"1000000000"),n("span",{class:"token punctuation"},")"),s(` +client`),n("span",{class:"token punctuation"},"."),s("request_airdrop"),n("span",{class:"token punctuation"},"("),s("wallet"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"1000000000"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"#Airdrops 1 SOL"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),yn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token comment"},"#Input Airdrop amount in LAMPORTS"),s(` -client`),n("span",{class:"token punctuation"},"."),s("request_airdrop"),n("span",{class:"token punctuation"},"("),s("wallet"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"1000000000"),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),Rn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token comment"},"#Input Airdrop amount in LAMPORTS"),s(` +client`),n("span",{class:"token punctuation"},"."),s("request_airdrop"),n("span",{class:"token punctuation"},"("),s("wallet"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"1000000000"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"#Airdrops 1 SOL"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),vn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),Ln=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token comment"},"// clang++ request_airdrop.cpp -o request_airdrop -std=c++17 -lssl -lcrypto -lsodium"),s(` + +`),n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + Connection `),n("span",{class:"token function"},"connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + std`),n("span",{class:"token double-colon punctuation"},"::"),s("string tx_hash "),n("span",{class:"token operator"},"="),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"request_airdrop"),n("span",{class:"token punctuation"},"("),s("key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"tx hash = "'),s(),n("span",{class:"token operator"},"<<"),s(" tx_hash "),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"return"),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br")])],-1),Pn=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[s("connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"request_airdrop"),n("span",{class:"token punctuation"},"("),s("key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Tn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("commitment_config"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("native_token"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token constant"},"LAMPORTS_PER_SOL"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("signature"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"Signer"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` @@ -209,7 +294,7 @@ client`),n("span",{class:"token punctuation"},"."),s("request_airdrop"),n("span" `),n("span",{class:"token class-name"},"Err"),n("span",{class:"token punctuation"},"("),s("_"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token macro property"},"println!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Error requesting airdrop"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br")])],-1),Cn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"match"),s(" client"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"request_airdrop"),n("span",{class:"token punctuation"},"("),n("span",{class:"token operator"},"&"),s("pubkey"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token constant"},"LAMPORTS_PER_SOL"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br")])],-1),In=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"match"),s(" client"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"request_airdrop"),n("span",{class:"token punctuation"},"("),n("span",{class:"token operator"},"&"),s("pubkey"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token constant"},"LAMPORTS_PER_SOL"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token class-name"},"Ok"),n("span",{class:"token punctuation"},"("),s("sig"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token keyword"},"loop"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"if"),s(),n("span",{class:"token keyword"},"let"),s(),n("span",{class:"token class-name"},"Ok"),n("span",{class:"token punctuation"},"("),s("confirmed"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"="),s(" client"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"confirm_transaction"),n("span",{class:"token punctuation"},"("),n("span",{class:"token operator"},"&"),s("sig"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"if"),s(" confirmed "),n("span",{class:"token punctuation"},"{"),s(` @@ -220,21 +305,21 @@ client`),n("span",{class:"token punctuation"},"."),s("request_airdrop"),n("span" `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token class-name"},"Err"),n("span",{class:"token punctuation"},"("),s("_"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token macro property"},"println!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Error requesting airdrop"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),xn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana airdrop "),n("span",{class:"token number"},"1"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),On=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana airdrop "),n("span",{class:"token number"},"1"),s(` `),n("span",{class:"token comment"},"# Return"),s(` `),n("span",{class:"token comment"},'# "1 SOL"'),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),Sn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana airdrop "),n("span",{class:"token number"},"1"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Rn=n("h2",{id:"usando-cuentas-de-mainnet-y-programas",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#usando-cuentas-de-mainnet-y-programas","aria-hidden":"true"},"#"),s(" Usando cuentas de mainnet y programas")],-1),An=n("p",null,"A menudo, las pruebas locales se basan en programas y cuentas disponibles solo en la red principal. La CLI de Solana permite tanto:",-1),Ln=n("ul",null,[n("li",null,"Descargar programas y cuentas"),n("li",null,"Cargar programas y cuentas a un validador local")],-1),Pn=n("h3",{id:"como-cargar-cuentas-de-mainnet",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#como-cargar-cuentas-de-mainnet","aria-hidden":"true"},"#"),s(" C\xF3mo cargar cuentas de mainnet")],-1),Tn=n("p",null,"Es posible descargar la cuenta mint del token SRM:",-1),On=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# solana account -u --output --output-file
    "),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),En=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana airdrop "),n("span",{class:"token number"},"1"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),jn=n("h2",{id:"usando-cuentas-de-mainnet-y-programas",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#usando-cuentas-de-mainnet-y-programas","aria-hidden":"true"},"#"),s(" Usando cuentas de mainnet y programas")],-1),Kn=n("p",null,"A menudo, las pruebas locales se basan en programas y cuentas disponibles solo en la red principal. La CLI de Solana permite tanto:",-1),Mn=n("ul",null,[n("li",null,"Descargar programas y cuentas"),n("li",null,"Cargar programas y cuentas a un validador local")],-1),Un=n("h3",{id:"como-cargar-cuentas-de-mainnet",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#como-cargar-cuentas-de-mainnet","aria-hidden":"true"},"#"),s(" C\xF3mo cargar cuentas de mainnet")],-1),Vn=n("p",null,"Es posible descargar la cuenta mint del token SRM:",-1),qn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# solana account -u --output --output-file
    "),s(` solana account -u m --output json-compact --output-file SRM_token.json SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),En=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana account -u m --output json-compact --output-file SRM_token.json SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),jn=n("p",null,"Luego, para cargarlo a la red local se debe pasar el archivo de la cuenta y la direcci\xF3n de destino (en el cl\xFAster local) al iniciar el validador:",-1),Mn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-test-validator --account SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt SRM_token.json --reset -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),In=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# solana-test-validator --account
    --reset"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),Wn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana account -u m --output json-compact --output-file SRM_token.json SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Nn=n("p",null,"Luego, para cargarlo a la red local se debe pasar el archivo de la cuenta y la direcci\xF3n de destino (en el cl\xFAster local) al iniciar el validador:",-1),Gn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-test-validator --account SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt SRM_token.json --reset +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Xn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# solana-test-validator --account
    --reset"),s(` solana-test-validator --account SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt SRM_token.json --reset -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),Kn=n("h3",{id:"como-cargar-programas-de-mainnet",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#como-cargar-programas-de-mainnet","aria-hidden":"true"},"#"),s(" C\xF3mo cargar programas de mainnet")],-1),Un=n("p",null,"De igual forma, es posible descargar el programa Serum Dex v3:",-1),Vn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# solana program dump -u
    "),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),zn=n("h3",{id:"como-cargar-programas-de-mainnet",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#como-cargar-programas-de-mainnet","aria-hidden":"true"},"#"),s(" C\xF3mo cargar programas de mainnet")],-1),Bn=n("p",null,"De igual forma, es posible descargar el programa Serum Dex v3:",-1),Hn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# solana program dump -u
    "),s(` solana program dump -u m 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin serum_dex_v3.so -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),Wn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana program dump -u m 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin serum_dex_v3.so -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Nn=n("p",null,"Luego, para cargarlo a la red local se debe pasar el archivo de la cuenta y la direcci\xF3n de destino (en el cl\xFAster local) al iniciar el validador:",-1),qn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-test-validator --bpf-program 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin serum_dex_v3.so --reset -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Gn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# solana-test-validator --bpf-program
    --reset"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),Dn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana program dump -u m 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin serum_dex_v3.so +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Zn=n("p",null,"Luego, para cargarlo a la red local se debe pasar el archivo de la cuenta y la direcci\xF3n de destino (en el cl\xFAster local) al iniciar el validador:",-1),Fn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-test-validator --bpf-program 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin serum_dex_v3.so --reset +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Qn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# solana-test-validator --bpf-program
    --reset"),s(` solana-test-validator --bpf-program 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin serum_dex_v3.so --reset -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1);function Xn(zn,Bn){const p=l("RouterLink"),e=l("SolanaCodeGroupItem"),o=l("SolanaCodeGroup"),c=l("ExternalLinkIcon");return i(),r(k,null,[b,g,h,n("p",null,[_,t(p,{to:"/getting-started/installation.html#install-cli"},{default:a(()=>[f]),_:1}),w]),y,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[v]),preview:a(()=>[C]),_:1}),t(e,{title:"Python"},{default:a(()=>[x]),preview:a(()=>[S]),_:1}),t(e,{title:"Rust"},{default:a(()=>[R]),preview:a(()=>[A]),_:1}),t(e,{title:"CLI"},{default:a(()=>[L]),preview:a(()=>[P]),_:1})]),_:1}),T,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[O]),preview:a(()=>[E]),_:1}),t(e,{title:"Python"},{default:a(()=>[j]),preview:a(()=>[M]),_:1}),t(e,{title:"Rust"},{default:a(()=>[I]),preview:a(()=>[K]),_:1}),t(e,{title:"CLI"},{default:a(()=>[U]),preview:a(()=>[V]),_:1})]),_:1}),W,N,n("p",null,[q,n("a",G,[X,t(c)]),z,B,H,n("a",D,[Z,t(c)]),F]),n("p",null,[Q,J,Y,$,nn,sn,an,n("a",tn,[en,t(c)]),on,n("a",cn,[ln,t(c)]),pn]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[un]),preview:a(()=>[rn]),_:1}),t(e,{title:"Python"},{default:a(()=>[kn]),preview:a(()=>[dn]),_:1}),t(e,{title:"Rust"},{default:a(()=>[mn]),preview:a(()=>[bn]),_:1})]),_:1}),gn,hn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[_n]),preview:a(()=>[fn]),_:1}),t(e,{title:"Python"},{default:a(()=>[wn]),preview:a(()=>[yn]),_:1}),t(e,{title:"Rust"},{default:a(()=>[vn]),preview:a(()=>[Cn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[xn]),preview:a(()=>[Sn]),_:1})]),_:1}),Rn,An,Ln,Pn,Tn,t(o,null,{default:a(()=>[t(e,{title:"CLI"},{default:a(()=>[On]),preview:a(()=>[En]),_:1})]),_:1}),jn,t(o,null,{default:a(()=>[t(e,{title:"CLI"},{preview:a(()=>[Mn]),default:a(()=>[In]),_:1})]),_:1}),Kn,Un,t(o,null,{default:a(()=>[t(e,{title:"CLI"},{default:a(()=>[Vn]),preview:a(()=>[Wn]),_:1})]),_:1}),Nn,t(o,null,{default:a(()=>[t(e,{title:"CLI"},{preview:a(()=>[qn]),default:a(()=>[Gn]),_:1})]),_:1})],64)}var Dn=u(m,[["render",Xn]]);export{Dn as default}; +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1);function Jn(Yn,$n){const p=l("RouterLink"),e=l("SolanaCodeGroupItem"),o=l("SolanaCodeGroup"),c=l("ExternalLinkIcon");return i(),r(k,null,[m,g,h,n("p",null,[_,t(p,{to:"/getting-started/installation.html#install-cli"},{default:a(()=>[y]),_:1}),f]),w,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[v]),preview:a(()=>[C]),_:1}),t(e,{title:"Python"},{default:a(()=>[x]),preview:a(()=>[S]),_:1}),t(e,{title:"C++"},{default:a(()=>[A]),preview:a(()=>[R]),_:1}),t(e,{title:"Rust"},{default:a(()=>[L]),preview:a(()=>[P]),_:1}),t(e,{title:"CLI"},{default:a(()=>[T]),preview:a(()=>[I]),_:1})]),_:1}),O,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[E]),preview:a(()=>[j]),_:1}),t(e,{title:"Python"},{default:a(()=>[K]),preview:a(()=>[M]),_:1}),t(e,{title:"C++"},{default:a(()=>[U]),preview:a(()=>[V]),_:1}),t(e,{title:"Rust"},{default:a(()=>[q]),preview:a(()=>[W]),_:1}),t(e,{title:"CLI"},{default:a(()=>[N]),preview:a(()=>[G]),_:1})]),_:1}),X,z,n("p",null,[B,n("a",H,[D,t(c)]),Z,F,Q,n("a",J,[Y,t(c)]),$]),n("p",null,[nn,sn,an,tn,en,on,cn,n("a",ln,[pn,t(c)]),un,n("a",rn,[kn,t(c)]),bn]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[dn]),preview:a(()=>[mn]),_:1}),t(e,{title:"Python"},{default:a(()=>[gn]),preview:a(()=>[hn]),_:1}),t(e,{title:"C++"},{default:a(()=>[_n]),preview:a(()=>[yn]),_:1}),t(e,{title:"Rust"},{default:a(()=>[fn]),preview:a(()=>[wn]),_:1})]),_:1}),vn,Cn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[xn]),preview:a(()=>[Sn]),_:1}),t(e,{title:"Python"},{default:a(()=>[An]),preview:a(()=>[Rn]),_:1}),t(e,{title:"C++"},{default:a(()=>[Ln]),preview:a(()=>[Pn]),_:1}),t(e,{title:"Rust"},{default:a(()=>[Tn]),preview:a(()=>[In]),_:1}),t(e,{title:"CLI"},{default:a(()=>[On]),preview:a(()=>[En]),_:1})]),_:1}),jn,Kn,Mn,Un,Vn,t(o,null,{default:a(()=>[t(e,{title:"CLI"},{default:a(()=>[qn]),preview:a(()=>[Wn]),_:1})]),_:1}),Nn,t(o,null,{default:a(()=>[t(e,{title:"CLI"},{preview:a(()=>[Gn]),default:a(()=>[Xn]),_:1})]),_:1}),zn,Bn,t(o,null,{default:a(()=>[t(e,{title:"CLI"},{default:a(()=>[Hn]),preview:a(()=>[Dn]),_:1})]),_:1}),Zn,t(o,null,{default:a(()=>[t(e,{title:"CLI"},{preview:a(()=>[Fn]),default:a(()=>[Qn]),_:1})]),_:1})],64)}var ss=u(d,[["render",Jn]]);export{ss as default}; diff --git a/docs/.vuepress/dist/assets/local-development.html.9b37113f.js b/docs/.vuepress/dist/assets/local-development.html.77a5d6d7.js similarity index 68% rename from docs/.vuepress/dist/assets/local-development.html.9b37113f.js rename to docs/.vuepress/dist/assets/local-development.html.77a5d6d7.js index 0e1a5ed0a..9e2a5ebf7 100644 --- a/docs/.vuepress/dist/assets/local-development.html.9b37113f.js +++ b/docs/.vuepress/dist/assets/local-development.html.77a5d6d7.js @@ -1,4 +1,4 @@ -import{_ as u,r as l,o as i,c as r,a as n,b as t,w as a,F as k,d as s,e as m}from"./app.cfdf84e7.js";const b={},d=n("h1",{id:"local-development",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#local-development","aria-hidden":"true"},"#"),s(" Local Development")],-1),g=n("h2",{id:"starting-a-local-validator",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#starting-a-local-validator","aria-hidden":"true"},"#"),s(" Starting a Local Validator")],-1),h=n("p",null,"Testing your program code locally can be a lot more reliable than testing on devnet, and can help you test before trying it out on devnet.",-1),_=s("You can setup your local-test-validator by installing the "),w=s("solana tool suite"),y=s(" and running"),f=m(`
    solana-test-validator
    +import{_ as u,r as l,o as i,c as r,a as n,b as t,w as a,F as k,d as s,e as b}from"./app.2fbb9e96.js";const m={},d=n("h1",{id:"local-development",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#local-development","aria-hidden":"true"},"#"),s(" Local Development")],-1),g=n("h2",{id:"starting-a-local-validator",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#starting-a-local-validator","aria-hidden":"true"},"#"),s(" Starting a Local Validator")],-1),h=n("p",null,"Testing your program code locally can be a lot more reliable than testing on devnet, and can help you test before trying it out on devnet.",-1),_=s("You can setup your local-test-validator by installing the "),y=s("solana tool suite"),w=s(" and running"),f=b(`
    solana-test-validator
     

    Benefits of using local-test-validator include:

    • No RPC rate-limits
    • No airdrop limits
    • Direct on-chain program deployment (--bpf-program ...)
    • Clone accounts from a public cluster, including programs (--clone ...)
    • Configurable transaction history retention (--limit-ledger-size ...)
    • Configurable epoch length (--slots-per-epoch ...)
    • Jump to an arbitrary slot (--warp-slot ...)

    Connecting to Environments

    When you are working on Solana development, you will need to connect to a specific RPC API endpoint. Solana has 3 public development environments:

    • mainnet-beta https://api.mainnet-beta.solana.com
    • devnet https://api.devnet.solana.com
    • testnet https://api.testnet.solana.com
    `,6),v=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" clusterApiUrl"),n("span",{class:"token punctuation"},","),s(" Connection "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -9,40 +9,58 @@ import{_ as u,r as l,o as i,c as r,a as n,b as t,w as a,F as k,d as s,e as m}fro client `),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.mainnet-beta.solana.com"'),n("span",{class:"token punctuation"},")"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),S=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("client "),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.mainnet-beta.solana.com"'),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),A=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),A=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + Connection `),n("span",{class:"token function"},"connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.mainnet-beta.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token keyword"},"return"),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),R=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[s("Connection "),n("span",{class:"token function"},"connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.mainnet-beta.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),L=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("commitment_config"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"let"),s(" rpc_url "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"String"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.mainnet-beta.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"let"),s(" client "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new_with_commitment"),n("span",{class:"token punctuation"},"("),s("rpc_url"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"confirmed"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),R=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" rpc_url "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"String"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.mainnet-beta.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),T=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" rpc_url "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"String"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.mainnet-beta.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"let"),s(" client "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new_with_commitment"),n("span",{class:"token punctuation"},"("),s("rpc_url"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"confirmed"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),L=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana config "),n("span",{class:"token builtin class-name"},"set"),s(` --url https://api.mainnet-beta.solana.com -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),T=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana config "),n("span",{class:"token builtin class-name"},"set"),s(` --url https://api.mainnet-beta.solana.com -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),P=n("p",null,"Finally, you can also connect to a private cluster, either one local or running remotely with the following:",-1),O=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),P=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana config "),n("span",{class:"token builtin class-name"},"set"),s(` --url https://api.mainnet-beta.solana.com +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),I=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana config "),n("span",{class:"token builtin class-name"},"set"),s(` --url https://api.mainnet-beta.solana.com +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),O=n("p",null,"Finally, you can also connect to a private cluster, either one local or running remotely with the following:",-1),M=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token comment"},"// This will connect you to your local validator"),s(` `),n("span",{class:"token keyword"},"const"),s(" connection "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token string"},'"confirmed"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),M=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" connection "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token string"},'"confirmed"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),I=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("api "),n("span",{class:"token keyword"},"import"),s(` Client +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),K=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" connection "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token string"},'"confirmed"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),E=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("api "),n("span",{class:"token keyword"},"import"),s(` Client client `),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),E=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("client "),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),K=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),U=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("client "),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),j=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + Connection `),n("span",{class:"token function"},"connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token keyword"},"return"),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),V=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[s("Connection "),n("span",{class:"token function"},"connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),W=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("commitment_config"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"let"),s(" rpc_url "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"String"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"let"),s(" client "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new_with_commitment"),n("span",{class:"token punctuation"},"("),s("rpc_url"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"confirmed"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),U=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" rpc_url "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"String"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),q=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" rpc_url "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"String"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"let"),s(" client "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new_with_commitment"),n("span",{class:"token punctuation"},"("),s("rpc_url"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"confirmed"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),j=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana config "),n("span",{class:"token builtin class-name"},"set"),s(` --url http://privaterpc.com -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),V=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana config "),n("span",{class:"token builtin class-name"},"set"),s(` --url http://privaterpc.com -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),W=n("h2",{id:"subscribing-to-events",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#subscribing-to-events","aria-hidden":"true"},"#"),s(" Subscribing to Events")],-1),N=n("p",null,"Websockets provide a pub/sub interface where you can listen for certain events. Instead of pinging a typical HTTP endpoint at an interval to get frequent updates, you can instead receive those updates only when they happen.",-1),G=s("Solana's web3 "),H={href:"https://solana-labs.github.io/solana-web3.js/classes/Connection.html",target:"_blank",rel:"noopener noreferrer"},X=n("code",null,"Connection",-1),B=s(" under the hood generates a websocket endpoint and registers a websocket client when you create a new "),q=n("code",null,"Connection",-1),D=s(" instance (see source code "),Z={href:"https://github.com/solana-labs/solana-web3.js/blob/45923ca00e4cc1ed079d8e55ecbee83e5b4dc174/src/connection.ts#L2100",target:"_blank",rel:"noopener noreferrer"},F=s("here"),z=s(")."),Q=s("The "),J=n("code",null,"Connection",-1),Y=s(" class exposes pub/sub methods - they all start with "),$=n("code",null,"on",-1),nn=s(", like event emitters. When you call these listener methods, it registers a new subscription to the websocket client of that "),sn=n("code",null,"Connection",-1),an=s(" instance. The example pub/sub method we use below is "),tn={href:"https://solana-labs.github.io/solana-web3.js/classes/Connection.html#onAccountChange",target:"_blank",rel:"noopener noreferrer"},en=n("code",null,"onAccountChange",-1),on=s(". The callback will provide the updated state data through arguments (see "),cn={href:"https://solana-labs.github.io/solana-web3.js/modules.html#AccountChangeCallback",target:"_blank",rel:"noopener noreferrer"},ln=n("code",null,"AccountChangeCallback",-1),pn=s(" as an example)."),un=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" clusterApiUrl"),n("span",{class:"token punctuation"},","),s(" Connection"),n("span",{class:"token punctuation"},","),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),N=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana config "),n("span",{class:"token builtin class-name"},"set"),s(` --url http://privaterpc.com +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),G=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana config "),n("span",{class:"token builtin class-name"},"set"),s(` --url http://privaterpc.com +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),H=n("h2",{id:"subscribing-to-events",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#subscribing-to-events","aria-hidden":"true"},"#"),s(" Subscribing to Events")],-1),X=n("p",null,"Websockets provide a pub/sub interface where you can listen for certain events. Instead of pinging a typical HTTP endpoint at an interval to get frequent updates, you can instead receive those updates only when they happen.",-1),B=s("Solana's web3 "),D={href:"https://solana-labs.github.io/solana-web3.js/classes/Connection.html",target:"_blank",rel:"noopener noreferrer"},Z=n("code",null,"Connection",-1),F=s(" under the hood generates a websocket endpoint and registers a websocket client when you create a new "),z=n("code",null,"Connection",-1),Q=s(" instance (see source code "),J={href:"https://github.com/solana-labs/solana-web3.js/blob/45923ca00e4cc1ed079d8e55ecbee83e5b4dc174/src/connection.ts#L2100",target:"_blank",rel:"noopener noreferrer"},Y=s("here"),$=s(")."),nn=s("The "),sn=n("code",null,"Connection",-1),an=s(" class exposes pub/sub methods - they all start with "),tn=n("code",null,"on",-1),en=s(", like event emitters. When you call these listener methods, it registers a new subscription to the websocket client of that "),on=n("code",null,"Connection",-1),cn=s(" instance. The example pub/sub method we use below is "),ln={href:"https://solana-labs.github.io/solana-web3.js/classes/Connection.html#onAccountChange",target:"_blank",rel:"noopener noreferrer"},pn=n("code",null,"onAccountChange",-1),un=s(". The callback will provide the updated state data through arguments (see "),rn={href:"https://solana-labs.github.io/solana-web3.js/modules.html#AccountChangeCallback",target:"_blank",rel:"noopener noreferrer"},kn=n("code",null,"AccountChangeCallback",-1),bn=s(" as an example)."),mn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" clusterApiUrl"),n("span",{class:"token punctuation"},","),s(" Connection"),n("span",{class:"token punctuation"},","),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token comment"},"// Establish new connect to devnet - websocket client connected to devnet will also be registered here"),s(` @@ -59,7 +77,7 @@ client `),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"t `),n("span",{class:"token string"},'"confirmed"'),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br")])],-1),rn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token comment"},"// Establish new connect to devnet - websocket client connected to devnet will also be registered here"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br")])],-1),dn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token comment"},"// Establish new connect to devnet - websocket client connected to devnet will also be registered here"),s(` `),n("span",{class:"token keyword"},"const"),s(" connection "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"clusterApiUrl"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"devnet"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token string"},'"confirmed"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token comment"},"// Create a test wallet to listen to"),s(` @@ -72,8 +90,8 @@ connection`),n("span",{class:"token punctuation"},"."),n("span",{class:"token fu `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Updated account info: "'),n("span",{class:"token punctuation"},","),s(" updatedAccountInfo"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token string"},'"confirmed"'),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br")])],-1),kn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(` asyncio -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br")])],-1),gn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(` asyncio +`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair `),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("websocket_api "),n("span",{class:"token keyword"},"import"),s(` connect `),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token keyword"},"def"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},":"),s(` @@ -81,7 +99,7 @@ connection`),n("span",{class:"token punctuation"},"."),n("span",{class:"token fu `),n("span",{class:"token comment"},"# Create a Test Wallet"),s(` wallet `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"# Subscribe to the Test wallet to listen for events"),s(` - `),n("span",{class:"token keyword"},"await"),s(" websocket"),n("span",{class:"token punctuation"},"."),s("account_subscribe"),n("span",{class:"token punctuation"},"("),s("wallet"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),s(` + `),n("span",{class:"token keyword"},"await"),s(" websocket"),n("span",{class:"token punctuation"},"."),s("account_subscribe"),n("span",{class:"token punctuation"},"("),s("wallet"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"# Capture response from account subscription "),s(` first_resp `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" websocket"),n("span",{class:"token punctuation"},"."),s("recv"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Subscription successful with id {}, listening for events \\n"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("first_resp"),n("span",{class:"token punctuation"},"."),s("result"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` @@ -89,17 +107,66 @@ connection`),n("span",{class:"token punctuation"},"."),n("span",{class:"token fu `),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("updated_account_info"),n("span",{class:"token punctuation"},")"),s(` asyncio`),n("span",{class:"token punctuation"},"."),s("run"),n("span",{class:"token punctuation"},"("),s("main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br")])],-1),mn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token keyword"},"with"),s(" connect"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"wss://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token keyword"},"as"),s(" websocket"),n("span",{class:"token punctuation"},":"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br")])],-1),hn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token keyword"},"with"),s(" connect"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"wss://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token keyword"},"as"),s(" websocket"),n("span",{class:"token punctuation"},":"),s(` `),n("span",{class:"token comment"},"# Create a Test Wallet"),s(` wallet `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"# Subscribe to the Test wallet to listen for events"),s(` - `),n("span",{class:"token keyword"},"await"),s(" websocket"),n("span",{class:"token punctuation"},"."),s("account_subscribe"),n("span",{class:"token punctuation"},"("),s("wallet"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),s(` + `),n("span",{class:"token keyword"},"await"),s(" websocket"),n("span",{class:"token punctuation"},"."),s("account_subscribe"),n("span",{class:"token punctuation"},"("),s("wallet"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"# Capture response from account subscription "),s(` first_resp `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" websocket"),n("span",{class:"token punctuation"},"."),s("recv"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Subscription successful with id {}, listening for events \\n"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("first_resp"),n("span",{class:"token punctuation"},"."),s("result"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` updated_account_info `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" websocket"),n("span",{class:"token punctuation"},"."),s("recv"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("updated_account_info"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),bn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("pubsub_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"PubsubClient"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),_n=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token comment"},"// clang++ on_account_change.cpp -o on_account_change -std=c++17 -lssl -lcrypto -lsodium"),s(` + +`),n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + Connection `),n("span",{class:"token function"},"connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"int"),s(" subscriptionId "),n("span",{class:"token operator"},"="),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"on_account_change"),n("span",{class:"token punctuation"},"("),s("key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token punctuation"},"["),n("span",{class:"token operator"},"&"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},"("),s("Result"),n("span",{class:"token operator"},"<"),s("Account"),n("span",{class:"token operator"},">"),s(" result"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + Account account `),n("span",{class:"token operator"},"="),s(" result"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"owner = "'),s(),n("span",{class:"token operator"},"<<"),s(" account"),n("span",{class:"token punctuation"},"."),s("owner"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"lamports = "'),s(),n("span",{class:"token operator"},"<<"),s(" account"),n("span",{class:"token punctuation"},"."),s("lamports "),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"data = "'),s(),n("span",{class:"token operator"},"<<"),s(" account"),n("span",{class:"token punctuation"},"."),s("data "),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"executable = "'),s(),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token punctuation"},"("),s("account"),n("span",{class:"token punctuation"},"."),s("executable "),n("span",{class:"token operator"},"?"),s(),n("span",{class:"token string"},'"true"'),s(),n("span",{class:"token operator"},":"),s(),n("span",{class:"token string"},'"false"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token function"},"sleep"),n("span",{class:"token punctuation"},"("),n("span",{class:"token number"},"1"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + std`),n("span",{class:"token double-colon punctuation"},"::"),s("string tx_hash "),n("span",{class:"token operator"},"="),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"request_airdrop"),n("span",{class:"token punctuation"},"("),s("key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"tx hash = "'),s(),n("span",{class:"token operator"},"<<"),s(" tx_hash "),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"for"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"int"),s(" i "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(" i "),n("span",{class:"token operator"},"<"),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},";"),s(" i"),n("span",{class:"token operator"},"++"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + connection`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"poll"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token function"},"sleep"),n("span",{class:"token punctuation"},"("),n("span",{class:"token number"},"1"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token punctuation"},"}"),s(` + + connection`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"remove_account_listener"),n("span",{class:"token punctuation"},"("),s("subscriptionId"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"return"),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br")])],-1),yn=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(" subscriptionId "),n("span",{class:"token operator"},"="),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"on_account_change"),n("span",{class:"token punctuation"},"("),s("key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token punctuation"},"["),n("span",{class:"token operator"},"&"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},"("),s("Result"),n("span",{class:"token operator"},"<"),s("Account"),n("span",{class:"token operator"},">"),s(" result"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + Account account `),n("span",{class:"token operator"},"="),s(" result"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"owner = "'),s(),n("span",{class:"token operator"},"<<"),s(" account"),n("span",{class:"token punctuation"},"."),s("owner"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"lamports = "'),s(),n("span",{class:"token operator"},"<<"),s(" account"),n("span",{class:"token punctuation"},"."),s("lamports "),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"data = "'),s(),n("span",{class:"token operator"},"<<"),s(" account"),n("span",{class:"token punctuation"},"."),s("data "),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"executable = "'),s(),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token punctuation"},"("),s("account"),n("span",{class:"token punctuation"},"."),s("executable "),n("span",{class:"token operator"},"?"),s(),n("span",{class:"token string"},'"true"'),s(),n("span",{class:"token operator"},":"),s(),n("span",{class:"token string"},'"false"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"for"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"int"),s(" i "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(" i "),n("span",{class:"token operator"},"<"),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},";"),s(" i"),n("span",{class:"token operator"},"++"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + connection`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"poll"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token function"},"sleep"),n("span",{class:"token punctuation"},"("),n("span",{class:"token number"},"1"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` + +connection`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"remove_account_listener"),n("span",{class:"token punctuation"},"("),s("subscriptionId"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br")])],-1),wn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("pubsub_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"PubsubClient"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_config"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcAccountInfoConfig"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("commitment_config"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("signature"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"Signer"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` @@ -136,7 +203,7 @@ asyncio`),n("span",{class:"token punctuation"},"."),s("run"),n("span",{class:"to `),n("span",{class:"token macro property"},"println!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Errooooor"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br")])],-1),dn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" ws_url "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"String"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"wss://api.devnet.solana.com/"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br")])],-1),fn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" ws_url "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"String"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"wss://api.devnet.solana.com/"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"let"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"mut"),s(" client"),n("span",{class:"token punctuation"},","),s(" receiver"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"PubsubClient"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"account_subscribe"),n("span",{class:"token punctuation"},"("),s(` `),n("span",{class:"token operator"},"&"),s("ws_url"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token operator"},"&"),s("pubkey"),n("span",{class:"token punctuation"},","),s(` @@ -148,7 +215,7 @@ asyncio`),n("span",{class:"token punctuation"},"."),s("run"),n("span",{class:"to `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"let"),s(" message "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"match"),s(" receiver"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"recv"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token macro property"},"println!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"{:?}"'),n("span",{class:"token punctuation"},","),s(" message"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br")])],-1),gn=n("h2",{id:"getting-test-sol",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#getting-test-sol","aria-hidden":"true"},"#"),s(" Getting Test SOL")],-1),hn=n("p",null,"When you're working locally, you need some SOL in order to send transactions. In non-mainnet environments you can receive SOL by airdropping it to your address",-1),_n=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection"),n("span",{class:"token punctuation"},","),s(" Keypair"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token constant"},"LAMPORTS_PER_SOL"),s(),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br")])],-1),vn=n("h2",{id:"getting-test-sol",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#getting-test-sol","aria-hidden":"true"},"#"),s(" Getting Test SOL")],-1),Cn=n("p",null,"When you're working locally, you need some SOL in order to send transactions. In non-mainnet environments you can receive SOL by airdropping it to your address",-1),xn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection"),n("span",{class:"token punctuation"},","),s(" Keypair"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token constant"},"LAMPORTS_PER_SOL"),s(),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` @@ -166,13 +233,13 @@ asyncio`),n("span",{class:"token punctuation"},"."),s("run"),n("span",{class:"to signature `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br")])],-1),wn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" airdropSignature "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"requestAirdrop"),n("span",{class:"token punctuation"},"("),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br")])],-1),Sn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" airdropSignature "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"requestAirdrop"),n("span",{class:"token punctuation"},"("),s(` keypair`),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token constant"},"LAMPORTS_PER_SOL"),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"await"),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"confirmTransaction"),n("span",{class:"token punctuation"},"("),s("airdropSignature"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),yn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),An=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair `),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("api "),n("span",{class:"token keyword"},"import"),s(` Client wallet `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` @@ -180,14 +247,32 @@ wallet `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:" client `),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"#Input Airdrop amount in LAMPORTS"),s(` -client`),n("span",{class:"token punctuation"},"."),s("request_airdrop"),n("span",{class:"token punctuation"},"("),s("wallet"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"1000000000"),n("span",{class:"token punctuation"},")"),s(` +client`),n("span",{class:"token punctuation"},"."),s("request_airdrop"),n("span",{class:"token punctuation"},"("),s("wallet"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"1000000000"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"#Airdrops 1 SOL"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),fn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token comment"},"#Input Airdrop amount in LAMPORTS"),s(` -client`),n("span",{class:"token punctuation"},"."),s("request_airdrop"),n("span",{class:"token punctuation"},"("),s("wallet"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"1000000000"),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),Rn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token comment"},"#Input Airdrop amount in LAMPORTS"),s(` +client`),n("span",{class:"token punctuation"},"."),s("request_airdrop"),n("span",{class:"token punctuation"},"("),s("wallet"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"1000000000"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"#Airdrops 1 SOL"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),vn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),Ln=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token comment"},"// clang++ request_airdrop.cpp -o request_airdrop -std=c++17 -lssl -lcrypto -lsodium"),s(` + +`),n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + Connection `),n("span",{class:"token function"},"connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + std`),n("span",{class:"token double-colon punctuation"},"::"),s("string tx_hash "),n("span",{class:"token operator"},"="),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"request_airdrop"),n("span",{class:"token punctuation"},"("),s("key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"tx hash = "'),s(),n("span",{class:"token operator"},"<<"),s(" tx_hash "),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"return"),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br")])],-1),Tn=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[s("connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"request_airdrop"),n("span",{class:"token punctuation"},"("),s("key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Pn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("commitment_config"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("native_token"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token constant"},"LAMPORTS_PER_SOL"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("signature"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"Signer"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` @@ -209,7 +294,7 @@ client`),n("span",{class:"token punctuation"},"."),s("request_airdrop"),n("span" `),n("span",{class:"token class-name"},"Err"),n("span",{class:"token punctuation"},"("),s("_"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token macro property"},"println!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Error requesting airdrop"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br")])],-1),Cn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"match"),s(" client"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"request_airdrop"),n("span",{class:"token punctuation"},"("),n("span",{class:"token operator"},"&"),s("pubkey"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token constant"},"LAMPORTS_PER_SOL"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br")])],-1),In=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"match"),s(" client"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"request_airdrop"),n("span",{class:"token punctuation"},"("),n("span",{class:"token operator"},"&"),s("pubkey"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token constant"},"LAMPORTS_PER_SOL"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token class-name"},"Ok"),n("span",{class:"token punctuation"},"("),s("sig"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token keyword"},"loop"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"if"),s(),n("span",{class:"token keyword"},"let"),s(),n("span",{class:"token class-name"},"Ok"),n("span",{class:"token punctuation"},"("),s("confirmed"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"="),s(" client"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"confirm_transaction"),n("span",{class:"token punctuation"},"("),n("span",{class:"token operator"},"&"),s("sig"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"if"),s(" confirmed "),n("span",{class:"token punctuation"},"{"),s(` @@ -220,21 +305,21 @@ client`),n("span",{class:"token punctuation"},"."),s("request_airdrop"),n("span" `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token class-name"},"Err"),n("span",{class:"token punctuation"},"("),s("_"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token macro property"},"println!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Error requesting airdrop"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),xn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana airdrop "),n("span",{class:"token number"},"1"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),On=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana airdrop "),n("span",{class:"token number"},"1"),s(` `),n("span",{class:"token comment"},"# Return"),s(` `),n("span",{class:"token comment"},'# "1 SOL"'),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),Sn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana airdrop "),n("span",{class:"token number"},"1"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),An=n("h2",{id:"using-mainnet-accounts-and-programs",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#using-mainnet-accounts-and-programs","aria-hidden":"true"},"#"),s(" Using Mainnet Accounts and Programs")],-1),Rn=n("p",null,"Oftentimes, local tests rely on programs and accounts available only on mainnet. The Solana CLI allows to both:",-1),Ln=n("ul",null,[n("li",null,"Download Programs and Accounts"),n("li",null,"Load Programs and Accounts to a local validator")],-1),Tn=n("h3",{id:"how-to-load-accounts-from-mainnet",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-load-accounts-from-mainnet","aria-hidden":"true"},"#"),s(" How to load accounts from mainnet")],-1),Pn=n("p",null,"It is possible to download the SRM token mint account to file:",-1),On=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# solana account -u --output --output-file
    "),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),Mn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana airdrop "),n("span",{class:"token number"},"1"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Kn=n("h2",{id:"using-mainnet-accounts-and-programs",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#using-mainnet-accounts-and-programs","aria-hidden":"true"},"#"),s(" Using Mainnet Accounts and Programs")],-1),En=n("p",null,"Oftentimes, local tests rely on programs and accounts available only on mainnet. The Solana CLI allows to both:",-1),Un=n("ul",null,[n("li",null,"Download Programs and Accounts"),n("li",null,"Load Programs and Accounts to a local validator")],-1),jn=n("h3",{id:"how-to-load-accounts-from-mainnet",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-load-accounts-from-mainnet","aria-hidden":"true"},"#"),s(" How to load accounts from mainnet")],-1),Vn=n("p",null,"It is possible to download the SRM token mint account to file:",-1),Wn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# solana account -u --output --output-file
    "),s(` solana account -u m --output json-compact --output-file SRM_token.json SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),Mn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana account -u m --output json-compact --output-file SRM_token.json SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),In=n("p",null,"Loading it to your localnet is then done by passing the account's file and destination address (on the local cluster) when starting the validator:",-1),En=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-test-validator --account SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt SRM_token.json --reset -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Kn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# solana-test-validator --account
    --reset"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),qn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana account -u m --output json-compact --output-file SRM_token.json SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Nn=n("p",null,"Loading it to your localnet is then done by passing the account's file and destination address (on the local cluster) when starting the validator:",-1),Gn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-test-validator --account SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt SRM_token.json --reset +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Hn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# solana-test-validator --account
    --reset"),s(` solana-test-validator --account SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt SRM_token.json --reset -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),Un=n("h3",{id:"how-to-load-programs-from-mainnet",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-load-programs-from-mainnet","aria-hidden":"true"},"#"),s(" How to load programs from mainnet")],-1),jn=n("p",null,"Similarly, it is possible to download the Serum Dex v3 program:",-1),Vn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# solana program dump -u
    "),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),Xn=n("h3",{id:"how-to-load-programs-from-mainnet",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-load-programs-from-mainnet","aria-hidden":"true"},"#"),s(" How to load programs from mainnet")],-1),Bn=n("p",null,"Similarly, it is possible to download the Serum Dex v3 program:",-1),Dn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# solana program dump -u
    "),s(` solana program dump -u m 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin serum_dex_v3.so -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),Wn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana program dump -u m 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin serum_dex_v3.so -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Nn=n("p",null,"Loading it to your localnet is then done by passing the program's file and destination address (on the local cluster) when starting the validator:",-1),Gn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-test-validator --bpf-program 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin serum_dex_v3.so --reset -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Hn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# solana-test-validator --bpf-program
    --reset"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),Zn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana program dump -u m 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin serum_dex_v3.so +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Fn=n("p",null,"Loading it to your localnet is then done by passing the program's file and destination address (on the local cluster) when starting the validator:",-1),zn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-test-validator --bpf-program 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin serum_dex_v3.so --reset +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Qn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# solana-test-validator --bpf-program
    --reset"),s(` solana-test-validator --bpf-program 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin serum_dex_v3.so --reset -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1);function Xn(Bn,qn){const p=l("RouterLink"),e=l("SolanaCodeGroupItem"),o=l("SolanaCodeGroup"),c=l("ExternalLinkIcon");return i(),r(k,null,[d,g,h,n("p",null,[_,t(p,{to:"/getting-started/installation.html#install-cli"},{default:a(()=>[w]),_:1}),y]),f,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[v]),preview:a(()=>[C]),_:1}),t(e,{title:"Python"},{default:a(()=>[x]),preview:a(()=>[S]),_:1}),t(e,{title:"Rust"},{default:a(()=>[A]),preview:a(()=>[R]),_:1}),t(e,{title:"CLI"},{default:a(()=>[L]),preview:a(()=>[T]),_:1})]),_:1}),P,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[O]),preview:a(()=>[M]),_:1}),t(e,{title:"Python"},{default:a(()=>[I]),preview:a(()=>[E]),_:1}),t(e,{title:"Rust"},{default:a(()=>[K]),preview:a(()=>[U]),_:1}),t(e,{title:"CLI"},{default:a(()=>[j]),preview:a(()=>[V]),_:1})]),_:1}),W,N,n("p",null,[G,n("a",H,[X,t(c)]),B,q,D,n("a",Z,[F,t(c)]),z]),n("p",null,[Q,J,Y,$,nn,sn,an,n("a",tn,[en,t(c)]),on,n("a",cn,[ln,t(c)]),pn]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[un]),preview:a(()=>[rn]),_:1}),t(e,{title:"Python"},{default:a(()=>[kn]),preview:a(()=>[mn]),_:1}),t(e,{title:"Rust"},{default:a(()=>[bn]),preview:a(()=>[dn]),_:1})]),_:1}),gn,hn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[_n]),preview:a(()=>[wn]),_:1}),t(e,{title:"Python"},{default:a(()=>[yn]),preview:a(()=>[fn]),_:1}),t(e,{title:"Rust"},{default:a(()=>[vn]),preview:a(()=>[Cn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[xn]),preview:a(()=>[Sn]),_:1})]),_:1}),An,Rn,Ln,Tn,Pn,t(o,null,{default:a(()=>[t(e,{title:"CLI"},{default:a(()=>[On]),preview:a(()=>[Mn]),_:1})]),_:1}),In,t(o,null,{default:a(()=>[t(e,{title:"CLI"},{preview:a(()=>[En]),default:a(()=>[Kn]),_:1})]),_:1}),Un,jn,t(o,null,{default:a(()=>[t(e,{title:"CLI"},{default:a(()=>[Vn]),preview:a(()=>[Wn]),_:1})]),_:1}),Nn,t(o,null,{default:a(()=>[t(e,{title:"CLI"},{preview:a(()=>[Gn]),default:a(()=>[Hn]),_:1})]),_:1})],64)}var Zn=u(b,[["render",Xn]]);export{Zn as default}; +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1);function Jn(Yn,$n){const p=l("RouterLink"),e=l("SolanaCodeGroupItem"),o=l("SolanaCodeGroup"),c=l("ExternalLinkIcon");return i(),r(k,null,[d,g,h,n("p",null,[_,t(p,{to:"/getting-started/installation.html#install-cli"},{default:a(()=>[y]),_:1}),w]),f,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[v]),preview:a(()=>[C]),_:1}),t(e,{title:"Python"},{default:a(()=>[x]),preview:a(()=>[S]),_:1}),t(e,{title:"C++"},{default:a(()=>[A]),preview:a(()=>[R]),_:1}),t(e,{title:"Rust"},{default:a(()=>[L]),preview:a(()=>[T]),_:1}),t(e,{title:"CLI"},{default:a(()=>[P]),preview:a(()=>[I]),_:1})]),_:1}),O,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[M]),preview:a(()=>[K]),_:1}),t(e,{title:"Python"},{default:a(()=>[E]),preview:a(()=>[U]),_:1}),t(e,{title:"C++"},{default:a(()=>[j]),preview:a(()=>[V]),_:1}),t(e,{title:"Rust"},{default:a(()=>[W]),preview:a(()=>[q]),_:1}),t(e,{title:"CLI"},{default:a(()=>[N]),preview:a(()=>[G]),_:1})]),_:1}),H,X,n("p",null,[B,n("a",D,[Z,t(c)]),F,z,Q,n("a",J,[Y,t(c)]),$]),n("p",null,[nn,sn,an,tn,en,on,cn,n("a",ln,[pn,t(c)]),un,n("a",rn,[kn,t(c)]),bn]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[mn]),preview:a(()=>[dn]),_:1}),t(e,{title:"Python"},{default:a(()=>[gn]),preview:a(()=>[hn]),_:1}),t(e,{title:"C++"},{default:a(()=>[_n]),preview:a(()=>[yn]),_:1}),t(e,{title:"Rust"},{default:a(()=>[wn]),preview:a(()=>[fn]),_:1})]),_:1}),vn,Cn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[xn]),preview:a(()=>[Sn]),_:1}),t(e,{title:"Python"},{default:a(()=>[An]),preview:a(()=>[Rn]),_:1}),t(e,{title:"C++"},{default:a(()=>[Ln]),preview:a(()=>[Tn]),_:1}),t(e,{title:"Rust"},{default:a(()=>[Pn]),preview:a(()=>[In]),_:1}),t(e,{title:"CLI"},{default:a(()=>[On]),preview:a(()=>[Mn]),_:1})]),_:1}),Kn,En,Un,jn,Vn,t(o,null,{default:a(()=>[t(e,{title:"CLI"},{default:a(()=>[Wn]),preview:a(()=>[qn]),_:1})]),_:1}),Nn,t(o,null,{default:a(()=>[t(e,{title:"CLI"},{preview:a(()=>[Gn]),default:a(()=>[Hn]),_:1})]),_:1}),Xn,Bn,t(o,null,{default:a(()=>[t(e,{title:"CLI"},{default:a(()=>[Dn]),preview:a(()=>[Zn]),_:1})]),_:1}),Fn,t(o,null,{default:a(()=>[t(e,{title:"CLI"},{preview:a(()=>[zn]),default:a(()=>[Qn]),_:1})]),_:1})],64)}var ss=u(m,[["render",Jn]]);export{ss as default}; diff --git a/docs/.vuepress/dist/assets/local-development.html.b0030542.js b/docs/.vuepress/dist/assets/local-development.html.a66a151d.js similarity index 96% rename from docs/.vuepress/dist/assets/local-development.html.b0030542.js rename to docs/.vuepress/dist/assets/local-development.html.a66a151d.js index bdd4b240c..f32b0d0ce 100644 --- a/docs/.vuepress/dist/assets/local-development.html.b0030542.js +++ b/docs/.vuepress/dist/assets/local-development.html.a66a151d.js @@ -1 +1 @@ -const e={key:"v-10b56a2e",path:"/references/local-development.html",title:"Local Development",lang:"en-US",frontmatter:{title:"Local Development",head:[["meta",{name:"title",content:"Solana Cookbook | Local Development"}],["meta",{name:"og:title",content:"Solana Cookbook | Local Development"}],["meta",{name:"description",content:"Setup Local Validator for local developer environment and Airdrop SOL. Learn about Local Development and more references for Building on Solana at The Solana cookbook."}],["meta",{name:"og:description",content:"Setup Local Validator and Airdrop SOL for building on Solana Locally. Learn about Local Development and more references for Building on Solana at The Solana cookbook."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"Starting a Local Validator",slug:"starting-a-local-validator",children:[]},{level:2,title:"Connecting to Environments",slug:"connecting-to-environments",children:[]},{level:2,title:"Subscribing to Events",slug:"subscribing-to-events",children:[]},{level:2,title:"Getting Test SOL",slug:"getting-test-sol",children:[]},{level:2,title:"Using Mainnet Accounts and Programs",slug:"using-mainnet-accounts-and-programs",children:[{level:3,title:"How to load accounts from mainnet",slug:"how-to-load-accounts-from-mainnet",children:[]},{level:3,title:"How to load programs from mainnet",slug:"how-to-load-programs-from-mainnet",children:[]}]}],git:{updatedTime:1646858872e3},filePathRelative:"references/local-development.md"};export{e as data}; +const e={key:"v-10b56a2e",path:"/references/local-development.html",title:"Local Development",lang:"en-US",frontmatter:{title:"Local Development",head:[["meta",{name:"title",content:"Solana Cookbook | Local Development"}],["meta",{name:"og:title",content:"Solana Cookbook | Local Development"}],["meta",{name:"description",content:"Setup Local Validator for local developer environment and Airdrop SOL. Learn about Local Development and more references for Building on Solana at The Solana cookbook."}],["meta",{name:"og:description",content:"Setup Local Validator and Airdrop SOL for building on Solana Locally. Learn about Local Development and more references for Building on Solana at The Solana cookbook."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"Starting a Local Validator",slug:"starting-a-local-validator",children:[]},{level:2,title:"Connecting to Environments",slug:"connecting-to-environments",children:[]},{level:2,title:"Subscribing to Events",slug:"subscribing-to-events",children:[]},{level:2,title:"Getting Test SOL",slug:"getting-test-sol",children:[]},{level:2,title:"Using Mainnet Accounts and Programs",slug:"using-mainnet-accounts-and-programs",children:[{level:3,title:"How to load accounts from mainnet",slug:"how-to-load-accounts-from-mainnet",children:[]},{level:3,title:"How to load programs from mainnet",slug:"how-to-load-programs-from-mainnet",children:[]}]}],git:{updatedTime:1676666728e3},filePathRelative:"references/local-development.md"};export{e as data}; diff --git a/docs/.vuepress/dist/assets/local-development.html.0e2e2e16.js b/docs/.vuepress/dist/assets/local-development.html.b5a3cc9b.js similarity index 97% rename from docs/.vuepress/dist/assets/local-development.html.0e2e2e16.js rename to docs/.vuepress/dist/assets/local-development.html.b5a3cc9b.js index c9075babc..713b2c272 100644 --- a/docs/.vuepress/dist/assets/local-development.html.0e2e2e16.js +++ b/docs/.vuepress/dist/assets/local-development.html.b5a3cc9b.js @@ -1 +1 @@ -const e={key:"v-0835dffd",path:"/fr/references/local-development.html",title:"D\xE9veloppement Local",lang:"fr-FR",frontmatter:{title:"D\xE9veloppement Local",head:[["meta",{name:"title",content:"Solana Cookbook | D\xE9veloppement Local"}],["meta",{name:"og:title",content:"Solana Cookbook | D\xE9veloppement Local"}],["meta",{name:"description",content:"Configurer un Validateur Local pour avoir un environnement de d\xE9veloppement local et faire un Airdrop de SOL. D\xE9couvrez le D\xE9veloppement Local et d'autres r\xE9f\xE9rences pour Construire sur Solana dans le Solana cookbook."}],["meta",{name:"og:description",content:"Configurer un Validateur Local pour avoir un environnement de d\xE9veloppement local et faire un Airdrop de SOL. D\xE9couvrez le D\xE9veloppement Local et d'autres r\xE9f\xE9rences pour Construire sur Solana dans le Solana cookbook."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"D\xE9marrer un Validateur Local",slug:"demarrer-un-validateur-local",children:[]},{level:2,title:"Connexion aux Environnements",slug:"connexion-aux-environnements",children:[]},{level:2,title:"Inscription \xE0 des Ev\xE9nements",slug:"inscription-a-des-evenements",children:[]},{level:2,title:"Obtention de SOL pour les Tests",slug:"obtention-de-sol-pour-les-tests",children:[]},{level:2,title:"Utilisation des Comptes et des Programmes du Mainnet",slug:"utilisation-des-comptes-et-des-programmes-du-mainnet",children:[{level:3,title:"Comment charger des comptes depuis le mainnet",slug:"comment-charger-des-comptes-depuis-le-mainnet",children:[]},{level:3,title:"Comment charger des programmes depuis le mainnet",slug:"comment-charger-des-programmes-depuis-le-mainnet",children:[]}]}],git:{updatedTime:1664978942e3},filePathRelative:"fr/references/local-development.md"};export{e as data}; +const e={key:"v-0835dffd",path:"/fr/references/local-development.html",title:"D\xE9veloppement Local",lang:"fr-FR",frontmatter:{title:"D\xE9veloppement Local",head:[["meta",{name:"title",content:"Solana Cookbook | D\xE9veloppement Local"}],["meta",{name:"og:title",content:"Solana Cookbook | D\xE9veloppement Local"}],["meta",{name:"description",content:"Configurer un Validateur Local pour avoir un environnement de d\xE9veloppement local et faire un Airdrop de SOL. D\xE9couvrez le D\xE9veloppement Local et d'autres r\xE9f\xE9rences pour Construire sur Solana dans le Solana cookbook."}],["meta",{name:"og:description",content:"Configurer un Validateur Local pour avoir un environnement de d\xE9veloppement local et faire un Airdrop de SOL. D\xE9couvrez le D\xE9veloppement Local et d'autres r\xE9f\xE9rences pour Construire sur Solana dans le Solana cookbook."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"D\xE9marrer un Validateur Local",slug:"demarrer-un-validateur-local",children:[]},{level:2,title:"Connexion aux Environnements",slug:"connexion-aux-environnements",children:[]},{level:2,title:"Inscription \xE0 des Ev\xE9nements",slug:"inscription-a-des-evenements",children:[]},{level:2,title:"Obtention de SOL pour les Tests",slug:"obtention-de-sol-pour-les-tests",children:[]},{level:2,title:"Utilisation des Comptes et des Programmes du Mainnet",slug:"utilisation-des-comptes-et-des-programmes-du-mainnet",children:[{level:3,title:"Comment charger des comptes depuis le mainnet",slug:"comment-charger-des-comptes-depuis-le-mainnet",children:[]},{level:3,title:"Comment charger des programmes depuis le mainnet",slug:"comment-charger-des-programmes-depuis-le-mainnet",children:[]}]}],git:{updatedTime:1676666728e3},filePathRelative:"fr/references/local-development.md"};export{e as data}; diff --git a/docs/.vuepress/dist/assets/local-development.html.e8263adc.js b/docs/.vuepress/dist/assets/local-development.html.b76d3d02.js similarity index 97% rename from docs/.vuepress/dist/assets/local-development.html.e8263adc.js rename to docs/.vuepress/dist/assets/local-development.html.b76d3d02.js index b5b393806..f2c0235d1 100644 --- a/docs/.vuepress/dist/assets/local-development.html.e8263adc.js +++ b/docs/.vuepress/dist/assets/local-development.html.b76d3d02.js @@ -1 +1 @@ -const e={key:"v-0a613142",path:"/es/references/local-development.html",title:"Desarrollo en entorno local",lang:"es",frontmatter:{title:"Desarrollo en entorno local",head:[["meta",{name:"title",content:"Libro de recetas de Solana | Desarrollo en entorno local"}],["meta",{name:"og:title",content:"Libro de recetas de Solana | Desarrollo en entorno local"}],["meta",{name:"description",content:"Configura un validador local para tener un entorno de desarrollo local y hacer airdrop de SOL. Aprende sobre el desarrollo en un entorno local y m\xE1s referencias para desarrollar en Solana en el Libro de recetas de Solana."}],["meta",{name:"og:description",content:"Configura un validador local para tener un entorno de desarrollo local y hacer airdrop de SOL. Aprende sobre el desarrollo en un entorno local y m\xE1s referencias para desarrollar en Solana en el Libro de recetas de Solana."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"Iniciando un validador",slug:"iniciando-un-validador",children:[]},{level:2,title:"Conect\xE1ndote con los diferentes entornos",slug:"conectandote-con-los-diferentes-entornos",children:[]},{level:2,title:"Suscripci\xF3n a eventos",slug:"suscripcion-a-eventos",children:[]},{level:2,title:"Obteniendo SOL para pruebas",slug:"obteniendo-sol-para-pruebas",children:[]},{level:2,title:"Usando cuentas de mainnet y programas",slug:"usando-cuentas-de-mainnet-y-programas",children:[{level:3,title:"C\xF3mo cargar cuentas de mainnet",slug:"como-cargar-cuentas-de-mainnet",children:[]},{level:3,title:"C\xF3mo cargar programas de mainnet",slug:"como-cargar-programas-de-mainnet",children:[]}]}],git:{updatedTime:1663621463e3},filePathRelative:"es/references/local-development.md"};export{e as data}; +const e={key:"v-0a613142",path:"/es/references/local-development.html",title:"Desarrollo en entorno local",lang:"es",frontmatter:{title:"Desarrollo en entorno local",head:[["meta",{name:"title",content:"Libro de recetas de Solana | Desarrollo en entorno local"}],["meta",{name:"og:title",content:"Libro de recetas de Solana | Desarrollo en entorno local"}],["meta",{name:"description",content:"Configura un validador local para tener un entorno de desarrollo local y hacer airdrop de SOL. Aprende sobre el desarrollo en un entorno local y m\xE1s referencias para desarrollar en Solana en el Libro de recetas de Solana."}],["meta",{name:"og:description",content:"Configura un validador local para tener un entorno de desarrollo local y hacer airdrop de SOL. Aprende sobre el desarrollo en un entorno local y m\xE1s referencias para desarrollar en Solana en el Libro de recetas de Solana."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"Iniciando un validador",slug:"iniciando-un-validador",children:[]},{level:2,title:"Conect\xE1ndote con los diferentes entornos",slug:"conectandote-con-los-diferentes-entornos",children:[]},{level:2,title:"Suscripci\xF3n a eventos",slug:"suscripcion-a-eventos",children:[]},{level:2,title:"Obteniendo SOL para pruebas",slug:"obteniendo-sol-para-pruebas",children:[]},{level:2,title:"Usando cuentas de mainnet y programas",slug:"usando-cuentas-de-mainnet-y-programas",children:[{level:3,title:"C\xF3mo cargar cuentas de mainnet",slug:"como-cargar-cuentas-de-mainnet",children:[]},{level:3,title:"C\xF3mo cargar programas de mainnet",slug:"como-cargar-programas-de-mainnet",children:[]}]}],git:{updatedTime:1676666728e3},filePathRelative:"es/references/local-development.md"};export{e as data}; diff --git a/docs/.vuepress/dist/assets/local-development.html.eb498122.js b/docs/.vuepress/dist/assets/local-development.html.c075b9c1.js similarity index 68% rename from docs/.vuepress/dist/assets/local-development.html.eb498122.js rename to docs/.vuepress/dist/assets/local-development.html.c075b9c1.js index e3878c0d7..fbf725714 100644 --- a/docs/.vuepress/dist/assets/local-development.html.eb498122.js +++ b/docs/.vuepress/dist/assets/local-development.html.c075b9c1.js @@ -1,4 +1,4 @@ -import{_ as u,r as l,o as i,c as r,a as n,b as e,w as a,F as k,d as s,e as m}from"./app.cfdf84e7.js";const b={},d=n("h1",{id:"lokale-entwicklung",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#lokale-entwicklung","aria-hidden":"true"},"#"),s(" Lokale Entwicklung")],-1),g=n("h2",{id:"starten-eines-lokalen-validators",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#starten-eines-lokalen-validators","aria-hidden":"true"},"#"),s(" Starten eines lokalen Validators")],-1),h=n("p",null,"Das lokale Testen Ihres Programmcodes kann viel zuverl\xE4ssiger sein als Testen auf devnet und kann Ihnen beim Testen helfen, bevor Sie es auf devnet ausprobieren.",-1),_=s("Sie k\xF6nnen Ihren Local-Test-Validator einrichten, indem Sie die "),f=s("Solana Tool Suite"),w=s(" installieren. und l\xE4uft"),y=m('

    \u201EKonsole solana-Test-Validator

    \nZu den Vorteilen der Verwendung von Local-Test-Validator geh\xF6ren:\n\n- Keine RPC-Ratenbegrenzungen\n- Keine Airdrop-Grenzen\n- Direkte On-Chain-Programmbereitstellung (`--bpf-program ...`)\n- Konten aus einem \xF6ffentlichen Cluster klonen, einschlie\xDFlich Programme (`--clone ...`)\n- Konfigurierbare Aufbewahrung des Transaktionsverlaufs (`--limit-ledger-size ...`)\n- Konfigurierbare Epochenl\xE4nge (`--slots-per-epoch ...`)\n- Zu einem beliebigen Slot springen (`--warp-slot ...`)\n

    Verbindung zu Umgebungen

    Wenn Sie an der Solana-Entwicklung arbeiten, m\xFCssen Sie eine Verbindung herstellen zu einem bestimmten RPC-API-Endpunkt. Solana hat 3 \xF6ffentliche Entwicklung Umgebungen:

    • mainnet-beta https://api.mainnet-beta.solana.com
    • devnet https://api.devnet.solana.com
    • testnet https://api.testnet.solana.com
    ',5),v=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" clusterApiUrl"),n("span",{class:"token punctuation"},","),s(" Connection "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +import{_ as u,r as l,o as i,c as r,a as n,b as t,w as a,F as k,d as s,e as b}from"./app.2fbb9e96.js";const m={},d=n("h1",{id:"lokale-entwicklung",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#lokale-entwicklung","aria-hidden":"true"},"#"),s(" Lokale Entwicklung")],-1),g=n("h2",{id:"starten-eines-lokalen-validators",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#starten-eines-lokalen-validators","aria-hidden":"true"},"#"),s(" Starten eines lokalen Validators")],-1),h=n("p",null,"Das lokale Testen Ihres Programmcodes kann viel zuverl\xE4ssiger sein als Testen auf devnet und kann Ihnen beim Testen helfen, bevor Sie es auf devnet ausprobieren.",-1),_=s("Sie k\xF6nnen Ihren Local-Test-Validator einrichten, indem Sie die "),f=s("Solana Tool Suite"),w=s(" installieren. und l\xE4uft"),y=b('

    \u201EKonsole solana-Test-Validator

    \nZu den Vorteilen der Verwendung von Local-Test-Validator geh\xF6ren:\n\n- Keine RPC-Ratenbegrenzungen\n- Keine Airdrop-Grenzen\n- Direkte On-Chain-Programmbereitstellung (`--bpf-program ...`)\n- Konten aus einem \xF6ffentlichen Cluster klonen, einschlie\xDFlich Programme (`--clone ...`)\n- Konfigurierbare Aufbewahrung des Transaktionsverlaufs (`--limit-ledger-size ...`)\n- Konfigurierbare Epochenl\xE4nge (`--slots-per-epoch ...`)\n- Zu einem beliebigen Slot springen (`--warp-slot ...`)\n

    Verbindung zu Umgebungen

    Wenn Sie an der Solana-Entwicklung arbeiten, m\xFCssen Sie eine Verbindung herstellen zu einem bestimmten RPC-API-Endpunkt. Solana hat 3 \xF6ffentliche Entwicklung Umgebungen:

    • mainnet-beta https://api.mainnet-beta.solana.com
    • devnet https://api.devnet.solana.com
    • testnet https://api.testnet.solana.com
    ',5),v=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" clusterApiUrl"),n("span",{class:"token punctuation"},","),s(" Connection "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"const"),s(" connection "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"clusterApiUrl"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"mainnet-beta"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token string"},'"confirmed"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` @@ -8,40 +8,58 @@ import{_ as u,r as l,o as i,c as r,a as n,b as e,w as a,F as k,d as s,e as m}fro client `),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.mainnet-beta.solana.com"'),n("span",{class:"token punctuation"},")"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),x=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("client "),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.mainnet-beta.solana.com"'),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),A=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),A=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + Connection `),n("span",{class:"token function"},"connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.mainnet-beta.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token keyword"},"return"),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),R=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[s("Connection "),n("span",{class:"token function"},"connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.mainnet-beta.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),L=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("commitment_config"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"let"),s(" rpc_url "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"String"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.mainnet-beta.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"let"),s(" client "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new_with_commitment"),n("span",{class:"token punctuation"},"("),s("rpc_url"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"confirmed"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),R=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" rpc_url "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"String"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.mainnet-beta.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),P=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" rpc_url "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"String"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.mainnet-beta.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"let"),s(" client "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new_with_commitment"),n("span",{class:"token punctuation"},"("),s("rpc_url"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"confirmed"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),L=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana config "),n("span",{class:"token builtin class-name"},"set"),s(` --url https://api.mainnet-beta.solana.com -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),P=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana config "),n("span",{class:"token builtin class-name"},"set"),s(` --url https://api.mainnet-beta.solana.com -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),T=n("p",null,"Schlie\xDFlich k\xF6nnen Sie sich auch mit einem privaten Cluster verbinden, entweder einem lokalen oder einem l\xE4uft remote mit folgendem:",-1),K=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),T=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana config "),n("span",{class:"token builtin class-name"},"set"),s(` --url https://api.mainnet-beta.solana.com +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),K=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana config "),n("span",{class:"token builtin class-name"},"set"),s(` --url https://api.mainnet-beta.solana.com +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),I=n("p",null,"Schlie\xDFlich k\xF6nnen Sie sich auch mit einem privaten Cluster verbinden, entweder einem lokalen oder einem l\xE4uft remote mit folgendem:",-1),E=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token comment"},"// This will connect you to your local validator"),s(` `),n("span",{class:"token keyword"},"const"),s(" connection "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token string"},'"confirmed"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),E=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" connection "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token string"},'"confirmed"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),M=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("api "),n("span",{class:"token keyword"},"import"),s(` Client +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),M=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" connection "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token string"},'"confirmed"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),V=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("api "),n("span",{class:"token keyword"},"import"),s(` Client client `),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),I=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("client "),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),V=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),O=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("client "),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),U=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + Connection `),n("span",{class:"token function"},"connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token keyword"},"return"),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),W=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[s("Connection "),n("span",{class:"token function"},"connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),z=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("commitment_config"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"let"),s(" rpc_url "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"String"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"let"),s(" client "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new_with_commitment"),n("span",{class:"token punctuation"},"("),s("rpc_url"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"confirmed"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),O=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" rpc_url "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"String"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),j=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" rpc_url "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"String"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"let"),s(" client "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new_with_commitment"),n("span",{class:"token punctuation"},"("),s("rpc_url"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"confirmed"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),U=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana config "),n("span",{class:"token builtin class-name"},"set"),s(` --url http://privaterpc.com -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),W=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana config "),n("span",{class:"token builtin class-name"},"set"),s(` --url http://privaterpc.com -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),z=n("h2",{id:"abonnieren-von-veranstaltungen",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#abonnieren-von-veranstaltungen","aria-hidden":"true"},"#"),s(" Abonnieren von Veranstaltungen")],-1),j=n("p",null,"Websockets bieten eine Pub/Sub-Schnittstelle, auf der Sie auf bestimmte Ereignisse lauschen k\xF6nnen. Anstatt einen typischen HTTP-Endpunkt in regelm\xE4\xDFigen Abst\xE4nden zu pingen, um h\xE4ufige Updates zu erhalten, k\xF6nnen Sie diese Updates stattdessen nur dann erhalten, wenn sie auftreten.",-1),D=s("Solanas web3 "),N={href:"https://solana-labs.github.io/solana-web3.js/classes/Connection.html",target:"_blank",rel:"noopener noreferrer"},G=n("code",null,"Connection",-1),H=s(" generiert unter der Haube einen Websocket-Endpunkt und registriert einen Websocket-Client, wenn Sie eine neue "),Z=n("code",null," Connection",-1),B=s("-Instanz (siehe Quellcode "),X={href:"https://github.com/solana-labs/solana-web3.js/blob/45923ca00e4cc1ed079d8e55ecbee83e5b4dc174/src/connection.ts#L2100",target:"_blank",rel:"noopener noreferrer"},q=s("hier"),F=s(")."),Q=s("Die Klasse \u201EConnection\u201C legt Pub/Sub-Methoden offen \u2013 sie beginnen alle mit \u201Eon\u201C, wie Event-Emitter. Wenn Sie diese Listener-Methoden aufrufen, wird ein neues Abonnement f\xFCr den Websocket-Client dieser \u201EConnection\u201C-Instanz registriert. Die Pub/Sub-Beispielmethode, die wir unten verwenden, ist "),J={href:"https://solana-labs.github.io/solana-web3.js/classes/Connection.html#onAccountChange",target:"_blank",rel:"noopener noreferrer"},Y=n("code",null,"onAccountChange",-1),$=s(". Der R\xFCckruf stellt die aktualisierten Zustandsdaten \xFCber Argumente bereit (siehe "),nn={href:"https://solana-labs.github.io/solana-web3.js/modules.html#AccountChangeCallback",target:"_blank",rel:"noopener noreferrer"},sn=n("code",null,"AccountChangeCallback",-1),an=s(" als Beispiel)."),en=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" clusterApiUrl"),n("span",{class:"token punctuation"},","),s(" Connection"),n("span",{class:"token punctuation"},","),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),D=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana config "),n("span",{class:"token builtin class-name"},"set"),s(` --url http://privaterpc.com +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),N=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana config "),n("span",{class:"token builtin class-name"},"set"),s(` --url http://privaterpc.com +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),q=n("h2",{id:"abonnieren-von-veranstaltungen",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#abonnieren-von-veranstaltungen","aria-hidden":"true"},"#"),s(" Abonnieren von Veranstaltungen")],-1),G=n("p",null,"Websockets bieten eine Pub/Sub-Schnittstelle, auf der Sie auf bestimmte Ereignisse lauschen k\xF6nnen. Anstatt einen typischen HTTP-Endpunkt in regelm\xE4\xDFigen Abst\xE4nden zu pingen, um h\xE4ufige Updates zu erhalten, k\xF6nnen Sie diese Updates stattdessen nur dann erhalten, wenn sie auftreten.",-1),H=s("Solanas web3 "),Z={href:"https://solana-labs.github.io/solana-web3.js/classes/Connection.html",target:"_blank",rel:"noopener noreferrer"},B=n("code",null,"Connection",-1),X=s(" generiert unter der Haube einen Websocket-Endpunkt und registriert einen Websocket-Client, wenn Sie eine neue "),F=n("code",null," Connection",-1),Q=s("-Instanz (siehe Quellcode "),J={href:"https://github.com/solana-labs/solana-web3.js/blob/45923ca00e4cc1ed079d8e55ecbee83e5b4dc174/src/connection.ts#L2100",target:"_blank",rel:"noopener noreferrer"},Y=s("hier"),$=s(")."),nn=s("Die Klasse \u201EConnection\u201C legt Pub/Sub-Methoden offen \u2013 sie beginnen alle mit \u201Eon\u201C, wie Event-Emitter. Wenn Sie diese Listener-Methoden aufrufen, wird ein neues Abonnement f\xFCr den Websocket-Client dieser \u201EConnection\u201C-Instanz registriert. Die Pub/Sub-Beispielmethode, die wir unten verwenden, ist "),sn={href:"https://solana-labs.github.io/solana-web3.js/classes/Connection.html#onAccountChange",target:"_blank",rel:"noopener noreferrer"},an=n("code",null,"onAccountChange",-1),tn=s(". Der R\xFCckruf stellt die aktualisierten Zustandsdaten \xFCber Argumente bereit (siehe "),en={href:"https://solana-labs.github.io/solana-web3.js/modules.html#AccountChangeCallback",target:"_blank",rel:"noopener noreferrer"},on=n("code",null,"AccountChangeCallback",-1),cn=s(" als Beispiel)."),ln=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" clusterApiUrl"),n("span",{class:"token punctuation"},","),s(" Connection"),n("span",{class:"token punctuation"},","),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token comment"},"// Establish new connect to devnet - websocket client connected to devnet will also be registered here"),s(` @@ -58,7 +76,7 @@ client `),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"t `),n("span",{class:"token string"},'"confirmed"'),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br")])],-1),tn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token comment"},"// Establish new connect to devnet - websocket client connected to devnet will also be registered here"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br")])],-1),pn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token comment"},"// Establish new connect to devnet - websocket client connected to devnet will also be registered here"),s(` `),n("span",{class:"token keyword"},"const"),s(" connection "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"clusterApiUrl"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"devnet"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token string"},'"confirmed"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token comment"},"// Create a test wallet to listen to"),s(` @@ -71,8 +89,8 @@ connection`),n("span",{class:"token punctuation"},"."),n("span",{class:"token fu `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Updated account info: "'),n("span",{class:"token punctuation"},","),s(" updatedAccountInfo"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token string"},'"confirmed"'),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br")])],-1),on=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(` asyncio -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br")])],-1),un=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(` asyncio +`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair `),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("websocket_api "),n("span",{class:"token keyword"},"import"),s(` connect `),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token keyword"},"def"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},":"),s(` @@ -80,7 +98,7 @@ connection`),n("span",{class:"token punctuation"},"."),n("span",{class:"token fu `),n("span",{class:"token comment"},"# Create a Test Wallet"),s(` wallet `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"# Subscribe to the Test wallet to listen for events"),s(` - `),n("span",{class:"token keyword"},"await"),s(" websocket"),n("span",{class:"token punctuation"},"."),s("account_subscribe"),n("span",{class:"token punctuation"},"("),s("wallet"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),s(` + `),n("span",{class:"token keyword"},"await"),s(" websocket"),n("span",{class:"token punctuation"},"."),s("account_subscribe"),n("span",{class:"token punctuation"},"("),s("wallet"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"# Capture response from account subscription "),s(` first_resp `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" websocket"),n("span",{class:"token punctuation"},"."),s("recv"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Subscription successful with id {}, listening for events \\n"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("first_resp"),n("span",{class:"token punctuation"},"."),s("result"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` @@ -88,17 +106,66 @@ connection`),n("span",{class:"token punctuation"},"."),n("span",{class:"token fu `),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("updated_account_info"),n("span",{class:"token punctuation"},")"),s(` asyncio`),n("span",{class:"token punctuation"},"."),s("run"),n("span",{class:"token punctuation"},"("),s("main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br")])],-1),cn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token keyword"},"with"),s(" connect"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"wss://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token keyword"},"as"),s(" websocket"),n("span",{class:"token punctuation"},":"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br")])],-1),rn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token keyword"},"with"),s(" connect"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"wss://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token keyword"},"as"),s(" websocket"),n("span",{class:"token punctuation"},":"),s(` `),n("span",{class:"token comment"},"# Create a Test Wallet"),s(` wallet `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"# Subscribe to the Test wallet to listen for events"),s(` - `),n("span",{class:"token keyword"},"await"),s(" websocket"),n("span",{class:"token punctuation"},"."),s("account_subscribe"),n("span",{class:"token punctuation"},"("),s("wallet"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),s(` + `),n("span",{class:"token keyword"},"await"),s(" websocket"),n("span",{class:"token punctuation"},"."),s("account_subscribe"),n("span",{class:"token punctuation"},"("),s("wallet"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"# Capture response from account subscription "),s(` first_resp `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" websocket"),n("span",{class:"token punctuation"},"."),s("recv"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Subscription successful with id {}, listening for events \\n"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("first_resp"),n("span",{class:"token punctuation"},"."),s("result"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` updated_account_info `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" websocket"),n("span",{class:"token punctuation"},"."),s("recv"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("updated_account_info"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),ln=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("pubsub_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"PubsubClient"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),kn=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token comment"},"// clang++ on_account_change.cpp -o on_account_change -std=c++17 -lssl -lcrypto -lsodium"),s(` + +`),n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + Connection `),n("span",{class:"token function"},"connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"int"),s(" subscriptionId "),n("span",{class:"token operator"},"="),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"on_account_change"),n("span",{class:"token punctuation"},"("),s("key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token punctuation"},"["),n("span",{class:"token operator"},"&"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},"("),s("Result"),n("span",{class:"token operator"},"<"),s("Account"),n("span",{class:"token operator"},">"),s(" result"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + Account account `),n("span",{class:"token operator"},"="),s(" result"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"owner = "'),s(),n("span",{class:"token operator"},"<<"),s(" account"),n("span",{class:"token punctuation"},"."),s("owner"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"lamports = "'),s(),n("span",{class:"token operator"},"<<"),s(" account"),n("span",{class:"token punctuation"},"."),s("lamports "),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"data = "'),s(),n("span",{class:"token operator"},"<<"),s(" account"),n("span",{class:"token punctuation"},"."),s("data "),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"executable = "'),s(),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token punctuation"},"("),s("account"),n("span",{class:"token punctuation"},"."),s("executable "),n("span",{class:"token operator"},"?"),s(),n("span",{class:"token string"},'"true"'),s(),n("span",{class:"token operator"},":"),s(),n("span",{class:"token string"},'"false"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token function"},"sleep"),n("span",{class:"token punctuation"},"("),n("span",{class:"token number"},"1"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + std`),n("span",{class:"token double-colon punctuation"},"::"),s("string tx_hash "),n("span",{class:"token operator"},"="),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"request_airdrop"),n("span",{class:"token punctuation"},"("),s("key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"tx hash = "'),s(),n("span",{class:"token operator"},"<<"),s(" tx_hash "),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"for"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"int"),s(" i "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(" i "),n("span",{class:"token operator"},"<"),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},";"),s(" i"),n("span",{class:"token operator"},"++"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + connection`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"poll"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token function"},"sleep"),n("span",{class:"token punctuation"},"("),n("span",{class:"token number"},"1"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token punctuation"},"}"),s(` + + connection`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"remove_account_listener"),n("span",{class:"token punctuation"},"("),s("subscriptionId"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"return"),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br")])],-1),bn=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(" subscriptionId "),n("span",{class:"token operator"},"="),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"on_account_change"),n("span",{class:"token punctuation"},"("),s("key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token punctuation"},"["),n("span",{class:"token operator"},"&"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},"("),s("Result"),n("span",{class:"token operator"},"<"),s("Account"),n("span",{class:"token operator"},">"),s(" result"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + Account account `),n("span",{class:"token operator"},"="),s(" result"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"owner = "'),s(),n("span",{class:"token operator"},"<<"),s(" account"),n("span",{class:"token punctuation"},"."),s("owner"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"lamports = "'),s(),n("span",{class:"token operator"},"<<"),s(" account"),n("span",{class:"token punctuation"},"."),s("lamports "),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"data = "'),s(),n("span",{class:"token operator"},"<<"),s(" account"),n("span",{class:"token punctuation"},"."),s("data "),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"executable = "'),s(),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token punctuation"},"("),s("account"),n("span",{class:"token punctuation"},"."),s("executable "),n("span",{class:"token operator"},"?"),s(),n("span",{class:"token string"},'"true"'),s(),n("span",{class:"token operator"},":"),s(),n("span",{class:"token string"},'"false"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"for"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"int"),s(" i "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(" i "),n("span",{class:"token operator"},"<"),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},";"),s(" i"),n("span",{class:"token operator"},"++"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + connection`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"poll"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token function"},"sleep"),n("span",{class:"token punctuation"},"("),n("span",{class:"token number"},"1"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` + +connection`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"remove_account_listener"),n("span",{class:"token punctuation"},"("),s("subscriptionId"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br")])],-1),mn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("pubsub_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"PubsubClient"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_config"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcAccountInfoConfig"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("commitment_config"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("signature"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"Signer"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` @@ -135,7 +202,7 @@ asyncio`),n("span",{class:"token punctuation"},"."),s("run"),n("span",{class:"to `),n("span",{class:"token macro property"},"println!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Errooooor"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br")])],-1),pn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" ws_url "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"String"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"wss://api.devnet.solana.com/"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br")])],-1),dn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" ws_url "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"String"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"wss://api.devnet.solana.com/"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"let"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"mut"),s(" client"),n("span",{class:"token punctuation"},","),s(" receiver"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"PubsubClient"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"account_subscribe"),n("span",{class:"token punctuation"},"("),s(` `),n("span",{class:"token operator"},"&"),s("ws_url"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token operator"},"&"),s("pubkey"),n("span",{class:"token punctuation"},","),s(` @@ -147,7 +214,7 @@ asyncio`),n("span",{class:"token punctuation"},"."),s("run"),n("span",{class:"to `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"let"),s(" message "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"match"),s(" receiver"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"recv"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token macro property"},"println!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"{:?}"'),n("span",{class:"token punctuation"},","),s(" message"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br")])],-1),un=n("h2",{id:"test-sol-erhalten",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#test-sol-erhalten","aria-hidden":"true"},"#"),s(" Test SOL erhalten")],-1),rn=n("p",null,"Wenn Sie lokal arbeiten, ben\xF6tigen Sie zum Senden etwas SOL Transaktionen. In Nicht-Mainnet-Umgebungen k\xF6nnen Sie SOL per empfangen Airdrop an Ihre Adresse",-1),kn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection"),n("span",{class:"token punctuation"},","),s(" Keypair"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token constant"},"LAMPORTS_PER_SOL"),s(),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br")])],-1),gn=n("h2",{id:"test-sol-erhalten",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#test-sol-erhalten","aria-hidden":"true"},"#"),s(" Test SOL erhalten")],-1),hn=n("p",null,"Wenn Sie lokal arbeiten, ben\xF6tigen Sie zum Senden etwas SOL Transaktionen. In Nicht-Mainnet-Umgebungen k\xF6nnen Sie SOL per empfangen Airdrop an Ihre Adresse",-1),_n=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection"),n("span",{class:"token punctuation"},","),s(" Keypair"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token constant"},"LAMPORTS_PER_SOL"),s(),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` @@ -165,13 +232,13 @@ asyncio`),n("span",{class:"token punctuation"},"."),s("run"),n("span",{class:"to signature `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br")])],-1),mn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" airdropSignature "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"requestAirdrop"),n("span",{class:"token punctuation"},"("),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br")])],-1),fn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" airdropSignature "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"requestAirdrop"),n("span",{class:"token punctuation"},"("),s(` keypair`),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token constant"},"LAMPORTS_PER_SOL"),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"await"),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"confirmTransaction"),n("span",{class:"token punctuation"},"("),s("airdropSignature"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),bn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),wn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair `),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("api "),n("span",{class:"token keyword"},"import"),s(` Client wallet `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` @@ -179,14 +246,32 @@ wallet `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:" client `),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"#Input Airdrop amount in LAMPORTS"),s(` -client`),n("span",{class:"token punctuation"},"."),s("request_airdrop"),n("span",{class:"token punctuation"},"("),s("wallet"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"1000000000"),n("span",{class:"token punctuation"},")"),s(` +client`),n("span",{class:"token punctuation"},"."),s("request_airdrop"),n("span",{class:"token punctuation"},"("),s("wallet"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"1000000000"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"#Airdrops 1 SOL"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),dn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token comment"},"#Input Airdrop amount in LAMPORTS"),s(` -client`),n("span",{class:"token punctuation"},"."),s("request_airdrop"),n("span",{class:"token punctuation"},"("),s("wallet"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"1000000000"),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),yn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token comment"},"#Input Airdrop amount in LAMPORTS"),s(` +client`),n("span",{class:"token punctuation"},"."),s("request_airdrop"),n("span",{class:"token punctuation"},"("),s("wallet"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"1000000000"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"#Airdrops 1 SOL"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),gn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),vn=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token comment"},"// clang++ request_airdrop.cpp -o request_airdrop -std=c++17 -lssl -lcrypto -lsodium"),s(` + +`),n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + Connection `),n("span",{class:"token function"},"connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + std`),n("span",{class:"token double-colon punctuation"},"::"),s("string tx_hash "),n("span",{class:"token operator"},"="),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"request_airdrop"),n("span",{class:"token punctuation"},"("),s("key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"tx hash = "'),s(),n("span",{class:"token operator"},"<<"),s(" tx_hash "),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"return"),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br")])],-1),Cn=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[s("connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"request_airdrop"),n("span",{class:"token punctuation"},"("),s("key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Sn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("commitment_config"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("native_token"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token constant"},"LAMPORTS_PER_SOL"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("signature"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"Signer"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` @@ -208,7 +293,7 @@ client`),n("span",{class:"token punctuation"},"."),s("request_airdrop"),n("span" `),n("span",{class:"token class-name"},"Err"),n("span",{class:"token punctuation"},"("),s("_"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token macro property"},"println!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Error requesting airdrop"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br")])],-1),hn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"match"),s(" client"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"request_airdrop"),n("span",{class:"token punctuation"},"("),n("span",{class:"token operator"},"&"),s("pubkey"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token constant"},"LAMPORTS_PER_SOL"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br")])],-1),xn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"match"),s(" client"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"request_airdrop"),n("span",{class:"token punctuation"},"("),n("span",{class:"token operator"},"&"),s("pubkey"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token constant"},"LAMPORTS_PER_SOL"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token class-name"},"Ok"),n("span",{class:"token punctuation"},"("),s("sig"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token keyword"},"loop"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"if"),s(),n("span",{class:"token keyword"},"let"),s(),n("span",{class:"token class-name"},"Ok"),n("span",{class:"token punctuation"},"("),s("confirmed"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"="),s(" client"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"confirm_transaction"),n("span",{class:"token punctuation"},"("),n("span",{class:"token operator"},"&"),s("sig"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"if"),s(" confirmed "),n("span",{class:"token punctuation"},"{"),s(` @@ -219,21 +304,21 @@ client`),n("span",{class:"token punctuation"},"."),s("request_airdrop"),n("span" `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token class-name"},"Err"),n("span",{class:"token punctuation"},"("),s("_"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token macro property"},"println!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Error requesting airdrop"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),_n=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana airdrop "),n("span",{class:"token number"},"1"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),An=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana airdrop "),n("span",{class:"token number"},"1"),s(` `),n("span",{class:"token comment"},"# Return"),s(` `),n("span",{class:"token comment"},'# "1 SOL"'),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),fn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana airdrop "),n("span",{class:"token number"},"1"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),wn=n("h2",{id:"verwenden-von-mainnet-konten-und-programmen",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#verwenden-von-mainnet-konten-und-programmen","aria-hidden":"true"},"#"),s(" Verwenden von Mainnet-Konten und -Programmen")],-1),yn=n("p",null,"H\xE4ufig verlassen sich lokale Tests auf Programme und Konten, die nur im Mainnet verf\xFCgbar sind. Die Solana CLI erm\xF6glicht beides:",-1),vn=n("ul",null,[n("li",null,"Laden Sie Programme und Konten herunter"),n("li",null,"Laden Sie Programme und Konten in einen lokalen Validator")],-1),Cn=n("h3",{id:"so-laden-sie-konten-aus-dem-mainnet",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#so-laden-sie-konten-aus-dem-mainnet","aria-hidden":"true"},"#"),s(" So laden Sie Konten aus dem Mainnet")],-1),Sn=n("p",null,"Es ist m\xF6glich, das SRM-Token-Mint-Konto in eine Datei herunterzuladen:",-1),xn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# solana account -u --output --output-file
    "),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),Rn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana airdrop "),n("span",{class:"token number"},"1"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Ln=n("h2",{id:"verwenden-von-mainnet-konten-und-programmen",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#verwenden-von-mainnet-konten-und-programmen","aria-hidden":"true"},"#"),s(" Verwenden von Mainnet-Konten und -Programmen")],-1),Pn=n("p",null,"H\xE4ufig verlassen sich lokale Tests auf Programme und Konten, die nur im Mainnet verf\xFCgbar sind. Die Solana CLI erm\xF6glicht beides:",-1),Tn=n("ul",null,[n("li",null,"Laden Sie Programme und Konten herunter"),n("li",null,"Laden Sie Programme und Konten in einen lokalen Validator")],-1),Kn=n("h3",{id:"so-laden-sie-konten-aus-dem-mainnet",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#so-laden-sie-konten-aus-dem-mainnet","aria-hidden":"true"},"#"),s(" So laden Sie Konten aus dem Mainnet")],-1),In=n("p",null,"Es ist m\xF6glich, das SRM-Token-Mint-Konto in eine Datei herunterzuladen:",-1),En=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# solana account -u --output --output-file
    "),s(` solana account -u m --output json-compact --output-file SRM_token.json SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),An=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana account -u m --output json-compact --output-file SRM_token.json SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Rn=n("p",null,"Das Laden in Ihr lokales Netz erfolgt dann, indem die Datei und die Zieladresse des Kontos (auf dem lokalen Cluster) beim Starten des Validators \xFCbergeben werden:",-1),Ln=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-test-validator --account SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt SRM_token.json --reset -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Pn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# solana-test-validator --account
    --reset"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),Mn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana account -u m --output json-compact --output-file SRM_token.json SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Vn=n("p",null,"Das Laden in Ihr lokales Netz erfolgt dann, indem die Datei und die Zieladresse des Kontos (auf dem lokalen Cluster) beim Starten des Validators \xFCbergeben werden:",-1),On=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-test-validator --account SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt SRM_token.json --reset +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Un=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# solana-test-validator --account
    --reset"),s(` solana-test-validator --account SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt SRM_token.json --reset -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),Tn=n("h3",{id:"so-laden-sie-programme-aus-dem-mainnet",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#so-laden-sie-programme-aus-dem-mainnet","aria-hidden":"true"},"#"),s(" So laden Sie Programme aus dem Mainnet")],-1),Kn=n("p",null,"Ebenso ist es m\xF6glich, das Programm Serum Dex v3 herunterzuladen:",-1),En=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# solana program dump -u
    "),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),Wn=n("h3",{id:"so-laden-sie-programme-aus-dem-mainnet",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#so-laden-sie-programme-aus-dem-mainnet","aria-hidden":"true"},"#"),s(" So laden Sie Programme aus dem Mainnet")],-1),zn=n("p",null,"Ebenso ist es m\xF6glich, das Programm Serum Dex v3 herunterzuladen:",-1),jn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# solana program dump -u
    "),s(` solana program dump -u m 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin serum_dex_v3.so -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),Mn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana program dump -u m 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin serum_dex_v3.so -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),In=n("p",null,"Das Laden in Ihr lokales Netz erfolgt dann, indem Sie beim Starten des Validators die Datei und die Zieladresse des Programms (auf dem lokalen Cluster) \xFCbergeben:",-1),Vn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-test-validator --bpf-program 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin serum_dex_v3.so --reset -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),On=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# solana-test-validator --bpf-program
    --reset"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),Dn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana program dump -u m 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin serum_dex_v3.so +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Nn=n("p",null,"Das Laden in Ihr lokales Netz erfolgt dann, indem Sie beim Starten des Validators die Datei und die Zieladresse des Programms (auf dem lokalen Cluster) \xFCbergeben:",-1),qn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-test-validator --bpf-program 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin serum_dex_v3.so --reset +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Gn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# solana-test-validator --bpf-program
    --reset"),s(` solana-test-validator --bpf-program 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin serum_dex_v3.so --reset -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1);function Un(Wn,zn){const p=l("RouterLink"),t=l("SolanaCodeGroupItem"),o=l("SolanaCodeGroup"),c=l("ExternalLinkIcon");return i(),r(k,null,[d,g,h,n("p",null,[_,e(p,{to:"/getting-started/installation.html#install-cli"},{default:a(()=>[f]),_:1}),w]),y,e(o,null,{default:a(()=>[e(t,{title:"TS",active:""},{default:a(()=>[v]),preview:a(()=>[C]),_:1}),e(t,{title:"Python"},{default:a(()=>[S]),preview:a(()=>[x]),_:1}),e(t,{title:"Rust"},{default:a(()=>[A]),preview:a(()=>[R]),_:1}),e(t,{title:"CLI"},{default:a(()=>[L]),preview:a(()=>[P]),_:1})]),_:1}),T,e(o,null,{default:a(()=>[e(t,{title:"TS",active:""},{default:a(()=>[K]),preview:a(()=>[E]),_:1}),e(t,{title:"Python"},{default:a(()=>[M]),preview:a(()=>[I]),_:1}),e(t,{title:"Rust"},{default:a(()=>[V]),preview:a(()=>[O]),_:1}),e(t,{title:"CLI"},{default:a(()=>[U]),preview:a(()=>[W]),_:1})]),_:1}),z,j,n("p",null,[D,n("a",N,[G,e(c)]),H,Z,B,n("a",X,[q,e(c)]),F]),n("p",null,[Q,n("a",J,[Y,e(c)]),$,n("a",nn,[sn,e(c)]),an]),e(o,null,{default:a(()=>[e(t,{title:"TS",active:""},{default:a(()=>[en]),preview:a(()=>[tn]),_:1}),e(t,{title:"Python"},{default:a(()=>[on]),preview:a(()=>[cn]),_:1}),e(t,{title:"Rust"},{default:a(()=>[ln]),preview:a(()=>[pn]),_:1})]),_:1}),un,rn,e(o,null,{default:a(()=>[e(t,{title:"TS",active:""},{default:a(()=>[kn]),preview:a(()=>[mn]),_:1}),e(t,{title:"Python"},{default:a(()=>[bn]),preview:a(()=>[dn]),_:1}),e(t,{title:"Rust"},{default:a(()=>[gn]),preview:a(()=>[hn]),_:1}),e(t,{title:"CLI"},{default:a(()=>[_n]),preview:a(()=>[fn]),_:1})]),_:1}),wn,yn,vn,Cn,Sn,e(o,null,{default:a(()=>[e(t,{title:"CLI"},{default:a(()=>[xn]),preview:a(()=>[An]),_:1})]),_:1}),Rn,e(o,null,{default:a(()=>[e(t,{title:"CLI"},{preview:a(()=>[Ln]),default:a(()=>[Pn]),_:1})]),_:1}),Tn,Kn,e(o,null,{default:a(()=>[e(t,{title:"CLI"},{default:a(()=>[En]),preview:a(()=>[Mn]),_:1})]),_:1}),In,e(o,null,{default:a(()=>[e(t,{title:"CLI"},{preview:a(()=>[Vn]),default:a(()=>[On]),_:1})]),_:1})],64)}var Dn=u(b,[["render",Un]]);export{Dn as default}; +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1);function Hn(Zn,Bn){const p=l("RouterLink"),e=l("SolanaCodeGroupItem"),o=l("SolanaCodeGroup"),c=l("ExternalLinkIcon");return i(),r(k,null,[d,g,h,n("p",null,[_,t(p,{to:"/getting-started/installation.html#install-cli"},{default:a(()=>[f]),_:1}),w]),y,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[v]),preview:a(()=>[C]),_:1}),t(e,{title:"Python"},{default:a(()=>[S]),preview:a(()=>[x]),_:1}),t(e,{title:"C++"},{default:a(()=>[A]),preview:a(()=>[R]),_:1}),t(e,{title:"Rust"},{default:a(()=>[L]),preview:a(()=>[P]),_:1}),t(e,{title:"CLI"},{default:a(()=>[T]),preview:a(()=>[K]),_:1})]),_:1}),I,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[E]),preview:a(()=>[M]),_:1}),t(e,{title:"Python"},{default:a(()=>[V]),preview:a(()=>[O]),_:1}),t(e,{title:"C++"},{default:a(()=>[U]),preview:a(()=>[W]),_:1}),t(e,{title:"Rust"},{default:a(()=>[z]),preview:a(()=>[j]),_:1}),t(e,{title:"CLI"},{default:a(()=>[D]),preview:a(()=>[N]),_:1})]),_:1}),q,G,n("p",null,[H,n("a",Z,[B,t(c)]),X,F,Q,n("a",J,[Y,t(c)]),$]),n("p",null,[nn,n("a",sn,[an,t(c)]),tn,n("a",en,[on,t(c)]),cn]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[ln]),preview:a(()=>[pn]),_:1}),t(e,{title:"Python"},{default:a(()=>[un]),preview:a(()=>[rn]),_:1}),t(e,{title:"C++"},{default:a(()=>[kn]),preview:a(()=>[bn]),_:1}),t(e,{title:"Rust"},{default:a(()=>[mn]),preview:a(()=>[dn]),_:1})]),_:1}),gn,hn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[_n]),preview:a(()=>[fn]),_:1}),t(e,{title:"Python"},{default:a(()=>[wn]),preview:a(()=>[yn]),_:1}),t(e,{title:"C++"},{default:a(()=>[vn]),preview:a(()=>[Cn]),_:1}),t(e,{title:"Rust"},{default:a(()=>[Sn]),preview:a(()=>[xn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[An]),preview:a(()=>[Rn]),_:1})]),_:1}),Ln,Pn,Tn,Kn,In,t(o,null,{default:a(()=>[t(e,{title:"CLI"},{default:a(()=>[En]),preview:a(()=>[Mn]),_:1})]),_:1}),Vn,t(o,null,{default:a(()=>[t(e,{title:"CLI"},{preview:a(()=>[On]),default:a(()=>[Un]),_:1})]),_:1}),Wn,zn,t(o,null,{default:a(()=>[t(e,{title:"CLI"},{default:a(()=>[jn]),preview:a(()=>[Dn]),_:1})]),_:1}),Nn,t(o,null,{default:a(()=>[t(e,{title:"CLI"},{preview:a(()=>[qn]),default:a(()=>[Gn]),_:1})]),_:1})],64)}var Fn=u(m,[["render",Hn]]);export{Fn as default}; diff --git a/docs/.vuepress/dist/assets/local-development.html.30644647.js b/docs/.vuepress/dist/assets/local-development.html.e7698a93.js similarity index 68% rename from docs/.vuepress/dist/assets/local-development.html.30644647.js rename to docs/.vuepress/dist/assets/local-development.html.e7698a93.js index 48157853a..70c4fa499 100644 --- a/docs/.vuepress/dist/assets/local-development.html.30644647.js +++ b/docs/.vuepress/dist/assets/local-development.html.e7698a93.js @@ -1,4 +1,4 @@ -import{_ as u,r as l,o as i,c as r,a as n,b as t,w as a,F as k,d as s,e as m}from"./app.cfdf84e7.js";const b={},d=n("h1",{id:"local-development",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#local-development","aria-hidden":"true"},"#"),s(" Local Development")],-1),g=n("h2",{id:"starting-a-local-validator",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#starting-a-local-validator","aria-hidden":"true"},"#"),s(" Starting a Local Validator")],-1),h=n("p",null,"\uB2F9\uC2E0\uC758 Program \uCF54\uB4DC\uB97C \uB85C\uCEEC\uC5D0\uC11C \uD14C\uC2A4\uD2B8\uD558\uB294 \uAC83\uC740 devnet\uC5D0\uC11C \uD14C\uC2A4\uD2B8\uD558\uB294 \uAC83\uBCF4\uB2E4 \uB354 \uC2E0\uB8B0\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uADF8\uB9AC\uACE0 devnet\uC5D0 \uBCF4\uB0B4\uAE30 \uC804\uC5D0 \uD14C\uC2A4\uD2B8\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.",-1),_=s("solana tool suite"),w=s("\uB97C \uC124\uCE58\uD558\uACE0 \uC2E4\uD589\uD568\uC73C\uB85C\uC368 local-test-validator\uB97C \uAD6C\uCD95\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4."),f=m(`
    solana-test-validator
    +import{_ as u,r as l,o as i,c as r,a as n,b as t,w as a,F as k,d as s,e as b}from"./app.2fbb9e96.js";const m={},d=n("h1",{id:"local-development",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#local-development","aria-hidden":"true"},"#"),s(" Local Development")],-1),g=n("h2",{id:"starting-a-local-validator",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#starting-a-local-validator","aria-hidden":"true"},"#"),s(" Starting a Local Validator")],-1),h=n("p",null,"\uB2F9\uC2E0\uC758 Program \uCF54\uB4DC\uB97C \uB85C\uCEEC\uC5D0\uC11C \uD14C\uC2A4\uD2B8\uD558\uB294 \uAC83\uC740 devnet\uC5D0\uC11C \uD14C\uC2A4\uD2B8\uD558\uB294 \uAC83\uBCF4\uB2E4 \uB354 \uC2E0\uB8B0\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uADF8\uB9AC\uACE0 devnet\uC5D0 \uBCF4\uB0B4\uAE30 \uC804\uC5D0 \uD14C\uC2A4\uD2B8\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.",-1),_=s("solana tool suite"),w=s("\uB97C \uC124\uCE58\uD558\uACE0 \uC2E4\uD589\uD568\uC73C\uB85C\uC368 local-test-validator\uB97C \uAD6C\uCD95\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4."),f=b(`
    solana-test-validator
     

    local-test-validator\uB97C \uC0AC\uC6A9\uD558\uB294 \uAC83\uC740 \uC544\uB798\uC758 \uC774\uC810\uB4E4\uC744 \uAC00\uC9C0\uACE0 \uC788\uC2B5\uB2C8\uB2E4:

    • RPC \uC81C\uD55C\uC774 \uC5C6\uC74C
    • airdrop \uC81C\uD55C\uC774 \uC5C6\uC74C
    • \uC9C1\uC811\uC801\uC778 on-chain \uD504\uB85C\uADF8\uB7A8 \uBC30\uD3EC (--bpf-program ...)
    • public cluster\uB85C\uBD80\uD130 Program\uB4E4\uC744 \uD3EC\uD568\uD55C Account\uB4E4\uC5D0 \uB300\uD55C \uBCF5\uC0AC (--clone ...)
    • Transaction \uD788\uC2A4\uD1A0\uB9AC \uC720\uC9C0\uC5D0 \uB300\uD55C \uC124\uC815 \uAC00\uB2A5 (--limit-ledger-size ...)
    • epoch \uAE38\uC774\uC5D0 \uB300\uD55C \uC124\uC815 \uAC00\uB2A5 (--slots-per-epoch ...)
    • \uC784\uC758\uC758 slot\uC73C\uB85C \uAC74\uB108\uB6F0\uAE30 (--warp-slot ...)

    Connecting to Environments

    Solana\uC5D0\uC11C \uAC1C\uBC1C\uD560 \uB54C \uC6B0\uB9AC\uB294 \uD2B9\uC800 RPC API endpoint\uC5D0 \uC5F0\uACB0\uD560 \uD544\uC694\uAC00 \uC788\uC744 \uAC83\uC785\uB2C8\uB2E4. Solana\uB294 3 \uAC1C\uC758 public \uAC1C\uBC1C \uD658\uACBD\uC744 \uAC00\uC9C0\uACE0 \uC788\uC2B5\uB2C8\uB2E4.

    • mainnet-beta https://api.mainnet-beta.solana.com
    • devnet https://api.devnet.solana.com
    • testnet https://api.testnet.solana.com
    `,6),y=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" clusterApiUrl"),n("span",{class:"token punctuation"},","),s(" Connection "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -9,40 +9,58 @@ import{_ as u,r as l,o as i,c as r,a as n,b as t,w as a,F as k,d as s,e as m}fro client `),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.mainnet-beta.solana.com"'),n("span",{class:"token punctuation"},")"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),x=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("client "),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.mainnet-beta.solana.com"'),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),S=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),S=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + Connection `),n("span",{class:"token function"},"connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.mainnet-beta.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token keyword"},"return"),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),A=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[s("Connection "),n("span",{class:"token function"},"connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.mainnet-beta.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),R=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("commitment_config"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"let"),s(" rpc_url "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"String"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.mainnet-beta.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"let"),s(" client "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new_with_commitment"),n("span",{class:"token punctuation"},"("),s("rpc_url"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"confirmed"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),A=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" rpc_url "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"String"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.mainnet-beta.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),L=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" rpc_url "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"String"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.mainnet-beta.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"let"),s(" client "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new_with_commitment"),n("span",{class:"token punctuation"},"("),s("rpc_url"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"confirmed"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),R=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana config "),n("span",{class:"token builtin class-name"},"set"),s(` --url https://api.mainnet-beta.solana.com -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),L=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana config "),n("span",{class:"token builtin class-name"},"set"),s(` --url https://api.mainnet-beta.solana.com -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),P=n("p",null,"\uC544\uB798 \uB0B4\uC6A9\uC5D0 \uB530\uB77C, \uB2F9\uC2E0\uC740 \uB85C\uCEEC\uC774\uAC70\uB098 \uC6D0\uACA9\uC5D0\uC11C \uC2E4\uD589\uD558\uB294 \uC0AC\uC124 cluster\uC5D0\uB3C4 \uC5F0\uACB0\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.",-1),T=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),P=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana config "),n("span",{class:"token builtin class-name"},"set"),s(` --url https://api.mainnet-beta.solana.com +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),T=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana config "),n("span",{class:"token builtin class-name"},"set"),s(` --url https://api.mainnet-beta.solana.com +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),I=n("p",null,"\uC544\uB798 \uB0B4\uC6A9\uC5D0 \uB530\uB77C, \uB2F9\uC2E0\uC740 \uB85C\uCEEC\uC774\uAC70\uB098 \uC6D0\uACA9\uC5D0\uC11C \uC2E4\uD589\uD558\uB294 \uC0AC\uC124 cluster\uC5D0\uB3C4 \uC5F0\uACB0\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.",-1),O=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token comment"},"// This will connect you to your local validator"),s(` `),n("span",{class:"token keyword"},"const"),s(" connection "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token string"},'"confirmed"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),O=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" connection "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token string"},'"confirmed"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),K=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" connection "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token string"},'"confirmed"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),M=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("api "),n("span",{class:"token keyword"},"import"),s(` Client client `),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},")"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1),E=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[s("client "),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),I=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),U=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + Connection `),n("span",{class:"token function"},"connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token keyword"},"return"),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br")])],-1),j=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[s("Connection "),n("span",{class:"token function"},"connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),V=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("commitment_config"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"let"),s(" rpc_url "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"String"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"let"),s(" client "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new_with_commitment"),n("span",{class:"token punctuation"},"("),s("rpc_url"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"confirmed"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),K=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" rpc_url "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"String"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),W=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" rpc_url "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"String"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"http://127.0.0.1:8899"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"let"),s(" client "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new_with_commitment"),n("span",{class:"token punctuation"},"("),s("rpc_url"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"confirmed"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),U=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana config "),n("span",{class:"token builtin class-name"},"set"),s(` --url http://privaterpc.com -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),j=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana config "),n("span",{class:"token builtin class-name"},"set"),s(` --url http://privaterpc.com -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),V=n("h2",{id:"subscribing-to-events",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#subscribing-to-events","aria-hidden":"true"},"#"),s(" Subscribing to Events")],-1),W=n("p",null,"Websocket\uB4E4\uC740 \uB2F9\uC2E0\uC774 \uD2B9\uC815 \uC774\uBCA4\uD2B8\uB4E4\uC744 \uAD6C\uB3C5\uD560 \uC218 \uC788\uB294 pub/sub \uC778\uD130\uD398\uC774\uC2A4\uB97C \uC81C\uACF5\uD569\uB2C8\uB2E4. \uC7A6\uC740 \uC5C5\uB370\uC774\uD2B8\uB97C \uC704\uD574 \uC8FC\uAE30\uC801\uC73C\uB85C HTTP endpoint\uC5D0 \uD551\uC744 \uBCF4\uB0B4\uB294 \uAC83 \uB300\uC2E0\uC5D0, \uB2F9\uC2E0\uC740 \uC5C5\uB370\uC774\uD2B8\uAC00 \uBC1C\uC0DD\uD588\uC744 \uB54C \uBC14\uB85C \uC218\uC2E0\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.",-1),G=s("Solana\uC758 web3 "),H={href:"https://solana-labs.github.io/solana-web3.js/classes/Connection.html",target:"_blank",rel:"noopener noreferrer"},N=n("code",null,"Connection",-1),X=s("\uC740 websocket endpoint\uB97C \uB9CC\uB4E4\uC5B4\uB0BC \uC218 \uC788\uACE0 \uB2F9\uC2E0\uC774 "),B=n("code",null,"Connection",-1),q=s(" \uC778\uC2A4\uD134\uC2A4\uB97C \uC0DD\uC131\uD560 \uB54C websocket client\uB97C \uB4F1\uB85D\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4. (see source code "),Z={href:"https://github.com/solana-labs/solana-web3.js/blob/45923ca00e4cc1ed079d8e55ecbee83e5b4dc174/src/connection.ts#L2100",target:"_blank",rel:"noopener noreferrer"},D=s("here"),F=s(")"),z=n("code",null,"Connection",-1),Q=s(" \uD074\uB798\uC2A4\uB294 \uC774\uBCA4\uD2B8 emmitter\uC640 \uAC19\uC774 "),J=n("code",null,"on",-1),Y=s("\uC73C\uB85C \uC2DC\uC791\uD558\uB294 pub/sub \uBA54\uC18C\uB4DC\uB97C \uB178\uCD9C\uD55C\uB2E4. \uB2F9\uC2E0\uC774 \uC774 listener \uBA54\uC18C\uB4DC\uB4E4\uC744 \uD638\uCD9C\uD560 \uB54C, \uC774\uAC83\uC740 "),$=n("code",null,"Connection",-1),nn=s(" \uC778\uC2A4\uD134\uC2A4\uC758 websocket client\uC5D0 \uC0C8\uB85C\uC6B4 \uAD6C\uB3C5\uC744 \uB4F1\uB85D\uD569\uB2C8\uB2E4. \uC544\uB798\uC5D0\uC11C \uC6B0\uB9AC\uAC00 \uC0AC\uC6A9\uD558\uB294 pub/sub \uC608\uC81C\uB294 "),sn={href:"https://solana-labs.github.io/solana-web3.js/classes/Connection.html#onAccountChange",target:"_blank",rel:"noopener noreferrer"},an=n("code",null,"onAccountChange",-1),tn=s("\uC785\uB2C8\uB2E4. \uC774 callbacck\uC740 \uC778\uC790\uB4E4\uC744 \uD1B5\uD574 \uC5C5\uB370\uC774\uD2B8\uB41C \uC0C1\uD0DC \uB370\uC774\uD130\uB97C \uC81C\uACF5\uD560 \uAC83\uC785\uB2C8\uB2E4. (see "),en={href:"https://solana-labs.github.io/solana-web3.js/modules.html#AccountChangeCallback",target:"_blank",rel:"noopener noreferrer"},on=n("code",null,"AccountChangeCallback",-1),cn=s(" as an example)."),ln=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" clusterApiUrl"),n("span",{class:"token punctuation"},","),s(" Connection"),n("span",{class:"token punctuation"},","),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),q=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana config "),n("span",{class:"token builtin class-name"},"set"),s(` --url http://privaterpc.com +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),G=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana config "),n("span",{class:"token builtin class-name"},"set"),s(` --url http://privaterpc.com +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),H=n("h2",{id:"subscribing-to-events",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#subscribing-to-events","aria-hidden":"true"},"#"),s(" Subscribing to Events")],-1),N=n("p",null,"Websocket\uB4E4\uC740 \uB2F9\uC2E0\uC774 \uD2B9\uC815 \uC774\uBCA4\uD2B8\uB4E4\uC744 \uAD6C\uB3C5\uD560 \uC218 \uC788\uB294 pub/sub \uC778\uD130\uD398\uC774\uC2A4\uB97C \uC81C\uACF5\uD569\uB2C8\uB2E4. \uC7A6\uC740 \uC5C5\uB370\uC774\uD2B8\uB97C \uC704\uD574 \uC8FC\uAE30\uC801\uC73C\uB85C HTTP endpoint\uC5D0 \uD551\uC744 \uBCF4\uB0B4\uB294 \uAC83 \uB300\uC2E0\uC5D0, \uB2F9\uC2E0\uC740 \uC5C5\uB370\uC774\uD2B8\uAC00 \uBC1C\uC0DD\uD588\uC744 \uB54C \uBC14\uB85C \uC218\uC2E0\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.",-1),X=s("Solana\uC758 web3 "),B={href:"https://solana-labs.github.io/solana-web3.js/classes/Connection.html",target:"_blank",rel:"noopener noreferrer"},Z=n("code",null,"Connection",-1),D=s("\uC740 websocket endpoint\uB97C \uB9CC\uB4E4\uC5B4\uB0BC \uC218 \uC788\uACE0 \uB2F9\uC2E0\uC774 "),F=n("code",null,"Connection",-1),z=s(" \uC778\uC2A4\uD134\uC2A4\uB97C \uC0DD\uC131\uD560 \uB54C websocket client\uB97C \uB4F1\uB85D\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4. (see source code "),Q={href:"https://github.com/solana-labs/solana-web3.js/blob/45923ca00e4cc1ed079d8e55ecbee83e5b4dc174/src/connection.ts#L2100",target:"_blank",rel:"noopener noreferrer"},J=s("here"),Y=s(")"),$=n("code",null,"Connection",-1),nn=s(" \uD074\uB798\uC2A4\uB294 \uC774\uBCA4\uD2B8 emmitter\uC640 \uAC19\uC774 "),sn=n("code",null,"on",-1),an=s("\uC73C\uB85C \uC2DC\uC791\uD558\uB294 pub/sub \uBA54\uC18C\uB4DC\uB97C \uB178\uCD9C\uD55C\uB2E4. \uB2F9\uC2E0\uC774 \uC774 listener \uBA54\uC18C\uB4DC\uB4E4\uC744 \uD638\uCD9C\uD560 \uB54C, \uC774\uAC83\uC740 "),tn=n("code",null,"Connection",-1),en=s(" \uC778\uC2A4\uD134\uC2A4\uC758 websocket client\uC5D0 \uC0C8\uB85C\uC6B4 \uAD6C\uB3C5\uC744 \uB4F1\uB85D\uD569\uB2C8\uB2E4. \uC544\uB798\uC5D0\uC11C \uC6B0\uB9AC\uAC00 \uC0AC\uC6A9\uD558\uB294 pub/sub \uC608\uC81C\uB294 "),on={href:"https://solana-labs.github.io/solana-web3.js/classes/Connection.html#onAccountChange",target:"_blank",rel:"noopener noreferrer"},cn=n("code",null,"onAccountChange",-1),ln=s("\uC785\uB2C8\uB2E4. \uC774 callbacck\uC740 \uC778\uC790\uB4E4\uC744 \uD1B5\uD574 \uC5C5\uB370\uC774\uD2B8\uB41C \uC0C1\uD0DC \uB370\uC774\uD130\uB97C \uC81C\uACF5\uD560 \uAC83\uC785\uB2C8\uB2E4. (see "),pn={href:"https://solana-labs.github.io/solana-web3.js/modules.html#AccountChangeCallback",target:"_blank",rel:"noopener noreferrer"},un=n("code",null,"AccountChangeCallback",-1),rn=s(" as an example)."),kn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" clusterApiUrl"),n("span",{class:"token punctuation"},","),s(" Connection"),n("span",{class:"token punctuation"},","),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token comment"},"// Establish new connect to devnet - websocket client connected to devnet will also be registered here"),s(` @@ -59,7 +77,7 @@ client `),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"t `),n("span",{class:"token string"},'"confirmed"'),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br")])],-1),pn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token comment"},"// Establish new connect to devnet - websocket client connected to devnet will also be registered here"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br")])],-1),bn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token comment"},"// Establish new connect to devnet - websocket client connected to devnet will also be registered here"),s(` `),n("span",{class:"token keyword"},"const"),s(" connection "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"clusterApiUrl"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"devnet"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token string"},'"confirmed"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token comment"},"// Create a test wallet to listen to"),s(` @@ -72,8 +90,8 @@ connection`),n("span",{class:"token punctuation"},"."),n("span",{class:"token fu `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Updated account info: "'),n("span",{class:"token punctuation"},","),s(" updatedAccountInfo"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token string"},'"confirmed"'),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br")])],-1),un=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(` asyncio -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br")])],-1),mn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(` asyncio +`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair `),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("websocket_api "),n("span",{class:"token keyword"},"import"),s(` connect `),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token keyword"},"def"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},":"),s(` @@ -81,7 +99,7 @@ connection`),n("span",{class:"token punctuation"},"."),n("span",{class:"token fu `),n("span",{class:"token comment"},"# Create a Test Wallet"),s(` wallet `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"# Subscribe to the Test wallet to listen for events"),s(` - `),n("span",{class:"token keyword"},"await"),s(" websocket"),n("span",{class:"token punctuation"},"."),s("account_subscribe"),n("span",{class:"token punctuation"},"("),s("wallet"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),s(` + `),n("span",{class:"token keyword"},"await"),s(" websocket"),n("span",{class:"token punctuation"},"."),s("account_subscribe"),n("span",{class:"token punctuation"},"("),s("wallet"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"# Capture response from account subscription "),s(` first_resp `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" websocket"),n("span",{class:"token punctuation"},"."),s("recv"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Subscription successful with id {}, listening for events \\n"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("first_resp"),n("span",{class:"token punctuation"},"."),s("result"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` @@ -89,17 +107,66 @@ connection`),n("span",{class:"token punctuation"},"."),n("span",{class:"token fu `),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("updated_account_info"),n("span",{class:"token punctuation"},")"),s(` asyncio`),n("span",{class:"token punctuation"},"."),s("run"),n("span",{class:"token punctuation"},"("),s("main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br")])],-1),rn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token keyword"},"with"),s(" connect"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"wss://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token keyword"},"as"),s(" websocket"),n("span",{class:"token punctuation"},":"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br")])],-1),dn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token keyword"},"with"),s(" connect"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"wss://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token keyword"},"as"),s(" websocket"),n("span",{class:"token punctuation"},":"),s(` `),n("span",{class:"token comment"},"# Create a Test Wallet"),s(` wallet `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"# Subscribe to the Test wallet to listen for events"),s(` - `),n("span",{class:"token keyword"},"await"),s(" websocket"),n("span",{class:"token punctuation"},"."),s("account_subscribe"),n("span",{class:"token punctuation"},"("),s("wallet"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),s(` + `),n("span",{class:"token keyword"},"await"),s(" websocket"),n("span",{class:"token punctuation"},"."),s("account_subscribe"),n("span",{class:"token punctuation"},"("),s("wallet"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"# Capture response from account subscription "),s(` first_resp `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" websocket"),n("span",{class:"token punctuation"},"."),s("recv"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Subscription successful with id {}, listening for events \\n"'),n("span",{class:"token punctuation"},"."),n("span",{class:"token builtin"},"format"),n("span",{class:"token punctuation"},"("),s("first_resp"),n("span",{class:"token punctuation"},"."),s("result"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` updated_account_info `),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" websocket"),n("span",{class:"token punctuation"},"."),s("recv"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token keyword"},"print"),n("span",{class:"token punctuation"},"("),s("updated_account_info"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),kn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("pubsub_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"PubsubClient"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),gn=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token comment"},"// clang++ on_account_change.cpp -o on_account_change -std=c++17 -lssl -lcrypto -lsodium"),s(` + +`),n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + Connection `),n("span",{class:"token function"},"connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"int"),s(" subscriptionId "),n("span",{class:"token operator"},"="),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"on_account_change"),n("span",{class:"token punctuation"},"("),s("key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token punctuation"},"["),n("span",{class:"token operator"},"&"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},"("),s("Result"),n("span",{class:"token operator"},"<"),s("Account"),n("span",{class:"token operator"},">"),s(" result"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + Account account `),n("span",{class:"token operator"},"="),s(" result"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"owner = "'),s(),n("span",{class:"token operator"},"<<"),s(" account"),n("span",{class:"token punctuation"},"."),s("owner"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"lamports = "'),s(),n("span",{class:"token operator"},"<<"),s(" account"),n("span",{class:"token punctuation"},"."),s("lamports "),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"data = "'),s(),n("span",{class:"token operator"},"<<"),s(" account"),n("span",{class:"token punctuation"},"."),s("data "),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"executable = "'),s(),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token punctuation"},"("),s("account"),n("span",{class:"token punctuation"},"."),s("executable "),n("span",{class:"token operator"},"?"),s(),n("span",{class:"token string"},'"true"'),s(),n("span",{class:"token operator"},":"),s(),n("span",{class:"token string"},'"false"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token function"},"sleep"),n("span",{class:"token punctuation"},"("),n("span",{class:"token number"},"1"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + std`),n("span",{class:"token double-colon punctuation"},"::"),s("string tx_hash "),n("span",{class:"token operator"},"="),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"request_airdrop"),n("span",{class:"token punctuation"},"("),s("key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"tx hash = "'),s(),n("span",{class:"token operator"},"<<"),s(" tx_hash "),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"for"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"int"),s(" i "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(" i "),n("span",{class:"token operator"},"<"),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},";"),s(" i"),n("span",{class:"token operator"},"++"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + connection`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"poll"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token function"},"sleep"),n("span",{class:"token punctuation"},"("),n("span",{class:"token number"},"1"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token punctuation"},"}"),s(` + + connection`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"remove_account_listener"),n("span",{class:"token punctuation"},"("),s("subscriptionId"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"return"),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br")])],-1),hn=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(" subscriptionId "),n("span",{class:"token operator"},"="),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"on_account_change"),n("span",{class:"token punctuation"},"("),s("key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token punctuation"},"["),n("span",{class:"token operator"},"&"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},"("),s("Result"),n("span",{class:"token operator"},"<"),s("Account"),n("span",{class:"token operator"},">"),s(" result"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + Account account `),n("span",{class:"token operator"},"="),s(" result"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"owner = "'),s(),n("span",{class:"token operator"},"<<"),s(" account"),n("span",{class:"token punctuation"},"."),s("owner"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"to_base58"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"lamports = "'),s(),n("span",{class:"token operator"},"<<"),s(" account"),n("span",{class:"token punctuation"},"."),s("lamports "),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"data = "'),s(),n("span",{class:"token operator"},"<<"),s(" account"),n("span",{class:"token punctuation"},"."),s("data "),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"executable = "'),s(),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token punctuation"},"("),s("account"),n("span",{class:"token punctuation"},"."),s("executable "),n("span",{class:"token operator"},"?"),s(),n("span",{class:"token string"},'"true"'),s(),n("span",{class:"token operator"},":"),s(),n("span",{class:"token string"},'"false"'),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"for"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"int"),s(" i "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(" i "),n("span",{class:"token operator"},"<"),s(),n("span",{class:"token number"},"10"),n("span",{class:"token punctuation"},";"),s(" i"),n("span",{class:"token operator"},"++"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + connection`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"poll"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token function"},"sleep"),n("span",{class:"token punctuation"},"("),n("span",{class:"token number"},"1"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` + +connection`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"remove_account_listener"),n("span",{class:"token punctuation"},"("),s("subscriptionId"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br")])],-1),_n=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("pubsub_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"PubsubClient"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_config"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcAccountInfoConfig"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("commitment_config"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("signature"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"Signer"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` @@ -136,7 +203,7 @@ asyncio`),n("span",{class:"token punctuation"},"."),s("run"),n("span",{class:"to `),n("span",{class:"token macro property"},"println!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Errooooor"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br")])],-1),mn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" ws_url "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"String"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"wss://api.devnet.solana.com/"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br")])],-1),wn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" ws_url "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"String"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"from"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"wss://api.devnet.solana.com/"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"let"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"mut"),s(" client"),n("span",{class:"token punctuation"},","),s(" receiver"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"PubsubClient"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"account_subscribe"),n("span",{class:"token punctuation"},"("),s(` `),n("span",{class:"token operator"},"&"),s("ws_url"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token operator"},"&"),s("pubkey"),n("span",{class:"token punctuation"},","),s(` @@ -148,7 +215,7 @@ asyncio`),n("span",{class:"token punctuation"},"."),s("run"),n("span",{class:"to `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"let"),s(" message "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"match"),s(" receiver"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"recv"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token macro property"},"println!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"{:?}"'),n("span",{class:"token punctuation"},","),s(" message"),n("span",{class:"token punctuation"},")"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br")])],-1),bn=n("h2",{id:"getting-test-sol",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#getting-test-sol","aria-hidden":"true"},"#"),s(" Getting Test SOL")],-1),dn=n("p",null,"\uB85C\uCEEC\uC5D0\uC11C \uC791\uC5C5\uD560 \uB54C \uB2F9\uC2E0\uC740 Transaction\uC744 \uBCF4\uB0B4\uAE30 \uC704\uD574 SOL\uC774 \uD544\uC694\uD569\uB2C8\uB2E4. non-mainnet \uD658\uACBD\uC5D0\uC11C \uB2F9\uC2E0\uC740 airdrop \uD574\uC11C \uB2F9\uC2E0\uC758 Address\uC5D0 SOL\uC744 \uBC1B\uC744 \uC218 \uC788\uC2B5\uB2C8\uB2E4.",-1),gn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection"),n("span",{class:"token punctuation"},","),s(" Keypair"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token constant"},"LAMPORTS_PER_SOL"),s(),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br")])],-1),fn=n("h2",{id:"getting-test-sol",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#getting-test-sol","aria-hidden":"true"},"#"),s(" Getting Test SOL")],-1),yn=n("p",null,"\uB85C\uCEEC\uC5D0\uC11C \uC791\uC5C5\uD560 \uB54C \uB2F9\uC2E0\uC740 Transaction\uC744 \uBCF4\uB0B4\uAE30 \uC704\uD574 SOL\uC774 \uD544\uC694\uD569\uB2C8\uB2E4. non-mainnet \uD658\uACBD\uC5D0\uC11C \uB2F9\uC2E0\uC740 airdrop \uD574\uC11C \uB2F9\uC2E0\uC758 Address\uC5D0 SOL\uC744 \uBC1B\uC744 \uC218 \uC788\uC2B5\uB2C8\uB2E4.",-1),vn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection"),n("span",{class:"token punctuation"},","),s(" Keypair"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token constant"},"LAMPORTS_PER_SOL"),s(),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` @@ -166,13 +233,13 @@ asyncio`),n("span",{class:"token punctuation"},"."),s("run"),n("span",{class:"to signature `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br")])],-1),hn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" airdropSignature "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"requestAirdrop"),n("span",{class:"token punctuation"},"("),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br")])],-1),Cn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" airdropSignature "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"requestAirdrop"),n("span",{class:"token punctuation"},"("),s(` keypair`),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token constant"},"LAMPORTS_PER_SOL"),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"await"),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"confirmTransaction"),n("span",{class:"token punctuation"},"("),s("airdropSignature"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),_n=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br")])],-1),xn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair `),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("api "),n("span",{class:"token keyword"},"import"),s(` Client wallet `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(` @@ -180,14 +247,32 @@ wallet `),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:" client `),n("span",{class:"token operator"},"="),s(" Client"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"#Input Airdrop amount in LAMPORTS"),s(` -client`),n("span",{class:"token punctuation"},"."),s("request_airdrop"),n("span",{class:"token punctuation"},"("),s("wallet"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"1000000000"),n("span",{class:"token punctuation"},")"),s(` +client`),n("span",{class:"token punctuation"},"."),s("request_airdrop"),n("span",{class:"token punctuation"},"("),s("wallet"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"1000000000"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"#Airdrops 1 SOL"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),wn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token comment"},"#Input Airdrop amount in LAMPORTS"),s(` -client`),n("span",{class:"token punctuation"},"."),s("request_airdrop"),n("span",{class:"token punctuation"},"("),s("wallet"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"1000000000"),n("span",{class:"token punctuation"},")"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),Sn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token comment"},"#Input Airdrop amount in LAMPORTS"),s(` +client`),n("span",{class:"token punctuation"},"."),s("request_airdrop"),n("span",{class:"token punctuation"},"("),s("wallet"),n("span",{class:"token punctuation"},"."),s("pubkey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token number"},"1000000000"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"#Airdrops 1 SOL"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),fn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),An=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[n("span",{class:"token comment"},"// clang++ request_airdrop.cpp -o request_airdrop -std=c++17 -lssl -lcrypto -lsodium"),s(` + +`),n("span",{class:"token macro property"},[n("span",{class:"token directive-hash"},"#"),n("span",{class:"token directive keyword"},"include"),s(),n("span",{class:"token string"},'"solana.hpp"')]),s(` + +`),n("span",{class:"token keyword"},"using"),s(),n("span",{class:"token keyword"},"namespace"),s(" many"),n("span",{class:"token double-colon punctuation"},"::"),s("solana"),n("span",{class:"token punctuation"},";"),s(` + +`),n("span",{class:"token keyword"},"int"),s(),n("span",{class:"token function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` + Connection `),n("span",{class:"token function"},"connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.devnet.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"auto"),s(" key_pair "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token double-colon punctuation"},"::"),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + std`),n("span",{class:"token double-colon punctuation"},"::"),s("string tx_hash "),n("span",{class:"token operator"},"="),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"request_airdrop"),n("span",{class:"token punctuation"},"("),s("key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + + std`),n("span",{class:"token double-colon punctuation"},"::"),s("cout "),n("span",{class:"token operator"},"<<"),s(),n("span",{class:"token string"},'"tx hash = "'),s(),n("span",{class:"token operator"},"<<"),s(" tx_hash "),n("span",{class:"token operator"},"<<"),s(" std"),n("span",{class:"token double-colon punctuation"},"::"),s("endl"),n("span",{class:"token punctuation"},";"),s(` + + `),n("span",{class:"token keyword"},"return"),s(),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br")])],-1),Rn=n("div",{class:"language-cpp ext-cpp line-numbers-mode"},[n("pre",{class:"language-cpp"},[n("code",null,[s("connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"request_airdrop"),n("span",{class:"token punctuation"},"("),s("key_pair"),n("span",{class:"token punctuation"},"."),s("public_key"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"unwrap"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Ln=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_client"),n("span",{class:"token punctuation"},"::"),s("rpc_client"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"RpcClient"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("commitment_config"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"CommitmentConfig"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("native_token"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token constant"},"LAMPORTS_PER_SOL"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("solana_sdk"),n("span",{class:"token punctuation"},"::"),s("signature"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"Keypair"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"Signer"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` @@ -209,7 +294,7 @@ client`),n("span",{class:"token punctuation"},"."),s("request_airdrop"),n("span" `),n("span",{class:"token class-name"},"Err"),n("span",{class:"token punctuation"},"("),s("_"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token macro property"},"println!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Error requesting airdrop"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br")])],-1),yn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"match"),s(" client"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"request_airdrop"),n("span",{class:"token punctuation"},"("),n("span",{class:"token operator"},"&"),s("pubkey"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token constant"},"LAMPORTS_PER_SOL"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br")])],-1),Pn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"match"),s(" client"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"request_airdrop"),n("span",{class:"token punctuation"},"("),n("span",{class:"token operator"},"&"),s("pubkey"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token constant"},"LAMPORTS_PER_SOL"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token class-name"},"Ok"),n("span",{class:"token punctuation"},"("),s("sig"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token keyword"},"loop"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"if"),s(),n("span",{class:"token keyword"},"let"),s(),n("span",{class:"token class-name"},"Ok"),n("span",{class:"token punctuation"},"("),s("confirmed"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"="),s(" client"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"confirm_transaction"),n("span",{class:"token punctuation"},"("),n("span",{class:"token operator"},"&"),s("sig"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"if"),s(" confirmed "),n("span",{class:"token punctuation"},"{"),s(` @@ -220,21 +305,21 @@ client`),n("span",{class:"token punctuation"},"."),s("request_airdrop"),n("span" `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token class-name"},"Err"),n("span",{class:"token punctuation"},"("),s("_"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token macro property"},"println!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Error requesting airdrop"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),vn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana airdrop "),n("span",{class:"token number"},"1"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),Tn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana airdrop "),n("span",{class:"token number"},"1"),s(` `),n("span",{class:"token comment"},"# Return"),s(` `),n("span",{class:"token comment"},'# "1 SOL"'),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),Cn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana airdrop "),n("span",{class:"token number"},"1"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),xn=n("h2",{id:"using-mainnet-accounts-and-programs",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#using-mainnet-accounts-and-programs","aria-hidden":"true"},"#"),s(" Using Mainnet Accounts and Programs")],-1),Sn=n("p",null,"\uB85C\uCEEC \uD14C\uC2A4\uD2B8\uB294 \uC885\uC885 mainnet\uC5D0 \uC788\uB294 Program\uB4E4\uACFC Account\uB4E4\uC5D0 \uC758\uC874\uD55C\uB2E4. Solana CLI\uB294 \uC544\uB798 \uB450 \uAC00\uC9C0\uB97C \uD5C8\uB77D\uD569\uB2C8\uB2E4:",-1),An=n("ul",null,[n("li",null,"Program\uB4E4\uACFC Account\uB4E4\uC744 \uB2E4\uC6B4\uB85C\uB4DC\uD558\uB294 \uAC83"),n("li",null,"Program\uB4E4\uACFC Account\uB4E4\uC744 local validator\uC5D0 \uC62C\uB9AC\uB294 \uAC83")],-1),Rn=n("h3",{id:"how-to-load-accounts-from-mainnet",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-load-accounts-from-mainnet","aria-hidden":"true"},"#"),s(" How to load accounts from mainnet")],-1),Ln=n("p",null,"SRN token mint account\uB97C \uD30C\uC77C\uB85C \uB2E4\uC6B4\uB85C\uB4DC\uD558\uB294 \uAC83\uC774 \uAC00\uB2A5\uD569\uB2C8\uB2E4:",-1),Pn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# solana account -u --output --output-file
    "),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),In=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[s("solana airdrop "),n("span",{class:"token number"},"1"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),On=n("h2",{id:"using-mainnet-accounts-and-programs",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#using-mainnet-accounts-and-programs","aria-hidden":"true"},"#"),s(" Using Mainnet Accounts and Programs")],-1),Kn=n("p",null,"\uB85C\uCEEC \uD14C\uC2A4\uD2B8\uB294 \uC885\uC885 mainnet\uC5D0 \uC788\uB294 Program\uB4E4\uACFC Account\uB4E4\uC5D0 \uC758\uC874\uD55C\uB2E4. Solana CLI\uB294 \uC544\uB798 \uB450 \uAC00\uC9C0\uB97C \uD5C8\uB77D\uD569\uB2C8\uB2E4:",-1),Mn=n("ul",null,[n("li",null,"Program\uB4E4\uACFC Account\uB4E4\uC744 \uB2E4\uC6B4\uB85C\uB4DC\uD558\uB294 \uAC83"),n("li",null,"Program\uB4E4\uACFC Account\uB4E4\uC744 local validator\uC5D0 \uC62C\uB9AC\uB294 \uAC83")],-1),En=n("h3",{id:"how-to-load-accounts-from-mainnet",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-load-accounts-from-mainnet","aria-hidden":"true"},"#"),s(" How to load accounts from mainnet")],-1),Un=n("p",null,"SRN token mint account\uB97C \uD30C\uC77C\uB85C \uB2E4\uC6B4\uB85C\uB4DC\uD558\uB294 \uAC83\uC774 \uAC00\uB2A5\uD569\uB2C8\uB2E4:",-1),jn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# solana account -u --output --output-file
    "),s(` solana account -u m --output json-compact --output-file SRM_token.json SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),Tn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana account -u m --output json-compact --output-file SRM_token.json SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),On=n("p",null,"validator\uB97C \uC2DC\uC791\uD560 \uB54C \uC774 Account \uD30C\uC77C\uACFC \uBAA9\uC801\uC9C0 address (local cluster\uC5D0 \uC788\uB294)\uB97C \uB118\uAE40\uC73C\uB85C\uC368 \uB85C\uCEEC \uB137\uC5D0 \uC62C\uB9AC\uB294 \uAC83\uC774 \uAC00\uB2A5\uD569\uB2C8\uB2E4:",-1),Mn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-test-validator --account SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt SRM_token.json --reset -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),En=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# solana-test-validator --account
    --reset"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),Vn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana account -u m --output json-compact --output-file SRM_token.json SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Wn=n("p",null,"validator\uB97C \uC2DC\uC791\uD560 \uB54C \uC774 Account \uD30C\uC77C\uACFC \uBAA9\uC801\uC9C0 address (local cluster\uC5D0 \uC788\uB294)\uB97C \uB118\uAE40\uC73C\uB85C\uC368 \uB85C\uCEEC \uB137\uC5D0 \uC62C\uB9AC\uB294 \uAC83\uC774 \uAC00\uB2A5\uD569\uB2C8\uB2E4:",-1),qn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-test-validator --account SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt SRM_token.json --reset +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Gn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# solana-test-validator --account
    --reset"),s(` solana-test-validator --account SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt SRM_token.json --reset -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),In=n("h3",{id:"how-to-load-programs-from-mainnet",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-load-programs-from-mainnet","aria-hidden":"true"},"#"),s(" How to load programs from mainnet")],-1),Kn=n("p",null,"\uBE44\uC2B7\uD558\uAC8C Serum Dex v3 \uD504\uB85C\uADF8\uB7A8\uC744 \uB2E4\uC6B4\uB85C\uB4DC\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4:",-1),Un=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# solana program dump -u
    "),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),Hn=n("h3",{id:"how-to-load-programs-from-mainnet",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-load-programs-from-mainnet","aria-hidden":"true"},"#"),s(" How to load programs from mainnet")],-1),Nn=n("p",null,"\uBE44\uC2B7\uD558\uAC8C Serum Dex v3 \uD504\uB85C\uADF8\uB7A8\uC744 \uB2E4\uC6B4\uB85C\uB4DC\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4:",-1),Xn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# solana program dump -u
    "),s(` solana program dump -u m 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin serum_dex_v3.so -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),jn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana program dump -u m 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin serum_dex_v3.so -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Vn=n("p",null,"validator\uB97C \uC2DC\uC791\uD560 \uB54C Program \uD30C\uC77C\uACFC \uBAA9\uC801\uC9C0 Address (local cluster\uC5D0 \uC788\uB294)\uB97C \uB118\uAE40\uC73C\uB85C\uC368 \uB85C\uCEEC \uB137\uC5D0 \uC62C\uB9AC\uB294 \uAC83\uC774 \uAC00\uB2A5\uD569\uB2C8\uB2E4:",-1),Wn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-test-validator --bpf-program 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin serum_dex_v3.so --reset -`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Gn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# solana-test-validator --bpf-program
    --reset"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),Bn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana program dump -u m 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin serum_dex_v3.so +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Zn=n("p",null,"validator\uB97C \uC2DC\uC791\uD560 \uB54C Program \uD30C\uC77C\uACFC \uBAA9\uC801\uC9C0 Address (local cluster\uC5D0 \uC788\uB294)\uB97C \uB118\uAE40\uC73C\uB85C\uC368 \uB85C\uCEEC \uB137\uC5D0 \uC62C\uB9AC\uB294 \uAC83\uC774 \uAC00\uB2A5\uD569\uB2C8\uB2E4:",-1),Dn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,`solana-test-validator --bpf-program 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin serum_dex_v3.so --reset +`)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),Fn=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token comment"},"# solana-test-validator --bpf-program
    --reset"),s(` solana-test-validator --bpf-program 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin serum_dex_v3.so --reset -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1);function Hn(Nn,Xn){const p=l("RouterLink"),e=l("SolanaCodeGroupItem"),o=l("SolanaCodeGroup"),c=l("ExternalLinkIcon");return i(),r(k,null,[d,g,h,n("p",null,[t(p,{to:"/getting-started/installation.html#install-cli"},{default:a(()=>[_]),_:1}),w]),f,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[y]),preview:a(()=>[v]),_:1}),t(e,{title:"Python"},{default:a(()=>[C]),preview:a(()=>[x]),_:1}),t(e,{title:"Rust"},{default:a(()=>[S]),preview:a(()=>[A]),_:1}),t(e,{title:"CLI"},{default:a(()=>[R]),preview:a(()=>[L]),_:1})]),_:1}),P,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[T]),preview:a(()=>[O]),_:1}),t(e,{title:"Python"},{default:a(()=>[M]),preview:a(()=>[E]),_:1}),t(e,{title:"Rust"},{default:a(()=>[I]),preview:a(()=>[K]),_:1}),t(e,{title:"CLI"},{default:a(()=>[U]),preview:a(()=>[j]),_:1})]),_:1}),V,W,n("p",null,[G,n("a",H,[N,t(c)]),X,B,q,n("a",Z,[D,t(c)]),F]),n("p",null,[z,Q,J,Y,$,nn,n("a",sn,[an,t(c)]),tn,n("a",en,[on,t(c)]),cn]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[ln]),preview:a(()=>[pn]),_:1}),t(e,{title:"Python"},{default:a(()=>[un]),preview:a(()=>[rn]),_:1}),t(e,{title:"Rust"},{default:a(()=>[kn]),preview:a(()=>[mn]),_:1})]),_:1}),bn,dn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[gn]),preview:a(()=>[hn]),_:1}),t(e,{title:"Python"},{default:a(()=>[_n]),preview:a(()=>[wn]),_:1}),t(e,{title:"Rust"},{default:a(()=>[fn]),preview:a(()=>[yn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[vn]),preview:a(()=>[Cn]),_:1})]),_:1}),xn,Sn,An,Rn,Ln,t(o,null,{default:a(()=>[t(e,{title:"CLI"},{default:a(()=>[Pn]),preview:a(()=>[Tn]),_:1})]),_:1}),On,t(o,null,{default:a(()=>[t(e,{title:"CLI"},{preview:a(()=>[Mn]),default:a(()=>[En]),_:1})]),_:1}),In,Kn,t(o,null,{default:a(()=>[t(e,{title:"CLI"},{default:a(()=>[Un]),preview:a(()=>[jn]),_:1})]),_:1}),Vn,t(o,null,{default:a(()=>[t(e,{title:"CLI"},{preview:a(()=>[Wn]),default:a(()=>[Gn]),_:1})]),_:1})],64)}var qn=u(b,[["render",Hn]]);export{qn as default}; +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1);function zn(Qn,Jn){const p=l("RouterLink"),e=l("SolanaCodeGroupItem"),o=l("SolanaCodeGroup"),c=l("ExternalLinkIcon");return i(),r(k,null,[d,g,h,n("p",null,[t(p,{to:"/getting-started/installation.html#install-cli"},{default:a(()=>[_]),_:1}),w]),f,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[y]),preview:a(()=>[v]),_:1}),t(e,{title:"Python"},{default:a(()=>[C]),preview:a(()=>[x]),_:1}),t(e,{title:"C++"},{default:a(()=>[S]),preview:a(()=>[A]),_:1}),t(e,{title:"Rust"},{default:a(()=>[R]),preview:a(()=>[L]),_:1}),t(e,{title:"CLI"},{default:a(()=>[P]),preview:a(()=>[T]),_:1})]),_:1}),I,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[O]),preview:a(()=>[K]),_:1}),t(e,{title:"Python"},{default:a(()=>[M]),preview:a(()=>[E]),_:1}),t(e,{title:"C++"},{default:a(()=>[U]),preview:a(()=>[j]),_:1}),t(e,{title:"Rust"},{default:a(()=>[V]),preview:a(()=>[W]),_:1}),t(e,{title:"CLI"},{default:a(()=>[q]),preview:a(()=>[G]),_:1})]),_:1}),H,N,n("p",null,[X,n("a",B,[Z,t(c)]),D,F,z,n("a",Q,[J,t(c)]),Y]),n("p",null,[$,nn,sn,an,tn,en,n("a",on,[cn,t(c)]),ln,n("a",pn,[un,t(c)]),rn]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[kn]),preview:a(()=>[bn]),_:1}),t(e,{title:"Python"},{default:a(()=>[mn]),preview:a(()=>[dn]),_:1}),t(e,{title:"C++"},{default:a(()=>[gn]),preview:a(()=>[hn]),_:1}),t(e,{title:"Rust"},{default:a(()=>[_n]),preview:a(()=>[wn]),_:1})]),_:1}),fn,yn,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[vn]),preview:a(()=>[Cn]),_:1}),t(e,{title:"Python"},{default:a(()=>[xn]),preview:a(()=>[Sn]),_:1}),t(e,{title:"C++"},{default:a(()=>[An]),preview:a(()=>[Rn]),_:1}),t(e,{title:"Rust"},{default:a(()=>[Ln]),preview:a(()=>[Pn]),_:1}),t(e,{title:"CLI"},{default:a(()=>[Tn]),preview:a(()=>[In]),_:1})]),_:1}),On,Kn,Mn,En,Un,t(o,null,{default:a(()=>[t(e,{title:"CLI"},{default:a(()=>[jn]),preview:a(()=>[Vn]),_:1})]),_:1}),Wn,t(o,null,{default:a(()=>[t(e,{title:"CLI"},{preview:a(()=>[qn]),default:a(()=>[Gn]),_:1})]),_:1}),Hn,Nn,t(o,null,{default:a(()=>[t(e,{title:"CLI"},{default:a(()=>[Xn]),preview:a(()=>[Bn]),_:1})]),_:1}),Zn,t(o,null,{default:a(()=>[t(e,{title:"CLI"},{preview:a(()=>[Dn]),default:a(()=>[Fn]),_:1})]),_:1})],64)}var $n=u(m,[["render",zn]]);export{$n as default}; diff --git a/docs/.vuepress/dist/assets/local-development.html.ccde500b.js b/docs/.vuepress/dist/assets/local-development.html.f0781937.js similarity index 96% rename from docs/.vuepress/dist/assets/local-development.html.ccde500b.js rename to docs/.vuepress/dist/assets/local-development.html.f0781937.js index 91857a88c..e45050dce 100644 --- a/docs/.vuepress/dist/assets/local-development.html.ccde500b.js +++ b/docs/.vuepress/dist/assets/local-development.html.f0781937.js @@ -1 +1 @@ -const e={key:"v-4d71f9d8",path:"/kr/references/local-development.html",title:"Local Development",lang:"kr-KR",frontmatter:{title:"Local Development",head:[["meta",{name:"title",content:"Solana Cookbook | Local Development"}],["meta",{name:"og:title",content:"Solana Cookbook | Local Development"}],["meta",{name:"description",content:"Setup Local Validator for local developer environment and Airdrop SOL. Learn about Local Development and more references for Building on Solana at The Solana cookbook."}],["meta",{name:"og:description",content:"Setup Local Validator and Airdrop SOL for building on Solana Locally. Learn about Local Development and more references for Building on Solana at The Solana cookbook."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"Starting a Local Validator",slug:"starting-a-local-validator",children:[]},{level:2,title:"Connecting to Environments",slug:"connecting-to-environments",children:[]},{level:2,title:"Subscribing to Events",slug:"subscribing-to-events",children:[]},{level:2,title:"Getting Test SOL",slug:"getting-test-sol",children:[]},{level:2,title:"Using Mainnet Accounts and Programs",slug:"using-mainnet-accounts-and-programs",children:[{level:3,title:"How to load accounts from mainnet",slug:"how-to-load-accounts-from-mainnet",children:[]},{level:3,title:"How to load programs from mainnet",slug:"how-to-load-programs-from-mainnet",children:[]}]}],git:{updatedTime:1672765954e3},filePathRelative:"kr/references/local-development.md"};export{e as data}; +const e={key:"v-4d71f9d8",path:"/kr/references/local-development.html",title:"Local Development",lang:"kr-KR",frontmatter:{title:"Local Development",head:[["meta",{name:"title",content:"Solana Cookbook | Local Development"}],["meta",{name:"og:title",content:"Solana Cookbook | Local Development"}],["meta",{name:"description",content:"Setup Local Validator for local developer environment and Airdrop SOL. Learn about Local Development and more references for Building on Solana at The Solana cookbook."}],["meta",{name:"og:description",content:"Setup Local Validator and Airdrop SOL for building on Solana Locally. Learn about Local Development and more references for Building on Solana at The Solana cookbook."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"Starting a Local Validator",slug:"starting-a-local-validator",children:[]},{level:2,title:"Connecting to Environments",slug:"connecting-to-environments",children:[]},{level:2,title:"Subscribing to Events",slug:"subscribing-to-events",children:[]},{level:2,title:"Getting Test SOL",slug:"getting-test-sol",children:[]},{level:2,title:"Using Mainnet Accounts and Programs",slug:"using-mainnet-accounts-and-programs",children:[{level:3,title:"How to load accounts from mainnet",slug:"how-to-load-accounts-from-mainnet",children:[]},{level:3,title:"How to load programs from mainnet",slug:"how-to-load-programs-from-mainnet",children:[]}]}],git:{updatedTime:1676666728e3},filePathRelative:"kr/references/local-development.md"};export{e as data}; diff --git a/docs/.vuepress/dist/assets/local-development.html.83f21871.js b/docs/.vuepress/dist/assets/local-development.html.f51b1aee.js similarity index 97% rename from docs/.vuepress/dist/assets/local-development.html.83f21871.js rename to docs/.vuepress/dist/assets/local-development.html.f51b1aee.js index a9340255b..ae584f2d4 100644 --- a/docs/.vuepress/dist/assets/local-development.html.83f21871.js +++ b/docs/.vuepress/dist/assets/local-development.html.f51b1aee.js @@ -1 +1 @@ -const e={key:"v-5f3377a5",path:"/th/references/local-development.html",title:"Local Development",lang:"th-TH",frontmatter:{title:"Local Development",head:[["meta",{name:"title",content:"\u0E04\u0E39\u0E48\u0E21\u0E37\u0E2D Solana | Local Development"}],["meta",{name:"og:title",content:"\u0E04\u0E39\u0E48\u0E21\u0E37\u0E2D Solana | Local Development"}],["meta",{name:"description",content:"\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07 Local Validator \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E1E\u0E31\u0E12\u0E19\u0E32\u0E1A\u0E19 local environment \u0E41\u0E25\u0E30\u0E17\u0E33\u0E01\u0E32\u0E23 Airdrop SOL. \u0E40\u0E23\u0E35\u0E22\u0E19\u0E23\u0E39\u0E49\u0E40\u0E01\u0E35\u0E48\u0E22\u0E27\u0E01\u0E31\u0E1A Local Development \u0E41\u0E25\u0E30 references \u0E2D\u0E37\u0E48\u0E19\u0E46 \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E44\u0E1B\u0E17\u0E33\u0E07\u0E32\u0E19\u0E1A\u0E19 Solana \u0E44\u0E14\u0E49\u0E17\u0E35\u0E48\u0E04\u0E39\u0E48\u0E21\u0E37\u0E2D Solana."}],["meta",{name:"og:description",content:"\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07 Local Validator \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E1E\u0E31\u0E12\u0E19\u0E32\u0E1A\u0E19 local environment \u0E41\u0E25\u0E30\u0E17\u0E33\u0E01\u0E32\u0E23 Airdrop SOL. \u0E40\u0E23\u0E35\u0E22\u0E19\u0E23\u0E39\u0E49\u0E40\u0E01\u0E35\u0E48\u0E22\u0E27\u0E01\u0E31\u0E1A Local Development \u0E41\u0E25\u0E30 references \u0E2D\u0E37\u0E48\u0E19\u0E46 \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E44\u0E1B\u0E17\u0E33\u0E07\u0E32\u0E19\u0E1A\u0E19 Solana \u0E44\u0E14\u0E49\u0E17\u0E35\u0E48\u0E04\u0E39\u0E48\u0E21\u0E37\u0E2D Solana."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"\u0E40\u0E23\u0E34\u0E48\u0E21\u0E43\u0E0A\u0E49 Local Validator",slug:"\u0E40\u0E23\u0E34\u0E48\u0E21\u0E43\u0E0A\u0E49-local-validator",children:[]},{level:2,title:"Connecting to Environments",slug:"connecting-to-environments",children:[]},{level:2,title:"Subscribing to Events",slug:"subscribing-to-events",children:[]},{level:2,title:"Getting Test SOL",slug:"getting-test-sol",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E43\u0E0A\u0E49 Mainnet Accounts \u0E41\u0E25\u0E30 Programs",slug:"\u0E27\u0E34\u0E18\u0E35\u0E43\u0E0A\u0E49-mainnet-accounts-\u0E41\u0E25\u0E30-programs",children:[{level:3,title:"\u0E27\u0E34\u0E18\u0E35 load accounts \u0E08\u0E32\u0E01 mainnet",slug:"\u0E27\u0E34\u0E18\u0E35-load-accounts-\u0E08\u0E32\u0E01-mainnet",children:[]},{level:3,title:"\u0E27\u0E34\u0E18\u0E35 load programs from mainnet",slug:"\u0E27\u0E34\u0E18\u0E35-load-programs-from-mainnet",children:[]}]}],git:{updatedTime:1660787553e3},filePathRelative:"th/references/local-development.md"};export{e as data}; +const e={key:"v-5f3377a5",path:"/th/references/local-development.html",title:"Local Development",lang:"th-TH",frontmatter:{title:"Local Development",head:[["meta",{name:"title",content:"\u0E04\u0E39\u0E48\u0E21\u0E37\u0E2D Solana | Local Development"}],["meta",{name:"og:title",content:"\u0E04\u0E39\u0E48\u0E21\u0E37\u0E2D Solana | Local Development"}],["meta",{name:"description",content:"\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07 Local Validator \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E1E\u0E31\u0E12\u0E19\u0E32\u0E1A\u0E19 local environment \u0E41\u0E25\u0E30\u0E17\u0E33\u0E01\u0E32\u0E23 Airdrop SOL. \u0E40\u0E23\u0E35\u0E22\u0E19\u0E23\u0E39\u0E49\u0E40\u0E01\u0E35\u0E48\u0E22\u0E27\u0E01\u0E31\u0E1A Local Development \u0E41\u0E25\u0E30 references \u0E2D\u0E37\u0E48\u0E19\u0E46 \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E44\u0E1B\u0E17\u0E33\u0E07\u0E32\u0E19\u0E1A\u0E19 Solana \u0E44\u0E14\u0E49\u0E17\u0E35\u0E48\u0E04\u0E39\u0E48\u0E21\u0E37\u0E2D Solana."}],["meta",{name:"og:description",content:"\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07 Local Validator \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E1E\u0E31\u0E12\u0E19\u0E32\u0E1A\u0E19 local environment \u0E41\u0E25\u0E30\u0E17\u0E33\u0E01\u0E32\u0E23 Airdrop SOL. \u0E40\u0E23\u0E35\u0E22\u0E19\u0E23\u0E39\u0E49\u0E40\u0E01\u0E35\u0E48\u0E22\u0E27\u0E01\u0E31\u0E1A Local Development \u0E41\u0E25\u0E30 references \u0E2D\u0E37\u0E48\u0E19\u0E46 \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E44\u0E1B\u0E17\u0E33\u0E07\u0E32\u0E19\u0E1A\u0E19 Solana \u0E44\u0E14\u0E49\u0E17\u0E35\u0E48\u0E04\u0E39\u0E48\u0E21\u0E37\u0E2D Solana."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"\u0E40\u0E23\u0E34\u0E48\u0E21\u0E43\u0E0A\u0E49 Local Validator",slug:"\u0E40\u0E23\u0E34\u0E48\u0E21\u0E43\u0E0A\u0E49-local-validator",children:[]},{level:2,title:"Connecting to Environments",slug:"connecting-to-environments",children:[]},{level:2,title:"Subscribing to Events",slug:"subscribing-to-events",children:[]},{level:2,title:"Getting Test SOL",slug:"getting-test-sol",children:[]},{level:2,title:"\u0E27\u0E34\u0E18\u0E35\u0E43\u0E0A\u0E49 Mainnet Accounts \u0E41\u0E25\u0E30 Programs",slug:"\u0E27\u0E34\u0E18\u0E35\u0E43\u0E0A\u0E49-mainnet-accounts-\u0E41\u0E25\u0E30-programs",children:[{level:3,title:"\u0E27\u0E34\u0E18\u0E35 load accounts \u0E08\u0E32\u0E01 mainnet",slug:"\u0E27\u0E34\u0E18\u0E35-load-accounts-\u0E08\u0E32\u0E01-mainnet",children:[]},{level:3,title:"\u0E27\u0E34\u0E18\u0E35 load programs from mainnet",slug:"\u0E27\u0E34\u0E18\u0E35-load-programs-from-mainnet",children:[]}]}],git:{updatedTime:1676666728e3},filePathRelative:"th/references/local-development.md"};export{e as data}; diff --git a/docs/.vuepress/dist/assets/mango.html.e4329f42.js b/docs/.vuepress/dist/assets/mango.html.5e7b6391.js similarity index 99% rename from docs/.vuepress/dist/assets/mango.html.e4329f42.js rename to docs/.vuepress/dist/assets/mango.html.5e7b6391.js index 801fc876d..63515727c 100644 --- a/docs/.vuepress/dist/assets/mango.html.e4329f42.js +++ b/docs/.vuepress/dist/assets/mango.html.5e7b6391.js @@ -1,4 +1,4 @@ -import{_ as r,r as p,o as i,c as k,b as a,w as t,a as n,F as b,d as s,e as m}from"./app.cfdf84e7.js";const d={},g=n("h1",{id:"mango-markets",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#mango-markets","aria-hidden":"true"},"#"),s(" Mango Markets")],-1),y=n("p",null,"Mango menyediakan satu tempat untuk meminjamkan, meminjam, menukar, dan memanfaatkan memperdagangkan aset kripto melalui mesin risiko on-chain.",-1),w=n("p",null,"Anda dapat terhubung ke program on-chain Mango menggunakan librari Client API. Anda juga memerlukan librari Solana javascript API.",-1),f=n("div",{class:"language-text ext-text line-numbers-mode"},[n("pre",{class:"language-text"},[n("code",null,`"@blockworks-foundation/mango-client": "^3.3.27", +import{_ as r,r as p,o as i,c as k,b as a,w as t,a as n,F as b,d as s,e as m}from"./app.2fbb9e96.js";const d={},g=n("h1",{id:"mango-markets",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#mango-markets","aria-hidden":"true"},"#"),s(" Mango Markets")],-1),y=n("p",null,"Mango menyediakan satu tempat untuk meminjamkan, meminjam, menukar, dan memanfaatkan memperdagangkan aset kripto melalui mesin risiko on-chain.",-1),w=n("p",null,"Anda dapat terhubung ke program on-chain Mango menggunakan librari Client API. Anda juga memerlukan librari Solana javascript API.",-1),f=n("div",{class:"language-text ext-text line-numbers-mode"},[n("pre",{class:"language-text"},[n("code",null,`"@blockworks-foundation/mango-client": "^3.3.27", "@solana/web3.js": "^1.37.0" `)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),_=m('

    Cara Mendapatkan Mango Group

    A mango group adalah basket dari cross-margined tokens. Ini menyimpan info pasar yang luas tentang token, pasar dex serum, pasar pelaku, oracles, dana asuransi, dan brankas biaya. Setiap versi market Manggo menggunakan Grup Manggo yang berbeda yang mengandung token. Grup v3 saat ini adalah mainnet.1. Berikut tabel yang menunjukkan berbagai grup:

    GrupVersiKluster
    mainnet.1v3mainnet
    devnet.2v3devnet
    devnet.3v3devnet
    BTC_ETH_SOL_SRM_USDCv2mainnet & devnet
    BTC_ETH_USDTv2devnet
    BTC_ETH_USDCv2testnet
    ',3),h={class:"custom-container tip"},C=n("p",{class:"custom-container-title"},"Catatan",-1),v=s("Jika Anda ingin menggunakan grup v2, Anda harus menggunakan librari klien v2. Kamu bisa menemukannya "),S={href:"https://github.com/blockworks-foundation/mango-client-ts",target:"_blank",rel:"noopener noreferrer"},I=s("disini"),G=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` diff --git a/docs/.vuepress/dist/assets/mango.html.b427f409.js b/docs/.vuepress/dist/assets/mango.html.7b1b90fd.js similarity index 99% rename from docs/.vuepress/dist/assets/mango.html.b427f409.js rename to docs/.vuepress/dist/assets/mango.html.7b1b90fd.js index 843074bad..8654a38e0 100644 --- a/docs/.vuepress/dist/assets/mango.html.b427f409.js +++ b/docs/.vuepress/dist/assets/mango.html.7b1b90fd.js @@ -1,4 +1,4 @@ -import{_ as r,r as p,o as i,c as k,b as a,w as t,a as n,F as b,d as s,e as m}from"./app.cfdf84e7.js";const d={},g=n("h1",{id:"mango-markets",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#mango-markets","aria-hidden":"true"},"#"),s(" Mango Markets")],-1),w=n("p",null,"Mango provides a single venue to lend, borrow, swap, and leverage trade cryptoassets through an on-chain risk engine. You can connect to Mango's on-chain program using the Client API libraries. You'll also need the Solana javascript API library.",-1),y=n("div",{class:"language-text ext-text line-numbers-mode"},[n("pre",{class:"language-text"},[n("code",null,`"@blockworks-foundation/mango-client": "^3.3.27", +import{_ as r,r as p,o as i,c as k,b as a,w as t,a as n,F as b,d as s,e as m}from"./app.2fbb9e96.js";const d={},g=n("h1",{id:"mango-markets",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#mango-markets","aria-hidden":"true"},"#"),s(" Mango Markets")],-1),w=n("p",null,"Mango provides a single venue to lend, borrow, swap, and leverage trade cryptoassets through an on-chain risk engine. You can connect to Mango's on-chain program using the Client API libraries. You'll also need the Solana javascript API library.",-1),y=n("div",{class:"language-text ext-text line-numbers-mode"},[n("pre",{class:"language-text"},[n("code",null,`"@blockworks-foundation/mango-client": "^3.3.27", "@solana/web3.js": "^1.37.0" `)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),f=m('

    How to get a Mango Group

    A mango group is a basket of cross-margined tokens. It holds broad market info about tokens, serum dex markets, perp markets, oracles, insurance fund and fees vaults. Each version of Mango Markets uses a different Mango Group containing different tokens. The current v3 group is mainnet.1. Here's a table showing the various groups:

    GroupVersionCluster
    mainnet.1v3mainnet
    devnet.2v3devnet
    devnet.3v3devnet
    BTC_ETH_SOL_SRM_USDCv2mainnet & devnet
    BTC_ETH_USDTv2devnet
    BTC_ETH_USDCv2testnet
    ',3),_={class:"custom-container tip"},h=n("p",{class:"custom-container-title"},"Note",-1),v=s("If you wish to use the v2 groups, you'll have to use the v2 client library. You can find it "),C={href:"https://github.com/blockworks-foundation/mango-client-ts",target:"_blank",rel:"noopener noreferrer"},S=s("here"),I=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` diff --git a/docs/.vuepress/dist/assets/mango.html.a74bd6fd.js b/docs/.vuepress/dist/assets/mango.html.dd07158c.js similarity index 99% rename from docs/.vuepress/dist/assets/mango.html.a74bd6fd.js rename to docs/.vuepress/dist/assets/mango.html.dd07158c.js index 1c7611b81..266d818d5 100644 --- a/docs/.vuepress/dist/assets/mango.html.a74bd6fd.js +++ b/docs/.vuepress/dist/assets/mango.html.dd07158c.js @@ -1,4 +1,4 @@ -import{_ as r,r as p,o as i,c as k,b as a,w as t,a as n,F as b,d as s,e as m}from"./app.cfdf84e7.js";const d={},g=n("h1",{id:"mango-markets",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#mango-markets","aria-hidden":"true"},"#"),s(" Mango Markets")],-1),y=n("p",null,"Mango \u0E23\u0E27\u0E21 lend, borrow, swap, \u0E41\u0E25\u0E30 leverage trade crypto assets \u0E44\u0E27\u0E49\u0E17\u0E35\u0E48\u0E40\u0E14\u0E35\u0E22\u0E27\u0E1A\u0E19 on-chain risk engine. \u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E15\u0E48\u0E2D\u0E01\u0E31\u0E1A Mango's on-chain program \u0E42\u0E14\u0E22\u0E43\u0E0A\u0E49 Client API libraries. \u0E40\u0E23\u0E32\u0E22\u0E31\u0E07\u0E15\u0E49\u0E2D\u0E07\u0E01\u0E32\u0E23 Solana javascript API library \u0E14\u0E49\u0E27\u0E22",-1),w=n("div",{class:"language-text ext-text line-numbers-mode"},[n("pre",{class:"language-text"},[n("code",null,`"@blockworks-foundation/mango-client": "^3.3.27", +import{_ as r,r as p,o as i,c as k,b as a,w as t,a as n,F as b,d as s,e as m}from"./app.2fbb9e96.js";const d={},g=n("h1",{id:"mango-markets",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#mango-markets","aria-hidden":"true"},"#"),s(" Mango Markets")],-1),y=n("p",null,"Mango \u0E23\u0E27\u0E21 lend, borrow, swap, \u0E41\u0E25\u0E30 leverage trade crypto assets \u0E44\u0E27\u0E49\u0E17\u0E35\u0E48\u0E40\u0E14\u0E35\u0E22\u0E27\u0E1A\u0E19 on-chain risk engine. \u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E15\u0E48\u0E2D\u0E01\u0E31\u0E1A Mango's on-chain program \u0E42\u0E14\u0E22\u0E43\u0E0A\u0E49 Client API libraries. \u0E40\u0E23\u0E32\u0E22\u0E31\u0E07\u0E15\u0E49\u0E2D\u0E07\u0E01\u0E32\u0E23 Solana javascript API library \u0E14\u0E49\u0E27\u0E22",-1),w=n("div",{class:"language-text ext-text line-numbers-mode"},[n("pre",{class:"language-text"},[n("code",null,`"@blockworks-foundation/mango-client": "^3.3.27", "@solana/web3.js": "^1.37.0" `)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),f=m('

    \u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25 Mango Group

    mango group \u0E04\u0E37\u0E2D\u0E15\u0E30\u0E01\u0E23\u0E49\u0E32 (basket) \u0E02\u0E2D\u0E07 cross-margined tokens. \u0E21\u0E31\u0E19\u0E08\u0E30\u0E21\u0E35\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E01\u0E27\u0E49\u0E32\u0E07\u0E46 \u0E02\u0E2D\u0E07 market \u0E40\u0E01\u0E35\u0E48\u0E22\u0E27\u0E01\u0E31\u0E1A tokens, serum dex markets, perp markets, oracles, insurance fund \u0E41\u0E25\u0E30 fees vaults. \u0E41\u0E15\u0E48\u0E25\u0E30 version \u0E02\u0E2D\u0E07 Mango Markets \u0E43\u0E0A\u0E49 Mango Group \u0E17\u0E35\u0E48\u0E41\u0E15\u0E01\u0E15\u0E48\u0E32\u0E07\u0E01\u0E31\u0E19 \u0E41\u0E25\u0E30\u0E21\u0E35 tokens \u0E17\u0E35\u0E48\u0E41\u0E15\u0E01\u0E15\u0E48\u0E32\u0E07\u0E01\u0E31\u0E19 \u0E43\u0E19 v3 \u0E1B\u0E31\u0E08\u0E08\u0E38\u0E1A\u0E31\u0E19\u0E19\u0E31\u0E49\u0E19\u0E21\u0E35\u0E0A\u0E37\u0E48\u0E2D group \u0E04\u0E37\u0E2D mainnet.1 \u0E19\u0E35\u0E48\u0E04\u0E37\u0E2D\u0E15\u0E32\u0E23\u0E32\u0E07 table \u0E17\u0E35\u0E48\u0E41\u0E2A\u0E14\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E01\u0E25\u0E38\u0E48\u0E21\u0E15\u0E48\u0E32\u0E07\u0E46:

    GroupVersionCluster
    mainnet.1v3mainnet
    devnet.2v3devnet
    devnet.3v3devnet
    BTC_ETH_SOL_SRM_USDCv2mainnet & devnet
    BTC_ETH_USDTv2devnet
    BTC_ETH_USDCv2testnet
    ',3),_={class:"custom-container tip"},h=n("p",{class:"custom-container-title"},"Note",-1),v=s("\u0E16\u0E49\u0E32\u0E40\u0E23\u0E32\u0E15\u0E49\u0E2D\u0E07\u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49 v2 groups \u0E40\u0E23\u0E32\u0E15\u0E49\u0E2D\u0E07\u0E43\u0E0A\u0E49 v2 client library \u0E0B\u0E36\u0E48\u0E07\u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E2B\u0E32\u0E21\u0E31\u0E19\u0E44\u0E14\u0E49 "),C={href:"https://github.com/blockworks-foundation/mango-client-ts",target:"_blank",rel:"noopener noreferrer"},S=s("\u0E17\u0E35\u0E48\u0E19\u0E35\u0E48"),I=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` diff --git a/docs/.vuepress/dist/assets/mango.html.8d40c307.js b/docs/.vuepress/dist/assets/mango.html.dfd4748b.js similarity index 99% rename from docs/.vuepress/dist/assets/mango.html.8d40c307.js rename to docs/.vuepress/dist/assets/mango.html.dfd4748b.js index 60ba5a552..2d52af3d5 100644 --- a/docs/.vuepress/dist/assets/mango.html.8d40c307.js +++ b/docs/.vuepress/dist/assets/mango.html.dfd4748b.js @@ -1,4 +1,4 @@ -import{_ as r,r as p,o as i,c as k,b as a,w as t,a as n,F as b,d as s,e as m}from"./app.cfdf84e7.js";const d={},g=n("h1",{id:"mango-markets",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#mango-markets","aria-hidden":"true"},"#"),s(" Mango Markets")],-1),y=n("p",null,"Mango bietet einen einzigen Ort um Kryptoassets \xFCber eine On-Chain-Risiko-Engine zum Verleihen, Leihen, Tauschen und Leverage Handeln. Sie k\xF6nnen sich \xFCber die Client-API-Bibliotheken mit dem On-Chain-Programm von Mango verbinden. Sie ben\xF6tigen au\xDFerdem die Solana-Javascript-API-Bibliothek.",-1),w=n("div",{class:"language-text ext-text line-numbers-mode"},[n("pre",{class:"language-text"},[n("code",null,`"@blockworks-foundation/mango-client": "^3.3.27", +import{_ as r,r as p,o as i,c as k,b as a,w as t,a as n,F as b,d as s,e as m}from"./app.2fbb9e96.js";const d={},g=n("h1",{id:"mango-markets",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#mango-markets","aria-hidden":"true"},"#"),s(" Mango Markets")],-1),y=n("p",null,"Mango bietet einen einzigen Ort um Kryptoassets \xFCber eine On-Chain-Risiko-Engine zum Verleihen, Leihen, Tauschen und Leverage Handeln. Sie k\xF6nnen sich \xFCber die Client-API-Bibliotheken mit dem On-Chain-Programm von Mango verbinden. Sie ben\xF6tigen au\xDFerdem die Solana-Javascript-API-Bibliothek.",-1),w=n("div",{class:"language-text ext-text line-numbers-mode"},[n("pre",{class:"language-text"},[n("code",null,`"@blockworks-foundation/mango-client": "^3.3.27", "@solana/web3.js": "^1.37.0" `)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),f=m('

    So erhalten Sie eine Mango-Gruppe

    Eine Mangogruppe ist ein Korb mit querrandigen Spielmarken. Es enth\xE4lt umfassende Marktinformationen \xFCber Token, Serum-Dex-M\xE4rkte, T\xE4term\xE4rkte, Orakel, Versicherungsfonds und Geb\xFChrentresore. Jede Version von Mango Markets verwendet eine andere Mango-Gruppe, die andere enth\xE4lt Token. Die aktuelle v3-Gruppe ist \u201Emainnet.1\u201C. Hier ist eine Tabelle mit den verschiedenen Gruppen:

    GroupVersionCluster
    mainnet.1v3mainnet
    devnet.2v3devnet
    devnet.3v3devnet
    BTC_ETH_SOL_SRM_USDCv2mainnet & devnet
    BTC_ETH_USDTv2devnet
    BTC_ETH_USDCv2testnet
    ',3),_={class:"custom-container tip"},h=n("p",{class:"custom-container-title"},"Note",-1),v=s("Wenn Sie die v2-Gruppen verwenden m\xF6chten, m\xFCssen Sie die v2-Clientbibliothek verwenden. Du kannst es "),S={href:"https://github.com/blockworks-foundation/mango-client-ts",target:"_blank",rel:"noopener noreferrer"},C=s("hier"),G=s(" finden"),M=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` diff --git a/docs/.vuepress/dist/assets/mango.html.166e3fcf.js b/docs/.vuepress/dist/assets/mango.html.ec7a53fc.js similarity index 99% rename from docs/.vuepress/dist/assets/mango.html.166e3fcf.js rename to docs/.vuepress/dist/assets/mango.html.ec7a53fc.js index 843074bad..8654a38e0 100644 --- a/docs/.vuepress/dist/assets/mango.html.166e3fcf.js +++ b/docs/.vuepress/dist/assets/mango.html.ec7a53fc.js @@ -1,4 +1,4 @@ -import{_ as r,r as p,o as i,c as k,b as a,w as t,a as n,F as b,d as s,e as m}from"./app.cfdf84e7.js";const d={},g=n("h1",{id:"mango-markets",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#mango-markets","aria-hidden":"true"},"#"),s(" Mango Markets")],-1),w=n("p",null,"Mango provides a single venue to lend, borrow, swap, and leverage trade cryptoassets through an on-chain risk engine. You can connect to Mango's on-chain program using the Client API libraries. You'll also need the Solana javascript API library.",-1),y=n("div",{class:"language-text ext-text line-numbers-mode"},[n("pre",{class:"language-text"},[n("code",null,`"@blockworks-foundation/mango-client": "^3.3.27", +import{_ as r,r as p,o as i,c as k,b as a,w as t,a as n,F as b,d as s,e as m}from"./app.2fbb9e96.js";const d={},g=n("h1",{id:"mango-markets",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#mango-markets","aria-hidden":"true"},"#"),s(" Mango Markets")],-1),w=n("p",null,"Mango provides a single venue to lend, borrow, swap, and leverage trade cryptoassets through an on-chain risk engine. You can connect to Mango's on-chain program using the Client API libraries. You'll also need the Solana javascript API library.",-1),y=n("div",{class:"language-text ext-text line-numbers-mode"},[n("pre",{class:"language-text"},[n("code",null,`"@blockworks-foundation/mango-client": "^3.3.27", "@solana/web3.js": "^1.37.0" `)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),f=m('

    How to get a Mango Group

    A mango group is a basket of cross-margined tokens. It holds broad market info about tokens, serum dex markets, perp markets, oracles, insurance fund and fees vaults. Each version of Mango Markets uses a different Mango Group containing different tokens. The current v3 group is mainnet.1. Here's a table showing the various groups:

    GroupVersionCluster
    mainnet.1v3mainnet
    devnet.2v3devnet
    devnet.3v3devnet
    BTC_ETH_SOL_SRM_USDCv2mainnet & devnet
    BTC_ETH_USDTv2devnet
    BTC_ETH_USDCv2testnet
    ',3),_={class:"custom-container tip"},h=n("p",{class:"custom-container-title"},"Note",-1),v=s("If you wish to use the v2 groups, you'll have to use the v2 client library. You can find it "),C={href:"https://github.com/blockworks-foundation/mango-client-ts",target:"_blank",rel:"noopener noreferrer"},S=s("here"),I=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` diff --git a/docs/.vuepress/dist/assets/mango.html.ae5b2527.js b/docs/.vuepress/dist/assets/mango.html.ed3aa781.js similarity index 99% rename from docs/.vuepress/dist/assets/mango.html.ae5b2527.js rename to docs/.vuepress/dist/assets/mango.html.ed3aa781.js index 397670f7e..de65d7cb8 100644 --- a/docs/.vuepress/dist/assets/mango.html.ae5b2527.js +++ b/docs/.vuepress/dist/assets/mango.html.ed3aa781.js @@ -1,4 +1,4 @@ -import{_ as r,r as p,o as i,c as k,b as a,w as t,a as n,F as b,d as s,e as m}from"./app.cfdf84e7.js";const d={},g=n("h1",{id:"mango-markets",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#mango-markets","aria-hidden":"true"},"#"),s(" Mango Markets")],-1),y=n("p",null,"Mango offre un lieu unique pour pr\xEAter, emprunter, \xE9changer et n\xE9gocier des crypto-actifs par le biais d'un m\xE9canisme de gestion des risques on-chain. Vous pouvez vous connecter au programme de Mango \xE0 l'aide des biblioth\xE8ques API Client. Vous aurez \xE9galement besoin de la biblioth\xE8que API javascript de Solana.",-1),w=n("div",{class:"language-text ext-text line-numbers-mode"},[n("pre",{class:"language-text"},[n("code",null,`"@blockworks-foundation/mango-client": "^3.3.27", +import{_ as r,r as p,o as i,c as k,b as a,w as t,a as n,F as b,d as s,e as m}from"./app.2fbb9e96.js";const d={},g=n("h1",{id:"mango-markets",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#mango-markets","aria-hidden":"true"},"#"),s(" Mango Markets")],-1),y=n("p",null,"Mango offre un lieu unique pour pr\xEAter, emprunter, \xE9changer et n\xE9gocier des crypto-actifs par le biais d'un m\xE9canisme de gestion des risques on-chain. Vous pouvez vous connecter au programme de Mango \xE0 l'aide des biblioth\xE8ques API Client. Vous aurez \xE9galement besoin de la biblioth\xE8que API javascript de Solana.",-1),w=n("div",{class:"language-text ext-text line-numbers-mode"},[n("pre",{class:"language-text"},[n("code",null,`"@blockworks-foundation/mango-client": "^3.3.27", "@solana/web3.js": "^1.37.0" `)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),f=m('

    Comment r\xE9cup\xE9rer un Groupe Mango

    Un groupe Mango est un panier de jetons \xE0 marges crois\xE9es. Il contient des informations g\xE9n\xE9rales sur le march\xE9 des jetons, les dex de Serum, les march\xE9s perp, les oracles, les fonds d'assurance et les vaults de frais. Chaque version de Mango Markets utilise un groupe Mango diff\xE9rent contenant des jetons diff\xE9rents. Le groupe v3 actuel mainnet.1. Voici un tableau pr\xE9sentant les diff\xE9rents groupes :

    GroupeVersionCluster
    mainnet.1v3mainnet
    devnet.2v3devnet
    devnet.3v3devnet
    BTC_ETH_SOL_SRM_USDCv2mainnet & devnet
    BTC_ETH_USDTv2devnet
    BTC_ETH_USDCv2testnet
    ',3),_={class:"custom-container tip"},h=n("p",{class:"custom-container-title"},"Remarque",-1),v=s("Si vous souhaitez utiliser les groupes v2, vous devrez utiliser la biblioth\xE8que client v2. Vous pouvez la trouver "),C={href:"https://github.com/blockworks-foundation/mango-client-ts",target:"_blank",rel:"noopener noreferrer"},S=s("ici"),I=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` diff --git a/docs/.vuepress/dist/assets/name-service.html.c6b6592b.js b/docs/.vuepress/dist/assets/name-service.html.1a69f639.js similarity index 99% rename from docs/.vuepress/dist/assets/name-service.html.c6b6592b.js rename to docs/.vuepress/dist/assets/name-service.html.1a69f639.js index fb7e0ae98..b6ff19a5a 100644 --- a/docs/.vuepress/dist/assets/name-service.html.c6b6592b.js +++ b/docs/.vuepress/dist/assets/name-service.html.1a69f639.js @@ -1,4 +1,4 @@ -import{_ as l,r as c,o as u,c as i,b as t,w as a,a as n,F as r,d as s}from"./app.cfdf84e7.js";const k={},b=n("h1",{id:"name-service",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#name-service","aria-hidden":"true"},"#"),s(" Name Service")],-1),m=n("h2",{id:"name-registry",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#name-registry","aria-hidden":"true"},"#"),s(" Name registry")],-1),d=n("p",null,"Name registry menyimpan informasi tentang domain name. Itu terbuat dari dua hal:",-1),y=n("ul",null,[n("li",null,"Header"),n("li",null,"Data")],-1),w=n("p",null,"Data untuk suatu domain name selalu diawali oleh header, di bawah ini adalah struktur header dalam JS:",-1),g=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +import{_ as l,r as c,o as u,c as i,b as t,w as a,a as n,F as r,d as s}from"./app.2fbb9e96.js";const k={},b=n("h1",{id:"name-service",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#name-service","aria-hidden":"true"},"#"),s(" Name Service")],-1),m=n("h2",{id:"name-registry",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#name-registry","aria-hidden":"true"},"#"),s(" Name registry")],-1),d=n("p",null,"Name registry menyimpan informasi tentang domain name. Itu terbuat dari dua hal:",-1),y=n("ul",null,[n("li",null,"Header"),n("li",null,"Data")],-1),w=n("p",null,"Data untuk suatu domain name selalu diawali oleh header, di bawah ini adalah struktur header dalam JS:",-1),g=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Schema "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"borsh"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"export"),s(),n("span",{class:"token keyword"},"class"),s(),n("span",{class:"token class-name"},"NameRegistryState"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -152,7 +152,7 @@ import{_ as l,r as c,o as u,c as i,b as t,w as a,a as n,F as r,d as s}from"./app `),n("span",{class:"token keyword"},"const"),s(" subDomain "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"demo"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token comment"},"// Step 1"),s(` -`),n("span",{class:"token keyword"},"const"),s(" hashedParentDomain "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(),n("span",{class:"token function"},"getHashedName"),n("span",{class:"token punctuation"},"("),s("mainDomain"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token keyword"},"const"),s(" hashedParentDomain "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(),n("span",{class:"token function"},"getHashedName"),n("span",{class:"token punctuation"},"("),s("parentDomain"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" parentDomainKey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(),n("span",{class:"token function"},"getNameAccountKey"),n("span",{class:"token punctuation"},"("),s(` hashedParentDomain`),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token keyword"},"undefined"),n("span",{class:"token punctuation"},","),s(` diff --git a/docs/.vuepress/dist/assets/name-service.html.6ced8cd6.js b/docs/.vuepress/dist/assets/name-service.html.3042b894.js similarity index 99% rename from docs/.vuepress/dist/assets/name-service.html.6ced8cd6.js rename to docs/.vuepress/dist/assets/name-service.html.3042b894.js index 3bead1a0d..91438a6c3 100644 --- a/docs/.vuepress/dist/assets/name-service.html.6ced8cd6.js +++ b/docs/.vuepress/dist/assets/name-service.html.3042b894.js @@ -1,4 +1,4 @@ -import{_ as l,r as c,o as u,c as r,b as e,w as a,a as n,F as i,d as s}from"./app.cfdf84e7.js";const k={},b=n("h1",{id:"service-de-noms",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#service-de-noms","aria-hidden":"true"},"#"),s(" Service de Noms")],-1),m=n("h2",{id:"registre-de-noms",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#registre-de-noms","aria-hidden":"true"},"#"),s(" Registre de noms")],-1),d=n("p",null,"Le registre de noms stocke les informations relatives au nom de domaine. Il est compos\xE9 de deux choses :",-1),y=n("ul",null,[n("li",null,"L'en-t\xEAte"),n("li",null,"Les donn\xE9es")],-1),w=n("p",null,"Les donn\xE9es d'un nom de domaine sont toujours pr\xE9c\xE9d\xE9es de l'en-t\xEAte, ci-dessous la structure de l'en-t\xEAte en JS :",-1),h=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +import{_ as l,r as c,o as u,c as r,b as e,w as a,a as n,F as i,d as s}from"./app.2fbb9e96.js";const k={},b=n("h1",{id:"service-de-noms",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#service-de-noms","aria-hidden":"true"},"#"),s(" Service de Noms")],-1),m=n("h2",{id:"registre-de-noms",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#registre-de-noms","aria-hidden":"true"},"#"),s(" Registre de noms")],-1),d=n("p",null,"Le registre de noms stocke les informations relatives au nom de domaine. Il est compos\xE9 de deux choses :",-1),y=n("ul",null,[n("li",null,"L'en-t\xEAte"),n("li",null,"Les donn\xE9es")],-1),w=n("p",null,"Les donn\xE9es d'un nom de domaine sont toujours pr\xE9c\xE9d\xE9es de l'en-t\xEAte, ci-dessous la structure de l'en-t\xEAte en JS :",-1),h=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Schema "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"borsh"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"export"),s(),n("span",{class:"token keyword"},"class"),s(),n("span",{class:"token class-name"},"NameRegistryState"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -152,7 +152,7 @@ import{_ as l,r as c,o as u,c as r,b as e,w as a,a as n,F as i,d as s}from"./app `),n("span",{class:"token keyword"},"const"),s(" subDomain "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"demo"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token comment"},"// Step 1"),s(` -`),n("span",{class:"token keyword"},"const"),s(" hashedParentDomain "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(),n("span",{class:"token function"},"getHashedName"),n("span",{class:"token punctuation"},"("),s("mainDomain"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token keyword"},"const"),s(" hashedParentDomain "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(),n("span",{class:"token function"},"getHashedName"),n("span",{class:"token punctuation"},"("),s("parentDomain"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" parentDomainKey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(),n("span",{class:"token function"},"getNameAccountKey"),n("span",{class:"token punctuation"},"("),s(` hashedParentDomain`),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token keyword"},"undefined"),n("span",{class:"token punctuation"},","),s(` diff --git a/docs/.vuepress/dist/assets/name-service.html.b798c4d1.js b/docs/.vuepress/dist/assets/name-service.html.43b7d32f.js similarity index 99% rename from docs/.vuepress/dist/assets/name-service.html.b798c4d1.js rename to docs/.vuepress/dist/assets/name-service.html.43b7d32f.js index aa2b773d5..a4d181f12 100644 --- a/docs/.vuepress/dist/assets/name-service.html.b798c4d1.js +++ b/docs/.vuepress/dist/assets/name-service.html.43b7d32f.js @@ -1,4 +1,4 @@ -import{_ as p,r as c,o as l,c as u,b as e,w as a,F as i,a as n,d as s}from"./app.cfdf84e7.js";const r={},k=n("h1",{id:"namensdienst",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#namensdienst","aria-hidden":"true"},"#"),s(" Namensdienst")],-1),b=n("h2",{id:"namensregister",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#namensregister","aria-hidden":"true"},"#"),s(" Namensregister")],-1),m=n("p",null,"Die Namensregistrierung speichert Informationen \xFCber den Dom\xE4nennamen. Es besteht aus zwei Dingen:",-1),d=n("ul",null,[n("li",null,"Die Kopfzeile"),n("li",null,"Die Daten")],-1),y=n("p",null,"Den Daten f\xFCr einen Domainnamen wird immer der Header vorangestellt, unten ist die Struktur des Headers in JS:",-1),w=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +import{_ as p,r as c,o as l,c as u,b as e,w as a,F as i,a as n,d as s}from"./app.2fbb9e96.js";const r={},k=n("h1",{id:"namensdienst",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#namensdienst","aria-hidden":"true"},"#"),s(" Namensdienst")],-1),b=n("h2",{id:"namensregister",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#namensregister","aria-hidden":"true"},"#"),s(" Namensregister")],-1),m=n("p",null,"Die Namensregistrierung speichert Informationen \xFCber den Dom\xE4nennamen. Es besteht aus zwei Dingen:",-1),d=n("ul",null,[n("li",null,"Die Kopfzeile"),n("li",null,"Die Daten")],-1),y=n("p",null,"Den Daten f\xFCr einen Domainnamen wird immer der Header vorangestellt, unten ist die Struktur des Headers in JS:",-1),w=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Schema "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"borsh"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"export"),s(),n("span",{class:"token keyword"},"class"),s(),n("span",{class:"token class-name"},"NameRegistryState"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -152,7 +152,7 @@ import{_ as p,r as c,o as l,c as u,b as e,w as a,F as i,a as n,d as s}from"./app `),n("span",{class:"token keyword"},"const"),s(" subDomain "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"demo"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token comment"},"// Step 1"),s(` -`),n("span",{class:"token keyword"},"const"),s(" hashedParentDomain "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(),n("span",{class:"token function"},"getHashedName"),n("span",{class:"token punctuation"},"("),s("mainDomain"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token keyword"},"const"),s(" hashedParentDomain "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(),n("span",{class:"token function"},"getHashedName"),n("span",{class:"token punctuation"},"("),s("parentDomain"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" parentDomainKey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(),n("span",{class:"token function"},"getNameAccountKey"),n("span",{class:"token punctuation"},"("),s(` hashedParentDomain`),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token keyword"},"undefined"),n("span",{class:"token punctuation"},","),s(` diff --git a/docs/.vuepress/dist/assets/name-service.html.a7a53060.js b/docs/.vuepress/dist/assets/name-service.html.6348de7a.js similarity index 99% rename from docs/.vuepress/dist/assets/name-service.html.a7a53060.js rename to docs/.vuepress/dist/assets/name-service.html.6348de7a.js index 5d9ec22f2..a2cedd7be 100644 --- a/docs/.vuepress/dist/assets/name-service.html.a7a53060.js +++ b/docs/.vuepress/dist/assets/name-service.html.6348de7a.js @@ -1,4 +1,4 @@ -import{_ as l,r as c,o as u,c as i,b as e,w as a,a as n,F as r,d as s}from"./app.cfdf84e7.js";const k={},b=n("h1",{id:"servicio-de-nombres",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#servicio-de-nombres","aria-hidden":"true"},"#"),s(" Servicio de nombres")],-1),m=n("h2",{id:"registro-de-nombres",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#registro-de-nombres","aria-hidden":"true"},"#"),s(" Registro de nombres")],-1),d=n("p",null,"El registro de nombres almacena informaci\xF3n sobre el nombre de dominio. esta compuesto de dos cosas:",-1),y=n("ul",null,[n("li",null,"La cabecera"),n("li",null,"Los datos")],-1),w=n("p",null,"Los datos para un nombre de dominio siempre tienen el prefijo del encabezado, a continuaci\xF3n se muestra la estructura del encabezado en JS:",-1),g=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +import{_ as l,r as c,o as u,c as i,b as e,w as a,a as n,F as r,d as s}from"./app.2fbb9e96.js";const k={},b=n("h1",{id:"servicio-de-nombres",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#servicio-de-nombres","aria-hidden":"true"},"#"),s(" Servicio de nombres")],-1),m=n("h2",{id:"registro-de-nombres",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#registro-de-nombres","aria-hidden":"true"},"#"),s(" Registro de nombres")],-1),d=n("p",null,"El registro de nombres almacena informaci\xF3n sobre el nombre de dominio. esta compuesto de dos cosas:",-1),y=n("ul",null,[n("li",null,"La cabecera"),n("li",null,"Los datos")],-1),w=n("p",null,"Los datos para un nombre de dominio siempre tienen el prefijo del encabezado, a continuaci\xF3n se muestra la estructura del encabezado en JS:",-1),g=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Schema "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"borsh"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"export"),s(),n("span",{class:"token keyword"},"class"),s(),n("span",{class:"token class-name"},"NameRegistryState"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -152,7 +152,7 @@ import{_ as l,r as c,o as u,c as i,b as e,w as a,a as n,F as r,d as s}from"./app `),n("span",{class:"token keyword"},"const"),s(" subDomain "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"demo"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token comment"},"// Step 1"),s(` -`),n("span",{class:"token keyword"},"const"),s(" hashedParentDomain "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(),n("span",{class:"token function"},"getHashedName"),n("span",{class:"token punctuation"},"("),s("mainDomain"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token keyword"},"const"),s(" hashedParentDomain "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(),n("span",{class:"token function"},"getHashedName"),n("span",{class:"token punctuation"},"("),s("parentDomain"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" parentDomainKey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(),n("span",{class:"token function"},"getNameAccountKey"),n("span",{class:"token punctuation"},"("),s(` hashedParentDomain`),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token keyword"},"undefined"),n("span",{class:"token punctuation"},","),s(` diff --git a/docs/.vuepress/dist/assets/name-service.html.37c928e5.js b/docs/.vuepress/dist/assets/name-service.html.819cca94.js similarity index 99% rename from docs/.vuepress/dist/assets/name-service.html.37c928e5.js rename to docs/.vuepress/dist/assets/name-service.html.819cca94.js index 59f787aa6..161450e92 100644 --- a/docs/.vuepress/dist/assets/name-service.html.37c928e5.js +++ b/docs/.vuepress/dist/assets/name-service.html.819cca94.js @@ -1,4 +1,4 @@ -import{_ as l,r as c,o as u,c as i,b as t,w as a,a as n,F as r,d as s}from"./app.cfdf84e7.js";const k={},b=n("h1",{id:"name-service",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#name-service","aria-hidden":"true"},"#"),s(" Name Service")],-1),m=n("h2",{id:"name-registry",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#name-registry","aria-hidden":"true"},"#"),s(" Name registry")],-1),d=n("p",null,"The name registry stores information about the domain name. It is made of two things:",-1),y=n("ul",null,[n("li",null,"The header"),n("li",null,"The data")],-1),w=n("p",null,"The data for a domain name is always prefixed by the header, below is the structure of the header in JS:",-1),h=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +import{_ as l,r as c,o as u,c as i,b as t,w as a,a as n,F as r,d as s}from"./app.2fbb9e96.js";const k={},b=n("h1",{id:"name-service",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#name-service","aria-hidden":"true"},"#"),s(" Name Service")],-1),m=n("h2",{id:"name-registry",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#name-registry","aria-hidden":"true"},"#"),s(" Name registry")],-1),d=n("p",null,"The name registry stores information about the domain name. It is made of two things:",-1),y=n("ul",null,[n("li",null,"The header"),n("li",null,"The data")],-1),w=n("p",null,"The data for a domain name is always prefixed by the header, below is the structure of the header in JS:",-1),h=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Schema "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"borsh"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"export"),s(),n("span",{class:"token keyword"},"class"),s(),n("span",{class:"token class-name"},"NameRegistryState"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -152,7 +152,7 @@ import{_ as l,r as c,o as u,c as i,b as t,w as a,a as n,F as r,d as s}from"./app `),n("span",{class:"token keyword"},"const"),s(" subDomain "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"demo"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token comment"},"// Step 1"),s(` -`),n("span",{class:"token keyword"},"const"),s(" hashedParentDomain "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(),n("span",{class:"token function"},"getHashedName"),n("span",{class:"token punctuation"},"("),s("mainDomain"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token keyword"},"const"),s(" hashedParentDomain "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(),n("span",{class:"token function"},"getHashedName"),n("span",{class:"token punctuation"},"("),s("parentDomain"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" parentDomainKey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(),n("span",{class:"token function"},"getNameAccountKey"),n("span",{class:"token punctuation"},"("),s(` hashedParentDomain`),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token keyword"},"undefined"),n("span",{class:"token punctuation"},","),s(` diff --git a/docs/.vuepress/dist/assets/name-service.html.5db01ac9.js b/docs/.vuepress/dist/assets/name-service.html.8332c395.js similarity index 99% rename from docs/.vuepress/dist/assets/name-service.html.5db01ac9.js rename to docs/.vuepress/dist/assets/name-service.html.8332c395.js index f9ba46e1f..eca3f452a 100644 --- a/docs/.vuepress/dist/assets/name-service.html.5db01ac9.js +++ b/docs/.vuepress/dist/assets/name-service.html.8332c395.js @@ -1,4 +1,4 @@ -import{_ as l,r as c,o as u,c as r,b as t,w as a,a as n,F as i,d as s}from"./app.cfdf84e7.js";const k={},b=n("h1",{id:"name-service",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#name-service","aria-hidden":"true"},"#"),s(" Name Service")],-1),m=n("h2",{id:"name-registry",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#name-registry","aria-hidden":"true"},"#"),s(" Name registry")],-1),d=n("p",null,"Name registry\uB294 \uB3C4\uBA54\uC778 \uC774\uB984\uC5D0 \uB300\uD55C \uC815\uBCF4\uB97C \uC800\uC7A5\uD569\uB2C8\uB2E4. \uC774\uAC83\uC740 \uB450 \uAC00\uC9C0\uB85C \uAD6C\uC131\uB418\uC5B4 \uC788\uC2B5\uB2C8\uB2E4:",-1),y=n("ul",null,[n("li",null,"The header"),n("li",null,"The data")],-1),w=n("p",null,"\uB3C4\uBA54\uC778 \uC774\uB984\uC744 \uC704\uD55C \uB370\uC774\uD130\uB294 \uD56D\uC0C1 header\uC758 \uC55E\uC5D0 \uBD99\uC2B5\uB2C8\uB2E4. \uC544\uB798\uB294 JS\uCF54\uB4DC\uB85C header \uAD6C\uC870\uCCB4\uB97C \uBCF4\uC5EC\uC90D\uB2C8\uB2E4:",-1),g=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +import{_ as l,r as c,o as u,c as r,b as t,w as a,a as n,F as i,d as s}from"./app.2fbb9e96.js";const k={},b=n("h1",{id:"name-service",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#name-service","aria-hidden":"true"},"#"),s(" Name Service")],-1),m=n("h2",{id:"name-registry",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#name-registry","aria-hidden":"true"},"#"),s(" Name registry")],-1),d=n("p",null,"Name registry\uB294 \uB3C4\uBA54\uC778 \uC774\uB984\uC5D0 \uB300\uD55C \uC815\uBCF4\uB97C \uC800\uC7A5\uD569\uB2C8\uB2E4. \uC774\uAC83\uC740 \uB450 \uAC00\uC9C0\uB85C \uAD6C\uC131\uB418\uC5B4 \uC788\uC2B5\uB2C8\uB2E4:",-1),y=n("ul",null,[n("li",null,"The header"),n("li",null,"The data")],-1),w=n("p",null,"\uB3C4\uBA54\uC778 \uC774\uB984\uC744 \uC704\uD55C \uB370\uC774\uD130\uB294 \uD56D\uC0C1 header\uC758 \uC55E\uC5D0 \uBD99\uC2B5\uB2C8\uB2E4. \uC544\uB798\uB294 JS\uCF54\uB4DC\uB85C header \uAD6C\uC870\uCCB4\uB97C \uBCF4\uC5EC\uC90D\uB2C8\uB2E4:",-1),g=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Schema "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"borsh"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"export"),s(),n("span",{class:"token keyword"},"class"),s(),n("span",{class:"token class-name"},"NameRegistryState"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -152,7 +152,7 @@ import{_ as l,r as c,o as u,c as r,b as t,w as a,a as n,F as i,d as s}from"./app `),n("span",{class:"token keyword"},"const"),s(" subDomain "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"demo"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token comment"},"// Step 1"),s(` -`),n("span",{class:"token keyword"},"const"),s(" hashedParentDomain "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(),n("span",{class:"token function"},"getHashedName"),n("span",{class:"token punctuation"},"("),s("mainDomain"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token keyword"},"const"),s(" hashedParentDomain "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(),n("span",{class:"token function"},"getHashedName"),n("span",{class:"token punctuation"},"("),s("parentDomain"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" parentDomainKey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(),n("span",{class:"token function"},"getNameAccountKey"),n("span",{class:"token punctuation"},"("),s(` hashedParentDomain`),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token keyword"},"undefined"),n("span",{class:"token punctuation"},","),s(` diff --git a/docs/.vuepress/dist/assets/name-service.html.d680e7da.js b/docs/.vuepress/dist/assets/name-service.html.8bee77ad.js similarity index 99% rename from docs/.vuepress/dist/assets/name-service.html.d680e7da.js rename to docs/.vuepress/dist/assets/name-service.html.8bee77ad.js index f841d0046..a507e5b41 100644 --- a/docs/.vuepress/dist/assets/name-service.html.d680e7da.js +++ b/docs/.vuepress/dist/assets/name-service.html.8bee77ad.js @@ -1,4 +1,4 @@ -import{_ as p,r as t,o,c,a as n,b as l,F as i,e as s,d as a}from"./app.cfdf84e7.js";const r={},u=s(`

    Name Service (Name Servisi)

    Name registry (Name kayd\u0131)

    Name registry stores (ad kay\u0131t defteri), alan ad\u0131yla ilgili bilgileri depolar. \u0130ki \u015Feyden olu\u015Fur:

    • Ba\u015Fl\u0131k
    • Veri

    Bir alan ad\u0131n\u0131n verilerinin \xF6n\xFCne her zaman ba\u015Fl\u0131k eklenir, JS'deki ba\u015Fl\u0131\u011F\u0131n yap\u0131s\u0131 a\u015Fa\u011F\u0131dad\u0131r:

    export class NameRegistryState {
    +import{_ as p,r as t,o,c,a as n,b as l,F as i,e as s,d as a}from"./app.2fbb9e96.js";const r={},u=s(`

    Name Service (Name Servisi)

    Name registry (Name kayd\u0131)

    Name registry stores (ad kay\u0131t defteri), alan ad\u0131yla ilgili bilgileri depolar. \u0130ki \u015Feyden olu\u015Fur:

    • Ba\u015Fl\u0131k
    • Veri

    Bir alan ad\u0131n\u0131n verilerinin \xF6n\xFCne her zaman ba\u015Fl\u0131k eklenir, JS'deki ba\u015Fl\u0131\u011F\u0131n yap\u0131s\u0131 a\u015Fa\u011F\u0131dad\u0131r:

    export class NameRegistryState {
       parentName: PublicKey;
       owner: PublicKey;
       class: PublicKey;
    @@ -53,7 +53,7 @@ import{_ as p,r as t,o,c,a as n,b as l,F as i,e as s,d as a}from"./app.cfdf84e7.
     const subDomain = "demo";
     
     // Step 1
    -const hashedParentDomain = await getHashedName(mainDomain);
    +const hashedParentDomain = await getHashedName(parentDomain);
     const parentDomainKey = await getNameAccountKey(
       hashedParentDomain,
       undefined,
    diff --git a/docs/.vuepress/dist/assets/name-service.html.0b6ff97a.js b/docs/.vuepress/dist/assets/name-service.html.a9b8c560.js
    similarity index 95%
    rename from docs/.vuepress/dist/assets/name-service.html.0b6ff97a.js
    rename to docs/.vuepress/dist/assets/name-service.html.a9b8c560.js
    index f45d9ba63..e494cdd8e 100644
    --- a/docs/.vuepress/dist/assets/name-service.html.0b6ff97a.js
    +++ b/docs/.vuepress/dist/assets/name-service.html.a9b8c560.js
    @@ -1 +1 @@
    -const e={key:"v-56a76f57",path:"/tr/references/name-service.html",title:"Name Service (Name Servisi)",lang:"tr-TR",frontmatter:{},excerpt:"",headers:[{level:2,title:"Name registry (Name kayd\u0131)",slug:"name-registry-name-kayd\u0131",children:[]},{level:2,title:"Resolving SOL domains (SOL alan adlar\u0131n\u0131 \xE7\xF6zme)",slug:"resolving-sol-domains-sol-alan-adlar\u0131n\u0131-cozme",children:[]},{level:2,title:"Reverse lookup (Geriye do\u011Fru arama)",slug:"reverse-lookup-geriye-dogru-arama",children:[]},{level:2,title:"Subdomain lookup (Subdomain arama)",slug:"subdomain-lookup-subdomain-arama",children:[]},{level:2,title:"Find all the domain names owned by a public key (Bir public key\u2019in sahip oldu\u011Fu t\xFCm isimleri bulma)",slug:"find-all-the-domain-names-owned-by-a-public-key-bir-public-key-in-sahip-oldugu-tum-isimleri-bulma",children:[]},{level:2,title:"Resolve a Twitter handle (Twitter handle\u2019\u0131n\u0131 \xE7\xF6zme)",slug:"resolve-a-twitter-handle-twitter-handle-\u0131n\u0131-cozme",children:[]},{level:2,title:"Reverse lookup of a Twitter handle (Twitter handle\u2019\u0131n\u0131 geri aratma)",slug:"reverse-lookup-of-a-twitter-handle-twitter-handle-\u0131n\u0131-geri-aratma",children:[]}],git:{updatedTime:1673624368e3},filePathRelative:"tr/references/name-service.md"};export{e as data};
    +const e={key:"v-56a76f57",path:"/tr/references/name-service.html",title:"Name Service (Name Servisi)",lang:"tr-TR",frontmatter:{},excerpt:"",headers:[{level:2,title:"Name registry (Name kayd\u0131)",slug:"name-registry-name-kayd\u0131",children:[]},{level:2,title:"Resolving SOL domains (SOL alan adlar\u0131n\u0131 \xE7\xF6zme)",slug:"resolving-sol-domains-sol-alan-adlar\u0131n\u0131-cozme",children:[]},{level:2,title:"Reverse lookup (Geriye do\u011Fru arama)",slug:"reverse-lookup-geriye-dogru-arama",children:[]},{level:2,title:"Subdomain lookup (Subdomain arama)",slug:"subdomain-lookup-subdomain-arama",children:[]},{level:2,title:"Find all the domain names owned by a public key (Bir public key\u2019in sahip oldu\u011Fu t\xFCm isimleri bulma)",slug:"find-all-the-domain-names-owned-by-a-public-key-bir-public-key-in-sahip-oldugu-tum-isimleri-bulma",children:[]},{level:2,title:"Resolve a Twitter handle (Twitter handle\u2019\u0131n\u0131 \xE7\xF6zme)",slug:"resolve-a-twitter-handle-twitter-handle-\u0131n\u0131-cozme",children:[]},{level:2,title:"Reverse lookup of a Twitter handle (Twitter handle\u2019\u0131n\u0131 geri aratma)",slug:"reverse-lookup-of-a-twitter-handle-twitter-handle-\u0131n\u0131-geri-aratma",children:[]}],git:{updatedTime:1675349547e3},filePathRelative:"tr/references/name-service.md"};export{e as data};
    diff --git a/docs/.vuepress/dist/assets/name-service.html.c7d86855.js b/docs/.vuepress/dist/assets/name-service.html.cbfa7fab.js
    similarity index 99%
    rename from docs/.vuepress/dist/assets/name-service.html.c7d86855.js
    rename to docs/.vuepress/dist/assets/name-service.html.cbfa7fab.js
    index 692a9a371..bc286e401 100644
    --- a/docs/.vuepress/dist/assets/name-service.html.c7d86855.js
    +++ b/docs/.vuepress/dist/assets/name-service.html.cbfa7fab.js
    @@ -1,4 +1,4 @@
    -import{_ as l,r as c,o as u,c as i,b as t,w as a,a as n,F as r,d as s}from"./app.cfdf84e7.js";const k={},b=n("h1",{id:"name-service",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#name-service","aria-hidden":"true"},"#"),s(" Name Service")],-1),m=n("h2",{id:"name-registry",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#name-registry","aria-hidden":"true"},"#"),s(" Name registry")],-1),d=n("p",null,"name registry \u0E08\u0E30\u0E21\u0E35\u0E44\u0E27\u0E49\u0E40\u0E01\u0E47\u0E1A\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E40\u0E01\u0E35\u0E48\u0E22\u0E27\u0E01\u0E31\u0E1A domain name \u0E0B\u0E36\u0E48\u0E07\u0E08\u0E30\u0E41\u0E1A\u0E48\u0E07\u0E40\u0E1B\u0E47\u0E19 2 \u0E2A\u0E48\u0E27\u0E19\u0E04\u0E37\u0E2D:",-1),y=n("ul",null,[n("li",null,"The header"),n("li",null,"The data")],-1),w=n("p",null,"\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E02\u0E2D\u0E07 domain name \u0E08\u0E30\u0E02\u0E36\u0E49\u0E19\u0E15\u0E49\u0E19\u0E14\u0E49\u0E27\u0E22 header \u0E2A\u0E48\u0E27\u0E19\u0E14\u0E49\u0E32\u0E19\u0E25\u0E48\u0E32\u0E07\u0E19\u0E35\u0E49\u0E04\u0E37\u0E2D structure \u0E02\u0E2D\u0E07 header \u0E43\u0E19 JS:",-1),g=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(`
    +import{_ as l,r as c,o as u,c as r,b as t,w as a,a as n,F as i,d as s}from"./app.2fbb9e96.js";const k={},b=n("h1",{id:"name-service",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#name-service","aria-hidden":"true"},"#"),s(" Name Service")],-1),m=n("h2",{id:"name-registry",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#name-registry","aria-hidden":"true"},"#"),s(" Name registry")],-1),d=n("p",null,"name registry \u0E08\u0E30\u0E21\u0E35\u0E44\u0E27\u0E49\u0E40\u0E01\u0E47\u0E1A\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E40\u0E01\u0E35\u0E48\u0E22\u0E27\u0E01\u0E31\u0E1A domain name \u0E0B\u0E36\u0E48\u0E07\u0E08\u0E30\u0E41\u0E1A\u0E48\u0E07\u0E40\u0E1B\u0E47\u0E19 2 \u0E2A\u0E48\u0E27\u0E19\u0E04\u0E37\u0E2D:",-1),y=n("ul",null,[n("li",null,"The header"),n("li",null,"The data")],-1),w=n("p",null,"\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E02\u0E2D\u0E07 domain name \u0E08\u0E30\u0E02\u0E36\u0E49\u0E19\u0E15\u0E49\u0E19\u0E14\u0E49\u0E27\u0E22 header \u0E2A\u0E48\u0E27\u0E19\u0E14\u0E49\u0E32\u0E19\u0E25\u0E48\u0E32\u0E07\u0E19\u0E35\u0E49\u0E04\u0E37\u0E2D structure \u0E02\u0E2D\u0E07 header \u0E43\u0E19 JS:",-1),g=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(`
     `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Schema "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"borsh"'),n("span",{class:"token punctuation"},";"),s(`
     
     `),n("span",{class:"token keyword"},"export"),s(),n("span",{class:"token keyword"},"class"),s(),n("span",{class:"token class-name"},"NameRegistryState"),s(),n("span",{class:"token punctuation"},"{"),s(`
    @@ -152,7 +152,7 @@ import{_ as l,r as c,o as u,c as i,b as t,w as a,a as n,F as r,d as s}from"./app
     `),n("span",{class:"token keyword"},"const"),s(" subDomain "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"demo"'),n("span",{class:"token punctuation"},";"),s(`
     
     `),n("span",{class:"token comment"},"// Step 1"),s(`
    -`),n("span",{class:"token keyword"},"const"),s(" hashedParentDomain "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(),n("span",{class:"token function"},"getHashedName"),n("span",{class:"token punctuation"},"("),s("mainDomain"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
    +`),n("span",{class:"token keyword"},"const"),s(" hashedParentDomain "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(),n("span",{class:"token function"},"getHashedName"),n("span",{class:"token punctuation"},"("),s("parentDomain"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
     `),n("span",{class:"token keyword"},"const"),s(" parentDomainKey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(),n("span",{class:"token function"},"getNameAccountKey"),n("span",{class:"token punctuation"},"("),s(`
       hashedParentDomain`),n("span",{class:"token punctuation"},","),s(`
       `),n("span",{class:"token keyword"},"undefined"),n("span",{class:"token punctuation"},","),s(`
    @@ -230,4 +230,4 @@ import{_ as l,r as c,o as u,c as i,b as t,w as a,a as n,F as r,d as s}from"./app
     `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br")])],-1),Z=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" handle "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"bonfida"'),n("span",{class:"token punctuation"},";"),s(`
     
     `),n("span",{class:"token keyword"},"const"),s(" registry "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(),n("span",{class:"token function"},"getTwitterRegistry"),n("span",{class:"token punctuation"},"("),s("connection"),n("span",{class:"token punctuation"},","),s(" handle"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
    -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1);function q(z,Q){const e=c("SolanaCodeGroupItem"),o=c("SolanaCodeGroup"),p=c("ExternalLinkIcon");return u(),i(r,null,[b,m,d,y,w,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[g]),preview:a(()=>[h]),_:1})]),_:1}),f,_,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[v]),preview:a(()=>[K]),_:1})]),_:1}),N,S,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[A]),preview:a(()=>[P]),_:1})]),_:1}),R,x,D,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[T]),preview:a(()=>[L]),_:1})]),_:1}),U,C,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[H]),preview:a(()=>[j]),_:1})]),_:1}),B,n("p",null,[G,n("a",O,[M,t(p)]),E]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[F]),preview:a(()=>[V]),_:1})]),_:1}),Y,I,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[J]),preview:a(()=>[Z]),_:1})]),_:1})],64)}var X=l(k,[["render",q]]);export{X as default};
    +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br")])],-1);function q(z,Q){const e=c("SolanaCodeGroupItem"),o=c("SolanaCodeGroup"),p=c("ExternalLinkIcon");return u(),r(i,null,[b,m,d,y,w,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[g]),preview:a(()=>[h]),_:1})]),_:1}),f,_,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[v]),preview:a(()=>[K]),_:1})]),_:1}),N,S,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[A]),preview:a(()=>[P]),_:1})]),_:1}),R,x,D,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[T]),preview:a(()=>[L]),_:1})]),_:1}),U,C,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[H]),preview:a(()=>[j]),_:1})]),_:1}),B,n("p",null,[G,n("a",O,[M,t(p)]),E]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[F]),preview:a(()=>[V]),_:1})]),_:1}),Y,I,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[J]),preview:a(()=>[Z]),_:1})]),_:1})],64)}var X=l(k,[["render",q]]);export{X as default};
    diff --git a/docs/.vuepress/dist/assets/name-service.html.18e9d43d.js b/docs/.vuepress/dist/assets/name-service.html.e457c71e.js
    similarity index 99%
    rename from docs/.vuepress/dist/assets/name-service.html.18e9d43d.js
    rename to docs/.vuepress/dist/assets/name-service.html.e457c71e.js
    index be33a373e..3086aa4e5 100644
    --- a/docs/.vuepress/dist/assets/name-service.html.18e9d43d.js
    +++ b/docs/.vuepress/dist/assets/name-service.html.e457c71e.js
    @@ -1,4 +1,4 @@
    -import{_ as l,r as c,o as u,c as i,b as t,w as a,a as n,F as r,d as s}from"./app.cfdf84e7.js";const k={},b=n("h1",{id:"dich-vu-ten-mien",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#dich-vu-ten-mien","aria-hidden":"true"},"#"),s(" D\u1ECBch v\u1EE5 t\xEAn mi\u1EC1n")],-1),m=n("h2",{id:"dich-vu-\u0111ang-ky-ten-mien",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#dich-vu-\u0111ang-ky-ten-mien","aria-hidden":"true"},"#"),s(" D\u1ECBch v\u1EE5 \u0111\u0103ng k\xFD t\xEAn mi\u1EC1n")],-1),d=n("p",null,"D\u1ECBch v\u1EE5 \u0111\u0103ng k\xFD t\xEAn mi\u1EC1n l\u01B0u tr\u1EEF th\xF4ng tin v\u1EC1 t\xEAn mi\u1EC1n. N\xF3 \u0111\u01B0\u1EE3c c\u1EA5u t\u1EA1o b\u1EDFi 2 ph\u1EA7n:",-1),y=n("ul",null,[n("li",null,"Ph\u1EA7n m\xE0o \u0111\u1EA7u"),n("li",null,"Ph\xE0n d\u1EEF li\u1EC7u")],-1),w=n("p",null,"D\u1EEF li\u1EC7u cho t\xEAn mi\u1EC1n l\u01B0u \u0111\u01B0\u1EE3c \u0111\u1EE9ng tr\u01B0\u1EDBc b\u1EDFi m\u1ED9t ph\u1EA7n m\xE0o \u0111\u1EA7u, b\xEAn d\u01B0\u1EDBi l\xE0 c\u1EA5u tr\xFAc c\u1EE7a ph\u1EA7n m\xE0o \u0111\u1EA7u trong JS:",-1),h=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(`
    +import{_ as l,r as c,o as u,c as i,b as t,w as a,a as n,F as r,d as s}from"./app.2fbb9e96.js";const k={},b=n("h1",{id:"dich-vu-ten-mien",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#dich-vu-ten-mien","aria-hidden":"true"},"#"),s(" D\u1ECBch v\u1EE5 t\xEAn mi\u1EC1n")],-1),m=n("h2",{id:"dich-vu-\u0111ang-ky-ten-mien",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#dich-vu-\u0111ang-ky-ten-mien","aria-hidden":"true"},"#"),s(" D\u1ECBch v\u1EE5 \u0111\u0103ng k\xFD t\xEAn mi\u1EC1n")],-1),d=n("p",null,"D\u1ECBch v\u1EE5 \u0111\u0103ng k\xFD t\xEAn mi\u1EC1n l\u01B0u tr\u1EEF th\xF4ng tin v\u1EC1 t\xEAn mi\u1EC1n. N\xF3 \u0111\u01B0\u1EE3c c\u1EA5u t\u1EA1o b\u1EDFi 2 ph\u1EA7n:",-1),y=n("ul",null,[n("li",null,"Ph\u1EA7n m\xE0o \u0111\u1EA7u"),n("li",null,"Ph\xE0n d\u1EEF li\u1EC7u")],-1),w=n("p",null,"D\u1EEF li\u1EC7u cho t\xEAn mi\u1EC1n l\u01B0u \u0111\u01B0\u1EE3c \u0111\u1EE9ng tr\u01B0\u1EDBc b\u1EDFi m\u1ED9t ph\u1EA7n m\xE0o \u0111\u1EA7u, b\xEAn d\u01B0\u1EDBi l\xE0 c\u1EA5u tr\xFAc c\u1EE7a ph\u1EA7n m\xE0o \u0111\u1EA7u trong JS:",-1),h=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(`
     `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Schema "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"borsh"'),n("span",{class:"token punctuation"},";"),s(`
     
     `),n("span",{class:"token keyword"},"export"),s(),n("span",{class:"token keyword"},"class"),s(),n("span",{class:"token class-name"},"NameRegistryState"),s(),n("span",{class:"token punctuation"},"{"),s(`
    @@ -152,7 +152,7 @@ import{_ as l,r as c,o as u,c as i,b as t,w as a,a as n,F as r,d as s}from"./app
     `),n("span",{class:"token keyword"},"const"),s(" subDomain "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token string"},'"demo"'),n("span",{class:"token punctuation"},";"),s(`
     
     `),n("span",{class:"token comment"},"// Step 1"),s(`
    -`),n("span",{class:"token keyword"},"const"),s(" hashedParentDomain "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(),n("span",{class:"token function"},"getHashedName"),n("span",{class:"token punctuation"},"("),s("mainDomain"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
    +`),n("span",{class:"token keyword"},"const"),s(" hashedParentDomain "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(),n("span",{class:"token function"},"getHashedName"),n("span",{class:"token punctuation"},"("),s("parentDomain"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
     `),n("span",{class:"token keyword"},"const"),s(" parentDomainKey "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(),n("span",{class:"token function"},"getNameAccountKey"),n("span",{class:"token punctuation"},"("),s(`
       hashedParentDomain`),n("span",{class:"token punctuation"},","),s(`
       `),n("span",{class:"token keyword"},"undefined"),n("span",{class:"token punctuation"},","),s(`
    diff --git a/docs/.vuepress/dist/assets/nfts.html.5030148a.js b/docs/.vuepress/dist/assets/nfts.html.16b8d53d.js
    similarity index 96%
    rename from docs/.vuepress/dist/assets/nfts.html.5030148a.js
    rename to docs/.vuepress/dist/assets/nfts.html.16b8d53d.js
    index 39a7f0173..8af22a125 100644
    --- a/docs/.vuepress/dist/assets/nfts.html.5030148a.js
    +++ b/docs/.vuepress/dist/assets/nfts.html.16b8d53d.js
    @@ -1,4 +1,4 @@
    -import{_ as l,r as c,o as u,c as r,b as t,w as a,a as n,F as i,e as k,d as s}from"./app.cfdf84e7.js";const b={},m=k('

    Non Fungible Tokens (NFTs)

    How to create an NFT

    NFT\uB97C \uB9CC\uB4E4\uAE30 \uC704\uD574 \uB2F9\uC2E0\uC774 \uD574\uC57C \uD558\uB294 \uAC83:

    1. Arweave\uC640 \uAC19\uC740 IPFS\uC5D0 \uC774\uBBF8\uC9C0\uB97C \uC5C5\uB85C\uB2E4\uD569\uB2C8\uB2E4.
    2. Arweave\uC640 \uAC19\uC740 IPFS\uC5D0 json \uBA54\uD0C0\uB370\uC774\uD130\uB97C \uC5C5\uB85C\uB4DC\uD569\uB2C8\uB2E4.
    3. NFT\uB97C \uC704\uD55C Account\uB97C \uC0DD\uC131\uD558\uAE30 \uC704\uD574 metaplex\uB97C \uD638\uCD9C\uD569\uB2C8\uB2E4.

    Upload to Arweave

    ',5),d=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(" fs "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"fs"'),n("span",{class:"token punctuation"},";"),s(` +import{_ as l,r as c,o as u,c as r,b as t,w as a,a as n,F as i,e as k,d as s}from"./app.2fbb9e96.js";const b={},m=k('

    Non Fungible Tokens (NFTs)

    How to create an NFT

    NFT\uB97C \uB9CC\uB4E4\uAE30 \uC704\uD574 \uB2F9\uC2E0\uC774 \uD574\uC57C \uD558\uB294 \uAC83:

    1. Arweave\uC640 \uAC19\uC740 IPFS\uC5D0 \uC774\uBBF8\uC9C0\uB97C \uC5C5\uB85C\uB2E4\uD569\uB2C8\uB2E4.
    2. Arweave\uC640 \uAC19\uC740 IPFS\uC5D0 json \uBA54\uD0C0\uB370\uC774\uD130\uB97C \uC5C5\uB85C\uB4DC\uD569\uB2C8\uB2E4.
    3. NFT\uB97C \uC704\uD55C Account\uB97C \uC0DD\uC131\uD558\uAE30 \uC704\uD574 metaplex\uB97C \uD638\uCD9C\uD569\uB2C8\uB2E4.

    Upload to Arweave

    ',5),d=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(" fs "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"fs"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(" Arweave "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"arweave"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -242,11 +242,13 @@ dotenv`),n("span",{class:"token punctuation"},"."),n("span",{class:"token functi `),n("span",{class:"token keyword"},"const"),s(" metaplex "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Metaplex"),n("span",{class:"token punctuation"},"("),s("connection"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` metaplex`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"use"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"keypairIdentity"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` - `),n("span",{class:"token keyword"},"const"),s(" mint "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Ay1U9DWphDgc7hq58Yj1yHabt91zTzvV2YJbAWkPNbaK"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token keyword"},"const"),s(" mintAddress "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),s(` + `),n("span",{class:"token string"},'"Ay1U9DWphDgc7hq58Yj1yHabt91zTzvV2YJbAWkPNbaK"'),s(` + `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` - `),n("span",{class:"token keyword"},"const"),s(" nft "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" metaplex"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"nfts"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"findByMint"),n("span",{class:"token punctuation"},"("),s("mint"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token keyword"},"const"),s(" nft "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" metaplex"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"nfts"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"findByMint"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"{"),s(" mintAddress "),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` - `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("nft"),n("span",{class:"token punctuation"},"."),s("metadata"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("nft"),n("span",{class:"token punctuation"},"."),s("json"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token comment"},`/* { name: 'SMB #139', @@ -273,18 +275,20 @@ dotenv`),n("span",{class:"token punctuation"},"."),n("span",{class:"token functi } */`),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br")])],-1),R=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" connection "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"clusterApiUrl"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"mainnet-beta"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br")])],-1),R=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" connection "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"clusterApiUrl"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"mainnet-beta"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" metaplex "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Metaplex"),n("span",{class:"token punctuation"},"("),s("connection"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` metaplex`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"use"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"keypairIdentity"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`),n("span",{class:"token keyword"},"const"),s(" mint "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Ay1U9DWphDgc7hq58Yj1yHabt91zTzvV2YJbAWkPNbaK"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token keyword"},"const"),s(" mintAddress "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),s(` + `),n("span",{class:"token string"},'"Ay1U9DWphDgc7hq58Yj1yHabt91zTzvV2YJbAWkPNbaK"'),s(` +`),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`),n("span",{class:"token keyword"},"const"),s(" nft "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" metaplex"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"nfts"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"findByMint"),n("span",{class:"token punctuation"},"("),s("mint"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token keyword"},"const"),s(" nft "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" metaplex"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"nfts"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"findByMint"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"{"),s(" mintAddress "),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("nft"),n("span",{class:"token punctuation"},"."),s("metadata"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),C=n("h2",{id:"how-to-get-the-owner-of-an-nft",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-get-the-owner-of-an-nft","aria-hidden":"true"},"#"),s(" How to get the owner of an NFT")],-1),x=n("p",null,"\uB9CC\uC57D \uB2F9\uC2E0\uC774 NFT\uC758 mint key\uB97C \uAC16\uACE0 \uC788\uB2E4\uBA74, \uADF8 mint key\uC5D0 \uB300\uD55C \uAC00\uC7A5 \uD070 Token Account\uB97C \uBAB0\uB798 \uC5FF\uBD10\uC11C \uC774 NFT\uC758 \uD604\uC7AC \uC18C\uC720\uC790\uB97C \uCC3E\uC744 \uC218 \uC788\uC2B5\uB2C8\uB2E4.",-1),E=n("p",null,"NFT\uB4E4\uC740 1\uAC1C\uC758 Token\uC744 \uAC00\uC9C4\uB2E4\uB294 \uAC83\uACFC \uB098\uB20C \uC218 \uC5C6\uB2E4\uB294 \uAC83\uC744 \uAE30\uC5B5\uD558\uC138\uC694. \uC774\uAC83\uC740 \uC624\uC9C1 \uD558\uB098\uC758 Token Account\uB9CC\uC774 \uADF8 Token\uC744 \uAC00\uC9C4\uB2E4\uB294 \uAC83\uC744 \uC758\uBBF8\uD569\uB2C8\uB2E4. \uADF8\uB9AC\uACE0 \uD574\uB2F9 mint key\uC5D0 \uB300\uD55C \uBAA8\uB4E0 \uB2E4\uB978 Token Account\uB4E4\uC740 0 balance\uB97C \uAC00\uC9C8 \uAC83\uC785\uB2C8\uB2E4.",-1),S=n("p",null,"\uAC00\uC7A5 \uD070 Token Account\uAC00 \uC2DD\uBCC4\uB41C\uB2E4\uBA74 \uC6B0\uB9AC\uB294 \uC774 Account\uC758 \uC18C\uC720\uC790\uB97C \uC870\uD68C\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.",-1),P=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("nft"),n("span",{class:"token punctuation"},"."),s("json"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br")])],-1),C=n("h2",{id:"how-to-get-the-owner-of-an-nft",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-get-the-owner-of-an-nft","aria-hidden":"true"},"#"),s(" How to get the owner of an NFT")],-1),x=n("p",null,"\uB9CC\uC57D \uB2F9\uC2E0\uC774 NFT\uC758 mint key\uB97C \uAC16\uACE0 \uC788\uB2E4\uBA74, \uADF8 mint key\uC5D0 \uB300\uD55C \uAC00\uC7A5 \uD070 Token Account\uB97C \uBAB0\uB798 \uC5FF\uBD10\uC11C \uC774 NFT\uC758 \uD604\uC7AC \uC18C\uC720\uC790\uB97C \uCC3E\uC744 \uC218 \uC788\uC2B5\uB2C8\uB2E4.",-1),E=n("p",null,"NFT\uB4E4\uC740 1\uAC1C\uC758 Token\uC744 \uAC00\uC9C4\uB2E4\uB294 \uAC83\uACFC \uB098\uB20C \uC218 \uC5C6\uB2E4\uB294 \uAC83\uC744 \uAE30\uC5B5\uD558\uC138\uC694. \uC774\uAC83\uC740 \uC624\uC9C1 \uD558\uB098\uC758 Token Account\uB9CC\uC774 \uADF8 Token\uC744 \uAC00\uC9C4\uB2E4\uB294 \uAC83\uC744 \uC758\uBBF8\uD569\uB2C8\uB2E4. \uADF8\uB9AC\uACE0 \uD574\uB2F9 mint key\uC5D0 \uB300\uD55C \uBAA8\uB4E0 \uB2E4\uB978 Token Account\uB4E4\uC740 0 balance\uB97C \uAC00\uC9C8 \uAC83\uC785\uB2C8\uB2E4.",-1),S=n("p",null,"\uAC00\uC7A5 \uD070 Token Account\uAC00 \uC2DD\uBCC4\uB41C\uB2E4\uBA74 \uC6B0\uB9AC\uB294 \uC774 Account\uC758 \uC18C\uC720\uC790\uB97C \uC870\uD68C\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.",-1),P=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"const"),s(" connection "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.mainnet-beta.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` @@ -511,7 +515,7 @@ metaplex`),n("span",{class:"token punctuation"},"."),n("span",{class:"token func metaplex`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"use"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"keypairIdentity"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" owner "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"2R4bHmSBHkHAskerTHE6GE1Fxbn31kaD5gHqpsPySVd7"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` - `),n("span",{class:"token keyword"},"const"),s(" allNFTs "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" metaplex"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"nfts"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"findAllByOwner"),n("span",{class:"token punctuation"},"("),s("owner"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token keyword"},"const"),s(" allNFTs "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" metaplex"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"nfts"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"findAllByOwner"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"{"),s(" owner "),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("allNFTs"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` @@ -522,7 +526,7 @@ metaplex`),n("span",{class:"token punctuation"},"."),n("span",{class:"token func metaplex`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"use"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"keypairIdentity"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" owner "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"2R4bHmSBHkHAskerTHE6GE1Fxbn31kaD5gHqpsPySVd7"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`),n("span",{class:"token keyword"},"const"),s(" allNFTs "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" metaplex"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"nfts"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"findAllByOwner"),n("span",{class:"token punctuation"},"("),s("owner"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token keyword"},"const"),s(" allNFTs "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" metaplex"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"nfts"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"findAllByOwner"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"{"),s(" owner "),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("allNFTs"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1);function W(J,Z){const e=c("SolanaCodeGroupItem"),o=c("SolanaCodeGroup"),p=c("ExternalLinkIcon");return u(),r(i,null,[m,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[d]),preview:a(()=>[y]),_:1}),t(e,{title:"Python"},{default:a(()=>[w]),preview:a(()=>[g]),_:1})]),_:1}),f,_,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[A]),preview:a(()=>[h]),_:1})]),_:1}),T,M,v,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[N]),preview:a(()=>[R]),_:1})]),_:1}),C,x,E,S,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[P]),preview:a(()=>[I]),_:1})]),_:1}),F,L,U,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[O]),preview:a(()=>[H]),_:1})]),_:1}),K,B,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[X]),preview:a(()=>[G]),_:1})]),_:1}),j,n("p",null,[D,n("a",Y,[q,t(p)]),V]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[z]),preview:a(()=>[Q]),_:1})]),_:1})],64)}var nn=l(b,[["render",W]]);export{nn as default}; diff --git a/docs/.vuepress/dist/assets/nfts.html.d4ba8157.js b/docs/.vuepress/dist/assets/nfts.html.2105e347.js similarity index 98% rename from docs/.vuepress/dist/assets/nfts.html.d4ba8157.js rename to docs/.vuepress/dist/assets/nfts.html.2105e347.js index dcf1b99dc..ba5047226 100644 --- a/docs/.vuepress/dist/assets/nfts.html.d4ba8157.js +++ b/docs/.vuepress/dist/assets/nfts.html.2105e347.js @@ -1,4 +1,4 @@ -import{_ as l,r as p,o as u,c as i,b as t,w as a,a as n,F as r,e as k,d as s}from"./app.cfdf84e7.js";const b={},m=k('

    Nicht fungible Tokens (NFTs)

    So erstellen Sie eine NFT

    Um eine NFT zu erstellen, m\xFCssen Sie:

    1. Laden Sie das Bild zu Arweave oder IPFS hoch
    2. Laden Sie die json-Metadaten zu Arweave oder IPFS hoch
    3. Rufen Sie metaplex auf, um ein Konto f\xFCr das NFT zu erstellen

    Upload zu Arweave

    ',5),d=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(" fs "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"fs"'),n("span",{class:"token punctuation"},";"),s(` +import{_ as l,r as p,o as u,c as i,b as t,w as a,a as n,F as r,e as k,d as s}from"./app.2fbb9e96.js";const b={},m=k('

    Nicht fungible Tokens (NFTs)

    So erstellen Sie eine NFT

    Um eine NFT zu erstellen, m\xFCssen Sie:

    1. Laden Sie das Bild zu Arweave oder IPFS hoch
    2. Laden Sie die json-Metadaten zu Arweave oder IPFS hoch
    3. Rufen Sie metaplex auf, um ein Konto f\xFCr das NFT zu erstellen

    Upload zu Arweave

    ',5),d=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(" fs "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"fs"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(" Arweave "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"arweave"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -242,11 +242,13 @@ dotenv`),n("span",{class:"token punctuation"},"."),n("span",{class:"token functi `),n("span",{class:"token keyword"},"const"),s(" metaplex "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Metaplex"),n("span",{class:"token punctuation"},"("),s("connection"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` metaplex`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"use"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"keypairIdentity"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` - `),n("span",{class:"token keyword"},"const"),s(" mint "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Ay1U9DWphDgc7hq58Yj1yHabt91zTzvV2YJbAWkPNbaK"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token keyword"},"const"),s(" mintAddress "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),s(` + `),n("span",{class:"token string"},'"Ay1U9DWphDgc7hq58Yj1yHabt91zTzvV2YJbAWkPNbaK"'),s(` + `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` - `),n("span",{class:"token keyword"},"const"),s(" nft "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" metaplex"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"nfts"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"findByMint"),n("span",{class:"token punctuation"},"("),s("mint"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token keyword"},"const"),s(" nft "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" metaplex"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"nfts"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"findByMint"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"{"),s(" mintAddress "),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` - `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("nft"),n("span",{class:"token punctuation"},"."),s("metadata"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("nft"),n("span",{class:"token punctuation"},"."),s("json"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token comment"},`/* { name: 'SMB #139', @@ -273,18 +275,20 @@ dotenv`),n("span",{class:"token punctuation"},"."),n("span",{class:"token functi } */`),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br")])],-1),S=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" connection "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"clusterApiUrl"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"mainnet-beta"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br")])],-1),S=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" connection "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"clusterApiUrl"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"mainnet-beta"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" metaplex "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Metaplex"),n("span",{class:"token punctuation"},"("),s("connection"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` metaplex`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"use"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"keypairIdentity"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`),n("span",{class:"token keyword"},"const"),s(" mint "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Ay1U9DWphDgc7hq58Yj1yHabt91zTzvV2YJbAWkPNbaK"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token keyword"},"const"),s(" mintAddress "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),s(` + `),n("span",{class:"token string"},'"Ay1U9DWphDgc7hq58Yj1yHabt91zTzvV2YJbAWkPNbaK"'),s(` +`),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`),n("span",{class:"token keyword"},"const"),s(" nft "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" metaplex"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"nfts"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"findByMint"),n("span",{class:"token punctuation"},"("),s("mint"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token keyword"},"const"),s(" nft "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" metaplex"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"nfts"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"findByMint"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"{"),s(" mintAddress "),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("nft"),n("span",{class:"token punctuation"},"."),s("metadata"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),C=n("h2",{id:"so-erhalten-sie-den-besitzer-eines-nft",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#so-erhalten-sie-den-besitzer-eines-nft","aria-hidden":"true"},"#"),s(" So erhalten Sie den Besitzer eines NFT")],-1),N=n("p",null,"Wenn Sie den M\xFCnzschl\xFCssel (Token Address) eines NFT haben, k\xF6nnen Sie seinen aktuellen Besitzer durch Sneak-Peeking auf das gr\xF6\xDFte Token-Konto f\xFCr diesen Mint-Key finden.",-1),R=n("p",null,"Denken Sie daran, dass NFTs einen Vorrat von 1 haben und unteilbar sind. was bedeutet, dass nur ein Token-Konto dieses Token zu einem beliebigen Zeitpunkt halten wird, w\xE4hrend alle anderen Token-Konten f\xFCr diesen M\xFCnzschl\xFCssel, die dies tun einen Saldo von 0 haben.",-1),K=n("p",null,"Sobald das gr\xF6\xDFte Token-Konto identifiziert ist, k\xF6nnen wir seinen Besitzer abrufen.",-1),P=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("nft"),n("span",{class:"token punctuation"},"."),s("json"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br")])],-1),C=n("h2",{id:"so-erhalten-sie-den-besitzer-eines-nft",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#so-erhalten-sie-den-besitzer-eines-nft","aria-hidden":"true"},"#"),s(" So erhalten Sie den Besitzer eines NFT")],-1),N=n("p",null,"Wenn Sie den M\xFCnzschl\xFCssel (Token Address) eines NFT haben, k\xF6nnen Sie seinen aktuellen Besitzer durch Sneak-Peeking auf das gr\xF6\xDFte Token-Konto f\xFCr diesen Mint-Key finden.",-1),R=n("p",null,"Denken Sie daran, dass NFTs einen Vorrat von 1 haben und unteilbar sind. was bedeutet, dass nur ein Token-Konto dieses Token zu einem beliebigen Zeitpunkt halten wird, w\xE4hrend alle anderen Token-Konten f\xFCr diesen M\xFCnzschl\xFCssel, die dies tun einen Saldo von 0 haben.",-1),K=n("p",null,"Sobald das gr\xF6\xDFte Token-Konto identifiziert ist, k\xF6nnen wir seinen Besitzer abrufen.",-1),P=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"const"),s(" connection "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.mainnet-beta.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` @@ -511,7 +515,7 @@ metaplex`),n("span",{class:"token punctuation"},"."),n("span",{class:"token func metaplex`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"use"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"keypairIdentity"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" owner "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"2R4bHmSBHkHAskerTHE6GE1Fxbn31kaD5gHqpsPySVd7"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` - `),n("span",{class:"token keyword"},"const"),s(" allNFTs "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" metaplex"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"nfts"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"findAllByOwner"),n("span",{class:"token punctuation"},"("),s("owner"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token keyword"},"const"),s(" allNFTs "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" metaplex"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"nfts"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"findAllByOwner"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"{"),s(" owner "),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("allNFTs"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` @@ -522,7 +526,7 @@ metaplex`),n("span",{class:"token punctuation"},"."),n("span",{class:"token func metaplex`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"use"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"keypairIdentity"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" owner "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"2R4bHmSBHkHAskerTHE6GE1Fxbn31kaD5gHqpsPySVd7"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`),n("span",{class:"token keyword"},"const"),s(" allNFTs "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" metaplex"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"nfts"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"findAllByOwner"),n("span",{class:"token punctuation"},"("),s("owner"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token keyword"},"const"),s(" allNFTs "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" metaplex"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"nfts"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"findAllByOwner"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"{"),s(" owner "),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("allNFTs"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),q=n("h2",{id:"candy-machine-v2-1",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#candy-machine-v2-1","aria-hidden":"true"},"#"),s(" Candy Machine v2")],-1),$=n("p",null,"Das Metaplex JS SDK unterst\xFCtzt jetzt das Erstellen und Aktualisieren von Candy Machine v2 per Code. Es erm\xF6glicht den Entwicklern, mit dem Candy Machine v2-Programm zu interagieren und Candy Machines zu erstellen, zu aktualisieren und zu l\xF6schen sowie NFTs mit ihnen zu pr\xE4gen.",-1),Q=n("h3",{id:"wie-erstelle-ich-eine-candy-machine",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#wie-erstelle-ich-eine-candy-machine","aria-hidden":"true"},"#"),s(" Wie erstelle ich eine Candy Machine?")],-1),J=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` diff --git a/docs/.vuepress/dist/assets/nfts.html.68f60f1e.js b/docs/.vuepress/dist/assets/nfts.html.2a267d1f.js similarity index 96% rename from docs/.vuepress/dist/assets/nfts.html.68f60f1e.js rename to docs/.vuepress/dist/assets/nfts.html.2a267d1f.js index 759df752c..f89c518c5 100644 --- a/docs/.vuepress/dist/assets/nfts.html.68f60f1e.js +++ b/docs/.vuepress/dist/assets/nfts.html.2a267d1f.js @@ -1,4 +1,4 @@ -import{_ as l,r as c,o as u,c as r,b as t,w as a,a as n,F as i,e as k,d as s}from"./app.cfdf84e7.js";const b={},m=k('

    Non Fungible Tokens (NFTs)

    L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 t\u1EA1o m\u1ED9t NFT

    \u0110\u1EC3 t\u1EA1o m\u1ED9t NFT b\u1EA1n ph\u1EA3i:

    1. \u0110\u0103ng t\u1EA3i \u1EA3nh l\xEAn IPFS v\xED nh\u01B0 Arweave
    2. \u0110\u0103ng t\u1EA3i json metadata l\xEAn IPFS v\xED nh\u01B0 Arweave
    3. G\u1ECDi metaplex \u0111\u1EC3 t\u1EA1o m\u1ED9t account cho NFT

    \u0110\u0103ng t\u1EA3i l\xEAn Arweave

    ',5),d=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(" fs "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"fs"'),n("span",{class:"token punctuation"},";"),s(` +import{_ as l,r as c,o as u,c as r,b as t,w as a,a as n,F as i,e as k,d as s}from"./app.2fbb9e96.js";const b={},m=k('

    Non Fungible Tokens (NFTs)

    L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 t\u1EA1o m\u1ED9t NFT

    \u0110\u1EC3 t\u1EA1o m\u1ED9t NFT b\u1EA1n ph\u1EA3i:

    1. \u0110\u0103ng t\u1EA3i \u1EA3nh l\xEAn IPFS v\xED nh\u01B0 Arweave
    2. \u0110\u0103ng t\u1EA3i json metadata l\xEAn IPFS v\xED nh\u01B0 Arweave
    3. G\u1ECDi metaplex \u0111\u1EC3 t\u1EA1o m\u1ED9t account cho NFT

    \u0110\u0103ng t\u1EA3i l\xEAn Arweave

    ',5),d=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(" fs "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"fs"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(" Arweave "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"arweave"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -242,11 +242,13 @@ dotenv`),n("span",{class:"token punctuation"},"."),n("span",{class:"token functi `),n("span",{class:"token keyword"},"const"),s(" metaplex "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Metaplex"),n("span",{class:"token punctuation"},"("),s("connection"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` metaplex`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"use"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"keypairIdentity"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` - `),n("span",{class:"token keyword"},"const"),s(" mint "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Ay1U9DWphDgc7hq58Yj1yHabt91zTzvV2YJbAWkPNbaK"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token keyword"},"const"),s(" mintAddress "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),s(` + `),n("span",{class:"token string"},'"Ay1U9DWphDgc7hq58Yj1yHabt91zTzvV2YJbAWkPNbaK"'),s(` + `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` - `),n("span",{class:"token keyword"},"const"),s(" nft "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" metaplex"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"nfts"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"findByMint"),n("span",{class:"token punctuation"},"("),s("mint"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token keyword"},"const"),s(" nft "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" metaplex"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"nfts"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"findByMint"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"{"),s(" mintAddress "),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` - `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("nft"),n("span",{class:"token punctuation"},"."),s("metadata"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("nft"),n("span",{class:"token punctuation"},"."),s("json"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token comment"},`/* { name: 'SMB #139', @@ -273,18 +275,20 @@ dotenv`),n("span",{class:"token punctuation"},"."),n("span",{class:"token functi } */`),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br")])],-1),C=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" connection "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"clusterApiUrl"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"mainnet-beta"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br")])],-1),C=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" connection "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"clusterApiUrl"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"mainnet-beta"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" metaplex "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Metaplex"),n("span",{class:"token punctuation"},"("),s("connection"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` metaplex`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"use"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"keypairIdentity"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`),n("span",{class:"token keyword"},"const"),s(" mint "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Ay1U9DWphDgc7hq58Yj1yHabt91zTzvV2YJbAWkPNbaK"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token keyword"},"const"),s(" mintAddress "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),s(` + `),n("span",{class:"token string"},'"Ay1U9DWphDgc7hq58Yj1yHabt91zTzvV2YJbAWkPNbaK"'),s(` +`),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`),n("span",{class:"token keyword"},"const"),s(" nft "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" metaplex"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"nfts"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"findByMint"),n("span",{class:"token punctuation"},"("),s("mint"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token keyword"},"const"),s(" nft "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" metaplex"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"nfts"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"findByMint"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"{"),s(" mintAddress "),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("nft"),n("span",{class:"token punctuation"},"."),s("metadata"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),R=n("h2",{id:"lam-the-nao-\u0111e-truy-van-chu-so-huu-cua-mot-nfts",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#lam-the-nao-\u0111e-truy-van-chu-so-huu-cua-mot-nfts","aria-hidden":"true"},"#"),s(" L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 truy v\u1EA5n ch\u1EE7 s\u1EDF h\u1EEFu c\u1EE7a m\u1ED9t NFTs")],-1),x=n("p",null,"N\u1EBFu b\u1EA1n c\xF3 \u0111\u1ECBa ch\u1EC9 mint c\u1EE7a m\u1ED9t NFT, b\u1EA1n c\xF3 th\u1EC3 t\xECm \u0111\u01B0\u1EE3c ch\u1EE7 s\u1EDF h\u1EEFu hi\u1EC7n t\u1EA1i c\u1EE7a n\xF3 b\u1EB1ng truy v\u1EA5n token account l\u1EDBn nh\u1EA5t c\u1EE7a \u0111\u1ECBa ch\u1EC9 mint \u0111\xF3.",-1),E=n("p",null,"Nh\u1EDB r\u1EB1ng v\xEC t\u1ED5ng cung c\u1EE7a NFT l\xE0 1, v\xE0 ch\xFAng kh\xF4ng th\u1EC3 chia nh\u1ECF h\u01A1n, n\xEAn ch\u1EC9 c\xF3 duy nh\u1EA5t m\u1ED9t token account s\u1EBD ch\u1EE9a token \u0111\xF3 \u1EDF m\u1ECDi l\xFAc. T\u1EA5t c\u1EA3 c\xE1c token account kh\xE1c s\u1EBD c\xF3 s\u1ED1 d\u01B0 l\xE0 0.",-1),S=n("p",null,"M\u1ED9t khi token account l\u1EDBn nh\u1EA5t \u0111\u01B0\u1EE3c x\xE1c \u0111\u1ECBnh, ch\xFAng ta c\xF3 th\u1EC3 truy v\u1EA5n ch\u1EE7 s\u1EE1 h\u1EEFu c\u1EE7a n\xF3.",-1),P=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("nft"),n("span",{class:"token punctuation"},"."),s("json"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br")])],-1),R=n("h2",{id:"lam-the-nao-\u0111e-truy-van-chu-so-huu-cua-mot-nfts",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#lam-the-nao-\u0111e-truy-van-chu-so-huu-cua-mot-nfts","aria-hidden":"true"},"#"),s(" L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 truy v\u1EA5n ch\u1EE7 s\u1EDF h\u1EEFu c\u1EE7a m\u1ED9t NFTs")],-1),x=n("p",null,"N\u1EBFu b\u1EA1n c\xF3 \u0111\u1ECBa ch\u1EC9 mint c\u1EE7a m\u1ED9t NFT, b\u1EA1n c\xF3 th\u1EC3 t\xECm \u0111\u01B0\u1EE3c ch\u1EE7 s\u1EDF h\u1EEFu hi\u1EC7n t\u1EA1i c\u1EE7a n\xF3 b\u1EB1ng truy v\u1EA5n token account l\u1EDBn nh\u1EA5t c\u1EE7a \u0111\u1ECBa ch\u1EC9 mint \u0111\xF3.",-1),E=n("p",null,"Nh\u1EDB r\u1EB1ng v\xEC t\u1ED5ng cung c\u1EE7a NFT l\xE0 1, v\xE0 ch\xFAng kh\xF4ng th\u1EC3 chia nh\u1ECF h\u01A1n, n\xEAn ch\u1EC9 c\xF3 duy nh\u1EA5t m\u1ED9t token account s\u1EBD ch\u1EE9a token \u0111\xF3 \u1EDF m\u1ECDi l\xFAc. T\u1EA5t c\u1EA3 c\xE1c token account kh\xE1c s\u1EBD c\xF3 s\u1ED1 d\u01B0 l\xE0 0.",-1),S=n("p",null,"M\u1ED9t khi token account l\u1EDBn nh\u1EA5t \u0111\u01B0\u1EE3c x\xE1c \u0111\u1ECBnh, ch\xFAng ta c\xF3 th\u1EC3 truy v\u1EA5n ch\u1EE7 s\u1EE1 h\u1EEFu c\u1EE7a n\xF3.",-1),P=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"const"),s(" connection "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.mainnet-beta.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` @@ -511,7 +515,7 @@ metaplex`),n("span",{class:"token punctuation"},"."),n("span",{class:"token func metaplex`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"use"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"keypairIdentity"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" owner "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"2R4bHmSBHkHAskerTHE6GE1Fxbn31kaD5gHqpsPySVd7"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` - `),n("span",{class:"token keyword"},"const"),s(" allNFTs "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" metaplex"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"nfts"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"findAllByOwner"),n("span",{class:"token punctuation"},"("),s("owner"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token keyword"},"const"),s(" allNFTs "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" metaplex"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"nfts"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"findAllByOwner"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"{"),s(" owner "),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("allNFTs"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` @@ -522,7 +526,7 @@ metaplex`),n("span",{class:"token punctuation"},"."),n("span",{class:"token func metaplex`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"use"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"keypairIdentity"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" owner "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"2R4bHmSBHkHAskerTHE6GE1Fxbn31kaD5gHqpsPySVd7"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`),n("span",{class:"token keyword"},"const"),s(" allNFTs "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" metaplex"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"nfts"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"findAllByOwner"),n("span",{class:"token punctuation"},"("),s("owner"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token keyword"},"const"),s(" allNFTs "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" metaplex"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"nfts"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"findAllByOwner"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"{"),s(" owner "),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("allNFTs"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1);function W(J,Z){const e=c("SolanaCodeGroupItem"),o=c("SolanaCodeGroup"),p=c("ExternalLinkIcon");return u(),r(i,null,[m,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[d]),preview:a(()=>[y]),_:1}),t(e,{title:"Python"},{default:a(()=>[g]),preview:a(()=>[w]),_:1})]),_:1}),f,_,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[h]),preview:a(()=>[A]),_:1})]),_:1}),T,v,M,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[N]),preview:a(()=>[C]),_:1})]),_:1}),R,x,E,S,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[P]),preview:a(()=>[I]),_:1})]),_:1}),L,F,O,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[U]),preview:a(()=>[K]),_:1})]),_:1}),H,B,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[G]),preview:a(()=>[X]),_:1})]),_:1}),j,n("p",null,[D,n("a",Y,[q,t(p)]),V]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[z]),preview:a(()=>[Q]),_:1})]),_:1})],64)}var nn=l(b,[["render",W]]);export{nn as default}; diff --git a/docs/.vuepress/dist/assets/nfts.html.c8b1398e.js b/docs/.vuepress/dist/assets/nfts.html.3e24ae11.js similarity index 98% rename from docs/.vuepress/dist/assets/nfts.html.c8b1398e.js rename to docs/.vuepress/dist/assets/nfts.html.3e24ae11.js index 0b68f1885..41b6c0bbd 100644 --- a/docs/.vuepress/dist/assets/nfts.html.c8b1398e.js +++ b/docs/.vuepress/dist/assets/nfts.html.3e24ae11.js @@ -1,4 +1,4 @@ -import{_ as l,r as p,o as u,c as i,b as t,w as a,a as n,F as r,e as k,d as s}from"./app.cfdf84e7.js";const b={},m=k('

    Non Fungible Tokens (NFTs)

    How to create an NFT

    To create an NFT you have to:

    1. Upload the image to IPFS like Arweave
    2. Upload the json metadata to IPFS like Arweave
    3. Call metaplex to create an account for the NFT

    Upload to Arweave

    ',5),d=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(" fs "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"fs"'),n("span",{class:"token punctuation"},";"),s(` +import{_ as l,r as p,o as u,c as i,b as t,w as a,a as n,F as r,e as k,d as s}from"./app.2fbb9e96.js";const b={},m=k('

    Non Fungible Tokens (NFTs)

    How to create an NFT

    To create an NFT you have to:

    1. Upload the image to IPFS like Arweave
    2. Upload the json metadata to IPFS like Arweave
    3. Call metaplex to create an account for the NFT

    Upload to Arweave

    ',5),d=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(" fs "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"fs"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(" Arweave "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"arweave"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -242,11 +242,13 @@ dotenv`),n("span",{class:"token punctuation"},"."),n("span",{class:"token functi `),n("span",{class:"token keyword"},"const"),s(" metaplex "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Metaplex"),n("span",{class:"token punctuation"},"("),s("connection"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` metaplex`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"use"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"keypairIdentity"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` - `),n("span",{class:"token keyword"},"const"),s(" mint "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Ay1U9DWphDgc7hq58Yj1yHabt91zTzvV2YJbAWkPNbaK"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token keyword"},"const"),s(" mintAddress "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),s(` + `),n("span",{class:"token string"},'"Ay1U9DWphDgc7hq58Yj1yHabt91zTzvV2YJbAWkPNbaK"'),s(` + `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` - `),n("span",{class:"token keyword"},"const"),s(" nft "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" metaplex"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"nfts"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"findByMint"),n("span",{class:"token punctuation"},"("),s("mint"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token keyword"},"const"),s(" nft "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" metaplex"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"nfts"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"findByMint"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"{"),s(" mintAddress "),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` - `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("nft"),n("span",{class:"token punctuation"},"."),s("metadata"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("nft"),n("span",{class:"token punctuation"},"."),s("json"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token comment"},`/* { name: 'SMB #139', @@ -273,18 +275,20 @@ dotenv`),n("span",{class:"token punctuation"},"."),n("span",{class:"token functi } */`),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br")])],-1),C=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" connection "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"clusterApiUrl"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"mainnet-beta"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br")])],-1),C=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" connection "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"clusterApiUrl"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"mainnet-beta"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" metaplex "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Metaplex"),n("span",{class:"token punctuation"},"("),s("connection"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` metaplex`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"use"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"keypairIdentity"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`),n("span",{class:"token keyword"},"const"),s(" mint "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Ay1U9DWphDgc7hq58Yj1yHabt91zTzvV2YJbAWkPNbaK"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token keyword"},"const"),s(" mintAddress "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),s(` + `),n("span",{class:"token string"},'"Ay1U9DWphDgc7hq58Yj1yHabt91zTzvV2YJbAWkPNbaK"'),s(` +`),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`),n("span",{class:"token keyword"},"const"),s(" nft "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" metaplex"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"nfts"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"findByMint"),n("span",{class:"token punctuation"},"("),s("mint"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token keyword"},"const"),s(" nft "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" metaplex"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"nfts"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"findByMint"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"{"),s(" mintAddress "),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("nft"),n("span",{class:"token punctuation"},"."),s("metadata"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),N=n("h2",{id:"how-to-get-the-owner-of-an-nft",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-get-the-owner-of-an-nft","aria-hidden":"true"},"#"),s(" How to get the owner of an NFT")],-1),S=n("p",null,"If you have the mint key of an NFT, you can find its current owner by sneak-peeking at the largest token account for that mint key.",-1),R=n("p",null,"Remember that NFTs have a supply of 1, and they are indivisible, meaning that only one token account will hold that token at any point in time, whilst all other token accounts for that mint key will have a balance of 0.",-1),I=n("p",null,"Once the largest token account is identified, we can retrieve its owner.",-1),K=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("nft"),n("span",{class:"token punctuation"},"."),s("json"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br")])],-1),N=n("h2",{id:"how-to-get-the-owner-of-an-nft",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-get-the-owner-of-an-nft","aria-hidden":"true"},"#"),s(" How to get the owner of an NFT")],-1),S=n("p",null,"If you have the mint key of an NFT, you can find its current owner by sneak-peeking at the largest token account for that mint key.",-1),R=n("p",null,"Remember that NFTs have a supply of 1, and they are indivisible, meaning that only one token account will hold that token at any point in time, whilst all other token accounts for that mint key will have a balance of 0.",-1),I=n("p",null,"Once the largest token account is identified, we can retrieve its owner.",-1),K=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"const"),s(" connection "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.mainnet-beta.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` @@ -511,7 +515,7 @@ metaplex`),n("span",{class:"token punctuation"},"."),n("span",{class:"token func metaplex`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"use"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"keypairIdentity"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" owner "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"2R4bHmSBHkHAskerTHE6GE1Fxbn31kaD5gHqpsPySVd7"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` - `),n("span",{class:"token keyword"},"const"),s(" allNFTs "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" metaplex"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"nfts"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"findAllByOwner"),n("span",{class:"token punctuation"},"("),s("owner"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token keyword"},"const"),s(" allNFTs "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" metaplex"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"nfts"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"findAllByOwner"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"{"),s(" owner "),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("allNFTs"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` @@ -522,7 +526,7 @@ metaplex`),n("span",{class:"token punctuation"},"."),n("span",{class:"token func metaplex`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"use"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"keypairIdentity"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" owner "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"2R4bHmSBHkHAskerTHE6GE1Fxbn31kaD5gHqpsPySVd7"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`),n("span",{class:"token keyword"},"const"),s(" allNFTs "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" metaplex"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"nfts"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"findAllByOwner"),n("span",{class:"token punctuation"},"("),s("owner"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token keyword"},"const"),s(" allNFTs "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" metaplex"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"nfts"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"findAllByOwner"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"{"),s(" owner "),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("allNFTs"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1),Z=n("h2",{id:"candy-machine-v2-1",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#candy-machine-v2-1","aria-hidden":"true"},"#"),s(" Candy Machine v2")],-1),$=n("p",null,"Metaplex JS SDK now supports creating and updating Candy Machine v2 via code. It enable the developers to interact with the Candy Machine v2 program and create, update, and delete Candy Machines as well as mint NFTs from them.",-1),Q=n("h3",{id:"how-to-create-a-candy-machine",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-create-a-candy-machine","aria-hidden":"true"},"#"),s(" How to create a Candy Machine")],-1),J=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` diff --git a/docs/.vuepress/dist/assets/nfts.html.1b410d22.js b/docs/.vuepress/dist/assets/nfts.html.601b0bfd.js similarity index 96% rename from docs/.vuepress/dist/assets/nfts.html.1b410d22.js rename to docs/.vuepress/dist/assets/nfts.html.601b0bfd.js index f041fadbd..ddab6707d 100644 --- a/docs/.vuepress/dist/assets/nfts.html.1b410d22.js +++ b/docs/.vuepress/dist/assets/nfts.html.601b0bfd.js @@ -1,4 +1,4 @@ -import{_ as l,r as c,o as u,c as r,b as t,w as a,a as n,F as i,e as k,d as s}from"./app.cfdf84e7.js";const b={},m=k('

    Tokens no fungibles (NFTs)

    \xBFC\xF3mo crear un NFT?

    Para crear un NFT tu tienes que:

    1. Subir la imagen a IPFS como Arweave
    2. Subir los metadatos en json a IPFS como Arweave
    3. Llamar a metaplex para crear la cuenta para el NFT

    Subir a Arweave

    ',5),d=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(" fs "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"fs"'),n("span",{class:"token punctuation"},";"),s(` +import{_ as l,r as c,o as u,c as r,b as t,w as a,a as n,F as i,e as k,d as s}from"./app.2fbb9e96.js";const b={},m=k('

    Tokens no fungibles (NFTs)

    \xBFC\xF3mo crear un NFT?

    Para crear un NFT tu tienes que:

    1. Subir la imagen a IPFS como Arweave
    2. Subir los metadatos en json a IPFS como Arweave
    3. Llamar a metaplex para crear la cuenta para el NFT

    Subir a Arweave

    ',5),d=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(" fs "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"fs"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(" Arweave "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"arweave"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -242,11 +242,13 @@ dotenv`),n("span",{class:"token punctuation"},"."),n("span",{class:"token functi `),n("span",{class:"token keyword"},"const"),s(" metaplex "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Metaplex"),n("span",{class:"token punctuation"},"("),s("connection"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` metaplex`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"use"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"keypairIdentity"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` - `),n("span",{class:"token keyword"},"const"),s(" mint "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Ay1U9DWphDgc7hq58Yj1yHabt91zTzvV2YJbAWkPNbaK"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token keyword"},"const"),s(" mintAddress "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),s(` + `),n("span",{class:"token string"},'"Ay1U9DWphDgc7hq58Yj1yHabt91zTzvV2YJbAWkPNbaK"'),s(` + `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` - `),n("span",{class:"token keyword"},"const"),s(" nft "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" metaplex"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"nfts"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"findByMint"),n("span",{class:"token punctuation"},"("),s("mint"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token keyword"},"const"),s(" nft "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" metaplex"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"nfts"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"findByMint"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"{"),s(" mintAddress "),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` - `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("nft"),n("span",{class:"token punctuation"},"."),s("metadata"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("nft"),n("span",{class:"token punctuation"},"."),s("json"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token comment"},`/* { name: 'SMB #139', @@ -273,18 +275,20 @@ dotenv`),n("span",{class:"token punctuation"},"."),n("span",{class:"token functi } */`),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br")])],-1),N=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" connection "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"clusterApiUrl"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"mainnet-beta"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br")])],-1),N=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" connection "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"clusterApiUrl"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"mainnet-beta"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" metaplex "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Metaplex"),n("span",{class:"token punctuation"},"("),s("connection"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` metaplex`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"use"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"keypairIdentity"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`),n("span",{class:"token keyword"},"const"),s(" mint "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Ay1U9DWphDgc7hq58Yj1yHabt91zTzvV2YJbAWkPNbaK"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token keyword"},"const"),s(" mintAddress "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),s(` + `),n("span",{class:"token string"},'"Ay1U9DWphDgc7hq58Yj1yHabt91zTzvV2YJbAWkPNbaK"'),s(` +`),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`),n("span",{class:"token keyword"},"const"),s(" nft "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" metaplex"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"nfts"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"findByMint"),n("span",{class:"token punctuation"},"("),s("mint"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token keyword"},"const"),s(" nft "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" metaplex"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"nfts"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"findByMint"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"{"),s(" mintAddress "),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("nft"),n("span",{class:"token punctuation"},"."),s("metadata"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),R=n("h2",{id:"\xBFcomo-obtener-el-dueno-de-un-nft",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\xBFcomo-obtener-el-dueno-de-un-nft","aria-hidden":"true"},"#"),s(" \xBFC\xF3mo obtener el due\xF1o de un NFT?")],-1),x=n("p",null,"Si tiene la clave de mint de un NFT, puede encontrar su propietario actual echando un vistazo a la cuenta de token m\xE1s grande para ese mint.",-1),E=n("p",null,"Recuerde que los NFT tienen un suministro de 1 y son indivisibles, lo que significa que solo una cuenta de token mantendr\xE1 ese token en cualquier punto en el tiempo, mientras que todas las dem\xE1s cuentas de token para esa clave de mint tienen un saldo de 0.",-1),S=n("p",null,"Una vez que se identifica la cuenta de token m\xE1s grande, podemos recuperar a su propietario.",-1),P=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("nft"),n("span",{class:"token punctuation"},"."),s("json"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br")])],-1),R=n("h2",{id:"\xBFcomo-obtener-el-dueno-de-un-nft",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\xBFcomo-obtener-el-dueno-de-un-nft","aria-hidden":"true"},"#"),s(" \xBFC\xF3mo obtener el due\xF1o de un NFT?")],-1),x=n("p",null,"Si tiene la clave de mint de un NFT, puede encontrar su propietario actual echando un vistazo a la cuenta de token m\xE1s grande para ese mint.",-1),E=n("p",null,"Recuerde que los NFT tienen un suministro de 1 y son indivisibles, lo que significa que solo una cuenta de token mantendr\xE1 ese token en cualquier punto en el tiempo, mientras que todas las dem\xE1s cuentas de token para esa clave de mint tienen un saldo de 0.",-1),S=n("p",null,"Una vez que se identifica la cuenta de token m\xE1s grande, podemos recuperar a su propietario.",-1),P=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"const"),s(" connection "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.mainnet-beta.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` @@ -511,7 +515,7 @@ metaplex`),n("span",{class:"token punctuation"},"."),n("span",{class:"token func metaplex`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"use"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"keypairIdentity"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" owner "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"2R4bHmSBHkHAskerTHE6GE1Fxbn31kaD5gHqpsPySVd7"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` - `),n("span",{class:"token keyword"},"const"),s(" allNFTs "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" metaplex"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"nfts"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"findAllByOwner"),n("span",{class:"token punctuation"},"("),s("owner"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token keyword"},"const"),s(" allNFTs "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" metaplex"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"nfts"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"findAllByOwner"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"{"),s(" owner "),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("allNFTs"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` @@ -522,7 +526,7 @@ metaplex`),n("span",{class:"token punctuation"},"."),n("span",{class:"token func metaplex`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"use"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"keypairIdentity"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" owner "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"2R4bHmSBHkHAskerTHE6GE1Fxbn31kaD5gHqpsPySVd7"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`),n("span",{class:"token keyword"},"const"),s(" allNFTs "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" metaplex"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"nfts"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"findAllByOwner"),n("span",{class:"token punctuation"},"("),s("owner"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token keyword"},"const"),s(" allNFTs "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" metaplex"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"nfts"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"findAllByOwner"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"{"),s(" owner "),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("allNFTs"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1);function W(J,Z){const e=c("SolanaCodeGroupItem"),o=c("SolanaCodeGroup"),p=c("ExternalLinkIcon");return u(),r(i,null,[m,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[d]),preview:a(()=>[y]),_:1}),t(e,{title:"Python"},{default:a(()=>[g]),preview:a(()=>[w]),_:1})]),_:1}),f,_,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[A]),preview:a(()=>[h]),_:1})]),_:1}),T,M,v,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[C]),preview:a(()=>[N]),_:1})]),_:1}),R,x,E,S,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[P]),preview:a(()=>[I]),_:1})]),_:1}),L,F,U,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[O]),preview:a(()=>[K]),_:1})]),_:1}),H,B,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[X]),preview:a(()=>[G]),_:1})]),_:1}),q,n("p",null,[j,n("a",D,[Y,t(p)]),z]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[V]),preview:a(()=>[Q]),_:1})]),_:1})],64)}var nn=l(b,[["render",W]]);export{nn as default}; diff --git a/docs/.vuepress/dist/assets/nfts.html.2f110120.js b/docs/.vuepress/dist/assets/nfts.html.7db667ee.js similarity index 96% rename from docs/.vuepress/dist/assets/nfts.html.2f110120.js rename to docs/.vuepress/dist/assets/nfts.html.7db667ee.js index 85c7e4b95..da0d74d87 100644 --- a/docs/.vuepress/dist/assets/nfts.html.2f110120.js +++ b/docs/.vuepress/dist/assets/nfts.html.7db667ee.js @@ -1,4 +1,4 @@ -import{_ as l,r as c,o as u,c as r,b as t,w as a,a as n,F as i,e as k,d as s}from"./app.cfdf84e7.js";const b={},m=k('

    Non Fungible Token (NFT)

    Cara membuat NFT

    Untuk Membuat Sebuah NFT Kamu Harus:

    1. Upload gambar ke IPFS seperti Arweave
    2. Upload metadata json ke IPFS seperti Arweave
    3. Call metaplex untuk membuat sebuah account untuk NFT

    Upload to Arweave

    ',5),d=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(" fs "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"fs"'),n("span",{class:"token punctuation"},";"),s(` +import{_ as l,r as c,o as u,c as r,b as t,w as a,a as n,F as i,e as k,d as s}from"./app.2fbb9e96.js";const b={},m=k('

    Non Fungible Token (NFT)

    Cara membuat NFT

    Untuk Membuat Sebuah NFT Kamu Harus:

    1. Upload gambar ke IPFS seperti Arweave
    2. Upload metadata json ke IPFS seperti Arweave
    3. Call metaplex untuk membuat sebuah account untuk NFT

    Upload to Arweave

    ',5),d=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(" fs "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"fs"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(" Arweave "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"arweave"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -242,11 +242,13 @@ dotenv`),n("span",{class:"token punctuation"},"."),n("span",{class:"token functi `),n("span",{class:"token keyword"},"const"),s(" metaplex "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Metaplex"),n("span",{class:"token punctuation"},"("),s("connection"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` metaplex`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"use"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"keypairIdentity"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` - `),n("span",{class:"token keyword"},"const"),s(" mint "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Ay1U9DWphDgc7hq58Yj1yHabt91zTzvV2YJbAWkPNbaK"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token keyword"},"const"),s(" mintAddress "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),s(` + `),n("span",{class:"token string"},'"Ay1U9DWphDgc7hq58Yj1yHabt91zTzvV2YJbAWkPNbaK"'),s(` + `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` - `),n("span",{class:"token keyword"},"const"),s(" nft "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" metaplex"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"nfts"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"findByMint"),n("span",{class:"token punctuation"},"("),s("mint"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token keyword"},"const"),s(" nft "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" metaplex"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"nfts"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"findByMint"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"{"),s(" mintAddress "),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` - `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("nft"),n("span",{class:"token punctuation"},"."),s("metadata"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("nft"),n("span",{class:"token punctuation"},"."),s("json"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token comment"},`/* { name: 'SMB #139', @@ -273,18 +275,20 @@ dotenv`),n("span",{class:"token punctuation"},"."),n("span",{class:"token functi } */`),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br")])],-1),N=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" connection "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"clusterApiUrl"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"mainnet-beta"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br")])],-1),N=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" connection "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"clusterApiUrl"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"mainnet-beta"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" metaplex "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Metaplex"),n("span",{class:"token punctuation"},"("),s("connection"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` metaplex`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"use"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"keypairIdentity"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`),n("span",{class:"token keyword"},"const"),s(" mint "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Ay1U9DWphDgc7hq58Yj1yHabt91zTzvV2YJbAWkPNbaK"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token keyword"},"const"),s(" mintAddress "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),s(` + `),n("span",{class:"token string"},'"Ay1U9DWphDgc7hq58Yj1yHabt91zTzvV2YJbAWkPNbaK"'),s(` +`),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`),n("span",{class:"token keyword"},"const"),s(" nft "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" metaplex"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"nfts"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"findByMint"),n("span",{class:"token punctuation"},"("),s("mint"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token keyword"},"const"),s(" nft "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" metaplex"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"nfts"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"findByMint"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"{"),s(" mintAddress "),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("nft"),n("span",{class:"token punctuation"},"."),s("metadata"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),R=n("h2",{id:"cara-mengetahui-pemilik-sebuah-nft",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#cara-mengetahui-pemilik-sebuah-nft","aria-hidden":"true"},"#"),s(" Cara Mengetahui Pemilik Sebuah NFT")],-1),x=n("p",null,"Jika kamu memiliki mint key dari sebuah NFT, kamu bisa mencari pemilik terkini dengan mengintip di token account terbesar untuk mint key tersebut.",-1),E=n("p",null,"Mengingat bahwa NFTs memiliki 1 supply, dan mereka tidak dapat dibagi, yang artinya suatu token hanya dapat dimiliki oleh satu token account setiap kalinya, sementara itu semua token account lainnya untuk mint key tersebut memiliki saldo 0.",-1),S=n("p",null,"Ketika token account terbesar sudah diidentifikasi, kita bisa mengambil pemiliknya.",-1),I=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("nft"),n("span",{class:"token punctuation"},"."),s("json"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br")])],-1),R=n("h2",{id:"cara-mengetahui-pemilik-sebuah-nft",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#cara-mengetahui-pemilik-sebuah-nft","aria-hidden":"true"},"#"),s(" Cara Mengetahui Pemilik Sebuah NFT")],-1),x=n("p",null,"Jika kamu memiliki mint key dari sebuah NFT, kamu bisa mencari pemilik terkini dengan mengintip di token account terbesar untuk mint key tersebut.",-1),E=n("p",null,"Mengingat bahwa NFTs memiliki 1 supply, dan mereka tidak dapat dibagi, yang artinya suatu token hanya dapat dimiliki oleh satu token account setiap kalinya, sementara itu semua token account lainnya untuk mint key tersebut memiliki saldo 0.",-1),S=n("p",null,"Ketika token account terbesar sudah diidentifikasi, kita bisa mengambil pemiliknya.",-1),I=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"const"),s(" connection "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.mainnet-beta.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` @@ -511,7 +515,7 @@ metaplex`),n("span",{class:"token punctuation"},"."),n("span",{class:"token func metaplex`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"use"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"keypairIdentity"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" owner "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"2R4bHmSBHkHAskerTHE6GE1Fxbn31kaD5gHqpsPySVd7"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` - `),n("span",{class:"token keyword"},"const"),s(" allNFTs "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" metaplex"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"nfts"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"findAllByOwner"),n("span",{class:"token punctuation"},"("),s("owner"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token keyword"},"const"),s(" allNFTs "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" metaplex"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"nfts"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"findAllByOwner"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"{"),s(" owner "),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("allNFTs"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` @@ -522,7 +526,7 @@ metaplex`),n("span",{class:"token punctuation"},"."),n("span",{class:"token func metaplex`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"use"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"keypairIdentity"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" owner "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"2R4bHmSBHkHAskerTHE6GE1Fxbn31kaD5gHqpsPySVd7"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`),n("span",{class:"token keyword"},"const"),s(" allNFTs "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" metaplex"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"nfts"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"findAllByOwner"),n("span",{class:"token punctuation"},"("),s("owner"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token keyword"},"const"),s(" allNFTs "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" metaplex"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"nfts"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"findAllByOwner"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"{"),s(" owner "),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("allNFTs"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1);function W(Q,Z){const e=c("SolanaCodeGroupItem"),o=c("SolanaCodeGroup"),p=c("ExternalLinkIcon");return u(),r(i,null,[m,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[d]),preview:a(()=>[y]),_:1}),t(e,{title:"Python"},{default:a(()=>[g]),preview:a(()=>[w]),_:1})]),_:1}),f,_,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[A]),preview:a(()=>[h]),_:1})]),_:1}),T,M,v,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[C]),preview:a(()=>[N]),_:1})]),_:1}),R,x,E,S,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[I]),preview:a(()=>[P]),_:1})]),_:1}),U,F,K,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[L]),preview:a(()=>[O]),_:1})]),_:1}),H,B,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[X]),preview:a(()=>[G]),_:1})]),_:1}),j,n("p",null,[D,n("a",Y,[q,t(p)]),V]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[z]),preview:a(()=>[J]),_:1})]),_:1})],64)}var nn=l(b,[["render",W]]);export{nn as default}; diff --git a/docs/.vuepress/dist/assets/nfts.html.83f8c371.js b/docs/.vuepress/dist/assets/nfts.html.7f4acb22.js similarity index 96% rename from docs/.vuepress/dist/assets/nfts.html.83f8c371.js rename to docs/.vuepress/dist/assets/nfts.html.7f4acb22.js index 88359f110..7df084f9d 100644 --- a/docs/.vuepress/dist/assets/nfts.html.83f8c371.js +++ b/docs/.vuepress/dist/assets/nfts.html.7f4acb22.js @@ -1,4 +1,4 @@ -import{_ as u,r as c,o as r,c as i,b as t,w as a,a as n,F as k,e as p,d as s}from"./app.cfdf84e7.js";const b={},m=p('

    Jetons Non Fongibles (NFTs)

    Comment cr\xE9er un NFT

    Pour cr\xE9er un NFT, vous devez :

    1. T\xE9l\xE9charger l'image sur IPFS comme Arweave
    2. T\xE9l\xE9charger les m\xE9tadonn\xE9es json sur IPFS comme Arweave
    3. Appeler metaplex pour cr\xE9er un compte pour le NFT

    T\xE9l\xE9charger sur Arweave

    ',5),d=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(" fs "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"fs"'),n("span",{class:"token punctuation"},";"),s(` +import{_ as u,r as c,o as r,c as i,b as t,w as a,a as n,F as k,e as p,d as s}from"./app.2fbb9e96.js";const b={},m=p('

    Jetons Non Fongibles (NFTs)

    Comment cr\xE9er un NFT

    Pour cr\xE9er un NFT, vous devez :

    1. T\xE9l\xE9charger l'image sur IPFS comme Arweave
    2. T\xE9l\xE9charger les m\xE9tadonn\xE9es json sur IPFS comme Arweave
    3. Appeler metaplex pour cr\xE9er un compte pour le NFT

    T\xE9l\xE9charger sur Arweave

    ',5),d=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(" fs "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"fs"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(" Arweave "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"arweave"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -242,11 +242,13 @@ dotenv`),n("span",{class:"token punctuation"},"."),n("span",{class:"token functi `),n("span",{class:"token keyword"},"const"),s(" metaplex "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Metaplex"),n("span",{class:"token punctuation"},"("),s("connection"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` metaplex`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"use"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"keypairIdentity"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` - `),n("span",{class:"token keyword"},"const"),s(" mint "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Ay1U9DWphDgc7hq58Yj1yHabt91zTzvV2YJbAWkPNbaK"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token keyword"},"const"),s(" mintAddress "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),s(` + `),n("span",{class:"token string"},'"Ay1U9DWphDgc7hq58Yj1yHabt91zTzvV2YJbAWkPNbaK"'),s(` + `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` - `),n("span",{class:"token keyword"},"const"),s(" nft "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" metaplex"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"nfts"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"findByMint"),n("span",{class:"token punctuation"},"("),s("mint"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token keyword"},"const"),s(" nft "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" metaplex"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"nfts"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"findByMint"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"{"),s(" mintAddress "),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` - `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("nft"),n("span",{class:"token punctuation"},"."),s("metadata"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("nft"),n("span",{class:"token punctuation"},"."),s("json"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token comment"},`/* { name: 'SMB #139', @@ -273,18 +275,20 @@ dotenv`),n("span",{class:"token punctuation"},"."),n("span",{class:"token functi } */`),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br")])],-1),C=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" connection "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"clusterApiUrl"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"mainnet-beta"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br")])],-1),C=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" connection "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"clusterApiUrl"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"mainnet-beta"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" metaplex "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Metaplex"),n("span",{class:"token punctuation"},"("),s("connection"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` metaplex`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"use"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"keypairIdentity"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`),n("span",{class:"token keyword"},"const"),s(" mint "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Ay1U9DWphDgc7hq58Yj1yHabt91zTzvV2YJbAWkPNbaK"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token keyword"},"const"),s(" mintAddress "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),s(` + `),n("span",{class:"token string"},'"Ay1U9DWphDgc7hq58Yj1yHabt91zTzvV2YJbAWkPNbaK"'),s(` +`),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`),n("span",{class:"token keyword"},"const"),s(" nft "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" metaplex"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"nfts"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"findByMint"),n("span",{class:"token punctuation"},"("),s("mint"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token keyword"},"const"),s(" nft "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" metaplex"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"nfts"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"findByMint"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"{"),s(" mintAddress "),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("nft"),n("span",{class:"token punctuation"},"."),s("metadata"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),R=n("h2",{id:"comment-obtenir-le-proprietaire-d-un-nft",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#comment-obtenir-le-proprietaire-d-un-nft","aria-hidden":"true"},"#"),s(" Comment obtenir le propri\xE9taire d'un NFT")],-1),x=n("p",null,"Si vous avez la cl\xE9 de cr\xE9ation (mint key) d'un NFT, vous pouvez trouver son propri\xE9taire actuel en regardant le plus grand compte de jetons pour ce mint.",-1),E=n("p",null,"Rappelez-vous que les NFTs ont une offre de 1, et qu'ils sont indivisibles, ce qui signifie qu'un seul compte de jetons d\xE9tiendra ce jeton \xE0 un moment donn\xE9, tandis que tous les autres comptes de jetons pour cette cl\xE9 de cr\xE9ation auront un solde de 0.",-1),S=n("p",null,"Une fois que le plus grand compte de jeton est identifi\xE9, nous pouvons retrouver son propri\xE9taire.",-1),P=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("nft"),n("span",{class:"token punctuation"},"."),s("json"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br")])],-1),R=n("h2",{id:"comment-obtenir-le-proprietaire-d-un-nft",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#comment-obtenir-le-proprietaire-d-un-nft","aria-hidden":"true"},"#"),s(" Comment obtenir le propri\xE9taire d'un NFT")],-1),x=n("p",null,"Si vous avez la cl\xE9 de cr\xE9ation (mint key) d'un NFT, vous pouvez trouver son propri\xE9taire actuel en regardant le plus grand compte de jetons pour ce mint.",-1),E=n("p",null,"Rappelez-vous que les NFTs ont une offre de 1, et qu'ils sont indivisibles, ce qui signifie qu'un seul compte de jetons d\xE9tiendra ce jeton \xE0 un moment donn\xE9, tandis que tous les autres comptes de jetons pour cette cl\xE9 de cr\xE9ation auront un solde de 0.",-1),S=n("p",null,"Une fois que le plus grand compte de jeton est identifi\xE9, nous pouvons retrouver son propri\xE9taire.",-1),P=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"const"),s(" connection "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.mainnet-beta.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` @@ -511,7 +515,7 @@ metaplex`),n("span",{class:"token punctuation"},"."),n("span",{class:"token func metaplex`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"use"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"keypairIdentity"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" owner "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"2R4bHmSBHkHAskerTHE6GE1Fxbn31kaD5gHqpsPySVd7"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` - `),n("span",{class:"token keyword"},"const"),s(" allNFTs "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" metaplex"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"nfts"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"findAllByOwner"),n("span",{class:"token punctuation"},"("),s("owner"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token keyword"},"const"),s(" allNFTs "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" metaplex"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"nfts"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"findAllByOwner"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"{"),s(" owner "),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("allNFTs"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` @@ -522,7 +526,7 @@ metaplex`),n("span",{class:"token punctuation"},"."),n("span",{class:"token func metaplex`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"use"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"keypairIdentity"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" owner "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"2R4bHmSBHkHAskerTHE6GE1Fxbn31kaD5gHqpsPySVd7"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`),n("span",{class:"token keyword"},"const"),s(" allNFTs "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" metaplex"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"nfts"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"findAllByOwner"),n("span",{class:"token punctuation"},"("),s("owner"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token keyword"},"const"),s(" allNFTs "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" metaplex"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"nfts"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"findAllByOwner"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"{"),s(" owner "),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("allNFTs"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1);function V(Q,W){const e=c("SolanaCodeGroupItem"),o=c("SolanaCodeGroup"),l=c("ExternalLinkIcon");return r(),i(k,null,[m,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[d]),preview:a(()=>[y]),_:1}),t(e,{title:"Python"},{default:a(()=>[g]),preview:a(()=>[w]),_:1})]),_:1}),f,_,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[A]),preview:a(()=>[h]),_:1})]),_:1}),T,v,M,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[N]),preview:a(()=>[C]),_:1})]),_:1}),R,x,E,S,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[P]),preview:a(()=>[I]),_:1})]),_:1}),F,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[L]),preview:a(()=>[U]),_:1})]),_:1}),O,K,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[H]),preview:a(()=>[j]),_:1})]),_:1}),B,n("p",null,[X,n("a",q,[G,t(l)]),z]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[D]),preview:a(()=>[Y]),_:1})]),_:1})],64)}var Z=u(b,[["render",V]]);export{Z as default}; diff --git a/docs/.vuepress/dist/assets/nfts.html.9ae3e88e.js b/docs/.vuepress/dist/assets/nfts.html.88ed037e.js similarity index 99% rename from docs/.vuepress/dist/assets/nfts.html.9ae3e88e.js rename to docs/.vuepress/dist/assets/nfts.html.88ed037e.js index a01f0e359..a90c000c5 100644 --- a/docs/.vuepress/dist/assets/nfts.html.9ae3e88e.js +++ b/docs/.vuepress/dist/assets/nfts.html.88ed037e.js @@ -1,4 +1,4 @@ -import{_ as p,r as e,o,c,a as n,b as l,F as i,e as a,d as s}from"./app.cfdf84e7.js";const u={},r=a(`

    Non Fungible Tokens (NFTs)

    How to create an NFT (NFT olu\u015Fturma)

    Bir NFT olu\u015Fturmak i\xE7in yapman\u0131z gerekenler:

    1. Resmi bir IPFS'e y\xFCkleyin (Arweave gibi)
    2. Json meta verilerini IPFS'ye y\xFCkleyin (Arweave gibi)
    3. NFT i\xE7in bir account olu\u015Fturmak \xFCzere metaplex'i \xE7a\u011F\u0131r\u0131n (call)

    Upload to Arweave (Arwave\u2019e y\xFCkleme)

    // 1. Upload image to Arweave
    +import{_ as p,r as e,o,c,a as n,b as l,F as i,e as a,d as s}from"./app.2fbb9e96.js";const u={},r=a(`

    Non Fungible Tokens (NFTs)

    How to create an NFT (NFT olu\u015Fturma)

    Bir NFT olu\u015Fturmak i\xE7in yapman\u0131z gerekenler:

    1. Resmi bir IPFS'e y\xFCkleyin (Arweave gibi)
    2. Json meta verilerini IPFS'ye y\xFCkleyin (Arweave gibi)
    3. NFT i\xE7in bir account olu\u015Fturmak \xFCzere metaplex'i \xE7a\u011F\u0131r\u0131n (call)

    Upload to Arweave (Arwave\u2019e y\xFCkleme)

    // 1. Upload image to Arweave
     const data = fs.readFileSync("./code/nfts/arweave-upload/lowres-dog.png");
     
     const transaction = await arweave.createTransaction({
    diff --git a/docs/.vuepress/dist/assets/nfts.html.fc0f9ff3.js b/docs/.vuepress/dist/assets/nfts.html.c666f613.js
    similarity index 95%
    rename from docs/.vuepress/dist/assets/nfts.html.fc0f9ff3.js
    rename to docs/.vuepress/dist/assets/nfts.html.c666f613.js
    index 9ed51f196..eedbba952 100644
    --- a/docs/.vuepress/dist/assets/nfts.html.fc0f9ff3.js
    +++ b/docs/.vuepress/dist/assets/nfts.html.c666f613.js
    @@ -1,4 +1,4 @@
    -import{_ as l,r as c,o as u,c as r,b as t,w as a,a as n,F as i,e as k,d as s}from"./app.cfdf84e7.js";const b={},m=k('

    Non Fungible Tokens (NFTs)

    \u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07 an NFT

    \u0E43\u0E19\u0E01\u0E32\u0E23\u0E2A\u0E23\u0E49\u0E32\u0E07 NFT \u0E40\u0E23\u0E32\u0E08\u0E30\u0E15\u0E49\u0E2D\u0E07:

    1. Upload \u0E23\u0E39\u0E1B (image) \u200B\u0E44\u0E1B\u0E17\u0E35\u0E48 IPFS \u0E40\u0E0A\u0E48\u0E19 Arweave
    2. Upload json metadata \u0E44\u0E1B\u0E17\u0E35\u0E48 IPFS \u0E40\u0E0A\u0E48\u0E19 Arweave
    3. \u0E40\u0E23\u0E35\u0E22\u0E01\u0E43\u0E0A\u0E49 metaplex \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E2A\u0E23\u0E49\u0E32\u0E07 account \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A NFT

    Upload to Arweave

    ',5),d=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(" fs "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"fs"'),n("span",{class:"token punctuation"},";"),s(` +import{_ as l,r as c,o as u,c as r,b as t,w as a,a as n,F as i,e as k,d as s}from"./app.2fbb9e96.js";const b={},m=k('

    Non Fungible Tokens (NFTs)

    \u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07 an NFT

    \u0E43\u0E19\u0E01\u0E32\u0E23\u0E2A\u0E23\u0E49\u0E32\u0E07 NFT \u0E40\u0E23\u0E32\u0E08\u0E30\u0E15\u0E49\u0E2D\u0E07:

    1. Upload \u0E23\u0E39\u0E1B (image) \u200B\u0E44\u0E1B\u0E17\u0E35\u0E48 IPFS \u0E40\u0E0A\u0E48\u0E19 Arweave
    2. Upload json metadata \u0E44\u0E1B\u0E17\u0E35\u0E48 IPFS \u0E40\u0E0A\u0E48\u0E19 Arweave
    3. \u0E40\u0E23\u0E35\u0E22\u0E01\u0E43\u0E0A\u0E49 metaplex \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E2A\u0E23\u0E49\u0E32\u0E07 account \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A NFT

    Upload to Arweave

    ',5),d=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(" fs "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"fs"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(" Arweave "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"arweave"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -242,11 +242,13 @@ dotenv`),n("span",{class:"token punctuation"},"."),n("span",{class:"token functi `),n("span",{class:"token keyword"},"const"),s(" metaplex "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Metaplex"),n("span",{class:"token punctuation"},"("),s("connection"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` metaplex`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"use"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"keypairIdentity"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` - `),n("span",{class:"token keyword"},"const"),s(" mint "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Ay1U9DWphDgc7hq58Yj1yHabt91zTzvV2YJbAWkPNbaK"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token keyword"},"const"),s(" mintAddress "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),s(` + `),n("span",{class:"token string"},'"Ay1U9DWphDgc7hq58Yj1yHabt91zTzvV2YJbAWkPNbaK"'),s(` + `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` - `),n("span",{class:"token keyword"},"const"),s(" nft "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" metaplex"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"nfts"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"findByMint"),n("span",{class:"token punctuation"},"("),s("mint"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token keyword"},"const"),s(" nft "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" metaplex"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"nfts"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"findByMint"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"{"),s(" mintAddress "),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` - `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("nft"),n("span",{class:"token punctuation"},"."),s("metadata"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("nft"),n("span",{class:"token punctuation"},"."),s("json"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token comment"},`/* { name: 'SMB #139', @@ -273,18 +275,20 @@ dotenv`),n("span",{class:"token punctuation"},"."),n("span",{class:"token functi } */`),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br")])],-1),R=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" connection "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"clusterApiUrl"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"mainnet-beta"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br")])],-1),R=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"const"),s(" connection "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"clusterApiUrl"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"mainnet-beta"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" keypair "),n("span",{class:"token operator"},"="),s(" Keypair"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"generate"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" metaplex "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Metaplex"),n("span",{class:"token punctuation"},"("),s("connection"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` metaplex`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"use"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"keypairIdentity"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`),n("span",{class:"token keyword"},"const"),s(" mint "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Ay1U9DWphDgc7hq58Yj1yHabt91zTzvV2YJbAWkPNbaK"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token keyword"},"const"),s(" mintAddress "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),s(` + `),n("span",{class:"token string"},'"Ay1U9DWphDgc7hq58Yj1yHabt91zTzvV2YJbAWkPNbaK"'),s(` +`),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`),n("span",{class:"token keyword"},"const"),s(" nft "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" metaplex"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"nfts"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"findByMint"),n("span",{class:"token punctuation"},"("),s("mint"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token keyword"},"const"),s(" nft "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" metaplex"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"nfts"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"findByMint"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"{"),s(" mintAddress "),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("nft"),n("span",{class:"token punctuation"},"."),s("metadata"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br")])],-1),C=n("h2",{id:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E40\u0E08\u0E49\u0E32\u0E02\u0E2D\u0E07-owner-\u0E02\u0E2D\u0E07-nft",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E40\u0E08\u0E49\u0E32\u0E02\u0E2D\u0E07-owner-\u0E02\u0E2D\u0E07-nft","aria-hidden":"true"},"#"),s(" \u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E40\u0E08\u0E49\u0E32\u0E02\u0E2D\u0E07 (owner) \u0E02\u0E2D\u0E07 NFT")],-1),x=n("p",null,"\u0E16\u0E49\u0E32\u0E40\u0E23\u0E32\u0E21\u0E35 mint key \u0E02\u0E2D\u0E07 NFT \u0E40\u0E23\u0E32\u0E08\u0E30\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E2B\u0E32 owner \u0E1B\u0E31\u0E08\u0E08\u0E38\u0E1A\u0E31\u0E19\u0E44\u0E14\u0E49\u0E14\u0E49\u0E27\u0E22\u0E01\u0E32\u0E23\u0E14\u0E39 largest token account \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A mint key \u0E19\u0E31\u0E49\u0E19\u0E46",-1),E=n("p",null,"\u0E40\u0E1E\u0E23\u0E32\u0E30 NFTs \u0E21\u0E35 supply \u0E2D\u0E22\u0E39\u0E48\u0E40\u0E1E\u0E35\u0E22\u0E07 1 \u0E0A\u0E34\u0E49\u0E19 \u0E41\u0E25\u0E30\u0E21\u0E31\u0E19\u0E16\u0E39\u0E01\u0E41\u0E1A\u0E48\u0E07\u0E41\u0E22\u0E01\u0E44\u0E21\u0E48\u0E44\u0E14\u0E49 \u0E2B\u0E21\u0E32\u0E22\u0E04\u0E27\u0E32\u0E21\u0E27\u0E48\u0E32\u0E21\u0E35\u0E40\u0E1E\u0E35\u0E22\u0E07\u0E2B\u0E19\u0E36\u0E48\u0E07 token account \u0E17\u0E35\u0E48\u0E08\u0E30\u0E16\u0E37\u0E2D token \u0E43\u0E19\u0E40\u0E27\u0E25\u0E32\u0E19\u0E31\u0E49\u0E19 \u0E42\u0E14\u0E22 token accounts \u0E2D\u0E37\u0E48\u0E19\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A mint key \u0E19\u0E31\u0E49\u0E19\u0E08\u0E30\u0E21\u0E35 balance \u0E40\u0E1B\u0E47\u0E19 0",-1),S=n("p",null,"\u0E01\u0E47\u0E41\u0E1B\u0E25\u0E27\u0E48\u0E32\u0E40\u0E21\u0E37\u0E48\u0E2D\u0E40\u0E23\u0E32\u0E2B\u0E32largest token account \u0E44\u0E14\u0E49\u0E40\u0E23\u0E32\u0E01\u0E47\u0E08\u0E30\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E23\u0E39\u0E49\u0E27\u0E48\u0E32 owner \u0E40\u0E1B\u0E47\u0E19\u0E43\u0E04\u0E23",-1),P=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("nft"),n("span",{class:"token punctuation"},"."),s("json"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br")])],-1),C=n("h2",{id:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E40\u0E08\u0E49\u0E32\u0E02\u0E2D\u0E07-owner-\u0E02\u0E2D\u0E07-nft",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E40\u0E08\u0E49\u0E32\u0E02\u0E2D\u0E07-owner-\u0E02\u0E2D\u0E07-nft","aria-hidden":"true"},"#"),s(" \u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E40\u0E08\u0E49\u0E32\u0E02\u0E2D\u0E07 (owner) \u0E02\u0E2D\u0E07 NFT")],-1),x=n("p",null,"\u0E16\u0E49\u0E32\u0E40\u0E23\u0E32\u0E21\u0E35 mint key \u0E02\u0E2D\u0E07 NFT \u0E40\u0E23\u0E32\u0E08\u0E30\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E2B\u0E32 owner \u0E1B\u0E31\u0E08\u0E08\u0E38\u0E1A\u0E31\u0E19\u0E44\u0E14\u0E49\u0E14\u0E49\u0E27\u0E22\u0E01\u0E32\u0E23\u0E14\u0E39 largest token account \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A mint key \u0E19\u0E31\u0E49\u0E19\u0E46",-1),E=n("p",null,"\u0E40\u0E1E\u0E23\u0E32\u0E30 NFTs \u0E21\u0E35 supply \u0E2D\u0E22\u0E39\u0E48\u0E40\u0E1E\u0E35\u0E22\u0E07 1 \u0E0A\u0E34\u0E49\u0E19 \u0E41\u0E25\u0E30\u0E21\u0E31\u0E19\u0E16\u0E39\u0E01\u0E41\u0E1A\u0E48\u0E07\u0E41\u0E22\u0E01\u0E44\u0E21\u0E48\u0E44\u0E14\u0E49 \u0E2B\u0E21\u0E32\u0E22\u0E04\u0E27\u0E32\u0E21\u0E27\u0E48\u0E32\u0E21\u0E35\u0E40\u0E1E\u0E35\u0E22\u0E07\u0E2B\u0E19\u0E36\u0E48\u0E07 token account \u0E17\u0E35\u0E48\u0E08\u0E30\u0E16\u0E37\u0E2D token \u0E43\u0E19\u0E40\u0E27\u0E25\u0E32\u0E19\u0E31\u0E49\u0E19 \u0E42\u0E14\u0E22 token accounts \u0E2D\u0E37\u0E48\u0E19\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A mint key \u0E19\u0E31\u0E49\u0E19\u0E08\u0E30\u0E21\u0E35 balance \u0E40\u0E1B\u0E47\u0E19 0",-1),S=n("p",null,"\u0E01\u0E47\u0E41\u0E1B\u0E25\u0E27\u0E48\u0E32\u0E40\u0E21\u0E37\u0E48\u0E2D\u0E40\u0E23\u0E32\u0E2B\u0E32largest token account \u0E44\u0E14\u0E49\u0E40\u0E23\u0E32\u0E01\u0E47\u0E08\u0E30\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E23\u0E39\u0E49\u0E27\u0E48\u0E32 owner \u0E40\u0E1B\u0E47\u0E19\u0E43\u0E04\u0E23",-1),P=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"const"),s(" connection "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"https://api.mainnet-beta.solana.com"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` @@ -511,7 +515,7 @@ metaplex`),n("span",{class:"token punctuation"},"."),n("span",{class:"token func metaplex`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"use"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"keypairIdentity"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" owner "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"2R4bHmSBHkHAskerTHE6GE1Fxbn31kaD5gHqpsPySVd7"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` - `),n("span",{class:"token keyword"},"const"),s(" allNFTs "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" metaplex"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"nfts"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"findAllByOwner"),n("span",{class:"token punctuation"},"("),s("owner"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token keyword"},"const"),s(" allNFTs "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" metaplex"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"nfts"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"findAllByOwner"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"{"),s(" owner "),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("allNFTs"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` @@ -522,7 +526,7 @@ metaplex`),n("span",{class:"token punctuation"},"."),n("span",{class:"token func metaplex`),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"use"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"keypairIdentity"),n("span",{class:"token punctuation"},"("),s("keypair"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"const"),s(" owner "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"PublicKey"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"2R4bHmSBHkHAskerTHE6GE1Fxbn31kaD5gHqpsPySVd7"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`),n("span",{class:"token keyword"},"const"),s(" allNFTs "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" metaplex"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"nfts"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"findAllByOwner"),n("span",{class:"token punctuation"},"("),s("owner"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token keyword"},"const"),s(" allNFTs "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" metaplex"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"nfts"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"findAllByOwner"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"{"),s(" owner "),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("allNFTs"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br")])],-1);function W(J,Z){const e=c("SolanaCodeGroupItem"),o=c("SolanaCodeGroup"),p=c("ExternalLinkIcon");return u(),r(i,null,[m,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[d]),preview:a(()=>[y]),_:1}),t(e,{title:"Python"},{default:a(()=>[w]),preview:a(()=>[g]),_:1})]),_:1}),f,_,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[A]),preview:a(()=>[h]),_:1})]),_:1}),T,M,v,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[N]),preview:a(()=>[R]),_:1})]),_:1}),C,x,E,S,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[P]),preview:a(()=>[I]),_:1})]),_:1}),F,U,L,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[O]),preview:a(()=>[K]),_:1})]),_:1}),H,B,t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[X]),preview:a(()=>[G]),_:1})]),_:1}),j,n("p",null,[D,n("a",Y,[q,t(p)]),V]),t(o,null,{default:a(()=>[t(e,{title:"TS",active:""},{default:a(()=>[z]),preview:a(()=>[Q]),_:1})]),_:1})],64)}var nn=l(b,[["render",W]]);export{nn as default}; diff --git a/docs/.vuepress/dist/assets/offline-transactions.html.2bae496b.js b/docs/.vuepress/dist/assets/offline-transactions.html.21cb3aba.js similarity index 99% rename from docs/.vuepress/dist/assets/offline-transactions.html.2bae496b.js rename to docs/.vuepress/dist/assets/offline-transactions.html.21cb3aba.js index f4a531945..9991eb1a1 100644 --- a/docs/.vuepress/dist/assets/offline-transactions.html.2bae496b.js +++ b/docs/.vuepress/dist/assets/offline-transactions.html.21cb3aba.js @@ -1,4 +1,4 @@ -import{_ as p,r as c,o as l,c as u,b as t,w as a,F as i,a as n,d as s,e as r}from"./app.cfdf84e7.js";const k={},b=n("h1",{id:"offline-transaktion",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#offline-transaktion","aria-hidden":"true"},"#"),s(" Offline-Transaktion")],-1),m=n("h2",{id:"transaktion-unterzeichnen",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#transaktion-unterzeichnen","aria-hidden":"true"},"#"),s(" Transaktion unterzeichnen")],-1),d=n("p",null,"Um eine Offline-Transaktion zu erstellen, m\xFCssen Sie die Transaktion signieren und dann kann jeder es im Netzwerk \xFCbertragen.",-1),y=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` +import{_ as p,r as c,o as l,c as u,b as t,w as a,F as i,a as n,d as s,e as r}from"./app.2fbb9e96.js";const k={},b=n("h1",{id:"offline-transaktion",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#offline-transaktion","aria-hidden":"true"},"#"),s(" Offline-Transaktion")],-1),m=n("h2",{id:"transaktion-unterzeichnen",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#transaktion-unterzeichnen","aria-hidden":"true"},"#"),s(" Transaktion unterzeichnen")],-1),d=n("p",null,"Um eine Offline-Transaktion zu erstellen, m\xFCssen Sie die Transaktion signieren und dann kann jeder es im Netzwerk \xFCbertragen.",-1),y=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` clusterApiUrl`),n("span",{class:"token punctuation"},","),s(` Connection`),n("span",{class:"token punctuation"},","),s(` Keypair`),n("span",{class:"token punctuation"},","),s(` diff --git a/docs/.vuepress/dist/assets/offline-transactions.html.07ed428d.js b/docs/.vuepress/dist/assets/offline-transactions.html.285b7675.js similarity index 99% rename from docs/.vuepress/dist/assets/offline-transactions.html.07ed428d.js rename to docs/.vuepress/dist/assets/offline-transactions.html.285b7675.js index bc42625fe..5f593ad5e 100644 --- a/docs/.vuepress/dist/assets/offline-transactions.html.07ed428d.js +++ b/docs/.vuepress/dist/assets/offline-transactions.html.285b7675.js @@ -1,4 +1,4 @@ -import{_ as p,r as c,o as l,c as u,b as t,w as a,F as i,a as n,d as s,e as r}from"./app.cfdf84e7.js";const k={},b=n("h1",{id:"transaction-ngoai-tuyen",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#transaction-ngoai-tuyen","aria-hidden":"true"},"#"),s(" Transaction Ngo\u1EA1i tuy\u1EBFn")],-1),m=n("h2",{id:"ky-transaction",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#ky-transaction","aria-hidden":"true"},"#"),s(" K\xFD Transaction")],-1),d=n("p",null,"\u0110\u1EC3 t\u1EA1o m\u1ED9t transaction ngo\u1EA1i tuy\u1EBFn, b\u1EA1n ph\u1EA3i k\xFD l\xEAn transaction v\xE0 sau \u0111\xF3 b\u1EA5t k\u1EF3 ai \u0111\u1EC1u c\xF3 th\u1EC3 g\u1EEDi transaction \u0111\xF3 l\xEAn tr\xEAn m\u1EA1ng l\u01B0\u1EDBi.",-1),y=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` +import{_ as p,r as c,o as l,c as u,b as t,w as a,F as i,a as n,d as s,e as r}from"./app.2fbb9e96.js";const k={},b=n("h1",{id:"transaction-ngoai-tuyen",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#transaction-ngoai-tuyen","aria-hidden":"true"},"#"),s(" Transaction Ngo\u1EA1i tuy\u1EBFn")],-1),m=n("h2",{id:"ky-transaction",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#ky-transaction","aria-hidden":"true"},"#"),s(" K\xFD Transaction")],-1),d=n("p",null,"\u0110\u1EC3 t\u1EA1o m\u1ED9t transaction ngo\u1EA1i tuy\u1EBFn, b\u1EA1n ph\u1EA3i k\xFD l\xEAn transaction v\xE0 sau \u0111\xF3 b\u1EA5t k\u1EF3 ai \u0111\u1EC1u c\xF3 th\u1EC3 g\u1EEDi transaction \u0111\xF3 l\xEAn tr\xEAn m\u1EA1ng l\u01B0\u1EDBi.",-1),y=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` clusterApiUrl`),n("span",{class:"token punctuation"},","),s(` Connection`),n("span",{class:"token punctuation"},","),s(` Keypair`),n("span",{class:"token punctuation"},","),s(` diff --git a/docs/.vuepress/dist/assets/offline-transactions.html.07190946.js b/docs/.vuepress/dist/assets/offline-transactions.html.57239913.js similarity index 99% rename from docs/.vuepress/dist/assets/offline-transactions.html.07190946.js rename to docs/.vuepress/dist/assets/offline-transactions.html.57239913.js index 0a052a2aa..2d4498db3 100644 --- a/docs/.vuepress/dist/assets/offline-transactions.html.07190946.js +++ b/docs/.vuepress/dist/assets/offline-transactions.html.57239913.js @@ -1,4 +1,4 @@ -import{_ as p,r as c,o as l,c as u,b as t,w as a,F as i,a as n,d as s,e as r}from"./app.cfdf84e7.js";const k={},b=n("h1",{id:"offline-transaction",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#offline-transaction","aria-hidden":"true"},"#"),s(" Offline Transaction")],-1),m=n("h2",{id:"sign-transaction",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#sign-transaction","aria-hidden":"true"},"#"),s(" Sign Transaction")],-1),d=n("p",null,"\u0E01\u0E32\u0E23\u0E2A\u0E23\u0E49\u0E32\u0E07 offline transaction \u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 sign transaction \u0E41\u0E25\u0E30\u0E43\u0E2B\u0E49\u0E04\u0E19\u0E2D\u0E37\u0E48\u0E19 broadcast \u0E44\u0E1B\u0E17\u0E35\u0E48 network \u0E44\u0E14\u0E49",-1),y=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` +import{_ as p,r as c,o as l,c as u,b as t,w as a,F as i,a as n,d as s,e as r}from"./app.2fbb9e96.js";const k={},b=n("h1",{id:"offline-transaction",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#offline-transaction","aria-hidden":"true"},"#"),s(" Offline Transaction")],-1),m=n("h2",{id:"sign-transaction",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#sign-transaction","aria-hidden":"true"},"#"),s(" Sign Transaction")],-1),d=n("p",null,"\u0E01\u0E32\u0E23\u0E2A\u0E23\u0E49\u0E32\u0E07 offline transaction \u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 sign transaction \u0E41\u0E25\u0E30\u0E43\u0E2B\u0E49\u0E04\u0E19\u0E2D\u0E37\u0E48\u0E19 broadcast \u0E44\u0E1B\u0E17\u0E35\u0E48 network \u0E44\u0E14\u0E49",-1),y=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` clusterApiUrl`),n("span",{class:"token punctuation"},","),s(` Connection`),n("span",{class:"token punctuation"},","),s(` Keypair`),n("span",{class:"token punctuation"},","),s(` diff --git a/docs/.vuepress/dist/assets/offline-transactions.html.949a36e4.js b/docs/.vuepress/dist/assets/offline-transactions.html.6a78ad9b.js similarity index 92% rename from docs/.vuepress/dist/assets/offline-transactions.html.949a36e4.js rename to docs/.vuepress/dist/assets/offline-transactions.html.6a78ad9b.js index 8deb07abc..8a5cdb222 100644 --- a/docs/.vuepress/dist/assets/offline-transactions.html.949a36e4.js +++ b/docs/.vuepress/dist/assets/offline-transactions.html.6a78ad9b.js @@ -1 +1 @@ -const e={key:"v-7ec7d502",path:"/kr/references/offline-transactions.html",title:"Sending Offline Transactions",lang:"kr-KR",frontmatter:{title:"Sending Offline Transactions",head:[["meta",{name:"title",content:"Solana Cookbook | Sending Offline Transactions"}],["meta",{name:"og:title",content:"Solana Cookbook | Sending Offline Transactions"}],["meta",{name:"description",content:"After signing the Offline Transaction, anyone can broadcast it on the network. Learn more about Sending Offline Transactions and references at The Solana cookbook."}],["meta",{name:"og:description",content:"After signing the Offline Transaction, anyone can broadcast it on the network. Learn more about Sending Offline Transactions and references at The Solana cookbook."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"Sign Transaction",slug:"sign-transaction",children:[]},{level:2,title:"Partial Sign Transaction",slug:"partial-sign-transaction",children:[]},{level:2,title:"Durable Nonce",slug:"durable-nonce",children:[{level:3,title:"Create Nonce Account",slug:"create-nonce-account",children:[]},{level:3,title:"Get Nonce Account",slug:"get-nonce-account",children:[]},{level:3,title:"Use Nonce Account",slug:"use-nonce-account",children:[]}]}],git:{updatedTime:1672765954e3},filePathRelative:"kr/references/offline-transactions.md"};export{e as data}; +const e={key:"v-7ec7d502",path:"/kr/references/offline-transactions.html",title:"Sending Offline Transactions",lang:"kr-KR",frontmatter:{title:"Sending Offline Transactions",head:[["meta",{name:"title",content:"Solana Cookbook | Sending Offline Transactions"}],["meta",{name:"og:title",content:"Solana Cookbook | Sending Offline Transactions"}],["meta",{name:"description",content:"After signing the Offline Transaction, anyone can broadcast it on the network. Learn more about Sending Offline Transactions and references at The Solana cookbook."}],["meta",{name:"og:description",content:"After signing the Offline Transaction, anyone can broadcast it on the network. Learn more about Sending Offline Transactions and references at The Solana cookbook."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"Sign Transaction",slug:"sign-transaction",children:[]},{level:2,title:"Partial Sign Transaction",slug:"partial-sign-transaction",children:[]},{level:2,title:"Durable Nonce",slug:"durable-nonce",children:[{level:3,title:"Create Nonce Account",slug:"create-nonce-account",children:[]},{level:3,title:"Get Nonce Account",slug:"get-nonce-account",children:[]},{level:3,title:"Use Nonce Account",slug:"use-nonce-account",children:[]}]}],git:{updatedTime:1675349547e3},filePathRelative:"kr/references/offline-transactions.md"};export{e as data}; diff --git a/docs/.vuepress/dist/assets/offline-transactions.html.f52ab286.js b/docs/.vuepress/dist/assets/offline-transactions.html.772a0f44.js similarity index 99% rename from docs/.vuepress/dist/assets/offline-transactions.html.f52ab286.js rename to docs/.vuepress/dist/assets/offline-transactions.html.772a0f44.js index e79d80c32..ade6c6452 100644 --- a/docs/.vuepress/dist/assets/offline-transactions.html.f52ab286.js +++ b/docs/.vuepress/dist/assets/offline-transactions.html.772a0f44.js @@ -1,4 +1,4 @@ -import{_ as p,r as c,o as l,c as u,b as t,w as a,F as i,a as n,d as s,e as r}from"./app.cfdf84e7.js";const k={},b=n("h1",{id:"offline-transaction",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#offline-transaction","aria-hidden":"true"},"#"),s(" Offline Transaction")],-1),m=n("h2",{id:"sign-transaction",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#sign-transaction","aria-hidden":"true"},"#"),s(" Sign Transaction")],-1),d=n("p",null,"To create an offline transaction, you have to sign the transaction and then anyone can broadcast it on the network.",-1),y=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` +import{_ as p,r as c,o as l,c as u,b as t,w as a,F as i,a as n,d as s,e as r}from"./app.2fbb9e96.js";const k={},b=n("h1",{id:"offline-transaction",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#offline-transaction","aria-hidden":"true"},"#"),s(" Offline Transaction")],-1),m=n("h2",{id:"sign-transaction",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#sign-transaction","aria-hidden":"true"},"#"),s(" Sign Transaction")],-1),d=n("p",null,"To create an offline transaction, you have to sign the transaction and then anyone can broadcast it on the network.",-1),y=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` clusterApiUrl`),n("span",{class:"token punctuation"},","),s(` Connection`),n("span",{class:"token punctuation"},","),s(` Keypair`),n("span",{class:"token punctuation"},","),s(` diff --git a/docs/.vuepress/dist/assets/offline-transactions.html.84c823af.js b/docs/.vuepress/dist/assets/offline-transactions.html.80d13700.js similarity index 99% rename from docs/.vuepress/dist/assets/offline-transactions.html.84c823af.js rename to docs/.vuepress/dist/assets/offline-transactions.html.80d13700.js index 8b3cae043..3b94b407b 100644 --- a/docs/.vuepress/dist/assets/offline-transactions.html.84c823af.js +++ b/docs/.vuepress/dist/assets/offline-transactions.html.80d13700.js @@ -1,4 +1,4 @@ -import{_ as p,r as c,o as l,c as u,b as t,w as a,F as i,a as n,d as s,e as r}from"./app.cfdf84e7.js";const k={},b=n("h1",{id:"transaccion-offline",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#transaccion-offline","aria-hidden":"true"},"#"),s(" Transacci\xF3n offline")],-1),m=n("h2",{id:"firmar-una-transaccion",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#firmar-una-transaccion","aria-hidden":"true"},"#"),s(" Firmar una transacci\xF3n")],-1),d=n("p",null,"Para crear una transacci\xF3n offline, debes firmar la transacci\xF3n y luego cualquiera puede transmitirla en la red.",-1),y=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` +import{_ as p,r as c,o as l,c as u,b as t,w as a,F as i,a as n,d as s,e as r}from"./app.2fbb9e96.js";const k={},b=n("h1",{id:"transaccion-offline",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#transaccion-offline","aria-hidden":"true"},"#"),s(" Transacci\xF3n offline")],-1),m=n("h2",{id:"firmar-una-transaccion",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#firmar-una-transaccion","aria-hidden":"true"},"#"),s(" Firmar una transacci\xF3n")],-1),d=n("p",null,"Para crear una transacci\xF3n offline, debes firmar la transacci\xF3n y luego cualquiera puede transmitirla en la red.",-1),y=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` clusterApiUrl`),n("span",{class:"token punctuation"},","),s(` Connection`),n("span",{class:"token punctuation"},","),s(` Keypair`),n("span",{class:"token punctuation"},","),s(` diff --git a/docs/.vuepress/dist/assets/offline-transactions.html.b7d17f59.js b/docs/.vuepress/dist/assets/offline-transactions.html.8bcd0782.js similarity index 99% rename from docs/.vuepress/dist/assets/offline-transactions.html.b7d17f59.js rename to docs/.vuepress/dist/assets/offline-transactions.html.8bcd0782.js index 10b40bcbd..e52ed9032 100644 --- a/docs/.vuepress/dist/assets/offline-transactions.html.b7d17f59.js +++ b/docs/.vuepress/dist/assets/offline-transactions.html.8bcd0782.js @@ -1,4 +1,4 @@ -import{_ as n,e as a}from"./app.cfdf84e7.js";const s={},t=a(`

    Offline Transaction (\xC7evrimd\u0131\u015F\u0131 i\u015Flem)

    Sign Transaction (\u0130\u015Flem \u0130mzalama)

    \xC7evrimd\u0131\u015F\u0131 bir i\u015Flem olu\u015Fturmak i\xE7in i\u015Flemi imzalaman\u0131z gerekir ve ard\u0131ndan herkes bunu a\u011Fda yay\u0131nlayabilir.

    // there are two ways you can recover the tx
    +import{_ as n,e as a}from"./app.2fbb9e96.js";const s={},t=a(`

    Offline Transaction (\xC7evrimd\u0131\u015F\u0131 i\u015Flem)

    Sign Transaction (\u0130\u015Flem \u0130mzalama)

    \xC7evrimd\u0131\u015F\u0131 bir i\u015Flem olu\u015Fturmak i\xE7in i\u015Flemi imzalaman\u0131z gerekir ve ard\u0131ndan herkes bunu a\u011Fda yay\u0131nlayabilir.

    // there are two ways you can recover the tx
     // 3.a Recover Tranasction (use populate then addSignauture)
     {
       let recoverTx = Transaction.populate(Message.from(realDataNeedToSign));
    diff --git a/docs/.vuepress/dist/assets/offline-transactions.html.80b1d49c.js b/docs/.vuepress/dist/assets/offline-transactions.html.931bdc60.js
    similarity index 99%
    rename from docs/.vuepress/dist/assets/offline-transactions.html.80b1d49c.js
    rename to docs/.vuepress/dist/assets/offline-transactions.html.931bdc60.js
    index f24644223..e7fd2abcf 100644
    --- a/docs/.vuepress/dist/assets/offline-transactions.html.80b1d49c.js
    +++ b/docs/.vuepress/dist/assets/offline-transactions.html.931bdc60.js
    @@ -1,4 +1,4 @@
    -import{_ as p,r as c,o as l,c as u,b as t,w as a,F as i,a as n,d as s,e as r}from"./app.cfdf84e7.js";const k={},b=n("h1",{id:"transaksi-offline",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#transaksi-offline","aria-hidden":"true"},"#"),s(" Transaksi Offline")],-1),m=n("h2",{id:"sign-transaksi",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#sign-transaksi","aria-hidden":"true"},"#"),s(" Sign Transaksi")],-1),d=n("p",null,"Untuk membuat suatu transaksi offline, kamu harus sign transaksi tersebut, kemudian siapapun dapat mem-broadcast-nya di network.",-1),y=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(`
    +import{_ as p,r as c,o as l,c as u,b as t,w as a,F as i,a as n,d as s,e as r}from"./app.2fbb9e96.js";const k={},b=n("h1",{id:"transaksi-offline",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#transaksi-offline","aria-hidden":"true"},"#"),s(" Transaksi Offline")],-1),m=n("h2",{id:"sign-transaksi",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#sign-transaksi","aria-hidden":"true"},"#"),s(" Sign Transaksi")],-1),d=n("p",null,"Untuk membuat suatu transaksi offline, kamu harus sign transaksi tersebut, kemudian siapapun dapat mem-broadcast-nya di network.",-1),y=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(`
       clusterApiUrl`),n("span",{class:"token punctuation"},","),s(`
       Connection`),n("span",{class:"token punctuation"},","),s(`
       Keypair`),n("span",{class:"token punctuation"},","),s(`
    diff --git a/docs/.vuepress/dist/assets/offline-transactions.html.889f35c4.js b/docs/.vuepress/dist/assets/offline-transactions.html.c4fd9dc0.js
    similarity index 99%
    rename from docs/.vuepress/dist/assets/offline-transactions.html.889f35c4.js
    rename to docs/.vuepress/dist/assets/offline-transactions.html.c4fd9dc0.js
    index af57759e7..bf9912c52 100644
    --- a/docs/.vuepress/dist/assets/offline-transactions.html.889f35c4.js
    +++ b/docs/.vuepress/dist/assets/offline-transactions.html.c4fd9dc0.js
    @@ -1,4 +1,4 @@
    -import{_ as p,r as c,o as l,c as u,b as t,w as a,F as i,a as n,d as s,e as r}from"./app.cfdf84e7.js";const k={},b=n("h1",{id:"transactions-hors-connexion",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#transactions-hors-connexion","aria-hidden":"true"},"#"),s(" Transactions hors connexion")],-1),m=n("h2",{id:"signer-la-transaction",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#signer-la-transaction","aria-hidden":"true"},"#"),s(" Signer la Transaction")],-1),d=n("p",null,"Pour cr\xE9er une transaction hors connexion, vous devez signer la transaction, puis n'importe qui peut la diffuser sur le r\xE9seau.",-1),y=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(`
    +import{_ as p,r as c,o as l,c as u,b as t,w as a,F as i,a as n,d as s,e as r}from"./app.2fbb9e96.js";const k={},b=n("h1",{id:"transactions-hors-connexion",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#transactions-hors-connexion","aria-hidden":"true"},"#"),s(" Transactions hors connexion")],-1),m=n("h2",{id:"signer-la-transaction",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#signer-la-transaction","aria-hidden":"true"},"#"),s(" Signer la Transaction")],-1),d=n("p",null,"Pour cr\xE9er une transaction hors connexion, vous devez signer la transaction, puis n'importe qui peut la diffuser sur le r\xE9seau.",-1),y=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(`
       clusterApiUrl`),n("span",{class:"token punctuation"},","),s(`
       Connection`),n("span",{class:"token punctuation"},","),s(`
       Keypair`),n("span",{class:"token punctuation"},","),s(`
    diff --git a/docs/.vuepress/dist/assets/offline-transactions.html.d168f4a1.js b/docs/.vuepress/dist/assets/offline-transactions.html.ec06e8f3.js
    similarity index 99%
    rename from docs/.vuepress/dist/assets/offline-transactions.html.d168f4a1.js
    rename to docs/.vuepress/dist/assets/offline-transactions.html.ec06e8f3.js
    index b8c989ad8..88ea920d1 100644
    --- a/docs/.vuepress/dist/assets/offline-transactions.html.d168f4a1.js
    +++ b/docs/.vuepress/dist/assets/offline-transactions.html.ec06e8f3.js
    @@ -1,4 +1,4 @@
    -import{_ as p,r as c,o as l,c as u,b as t,w as a,F as i,a as n,d as s,e as r}from"./app.cfdf84e7.js";const k={},b=n("h1",{id:"offline-transaction",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#offline-transaction","aria-hidden":"true"},"#"),s(" Offline Transaction")],-1),m=n("h2",{id:"sign-transaction",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#sign-transaction","aria-hidden":"true"},"#"),s(" Sign Transaction")],-1),d=n("p",null,"\uC624\uD504\uB77C\uC778 Transaction\uC744 \uC0DD\uC131\uD558\uAE30 \uC704\uD574\uC11C, \uB2F9\uC2E0\uC740 Transaction\uC5D0 \uC11C\uBA85\uD574\uC57C \uD569\uB2C8\uB2E4. \uADF8\uB7EC\uBA74 \uB204\uAD6C\uB4E0 \uC774\uAC83\uC744 network\uC5D0 \uBE0C\uB85C\uB4DC\uCE90\uC2A4\uD305\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.",-1),y=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(`
    +import{_ as p,r as c,o as l,c as u,b as t,w as a,F as i,a as n,d as s,e as r}from"./app.2fbb9e96.js";const k={},b=n("h1",{id:"offline-transaction",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#offline-transaction","aria-hidden":"true"},"#"),s(" Offline Transaction")],-1),m=n("h2",{id:"sign-transaction",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#sign-transaction","aria-hidden":"true"},"#"),s(" Sign Transaction")],-1),d=n("p",null,"\uC624\uD504\uB77C\uC778 Transaction\uC744 \uC0DD\uC131\uD558\uAE30 \uC704\uD574\uC11C, \uB2F9\uC2E0\uC740 Transaction\uC5D0 \uC11C\uBA85\uD574\uC57C \uD569\uB2C8\uB2E4. \uADF8\uB7EC\uBA74 \uB204\uAD6C\uB4E0 \uC774\uAC83\uC744 network\uC5D0 \uBE0C\uB85C\uB4DC\uCE90\uC2A4\uD305\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.",-1),y=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(`
       clusterApiUrl`),n("span",{class:"token punctuation"},","),s(`
       Connection`),n("span",{class:"token punctuation"},","),s(`
       Keypair`),n("span",{class:"token punctuation"},","),s(`
    @@ -128,7 +128,7 @@ import{_ as p,r as c,o as l,c as u,b as t,w as a,F as i,a as n,d as s,e as r}fro
         `),n("span",{class:"token template-string"},[n("span",{class:"token template-punctuation string"},"`"),n("span",{class:"token string"},"txhash: "),n("span",{class:"token interpolation"},[n("span",{class:"token interpolation-punctuation punctuation"},"${"),n("span",{class:"token keyword"},"await"),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"sendRawTransaction"),n("span",{class:"token punctuation"},"("),s("recoverTx"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"serialize"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token interpolation-punctuation punctuation"},"}")]),n("span",{class:"token template-punctuation string"},"`")]),s(`
       `),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
     `),n("span",{class:"token punctuation"},"}"),s(`
    -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br")])],-1),g=n("h2",{id:"partial-sign-transaction",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#partial-sign-transaction","aria-hidden":"true"},"#"),s(" Partial Sign Transaction")],-1),w=n("p",null,"Transaction\uC774 \uB2E4\uC218\uC758 \uC11C\uBA85\uC744 \uC694\uAD6C\uD560 \uB54C, \uB2F9\uC2E0\uC740 \uBD80\uBD84\uC801\uC73C\uB85C \uC11C\uBA85\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uADF8\uB7EC\uBA74 \uB2E4\uB978 \uC11C\uBA85\uC790\uB4E4\uC774 \uC11C\uBA85\uD55C \uD6C4\uC5D0 \uC774\uAC83\uC744 network\uC5D0 \uBE0C\uB85C\uB4DC\uCE90\uC2A4\uD305\uD560 \uAC83\uC785\uB2C8\uB2E4.",-1),h=n("p",null,"\uC774\uAC83\uC774 \uC720\uC6A9\uD55C \uBA87 \uAC00\uC9C0 \uC608\uC81C\uB4E4:",-1),A=n("ul",null,[n("li",null,"\uC9C0\uBD88\uC5D0 \uB300\uD55C \uC751\uB2F5\uC73C\uB85C SPL Token\uC744 \uBCF4\uB0B4\uB294 \uAC83"),n("li",null,"\uB2F9\uC2E0\uC774 \uB098\uC911\uC5D0 \uC774\uAC83\uC758 \uC9C4\uC704\uB97C \uAC80\uC99D\uD558\uAE30 \uC704\uD574 Trnascation\uC5D0 \uC11C\uBA85\uD558\uB294 \uAC83"),n("li",null,"\uB2F9\uC2E0\uC758 \uC11C\uBA85\uC744 \uC694\uAD6C\uD558\uB294 Transaction\uC5D0 \uCEE4\uC2A4\uD140 Program\uB4E4\uC744 \uD638\uCD9C\uD558\uB294 \uAC83")],-1),T=n("p",null,"\uC774\uBC88 \uC608\uC81C\uC5D0\uC11C\uB294 Bob\uC774 Alice\uC5D0\uAC8C \uADF8\uB140\uC758 \uC9C0\uBD88\uC5D0 \uB300\uD55C \uC751\uB2F5\uC73C\uB85C SPL Token\uC744 \uBCF4\uB0C5\uB2C8\uB2E4:",-1),P=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(`
    +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br")])],-1),g=n("h2",{id:"partial-sign-transaction",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#partial-sign-transaction","aria-hidden":"true"},"#"),s(" Partial Sign Transaction")],-1),w=n("p",null,"Transaction\uC774 \uB2E4\uC218\uC758 \uC11C\uBA85\uC744 \uC694\uAD6C\uD560 \uB54C, \uB2F9\uC2E0\uC740 \uBD80\uBD84\uC801\uC73C\uB85C \uC11C\uBA85\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uADF8\uB7EC\uBA74 \uB2E4\uB978 \uC11C\uBA85\uC790\uB4E4\uC774 \uC11C\uBA85\uD55C \uD6C4\uC5D0 \uC774\uAC83\uC744 network\uC5D0 \uBE0C\uB85C\uB4DC\uCE90\uC2A4\uD305\uD560 \uAC83\uC785\uB2C8\uB2E4.",-1),h=n("p",null,"\uC774\uAC83\uC774 \uC720\uC6A9\uD55C \uBA87 \uAC00\uC9C0 \uC608\uC81C\uB4E4:",-1),A=n("ul",null,[n("li",null,"\uC9C0\uBD88\uC5D0 \uB300\uD55C \uC751\uB2F5\uC73C\uB85C SPL Token\uC744 \uBCF4\uB0B4\uB294 \uAC83"),n("li",null,"\uB2F9\uC2E0\uC774 \uB098\uC911\uC5D0 \uC774\uAC83\uC758 \uC9C4\uC704\uB97C \uAC80\uC99D\uD558\uAE30 \uC704\uD574 Transaction\uC5D0 \uC11C\uBA85\uD558\uB294 \uAC83"),n("li",null,"\uB2F9\uC2E0\uC758 \uC11C\uBA85\uC744 \uC694\uAD6C\uD558\uB294 Transaction\uC5D0 \uCEE4\uC2A4\uD140 Program\uB4E4\uC744 \uD638\uCD9C\uD558\uB294 \uAC83")],-1),T=n("p",null,"\uC774\uBC88 \uC608\uC81C\uC5D0\uC11C\uB294 Bob\uC774 Alice\uC5D0\uAC8C \uADF8\uB140\uC758 \uC9C0\uBD88\uC5D0 \uB300\uD55C \uC751\uB2F5\uC73C\uB85C SPL Token\uC744 \uBCF4\uB0C5\uB2C8\uB2E4:",-1),P=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(`
       createTransferCheckedInstruction`),n("span",{class:"token punctuation"},","),s(`
       getAssociatedTokenAddress`),n("span",{class:"token punctuation"},","),s(`
       getMint`),n("span",{class:"token punctuation"},","),s(`
    diff --git a/docs/.vuepress/dist/assets/orao-vrf.html.5ce1f7c1.js b/docs/.vuepress/dist/assets/orao-vrf.html.5ce1f7c1.js
    new file mode 100644
    index 000000000..992877fe3
    --- /dev/null
    +++ b/docs/.vuepress/dist/assets/orao-vrf.html.5ce1f7c1.js
    @@ -0,0 +1 @@
    +const e={key:"v-c8a72676",path:"/fr/integrations/orao-vrf.html",title:"ORAO VRF",lang:"fr-FR",frontmatter:{title:"ORAO VRF",head:[["meta"],{name:"title",content:"Solana Cookbook | Utilisation de ORAO VRF avec Solana"},["meta"],{name:"og:title",content:"Solana Cookbook | Utilisation de ORAO VRF avec Solana"},["meta"],{name:"description",content:"Dans ce tutoriel, vous allez apprendre \xE0 utiliser ORAO VRF avec Solana et Anchor."},["meta"],{name:"og:description",content:"Dans ce tutoriel, vous allez apprendre \xE0 utiliser ORAO VRF avec Solana et Anchor."},["meta"],{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"},["meta"],{name:"og:image:alt",content:"Solana splash card"},["meta"],{name:"twitter:card",content:"summary"},["meta"],{name:"twitter:site",content:"@solanacookbook"},["meta"],{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"},["meta"],{name:"robots",content:"index,follow,noodp"},["meta"],{name:"googlebot",content:"index,follow"}]},excerpt:"",headers:[{level:2,title:"Sc\xE9nario d'utilisation de base",slug:"scenario-d-utilisation-de-base",children:[]},{level:2,title:"SDKs",slug:"sdks",children:[]},{level:2,title:"Anatomie d'une requ\xEAte d'al\xE9atoire",slug:"anatomie-d-une-requete-d-aleatoire",children:[]},{level:2,title:"Anatomie d'une configuration VRF",slug:"anatomie-d-une-configuration-vrf",children:[]},{level:2,title:"Exemple Rust-natif",slug:"exemple-rust-natif",children:[{level:3,title:"1. Configurer la connexion",slug:"_1-configurer-la-connexion",children:[]},{level:3,title:"2. Cr\xE9er une requ\xEAte",slug:"_2-creer-une-requete",children:[]},{level:3,title:"3. Attendre le traitement",slug:"_3-attendre-le-traitement",children:[]}]},{level:2,title:"Exemple CPI",slug:"exemple-cpi",children:[{level:3,title:"1. Cr\xE9er le contrat",slug:"_1-creer-le-contrat",children:[]},{level:3,title:"2. Collecter les comptes n\xE9cessaires",slug:"_2-collecter-les-comptes-necessaires",children:[]},{level:3,title:"3. Effectuer un appel CPI",slug:"_3-effectuer-un-appel-cpi",children:[]},{level:3,title:"4. Utiliser le caract\xE8re al\xE9atoire obtenu",slug:"_4-utiliser-le-caractere-aleatoire-obtenu",children:[]}]}],git:{updatedTime:1674873344e3},filePathRelative:"fr/integrations/orao-vrf.md"};export{e as data};
    diff --git a/docs/.vuepress/dist/assets/orao-vrf.html.7953840f.js b/docs/.vuepress/dist/assets/orao-vrf.html.7953840f.js
    new file mode 100644
    index 000000000..67e8ddddd
    --- /dev/null
    +++ b/docs/.vuepress/dist/assets/orao-vrf.html.7953840f.js
    @@ -0,0 +1,125 @@
    +import{_ as p,r as o,o as c,c as l,a as n,b as e,F as u,d as s,e as t}from"./app.2fbb9e96.js";const r={},i=n("h1",{id:"orao-vrf",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#orao-vrf","aria-hidden":"true"},"#"),s(" ORAO VRF")],-1),k=n("p",null,"ORAO VRF est un oracle \xE0 fonction al\xE9atoire v\xE9rifiable multipartite bas\xE9 sur EDDSA. Il est capable de fournir 64 octets al\xE9atoires v\xE9rifiables en r\xE9ponse \xE0 une requ\xEAte.",-1),d=n("h2",{id:"scenario-d-utilisation-de-base",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#scenario-d-utilisation-de-base","aria-hidden":"true"},"#"),s(" Sc\xE9nario d'utilisation de base")],-1),m=n("li",null,[s("Cr\xE9ation d'une nouvelle requ\xEAte d'al\xE9atoire. "),n("ul",null,[n("li",null,[s("Cette op\xE9ration n\xE9cessite qu'une "),n("em",null,"seed"),s(" unique soit donn\xE9e par le client. Cette seed est utilis\xE9e pour la v\xE9rification du caract\xE8re al\xE9atoire.")])])],-1),b=n("li",null,[s("Utilisation du caract\xE8re al\xE9atoire g\xE9n\xE9r\xE9 d\xE8s que la requ\xEAte est trait\xE9e. "),n("ul",null,[n("li",null,"L'oracle traitera les nouvelles requ\xEAtes d\xE8s que possible. Cette proc\xE9dure inclut l'\xE9tape de v\xE9rification, de sorte qu'aucun \xE9l\xE9ment al\xE9atoire non v\xE9rifi\xE9 n'apparaisse sur la cha\xEEne.")])],-1),_=s("(Facultatif) V\xE9rification du caract\xE8re al\xE9atoire g\xE9n\xE9r\xE9 hors cha\xEEne. "),h=s("Vous \xEAtes en mesure de "),f={href:"https://github.com/orao-network/solana-vrf/blob/6cc9a80ec280b96a97321b8bfe2904a6e432c38e/rust/examples/off-chain/src/main.rs#L48",target:"_blank",rel:"noopener noreferrer"},v=n("code",null,"v\xE9rifier le caract\xE8re al\xE9atoire g\xE9n\xE9r\xE9",-1),g=s(" par rapport \xE0 la liste effective des autorit\xE9s de traitement (c'est une partie de la configuration VRF disponible publiquement). Il existe des aides pour cela dans les SDKs."),y=n("h2",{id:"sdks",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#sdks","aria-hidden":"true"},"#"),s(" SDKs")],-1),q=n("p",null,"Deux SDKs sont disponibles :",-1),x=s("Le crate "),C={href:"https://docs.rs/orao-solana-vrf",target:"_blank",rel:"noopener noreferrer"},w=n("code",null,"orao-solana-vrf",-1),S=s(" \u2013 le code ci-dessous est bas\xE9 sur ce SDK Rust."),R=s("Le SDK JS - SDK JavaScript, ainsi que le code source du SDK Rust, sont disponibles dans le d\xE9p\xF4t public sur GitHub "),D={href:"https://github.com/orao-network/solana-vrf",target:"_blank",rel:"noopener noreferrer"},P=n("code",null,"solana-vrf",-1),A=s(". Tous les tests de ce r\xE9pertoire sont bas\xE9s sur le SDK JavaScript."),I=n("h2",{id:"anatomie-d-une-requete-d-aleatoire",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#anatomie-d-une-requete-d-aleatoire","aria-hidden":"true"},"#"),s(" Anatomie d'une requ\xEAte d'al\xE9atoire")],-1),E=s("La structure "),V={href:"https://docs.rs/orao-solana-vrf/latest/orao_solana_vrf/state/struct.Randomness.html",target:"_blank",rel:"noopener noreferrer"},N=n("code",null,"RandomnessRequest",-1),F=s(" est utilis\xE9e pour stocker le caract\xE8re al\xE9atoire demand\xE9 :"),L=t('
    • Champ seed - stocke la seed de la requ\xEAte
    • Champ randomness \u2013 c'est le champ int\xE9ressant. Il stocke le caract\xE8re al\xE9atoire obtenu. Il sera vide jusqu'\xE0 ce que la requ\xEAte d'al\xE9atoire soit satisfaite.
    • Champ responses \u2013 vous pouvez regarder ce champ au cas o\xF9 vous seriez pr\xEAt \xE0 effectuer une v\xE9rification hors cha\xEEne. (il y a des aides pour cela dans chaque SDKs)

    Anatomie d'une configuration VRF

    ',2),K=s("La structure "),T={href:"https://docs.rs/orao-solana-vrf/latest/orao_solana_vrf/state/struct.NetworkState.html",target:"_blank",rel:"noopener noreferrer"},O=n("code",null,"NetworkState",-1),z=s(" contient les donn\xE9es VRF de la cha\xEEne. Nous allons parler ici de son champ "),B=n("code",null,"config",-1),H=s(", qui stocke la "),U={href:"https://docs.rs/orao-solana-vrf/latest/orao_solana_vrf/state/struct.NetworkConfiguration.html",target:"_blank",rel:"noopener noreferrer"},j=n("code",null,"NetworkConfiguration",-1),G=s(". Les champs qui peuvent vous int\xE9resser sont les suivants :"),J=n("ul",null,[n("li",null,[n("code",null,"request_fee"),s(" \u2013 la requ\xEAte d'al\xE9atoire co\xFBtera ce nombre de lamports")]),n("li",null,[n("code",null,"fulfillment_authorities"),s(" \u2013 les cl\xE9s publiques des autorit\xE9s de traitement")]),n("li",null,[n("code",null,"token_fee_cofig"),s(" - s'il est d\xE9fini, alors il est possible de payer les frais en SPL au lieu de SOL")])],-1),M=n("h2",{id:"exemple-rust-natif",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#exemple-rust-natif","aria-hidden":"true"},"#"),s(" Exemple Rust-natif")],-1),Y=s("Cette section va illustrer l'utilisation hors cha\xEEne ("),Z={href:"https://github.com/orao-network/solana-vrf/tree/master/rust/examples/off-chain",target:"_blank",rel:"noopener noreferrer"},Q=s("le code complet est disponible sur GitHub"),W=s(")"),X=n("h3",{id:"_1-configurer-la-connexion",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#_1-configurer-la-connexion","aria-hidden":"true"},"#"),s(" 1. Configurer la connexion")],-1),$=s("Le SDK Rust est bas\xE9 sur la biblioth\xE8que "),nn={href:"https://docs.rs/anchor-client",target:"_blank",rel:"noopener noreferrer"},sn=n("code",null,"anchor-client",-1),an=s(", vous devrez donc acqu\xE9rir l'instance "),en=n("code",null,"Program",-1),tn=s(" pour l'utiliser :"),pn=t(`
    let payer: Keypair = ..; // get this from the solana configuration
    +let client = Client::new_with_options(Cluster::Devnet, Rc::new(payer), CommitmentConfig::finalized());
    +let program = client.program(orao_solana_vrf::id());
    +

    2. Cr\xE9er une requ\xEAte

    `,2),on=s("Il existe un "),cn={href:"https://docs.rs/orao-solana-vrf/latest/orao_solana_vrf/struct.RequestBuilder.html",target:"_blank",rel:"noopener noreferrer"},ln=n("code",null,"RequestBuilder",-1),un=s(" tr\xE8s pratique \xE0 cet effet :"),rn=t(`
    let seed = rand::random();
    +let tx = RequestBuilder::new(seed)
    +    .build(&program)
    +    .expect("Randomness request")
    +    .send_with_spinner_and_config(RpcSendTransactionConfig::default())
    +    .expect("Transaction hash");
    +

    3. Attendre le traitement

    Il existe de multiples fa\xE7ons d'attendre le traitement, y compris la m\xE9thode pub-sub. L'exemple suivant utilise une simple boucle :

    let randomness_address = orao_solana_vrf::randomness_account_address(&seed);
    +let randomness_account = loop {
    +    match program.account::<Randomness>(randomness_address) {
    +        Ok(randomness) if randomness.fulfilled().is_some() => break randomness,
    +        _ => {
    +            std::thread::sleep(Duration::from_secs(1));
    +            continue;
    +        }
    +    }
    +}
    +println!("Randomness for seed {:?} is fulfilled with {:?}", seed, randomness_account.randomness);
    +

    Exemple CPI

    `,5),kn=s("CPI est l'abr\xE9viation de Cross Program Invocation, un moyen pour un contrat d'appeler un autre contrat dans une m\xEAme transaction. Cette section va l'illustrer ("),dn={href:"https://github.com/orao-network/solana-vrf/tree/master/rust/examples/cpi",target:"_blank",rel:"noopener noreferrer"},mn=s("le code complet est disponible sur GitHub"),bn=s(")."),_n=n("p",null,"Le contrat que nous utiliserons pour illustrer le CPI est une roulette russe \xE0 un joueur o\xF9 le r\xE9sultat d'un tour est d\xE9riv\xE9 d'un caract\xE8re al\xE9atoire.",-1),hn=n("p",null,[n("em",null,"Remarque :"),s(" le caract\xE8re al\xE9atoire ne sera pas imm\xE9diatement disponible pour votre contrat, vous devrez donc le concevoir de mani\xE8re \xE0 ce qu'il attende que le caract\xE8re al\xE9atoire soit rempli. Dans notre exemple, un joueur ne pourra pas commencer un autre tour avant que le tour actuel ne soit termin\xE9 (c'est \xE0 dire jusqu'\xE0 ce que le caract\xE8re al\xE9atoire soit rempli).")],-1),fn=n("h3",{id:"_1-creer-le-contrat",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#_1-creer-le-contrat","aria-hidden":"true"},"#"),s(" 1. Cr\xE9er le contrat")],-1),vn=s("Ces exemples sont bas\xE9s sur le "),gn={href:"https://github.com/coral-xyz/anchor",target:"_blank",rel:"noopener noreferrer"},yn=s("Framework Anchor"),qn=s(". Veuillez consulter le "),xn={href:"https://book.anchor-lang.com/",target:"_blank",rel:"noopener noreferrer"},Cn=s("Livre d'Anchor"),wn=s(" pour savoir comment cr\xE9er un contrat."),Sn=t(`

    Pour effectuer un appel CPI, vous devez ajouter le SDK Rust orao VRF avec la fonctionnalit\xE9 cpi dans la liste de vos d\xE9pendances :

    [dependencies]
    +# ...
    +orao-solana-vrf = { version = "0.2.3", default-features = false, features = ["cpi"] }
    +

    2. Collecter les comptes n\xE9cessaires

    Chaque instruction Solana n\xE9cessite une liste de comptes appropri\xE9s. Nous devrons appeler l'instruction Request, voici donc la liste des comptes requis :

    • payer \u2013 client VRF
    • network_state \u2013 Adresse d'\xE9tat du VRF sur la cha\xEEne
    • treasury - adresse de la tr\xE9sorerie du VRF (extrait de l'\xE9tat du VRF sur la cha\xEEne)
    • request - PDA pour stocker le caract\xE8re al\xE9atoire (d\xE9riv\xE9 de la seed)
    • system_program \u2013 n\xE9cessaire pour cr\xE9er le compte de la requ\xEAte

    Cela signifie que notre instruction a besoin de tous ces comptes en plus de ses propres comptes. En particulier, notre instruction Russian-Roulette n\xE9cessitera la liste de comptes suivante :

    #[derive(Accounts)]
    +#[instruction(force: [u8; 32])]
    +pub struct SpinAndPullTheTrigger<'info> {
    +    /// Player will be the \`payer\` account in the CPI call.
    +    #[account(mut)]
    +    player: Signer<'info>,
    +
    +    /// This is the player state account, it is required by Russian-Roulette to store player data
    +    // (number of rounds played and info to derive the last round outcome)
    +    #[account(
    +        init_if_needed,
    +        payer = player,
    +        space = 8 + PlayerState::SIZE,
    +        seeds = [
    +            PLAYER_STATE_ACCOUNT_SEED,
    +            player.key().as_ref()
    +        ],
    +        bump
    +    )]
    +    player_state: Account<'info, PlayerState>,
    +
    +    /// This account points to the last VRF request, it is necessary to validate that the player
    +    /// is alive and is able to play another round.
    +    /// CHECK:
    +    #[account(
    +        seeds = [RANDOMNESS_ACCOUNT_SEED.as_ref(), player_state.force.as_ref()],
    +        bump,
    +        seeds::program = orao_solana_vrf::ID
    +    )]
    +    prev_round: AccountInfo<'info>,
    +
    +    /// This account is the current VRF request account, it'll be the \`request\` account in the CPI call.
    +    /// CHECK:
    +    #[account(
    +        mut,
    +        seeds = [RANDOMNESS_ACCOUNT_SEED.as_ref(), &force],
    +        bump,
    +        seeds::program = orao_solana_vrf::ID
    +    )]
    +    random: AccountInfo<'info>,
    +
    +    /// VRF treasury account, it'll be the \`treasury\` account in the CPI call.
    +    /// CHECK:
    +    #[account(mut)]
    +    treasury: AccountInfo<'info>,
    +    #[account(
    +        mut,
    +        seeds = [CONFIG_ACCOUNT_SEED.as_ref()],
    +        bump,
    +        seeds::program = orao_solana_vrf::ID
    +    )]
    +
    +    /// VRF on-chain state account, it'll be the \`network_state\` account in the CPI call.
    +    config: Account<'info, NetworkState>,
    +
    +    /// VRF program address to invoke CPI
    +    vrf: Program<'info, OraoVrf>,
    +
    +    /// System program address to create player_state and to be used in CPI call.
    +    system_program: Program<'info, System>,
    +}
    +

    3. Effectuer un appel CPI

    `,8),Rn=s("Dans le framework Anchor, il existe un "),Dn=n("code",null,"CpiContext",-1),Pn=s(" \xE0 cet effet (veuillez consulter la "),An={href:"https://book.anchor-lang.com/anchor_in_depth/CPIs.html",target:"_blank",rel:"noopener noreferrer"},In=s("section correspondante"),En=s(" du Livre d'Anchor):"),Vn=t(`
    let cpi_program = ctx.accounts.vrf.to_account_info();
    +let cpi_accounts = orao_solana_vrf::cpi::accounts::Request {
    +    payer: ctx.accounts.player.to_account_info(),
    +    network_state: ctx.accounts.config.to_account_info(),
    +    treasury: ctx.accounts.treasury.to_account_info(),
    +    request: ctx.accounts.random.to_account_info(),
    +    system_program: ctx.accounts.system_program.to_account_info(),
    +};
    +let cpi_ctx = anchor_lang::context::CpiContext::new(cpi_program, cpi_accounts);
    +orao_solana_vrf::cpi::request(cpi_ctx, force)?;
    +

    4. Utiliser le caract\xE8re al\xE9atoire obtenu

    Notre contrat d\xE9rive le r\xE9sultat du tour \xE0 partir du caract\xE8re al\xE9atoire obtenu, le tour \xE9tant consid\xE9r\xE9e comme en cours si le caract\xE8re al\xE9atoire n'est pas encore obtenu :

    /// Last round outcome.
    +#[derive(Debug, Clone, Copy, PartialEq, Eq)]
    +pub enum CurrentState {
    +    /// Player is alive and able to play.
    +    Alive,
    +    /// Player is dead and can't play anymore.
    +    Dead,
    +    /// Player is waiting for current round to finish.
    +    Playing,
    +}
    +
    +/// Derives last round outcome.
    +pub fn current_state(randomness: &Randomness) -> CurrentState {
    +    if let Some(randomness) = randomness.fulfilled() {
    +        if is_dead(randomness) {
    +            CurrentState::Dead
    +        } else {
    +            CurrentState::Alive
    +        }
    +    } else {
    +        CurrentState::Playing
    +    }
    +}
    +
    +/// Decides whether player is dead or alive.
    +fn is_dead(randomness: &[u8; 64]) -> bool {
    +    // use only first 8 bytes for simplicyty
    +    let value = randomness[0..size_of::<u64>()].try_into().unwrap();
    +    u64::from_le_bytes(value) % 6 == 0
    +}
    +
    `,4);function Nn(Fn,Ln){const a=o("ExternalLinkIcon");return c(),l(u,null,[i,k,d,n("ol",null,[m,b,n("li",null,[_,n("ul",null,[n("li",null,[h,n("a",f,[v,e(a)]),g])])])]),y,q,n("ol",null,[n("li",null,[x,n("a",C,[w,e(a)]),S]),n("li",null,[R,n("a",D,[P,e(a)]),A])]),I,n("p",null,[E,n("a",V,[N,e(a)]),F]),L,n("p",null,[K,n("a",T,[O,e(a)]),z,B,H,n("a",U,[j,e(a)]),G]),J,M,n("p",null,[Y,n("a",Z,[Q,e(a)]),W]),X,n("p",null,[$,n("a",nn,[sn,e(a)]),an,en,tn]),pn,n("p",null,[on,n("a",cn,[ln,e(a)]),un]),rn,n("p",null,[kn,n("a",dn,[mn,e(a)]),bn]),_n,hn,fn,n("p",null,[vn,n("a",gn,[yn,e(a)]),qn,n("a",xn,[Cn,e(a)]),wn]),Sn,n("p",null,[Rn,Dn,Pn,n("a",An,[In,e(a)]),En]),Vn],64)}var Tn=p(r,[["render",Nn]]);export{Tn as default}; diff --git a/docs/.vuepress/dist/assets/orao-vrf.html.17c85dd9.js b/docs/.vuepress/dist/assets/orao-vrf.html.a55507f9.js similarity index 99% rename from docs/.vuepress/dist/assets/orao-vrf.html.17c85dd9.js rename to docs/.vuepress/dist/assets/orao-vrf.html.a55507f9.js index 82d631199..6880189d6 100644 --- a/docs/.vuepress/dist/assets/orao-vrf.html.17c85dd9.js +++ b/docs/.vuepress/dist/assets/orao-vrf.html.a55507f9.js @@ -1,4 +1,4 @@ -import{_ as o,r as p,o as c,c as l,a as n,b as t,F as u,d as s,e}from"./app.cfdf84e7.js";const r={},i=n("h1",{id:"orao-vrf",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#orao-vrf","aria-hidden":"true"},"#"),s(" ORAO VRF")],-1),k=n("p",null,"ORAO VRF is a multi-party verifiable random function oracle based on EDDSA. It is able to provide 64 bytes of verifiable randomness in response to a randomness request.",-1),d=n("h2",{id:"basic-usage-scenario",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#basic-usage-scenario","aria-hidden":"true"},"#"),s(" Basic usage scenario")],-1),m=n("li",null,[s("Create a new randomness request. "),n("ul",null,[n("li",null,[s("This operation requires a unique "),n("em",null,"seed"),s(" to be given by the client. This seed is used for randomness verification.")])])],-1),b=n("li",null,[s("Use generated randomness as soon as request is fulfilled. "),n("ul",null,[n("li",null,"Oracle will fulfill new requests as soon as possible, this procedure includes the verification step, so no unverified randomness should appear on-chain.")])],-1),h=s("(Optional) Verify generated randomness off-chain. "),f=s("You are able to "),_={href:"https://github.com/orao-network/solana-vrf/blob/6cc9a80ec280b96a97321b8bfe2904a6e432c38e/rust/examples/off-chain/src/main.rs#L48",target:"_blank",rel:"noopener noreferrer"},y=n("code",null,"verify generated randomness",-1),g=s(" against the effective list of fulfillment authorities (it's a part of publicly available VRF configuration). There are helpers for this in SDKs."),v=n("h2",{id:"sdks",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#sdks","aria-hidden":"true"},"#"),s(" SDKs")],-1),w=n("p",null,"There are two SDKs available:",-1),x=s("The "),C={href:"https://docs.rs/orao-solana-vrf",target:"_blank",rel:"noopener noreferrer"},q=n("code",null,"orao-solana-vrf",-1),S=s(" crate \u2013 the code bellow is based on this Rust SDK."),R=s("The JS SDK \u2013 JavaScript SDK, as well as the source code of the Rust SDK, is available in the public repository on GitHub "),P={href:"https://github.com/orao-network/solana-vrf",target:"_blank",rel:"noopener noreferrer"},D=n("code",null,"solana-vrf",-1),T=s(". All tests within this repo are based on the JavaScript SDK."),A=n("h2",{id:"anatomy-of-a-randomness-request",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#anatomy-of-a-randomness-request","aria-hidden":"true"},"#"),s(" Anatomy of a randomness request")],-1),I=s("The "),E={href:"https://docs.rs/orao-solana-vrf/latest/orao_solana_vrf/state/struct.Randomness.html",target:"_blank",rel:"noopener noreferrer"},V=n("code",null,"RandomnessRequest",-1),F=s(" structure is used to store the requested randomness:"),N=n("ul",null,[n("li",null,[n("code",null,"seed"),s(" field \u2013 stores the request seed")]),n("li",null,[n("code",null,"randomness"),s(" field \u2013 this is the field of interest, that stores the fulfilled randomness. It will be zeroed until the randomness request is fulfilled.")]),n("li",null,[n("code",null,"responses"),s(" field \u2013 you may look at this field in case you are willing to perform off-chain verification (there are helpers for this in both SDKs)")])],-1),O=n("h2",{id:"anatomy-of-a-vrf-configuration",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#anatomy-of-a-vrf-configuration","aria-hidden":"true"},"#"),s(" Anatomy of a VRF configuration")],-1),K=s("The "),B={href:"https://docs.rs/orao-solana-vrf/latest/orao_solana_vrf/state/struct.NetworkState.html",target:"_blank",rel:"noopener noreferrer"},H=n("code",null,"NetworkState",-1),L=s(" structure holds the on-chain VRF data. Here we'll talk about its "),U=n("code",null,"config",-1),z=s(", field, that stores the "),G={href:"https://docs.rs/orao-solana-vrf/latest/orao_solana_vrf/state/struct.NetworkConfiguration.html",target:"_blank",rel:"noopener noreferrer"},J=n("code",null,"NetworkConfiguration",-1),M=s(". The field that may be interesting to you are:"),W=n("ul",null,[n("li",null,[n("code",null,"request_fee"),s(" \u2013 randomness request will cost this many lamports")]),n("li",null,[n("code",null,"fulfillment_authorities"),s(" \u2013 public keys of fulfillment authorities")]),n("li",null,[n("code",null,"token_fee_cofig"),s(" - if defined, then it's possible to pay fees in SPL instead of SOL")])],-1),Y=n("h2",{id:"rust-native-example",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#rust-native-example","aria-hidden":"true"},"#"),s(" Rust-native example")],-1),Z=s("This section will illustrate the off-chain usage ("),j={href:"https://github.com/orao-network/solana-vrf/tree/master/rust/examples/off-chain",target:"_blank",rel:"noopener noreferrer"},Q=s("full code is available on GitHub"),X=s(")"),$=n("h3",{id:"_1-setup-the-connection",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#_1-setup-the-connection","aria-hidden":"true"},"#"),s(" 1. Setup the connection")],-1),nn=s("Rust SDK is based on the "),sn={href:"https://docs.rs/anchor-client",target:"_blank",rel:"noopener noreferrer"},an=n("code",null,"anchor-client",-1),tn=s(" library, so you'll need to acquire the "),en=n("code",null,"Program",-1),on=s(" instance to use it:"),pn=e(`
    let payer: Keypair = ..; // get this from the solana configuration
    +import{_ as o,r as p,o as c,c as l,a as n,b as t,F as u,d as s,e}from"./app.2fbb9e96.js";const r={},i=n("h1",{id:"orao-vrf",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#orao-vrf","aria-hidden":"true"},"#"),s(" ORAO VRF")],-1),k=n("p",null,"ORAO VRF is a multi-party verifiable random function oracle based on EDDSA. It is able to provide 64 bytes of verifiable randomness in response to a randomness request.",-1),d=n("h2",{id:"basic-usage-scenario",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#basic-usage-scenario","aria-hidden":"true"},"#"),s(" Basic usage scenario")],-1),m=n("li",null,[s("Create a new randomness request. "),n("ul",null,[n("li",null,[s("This operation requires a unique "),n("em",null,"seed"),s(" to be given by the client. This seed is used for randomness verification.")])])],-1),b=n("li",null,[s("Use generated randomness as soon as request is fulfilled. "),n("ul",null,[n("li",null,"Oracle will fulfill new requests as soon as possible, this procedure includes the verification step, so no unverified randomness should appear on-chain.")])],-1),h=s("(Optional) Verify generated randomness off-chain. "),f=s("You are able to "),_={href:"https://github.com/orao-network/solana-vrf/blob/6cc9a80ec280b96a97321b8bfe2904a6e432c38e/rust/examples/off-chain/src/main.rs#L48",target:"_blank",rel:"noopener noreferrer"},y=n("code",null,"verify generated randomness",-1),g=s(" against the effective list of fulfillment authorities (it's a part of publicly available VRF configuration). There are helpers for this in SDKs."),v=n("h2",{id:"sdks",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#sdks","aria-hidden":"true"},"#"),s(" SDKs")],-1),w=n("p",null,"There are two SDKs available:",-1),x=s("The "),C={href:"https://docs.rs/orao-solana-vrf",target:"_blank",rel:"noopener noreferrer"},q=n("code",null,"orao-solana-vrf",-1),S=s(" crate \u2013 the code bellow is based on this Rust SDK."),R=s("The JS SDK \u2013 JavaScript SDK, as well as the source code of the Rust SDK, is available in the public repository on GitHub "),P={href:"https://github.com/orao-network/solana-vrf",target:"_blank",rel:"noopener noreferrer"},D=n("code",null,"solana-vrf",-1),T=s(". All tests within this repo are based on the JavaScript SDK."),A=n("h2",{id:"anatomy-of-a-randomness-request",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#anatomy-of-a-randomness-request","aria-hidden":"true"},"#"),s(" Anatomy of a randomness request")],-1),I=s("The "),E={href:"https://docs.rs/orao-solana-vrf/latest/orao_solana_vrf/state/struct.Randomness.html",target:"_blank",rel:"noopener noreferrer"},V=n("code",null,"RandomnessRequest",-1),F=s(" structure is used to store the requested randomness:"),N=n("ul",null,[n("li",null,[n("code",null,"seed"),s(" field \u2013 stores the request seed")]),n("li",null,[n("code",null,"randomness"),s(" field \u2013 this is the field of interest, that stores the fulfilled randomness. It will be zeroed until the randomness request is fulfilled.")]),n("li",null,[n("code",null,"responses"),s(" field \u2013 you may look at this field in case you are willing to perform off-chain verification (there are helpers for this in both SDKs)")])],-1),O=n("h2",{id:"anatomy-of-a-vrf-configuration",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#anatomy-of-a-vrf-configuration","aria-hidden":"true"},"#"),s(" Anatomy of a VRF configuration")],-1),K=s("The "),B={href:"https://docs.rs/orao-solana-vrf/latest/orao_solana_vrf/state/struct.NetworkState.html",target:"_blank",rel:"noopener noreferrer"},H=n("code",null,"NetworkState",-1),L=s(" structure holds the on-chain VRF data. Here we'll talk about its "),U=n("code",null,"config",-1),z=s(", field, that stores the "),G={href:"https://docs.rs/orao-solana-vrf/latest/orao_solana_vrf/state/struct.NetworkConfiguration.html",target:"_blank",rel:"noopener noreferrer"},J=n("code",null,"NetworkConfiguration",-1),M=s(". The field that may be interesting to you are:"),W=n("ul",null,[n("li",null,[n("code",null,"request_fee"),s(" \u2013 randomness request will cost this many lamports")]),n("li",null,[n("code",null,"fulfillment_authorities"),s(" \u2013 public keys of fulfillment authorities")]),n("li",null,[n("code",null,"token_fee_cofig"),s(" - if defined, then it's possible to pay fees in SPL instead of SOL")])],-1),Y=n("h2",{id:"rust-native-example",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#rust-native-example","aria-hidden":"true"},"#"),s(" Rust-native example")],-1),Z=s("This section will illustrate the off-chain usage ("),j={href:"https://github.com/orao-network/solana-vrf/tree/master/rust/examples/off-chain",target:"_blank",rel:"noopener noreferrer"},Q=s("full code is available on GitHub"),X=s(")"),$=n("h3",{id:"_1-setup-the-connection",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#_1-setup-the-connection","aria-hidden":"true"},"#"),s(" 1. Setup the connection")],-1),nn=s("Rust SDK is based on the "),sn={href:"https://docs.rs/anchor-client",target:"_blank",rel:"noopener noreferrer"},an=n("code",null,"anchor-client",-1),tn=s(" library, so you'll need to acquire the "),en=n("code",null,"Program",-1),on=s(" instance to use it:"),pn=e(`
    let payer: Keypair = ..; // get this from the solana configuration
     let client = Client::new_with_options(Cluster::Devnet, Rc::new(payer), CommitmentConfig::finalized());
     let program = client.program(orao_solana_vrf::id());
     

    2. Create a request

    `,2),cn=s("There is a convenient "),ln={href:"https://docs.rs/orao-solana-vrf/latest/orao_solana_vrf/struct.RequestBuilder.html",target:"_blank",rel:"noopener noreferrer"},un=n("code",null,"RequestBuilder",-1),rn=s(" for this purpose:"),kn=e(`
    let seed = rand::random();
    diff --git a/docs/.vuepress/dist/assets/orao-vrf.html.8b763313.js b/docs/.vuepress/dist/assets/orao-vrf.html.b537debf.js
    similarity index 99%
    rename from docs/.vuepress/dist/assets/orao-vrf.html.8b763313.js
    rename to docs/.vuepress/dist/assets/orao-vrf.html.b537debf.js
    index da4acccfd..f135a8916 100644
    --- a/docs/.vuepress/dist/assets/orao-vrf.html.8b763313.js
    +++ b/docs/.vuepress/dist/assets/orao-vrf.html.b537debf.js
    @@ -1,4 +1,4 @@
    -import{_ as p,r as o,o as c,c as l,a as n,b as e,F as i,d as s,e as t}from"./app.cfdf84e7.js";const r={},u=n("h1",{id:"orao-vrf",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#orao-vrf","aria-hidden":"true"},"#"),s(" ORAO VRF")],-1),k=n("p",null,"ORAO VRF ist ein von mehreren Parteien verifizierbares Zufallsfunktionsorakel, das auf EDDSA basiert. Es ist in der Lage, bereitzustellen 64 Bytes \xFCberpr\xFCfbare Zuf\xE4lligkeit als Antwort auf eine Zuf\xE4lligkeitsanforderung.",-1),d=n("h2",{id:"grundlegendes-nutzungsszenario",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#grundlegendes-nutzungsszenario","aria-hidden":"true"},"#"),s(" Grundlegendes Nutzungsszenario")],-1),m=n("li",null,[s("Erstellen Sie eine neue Zuf\xE4lligkeitsanforderung. "),n("ul",null,[n("li",null,[s("F\xFCr diese Operation muss ein eindeutiger "),n("em",null,"Seed"),s(" vom Client angegeben werden. Dieser Startwert wird f\xFCr die Zuf\xE4lligkeitspr\xFCfung verwendet.")])])],-1),b=n("li",null,[s("Verwenden Sie die generierte Zuf\xE4lligkeit, sobald die Anfrage erf\xFCllt ist. "),n("ul",null,[n("li",null,"Oracle wird neuen Anfragen so schnell wie m\xF6glich nachkommen, dieses Verfahren enth\xE4lt den \xDCberpr\xFCfungsschritt, sollte also keine unbest\xE4tigte Zuf\xE4lligkeit aufweisen erscheinen in der Kette.")])],-1),f=s("(Optional) \xDCberpr\xFCfen Sie die generierte Zuf\xE4lligkeit au\xDFerhalb der Kette. "),h=s("Sie k\xF6nnen "),_={href:"https://github.com/orao-network/solana-vrf/blob/6cc9a80ec280b96a97321b8bfe2904a6e432c38e/rust/examples/off-chain/src/main.rs#L48",target:"_blank",rel:"noopener noreferrer"},g=n("code",null,"erzeugte Zuf\xE4lligkeit verifizieren",-1),v=s(" gegen die wirksame Liste von Erf\xFCllungsbeh\xF6rden (es ist ein Teil des \xF6ffentlich zug\xE4nglichen VRF Aufbau). In SDKs gibt es daf\xFCr Helfer."),y=n("h2",{id:"sdks-software-developer-kits-software-entwicklungs-packet",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#sdks-software-developer-kits-software-entwicklungs-packet","aria-hidden":"true"},"#"),s(" SDKs (Software Developer Kits - Software-entwicklungs-packet)")],-1),w=n("p",null,"Es sind zwei SDKs verf\xFCgbar:",-1),S=s("Die Kiste "),C={href:"https://docs.rs/orao-solana-vrf",target:"_blank",rel:"noopener noreferrer"},A=n("code",null,"orao-solana-vrf",-1),R=s(" \u2013 der folgende Code basiert auf diesem Rust SDK."),z=s("Das JS SDK \u2013 JavaScript SDK sowie der Quellcode des Rust SDK sind \xF6ffentlich verf\xFCgbar Repository auf GitHub "),x={href:"https://github.com/orao-network/solana-vrf",target:"_blank",rel:"noopener noreferrer"},D=n("code",null,"solana-vrf",-1),E=s(". Alle Tests innerhalb Dieses Repo basiert auf dem JavaScript SDK."),V=n("h2",{id:"anatomie-einer-zufalligkeitsanforderung",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#anatomie-einer-zufalligkeitsanforderung","aria-hidden":"true"},"#"),s(" Anatomie einer Zuf\xE4lligkeitsanforderung")],-1),I=s("Die Struktur "),P={href:"https://docs.rs/orao-solana-vrf/latest/orao_solana_vrf/state/struct.Randomness.html",target:"_blank",rel:"noopener noreferrer"},F=n("code",null,"RandomnessRequest",-1),K=s(" wird verwendet, um die angeforderte Zuf\xE4lligkeit zu speichern:"),q=n("ul",null,[n("li",null,"\u201ESeed\u201C-Feld \u2013 speichert den Anforderungs-Seed"),n("li",null,"\u201ERandomness\u201C-Feld \u2013 das ist das Interessenfeld, das die erf\xFCllte Zuf\xE4lligkeit speichert. Es wird auf Null gesetzt, bis die Zuf\xE4lligkeitsanforderung erf\xFCllt ist."),n("li",null,"Feld \u201EAntworten\u201C \u2013 Sie k\xF6nnen sich dieses Feld ansehen, falls Sie bereit sind, au\xDFerhalb der Kette aufzutreten Verifizierung (hierf\xFCr gibt es Helfer in beiden SDKs)")],-1),Z=n("h2",{id:"anatomie-einer-vrf-konfiguration",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#anatomie-einer-vrf-konfiguration","aria-hidden":"true"},"#"),s(" Anatomie einer VRF-Konfiguration")],-1),N=s("Die Struktur "),O={href:"https://docs.rs/orao-solana-vrf/latest/orao_solana_vrf/state/struct.NetworkState.html",target:"_blank",rel:"noopener noreferrer"},B=n("code",null,"NetworkState",-1),T=s(" enth\xE4lt die On-Chain-VRF-Daten. Hier sprechen wir \xFCber seine "),L=n("code",null,"config",-1),H=s(", Feld, das die "),G={href:"https://docs.rs/orao-solana-vrf/latest/orao_solana_vrf/state/struct.NetworkConfiguration.html",target:"_blank",rel:"noopener noreferrer"},U=n("code",null,"NetworkConfiguration",-1),J=s(" speichert. Folgende Bereiche k\xF6nnten f\xFCr Sie interessant sein:"),M=n("ul",null,[n("li",null,[n("code",null,"request_fee"),s(" \u2013 Zuf\xE4lligkeitsanfrage kostet so viele Lamports")]),n("li",null,[n("code",null,"fulfillment_authorities"),s(" \u2013 \xF6ffentliche Schl\xFCssel der Erf\xFCllungsbeh\xF6rden")]),n("li",null,[n("code",null,"token_fee_cofig"),s(" - wenn definiert, dann ist es m\xF6glich, Geb\xFChren in SPL statt in SOL zu zahlen")])],-1),W=n("h2",{id:"rust-natives-beispiel",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#rust-natives-beispiel","aria-hidden":"true"},"#"),s(" Rust-natives Beispiel")],-1),Q=s("Dieser Abschnitt veranschaulicht die Off-Chain-Nutzung ("),Y={href:"https://github.com/orao-network/solana-vrf/tree/master/rust/examples/off-chain",target:"_blank",rel:"noopener noreferrer"},j=s("vollst\xE4ndiger Code ist auf GitHub verf\xFCgbar"),X=s(")"),$=n("h3",{id:"_1-stellen-sie-die-verbindung-her",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#_1-stellen-sie-die-verbindung-her","aria-hidden":"true"},"#"),s(" 1. Stellen Sie die Verbindung her")],-1),nn=s("Rust SDK basiert auf der "),sn={href:"https://docs.rs/anchor-client",target:"_blank",rel:"noopener noreferrer"},an=n("code",null,"anchor-client",-1),en=s("-Bibliothek, daher ben\xF6tigen Sie sie, um die "),tn=n("code",null,"Program",-1),pn=s("-Instanz zu erwerben, um sie zu verwenden:"),on=t(`
    let payer: Keypair = ..; // get this from the solana configuration
    +import{_ as p,r as o,o as c,c as l,a as n,b as e,F as i,d as s,e as t}from"./app.2fbb9e96.js";const r={},u=n("h1",{id:"orao-vrf",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#orao-vrf","aria-hidden":"true"},"#"),s(" ORAO VRF")],-1),k=n("p",null,"ORAO VRF ist ein von mehreren Parteien verifizierbares Zufallsfunktionsorakel, das auf EDDSA basiert. Es ist in der Lage, bereitzustellen 64 Bytes \xFCberpr\xFCfbare Zuf\xE4lligkeit als Antwort auf eine Zuf\xE4lligkeitsanforderung.",-1),d=n("h2",{id:"grundlegendes-nutzungsszenario",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#grundlegendes-nutzungsszenario","aria-hidden":"true"},"#"),s(" Grundlegendes Nutzungsszenario")],-1),m=n("li",null,[s("Erstellen Sie eine neue Zuf\xE4lligkeitsanforderung. "),n("ul",null,[n("li",null,[s("F\xFCr diese Operation muss ein eindeutiger "),n("em",null,"Seed"),s(" vom Client angegeben werden. Dieser Startwert wird f\xFCr die Zuf\xE4lligkeitspr\xFCfung verwendet.")])])],-1),b=n("li",null,[s("Verwenden Sie die generierte Zuf\xE4lligkeit, sobald die Anfrage erf\xFCllt ist. "),n("ul",null,[n("li",null,"Oracle wird neuen Anfragen so schnell wie m\xF6glich nachkommen, dieses Verfahren enth\xE4lt den \xDCberpr\xFCfungsschritt, sollte also keine unbest\xE4tigte Zuf\xE4lligkeit aufweisen erscheinen in der Kette.")])],-1),f=s("(Optional) \xDCberpr\xFCfen Sie die generierte Zuf\xE4lligkeit au\xDFerhalb der Kette. "),h=s("Sie k\xF6nnen "),_={href:"https://github.com/orao-network/solana-vrf/blob/6cc9a80ec280b96a97321b8bfe2904a6e432c38e/rust/examples/off-chain/src/main.rs#L48",target:"_blank",rel:"noopener noreferrer"},g=n("code",null,"erzeugte Zuf\xE4lligkeit verifizieren",-1),v=s(" gegen die wirksame Liste von Erf\xFCllungsbeh\xF6rden (es ist ein Teil des \xF6ffentlich zug\xE4nglichen VRF Aufbau). In SDKs gibt es daf\xFCr Helfer."),y=n("h2",{id:"sdks-software-developer-kits-software-entwicklungs-packet",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#sdks-software-developer-kits-software-entwicklungs-packet","aria-hidden":"true"},"#"),s(" SDKs (Software Developer Kits - Software-entwicklungs-packet)")],-1),w=n("p",null,"Es sind zwei SDKs verf\xFCgbar:",-1),S=s("Die Kiste "),C={href:"https://docs.rs/orao-solana-vrf",target:"_blank",rel:"noopener noreferrer"},A=n("code",null,"orao-solana-vrf",-1),R=s(" \u2013 der folgende Code basiert auf diesem Rust SDK."),z=s("Das JS SDK \u2013 JavaScript SDK sowie der Quellcode des Rust SDK sind \xF6ffentlich verf\xFCgbar Repository auf GitHub "),x={href:"https://github.com/orao-network/solana-vrf",target:"_blank",rel:"noopener noreferrer"},D=n("code",null,"solana-vrf",-1),E=s(". Alle Tests innerhalb Dieses Repo basiert auf dem JavaScript SDK."),V=n("h2",{id:"anatomie-einer-zufalligkeitsanforderung",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#anatomie-einer-zufalligkeitsanforderung","aria-hidden":"true"},"#"),s(" Anatomie einer Zuf\xE4lligkeitsanforderung")],-1),I=s("Die Struktur "),P={href:"https://docs.rs/orao-solana-vrf/latest/orao_solana_vrf/state/struct.Randomness.html",target:"_blank",rel:"noopener noreferrer"},F=n("code",null,"RandomnessRequest",-1),K=s(" wird verwendet, um die angeforderte Zuf\xE4lligkeit zu speichern:"),q=n("ul",null,[n("li",null,"\u201ESeed\u201C-Feld \u2013 speichert den Anforderungs-Seed"),n("li",null,"\u201ERandomness\u201C-Feld \u2013 das ist das Interessenfeld, das die erf\xFCllte Zuf\xE4lligkeit speichert. Es wird auf Null gesetzt, bis die Zuf\xE4lligkeitsanforderung erf\xFCllt ist."),n("li",null,"Feld \u201EAntworten\u201C \u2013 Sie k\xF6nnen sich dieses Feld ansehen, falls Sie bereit sind, au\xDFerhalb der Kette aufzutreten Verifizierung (hierf\xFCr gibt es Helfer in beiden SDKs)")],-1),Z=n("h2",{id:"anatomie-einer-vrf-konfiguration",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#anatomie-einer-vrf-konfiguration","aria-hidden":"true"},"#"),s(" Anatomie einer VRF-Konfiguration")],-1),N=s("Die Struktur "),O={href:"https://docs.rs/orao-solana-vrf/latest/orao_solana_vrf/state/struct.NetworkState.html",target:"_blank",rel:"noopener noreferrer"},B=n("code",null,"NetworkState",-1),T=s(" enth\xE4lt die On-Chain-VRF-Daten. Hier sprechen wir \xFCber seine "),L=n("code",null,"config",-1),H=s(", Feld, das die "),G={href:"https://docs.rs/orao-solana-vrf/latest/orao_solana_vrf/state/struct.NetworkConfiguration.html",target:"_blank",rel:"noopener noreferrer"},U=n("code",null,"NetworkConfiguration",-1),J=s(" speichert. Folgende Bereiche k\xF6nnten f\xFCr Sie interessant sein:"),M=n("ul",null,[n("li",null,[n("code",null,"request_fee"),s(" \u2013 Zuf\xE4lligkeitsanfrage kostet so viele Lamports")]),n("li",null,[n("code",null,"fulfillment_authorities"),s(" \u2013 \xF6ffentliche Schl\xFCssel der Erf\xFCllungsbeh\xF6rden")]),n("li",null,[n("code",null,"token_fee_cofig"),s(" - wenn definiert, dann ist es m\xF6glich, Geb\xFChren in SPL statt in SOL zu zahlen")])],-1),W=n("h2",{id:"rust-natives-beispiel",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#rust-natives-beispiel","aria-hidden":"true"},"#"),s(" Rust-natives Beispiel")],-1),Q=s("Dieser Abschnitt veranschaulicht die Off-Chain-Nutzung ("),Y={href:"https://github.com/orao-network/solana-vrf/tree/master/rust/examples/off-chain",target:"_blank",rel:"noopener noreferrer"},j=s("vollst\xE4ndiger Code ist auf GitHub verf\xFCgbar"),X=s(")"),$=n("h3",{id:"_1-stellen-sie-die-verbindung-her",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#_1-stellen-sie-die-verbindung-her","aria-hidden":"true"},"#"),s(" 1. Stellen Sie die Verbindung her")],-1),nn=s("Rust SDK basiert auf der "),sn={href:"https://docs.rs/anchor-client",target:"_blank",rel:"noopener noreferrer"},an=n("code",null,"anchor-client",-1),en=s("-Bibliothek, daher ben\xF6tigen Sie sie, um die "),tn=n("code",null,"Program",-1),pn=s("-Instanz zu erwerben, um sie zu verwenden:"),on=t(`
    let payer: Keypair = ..; // get this from the solana configuration
     let client = Client::new_with_options(Cluster::Devnet, Rc::new(payer), CommitmentConfig::finalized());
     let program = client.program(orao_solana_vrf::id());
     

    2. Erstellen Sie eine Anfrage

    `,2),cn=s("Daf\xFCr gibt es einen praktischen "),ln={href:"https://docs.rs/orao-solana-vrf/latest/orao_solana_vrf/struct.RequestBuilder.html",target:"_blank",rel:"noopener noreferrer"},rn=n("code",null,"RequestBuilder",-1),un=s(":"),kn=t(`
    let seed = rand::random();
    diff --git a/docs/.vuepress/dist/assets/pdas.html.8c232bd3.js b/docs/.vuepress/dist/assets/pdas.html.0a69b530.js
    similarity index 99%
    rename from docs/.vuepress/dist/assets/pdas.html.8c232bd3.js
    rename to docs/.vuepress/dist/assets/pdas.html.0a69b530.js
    index b147eeb3d..6500db4ba 100644
    --- a/docs/.vuepress/dist/assets/pdas.html.8c232bd3.js
    +++ b/docs/.vuepress/dist/assets/pdas.html.0a69b530.js
    @@ -1 +1 @@
    -import{_ as i,r as o,o as l,c as d,a as e,b as n,w as a,F as u,d as s,e as c}from"./app.cfdf84e7.js";var p="/assets/account-matrix.c3a79f80.png",m="/assets/pda-curve.7c0b9307.png";const h={},_=e("h1",{id:"adresses-derivees-de-programmes-pdas",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#adresses-derivees-de-programmes-pdas","aria-hidden":"true"},"#"),s(" Adresses d\xE9riv\xE9es de programmes (PDAs)")],-1),g=s("Les adresses d\xE9riv\xE9es de programmes (PDA) sont des comptes qui sont con\xE7us pour \xEAtre contr\xF4l\xE9s par un programme sp\xE9cifique. Avec les PDAs, les programmes peuvent signer, de mani\xE8re programm\xE9e, pour certaines adresses sans avoir besoin d'une cl\xE9 priv\xE9e. Les PDAs servent de base \xE0 "),f={href:"https://docs.solana.com/developing/programming-model/calling-between-programs#cross-program-invocations",target:"_blank",rel:"noopener noreferrer"},b=s("l'invocation inter-programmes"),v=s(", qui permet aux applications de Solana d'\xEAtre composables les unes avec les autres."),q=e("h2",{id:"faits",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#faits","aria-hidden":"true"},"#"),s(" Faits")],-1),A={class:"custom-container tip"},P=e("p",{class:"custom-container-title"},"Fiche d'Information",-1),D=e("li",null,"Les PDAs sont des cha\xEEnes de caract\xE8res de 32 bytes qui ressemblent \xE0 des cl\xE9s publiques, mais qui n'ont pas de cl\xE9s priv\xE9es correspondantes",-1),x=e("li",null,[e("code",null,"findProgramAddress"),s(" d\xE9rivera de mani\xE8re d\xE9terministe un PDA \xE0 partir d'un programId et de seeds (collection de bytes)")],-1),k=e("li",null,"Un bump (un byte) est utilis\xE9 pour d\xE9placer un PDA potentiel hors de la courbe elliptique ed25519",-1),L=s("Les programmes peuvent signer pour leurs PDAs en fournissant les seeds et le bump \xE0 l'"),y={href:"https://docs.solana.com/developing/programming-model/calling-between-programs#program-signed-accounts",target:"_blank",rel:"noopener noreferrer"},w=s("invoke_signed"),E=e("li",null,"Un PDA ne peut \xEAtre sign\xE9 que par le programme dont il est d\xE9riv\xE9",-1),C=s("En plus de permettre aux programmes de signer pour diff\xE9rentes instructions, les PDAs fournissent aussi une interface de type hashmap pour les "),I=s("indexing accounts"),F=c('

    Examen plus approfondi

    Les PDAs sont un \xE9l\xE9ment essentiel pour le d\xE9veloppement de programmes sur Solana. Avec les PDAs, les programmes peuvent signer pour des comptes tout en garantissant qu'aucun utilisateur externe ne pourrait \xE9galement g\xE9n\xE9rer une signature valide pour le m\xEAme compte. En plus de la signature des comptes, certains programmes peuvent \xE9galement modifier les comptes d\xE9tenus par leurs PDAs.

    Accounts matrix

    Image courtesy of Pencilflip

    G\xE9n\xE9ration des PDAs

    Pour comprendre le concept des PDAs, il peut \xEAtre utile de consid\xE9rer que les PDAs ne sont pas techniquement cr\xE9\xE9s, mais plut\xF4t trouv\xE9s. Les PDAs sont g\xE9n\xE9r\xE9s \xE0 partir d'une combinaison de seeds (telles que la cha\xEEne \u201Cvote_account\u201D) et d'un identifiant de programme. Cette combinaison de seeds et d'identifiant de programme est ensuite ex\xE9cut\xE9e par une fonction de hachage sha256 pour voir si elle g\xE9n\xE8re ou non une cl\xE9 publique qui se trouve sur la courbe elliptique ed25519.

    En faisant passer notre identifiant de programme et nos seeds \xE0 travers une fonction de hachage, il y a environ 50 % de chances que nous obtenions une cl\xE9 publique valide qui se trouve sur la courbe elliptique. Dans ce cas, nous ajoutons simplement quelque chose pour modifier un peu notre entr\xE9e et nous r\xE9essayons. Le terme technique pour le quelque chose que nous rajoutons est un "bump". Dans Solana, nous commen\xE7ons par bump = 255 et it\xE9rons simplement en soustrayant 1 \xE0 chaque fois, nous utilisons ainsi bump = 254, bump = 253, etc. jusqu'\xE0 ce que nous obtenions une adresse qui n'est pas sur la courbe elliptique. Cela peut sembler rudimentaire, mais une fois trouv\xE9, cela nous donne un moyen d\xE9terministe de d\xE9river le m\xEAme PDA encore et encore.

    Le PDA sur la courbe elliptique

    Interaction avec les PDAs

    ',9),N=s("Quand un PDA est g\xE9n\xE9r\xE9, "),S=e("code",null,"findProgramAddress",-1),V=s(" retournera \xE0 la fois l'adresse et le bump utilis\xE9 pour d\xE9placer celle-ci hors de la courbe elliptique. Avec ce bump, un programme peut alors "),j=s("signer"),B=s(" pour toute instruction qui requiert son PDA. Afin de signer, les programmes doivent passer l'instruction, la liste des comptes, ainsi que les seeds et le bump utilis\xE9s pour d\xE9river le PDA \xE0 "),R=e("code",null,"invoke_signed",-1),U=s(". En plus de signer pour les instructions, les PDAs doivent \xE9galement signer leur propre cr\xE9ation avec "),z=e("code",null,"invoke_signed",-1),G=s("."),Q=s("Lors de la cr\xE9ation de PDAs, il est courant de "),T={href:"https://github.com/solana-labs/solana-program-library/blob/78e29e9238e555967b9125799d7d420d7d12b959/token-swap/program/src/state.rs#L100",target:"_blank",rel:"noopener noreferrer"},H=s("stocker le bump et les seeds"),J=s(" dans les donn\xE9es du compte lui-m\xEAme. Cela permet ainsi aux d\xE9veloppeurs de valider facilement un PDA sans avoir \xE0 transmettre en argument de l'instruction le bump."),K=e("h2",{id:"autres-ressources",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#autres-ressources","aria-hidden":"true"},"#"),s(" Autres Ressources")],-1),M={href:"https://docs.solana.com/developing/programming-model/calling-between-programs#program-derived-addresses",target:"_blank",rel:"noopener noreferrer"},O=s("Documentation officielle"),W={href:"https://www.brianfriel.xyz/understanding-program-derived-addresses/",target:"_blank",rel:"noopener noreferrer"},X=s("Comprendre les Adresses D\xE9riv\xE9es de Programmes");function Y(Z,$){const r=o("ExternalLinkIcon"),t=o("RouterLink");return l(),d(u,null,[_,e("p",null,[g,e("a",f,[b,n(r)]),v]),q,e("div",A,[P,e("ul",null,[D,x,k,e("li",null,[L,e("a",y,[w,n(r)])]),E,e("li",null,[C,n(t,{to:"/fr/guides/account-maps.html"},{default:a(()=>[I]),_:1})])])]),F,e("p",null,[N,S,V,n(t,{to:"/fr/references/accounts.html#sign-with-a-pda"},{default:a(()=>[j]),_:1}),B,R,U,z,G]),e("p",null,[Q,e("a",T,[H,n(r)]),J]),K,e("ul",null,[e("li",null,[e("a",M,[O,n(r)])]),e("li",null,[e("a",W,[X,n(r)])])])],64)}var se=i(h,[["render",Y]]);export{se as default}; +import{_ as i,r as o,o as l,c as d,a as e,b as n,w as a,F as u,d as s,e as c}from"./app.2fbb9e96.js";var p="/assets/account-matrix.c3a79f80.png",m="/assets/pda-curve.7c0b9307.png";const h={},_=e("h1",{id:"adresses-derivees-de-programmes-pdas",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#adresses-derivees-de-programmes-pdas","aria-hidden":"true"},"#"),s(" Adresses d\xE9riv\xE9es de programmes (PDAs)")],-1),g=s("Les adresses d\xE9riv\xE9es de programmes (PDA) sont des comptes qui sont con\xE7us pour \xEAtre contr\xF4l\xE9s par un programme sp\xE9cifique. Avec les PDAs, les programmes peuvent signer, de mani\xE8re programm\xE9e, pour certaines adresses sans avoir besoin d'une cl\xE9 priv\xE9e. Les PDAs servent de base \xE0 "),f={href:"https://docs.solana.com/developing/programming-model/calling-between-programs#cross-program-invocations",target:"_blank",rel:"noopener noreferrer"},b=s("l'invocation inter-programmes"),v=s(", qui permet aux applications de Solana d'\xEAtre composables les unes avec les autres."),q=e("h2",{id:"faits",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#faits","aria-hidden":"true"},"#"),s(" Faits")],-1),A={class:"custom-container tip"},P=e("p",{class:"custom-container-title"},"Fiche d'Information",-1),D=e("li",null,"Les PDAs sont des cha\xEEnes de caract\xE8res de 32 bytes qui ressemblent \xE0 des cl\xE9s publiques, mais qui n'ont pas de cl\xE9s priv\xE9es correspondantes",-1),x=e("li",null,[e("code",null,"findProgramAddress"),s(" d\xE9rivera de mani\xE8re d\xE9terministe un PDA \xE0 partir d'un programId et de seeds (collection de bytes)")],-1),k=e("li",null,"Un bump (un byte) est utilis\xE9 pour d\xE9placer un PDA potentiel hors de la courbe elliptique ed25519",-1),L=s("Les programmes peuvent signer pour leurs PDAs en fournissant les seeds et le bump \xE0 l'"),y={href:"https://docs.solana.com/developing/programming-model/calling-between-programs#program-signed-accounts",target:"_blank",rel:"noopener noreferrer"},w=s("invoke_signed"),E=e("li",null,"Un PDA ne peut \xEAtre sign\xE9 que par le programme dont il est d\xE9riv\xE9",-1),C=s("En plus de permettre aux programmes de signer pour diff\xE9rentes instructions, les PDAs fournissent aussi une interface de type hashmap pour les "),I=s("indexing accounts"),F=c('

    Examen plus approfondi

    Les PDAs sont un \xE9l\xE9ment essentiel pour le d\xE9veloppement de programmes sur Solana. Avec les PDAs, les programmes peuvent signer pour des comptes tout en garantissant qu'aucun utilisateur externe ne pourrait \xE9galement g\xE9n\xE9rer une signature valide pour le m\xEAme compte. En plus de la signature des comptes, certains programmes peuvent \xE9galement modifier les comptes d\xE9tenus par leurs PDAs.

    Accounts matrix

    Image courtesy of Pencilflip

    G\xE9n\xE9ration des PDAs

    Pour comprendre le concept des PDAs, il peut \xEAtre utile de consid\xE9rer que les PDAs ne sont pas techniquement cr\xE9\xE9s, mais plut\xF4t trouv\xE9s. Les PDAs sont g\xE9n\xE9r\xE9s \xE0 partir d'une combinaison de seeds (telles que la cha\xEEne \u201Cvote_account\u201D) et d'un identifiant de programme. Cette combinaison de seeds et d'identifiant de programme est ensuite ex\xE9cut\xE9e par une fonction de hachage sha256 pour voir si elle g\xE9n\xE8re ou non une cl\xE9 publique qui se trouve sur la courbe elliptique ed25519.

    En faisant passer notre identifiant de programme et nos seeds \xE0 travers une fonction de hachage, il y a environ 50 % de chances que nous obtenions une cl\xE9 publique valide qui se trouve sur la courbe elliptique. Dans ce cas, nous ajoutons simplement quelque chose pour modifier un peu notre entr\xE9e et nous r\xE9essayons. Le terme technique pour le quelque chose que nous rajoutons est un "bump". Dans Solana, nous commen\xE7ons par bump = 255 et it\xE9rons simplement en soustrayant 1 \xE0 chaque fois, nous utilisons ainsi bump = 254, bump = 253, etc. jusqu'\xE0 ce que nous obtenions une adresse qui n'est pas sur la courbe elliptique. Cela peut sembler rudimentaire, mais une fois trouv\xE9, cela nous donne un moyen d\xE9terministe de d\xE9river le m\xEAme PDA encore et encore.

    Le PDA sur la courbe elliptique

    Interaction avec les PDAs

    ',9),N=s("Quand un PDA est g\xE9n\xE9r\xE9, "),S=e("code",null,"findProgramAddress",-1),V=s(" retournera \xE0 la fois l'adresse et le bump utilis\xE9 pour d\xE9placer celle-ci hors de la courbe elliptique. Avec ce bump, un programme peut alors "),j=s("signer"),B=s(" pour toute instruction qui requiert son PDA. Afin de signer, les programmes doivent passer l'instruction, la liste des comptes, ainsi que les seeds et le bump utilis\xE9s pour d\xE9river le PDA \xE0 "),R=e("code",null,"invoke_signed",-1),U=s(". En plus de signer pour les instructions, les PDAs doivent \xE9galement signer leur propre cr\xE9ation avec "),z=e("code",null,"invoke_signed",-1),G=s("."),Q=s("Lors de la cr\xE9ation de PDAs, il est courant de "),T={href:"https://github.com/solana-labs/solana-program-library/blob/78e29e9238e555967b9125799d7d420d7d12b959/token-swap/program/src/state.rs#L100",target:"_blank",rel:"noopener noreferrer"},H=s("stocker le bump et les seeds"),J=s(" dans les donn\xE9es du compte lui-m\xEAme. Cela permet ainsi aux d\xE9veloppeurs de valider facilement un PDA sans avoir \xE0 transmettre en argument de l'instruction le bump."),K=e("h2",{id:"autres-ressources",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#autres-ressources","aria-hidden":"true"},"#"),s(" Autres Ressources")],-1),M={href:"https://docs.solana.com/developing/programming-model/calling-between-programs#program-derived-addresses",target:"_blank",rel:"noopener noreferrer"},O=s("Documentation officielle"),W={href:"https://www.brianfriel.xyz/understanding-program-derived-addresses/",target:"_blank",rel:"noopener noreferrer"},X=s("Comprendre les Adresses D\xE9riv\xE9es de Programmes");function Y(Z,$){const r=o("ExternalLinkIcon"),t=o("RouterLink");return l(),d(u,null,[_,e("p",null,[g,e("a",f,[b,n(r)]),v]),q,e("div",A,[P,e("ul",null,[D,x,k,e("li",null,[L,e("a",y,[w,n(r)])]),E,e("li",null,[C,n(t,{to:"/fr/guides/account-maps.html"},{default:a(()=>[I]),_:1})])])]),F,e("p",null,[N,S,V,n(t,{to:"/fr/references/accounts.html#sign-with-a-pda"},{default:a(()=>[j]),_:1}),B,R,U,z,G]),e("p",null,[Q,e("a",T,[H,n(r)]),J]),K,e("ul",null,[e("li",null,[e("a",M,[O,n(r)])]),e("li",null,[e("a",W,[X,n(r)])])])],64)}var se=i(h,[["render",Y]]);export{se as default}; diff --git a/docs/.vuepress/dist/assets/pdas.html.219650a1.js b/docs/.vuepress/dist/assets/pdas.html.254305c4.js similarity index 99% rename from docs/.vuepress/dist/assets/pdas.html.219650a1.js rename to docs/.vuepress/dist/assets/pdas.html.254305c4.js index e984bde62..d1209c2a6 100644 --- a/docs/.vuepress/dist/assets/pdas.html.219650a1.js +++ b/docs/.vuepress/dist/assets/pdas.html.254305c4.js @@ -1 +1 @@ -import{_ as i,r as n,o as d,c,a as e,b as s,w as a,F as l,d as t,e as _}from"./app.cfdf84e7.js";var h="/assets/account-matrix.c3a79f80.png",p="/assets/pda-curve.7c0b9307.png";const u={},m=e("h1",{id:"program-derived-addresses-pdas",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#program-derived-addresses-pdas","aria-hidden":"true"},"#"),t(" Program Derived Addresses (PDAs)")],-1),g=t("Program Derived Addresses (PDAs)\uB294 \uD2B9\uC815 Program\uC5D0 \uC758\uD574 \uC791\uB3D9\uB418\uB3C4\uB85D \uC124\uACC4\uB41C Account\uB4E4\uC785\uB2C8\uB2E4. Program\uB4E4\uC740 PDA\uB4E4\uC744 \uD1B5\uD574 Private Key \uC5C6\uC774 \uD2B9\uC815 Addresse\uC5D0 \uB300\uD574 \uC11C\uBA85\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4. PDA\uB294 Solana App\uC774 \uB2E4\uB978 App\uB4E4\uACFC \uD568\uAED8 \uAD6C\uC131\uB420 \uC218 \uC788\uB3C4\uB85D \uD558\uB294 "),P={href:"https://docs.solana.com/developing/programming-model/calling-between-programs#cross-program-invocations",target:"_blank",rel:"noopener noreferrer"},A=t("Cross-Program Invocation"),b=t("\uB97C \uC704\uD55C \uAE30\uBC18\uC73C\uB85C\uC368\uC758 \uAE30\uB2A5\uC744 \uD569\uB2C8\uB2E4."),f=e("h2",{id:"facts",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#facts","aria-hidden":"true"},"#"),t(" Facts")],-1),D={class:"custom-container tip"},v=e("p",{class:"custom-container-title"},"Fact Sheet",-1),k=e("li",null,"PDAs are 32 byte strings that look like public keys, but don\u2019t have corresponding private keys",-1),x=e("li",null,"PDA\uB294 Public Key \uCC98\uB7FC \uBCF4\uC774\uB294 32 byte\uC758 String \uC774\uC9C0\uB9CC, \uB300\uC751\uB418\uB294 Private Key\uB294 \uC5C6\uC2B5\uB2C8\uB2E4.",-1),y=e("li",null,[e("code",null,"findProgramAddress"),t("\uB294 programId\uC640 seeds(collection of bytes) \uAC12\uC73C\uB85C\uBD80\uD130 \uC815\uD655\uD55C PDA\uB97C \uC870\uD68C\uD560 \uAC83\uC785\uB2C8\uB2E4.")],-1),w=e("li",null,"bump (one byte) \uB294 ed25519 \uD0C0\uC6D0 \uACE1\uC120\uC5D0\uC11C \uC7A0\uC7AC\uC801\uC778 PDA\uB97C \uBC00\uC5B4\uB0B4\uB294 \uB370 \uC0AC\uC6A9\uB429\uB2C8\uB2E4.",-1),I=t("Program\uC740 seeds\uC640 bump \uAC12\uC744 "),K={href:"https://docs.solana.com/developing/programming-model/calling-between-programs#program-signed-accounts",target:"_blank",rel:"noopener noreferrer"},L=t("invoke_signed"),S=t("\uC5D0 \uC81C\uACF5\uD574\uC11C PDA\uB4E4\uC5D0 \uC11C\uBA85\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4."),F=e("li",null,"PDA\uB294 \uC790\uC2E0\uC744 \uB9CC\uB4E0 Program\uC5D0 \uC758\uD574\uC11C\uB9CC \uC11C\uBA85\uB420 \uC218 \uC788\uC2B5\uB2C8\uB2E4.",-1),N=t("PDA\uB294 Program\uC774 \uB2E4\uB978 Instruction\uB4E4\uC5D0 \uC11C\uBA85\uD558\uB3C4\uB85D \uD558\uB294 \uAC83 \uBFD0\uB9CC \uC544\uB2C8\uB77C, "),V=t("indexing accounts"),B=t("\uB97C \uC704\uD55C hashmap\uACFC \uAC19\uC740 interface \uB610\uD55C \uC81C\uACF5\uD569\uB2C8\uB2E4."),C=_('

    Deep Dive

    PDA\uB294 Solana\uC5D0\uC11C Program\uB4E4\uC744 \uAC1C\uBC1C\uD558\uAE30 \uC704\uD55C \uD544\uC218\uC801\uC778 \uAD6C\uC131 \uC694\uC18C\uC785\uB2C8\uB2E4. Program\uB4E4\uC740 PDA\uB4E4\uC744 \uAC00\uC9C0\uACE0 Account\uB4E4\uC5D0 \uC11C\uBA85\uD560 \uC218 \uC788\uACE0, \uB2E4\uB978 \uC0AC\uC6A9\uC790\uB4E4\uC774 \uAC19\uC740 Account\uC5D0 \uC720\uD6A8\uD55C \uC11C\uBA85\uC744 \uB9CC\uB4E4 \uC218 \uC5C6\uB2E4\uB294 \uAC83\uC744 \uBCF4\uC7A5\uD569\uB2C8\uB2E4. \uC5B4\uB5A4 Program\uB4E4\uC740 Account\uB4E4\uC5D0 \uC11C\uBA85\uD558\uB294 \uAC83\uACFC \uB354\uBD88\uC5B4 \uADF8\uB4E4\uC758 PDA\uB4E4\uC5D0 \uC758\uD574 \uB9CC\uB4E4\uC5B4\uC9C4 Account\uB4E4\uC744 \uC218\uC815\uD560 \uC218\uB3C4 \uC788\uC2B5\uB2C8\uB2E4.

    Accounts matrix

    Image courtesy of Pencilflip

    Generating PDAs

    PDA\uC5D0 \uB300\uD55C \uAC1C\uB150\uC744 \uC774\uD574\uD558\uAE30 \uC704\uD574\uC11C, PDA\uB294 \uAE30\uC220\uC801\uC73C\uB85C \uCC3D\uC870\uB41C \uAC83\uC774 \uC544\uB2C8\uB77C \uBC1C\uACAC\uB41C \uAC83\uC774\uB77C\uACE0 \uC0DD\uAC01\uD558\uB294 \uAC83\uC774 \uC880 \uB354 \uB3C4\uC6C0\uC774 \uB420 \uC218 \uC788\uC2B5\uB2C8\uB2E4. PDA\uB4E4\uC740 seed (\uBB38\uC790\uC5F4 \u201Cvote_account\u201D\uC640 \uAC19\uC740)\uB4E4\uACFC Program ID\uC758 \uC870\uD569\uC73C\uB85C \uB9CC\uB4E4\uC5B4\uC9D1\uB2C8\uB2E4. \uADF8\uB7EC\uACE0 \uB098\uC11C, \uC774 seed\uB4E4\uACFC Program ID\uC758 \uC870\uD569\uC740 ed25519 \uD0C0\uC6D0 \uACE1\uC120 \uC0C1\uC5D0\uC11C Public Key\uB97C \uB9CC\uB4E4\uC5B4\uB0B4\uB294\uC9C0 \uC5EC\uBD80\uB97C \uD655\uC778\uD558\uAE30 \uC704\uD574 sha256 \uD574\uC2DC \uD568\uC218\uB85C \uBCF4\uB0B4\uC9D1\uB2C8\uB2E4.

    Program ID\uC640 seeds\uB97C \uD574\uC2DC \uD568\uC218\uB85C \uB3CC\uB9AC\uB294 \uB3D9\uC548, \uD0C0\uC6D0 \uACE1\uC120\uC0C1\uC5D0 \uC788\uB294 \uC720\uD6A8\uD55C Public Key\uB97C 50% \uD655\uB960\uB85C \uBC1C\uACAC\uD569\uB2C8\uB2E4. \uC774\uB7F0 \uACBD\uC6B0, \uC6B0\uB9AC\uB294 input \uAC12\uB4E4\uC744 \uC870\uAE08 \uB2E4\uB974\uAC8C \uD558\uAE30 \uC704\uD574 \uB2E8\uC21C\uD788 \uC5B4\uB5A4 \uAC12\uC744 \uCD94\uAC00\uD569\uB2C8\uB2E4. \uC774 \uC791\uC5C5\uC744 \uC704\uD574 \uCD94\uAC00\uD558\uB294 \uAC83\uC758 \uAE30\uC220\uC801\uC778 \uC6A9\uC5B4\uB294 bump\uC785\uB2C8\uB2E4. \uC194\uB77C\uB098\uC5D0\uC11C bump \uAC12\uC740 255\uB85C \uC2DC\uC791\uD574\uC11C bum=254, bump=253, etc... \uC640 \uAC19\uC774 \uD0C0\uC6D0 \uACE1\uC120 \uC0C1\uC5D0 \uC874\uC7AC\uD558\uC9C0 \uC54A\uB294 Address\uB97C \uC5BB\uC744 \uB54C\uAE4C\uC9C0 \uB2E8\uC21C\uD558\uAC8C \uAC12\uC744 \uD558\uB098\uC529 \uB0B4\uB9AC\uBA70 \uBC18\uBCF5\uD569\uB2C8\uB2E4. \uC774\uAC83\uC740 \uCD08\uBCF4\uC801\uC73C\uB85C \uBCF4\uC77C\uC9C0 \uBAA8\uB974\uC9C0\uB9CC, \uC77C\uB2E8 \uD55C\uBC88 \uBC1C\uACAC\uB418\uBA74 \uD655\uC2E4\uD788 \uC6B0\uB9AC\uB294 \uAC19\uC740 PDA\uB97C \uACC4\uC18D\uD574\uC11C \uC5BB\uC744 \uC218 \uC788\uC2B5\uB2C8\uB2E4.

    PDA on the ellipitic curve

    Interacting with PDAs

    ',9),E=t("PDA\uAC00 \uC0DD\uC131\uB410\uC744 \uB54C, "),R=e("code",null,"findProgramAddress",-1),O=t("\uB294 Address\uB97C \uD0C0\uC6D0 \uACE1\uC120 \uBC16\uC73C\uB85C \uBCF4\uB0B4\uAE30 \uC704\uD574 \uC0AC\uC6A9\uB418\uB3C4\uB85D Address\uC640 bump \uAC12\uC744 \uBC18\uD658\uD560 \uAC83\uC785\uB2C8\uB2E4. \uC774 bump \uAC12\uC73C\uB85C \uBB34\uC7A5\uD55C Program\uC740 PDA\uB97C \uC694\uAD6C\uD558\uB294 \uC5B4\uB5A4 Instruction\uC5D0\uB3C4 "),z=t("sign"),G=t("\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uC11C\uBA85\uC744 \uC704\uD574 Program\uB4E4\uC740 Instruction\uB4E4\uACFC Account\uB4E4\uC758 \uBAA9\uB85D \uADF8\uB9AC\uACE0 "),T=e("code",null,"invoked_signed",-1),U=t("\uD558\uAE30 \uC704\uD574 PDA\uB97C \uC5BB\uAE30 \uC704\uD55C seeds\uC640 bump\uAC12\uB4E4\uC744 \uBCF4\uB0B4\uC57C \uD569\uB2C8\uB2E4. PDA\uB4E4\uC740 Instuction\uC5D0 \uC11C\uBA85\uD558\uB294 \uAC83\uACFC \uB354\uBD88\uC5B4 "),j=e("code",null,"invoke_signed",-1),q=t("\uB97C \uD1B5\uD574 \uC790\uC2E0\uC758 \uC0DD\uC131\uC744 \uC704\uD55C \uC11C\uBA85\uB3C4 \uD574\uC57C \uD569\uB2C8\uB2E4."),H=t("PDA\uB4E4\uC744 \uB9CC\uB4E4 \uB54C, Account Data \uC790\uCCB4\uC801\uC73C\uB85C "),J={href:"https://github.com/solana-labs/solana-program-library/blob/78e29e9238e555967b9125799d7d420d7d12b959/token-swap/program/src/state.rs#L100",target:"_blank",rel:"noopener noreferrer"},M=t("store the bump seed"),Q=t(" \uD558\uB294 \uAC83\uC740 \uD754\uD55C \uBC29\uBC95\uC785\uB2C8\uB2E4. \uC774\uAC83\uC740 \uAC1C\uBC1C\uC790\uB4E4\uC774 bump\uB97C Instruction \uC778\uC790\uB85C\uC368 \uC804\uC1A1\uD558\uC9C0 \uC54A\uACE0 \uC27D\uAC8C PDA\uB97C \uAC80\uC99D\uD558\uB3C4\uB85D \uD574\uC90D\uB2C8\uB2E4."),W=e("h2",{id:"other-resources",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#other-resources","aria-hidden":"true"},"#"),t(" Other Resources")],-1),X={href:"https://docs.solana.com/developing/programming-model/calling-between-programs#program-derived-addresses",target:"_blank",rel:"noopener noreferrer"},Y=t("Official Documentation"),Z={href:"https://www.brianfriel.xyz/understanding-program-derived-addresses/",target:"_blank",rel:"noopener noreferrer"},$=t("Understanding Program Derived Addresses");function ee(te,se){const o=n("ExternalLinkIcon"),r=n("RouterLink");return d(),c(l,null,[m,e("p",null,[g,e("a",P,[A,s(o)]),b]),f,e("div",D,[v,e("ul",null,[k,x,y,w,e("li",null,[I,e("a",K,[L,s(o)]),S]),F,e("li",null,[N,s(r,{to:"/kr/guides/account-maps.html"},{default:a(()=>[V]),_:1}),B])])]),C,e("p",null,[E,R,O,s(r,{to:"/kr/references/accounts.html#sign-with-a-pda"},{default:a(()=>[z]),_:1}),G,T,U,j,q]),e("p",null,[H,e("a",J,[M,s(o)]),Q]),W,e("ul",null,[e("li",null,[e("a",X,[Y,s(o)])]),e("li",null,[e("a",Z,[$,s(o)])])])],64)}var re=i(u,[["render",ee]]);export{re as default}; +import{_ as i,r as n,o as d,c,a as e,b as s,w as a,F as l,d as t,e as _}from"./app.2fbb9e96.js";var h="/assets/account-matrix.c3a79f80.png",p="/assets/pda-curve.7c0b9307.png";const u={},m=e("h1",{id:"program-derived-addresses-pdas",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#program-derived-addresses-pdas","aria-hidden":"true"},"#"),t(" Program Derived Addresses (PDAs)")],-1),g=t("Program Derived Addresses (PDAs)\uB294 \uD2B9\uC815 Program\uC5D0 \uC758\uD574 \uC791\uB3D9\uB418\uB3C4\uB85D \uC124\uACC4\uB41C Account\uB4E4\uC785\uB2C8\uB2E4. Program\uB4E4\uC740 PDA\uB4E4\uC744 \uD1B5\uD574 Private Key \uC5C6\uC774 \uD2B9\uC815 Addresse\uC5D0 \uB300\uD574 \uC11C\uBA85\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4. PDA\uB294 Solana App\uC774 \uB2E4\uB978 App\uB4E4\uACFC \uD568\uAED8 \uAD6C\uC131\uB420 \uC218 \uC788\uB3C4\uB85D \uD558\uB294 "),P={href:"https://docs.solana.com/developing/programming-model/calling-between-programs#cross-program-invocations",target:"_blank",rel:"noopener noreferrer"},A=t("Cross-Program Invocation"),b=t("\uB97C \uC704\uD55C \uAE30\uBC18\uC73C\uB85C\uC368\uC758 \uAE30\uB2A5\uC744 \uD569\uB2C8\uB2E4."),f=e("h2",{id:"facts",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#facts","aria-hidden":"true"},"#"),t(" Facts")],-1),D={class:"custom-container tip"},v=e("p",{class:"custom-container-title"},"Fact Sheet",-1),k=e("li",null,"PDAs are 32 byte strings that look like public keys, but don\u2019t have corresponding private keys",-1),x=e("li",null,"PDA\uB294 Public Key \uCC98\uB7FC \uBCF4\uC774\uB294 32 byte\uC758 String \uC774\uC9C0\uB9CC, \uB300\uC751\uB418\uB294 Private Key\uB294 \uC5C6\uC2B5\uB2C8\uB2E4.",-1),y=e("li",null,[e("code",null,"findProgramAddress"),t("\uB294 programId\uC640 seeds(collection of bytes) \uAC12\uC73C\uB85C\uBD80\uD130 \uC815\uD655\uD55C PDA\uB97C \uC870\uD68C\uD560 \uAC83\uC785\uB2C8\uB2E4.")],-1),w=e("li",null,"bump (one byte) \uB294 ed25519 \uD0C0\uC6D0 \uACE1\uC120\uC5D0\uC11C \uC7A0\uC7AC\uC801\uC778 PDA\uB97C \uBC00\uC5B4\uB0B4\uB294 \uB370 \uC0AC\uC6A9\uB429\uB2C8\uB2E4.",-1),I=t("Program\uC740 seeds\uC640 bump \uAC12\uC744 "),K={href:"https://docs.solana.com/developing/programming-model/calling-between-programs#program-signed-accounts",target:"_blank",rel:"noopener noreferrer"},L=t("invoke_signed"),S=t("\uC5D0 \uC81C\uACF5\uD574\uC11C PDA\uB4E4\uC5D0 \uC11C\uBA85\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4."),F=e("li",null,"PDA\uB294 \uC790\uC2E0\uC744 \uB9CC\uB4E0 Program\uC5D0 \uC758\uD574\uC11C\uB9CC \uC11C\uBA85\uB420 \uC218 \uC788\uC2B5\uB2C8\uB2E4.",-1),N=t("PDA\uB294 Program\uC774 \uB2E4\uB978 Instruction\uB4E4\uC5D0 \uC11C\uBA85\uD558\uB3C4\uB85D \uD558\uB294 \uAC83 \uBFD0\uB9CC \uC544\uB2C8\uB77C, "),V=t("indexing accounts"),B=t("\uB97C \uC704\uD55C hashmap\uACFC \uAC19\uC740 interface \uB610\uD55C \uC81C\uACF5\uD569\uB2C8\uB2E4."),C=_('

    Deep Dive

    PDA\uB294 Solana\uC5D0\uC11C Program\uB4E4\uC744 \uAC1C\uBC1C\uD558\uAE30 \uC704\uD55C \uD544\uC218\uC801\uC778 \uAD6C\uC131 \uC694\uC18C\uC785\uB2C8\uB2E4. Program\uB4E4\uC740 PDA\uB4E4\uC744 \uAC00\uC9C0\uACE0 Account\uB4E4\uC5D0 \uC11C\uBA85\uD560 \uC218 \uC788\uACE0, \uB2E4\uB978 \uC0AC\uC6A9\uC790\uB4E4\uC774 \uAC19\uC740 Account\uC5D0 \uC720\uD6A8\uD55C \uC11C\uBA85\uC744 \uB9CC\uB4E4 \uC218 \uC5C6\uB2E4\uB294 \uAC83\uC744 \uBCF4\uC7A5\uD569\uB2C8\uB2E4. \uC5B4\uB5A4 Program\uB4E4\uC740 Account\uB4E4\uC5D0 \uC11C\uBA85\uD558\uB294 \uAC83\uACFC \uB354\uBD88\uC5B4 \uADF8\uB4E4\uC758 PDA\uB4E4\uC5D0 \uC758\uD574 \uB9CC\uB4E4\uC5B4\uC9C4 Account\uB4E4\uC744 \uC218\uC815\uD560 \uC218\uB3C4 \uC788\uC2B5\uB2C8\uB2E4.

    Accounts matrix

    Image courtesy of Pencilflip

    Generating PDAs

    PDA\uC5D0 \uB300\uD55C \uAC1C\uB150\uC744 \uC774\uD574\uD558\uAE30 \uC704\uD574\uC11C, PDA\uB294 \uAE30\uC220\uC801\uC73C\uB85C \uCC3D\uC870\uB41C \uAC83\uC774 \uC544\uB2C8\uB77C \uBC1C\uACAC\uB41C \uAC83\uC774\uB77C\uACE0 \uC0DD\uAC01\uD558\uB294 \uAC83\uC774 \uC880 \uB354 \uB3C4\uC6C0\uC774 \uB420 \uC218 \uC788\uC2B5\uB2C8\uB2E4. PDA\uB4E4\uC740 seed (\uBB38\uC790\uC5F4 \u201Cvote_account\u201D\uC640 \uAC19\uC740)\uB4E4\uACFC Program ID\uC758 \uC870\uD569\uC73C\uB85C \uB9CC\uB4E4\uC5B4\uC9D1\uB2C8\uB2E4. \uADF8\uB7EC\uACE0 \uB098\uC11C, \uC774 seed\uB4E4\uACFC Program ID\uC758 \uC870\uD569\uC740 ed25519 \uD0C0\uC6D0 \uACE1\uC120 \uC0C1\uC5D0\uC11C Public Key\uB97C \uB9CC\uB4E4\uC5B4\uB0B4\uB294\uC9C0 \uC5EC\uBD80\uB97C \uD655\uC778\uD558\uAE30 \uC704\uD574 sha256 \uD574\uC2DC \uD568\uC218\uB85C \uBCF4\uB0B4\uC9D1\uB2C8\uB2E4.

    Program ID\uC640 seeds\uB97C \uD574\uC2DC \uD568\uC218\uB85C \uB3CC\uB9AC\uB294 \uB3D9\uC548, \uD0C0\uC6D0 \uACE1\uC120\uC0C1\uC5D0 \uC788\uB294 \uC720\uD6A8\uD55C Public Key\uB97C 50% \uD655\uB960\uB85C \uBC1C\uACAC\uD569\uB2C8\uB2E4. \uC774\uB7F0 \uACBD\uC6B0, \uC6B0\uB9AC\uB294 input \uAC12\uB4E4\uC744 \uC870\uAE08 \uB2E4\uB974\uAC8C \uD558\uAE30 \uC704\uD574 \uB2E8\uC21C\uD788 \uC5B4\uB5A4 \uAC12\uC744 \uCD94\uAC00\uD569\uB2C8\uB2E4. \uC774 \uC791\uC5C5\uC744 \uC704\uD574 \uCD94\uAC00\uD558\uB294 \uAC83\uC758 \uAE30\uC220\uC801\uC778 \uC6A9\uC5B4\uB294 bump\uC785\uB2C8\uB2E4. \uC194\uB77C\uB098\uC5D0\uC11C bump \uAC12\uC740 255\uB85C \uC2DC\uC791\uD574\uC11C bum=254, bump=253, etc... \uC640 \uAC19\uC774 \uD0C0\uC6D0 \uACE1\uC120 \uC0C1\uC5D0 \uC874\uC7AC\uD558\uC9C0 \uC54A\uB294 Address\uB97C \uC5BB\uC744 \uB54C\uAE4C\uC9C0 \uB2E8\uC21C\uD558\uAC8C \uAC12\uC744 \uD558\uB098\uC529 \uB0B4\uB9AC\uBA70 \uBC18\uBCF5\uD569\uB2C8\uB2E4. \uC774\uAC83\uC740 \uCD08\uBCF4\uC801\uC73C\uB85C \uBCF4\uC77C\uC9C0 \uBAA8\uB974\uC9C0\uB9CC, \uC77C\uB2E8 \uD55C\uBC88 \uBC1C\uACAC\uB418\uBA74 \uD655\uC2E4\uD788 \uC6B0\uB9AC\uB294 \uAC19\uC740 PDA\uB97C \uACC4\uC18D\uD574\uC11C \uC5BB\uC744 \uC218 \uC788\uC2B5\uB2C8\uB2E4.

    PDA on the ellipitic curve

    Interacting with PDAs

    ',9),E=t("PDA\uAC00 \uC0DD\uC131\uB410\uC744 \uB54C, "),R=e("code",null,"findProgramAddress",-1),O=t("\uB294 Address\uB97C \uD0C0\uC6D0 \uACE1\uC120 \uBC16\uC73C\uB85C \uBCF4\uB0B4\uAE30 \uC704\uD574 \uC0AC\uC6A9\uB418\uB3C4\uB85D Address\uC640 bump \uAC12\uC744 \uBC18\uD658\uD560 \uAC83\uC785\uB2C8\uB2E4. \uC774 bump \uAC12\uC73C\uB85C \uBB34\uC7A5\uD55C Program\uC740 PDA\uB97C \uC694\uAD6C\uD558\uB294 \uC5B4\uB5A4 Instruction\uC5D0\uB3C4 "),z=t("sign"),G=t("\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uC11C\uBA85\uC744 \uC704\uD574 Program\uB4E4\uC740 Instruction\uB4E4\uACFC Account\uB4E4\uC758 \uBAA9\uB85D \uADF8\uB9AC\uACE0 "),T=e("code",null,"invoked_signed",-1),U=t("\uD558\uAE30 \uC704\uD574 PDA\uB97C \uC5BB\uAE30 \uC704\uD55C seeds\uC640 bump\uAC12\uB4E4\uC744 \uBCF4\uB0B4\uC57C \uD569\uB2C8\uB2E4. PDA\uB4E4\uC740 Instuction\uC5D0 \uC11C\uBA85\uD558\uB294 \uAC83\uACFC \uB354\uBD88\uC5B4 "),j=e("code",null,"invoke_signed",-1),q=t("\uB97C \uD1B5\uD574 \uC790\uC2E0\uC758 \uC0DD\uC131\uC744 \uC704\uD55C \uC11C\uBA85\uB3C4 \uD574\uC57C \uD569\uB2C8\uB2E4."),H=t("PDA\uB4E4\uC744 \uB9CC\uB4E4 \uB54C, Account Data \uC790\uCCB4\uC801\uC73C\uB85C "),J={href:"https://github.com/solana-labs/solana-program-library/blob/78e29e9238e555967b9125799d7d420d7d12b959/token-swap/program/src/state.rs#L100",target:"_blank",rel:"noopener noreferrer"},M=t("store the bump seed"),Q=t(" \uD558\uB294 \uAC83\uC740 \uD754\uD55C \uBC29\uBC95\uC785\uB2C8\uB2E4. \uC774\uAC83\uC740 \uAC1C\uBC1C\uC790\uB4E4\uC774 bump\uB97C Instruction \uC778\uC790\uB85C\uC368 \uC804\uC1A1\uD558\uC9C0 \uC54A\uACE0 \uC27D\uAC8C PDA\uB97C \uAC80\uC99D\uD558\uB3C4\uB85D \uD574\uC90D\uB2C8\uB2E4."),W=e("h2",{id:"other-resources",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#other-resources","aria-hidden":"true"},"#"),t(" Other Resources")],-1),X={href:"https://docs.solana.com/developing/programming-model/calling-between-programs#program-derived-addresses",target:"_blank",rel:"noopener noreferrer"},Y=t("Official Documentation"),Z={href:"https://www.brianfriel.xyz/understanding-program-derived-addresses/",target:"_blank",rel:"noopener noreferrer"},$=t("Understanding Program Derived Addresses");function ee(te,se){const o=n("ExternalLinkIcon"),r=n("RouterLink");return d(),c(l,null,[m,e("p",null,[g,e("a",P,[A,s(o)]),b]),f,e("div",D,[v,e("ul",null,[k,x,y,w,e("li",null,[I,e("a",K,[L,s(o)]),S]),F,e("li",null,[N,s(r,{to:"/kr/guides/account-maps.html"},{default:a(()=>[V]),_:1}),B])])]),C,e("p",null,[E,R,O,s(r,{to:"/kr/references/accounts.html#sign-with-a-pda"},{default:a(()=>[z]),_:1}),G,T,U,j,q]),e("p",null,[H,e("a",J,[M,s(o)]),Q]),W,e("ul",null,[e("li",null,[e("a",X,[Y,s(o)])]),e("li",null,[e("a",Z,[$,s(o)])])])],64)}var re=i(u,[["render",ee]]);export{re as default}; diff --git a/docs/.vuepress/dist/assets/pdas.html.2c9c6b22.js b/docs/.vuepress/dist/assets/pdas.html.2c9c6b22.js new file mode 100644 index 000000000..b62a573cc --- /dev/null +++ b/docs/.vuepress/dist/assets/pdas.html.2c9c6b22.js @@ -0,0 +1 @@ +import{_ as s,r as i,o as r,c as a,a as t,b as c,w as h,F as d,d as n,e as l}from"./app.2fbb9e96.js";var g="/assets/account-matrix.c3a79f80.png",u="/assets/pda-curve.7c0b9307.png";const _={},p=t("h1",{id:"program-derived-addresses-pdas",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#program-derived-addresses-pdas","aria-hidden":"true"},"#"),n(" Program Derived Addresses (PDAs)")],-1),m=n("Program Derived Addresses (hay c\xF2n g\u1ECDi v\u1EAFn t\u1EAFt l\xE0 PDA) l\xE0 nh\u1EEFng Account \u0111\u01B0\u1EE3c thi\u1EBFt k\u1EBF cho c\xE1c Program c\xF3 th\u1EC3 ki\u1EC3m so\xE1t. V\u1EDBi PDA, Program c\xF3 th\u1EC3 l\u1EADp tr\xECnh \u0111\u01B0\u1EE3c ch\u1EEF k\xFD cho m\u1ED9t s\u1ED1 \u0111\u1ECBa ch\u1EC9 c\u1EE5 th\u1EC3 m\xE0 kh\xF4ng c\u1EA7n kho\xE1 ri\xEAng t\u01B0 - private key. PDA l\xE0 c\u01A1 s\u1EDF \u0111\u1EC3 hi\u1EC7n th\u1EF1c "),k={href:"https://docs.solana.com/developing/programming-model/calling-between-programs#cross-program-invocations",target:"_blank",rel:"noopener noreferrer"},b=n("Cross-Program Invocation"),v=n(", trong \u0111\xF3 Solana cho ph\xE9p c\xE1c Program c\xF3 th\u1EC3 t\u01B0\u01A1ng t\xE1c c\u0169ng nh\u01B0 k\u1EBFt h\u1EE3p v\u1EDBi nhau \u0111\u1EC3 t\u1EA1o n\xEAn m\u1ED9t h\u1EC7 th\u1ED1ng ph\u1EE9c t\u1EA1p h\u01A1n."),P=t("h2",{id:"co-the-ban-chua-biet",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#co-the-ban-chua-biet","aria-hidden":"true"},"#"),n(" C\xF3 th\u1EC3 b\u1EA1n ch\u01B0a bi\u1EBFt")],-1),A={class:"custom-container tip"},f=t("p",{class:"custom-container-title"},"Nh\u1EEFng \u0111i\u1EC1u c\xF3 th\u1EC3 b\u1EA1n ch\u01B0a bi\u1EBFt",-1),D=t("li",null,"PDA l\xE0 m\u1ED9t chu\u1ED7i 32 byte t\u01B0\u01A1ng t\u1EF1 kho\xE1 c\xF4ng khai - public keys, nh\u01B0ng l\u1EA1i kh\xF4ng t\u1ED3n t\u1EA1i kho\xE1 ri\xEAng t\u01B0 t\u01B0\u01A1ng \u1EE9ng",-1),y=t("li",null,[t("code",null,"findProgramAddress"),n(" \u0111\u01B0\u1EE3c d\xF9ng \u0111\u1EC3 suy ra m\u1ED9t PDA t\u1EEB th\xF4ng tin "),t("code",null,"program_id"),n(" v\xE0 "),t("code",null,"seeds"),n(" (m\u1ED9t t\u1EADp h\u1EE3p c\xE1c bytes)")],-1),x=t("li",null,[n("M\u1ED9t "),t("code",null,"bump"),n(" (c\xF3 gi\xE1 tr\u1ECB 1 byte) \u0111\u01B0\u1EE3c d\xF9ng \u0111\u1EC3 t\u1EA1o ra m\u1ED9t PDA kh\u1EA3 d\u0129 n\u1EB1m ngo\xE0i \u0111\u01B0\u1EDDng cong ellipitic ed25519.")],-1),w=n("Program c\xF3 th\u1EC3 t\u1EA1o ra ch\u1EEF k\xFD cho PDA b\u1EB1ng c\xE1ch cung c\u1EA5p "),N=t("code",null,"seeds",-1),V=n(" v\xE0 "),q=t("code",null,"bump",-1),C=n(" cho h\xE0m "),L={href:"https://docs.solana.com/developing/programming-model/calling-between-programs#program-signed-accounts",target:"_blank",rel:"noopener noreferrer"},T=n("invoke_signed"),S=t("li",null,"M\u1ED9t PDA ch\u1EC9 c\xF3 th\u1EC3 \u0111\u01B0\u1EE3c k\xFD b\u1EDFi Program m\xE0 n\xF3 \u0111\u01B0\u1EE3c suy ra.",-1),B=n("Ngo\xE0i vi\u1EC7c cho ph\xE9p Program c\xF3 th\u1EC3 k\xFD l\xEAn c\xE1c instruction, PDA c\u0169ng cung c\u1EA5p m\u1ED9t interface gi\u1ED1ng v\u1EDBi hashmap d\xE0nh cho vi\u1EC7c "),E=n("\u0111\xE1nh ch\u1EC9 s\u1ED1 Account"),I=l('

    Chi ti\u1EBFt

    PDA l\xE0 m\u1ED9t kh\u1ED1i c\u01A1 s\u1EDF cho vi\u1EC7c l\u1EADp tr\xECnh tr\xEAn Solana. V\u1EDBi PDA, Program c\xF3 th\u1EC3 k\xFD cho nhi\u1EC1u Account trong khi \u0111\u1EA3m b\u1EA3o r\u1EB1ng kh\xF4ng t\u1ED3n t\u1EA1i ng\u01B0\u1EDDi d\xF9ng n\xE0o c\xF3 th\u1EC3 gi\u1EA3 m\u1EA1o ch\u1EEF k\xFD cho c\xF9ng Account \u0111\xF3. Ngo\xE0i vi\u1EC7c t\u1EA1o ra ch\u1EEF k\xFD, Program c\u0169ng c\xF3 th\u1EC3 ch\u1EC9nh s\u1EEDa Account \u0111\u01B0\u1EE3c s\u1EDF h\u1EEFu b\u1EDFi PDA c\u1EE7a n\xF3.

    Accounts matrix

    H\xECnh \u1EA3nh \u0111\u01B0\u1EE3c cho ph\xE9p b\u1EDDi Pencilflip

    C\xE1ch sinh PDA

    \u0110\u1EC3 hi\u1EC3u \u0111\u01B0\u1EE3c kh\xE1i ni\u1EC7m \u0111\u1EB1ng sau PDA, l\xE0 c\u1EA7n thi\u1EBFt \u0111\u1EC3 l\xE0m r\xF5 r\u1EB1ng PDA kh\xF4ng ph\u1EA3i \u0111\u01B0\u1EE3c "t\u1EA1o ra" m\xE0 l\xE0 "t\xECm ra". PDA \u0111\u01B0\u1EE3c sinh ra t\u1EEB qu\xE1 tr\xECnh k\u1EBFt h\u1EE3p gi\u1EEFa seeds (v\xED d\u1EE5 nh\u01B0 chu\u1ED7i k\xFD t\u1EF1 \u201Cvote_account\u201D) v\xE0 program_id. Vi\u1EC7c k\u1EBFt h\u1EE3p n\xE0y \u0111\u01B0\u1EE3c cho qua m\u1ED9t h\xE0m b\u0103m - sha256 - \u0111\u1EC3 th\u1EED xem gi\xE1 tr\u1ECB t\u1EA1o ra c\xF3 ph\u1EA3i l\xE0 m\u1ED9t kho\xE1 c\xF4ng khai n\u1EB1m ngo\xE0i \u0111\u01B0\u1EDDng cong ellipitic ed25519 hay kh\xF4ng.

    Qu\xE1 tr\xECnh th\u1EED n\xE0y s\u1EBD c\xF3 x\xE1c su\u1EA5t 50/50. Ngh\u0129a l\xE0 s\u1EBD c\xF3 50% c\u01A1 h\u1ED9i qu\xE1 tr\xECnh sinh ra m\u1ED9t kho\xE1 c\xF4ng khai n\u1EB1m tr\xEAn \u0111\u01B0\u1EDDng cong ellipitic ed25519. Trong tr\u01B0\u1EDDng h\u1EE3p \u0111\xF3, ch\xFAng ta \u0111\u01A1n gi\u1EA3n ch\u1EC9 c\u1EA7n th\xEAm m\u1ED9t v\xE0i bit v\xE0o \u0111\u1EA7u v\xE0o \u0111\u1EC3 th\u1EED l\u1EA1i. Nh\u1EEFng bit \u0111\u01B0\u1EE3c th\xEAm v\xE0o trong thu\u1EADt ng\u1EEF k\u1EF9 thu\u1EADt \u0111\u01B0\u1EE3c g\u1ECDi l\xE0 bump. Trong Solana, ch\xFAng ta b\u1EAFt \u0111\u1EA7u v\u1EDBi bump = 255 v\xE0 ti\u1EBFp t\u1EE5c gi\u1EA3m xu\u1ED1ng 254, 253 c\u1EE9 th\u1EC3 cho \u0111\u1EBFn khi t\xECm \u0111\u01B0\u1EE3c \u0111\u1ECBa ch\u1EC9 PDA kh\xF4ng n\u1EB1m tr\xEAn \u0111\u01B0\u1EDDng cong ellipitic. Vi\u1EC7c n\xE0y c\xF3 v\u1EBB th\xF4 s\u01A1, nh\u01B0ng th\u1EF1c ra n\xF3 l\u1EA1i cho ch\xFAng ta m\u1ED9t ph\u01B0\u01A1ng ph\xE1p b\u1EA5t bi\u1EBFn \u0111\u1EC3 suy ra PDA cho c\xE1c l\u1EA7n th\u1EED kh\xE1c nhau, mi\u1EC5n l\xE0 c\xF9ng m\u1ED9t gi\xE1 tr\u1ECB \u0111\u1EA7u v\xE0o.

    PDA on the ellipitic curve

    T\u01B0\u01A1ng t\xE1c v\u1EDBi PDAs

    ',9),F=n("Khi m\u1ED9t PDA \u0111\u01B0\u1EE3c sinh ra, "),K=t("code",null,"findProgramAddress",-1),M=n(" s\u1EBD tr\u1EA3 v\u1EC1 hai gi\xE1 tr\u1ECB l\xE0 \u0111\u1ECBa ch\u1EC9 c\u1EE7a PDA v\xE0 "),R=t("code",null,"bump",-1),z=n(" d\xF9ng \u0111\u1EC3 \u0111\u1EA3m b\u1EA3o PDA n\xE0y ngo\xE0i \u0111\u01B0\u1EDDng cong ellipitic. V\u1EDBi gi\xE1 tr\u1ECB "),H=t("code",null,"bump",-1),Q=n(" n\xE0y, Program c\xF3 th\u1EC3 "),U=n("k\xFD l\xEAn"),j=n(" b\u1EA5t k\u1EF3 instruction n\xE0o c\xF3 ch\u1EE9a PDA c\u1EE7a n\xF3 v\u1EC1 sau. \u0110\u1EC3 k\xFD, Program ph\u1EA3i truy\u1EC1n cho instruction m\u1ED9t danh s\xE1ch c\xE1c Account, c\xE1c "),G=t("code",null,"seeds",-1),J=n(" v\xE0 "),O=t("code",null,"bump",-1),W=n(" d\xF9ng \u0111\u1EC3 suy ra PDA v\xE0o h\xE0m "),X=t("code",null,"invoke_signed",-1),Y=n(". Ngo\xE0i vi\u1EC7c k\xFD l\xEAn instruction, PDA c\xF2n k\xFD cho vi\u1EC7c t\u1EA1o ra ch\xEDnh b\u1EA3n th\xE2n n\xF3 th\xF4ng qua h\xE0m "),Z=t("code",null,"invoke_signed",-1),$=n("."),tt=n("Khi ph\xE1t tri\u1EC3n \u1EE9ng d\u1EE5ng v\u1EDBi PDA, th\u01B0\u1EDDng th\xEC b\u1EA1n s\u1EBD ph\u1EA3i "),nt={href:"https://github.com/solana-labs/solana-program-library/blob/78e29e9238e555967b9125799d7d420d7d12b959/token-swap/program/src/state.rs#L100",target:"_blank",rel:"noopener noreferrer"},ct=n("l\u01B0u bump"),ot=n(" trong d\u1EEF li\u1EC7u Account. \u0110i\u1EC1u n\xE0y cho ph\xE9p l\u1EADp tr\xECnh vi\xEAn c\xF3 th\u1EC3 ki\u1EC3m tra PDA m\xE0 kh\xF4ng c\u1EA7n truy\u1EC1n bump v\xE0o d\u1EEF li\u1EC7u \u0111\u1EA7u v\xE0o c\u1EE7a instruction."),et=t("h2",{id:"cac-nguon-tai-lieu-khac",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#cac-nguon-tai-lieu-khac","aria-hidden":"true"},"#"),n(),t("a",{name:"resources"}),n(" C\xE1c ngu\u1ED3n t\xE0i li\u1EC7u kh\xE1c")],-1),it={href:"https://docs.solana.com/developing/programming-model/calling-between-programs#program-derived-addresses",target:"_blank",rel:"noopener noreferrer"},ht=n("T\xE0i li\u1EC7u ch\xEDnh th\u1ED1ng"),st={href:"https://www.brianfriel.xyz/understanding-program-derived-addresses/",target:"_blank",rel:"noopener noreferrer"},rt=n("Understanding Program Derived Addresses");function at(dt,lt){const o=i("ExternalLinkIcon"),e=i("RouterLink");return r(),a(d,null,[p,t("p",null,[m,t("a",k,[b,c(o)]),v]),P,t("div",A,[f,t("ul",null,[D,y,x,t("li",null,[w,N,V,q,C,t("a",L,[T,c(o)])]),S,t("li",null,[B,c(e,{to:"/vi/guides/account-maps.html"},{default:h(()=>[E]),_:1})])])]),I,t("p",null,[F,K,M,R,z,H,Q,c(e,{to:"/vi/references/accounts.html#sign-with-a-pda"},{default:h(()=>[U]),_:1}),j,G,J,O,W,X,Y,Z,$]),t("p",null,[tt,t("a",nt,[ct,c(o)]),ot]),et,t("ul",null,[t("li",null,[t("a",it,[ht,c(o)])]),t("li",null,[t("a",st,[rt,c(o)])])])],64)}var ut=s(_,[["render",at]]);export{ut as default}; diff --git a/docs/.vuepress/dist/assets/pdas.html.b2f32d6d.js b/docs/.vuepress/dist/assets/pdas.html.3b24f46f.js similarity index 96% rename from docs/.vuepress/dist/assets/pdas.html.b2f32d6d.js rename to docs/.vuepress/dist/assets/pdas.html.3b24f46f.js index 93e51579f..25ced42b4 100644 --- a/docs/.vuepress/dist/assets/pdas.html.b2f32d6d.js +++ b/docs/.vuepress/dist/assets/pdas.html.3b24f46f.js @@ -1 +1 @@ -const t={key:"v-8e20768c",path:"/vi/core-concepts/pdas.html",title:"Program Derived Addresses (PDAs)",lang:"vi-VN",frontmatter:{title:"Program Derived Addresses (PDAs)",head:[["meta",{name:"title",content:"To\xE0n t\u1EADp Solana | PDAs"}],["meta",{name:"og:title",content:"To\xE0n t\u1EADp Solana | PDAs"}],["meta",{name:"description",content:"PDAs l\xE0 ngu\u1ED3n g\u1ED1c c\u1EE7a c\xE1c Account \u0111\u01B0\u1EE3c thi\u1EBFt k\u1EBF \u0111\u1EC3 \u0111\u01B0\u1EE3c ki\u1EC3m so\xE1t b\u1EDFi m\u1ED9t Program c\u1EE5 th\u1EC3. Chi ti\u1EBFt v\u1EC1 PDAs v\xE0 c\xE1c kh\xE1i ni\u1EC7m c\u01A1n b\u1EA3n kh\xE1c trong To\xE0n t\u1EADp Solana."}],["meta",{name:"og:description",content:"PDAs l\xE0 ngu\u1ED3n g\u1ED1c c\u1EE7a c\xE1c Account \u0111\u01B0\u1EE3c thi\u1EBFt k\u1EBF \u0111\u1EC3 \u0111\u01B0\u1EE3c ki\u1EC3m so\xE1t b\u1EDFi m\u1ED9t Program c\u1EE5 th\u1EC3. Chi ti\u1EBFt v\u1EC1 PDAs v\xE0 c\xE1c kh\xE1i ni\u1EC7m c\u01A1n b\u1EA3n kh\xE1c trong To\xE0n t\u1EADp Solana."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"C\xF3 th\u1EC3 b\u1EA1n ch\u01B0a bi\u1EBFt",slug:"co-the-ban-chua-biet",children:[{level:3,title:"C\xE1ch sinh PDA",slug:"cach-sinh-pda",children:[]},{level:3,title:"T\u01B0\u01A1ng t\xE1c v\u1EDBi PDAs",slug:"tuong-tac-voi-pdas",children:[]}]},{level:2,title:"C\xE1c ngu\u1ED3n t\xE0i li\u1EC7u kh\xE1c",slug:"cac-nguon-tai-lieu-khac",children:[]}],git:{updatedTime:1658783638e3},filePathRelative:"vi/core-concepts/pdas.md"};export{t as data}; +const t={key:"v-8e20768c",path:"/vi/core-concepts/pdas.html",title:"Program Derived Addresses (PDAs)",lang:"vi-VN",frontmatter:{title:"Program Derived Addresses (PDAs)",head:[["meta",{name:"title",content:"To\xE0n t\u1EADp Solana | PDAs"}],["meta",{name:"og:title",content:"To\xE0n t\u1EADp Solana | PDAs"}],["meta",{name:"description",content:"PDAs l\xE0 ngu\u1ED3n g\u1ED1c c\u1EE7a c\xE1c Account \u0111\u01B0\u1EE3c thi\u1EBFt k\u1EBF \u0111\u1EC3 \u0111\u01B0\u1EE3c ki\u1EC3m so\xE1t b\u1EDFi m\u1ED9t Program c\u1EE5 th\u1EC3. Chi ti\u1EBFt v\u1EC1 PDAs v\xE0 c\xE1c kh\xE1i ni\u1EC7m c\u01A1n b\u1EA3n kh\xE1c trong To\xE0n t\u1EADp Solana."}],["meta",{name:"og:description",content:"PDAs l\xE0 ngu\u1ED3n g\u1ED1c c\u1EE7a c\xE1c Account \u0111\u01B0\u1EE3c thi\u1EBFt k\u1EBF \u0111\u1EC3 \u0111\u01B0\u1EE3c ki\u1EC3m so\xE1t b\u1EDFi m\u1ED9t Program c\u1EE5 th\u1EC3. Chi ti\u1EBFt v\u1EC1 PDAs v\xE0 c\xE1c kh\xE1i ni\u1EC7m c\u01A1n b\u1EA3n kh\xE1c trong To\xE0n t\u1EADp Solana."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"C\xF3 th\u1EC3 b\u1EA1n ch\u01B0a bi\u1EBFt",slug:"co-the-ban-chua-biet",children:[{level:3,title:"C\xE1ch sinh PDA",slug:"cach-sinh-pda",children:[]},{level:3,title:"T\u01B0\u01A1ng t\xE1c v\u1EDBi PDAs",slug:"tuong-tac-voi-pdas",children:[]}]},{level:2,title:"C\xE1c ngu\u1ED3n t\xE0i li\u1EC7u kh\xE1c",slug:"cac-nguon-tai-lieu-khac",children:[]}],git:{updatedTime:1677551527e3},filePathRelative:"vi/core-concepts/pdas.md"};export{t as data}; diff --git a/docs/.vuepress/dist/assets/pdas.html.4250b3b0.js b/docs/.vuepress/dist/assets/pdas.html.4204ce02.js similarity index 99% rename from docs/.vuepress/dist/assets/pdas.html.4250b3b0.js rename to docs/.vuepress/dist/assets/pdas.html.4204ce02.js index cc7e3d4e1..56d708fc8 100644 --- a/docs/.vuepress/dist/assets/pdas.html.4250b3b0.js +++ b/docs/.vuepress/dist/assets/pdas.html.4204ce02.js @@ -1 +1 @@ -import{_ as i,r as a,o as d,c,a as e,b as r,w as n,F as l,d as s,e as p}from"./app.cfdf84e7.js";var _="/assets/account-matrix.c3a79f80.png",h="/assets/pda-curve.7c0b9307.png";const m={},u=e("h1",{id:"program-derived-addresses-pdas",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#program-derived-addresses-pdas","aria-hidden":"true"},"#"),s(" Program Derived Addresses (PDAs)")],-1),g=s("Program Derived Addresses (PDAs) \u0E04\u0E37\u0E2D\u0E2A\u0E34\u0E48\u0E07\u0E17\u0E35\u0E48\u0E40\u0E0A\u0E37\u0E48\u0E2D\u0E21\u0E42\u0E22\u0E07\u0E01\u0E31\u0E1A accounts \u0E17\u0E35\u0E48\u0E2D\u0E2D\u0E01\u0E41\u0E1A\u0E1A\u0E21\u0E32\u0E43\u0E2B\u0E49\u0E16\u0E39\u0E01\u0E04\u0E27\u0E1A\u0E04\u0E38\u0E21\u0E42\u0E14\u0E22 program \u0E17\u0E35\u0E48\u0E23\u0E30\u0E1A\u0E38\u0E44\u0E27\u0E49. \u0E16\u0E49\u0E32\u0E21\u0E35 PDAs \u0E15\u0E31\u0E27 programs \u0E01\u0E47\u0E08\u0E30\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 sign \u0E44\u0E14\u0E49\u0E14\u0E49\u0E27\u0E22 program (programmatically sign) \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A addresses \u0E17\u0E35\u0E48\u0E40\u0E08\u0E32\u0E30\u0E08\u0E07\u0E44\u0E27\u0E49\u0E42\u0E14\u0E22\u0E44\u0E21\u0E48\u0E15\u0E49\u0E2D\u0E07\u0E43\u0E0A\u0E49 private key. PDAs \u0E21\u0E35\u0E44\u0E27\u0E49\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E17\u0E33 CPI "),b={href:"https://docs.solana.com/developing/programming-model/calling-between-programs#cross-program-invocations",target:"_blank",rel:"noopener noreferrer"},f=s("Cross-Program Invocation"),v=s(", \u0E42\u0E14\u0E22\u0E08\u0E30\u0E2D\u0E19\u0E38\u0E0D\u0E32\u0E15 Solana apps \u0E43\u0E2B\u0E49\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 \u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19\u0E23\u0E48\u0E27\u0E21\u0E01\u0E31\u0E19 (composable) \u200B\u0E01\u0E31\u0E1A program \u0E2D\u0E37\u0E48\u0E19\u0E46 \u0E44\u0E14\u0E49."),P=e("h2",{id:"\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49","aria-hidden":"true"},"#"),s(" \u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49")],-1),A={class:"custom-container tip"},D=e("p",{class:"custom-container-title"},"Fact Sheet",-1),k=e("li",null,"PDAs \u0E04\u0E37\u0E2D 32 byte strings \u0E17\u0E35\u0E48\u0E14\u0E39\u0E40\u0E2B\u0E21\u0E37\u0E2D\u0E19 public keys, \u0E41\u0E15\u0E48\u0E08\u0E30\u0E44\u0E21\u0E48\u0E21\u0E35 private keys",-1),x=e("li",null,[e("code",null,"findProgramAddress"),s(" \u0E08\u0E30\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E2A\u0E37\u0E1A\u0E17\u0E2D\u0E14(derive) \u0E41\u0E1A\u0E1A deterministic \u0E40\u0E1B\u0E47\u0E19 PDA \u0E08\u0E32\u0E01 programId \u0E41\u0E25\u0E30 seeds (\u0E0A\u0E38\u0E14\u0E02\u0E2D\u0E07 bytes)")],-1),y=e("li",null,"bump (1 byte) \u0E08\u0E30\u0E40\u0E2D\u0E32\u0E44\u0E27\u0E49\u0E40\u0E1E\u0E34\u0E48\u0E21\u0E42\u0E2D\u0E01\u0E32\u0E2A\u0E17\u0E35\u0E48 PDA \u0E08\u0E30\u0E2B\u0E25\u0E38\u0E14\u0E08\u0E32\u0E01 ed25519 elliptic curve",-1),w=s("Programs \u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 sign \u0E43\u0E2B\u0E49 PDAs \u0E44\u0E14\u0E49\u0E14\u0E49\u0E27\u0E22\u0E01\u0E32\u0E23\u0E40\u0E15\u0E23\u0E35\u0E22\u0E21 seeds \u0E41\u0E25\u0E30 bump \u0E44\u0E27\u0E49\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E43\u0E0A\u0E49\u0E43\u0E19\u0E01\u0E32\u0E23 "),I={href:"https://docs.solana.com/developing/programming-model/calling-between-programs#program-signed-accounts",target:"_blank",rel:"noopener noreferrer"},L=s("invoke_signed"),S=e("li",null,"PDA \u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 sign \u0E14\u0E49\u0E27\u0E22 program \u0E17\u0E35\u0E48\u0E21\u0E31\u0E19 derived \u0E21\u0E32\u0E40\u0E17\u0E48\u0E32\u0E19\u0E31\u0E49\u0E19",-1),C=s("\u0E43\u0E19\u0E01\u0E32\u0E23\u0E17\u0E35\u0E48\u0E08\u0E30\u0E17\u0E33\u0E43\u0E2B\u0E49 programs \u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 sign \u0E43\u0E19 instructions \u0E17\u0E35\u0E48\u0E15\u0E48\u0E32\u0E07\u0E01\u0E31\u0E19, PDAs \u0E08\u0E30\u0E15\u0E49\u0E2D\u0E07\u0E40\u0E15\u0E23\u0E35\u0E22\u0E21 interface \u0E04\u0E25\u0E49\u0E32\u0E22\u0E46 hashmap \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A "),N=s("indexing accounts"),V=p('

    \u0E25\u0E07\u0E25\u0E36\u0E01

    PDAs \u0E04\u0E37\u0E2D\u0E2A\u0E48\u0E27\u0E19\u0E2A\u0E33\u0E04\u0E31\u0E0D\u0E43\u0E19\u0E01\u0E32\u0E23\u0E1E\u0E31\u0E12\u0E19\u0E32 programs \u0E1A\u0E19 Solana. \u0E16\u0E49\u0E32\u0E21\u0E35 PDAs, programs \u0E01\u0E47\u0E08\u0E30\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 sign \u0E41\u0E17\u0E19 accounts \u0E43\u0E19\u0E02\u0E13\u0E30\u0E17\u0E35\u0E48\u0E23\u0E31\u0E1A\u0E1B\u0E23\u0E30\u0E01\u0E31\u0E19\u0E44\u0E14\u0E49\u0E27\u0E48\u0E32\u0E08\u0E30\u0E44\u0E21\u0E48\u0E21\u0E35 user \u0E2D\u0E37\u0E48\u0E19\u0E21\u0E32\u0E2A\u0E23\u0E49\u0E32\u0E07 signature \u0E17\u0E35\u0E48\u0E40\u0E2B\u0E21\u0E37\u0E2D\u0E19\u0E01\u0E31\u0E19\u0E44\u0E14\u0E49. \u0E19\u0E2D\u0E01\u0E08\u0E32\u0E01\u0E17\u0E35\u0E48\u0E08\u0E30 sign \u0E41\u0E17\u0E19 account \u0E44\u0E14\u0E49\u0E41\u0E25\u0E49\u0E27 \u0E1A\u0E32\u0E07 programs \u0E22\u0E31\u0E07\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E40\u0E1B\u0E25\u0E35\u0E48\u0E22\u0E19\u0E41\u0E1B\u0E25\u0E07 accounts \u0E17\u0E35\u0E48\u0E21\u0E31\u0E19\u0E16\u0E37\u0E2D PDAs \u0E44\u0E27\u0E49\u0E44\u0E14\u0E49\u0E14\u0E49\u0E27\u0E22

    Accounts matrix

    Image courtesy of Pencilflip

    \u0E01\u0E32\u0E23\u0E2A\u0E23\u0E49\u0E32\u0E07 PDAs

    \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E17\u0E35\u0E48\u0E08\u0E30\u0E40\u0E02\u0E49\u0E32\u0E43\u0E08\u0E2B\u0E25\u0E31\u0E01\u0E01\u0E32\u0E23\u0E40\u0E1A\u0E37\u0E49\u0E2D\u0E07\u0E2B\u0E25\u0E31\u0E07 PDAs, \u0E40\u0E23\u0E32\u0E2D\u0E32\u0E08\u0E08\u0E30\u0E15\u0E49\u0E2D\u0E07\u0E40\u0E02\u0E49\u0E32\u0E43\u0E08\u0E01\u0E48\u0E2D\u0E19\u0E27\u0E48\u0E32 PDAs \u0E08\u0E23\u0E34\u0E07\u0E46 \u0E41\u0E25\u0E49\u0E27\u0E44\u0E21\u0E48\u0E44\u0E14\u0E49\u0E16\u0E39\u0E01\u0E2A\u0E23\u0E49\u0E32\u0E07\u0E02\u0E36\u0E49\u0E19\u0E21\u0E32\u0E41\u0E15\u0E48\u0E40\u0E1B\u0E47\u0E19\u0E01\u0E32\u0E23\u0E04\u0E49\u0E19\u0E2B\u0E32\u0E08\u0E19\u0E40\u0E08\u0E2D. PDAs \u0E40\u0E01\u0E34\u0E14\u0E08\u0E32\u0E01\u0E01\u0E32\u0E23\u0E1C\u0E2A\u0E21 seeds (\u0E40\u0E0A\u0E48\u0E19 \u201Cvote_account\u201D) \u0E41\u0E25\u0E30 program id. \u0E01\u0E32\u0E23\u0E1C\u0E2A\u0E21\u0E01\u0E31\u0E19\u0E02\u0E2D\u0E07 seeds \u0E41\u0E25\u0E30 program id \u0E08\u0E30 run \u0E1C\u0E48\u0E32\u0E19 sha256 hash function \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E14\u0E39\u0E27\u0E48\u0E32 public key \u0E19\u0E31\u0E49\u0E19\u0E15\u0E01\u0E2D\u0E22\u0E39\u0E48\u0E1A\u0E19 ed25519 elliptic curve \u0E2B\u0E23\u0E37\u0E2D\u0E44\u0E21\u0E48.

    \u0E43\u0E19\u0E01\u0E32\u0E23 run program id \u0E41\u0E25\u0E30 seeds \u0E1C\u0E48\u0E32\u0E19 hash function \u0E08\u0E30\u0E21\u0E35\u0E04\u0E27\u0E32\u0E21\u0E40\u0E1B\u0E47\u0E19\u0E44\u0E1B\u0E44\u0E14\u0E49\u0E1B\u0E23\u0E30\u0E21\u0E32\u0E13 ~50% \u0E17\u0E35\u0E48\u0E08\u0E30\u0E44\u0E14\u0E49 valid public key \u0E17\u0E35\u0E48\u0E15\u0E01\u0E2D\u0E22\u0E39\u0E48\u0E1A\u0E19 elliptic curve. \u0E43\u0E19\u0E01\u0E23\u0E13\u0E35\u0E19\u0E35\u0E49 \u0E08\u0E30\u0E40\u0E1E\u0E34\u0E48\u0E21\u0E2D\u0E30\u0E44\u0E23\u0E1A\u0E32\u0E07\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E41\u0E01\u0E25\u0E49\u0E07 (fudge) \u0E43\u0E2B\u0E49 input \u0E02\u0E22\u0E31\u0E1A\u0E44\u0E1B\u0E19\u0E34\u0E14\u0E2B\u0E19\u0E48\u0E2D\u0E22\u0E41\u0E25\u0E49\u0E27\u0E01\u0E47\u0E25\u0E2D\u0E07\u0E43\u0E2B\u0E21\u0E48\u0E2D\u0E35\u0E01\u0E04\u0E23\u0E31\u0E49\u0E07. \u0E28\u0E31\u0E1E\u0E17\u0E4C\u0E17\u0E32\u0E07\u0E40\u0E17\u0E04\u0E19\u0E34\u0E04\u0E02\u0E2D\u0E07\u0E01\u0E32\u0E23 fudge \u0E19\u0E35\u0E49\u0E01\u0E47\u0E04\u0E37\u0E2D bump. \u0E43\u0E19 Solana, \u0E40\u0E23\u0E32\u0E08\u0E30\u0E40\u0E23\u0E34\u0E48\u0E21\u0E14\u0E49\u0E27\u0E22 bump = 255 \u0E41\u0E25\u0E30\u0E04\u0E48\u0E2D\u0E22\u0E46 \u0E25\u0E14\u0E25\u0E07\u0E40\u0E1B\u0E47\u0E19 bump = 254, bump = 253, \u0E40\u0E23\u0E37\u0E48\u0E2D\u0E22\u0E46 \u0E08\u0E19\u0E40\u0E23\u0E32\u0E44\u0E14\u0E49 address \u0E17\u0E35\u0E48\u0E44\u0E21\u0E48\u0E2D\u0E22\u0E39\u0E48\u0E1A\u0E19 elliptic curve. \u0E19\u0E35\u0E48\u0E2D\u0E32\u0E08\u0E08\u0E30\u0E1F\u0E31\u0E07\u0E14\u0E39\u0E07\u0E48\u0E32\u0E22\u0E46 \u0E41\u0E15\u0E48\u0E40\u0E21\u0E37\u0E48\u0E2D\u0E21\u0E31\u0E19\u0E40\u0E08\u0E2D address \u0E21\u0E31\u0E19\u0E01\u0E47\u0E08\u0E30\u0E40\u0E1B\u0E47\u0E19\u0E27\u0E34\u0E18\u0E35\u0E43\u0E19\u0E41\u0E1A\u0E1A deterministic \u0E17\u0E35\u0E48\u0E08\u0E30\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 derive PDA \u0E40\u0E14\u0E34\u0E21\u0E2D\u0E2D\u0E01\u0E21\u0E32\u0E44\u0E14\u0E49.

    PDA on the ellipitic curve

    \u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19 PDAs

    ',9),B=s("\u0E40\u0E21\u0E37\u0E48\u0E2D PDA \u0E16\u0E39\u0E01\u0E2A\u0E23\u0E49\u0E32\u0E07\u0E21\u0E32\u0E41\u0E25\u0E49\u0E27, "),E=e("code",null,"findProgramAddress",-1),F=s(" \u0E08\u0E30\u0E04\u0E37\u0E19 address \u0E41\u0E25\u0E30 bump \u0E17\u0E35\u0E48\u0E43\u0E0A\u0E49\u0E40\u0E15\u0E30 address \u0E2D\u0E2D\u0E01\u0E08\u0E32\u0E01 elliptic curve. \u0E16\u0E49\u0E32\u0E21\u0E35 bump \u0E19\u0E35\u0E49, program \u0E01\u0E47\u0E08\u0E30\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 "),R=s("sign"),z=s(" instruction \u0E43\u0E14\u0E46\u0E17\u0E35\u0E48\u0E15\u0E49\u0E2D\u0E07\u0E01\u0E32\u0E23 PDA. \u0E43\u0E19\u0E01\u0E32\u0E23\u0E17\u0E35\u0E48\u0E08\u0E30 sign, \u0E15\u0E31\u0E27 programs \u0E15\u0E49\u0E2D\u0E07\u0E2A\u0E48\u0E07 instruction, list \u0E02\u0E2D\u0E07 accounts, \u0E41\u0E25\u0E30 seeds \u0E01\u0E31\u0E1A bump \u0E17\u0E35\u0E48\u0E43\u0E0A\u0E49 derive \u0E15\u0E31\u0E27 PDA \u0E44\u0E1B "),O=e("code",null,"invoke_signed",-1),T=s(". \u0E19\u0E2D\u0E01\u0E08\u0E32\u0E01\u0E19\u0E35\u0E49\u0E43\u0E19\u0E01\u0E32\u0E23 sign \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A instructions, PDAs \u0E08\u0E30\u0E15\u0E49\u0E2D\u0E07 sign \u0E1C\u0E48\u0E32\u0E19 "),U=e("code",null,"invoke_signed",-1),j=s(" \u0E14\u0E49\u0E27\u0E22."),q=s("\u0E40\u0E21\u0E37\u0E48\u0E2D\u0E08\u0E30\u0E43\u0E0A\u0E49 PDAs, \u0E21\u0E31\u0E19\u0E40\u0E1B\u0E47\u0E19\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E1B\u0E01\u0E15\u0E34\u0E17\u0E35\u0E48\u0E08\u0E30\u0E15\u0E49\u0E2D\u0E07 "),G={href:"https://github.com/solana-labs/solana-program-library/blob/78e29e9238e555967b9125799d7d420d7d12b959/token-swap/program/src/state.rs#L100",target:"_blank",rel:"noopener noreferrer"},H=s("\u0E40\u0E01\u0E47\u0E1A bump seed"),J=s(" \u0E44\u0E27\u0E49\u0E43\u0E19 account data \u0E19\u0E31\u0E49\u0E19\u0E46 \u0E14\u0E49\u0E27\u0E22. \u0E21\u0E31\u0E19\u0E08\u0E30\u0E17\u0E33\u0E43\u0E2B\u0E49\u0E19\u0E31\u0E01\u0E1E\u0E31\u0E12\u0E19\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E15\u0E23\u0E27\u0E08\u0E2A\u0E2D\u0E1A PDA \u0E44\u0E14\u0E49\u0E07\u0E48\u0E32\u0E22\u0E02\u0E36\u0E49\u0E19\u0E42\u0E14\u0E22\u0E44\u0E21\u0E48\u0E15\u0E49\u0E2D\u0E07\u0E2A\u0E48\u0E07 bump \u0E21\u0E32\u0E43\u0E19 instruction argument."),K=e("h2",{id:"\u0E41\u0E2B\u0E25\u0E48\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#\u0E41\u0E2B\u0E25\u0E48\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19","aria-hidden":"true"},"#"),s(" \u0E41\u0E2B\u0E25\u0E48\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19")],-1),M={href:"https://docs.solana.com/developing/programming-model/calling-between-programs#program-derived-addresses",target:"_blank",rel:"noopener noreferrer"},Q=s("Official Documentation"),W={href:"https://www.brianfriel.xyz/understanding-program-derived-addresses/",target:"_blank",rel:"noopener noreferrer"},X=s("Understanding Program Derived Addresses");function Y(Z,$){const o=a("ExternalLinkIcon"),t=a("RouterLink");return d(),c(l,null,[u,e("p",null,[g,e("a",b,[f,r(o)]),v]),P,e("div",A,[D,e("ul",null,[k,x,y,e("li",null,[w,e("a",I,[L,r(o)])]),S,e("li",null,[C,r(t,{to:"/th/guides/account-maps.html"},{default:n(()=>[N]),_:1})])])]),V,e("p",null,[B,E,F,r(t,{to:"/th/references/accounts.html#sign-with-a-pda"},{default:n(()=>[R]),_:1}),z,O,T,U,j]),e("p",null,[q,e("a",G,[H,r(o)]),J]),K,e("ul",null,[e("li",null,[e("a",M,[Q,r(o)])]),e("li",null,[e("a",W,[X,r(o)])])])],64)}var se=i(m,[["render",Y]]);export{se as default}; +import{_ as i,r as a,o as d,c,a as e,b as r,w as n,F as l,d as s,e as p}from"./app.2fbb9e96.js";var _="/assets/account-matrix.c3a79f80.png",h="/assets/pda-curve.7c0b9307.png";const m={},u=e("h1",{id:"program-derived-addresses-pdas",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#program-derived-addresses-pdas","aria-hidden":"true"},"#"),s(" Program Derived Addresses (PDAs)")],-1),g=s("Program Derived Addresses (PDAs) \u0E04\u0E37\u0E2D\u0E2A\u0E34\u0E48\u0E07\u0E17\u0E35\u0E48\u0E40\u0E0A\u0E37\u0E48\u0E2D\u0E21\u0E42\u0E22\u0E07\u0E01\u0E31\u0E1A accounts \u0E17\u0E35\u0E48\u0E2D\u0E2D\u0E01\u0E41\u0E1A\u0E1A\u0E21\u0E32\u0E43\u0E2B\u0E49\u0E16\u0E39\u0E01\u0E04\u0E27\u0E1A\u0E04\u0E38\u0E21\u0E42\u0E14\u0E22 program \u0E17\u0E35\u0E48\u0E23\u0E30\u0E1A\u0E38\u0E44\u0E27\u0E49. \u0E16\u0E49\u0E32\u0E21\u0E35 PDAs \u0E15\u0E31\u0E27 programs \u0E01\u0E47\u0E08\u0E30\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 sign \u0E44\u0E14\u0E49\u0E14\u0E49\u0E27\u0E22 program (programmatically sign) \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A addresses \u0E17\u0E35\u0E48\u0E40\u0E08\u0E32\u0E30\u0E08\u0E07\u0E44\u0E27\u0E49\u0E42\u0E14\u0E22\u0E44\u0E21\u0E48\u0E15\u0E49\u0E2D\u0E07\u0E43\u0E0A\u0E49 private key. PDAs \u0E21\u0E35\u0E44\u0E27\u0E49\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E17\u0E33 CPI "),b={href:"https://docs.solana.com/developing/programming-model/calling-between-programs#cross-program-invocations",target:"_blank",rel:"noopener noreferrer"},f=s("Cross-Program Invocation"),v=s(", \u0E42\u0E14\u0E22\u0E08\u0E30\u0E2D\u0E19\u0E38\u0E0D\u0E32\u0E15 Solana apps \u0E43\u0E2B\u0E49\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 \u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19\u0E23\u0E48\u0E27\u0E21\u0E01\u0E31\u0E19 (composable) \u200B\u0E01\u0E31\u0E1A program \u0E2D\u0E37\u0E48\u0E19\u0E46 \u0E44\u0E14\u0E49."),P=e("h2",{id:"\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49","aria-hidden":"true"},"#"),s(" \u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49")],-1),A={class:"custom-container tip"},D=e("p",{class:"custom-container-title"},"Fact Sheet",-1),k=e("li",null,"PDAs \u0E04\u0E37\u0E2D 32 byte strings \u0E17\u0E35\u0E48\u0E14\u0E39\u0E40\u0E2B\u0E21\u0E37\u0E2D\u0E19 public keys, \u0E41\u0E15\u0E48\u0E08\u0E30\u0E44\u0E21\u0E48\u0E21\u0E35 private keys",-1),x=e("li",null,[e("code",null,"findProgramAddress"),s(" \u0E08\u0E30\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E2A\u0E37\u0E1A\u0E17\u0E2D\u0E14(derive) \u0E41\u0E1A\u0E1A deterministic \u0E40\u0E1B\u0E47\u0E19 PDA \u0E08\u0E32\u0E01 programId \u0E41\u0E25\u0E30 seeds (\u0E0A\u0E38\u0E14\u0E02\u0E2D\u0E07 bytes)")],-1),y=e("li",null,"bump (1 byte) \u0E08\u0E30\u0E40\u0E2D\u0E32\u0E44\u0E27\u0E49\u0E40\u0E1E\u0E34\u0E48\u0E21\u0E42\u0E2D\u0E01\u0E32\u0E2A\u0E17\u0E35\u0E48 PDA \u0E08\u0E30\u0E2B\u0E25\u0E38\u0E14\u0E08\u0E32\u0E01 ed25519 elliptic curve",-1),w=s("Programs \u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 sign \u0E43\u0E2B\u0E49 PDAs \u0E44\u0E14\u0E49\u0E14\u0E49\u0E27\u0E22\u0E01\u0E32\u0E23\u0E40\u0E15\u0E23\u0E35\u0E22\u0E21 seeds \u0E41\u0E25\u0E30 bump \u0E44\u0E27\u0E49\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E43\u0E0A\u0E49\u0E43\u0E19\u0E01\u0E32\u0E23 "),I={href:"https://docs.solana.com/developing/programming-model/calling-between-programs#program-signed-accounts",target:"_blank",rel:"noopener noreferrer"},L=s("invoke_signed"),S=e("li",null,"PDA \u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 sign \u0E14\u0E49\u0E27\u0E22 program \u0E17\u0E35\u0E48\u0E21\u0E31\u0E19 derived \u0E21\u0E32\u0E40\u0E17\u0E48\u0E32\u0E19\u0E31\u0E49\u0E19",-1),C=s("\u0E43\u0E19\u0E01\u0E32\u0E23\u0E17\u0E35\u0E48\u0E08\u0E30\u0E17\u0E33\u0E43\u0E2B\u0E49 programs \u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 sign \u0E43\u0E19 instructions \u0E17\u0E35\u0E48\u0E15\u0E48\u0E32\u0E07\u0E01\u0E31\u0E19, PDAs \u0E08\u0E30\u0E15\u0E49\u0E2D\u0E07\u0E40\u0E15\u0E23\u0E35\u0E22\u0E21 interface \u0E04\u0E25\u0E49\u0E32\u0E22\u0E46 hashmap \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A "),N=s("indexing accounts"),V=p('

    \u0E25\u0E07\u0E25\u0E36\u0E01

    PDAs \u0E04\u0E37\u0E2D\u0E2A\u0E48\u0E27\u0E19\u0E2A\u0E33\u0E04\u0E31\u0E0D\u0E43\u0E19\u0E01\u0E32\u0E23\u0E1E\u0E31\u0E12\u0E19\u0E32 programs \u0E1A\u0E19 Solana. \u0E16\u0E49\u0E32\u0E21\u0E35 PDAs, programs \u0E01\u0E47\u0E08\u0E30\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 sign \u0E41\u0E17\u0E19 accounts \u0E43\u0E19\u0E02\u0E13\u0E30\u0E17\u0E35\u0E48\u0E23\u0E31\u0E1A\u0E1B\u0E23\u0E30\u0E01\u0E31\u0E19\u0E44\u0E14\u0E49\u0E27\u0E48\u0E32\u0E08\u0E30\u0E44\u0E21\u0E48\u0E21\u0E35 user \u0E2D\u0E37\u0E48\u0E19\u0E21\u0E32\u0E2A\u0E23\u0E49\u0E32\u0E07 signature \u0E17\u0E35\u0E48\u0E40\u0E2B\u0E21\u0E37\u0E2D\u0E19\u0E01\u0E31\u0E19\u0E44\u0E14\u0E49. \u0E19\u0E2D\u0E01\u0E08\u0E32\u0E01\u0E17\u0E35\u0E48\u0E08\u0E30 sign \u0E41\u0E17\u0E19 account \u0E44\u0E14\u0E49\u0E41\u0E25\u0E49\u0E27 \u0E1A\u0E32\u0E07 programs \u0E22\u0E31\u0E07\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E40\u0E1B\u0E25\u0E35\u0E48\u0E22\u0E19\u0E41\u0E1B\u0E25\u0E07 accounts \u0E17\u0E35\u0E48\u0E21\u0E31\u0E19\u0E16\u0E37\u0E2D PDAs \u0E44\u0E27\u0E49\u0E44\u0E14\u0E49\u0E14\u0E49\u0E27\u0E22

    Accounts matrix

    Image courtesy of Pencilflip

    \u0E01\u0E32\u0E23\u0E2A\u0E23\u0E49\u0E32\u0E07 PDAs

    \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E17\u0E35\u0E48\u0E08\u0E30\u0E40\u0E02\u0E49\u0E32\u0E43\u0E08\u0E2B\u0E25\u0E31\u0E01\u0E01\u0E32\u0E23\u0E40\u0E1A\u0E37\u0E49\u0E2D\u0E07\u0E2B\u0E25\u0E31\u0E07 PDAs, \u0E40\u0E23\u0E32\u0E2D\u0E32\u0E08\u0E08\u0E30\u0E15\u0E49\u0E2D\u0E07\u0E40\u0E02\u0E49\u0E32\u0E43\u0E08\u0E01\u0E48\u0E2D\u0E19\u0E27\u0E48\u0E32 PDAs \u0E08\u0E23\u0E34\u0E07\u0E46 \u0E41\u0E25\u0E49\u0E27\u0E44\u0E21\u0E48\u0E44\u0E14\u0E49\u0E16\u0E39\u0E01\u0E2A\u0E23\u0E49\u0E32\u0E07\u0E02\u0E36\u0E49\u0E19\u0E21\u0E32\u0E41\u0E15\u0E48\u0E40\u0E1B\u0E47\u0E19\u0E01\u0E32\u0E23\u0E04\u0E49\u0E19\u0E2B\u0E32\u0E08\u0E19\u0E40\u0E08\u0E2D. PDAs \u0E40\u0E01\u0E34\u0E14\u0E08\u0E32\u0E01\u0E01\u0E32\u0E23\u0E1C\u0E2A\u0E21 seeds (\u0E40\u0E0A\u0E48\u0E19 \u201Cvote_account\u201D) \u0E41\u0E25\u0E30 program id. \u0E01\u0E32\u0E23\u0E1C\u0E2A\u0E21\u0E01\u0E31\u0E19\u0E02\u0E2D\u0E07 seeds \u0E41\u0E25\u0E30 program id \u0E08\u0E30 run \u0E1C\u0E48\u0E32\u0E19 sha256 hash function \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E14\u0E39\u0E27\u0E48\u0E32 public key \u0E19\u0E31\u0E49\u0E19\u0E15\u0E01\u0E2D\u0E22\u0E39\u0E48\u0E1A\u0E19 ed25519 elliptic curve \u0E2B\u0E23\u0E37\u0E2D\u0E44\u0E21\u0E48.

    \u0E43\u0E19\u0E01\u0E32\u0E23 run program id \u0E41\u0E25\u0E30 seeds \u0E1C\u0E48\u0E32\u0E19 hash function \u0E08\u0E30\u0E21\u0E35\u0E04\u0E27\u0E32\u0E21\u0E40\u0E1B\u0E47\u0E19\u0E44\u0E1B\u0E44\u0E14\u0E49\u0E1B\u0E23\u0E30\u0E21\u0E32\u0E13 ~50% \u0E17\u0E35\u0E48\u0E08\u0E30\u0E44\u0E14\u0E49 valid public key \u0E17\u0E35\u0E48\u0E15\u0E01\u0E2D\u0E22\u0E39\u0E48\u0E1A\u0E19 elliptic curve. \u0E43\u0E19\u0E01\u0E23\u0E13\u0E35\u0E19\u0E35\u0E49 \u0E08\u0E30\u0E40\u0E1E\u0E34\u0E48\u0E21\u0E2D\u0E30\u0E44\u0E23\u0E1A\u0E32\u0E07\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E41\u0E01\u0E25\u0E49\u0E07 (fudge) \u0E43\u0E2B\u0E49 input \u0E02\u0E22\u0E31\u0E1A\u0E44\u0E1B\u0E19\u0E34\u0E14\u0E2B\u0E19\u0E48\u0E2D\u0E22\u0E41\u0E25\u0E49\u0E27\u0E01\u0E47\u0E25\u0E2D\u0E07\u0E43\u0E2B\u0E21\u0E48\u0E2D\u0E35\u0E01\u0E04\u0E23\u0E31\u0E49\u0E07. \u0E28\u0E31\u0E1E\u0E17\u0E4C\u0E17\u0E32\u0E07\u0E40\u0E17\u0E04\u0E19\u0E34\u0E04\u0E02\u0E2D\u0E07\u0E01\u0E32\u0E23 fudge \u0E19\u0E35\u0E49\u0E01\u0E47\u0E04\u0E37\u0E2D bump. \u0E43\u0E19 Solana, \u0E40\u0E23\u0E32\u0E08\u0E30\u0E40\u0E23\u0E34\u0E48\u0E21\u0E14\u0E49\u0E27\u0E22 bump = 255 \u0E41\u0E25\u0E30\u0E04\u0E48\u0E2D\u0E22\u0E46 \u0E25\u0E14\u0E25\u0E07\u0E40\u0E1B\u0E47\u0E19 bump = 254, bump = 253, \u0E40\u0E23\u0E37\u0E48\u0E2D\u0E22\u0E46 \u0E08\u0E19\u0E40\u0E23\u0E32\u0E44\u0E14\u0E49 address \u0E17\u0E35\u0E48\u0E44\u0E21\u0E48\u0E2D\u0E22\u0E39\u0E48\u0E1A\u0E19 elliptic curve. \u0E19\u0E35\u0E48\u0E2D\u0E32\u0E08\u0E08\u0E30\u0E1F\u0E31\u0E07\u0E14\u0E39\u0E07\u0E48\u0E32\u0E22\u0E46 \u0E41\u0E15\u0E48\u0E40\u0E21\u0E37\u0E48\u0E2D\u0E21\u0E31\u0E19\u0E40\u0E08\u0E2D address \u0E21\u0E31\u0E19\u0E01\u0E47\u0E08\u0E30\u0E40\u0E1B\u0E47\u0E19\u0E27\u0E34\u0E18\u0E35\u0E43\u0E19\u0E41\u0E1A\u0E1A deterministic \u0E17\u0E35\u0E48\u0E08\u0E30\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 derive PDA \u0E40\u0E14\u0E34\u0E21\u0E2D\u0E2D\u0E01\u0E21\u0E32\u0E44\u0E14\u0E49.

    PDA on the ellipitic curve

    \u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19 PDAs

    ',9),B=s("\u0E40\u0E21\u0E37\u0E48\u0E2D PDA \u0E16\u0E39\u0E01\u0E2A\u0E23\u0E49\u0E32\u0E07\u0E21\u0E32\u0E41\u0E25\u0E49\u0E27, "),E=e("code",null,"findProgramAddress",-1),F=s(" \u0E08\u0E30\u0E04\u0E37\u0E19 address \u0E41\u0E25\u0E30 bump \u0E17\u0E35\u0E48\u0E43\u0E0A\u0E49\u0E40\u0E15\u0E30 address \u0E2D\u0E2D\u0E01\u0E08\u0E32\u0E01 elliptic curve. \u0E16\u0E49\u0E32\u0E21\u0E35 bump \u0E19\u0E35\u0E49, program \u0E01\u0E47\u0E08\u0E30\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 "),R=s("sign"),z=s(" instruction \u0E43\u0E14\u0E46\u0E17\u0E35\u0E48\u0E15\u0E49\u0E2D\u0E07\u0E01\u0E32\u0E23 PDA. \u0E43\u0E19\u0E01\u0E32\u0E23\u0E17\u0E35\u0E48\u0E08\u0E30 sign, \u0E15\u0E31\u0E27 programs \u0E15\u0E49\u0E2D\u0E07\u0E2A\u0E48\u0E07 instruction, list \u0E02\u0E2D\u0E07 accounts, \u0E41\u0E25\u0E30 seeds \u0E01\u0E31\u0E1A bump \u0E17\u0E35\u0E48\u0E43\u0E0A\u0E49 derive \u0E15\u0E31\u0E27 PDA \u0E44\u0E1B "),O=e("code",null,"invoke_signed",-1),T=s(". \u0E19\u0E2D\u0E01\u0E08\u0E32\u0E01\u0E19\u0E35\u0E49\u0E43\u0E19\u0E01\u0E32\u0E23 sign \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A instructions, PDAs \u0E08\u0E30\u0E15\u0E49\u0E2D\u0E07 sign \u0E1C\u0E48\u0E32\u0E19 "),U=e("code",null,"invoke_signed",-1),j=s(" \u0E14\u0E49\u0E27\u0E22."),q=s("\u0E40\u0E21\u0E37\u0E48\u0E2D\u0E08\u0E30\u0E43\u0E0A\u0E49 PDAs, \u0E21\u0E31\u0E19\u0E40\u0E1B\u0E47\u0E19\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E1B\u0E01\u0E15\u0E34\u0E17\u0E35\u0E48\u0E08\u0E30\u0E15\u0E49\u0E2D\u0E07 "),G={href:"https://github.com/solana-labs/solana-program-library/blob/78e29e9238e555967b9125799d7d420d7d12b959/token-swap/program/src/state.rs#L100",target:"_blank",rel:"noopener noreferrer"},H=s("\u0E40\u0E01\u0E47\u0E1A bump seed"),J=s(" \u0E44\u0E27\u0E49\u0E43\u0E19 account data \u0E19\u0E31\u0E49\u0E19\u0E46 \u0E14\u0E49\u0E27\u0E22. \u0E21\u0E31\u0E19\u0E08\u0E30\u0E17\u0E33\u0E43\u0E2B\u0E49\u0E19\u0E31\u0E01\u0E1E\u0E31\u0E12\u0E19\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E15\u0E23\u0E27\u0E08\u0E2A\u0E2D\u0E1A PDA \u0E44\u0E14\u0E49\u0E07\u0E48\u0E32\u0E22\u0E02\u0E36\u0E49\u0E19\u0E42\u0E14\u0E22\u0E44\u0E21\u0E48\u0E15\u0E49\u0E2D\u0E07\u0E2A\u0E48\u0E07 bump \u0E21\u0E32\u0E43\u0E19 instruction argument."),K=e("h2",{id:"\u0E41\u0E2B\u0E25\u0E48\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#\u0E41\u0E2B\u0E25\u0E48\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19","aria-hidden":"true"},"#"),s(" \u0E41\u0E2B\u0E25\u0E48\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19")],-1),M={href:"https://docs.solana.com/developing/programming-model/calling-between-programs#program-derived-addresses",target:"_blank",rel:"noopener noreferrer"},Q=s("Official Documentation"),W={href:"https://www.brianfriel.xyz/understanding-program-derived-addresses/",target:"_blank",rel:"noopener noreferrer"},X=s("Understanding Program Derived Addresses");function Y(Z,$){const o=a("ExternalLinkIcon"),t=a("RouterLink");return d(),c(l,null,[u,e("p",null,[g,e("a",b,[f,r(o)]),v]),P,e("div",A,[D,e("ul",null,[k,x,y,e("li",null,[w,e("a",I,[L,r(o)])]),S,e("li",null,[C,r(t,{to:"/th/guides/account-maps.html"},{default:n(()=>[N]),_:1})])])]),V,e("p",null,[B,E,F,r(t,{to:"/th/references/accounts.html#sign-with-a-pda"},{default:n(()=>[R]),_:1}),z,O,T,U,j]),e("p",null,[q,e("a",G,[H,r(o)]),J]),K,e("ul",null,[e("li",null,[e("a",M,[Q,r(o)])]),e("li",null,[e("a",W,[X,r(o)])])])],64)}var se=i(m,[["render",Y]]);export{se as default}; diff --git a/docs/.vuepress/dist/assets/pdas.html.44474a60.js b/docs/.vuepress/dist/assets/pdas.html.44474a60.js deleted file mode 100644 index 5c1909300..000000000 --- a/docs/.vuepress/dist/assets/pdas.html.44474a60.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,r as h,o as a,c as r,a as t,b as c,w as i,F as d,d as n,e as l}from"./app.cfdf84e7.js";var g="/assets/account-matrix.c3a79f80.png",_="/assets/pda-curve.7c0b9307.png";const u={},p=t("h1",{id:"program-derived-addresses-pdas",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#program-derived-addresses-pdas","aria-hidden":"true"},"#"),n(" Program Derived Addresses (PDAs)")],-1),m=n("Program Derived Addresses (hay c\xF2n g\u1ECDi v\u1EAFn t\u1EAFt l\xE0 PDA) l\xE0 nh\u1EEFng Account \u0111\u01B0\u1EE3c thi\u1EBFt k\u1EBF cho c\xE1c Program c\xF3 th\u1EC3 ki\u1EC3m so\xE1t. V\u1EDBi PDA, Program c\xF3 th\u1EC3 l\u1EADp tr\xECnh \u0111\u01B0\u1EE3c ch\u1EEF k\xFD cho m\u1ED9t s\u1ED1 \u0111\u1ECBa ch\u1EC9 c\u1EE5 th\u1EC3 m\xE0 kh\xF4ng c\u1EA7n kho\xE1 ri\xEAng t\u01B0 - private key. PDA l\xE0 c\u01A1 s\u1EDF \u0111\u1EC3 hi\u1EC7n th\u1EF1c "),b={href:"https://docs.solana.com/developing/programming-model/calling-between-programs#cross-program-invocations",target:"_blank",rel:"noopener noreferrer"},k=n("Cross-Program Invocation"),v=n(", trong \u0111\xF3 Solana cho ph\xE9p c\xE1c Program c\xF3 th\u1EC3 t\u01B0\u01A1ng t\xE1c c\u0169ng nh\u01B0 k\u1EBFt h\u1EE3p v\u1EDBi nhau \u0111\u1EC3 t\u1EA1o n\xEAn m\u1ED9t h\u1EC7 th\u1ED1ng ph\u1EE9c t\u1EA1p h\u01A1n."),P=t("h2",{id:"co-the-ban-chua-biet",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#co-the-ban-chua-biet","aria-hidden":"true"},"#"),n(" C\xF3 th\u1EC3 b\u1EA1n ch\u01B0a bi\u1EBFt")],-1),A={class:"custom-container tip"},f=t("p",{class:"custom-container-title"},"Nh\u1EEFng \u0111i\u1EC1u c\xF3 th\u1EC3 b\u1EA1n ch\u01B0a bi\u1EBFt",-1),D=t("li",null,"PDA l\xE0 m\u1ED9t chu\u1ED7i 32 byte t\u01B0\u01A1ng t\u1EF1 kho\xE1 c\xF4ng khai - public keys, nh\u01B0ng l\u1EA1i kh\xF4ng t\u1ED3n t\u1EA1i kho\xE1 ri\xEAng t\u01B0 t\u01B0\u01A1ng \u1EE9ng",-1),y=t("li",null,[t("code",null,"findProgramAddress"),n(" \u0111\u01B0\u1EE3c d\xF9ng \u0111\u1EC3 suy ra m\u1ED9t PDA t\u1EEB th\xF4ng tin "),t("code",null,"program_id"),n(" v\xE0 "),t("code",null,"seeds"),n(" (m\u1ED9t t\u1EADp h\u1EE3p c\xE1c bytes)")],-1),x=t("li",null,[n("M\u1ED9t "),t("code",null,"bump"),n(" (c\xF3 gi\xE1 tr\u1ECB 1 byte) \u0111\u01B0\u1EE3c d\xF9ng \u0111\u1EC3 t\u1EA1o ra m\u1ED9t PDA kh\u1EA3 d\u0129 n\u1EB1m ngo\xE0i \u0111\u01B0\u1EDDng cong ellipitic ed25519.")],-1),w=n("Program c\xF3 th\u1EC3 t\u1EA1o ra ch\u1EEF cho PDA b\u1EB1ng c\xE1ch cung c\u1EA5p "),N=t("code",null,"seeds",-1),V=n(" v\xE0 "),q=t("code",null,"bump",-1),C=n(" cho h\xE0m "),L={href:"https://docs.solana.com/developing/programming-model/calling-between-programs#program-signed-accounts",target:"_blank",rel:"noopener noreferrer"},T=n("invoke_signed"),S=t("li",null,"M\u1ED9t PDA ch\u1EC9 c\xF3 th\u1EC3 \u0111\u01B0\u1EE3c k\xFD b\u1EDFi Program m\xE0 n\xF3 \u0111\u01B0\u1EE3c suy ra.",-1),B=n("Ngo\xE0i vi\u1EC7c cho ph\xE9p Program ch\xF3 th\u1EC3 k\xFD l\xEAn c\xE1c ch\u1EC9 th\u1ECB, PDA c\u0169ng cung c\u1EA5p m\u1ED9t giao di\u1EC7n gi\u1ED1ng v\u1EDBi hashmap d\xE0nh cho vi\u1EC7c "),E=n("\u0111\xE1nh ch\u1EC9 s\u1ED1 Account"),I=l('

    Chi ti\u1EBFt

    PDA l\xE0 m\u1ED9t kh\u1ED1i c\u01A1 s\u1EDF cho vi\u1EC7c l\u1EADp tr\xECnh tr\xEAn Solana. V\u1EDBi PDA, Program c\xF3 th\u1EC3 k\xFD cho nhi\u1EC1u Account trong khi \u0111\u1EA3m b\u1EA3o r\u1EB1ng kh\xF4ng t\u1ED3n t\u1EA1i ng\u01B0\u1EDDi d\xF9ng n\xE0o c\xF3 th\u1EC3 gi\u1EA3 m\u1EA1o ch\u1EEF k\xFD cho c\xF9ng Account \u0111\xF3. Ngo\xE0i vi\u1EC7c t\u1EA1o ra ch\u1EEF k\xFD, Program c\u0169ng c\xF3 th\u1EC3 ch\u1EC9nh s\u1EEDa Account \u0111\u01B0\u1EE3c s\u1EDF h\u1EEFu b\u1EDFi PDA c\u1EE7a n\xF3.

    Accounts matrix

    H\xECnh \u1EA3nh \u0111\u01B0\u1EE3c cho ph\xE9p b\u1EDDi Pencilflip

    C\xE1ch sinh PDA

    \u0110\u1EC3 hi\u1EC3u \u0111\u01B0\u1EE3c kh\xE1i ni\u1EC7m \u0111\u1EB1ng sau PDA, l\xE0 c\u1EA7n thi\u1EBFt \u0111\u1EC3 l\xE0m r\xF5 r\u1EB1ng PDA kh\xF4ng ph\u1EA3i \u0111\u01B0\u1EE3c "t\u1EA1o ra" m\xE0 l\xE0 "t\xECm ra". PDA \u0111\u01B0\u1EE3c sinh ra t\u1EEB qu\xE1 tr\xECnh k\u1EBFt h\u1EE3p gi\u1EEFa seeds (v\xED d\u1EE5 nh\u01B0 chu\u1ED7i k\xFD t\u1EF1 \u201Cvote_account\u201D) v\xE0 program_id. Vi\u1EC7c k\u1EBFt h\u1EE3p n\xE0y \u0111\u01B0\u1EE3c cho qua m\u1ED9t h\xE0m b\u0103m - sha256 - \u0111\u1EC3 th\u1EED xem gi\xE1 tr\u1ECB t\u1EA1o ra c\xF3 ph\u1EA3i l\xE0 m\u1ED9t kho\xE1 c\xF4ng khai n\u1EB1m ngo\xE0i \u0111\u01B0\u1EDDng cong ellipitic ed25519 hay kh\xF4ng.

    Qu\xE1 tr\xECnh th\u1EED n\xE0y s\u1EBD c\xF3 x\xE1c su\u1EA5t 50/50. Ngh\u0129a l\xE0 s\u1EBD c\xF3 50% c\u01A1 h\u1ED9i qu\xE1 tr\xECnh sinh ra m\u1ED9t kho\xE1 c\xF4ng khai n\u1EB1m tr\xEAn \u0111\u01B0\u1EDDng cong ellipitic ed25519. Trong tr\u01B0\u1EDDng h\u1EE3p \u0111\xF3, ch\xFAng ta \u0111\u01A1n gi\u1EA3n ch\u1EC9 c\u1EA7n th\xEAm m\u1ED9t v\xE0i bit v\xE0o \u0111\u1EA7u v\xE0o \u0111\u1EC3 th\u1EED l\u1EA1i. Nh\u1EEFng bit \u0111\u01B0\u1EE3c th\xEAm v\xE0o trong thu\u1EADt ng\u1EEF k\u1EF9 thu\u1EADt \u0111\u01B0\u1EE3c g\u1ECDi l\xE0 bump. Trong Solana, ch\xFAng ta b\u1EAFt \u0111\u1EA7u v\u1EDBi bump = 255 v\xE0 ti\u1EBFp t\u1EE5c gi\u1EA3m xu\u1ED1ng 254, 253 c\u1EE9 th\u1EC3 cho \u0111\u1EBFn khi t\xECm \u0111\u01B0\u1EE3c \u0111\u1ECBa ch\u1EC9 PDA kh\xF4ng n\u1EB1m tr\xEAn \u0111\u01B0\u1EDDng cong ellipitic. Vi\u1EC7c n\xE0y c\xF3 v\u1EBB th\xF4 s\u01A1, nh\u01B0ng th\u1EF1c ra n\xF3 l\u1EA1i cho ch\xFAng ta m\u1ED9t ph\u01B0\u01A1ng ph\xE1p b\u1EA5t bi\u1EBFn \u0111\u1EC3 suy ra PDA cho c\xE1c l\u1EA7n th\u1EED kh\xE1c nhau, mi\u1EC5n l\xE0 c\xF9ng m\u1ED9t gi\xE1 tr\u1ECB \u0111\u1EA7u v\xE0o.

    PDA on the ellipitic curve

    T\u01B0\u01A1ng t\xE1c v\u1EDBi PDAs

    ',9),F=n("Khi m\u1ED9t PDA \u0111\u01B0\u1EE3c sinh ra, "),K=t("code",null,"findProgramAddress",-1),M=n(" s\xE9 tr\u1EA3 v\u1EC1 hai gi\xE1 tr\u1ECB l\xE0 \u0111\u1ECBa ch\u1EC9 c\u1EE7a PDA v\xE0 "),R=t("code",null,"bump",-1),z=n(" d\xF9ng \u0111\u1EC3 \u0111\u1EA3m b\u1EA3o PDA n\xE0y ngo\xE0i \u0111\u01B0\u1EDDng cong ellipitic. V\u1EDBi gi\xE1 tr\u1ECB "),H=t("code",null,"bump",-1),Q=n(" n\xE0y, Program c\xF3 th\u1EC3 "),U=n("k\xFD l\xEAn"),j=n(" b\u1EA5t k\u1EF3 ch\u1EC9 th\u1ECB n\xE0o c\xF3 ch\u1EE9a PDA c\u1EE7a n\xF3 v\u1EC1 sau. \u0110\u1EC3 k\xFD, Program ph\u1EA3i truy\u1EC1n cho ch\u1EC9 th\u1ECB m\u1ED9t danh s\xE1ch c\xE1c Account, c\xE1c "),G=t("code",null,"seeds",-1),J=n(" v\xE0 "),O=t("code",null,"bump",-1),W=n(" d\xF9ng \u0111\u1EC3 suy ra PDA v\xE0o h\xE0m "),X=t("code",null,"invoke_signed",-1),Y=n(". Ngo\xE0i vi\u1EC7c k\xFD l\xEAn ch\u1EC9 th\u1ECB, PDA c\xF2n k\xFD cho vi\u1EC7c t\u1EA1o ra ch\xEDnh b\u1EA3n th\xE2n n\xF3 th\xF4ng qua h\xE0m "),Z=t("code",null,"invoke_signed",-1),$=n("."),tt=n("Khi ph\xE1t tri\u1EC3n \u1EE9ng d\u1EE5ng v\u1EDBi PDA, th\u01B0\u1EDDng th\xEC b\u1EA1n s\u1EBD ph\u1EA3i "),nt={href:"https://github.com/solana-labs/solana-program-library/blob/78e29e9238e555967b9125799d7d420d7d12b959/token-swap/program/src/state.rs#L100",target:"_blank",rel:"noopener noreferrer"},ct=n("l\u01B0u bump"),ot=n(" trong d\u1EEF li\u1EC7u Account. \u0110i\u1EC1u n\xE0y cho ph\xE9p l\u1EADp tr\xECnh vi\xEAn c\xF3 th\u1EC3 ki\u1EC3m tra PDA m\xE0 kh\xF4ng c\u1EA7n truy\u1EC1n bump v\xE0o d\u1EEF li\u1EC7u \u0111\u1EA7u v\xE0o c\u1EE7a ch\u1EC9 th\u1ECB."),et=t("h2",{id:"cac-nguon-tai-lieu-khac",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#cac-nguon-tai-lieu-khac","aria-hidden":"true"},"#"),n(),t("a",{name:"resources"}),n(" C\xE1c ngu\u1ED3n t\xE0i li\u1EC7u kh\xE1c")],-1),ht={href:"https://docs.solana.com/developing/programming-model/calling-between-programs#program-derived-addresses",target:"_blank",rel:"noopener noreferrer"},it=n("T\xE0i li\u1EC7u ch\xEDnh th\u1ED1ng"),st={href:"https://www.brianfriel.xyz/understanding-program-derived-addresses/",target:"_blank",rel:"noopener noreferrer"},at=n("Understanding Program Derived Addresses");function rt(dt,lt){const o=h("ExternalLinkIcon"),e=h("RouterLink");return a(),r(d,null,[p,t("p",null,[m,t("a",b,[k,c(o)]),v]),P,t("div",A,[f,t("ul",null,[D,y,x,t("li",null,[w,N,V,q,C,t("a",L,[T,c(o)])]),S,t("li",null,[B,c(e,{to:"/vi/guides/account-maps.html"},{default:i(()=>[E]),_:1})])])]),I,t("p",null,[F,K,M,R,z,H,Q,c(e,{to:"/vi/references/accounts.html#sign-with-a-pda"},{default:i(()=>[U]),_:1}),j,G,J,O,W,X,Y,Z,$]),t("p",null,[tt,t("a",nt,[ct,c(o)]),ot]),et,t("ul",null,[t("li",null,[t("a",ht,[it,c(o)])]),t("li",null,[t("a",st,[at,c(o)])])])],64)}var _t=s(u,[["render",rt]]);export{_t as default}; diff --git a/docs/.vuepress/dist/assets/pdas.html.163126cb.js b/docs/.vuepress/dist/assets/pdas.html.4cb1789d.js similarity index 99% rename from docs/.vuepress/dist/assets/pdas.html.163126cb.js rename to docs/.vuepress/dist/assets/pdas.html.4cb1789d.js index 31f3c4df7..208ed57f6 100644 --- a/docs/.vuepress/dist/assets/pdas.html.163126cb.js +++ b/docs/.vuepress/dist/assets/pdas.html.4cb1789d.js @@ -1 +1 @@ -import{_ as i,r as o,o as d,c,a as e,b as n,w as t,F as l,d as a,e as u}from"./app.cfdf84e7.js";var p="/assets/account-matrix.c3a79f80.png",m="/assets/pda-curve.7c0b9307.png";const h={},_=e("h1",{id:"direcciones-derivadas-de-programa-pdas",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#direcciones-derivadas-de-programa-pdas","aria-hidden":"true"},"#"),a(" Direcciones derivadas de programa (PDAs)")],-1),g=a("Direcciones derivadas de programa (PDAs) son cuentas dise\xF1adas espec\xEDficamente para ser controladas por programas. Con PDAs, los programas puede firmar para ciertas direcciones sin la necesidad de una llave privada. PDAs sirven como la base para la "),f={href:"https://docs.solana.com/developing/programming-model/calling-between-programs#cross-program-invocations",target:"_blank",rel:"noopener noreferrer"},b=a("Invocaci\xF3n entre programas"),v=a(", que permite la composici\xF3n entre apps de Solana."),A=e("h2",{id:"hechos",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#hechos","aria-hidden":"true"},"#"),a(" Hechos")],-1),P={class:"custom-container tip"},D=e("p",{class:"custom-container-title"},"Hola de hechos",-1),y=e("li",null,"PDAs son cadenas de 32 bytes que lucen como llaves p\xFAblicas pero no tienen una llave privada relacionada",-1),x=e("li",null,[e("code",null,"findProgramAddress"),a(" deriva de forma determinista un PDA de un programId y unas semillas (colecci\xF3n de bytes)")],-1),k=e("li",null,"Un bump (un byte) es usado para empujar a un potencial PDA fuera de la curva el\xEDptica ed25519",-1),q=a("Los programas pueden firmar por sus PDAs usando sus seeds y bump "),w={href:"https://docs.solana.com/developing/programming-model/calling-between-programs#program-signed-accounts",target:"_blank",rel:"noopener noreferrer"},E=a("invoke_signed"),z=e("li",null,"Un PDA solo puede ser firmado por el programa del cual ha sido derivada",-1),L=a("Adem\xE1s de permitir a los programas firmar diferentes instrucciones, PDAs tambi\xE9n brindan una interfaz tipo hashmap para "),C=a("indexar cuentas"),I=u('

    Un vistazo m\xE1s profundo

    Los PDA son un componente esencial para desarrollar programas en Solana. Con las PDA, los programas pueden firmar cuentas mientras garantizan que ning\xFAn usuario externo pueda generar una firma v\xE1lida para la misma. Adem\xE1s de firmar cuentas, ciertos programas tambi\xE9n pueden modificar cuentas en sus PDA.

    Accounts matrix

    Image courtesy of Pencilflip

    Generando PDAs

    Para entender el concepto detr\xE1s de las PDA, puede ser \xFAtil considerar que las PDA no se crean t\xE9cnicamente, sino que se encuentran. Los PDA se generan a partir de una combinaci\xF3n de semillas (como la cadena \u201Cvote_account\u201D) y un id de programa. Esta combinaci\xF3n de semillas y de un id de programa luego se ejecuta a trav\xE9s de una funci\xF3n hash sha256 para ver si generan o no una clave p\xFAblica que se encuentra en la curva el\xEDptica ed25519.

    Al ejecutar el id del programa y las semillas de nuestro programa a trav\xE9s de una funci\xF3n hash, hay una probabilidad de ~50% de que en realidad terminemos con una clave p\xFAblica v\xE1lida que se encuentre en la curva el\xEDptica. En este caso, simplemente agregamos algo para modificar un poco nuestra entrada y lo intentamos de nuevo. El t\xE9rmino t\xE9cnico para este algo es un bump. En Solana, comenzamos con bump = 255 y simplemente iteramos hacia abajo, bump = 254, bump = 253, etc. hasta que obtengamos una direcci\xF3n que no est\xE9 en la curva el\xEDptica. Esto puede parecer rudimentario, pero una vez encontrado nos da una forma determinista de derivar el mismo PDA una y otra vez.

    PDA en la curva el\xEDptica

    Interactuando con PDAs

    ',9),j=a("Cuando un PDA es generado, "),N=e("code",null,"findProgramAddress",-1),S=a(" retorna la direcci\xF3n y el bump usado para sacar la direcci\xF3n fuera de la curva el\xEDptica. Con el bump, un programa puede "),V=a("firmar"),B=a(" por cualquier transacci\xF3n que requiera el PDA. Para firmar, los programas deben pasar la instrucci\xF3n, la lista de las cuentas, las semillas y el bump usado para derivar el PDA a la funci\xF3n "),R=e("code",null,"invoke_signed",-1),U=a(". Adem\xE1s de firmar para instrucciones, PDAs tambi\xE9n deben firmar su propia creaci\xF3n con "),F=e("code",null,"invoke_signed",-1),H=a("."),G=a("Cuando se crean PDAs, es com\xFAn "),O={href:"https://github.com/solana-labs/solana-program-library/blob/78e29e9238e555967b9125799d7d420d7d12b959/token-swap/program/src/state.rs#L100",target:"_blank",rel:"noopener noreferrer"},T=a("guardar el bump y los seeds"),J=a(" en los datos de la misma cuenta. Esto permite a los desarrolladores validar f\xE1cilmente un PDA sin tener que enviar el bump como argumento en la instrucci\xF3n."),K=e("h2",{id:"other-resources",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#other-resources","aria-hidden":"true"},"#"),a(" Other Resources")],-1),M={href:"https://docs.solana.com/developing/programming-model/calling-between-programs#program-derived-addresses",target:"_blank",rel:"noopener noreferrer"},Q=a("Documentaci\xF3n oficial"),W={href:"https://www.brianfriel.xyz/understanding-program-derived-addresses/",target:"_blank",rel:"noopener noreferrer"},X=a("Entendiendo las direcciones derivadas de programa");function Y(Z,$){const r=o("ExternalLinkIcon"),s=o("RouterLink");return d(),c(l,null,[_,e("p",null,[g,e("a",f,[b,n(r)]),v]),A,e("div",P,[D,e("ul",null,[y,x,k,e("li",null,[q,e("a",w,[E,n(r)])]),z,e("li",null,[L,n(s,{to:"/es/guides/account-maps.html"},{default:t(()=>[C]),_:1})])])]),I,e("p",null,[j,N,S,n(s,{to:"/es/references/accounts.html#sign-with-a-pda"},{default:t(()=>[V]),_:1}),B,R,U,F,H]),e("p",null,[G,e("a",O,[T,n(r)]),J]),K,e("ul",null,[e("li",null,[e("a",M,[Q,n(r)])]),e("li",null,[e("a",W,[X,n(r)])])])],64)}var ae=i(h,[["render",Y]]);export{ae as default}; +import{_ as i,r as o,o as d,c,a as e,b as n,w as t,F as l,d as a,e as u}from"./app.2fbb9e96.js";var p="/assets/account-matrix.c3a79f80.png",m="/assets/pda-curve.7c0b9307.png";const h={},_=e("h1",{id:"direcciones-derivadas-de-programa-pdas",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#direcciones-derivadas-de-programa-pdas","aria-hidden":"true"},"#"),a(" Direcciones derivadas de programa (PDAs)")],-1),g=a("Direcciones derivadas de programa (PDAs) son cuentas dise\xF1adas espec\xEDficamente para ser controladas por programas. Con PDAs, los programas puede firmar para ciertas direcciones sin la necesidad de una llave privada. PDAs sirven como la base para la "),f={href:"https://docs.solana.com/developing/programming-model/calling-between-programs#cross-program-invocations",target:"_blank",rel:"noopener noreferrer"},b=a("Invocaci\xF3n entre programas"),v=a(", que permite la composici\xF3n entre apps de Solana."),A=e("h2",{id:"hechos",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#hechos","aria-hidden":"true"},"#"),a(" Hechos")],-1),P={class:"custom-container tip"},D=e("p",{class:"custom-container-title"},"Hola de hechos",-1),y=e("li",null,"PDAs son cadenas de 32 bytes que lucen como llaves p\xFAblicas pero no tienen una llave privada relacionada",-1),x=e("li",null,[e("code",null,"findProgramAddress"),a(" deriva de forma determinista un PDA de un programId y unas semillas (colecci\xF3n de bytes)")],-1),k=e("li",null,"Un bump (un byte) es usado para empujar a un potencial PDA fuera de la curva el\xEDptica ed25519",-1),q=a("Los programas pueden firmar por sus PDAs usando sus seeds y bump "),w={href:"https://docs.solana.com/developing/programming-model/calling-between-programs#program-signed-accounts",target:"_blank",rel:"noopener noreferrer"},E=a("invoke_signed"),z=e("li",null,"Un PDA solo puede ser firmado por el programa del cual ha sido derivada",-1),L=a("Adem\xE1s de permitir a los programas firmar diferentes instrucciones, PDAs tambi\xE9n brindan una interfaz tipo hashmap para "),C=a("indexar cuentas"),I=u('

    Un vistazo m\xE1s profundo

    Los PDA son un componente esencial para desarrollar programas en Solana. Con las PDA, los programas pueden firmar cuentas mientras garantizan que ning\xFAn usuario externo pueda generar una firma v\xE1lida para la misma. Adem\xE1s de firmar cuentas, ciertos programas tambi\xE9n pueden modificar cuentas en sus PDA.

    Accounts matrix

    Image courtesy of Pencilflip

    Generando PDAs

    Para entender el concepto detr\xE1s de las PDA, puede ser \xFAtil considerar que las PDA no se crean t\xE9cnicamente, sino que se encuentran. Los PDA se generan a partir de una combinaci\xF3n de semillas (como la cadena \u201Cvote_account\u201D) y un id de programa. Esta combinaci\xF3n de semillas y de un id de programa luego se ejecuta a trav\xE9s de una funci\xF3n hash sha256 para ver si generan o no una clave p\xFAblica que se encuentra en la curva el\xEDptica ed25519.

    Al ejecutar el id del programa y las semillas de nuestro programa a trav\xE9s de una funci\xF3n hash, hay una probabilidad de ~50% de que en realidad terminemos con una clave p\xFAblica v\xE1lida que se encuentre en la curva el\xEDptica. En este caso, simplemente agregamos algo para modificar un poco nuestra entrada y lo intentamos de nuevo. El t\xE9rmino t\xE9cnico para este algo es un bump. En Solana, comenzamos con bump = 255 y simplemente iteramos hacia abajo, bump = 254, bump = 253, etc. hasta que obtengamos una direcci\xF3n que no est\xE9 en la curva el\xEDptica. Esto puede parecer rudimentario, pero una vez encontrado nos da una forma determinista de derivar el mismo PDA una y otra vez.

    PDA en la curva el\xEDptica

    Interactuando con PDAs

    ',9),j=a("Cuando un PDA es generado, "),N=e("code",null,"findProgramAddress",-1),S=a(" retorna la direcci\xF3n y el bump usado para sacar la direcci\xF3n fuera de la curva el\xEDptica. Con el bump, un programa puede "),V=a("firmar"),B=a(" por cualquier transacci\xF3n que requiera el PDA. Para firmar, los programas deben pasar la instrucci\xF3n, la lista de las cuentas, las semillas y el bump usado para derivar el PDA a la funci\xF3n "),R=e("code",null,"invoke_signed",-1),U=a(". Adem\xE1s de firmar para instrucciones, PDAs tambi\xE9n deben firmar su propia creaci\xF3n con "),F=e("code",null,"invoke_signed",-1),H=a("."),G=a("Cuando se crean PDAs, es com\xFAn "),O={href:"https://github.com/solana-labs/solana-program-library/blob/78e29e9238e555967b9125799d7d420d7d12b959/token-swap/program/src/state.rs#L100",target:"_blank",rel:"noopener noreferrer"},T=a("guardar el bump y los seeds"),J=a(" en los datos de la misma cuenta. Esto permite a los desarrolladores validar f\xE1cilmente un PDA sin tener que enviar el bump como argumento en la instrucci\xF3n."),K=e("h2",{id:"other-resources",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#other-resources","aria-hidden":"true"},"#"),a(" Other Resources")],-1),M={href:"https://docs.solana.com/developing/programming-model/calling-between-programs#program-derived-addresses",target:"_blank",rel:"noopener noreferrer"},Q=a("Documentaci\xF3n oficial"),W={href:"https://www.brianfriel.xyz/understanding-program-derived-addresses/",target:"_blank",rel:"noopener noreferrer"},X=a("Entendiendo las direcciones derivadas de programa");function Y(Z,$){const r=o("ExternalLinkIcon"),s=o("RouterLink");return d(),c(l,null,[_,e("p",null,[g,e("a",f,[b,n(r)]),v]),A,e("div",P,[D,e("ul",null,[y,x,k,e("li",null,[q,e("a",w,[E,n(r)])]),z,e("li",null,[L,n(s,{to:"/es/guides/account-maps.html"},{default:t(()=>[C]),_:1})])])]),I,e("p",null,[j,N,S,n(s,{to:"/es/references/accounts.html#sign-with-a-pda"},{default:t(()=>[V]),_:1}),B,R,U,F,H]),e("p",null,[G,e("a",O,[T,n(r)]),J]),K,e("ul",null,[e("li",null,[e("a",M,[Q,n(r)])]),e("li",null,[e("a",W,[X,n(r)])])])],64)}var ae=i(h,[["render",Y]]);export{ae as default}; diff --git a/docs/.vuepress/dist/assets/pdas.html.f8f48210.js b/docs/.vuepress/dist/assets/pdas.html.6cd183ed.js similarity index 98% rename from docs/.vuepress/dist/assets/pdas.html.f8f48210.js rename to docs/.vuepress/dist/assets/pdas.html.6cd183ed.js index b6e215645..d87116c11 100644 --- a/docs/.vuepress/dist/assets/pdas.html.f8f48210.js +++ b/docs/.vuepress/dist/assets/pdas.html.6cd183ed.js @@ -1 +1 @@ -import{_ as i,r as n,o as d,c,a as e,b as o,w as r,F as l,d as t,e as h}from"./app.cfdf84e7.js";var p="/assets/account-matrix.c3a79f80.png",u="/assets/pda-curve.7c0b9307.png";const g={},m=e("h1",{id:"program-derived-addresses-pdas",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#program-derived-addresses-pdas","aria-hidden":"true"},"#"),t(" Program Derived Addresses (PDAs)")],-1),_=t("Program Derived Addresses (PDAs) are home to accounts that are designed to be controlled by a specific program. With PDAs, programs can programmatically sign for certain addresses without needing a private key. PDAs serve as the foundation for "),f={href:"https://docs.solana.com/developing/programming-model/calling-between-programs#cross-program-invocations",target:"_blank",rel:"noopener noreferrer"},b=t("Cross-Program Invocation"),v=t(", which allows Solana apps to be composable with one another."),w=e("h2",{id:"facts",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#facts","aria-hidden":"true"},"#"),t(" Facts")],-1),A={class:"custom-container tip"},P=e("p",{class:"custom-container-title"},"Fact Sheet",-1),y=e("li",null,"PDAs are 32 byte strings that look like public keys, but don\u2019t have corresponding private keys",-1),D=e("li",null,[e("code",null,"findProgramAddress"),t(" will deterministically derive a PDA from a programId and seeds (collection of bytes)")],-1),k=e("li",null,"A bump (one byte) is used to push a potential PDA off the ed25519 elliptic curve",-1),x=t("Programs can sign for their PDAs by providing the seeds and bump to "),I={href:"https://docs.solana.com/developing/programming-model/calling-between-programs#program-signed-accounts",target:"_blank",rel:"noopener noreferrer"},T=t("invoke_signed"),L=e("li",null,"A PDA can only be signed by the program from which it was derived",-1),S=t("In addition to allowing for programs to sign for different instructions, PDAs also provide a hashmap-like interface for "),F=t("indexing accounts"),N=h('

    Deep Dive

    PDAs are an essential building block for developing programs on Solana. With PDAs, programs can sign for accounts while guaranteeing that no external user could also generate a valid signature for the same account. In addition to signing for accounts, certain programs can also modify accounts held at their PDAs.

    Accounts matrix

    Image courtesy of Pencilflip

    Generating PDAs

    To understand the concept behind PDAs, it may be helpful to consider that PDAs are not technically created, but rather found. PDAs are generated from a combination of seeds (such as the string \u201Cvote_account\u201D) and a program id. This combination of seeds and program id is then run through a sha256 hash function to see whether or not they generate a public key that lies on the ed25519 elliptic curve.

    In running our program id and seeds through a hash function, there is a ~50% chance that we actually end up with a valid public key that does lie on the elliptic curve. In this case, we simply add something to fudge our input a little bit and try again. The technical term for this fudge factor is a bump. In Solana, we start with bump = 255 and simply iterate down through bump = 254, bump = 253, etc. until we get an address that is not on the elliptic curve. This may seem rudimentary, but once found it gives us a deterministic way of deriving the same PDA over and over again.

    PDA on the ellipitic curve

    Interacting with PDAs

    ',9),V=t("When a PDA is generated, "),W=e("code",null,"findProgramAddress",-1),B=t(" will return both the address and the bump used to kick the address off of the elliptic curve. Armed with this bump, a program can then "),C=t("sign"),E=t(" for any instruction that requires its PDA. In order to sign, programs should pass the instruction, the list of accounts, and the seeds and bump used to derive the PDA to "),R=e("code",null,"invoke_signed",-1),O=t(". In addition to signing for instructions, PDAs must also sign for their own creation via "),q=e("code",null,"invoke_signed",-1),z=t("."),G=t("When building with PDAs, it is common to "),U={href:"https://github.com/solana-labs/solana-program-library/blob/78e29e9238e555967b9125799d7d420d7d12b959/token-swap/program/src/state.rs#L100",target:"_blank",rel:"noopener noreferrer"},j=t("store the bump seed"),H=t(" in the account data itself. This allows developers to easily validate a PDA without having to pass in the bump as an instruction argument."),J=e("h2",{id:"other-resources",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#other-resources","aria-hidden":"true"},"#"),t(" Other Resources")],-1),K={href:"https://docs.solana.com/developing/programming-model/calling-between-programs#program-derived-addresses",target:"_blank",rel:"noopener noreferrer"},M=t("Official Documentation"),Q={href:"https://www.brianfriel.xyz/understanding-program-derived-addresses/",target:"_blank",rel:"noopener noreferrer"},X=t("Understanding Program Derived Addresses");function Y(Z,$){const a=n("ExternalLinkIcon"),s=n("RouterLink");return d(),c(l,null,[m,e("p",null,[_,e("a",f,[b,o(a)]),v]),w,e("div",A,[P,e("ul",null,[y,D,k,e("li",null,[x,e("a",I,[T,o(a)])]),L,e("li",null,[S,o(s,{to:"/guides/account-maps.html"},{default:r(()=>[F]),_:1})])])]),N,e("p",null,[V,W,B,o(s,{to:"/references/accounts.html#sign-with-a-pda"},{default:r(()=>[C]),_:1}),E,R,O,q,z]),e("p",null,[G,e("a",U,[j,o(a)]),H]),J,e("ul",null,[e("li",null,[e("a",K,[M,o(a)])]),e("li",null,[e("a",Q,[X,o(a)])])])],64)}var te=i(g,[["render",Y]]);export{te as default}; +import{_ as i,r as n,o as d,c,a as e,b as o,w as r,F as l,d as t,e as h}from"./app.2fbb9e96.js";var p="/assets/account-matrix.c3a79f80.png",u="/assets/pda-curve.7c0b9307.png";const g={},m=e("h1",{id:"program-derived-addresses-pdas",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#program-derived-addresses-pdas","aria-hidden":"true"},"#"),t(" Program Derived Addresses (PDAs)")],-1),_=t("Program Derived Addresses (PDAs) are home to accounts that are designed to be controlled by a specific program. With PDAs, programs can programmatically sign for certain addresses without needing a private key. PDAs serve as the foundation for "),f={href:"https://docs.solana.com/developing/programming-model/calling-between-programs#cross-program-invocations",target:"_blank",rel:"noopener noreferrer"},b=t("Cross-Program Invocation"),v=t(", which allows Solana apps to be composable with one another."),w=e("h2",{id:"facts",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#facts","aria-hidden":"true"},"#"),t(" Facts")],-1),A={class:"custom-container tip"},P=e("p",{class:"custom-container-title"},"Fact Sheet",-1),y=e("li",null,"PDAs are 32 byte strings that look like public keys, but don\u2019t have corresponding private keys",-1),D=e("li",null,[e("code",null,"findProgramAddress"),t(" will deterministically derive a PDA from a programId and seeds (collection of bytes)")],-1),k=e("li",null,"A bump (one byte) is used to push a potential PDA off the ed25519 elliptic curve",-1),x=t("Programs can sign for their PDAs by providing the seeds and bump to "),I={href:"https://docs.solana.com/developing/programming-model/calling-between-programs#program-signed-accounts",target:"_blank",rel:"noopener noreferrer"},T=t("invoke_signed"),L=e("li",null,"A PDA can only be signed by the program from which it was derived",-1),S=t("In addition to allowing for programs to sign for different instructions, PDAs also provide a hashmap-like interface for "),F=t("indexing accounts"),N=h('

    Deep Dive

    PDAs are an essential building block for developing programs on Solana. With PDAs, programs can sign for accounts while guaranteeing that no external user could also generate a valid signature for the same account. In addition to signing for accounts, certain programs can also modify accounts held at their PDAs.

    Accounts matrix

    Image courtesy of Pencilflip

    Generating PDAs

    To understand the concept behind PDAs, it may be helpful to consider that PDAs are not technically created, but rather found. PDAs are generated from a combination of seeds (such as the string \u201Cvote_account\u201D) and a program id. This combination of seeds and program id is then run through a sha256 hash function to see whether or not they generate a public key that lies on the ed25519 elliptic curve.

    In running our program id and seeds through a hash function, there is a ~50% chance that we actually end up with a valid public key that does lie on the elliptic curve. In this case, we simply add something to fudge our input a little bit and try again. The technical term for this fudge factor is a bump. In Solana, we start with bump = 255 and simply iterate down through bump = 254, bump = 253, etc. until we get an address that is not on the elliptic curve. This may seem rudimentary, but once found it gives us a deterministic way of deriving the same PDA over and over again.

    PDA on the ellipitic curve

    Interacting with PDAs

    ',9),V=t("When a PDA is generated, "),W=e("code",null,"findProgramAddress",-1),B=t(" will return both the address and the bump used to kick the address off of the elliptic curve. Armed with this bump, a program can then "),C=t("sign"),E=t(" for any instruction that requires its PDA. In order to sign, programs should pass the instruction, the list of accounts, and the seeds and bump used to derive the PDA to "),R=e("code",null,"invoke_signed",-1),O=t(". In addition to signing for instructions, PDAs must also sign for their own creation via "),q=e("code",null,"invoke_signed",-1),z=t("."),G=t("When building with PDAs, it is common to "),U={href:"https://github.com/solana-labs/solana-program-library/blob/78e29e9238e555967b9125799d7d420d7d12b959/token-swap/program/src/state.rs#L100",target:"_blank",rel:"noopener noreferrer"},j=t("store the bump seed"),H=t(" in the account data itself. This allows developers to easily validate a PDA without having to pass in the bump as an instruction argument."),J=e("h2",{id:"other-resources",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#other-resources","aria-hidden":"true"},"#"),t(" Other Resources")],-1),K={href:"https://docs.solana.com/developing/programming-model/calling-between-programs#program-derived-addresses",target:"_blank",rel:"noopener noreferrer"},M=t("Official Documentation"),Q={href:"https://www.brianfriel.xyz/understanding-program-derived-addresses/",target:"_blank",rel:"noopener noreferrer"},X=t("Understanding Program Derived Addresses");function Y(Z,$){const a=n("ExternalLinkIcon"),s=n("RouterLink");return d(),c(l,null,[m,e("p",null,[_,e("a",f,[b,o(a)]),v]),w,e("div",A,[P,e("ul",null,[y,D,k,e("li",null,[x,e("a",I,[T,o(a)])]),L,e("li",null,[S,o(s,{to:"/guides/account-maps.html"},{default:r(()=>[F]),_:1})])])]),N,e("p",null,[V,W,B,o(s,{to:"/references/accounts.html#sign-with-a-pda"},{default:r(()=>[C]),_:1}),E,R,O,q,z]),e("p",null,[G,e("a",U,[j,o(a)]),H]),J,e("ul",null,[e("li",null,[e("a",K,[M,o(a)])]),e("li",null,[e("a",Q,[X,o(a)])])])],64)}var te=i(g,[["render",Y]]);export{te as default}; diff --git a/docs/.vuepress/dist/assets/pdas.html.cbdf3a70.js b/docs/.vuepress/dist/assets/pdas.html.6eca14e4.js similarity index 98% rename from docs/.vuepress/dist/assets/pdas.html.cbdf3a70.js rename to docs/.vuepress/dist/assets/pdas.html.6eca14e4.js index 09d68c78b..64a98d87d 100644 --- a/docs/.vuepress/dist/assets/pdas.html.cbdf3a70.js +++ b/docs/.vuepress/dist/assets/pdas.html.6eca14e4.js @@ -1 +1 @@ -import{_ as o,r as t,o as d,c as l,a as e,b as s,w as a,F as c,d as n,e as h}from"./app.cfdf84e7.js";var u="/assets/account-matrix.c3a79f80.png",m="/assets/pda-curve.7c0b9307.png";const g={},p=e("h1",{id:"programm-eigene-adressen-pdas",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#programm-eigene-adressen-pdas","aria-hidden":"true"},"#"),n(" Programm-eigene-Adressen (PDAs)")],-1),_=n("Program-eigene-Adressen (PDAs) sind das zu Hause von Accounts die dazu designed sind, um von einem bestimmten Programm kontrolliert bzw. gesteuert zu werden. Mit PDAs k\xF6nnen Programme programmgesteuert f\xFCr bestimmte Adressen signieren, ohne einen privaten Schl\xFCssel zu ben\xF6tigen. PDAs dienen als Grundlage f\xFCr "),f={href:"https://docs.solana.com/developing/programming-model/calling-between-programs#cross-program-invocations",target:"_blank",rel:"noopener noreferrer"},b=n("Cross-Program Invocation"),A=n(", wodurch Solana-Apps miteinander kombinierbar sind."),v=e("h2",{id:"fakten",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#fakten","aria-hidden":"true"},"#"),n(" Fakten")],-1),P={class:"custom-container tip"},k=e("p",{class:"custom-container-title"},"Fact Sheet",-1),w=e("li",null,"PDAs sind 32-Byte-Strings, die wie \xF6ffentliche Schl\xFCssel aussehen, aber keine entsprechenden privaten Schl\xFCssel haben",-1),D=e("li",null,[e("code",null,"findProgramAddress"),n(" wird einen PDA deterministisch aus einer programId und Seeds (Sammlung von Bytes) ableiten")],-1),z=e("li",null,"Ein Bump (ein Byte) wird verwendet, um einen potenziellen PDA von der elliptischen Kurve ed25519 zu schieben",-1),S=n("Programme k\xF6nnen f\xFCr ihre PDAs signieren, indem sie die Seeds und Bump bereitstellen "),x={href:"https://docs.solana.com/developing/programming-model/calling-between-programs#program-signed-accounts",target:"_blank",rel:"noopener noreferrer"},B=n("invoke_signed"),E=e("li",null,"Ein PDA kann nur von dem Programm signiert werden, von dem es abgeleitet wurde",-1),K=n("PDAs erm\xF6glichen es Programmen nicht nur, verschiedene Anweisungen zu signieren, sondern bieten auch eine Hashmap-\xE4hnliche Schnittstelle um "),y=n("Accounts zu indexieren"),I=h('

    Deep Dive

    PDAs sind ein wesentlicher Baustein f\xFCr die Entwicklung von Programmen auf Solana. Mit PDAs k\xF6nnen Programme f\xFCr Accounts signieren und gleichzeitig sicherstellen, dass kein externer Benutzer auch eine g\xFCltige Signatur f\xFCr dasselbe Konto erstellen kann. Zus\xE4tzlich zum Signieren von Accounts k\xF6nnen bestimmte Programme auch Accounts \xE4ndern, die auf ihren PDAs gef\xFChrt werden.

    Accounts matrix

    Bildausschnit von Pencilflip

    Generating PDAs

    Um das Konzept hinter PDAs zu verstehen, kann es hilfreich sein zu bedenken, dass PDAs nicht technisch erstellt, sondern eher gefunden werden. PDAs werden aus einer Kombination von Seeds (z. B. der Zeichenfolge \u201Evote_account\u201C\u201C) und einer Programm-ID generiert. Diese Kombination aus Seeds und Programm-ID wird dann durch eine sha256-Hash-Funktion geleitet, um zu sehen, ob sie einen \xF6ffentlichen Schl\xFCssel generieren, der auf der elliptischen Kurve ed25519 liegt.

    PDA on the ellipitic curve

    Interaktion mit PDAs

    ',8),L=n("Wenn ein PDA generiert wird, gibt "),F=e("code",null,"findProgramAddress",-1),N=n(" sowohl die Adresse als auch den Bump zur\xFCck, der verwendet wird, um die Adresse aus der elliptischen Kurve zu entfernen. Mit diesem Bump bewaffnet, kann ein Programm dann f\xFCr jede Anweisung, die seinen PDA erfordert, "),V=n("signieren"),C=n('. Um zu signieren, sollten Programme die Anweisung, die Liste der Accounts und die Seeds und Bump, die verwendet werden, um den PDA abzuleiten, an \u201Einvoke_signed\u201C \xFCbergeben. Zus\xE4tzlich zum Signieren von Anweisungen m\xFCssen PDAs auch f\xFCr ihre eigene Erstellung \xFCber "invoke_signed" signieren.'),H=n("Beim Bauen mit PDAs ist es \xFCblich, "),M={href:"https://github.com/solana-labs/solana-program-library/blob/78e29e9238e555967b9125799d7d420d7d12b959/token-swap/program/src/state.rs#L100",target:"_blank",rel:"noopener noreferrer"},Z=n("den Bump Seed in den Kontodaten selbst zu speichern"),q=n(". Auf diese Weise k\xF6nnen Entwickler einen PDA einfach validieren, ohne den Bump als Anweisungsargument \xFCbergeben zu m\xFCssen.having to pass in the bump as an instruction argument."),G=e("h2",{id:"andere-quellen",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#andere-quellen","aria-hidden":"true"},"#"),n(" Andere Quellen")],-1),R={href:"https://docs.solana.com/developing/programming-model/calling-between-programs#program-derived-addresses",target:"_blank",rel:"noopener noreferrer"},U=n("Offizielle Dokumentation"),W={href:"https://www.brianfriel.xyz/understanding-program-derived-addresses/",target:"_blank",rel:"noopener noreferrer"},j=n("Programmeigene Accounts verstehen");function O(Q,T){const r=t("ExternalLinkIcon"),i=t("RouterLink");return d(),l(c,null,[p,e("p",null,[_,e("a",f,[b,s(r)]),A]),v,e("div",P,[k,e("ul",null,[w,D,z,e("li",null,[S,e("a",x,[B,s(r)])]),E,e("li",null,[K,s(i,{to:"/de/guides/account-maps.html"},{default:a(()=>[y]),_:1})])])]),I,e("p",null,[L,F,N,s(i,{to:"/de/references/accounts.html#sign-with-a-pda"},{default:a(()=>[V]),_:1}),C]),e("p",null,[H,e("a",M,[Z,s(r)]),q]),G,e("ul",null,[e("li",null,[e("a",R,[U,s(r)])]),e("li",null,[e("a",W,[j,s(r)])])])],64)}var X=o(g,[["render",O]]);export{X as default}; +import{_ as o,r as t,o as d,c as l,a as e,b as s,w as a,F as c,d as n,e as h}from"./app.2fbb9e96.js";var u="/assets/account-matrix.c3a79f80.png",m="/assets/pda-curve.7c0b9307.png";const g={},p=e("h1",{id:"programm-eigene-adressen-pdas",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#programm-eigene-adressen-pdas","aria-hidden":"true"},"#"),n(" Programm-eigene-Adressen (PDAs)")],-1),_=n("Program-eigene-Adressen (PDAs) sind das zu Hause von Accounts die dazu designed sind, um von einem bestimmten Programm kontrolliert bzw. gesteuert zu werden. Mit PDAs k\xF6nnen Programme programmgesteuert f\xFCr bestimmte Adressen signieren, ohne einen privaten Schl\xFCssel zu ben\xF6tigen. PDAs dienen als Grundlage f\xFCr "),f={href:"https://docs.solana.com/developing/programming-model/calling-between-programs#cross-program-invocations",target:"_blank",rel:"noopener noreferrer"},b=n("Cross-Program Invocation"),A=n(", wodurch Solana-Apps miteinander kombinierbar sind."),v=e("h2",{id:"fakten",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#fakten","aria-hidden":"true"},"#"),n(" Fakten")],-1),P={class:"custom-container tip"},k=e("p",{class:"custom-container-title"},"Fact Sheet",-1),w=e("li",null,"PDAs sind 32-Byte-Strings, die wie \xF6ffentliche Schl\xFCssel aussehen, aber keine entsprechenden privaten Schl\xFCssel haben",-1),D=e("li",null,[e("code",null,"findProgramAddress"),n(" wird einen PDA deterministisch aus einer programId und Seeds (Sammlung von Bytes) ableiten")],-1),z=e("li",null,"Ein Bump (ein Byte) wird verwendet, um einen potenziellen PDA von der elliptischen Kurve ed25519 zu schieben",-1),S=n("Programme k\xF6nnen f\xFCr ihre PDAs signieren, indem sie die Seeds und Bump bereitstellen "),x={href:"https://docs.solana.com/developing/programming-model/calling-between-programs#program-signed-accounts",target:"_blank",rel:"noopener noreferrer"},B=n("invoke_signed"),E=e("li",null,"Ein PDA kann nur von dem Programm signiert werden, von dem es abgeleitet wurde",-1),K=n("PDAs erm\xF6glichen es Programmen nicht nur, verschiedene Anweisungen zu signieren, sondern bieten auch eine Hashmap-\xE4hnliche Schnittstelle um "),y=n("Accounts zu indexieren"),I=h('

    Deep Dive

    PDAs sind ein wesentlicher Baustein f\xFCr die Entwicklung von Programmen auf Solana. Mit PDAs k\xF6nnen Programme f\xFCr Accounts signieren und gleichzeitig sicherstellen, dass kein externer Benutzer auch eine g\xFCltige Signatur f\xFCr dasselbe Konto erstellen kann. Zus\xE4tzlich zum Signieren von Accounts k\xF6nnen bestimmte Programme auch Accounts \xE4ndern, die auf ihren PDAs gef\xFChrt werden.

    Accounts matrix

    Bildausschnit von Pencilflip

    Generating PDAs

    Um das Konzept hinter PDAs zu verstehen, kann es hilfreich sein zu bedenken, dass PDAs nicht technisch erstellt, sondern eher gefunden werden. PDAs werden aus einer Kombination von Seeds (z. B. der Zeichenfolge \u201Evote_account\u201C\u201C) und einer Programm-ID generiert. Diese Kombination aus Seeds und Programm-ID wird dann durch eine sha256-Hash-Funktion geleitet, um zu sehen, ob sie einen \xF6ffentlichen Schl\xFCssel generieren, der auf der elliptischen Kurve ed25519 liegt.

    PDA on the ellipitic curve

    Interaktion mit PDAs

    ',8),L=n("Wenn ein PDA generiert wird, gibt "),F=e("code",null,"findProgramAddress",-1),N=n(" sowohl die Adresse als auch den Bump zur\xFCck, der verwendet wird, um die Adresse aus der elliptischen Kurve zu entfernen. Mit diesem Bump bewaffnet, kann ein Programm dann f\xFCr jede Anweisung, die seinen PDA erfordert, "),V=n("signieren"),C=n('. Um zu signieren, sollten Programme die Anweisung, die Liste der Accounts und die Seeds und Bump, die verwendet werden, um den PDA abzuleiten, an \u201Einvoke_signed\u201C \xFCbergeben. Zus\xE4tzlich zum Signieren von Anweisungen m\xFCssen PDAs auch f\xFCr ihre eigene Erstellung \xFCber "invoke_signed" signieren.'),H=n("Beim Bauen mit PDAs ist es \xFCblich, "),M={href:"https://github.com/solana-labs/solana-program-library/blob/78e29e9238e555967b9125799d7d420d7d12b959/token-swap/program/src/state.rs#L100",target:"_blank",rel:"noopener noreferrer"},Z=n("den Bump Seed in den Kontodaten selbst zu speichern"),q=n(". Auf diese Weise k\xF6nnen Entwickler einen PDA einfach validieren, ohne den Bump als Anweisungsargument \xFCbergeben zu m\xFCssen.having to pass in the bump as an instruction argument."),G=e("h2",{id:"andere-quellen",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#andere-quellen","aria-hidden":"true"},"#"),n(" Andere Quellen")],-1),R={href:"https://docs.solana.com/developing/programming-model/calling-between-programs#program-derived-addresses",target:"_blank",rel:"noopener noreferrer"},U=n("Offizielle Dokumentation"),W={href:"https://www.brianfriel.xyz/understanding-program-derived-addresses/",target:"_blank",rel:"noopener noreferrer"},j=n("Programmeigene Accounts verstehen");function O(Q,T){const r=t("ExternalLinkIcon"),i=t("RouterLink");return d(),l(c,null,[p,e("p",null,[_,e("a",f,[b,s(r)]),A]),v,e("div",P,[k,e("ul",null,[w,D,z,e("li",null,[S,e("a",x,[B,s(r)])]),E,e("li",null,[K,s(i,{to:"/de/guides/account-maps.html"},{default:a(()=>[y]),_:1})])])]),I,e("p",null,[L,F,N,s(i,{to:"/de/references/accounts.html#sign-with-a-pda"},{default:a(()=>[V]),_:1}),C]),e("p",null,[H,e("a",M,[Z,s(r)]),q]),G,e("ul",null,[e("li",null,[e("a",R,[U,s(r)])]),e("li",null,[e("a",W,[j,s(r)])])])],64)}var X=o(g,[["render",O]]);export{X as default}; diff --git a/docs/.vuepress/dist/assets/pdas.html.895cff94.js b/docs/.vuepress/dist/assets/pdas.html.a968d7a9.js similarity index 99% rename from docs/.vuepress/dist/assets/pdas.html.895cff94.js rename to docs/.vuepress/dist/assets/pdas.html.a968d7a9.js index d45e31aa6..1c8c2f30d 100644 --- a/docs/.vuepress/dist/assets/pdas.html.895cff94.js +++ b/docs/.vuepress/dist/assets/pdas.html.a968d7a9.js @@ -1 +1 @@ -import{_ as t,r as l,o,c as s,a,b as r,w as d,F as m,d as e,e as c}from"./app.cfdf84e7.js";var u="/assets/account-matrix.c3a79f80.png",p="/assets/pda-curve.7c0b9307.png";const k={},g=a("h1",{id:"program-derived-addresses-pdas-programdan-turetilmis-adresler",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#program-derived-addresses-pdas-programdan-turetilmis-adresler","aria-hidden":"true"},"#"),e(" Program Derived Addresses (PDAs) (Programdan T\xFCretilmi\u015F Adresler)")],-1),h=e("Program Derived Addresses (Programdan T\xFCretilmi\u015F Adresler, PDA\u2019lar), belirli bir program taraf\u0131ndan kontrol edilmek \xFCzere tasarlanm\u0131\u015F account'lara ev sahipli\u011Fi yapar. PDA'lar ile programlar, private key\u2019e ihtiya\xE7 duymadan belirli adresleri programl\u0131 olarak imzalayabilir. PDA'lar, Solana uygulamalar\u0131n\u0131n birbirleriyle birle\u015Ftirilebilir olmas\u0131n\u0131 sa\u011Flayan "),b={href:"https://docs.solana.com/developing/programming-model/calling-between-programs#cross-program-invocations",target:"_blank",rel:"noopener noreferrer"},_=e("Cross-Program Invocation"),y=e("\u2019\u0131n(programlar aras\u0131 \xE7a\u011F\u0131rma) temeli olarak hizmet eder."),f=a("h2",{id:"facts-ozet-bilgiler",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#facts-ozet-bilgiler","aria-hidden":"true"},"#"),e(" Facts (\xD6zet Bilgiler)")],-1),P=a("p",null,[a("strong",null,"Bilgi Tablosu")],-1),v=a("li",null,"PDA'lar, public key\u2019lere benzeyen ancak kar\u015F\u0131l\u0131k gelen private key\u2019e sahip olmayan 32 byte\u2019l\u0131k array\u2019lerdir.",-1),A=a("li",null,[a("code",null,"findProgramAddress"),e(", bir programId ve seed\u2019lerden (bayt koleksiyonu) deterministik olarak bir PDA t\xFCretecektir.")],-1),D=a("li",null,"Potansiyel bir PDA'y\u0131 ed25519 eliptik e\u011Friden \xE7\u0131karmak i\xE7in bir bump (bir bayt) kullan\u0131l\u0131r.",-1),z=e("Programlar, seed\u2019ler "),x={href:"https://docs.solana.com/developing/programming-model/calling-between-programs#program-signed-accounts",target:"_blank",rel:"noopener noreferrer"},B=e("invoke_signed"),w=e(" ile kendi PDA'lar\u0131 i\xE7in imzalama yapabilir."),I=a("li",null,"Bir PDA yaln\u0131zca t\xFCretildi\u011Fi program taraf\u0131ndan imzalanabilir.",-1),T=e("Programlar\u0131n farkl\u0131 talimatlar\u0131 imzalamas\u0131na izin vermenin yan\u0131 s\u0131ra, PDA'lar ayr\u0131ca "),C=e("Account'lar\u0131 indekslemek"),E=e(" i\xE7in hashmap benzeri bir aray\xFCz sa\u011Flar."),L=c('

    Deep Dive (Derinlemesine Bak\u0131\u015F)

    PDA'lar, Solana'da programlar geli\u015Ftirmek i\xE7in temel bir yap\u0131 ta\u015F\u0131d\u0131r. PDA'lar sayesinde programlar, hi\xE7bir harici kullan\u0131c\u0131n\u0131n ayn\u0131 Account i\xE7in ge\xE7erli bir imza olu\u015Fturamayaca\u011F\u0131n\u0131 garanti ederken Account\u2019lar\u0131 imzalayabilir. Hesaplar\u0131 imzalamaya ek olarak, belirli programlar kendi PDA'lar\u0131nda tutulan account'lar\u0131 da de\u011Fi\u015Ftirebilir.

    Accounts matrix

    Image courtesy of Pencilflip

    Generating PDAs (PDA\u2019lar Olu\u015Fturma)

    PDA'lar\u0131n arkas\u0131ndaki kavram\u0131 anlamak i\xE7in, PDA'lar\u0131n teknik olarak yarat\u0131lmad\u0131\u011F\u0131n\u0131, daha \xE7ok bulundu\u011Funu d\xFC\u015F\xFCnmek faydal\u0131 olabilir. PDA'lar, seed ("vote_account" string\u2019i gibi) ve bir program kimli\u011Fi kombinasyonundan olu\u015Fturulur. Bu seed ve program kimli\u011Fi kombinasyonu daha sonra, ed25519 eliptik e\u011Fri \xFCzerinde yer alan bir public key olu\u015Fturup olu\u015Fturmad\u0131klar\u0131n\u0131 g\xF6rmek i\xE7in bir sha256 hash fonksiyonu arac\u0131l\u0131\u011F\u0131yla \xE7al\u0131\u015Ft\u0131r\u0131l\u0131r.

    Program kimli\u011Fimizi ve seed\u2019leri bir hash fonksiyonu arac\u0131l\u0131\u011F\u0131yla \xE7al\u0131\u015Ft\u0131r\u0131rken, eliptik e\u011Fri \xFCzerinde yer alan ge\xE7erli bir public key ile kar\u015F\u0131la\u015Fma \u015Fans\u0131m\u0131z ~%50'dir. Bu durumda, girdimizi biraz ge\xE7i\u015Ftirmek i\xE7in bir \u015Feyler ekleriz ve tekrar deneriz. Bu fudge fakt\xF6r i\xE7in teknik terim bump\u2019t\u0131r. Solana'da, bump = 255 ile ba\u015Fl\u0131yoruz ve eliptik e\u011Fride olmayan bir adres elde edene kadar, bump = 254, bump = 253, vb. ile a\u015Fa\u011F\u0131 do\u011Fru yineliyoruz. Bu ilkel g\xF6r\xFCnebilir, ancak bir kez bulundu\u011Funda bize ayn\u0131 PDA'y\u0131 tekrar tekrar t\xFCretmenin deterministik bir yolunu sunar.

    PDA Curve

    Interacting with PDAs (PDA\u2019lar ile Etkile\u015Fim)

    Bir PDA olu\u015Fturuldu\u011Funda, findProgramAddress hem adresi hem de adresi eliptik e\u011Friden \xE7\u0131karmak i\xE7in kullan\u0131lan bump\u2019\u0131 d\xF6nd\xFCr\xFCr. Bu bump ile donanm\u0131\u015F bir program, daha sonra PDA's\u0131n\u0131 gerektiren herhangi bir talimat i\xE7in imzalayabilir. \u0130mzalamak i\xE7in, programlar\u0131n talimat\u0131, account listesini ve PDA'y\u0131 invoke_signed olarak t\xFCretmek i\xE7in kullan\u0131lan seed ve bump\u2019\u0131 ge\xE7mesi gerekir. Talimatlar\u0131 imzalamaya ek olarak, PDA'lar invoke_signed arac\u0131l\u0131\u011F\u0131yla kendi yarat\u0131mlar\u0131 i\xE7in de imzalamal\u0131d\u0131r.

    PDA'larla olu\u015Ftururken, bump seed account verilerinin kendisinde saklamak yayg\u0131nd\u0131r. Bu, geli\u015Ftiricilerin, bir talimat arg\xFCman\u0131 olarak bump\u2019tan ge\xE7mek zorunda kalmadan bir PDA'y\u0131 kolayca do\u011Frulamas\u0131n\u0131 sa\u011Flar.

    Other Resources (Di\u011Fer Kaynaklar)

    ',12),N={href:"https://docs.solana.com/developing/programming-model/calling-between-programs#program-derived-addresses",target:"_blank",rel:"noopener noreferrer"},S=e("Official Documentation"),V={href:"https://www.brianfriel.xyz/understanding-program-derived-addresses/",target:"_blank",rel:"noopener noreferrer"},F=e("Understanding Program Derived Addresses");function O(R,q){const i=l("ExternalLinkIcon"),n=l("RouterLink");return o(),s(m,null,[g,a("p",null,[h,a("a",b,[_,r(i)]),y]),f,P,a("ul",null,[v,A,D,a("li",null,[z,a("a",x,[B,r(i)]),w]),I,a("li",null,[T,r(n,{to:"/tr/guides/account-maps.html"},{default:d(()=>[C]),_:1}),E])]),L,a("ul",null,[a("li",null,[a("a",N,[S,r(i)])]),a("li",null,[a("a",V,[F,r(i)])])])],64)}var H=t(k,[["render",O]]);export{H as default}; +import{_ as t,r as l,o,c as s,a,b as r,w as d,F as m,d as e,e as c}from"./app.2fbb9e96.js";var u="/assets/account-matrix.c3a79f80.png",p="/assets/pda-curve.7c0b9307.png";const k={},g=a("h1",{id:"program-derived-addresses-pdas-programdan-turetilmis-adresler",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#program-derived-addresses-pdas-programdan-turetilmis-adresler","aria-hidden":"true"},"#"),e(" Program Derived Addresses (PDAs) (Programdan T\xFCretilmi\u015F Adresler)")],-1),h=e("Program Derived Addresses (Programdan T\xFCretilmi\u015F Adresler, PDA\u2019lar), belirli bir program taraf\u0131ndan kontrol edilmek \xFCzere tasarlanm\u0131\u015F account'lara ev sahipli\u011Fi yapar. PDA'lar ile programlar, private key\u2019e ihtiya\xE7 duymadan belirli adresleri programl\u0131 olarak imzalayabilir. PDA'lar, Solana uygulamalar\u0131n\u0131n birbirleriyle birle\u015Ftirilebilir olmas\u0131n\u0131 sa\u011Flayan "),b={href:"https://docs.solana.com/developing/programming-model/calling-between-programs#cross-program-invocations",target:"_blank",rel:"noopener noreferrer"},_=e("Cross-Program Invocation"),y=e("\u2019\u0131n(programlar aras\u0131 \xE7a\u011F\u0131rma) temeli olarak hizmet eder."),f=a("h2",{id:"facts-ozet-bilgiler",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#facts-ozet-bilgiler","aria-hidden":"true"},"#"),e(" Facts (\xD6zet Bilgiler)")],-1),P=a("p",null,[a("strong",null,"Bilgi Tablosu")],-1),v=a("li",null,"PDA'lar, public key\u2019lere benzeyen ancak kar\u015F\u0131l\u0131k gelen private key\u2019e sahip olmayan 32 byte\u2019l\u0131k array\u2019lerdir.",-1),A=a("li",null,[a("code",null,"findProgramAddress"),e(", bir programId ve seed\u2019lerden (bayt koleksiyonu) deterministik olarak bir PDA t\xFCretecektir.")],-1),D=a("li",null,"Potansiyel bir PDA'y\u0131 ed25519 eliptik e\u011Friden \xE7\u0131karmak i\xE7in bir bump (bir bayt) kullan\u0131l\u0131r.",-1),z=e("Programlar, seed\u2019ler "),x={href:"https://docs.solana.com/developing/programming-model/calling-between-programs#program-signed-accounts",target:"_blank",rel:"noopener noreferrer"},B=e("invoke_signed"),w=e(" ile kendi PDA'lar\u0131 i\xE7in imzalama yapabilir."),I=a("li",null,"Bir PDA yaln\u0131zca t\xFCretildi\u011Fi program taraf\u0131ndan imzalanabilir.",-1),T=e("Programlar\u0131n farkl\u0131 talimatlar\u0131 imzalamas\u0131na izin vermenin yan\u0131 s\u0131ra, PDA'lar ayr\u0131ca "),C=e("Account'lar\u0131 indekslemek"),E=e(" i\xE7in hashmap benzeri bir aray\xFCz sa\u011Flar."),L=c('

    Deep Dive (Derinlemesine Bak\u0131\u015F)

    PDA'lar, Solana'da programlar geli\u015Ftirmek i\xE7in temel bir yap\u0131 ta\u015F\u0131d\u0131r. PDA'lar sayesinde programlar, hi\xE7bir harici kullan\u0131c\u0131n\u0131n ayn\u0131 Account i\xE7in ge\xE7erli bir imza olu\u015Fturamayaca\u011F\u0131n\u0131 garanti ederken Account\u2019lar\u0131 imzalayabilir. Hesaplar\u0131 imzalamaya ek olarak, belirli programlar kendi PDA'lar\u0131nda tutulan account'lar\u0131 da de\u011Fi\u015Ftirebilir.

    Accounts matrix

    Image courtesy of Pencilflip

    Generating PDAs (PDA\u2019lar Olu\u015Fturma)

    PDA'lar\u0131n arkas\u0131ndaki kavram\u0131 anlamak i\xE7in, PDA'lar\u0131n teknik olarak yarat\u0131lmad\u0131\u011F\u0131n\u0131, daha \xE7ok bulundu\u011Funu d\xFC\u015F\xFCnmek faydal\u0131 olabilir. PDA'lar, seed ("vote_account" string\u2019i gibi) ve bir program kimli\u011Fi kombinasyonundan olu\u015Fturulur. Bu seed ve program kimli\u011Fi kombinasyonu daha sonra, ed25519 eliptik e\u011Fri \xFCzerinde yer alan bir public key olu\u015Fturup olu\u015Fturmad\u0131klar\u0131n\u0131 g\xF6rmek i\xE7in bir sha256 hash fonksiyonu arac\u0131l\u0131\u011F\u0131yla \xE7al\u0131\u015Ft\u0131r\u0131l\u0131r.

    Program kimli\u011Fimizi ve seed\u2019leri bir hash fonksiyonu arac\u0131l\u0131\u011F\u0131yla \xE7al\u0131\u015Ft\u0131r\u0131rken, eliptik e\u011Fri \xFCzerinde yer alan ge\xE7erli bir public key ile kar\u015F\u0131la\u015Fma \u015Fans\u0131m\u0131z ~%50'dir. Bu durumda, girdimizi biraz ge\xE7i\u015Ftirmek i\xE7in bir \u015Feyler ekleriz ve tekrar deneriz. Bu fudge fakt\xF6r i\xE7in teknik terim bump\u2019t\u0131r. Solana'da, bump = 255 ile ba\u015Fl\u0131yoruz ve eliptik e\u011Fride olmayan bir adres elde edene kadar, bump = 254, bump = 253, vb. ile a\u015Fa\u011F\u0131 do\u011Fru yineliyoruz. Bu ilkel g\xF6r\xFCnebilir, ancak bir kez bulundu\u011Funda bize ayn\u0131 PDA'y\u0131 tekrar tekrar t\xFCretmenin deterministik bir yolunu sunar.

    PDA Curve

    Interacting with PDAs (PDA\u2019lar ile Etkile\u015Fim)

    Bir PDA olu\u015Fturuldu\u011Funda, findProgramAddress hem adresi hem de adresi eliptik e\u011Friden \xE7\u0131karmak i\xE7in kullan\u0131lan bump\u2019\u0131 d\xF6nd\xFCr\xFCr. Bu bump ile donanm\u0131\u015F bir program, daha sonra PDA's\u0131n\u0131 gerektiren herhangi bir talimat i\xE7in imzalayabilir. \u0130mzalamak i\xE7in, programlar\u0131n talimat\u0131, account listesini ve PDA'y\u0131 invoke_signed olarak t\xFCretmek i\xE7in kullan\u0131lan seed ve bump\u2019\u0131 ge\xE7mesi gerekir. Talimatlar\u0131 imzalamaya ek olarak, PDA'lar invoke_signed arac\u0131l\u0131\u011F\u0131yla kendi yarat\u0131mlar\u0131 i\xE7in de imzalamal\u0131d\u0131r.

    PDA'larla olu\u015Ftururken, bump seed account verilerinin kendisinde saklamak yayg\u0131nd\u0131r. Bu, geli\u015Ftiricilerin, bir talimat arg\xFCman\u0131 olarak bump\u2019tan ge\xE7mek zorunda kalmadan bir PDA'y\u0131 kolayca do\u011Frulamas\u0131n\u0131 sa\u011Flar.

    Other Resources (Di\u011Fer Kaynaklar)

    ',12),N={href:"https://docs.solana.com/developing/programming-model/calling-between-programs#program-derived-addresses",target:"_blank",rel:"noopener noreferrer"},S=e("Official Documentation"),V={href:"https://www.brianfriel.xyz/understanding-program-derived-addresses/",target:"_blank",rel:"noopener noreferrer"},F=e("Understanding Program Derived Addresses");function O(R,q){const i=l("ExternalLinkIcon"),n=l("RouterLink");return o(),s(m,null,[g,a("p",null,[h,a("a",b,[_,r(i)]),y]),f,P,a("ul",null,[v,A,D,a("li",null,[z,a("a",x,[B,r(i)]),w]),I,a("li",null,[T,r(n,{to:"/tr/guides/account-maps.html"},{default:d(()=>[C]),_:1}),E])]),L,a("ul",null,[a("li",null,[a("a",N,[S,r(i)])]),a("li",null,[a("a",V,[F,r(i)])])])],64)}var H=t(k,[["render",O]]);export{H as default}; diff --git a/docs/.vuepress/dist/assets/pdas.html.7441bbc1.js b/docs/.vuepress/dist/assets/pdas.html.c4ec1265.js similarity index 98% rename from docs/.vuepress/dist/assets/pdas.html.7441bbc1.js rename to docs/.vuepress/dist/assets/pdas.html.c4ec1265.js index 26c09772b..e905fe0ae 100644 --- a/docs/.vuepress/dist/assets/pdas.html.7441bbc1.js +++ b/docs/.vuepress/dist/assets/pdas.html.c4ec1265.js @@ -1 +1 @@ -import{_ as d,r as t,o,c as u,a,b as n,w as r,F as l,d as e,e as m}from"./app.cfdf84e7.js";var c="/assets/account-matrix.508bf274.png",k="/assets/pda-curve.7c0b9307.png";const h={},p=a("h1",{id:"program-derived-addresses-pda",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#program-derived-addresses-pda","aria-hidden":"true"},"#"),e(" Program Derived Addresses (PDA)")],-1),g=e("Program Derived Addresses (PDA) adalah tempat seperti rumah untuk akun-akun yang di desain untuk dikendalikan oleh suatu program tertentu. Dengan PDA, program bisa memverifikasi alamat tertentu secara terprogram tanpa membutuhkan private key. PDA berfungsi sebagai fondasi untuk "),_={href:"https://docs.solana.com/developing/programming-model/calling-between-programs#cross-program-invocations",target:"_blank",rel:"noopener noreferrer"},b=e("Cross-Program Invocation"),f=e(", yang memungkinkan aplikasi Solana dapat disusun satu sama lain."),v=a("h2",{id:"fakta-fakta",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#fakta-fakta","aria-hidden":"true"},"#"),e(" Fakta-Fakta")],-1),y={class:"custom-container tip"},D=a("p",{class:"custom-container-title"},"Fakta",-1),P=a("li",null,"PDA adalah string 32 byte yang mirip seperti public key, namun tidak memiliki private key",-1),A=a("li",null,[a("code",null,"findProgramAddress"),e(" akan menurunkan sebuah PDA dari programld dan seeds (kumpulan byte) secara deterministik")],-1),x=a("li",null,[e("Satu byte (bump) digunakan untuk mendorong sebuah potential PDA dari "),a("code",null,"ed25519 elliptic curve")],-1),w=e("Program bisa memverifikasi PDA-nya dengan menyediakan seeds dan bump untuk "),S={href:"https://docs.solana.com/developing/programming-model/calling-between-programs#program-signed-accounts",target:"_blank",rel:"noopener noreferrer"},j=e("invoke_signed"),L=a("li",null,"Sebuah PDA hanya bisa diverifikasi oleh program asalnya",-1),F=e("Selain untuk mengizinkan program diverifikasi dengan instruksi lain, PDA juga menyediakan antarmuka ("),I=a("em",null,"interface",-1),B=e(") seperti hashmap untuk "),C=e("Mengindeks Akun"),N=m('

    Lebih Dalam

    PDA adalah bahan penting untuk mengembangkan program di Solana. Dengan PDA, program-program dapat memverifikasi akun sambil menjamin tidak ada pengguna dari luar yang bisa memverifikasi akun yang sama. Selain memverifikasi akun, program tertentu juga dapat memodifikasi akun dalam PDA masing-masing.

    Accounts matrix

    Image courtesy of Pencilflip

    Membuat PDA

    Untuk memahami konsep PDA, akan sangat membantu untuk memandang PDA sebagai sesuatu yang \u201Cditemukan\u201D dan bukan \u201Cdiciptakan\u201D. PDA dihasilkan dari kombinasi seeds (seperti string \u201Cvote_account\u201D) dan sebuah program id. Kombinasi seeds ini kemudian dijalankan melalui sebuah fungsi sha256 hash untuk melihat bahwa mereka menghasilkan sebuah public key yang berdasarkan pada ed25519 elliptic curve atau tidak.

    Dalam menjalankan program id dan seeds dengan sebuah fungsi hash, ada 50% kemungkinan menghasilkan sebuah public key yang valid namun tidak tepat di kurva ekliptik. Dalam kasus ini, yang dapat dilakukan adalah menambahkan sesuatu (fudge) untuk mendorong input dan uji coba ulang. Istilah teknis dari fudge ini adalah bump. Dalam Solana, dimulai dengan bump = 255 dan secara perlahan turunkan nilainya bump = 254, bump = 253 dan seterusnya. Sampai kita mendapatkan alamat (address) yang tidak ada di elliptic curve. Cara ini memang belum sempurna, namun ketika membuahkan hasil, ini memberikan kita cara deterministik untuk menurunkan PDA yang sama berulang kali.

    PDA on the ellipitic curve

    Berinteraksi dengan PDAs

    ',9),V=e("Ketika sebuah PDA dihasilkan, "),z=a("code",null,"findProgramAddress",-1),E=e(" akan mengembalikan alamat dan juga bump yang digunakan untuk mengeluarkannya dari "),K=a("code",null,"elliptic curve",-1),U=e(". Dilengkapi dengan bump ini, sebuah program dapat "),M=e("memverifikasi"),R=e(" instruksi apapun yang dibutuhkan oleh PDA tersebut. Untuk memverifikasi, program harus meloloskan instruksi, sejumlah akun, dan seeds yang digunakan untuk menurunkan PDA ke "),H=a("code",null,"invoke_signed",-1),O=e(". Selain memverifikasi instruksi, PDA juga harus memverifikasi hasilnya via "),T=a("code",null,"invoke_signed",-1),q=e("."),G=e("Ketika pembuatan dangan PDA, sangatlah umum untuk "),J={href:"https://github.com/solana-labs/solana-program-library/blob/78e29e9238e555967b9125799d7d420d7d12b959/token-swap/program/src/state.rs#L100",target:"_blank",rel:"noopener noreferrer"},Q=e("menyimpan "),W=a("em",null,"bump seed",-1),X=e(" di data akun tersebut. Hal ini mengizinkan pada developer untuk memvalidasi sebuah PDA tanpa harus melewati bump sebagai argumen instruksi."),Y=a("h2",{id:"sumber-lainnya",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#sumber-lainnya","aria-hidden":"true"},"#"),e(" Sumber lainnya")],-1),Z={href:"https://docs.solana.com/developing/programming-model/calling-between-programs#program-derived-addresses",target:"_blank",rel:"noopener noreferrer"},$=e("Official Documentation"),aa={href:"https://www.brianfriel.xyz/understanding-program-derived-addresses/",target:"_blank",rel:"noopener noreferrer"},ea=e("Understanding Program Derived Addresses");function na(ia,sa){const i=t("ExternalLinkIcon"),s=t("RouterLink");return o(),u(l,null,[p,a("p",null,[g,a("a",_,[b,n(i)]),f]),v,a("div",y,[D,a("ul",null,[P,A,x,a("li",null,[w,a("a",S,[j,n(i)])]),L,a("li",null,[F,I,B,n(s,{to:"/id/guides/account-maps.html"},{default:r(()=>[C]),_:1})])])]),N,a("p",null,[V,z,E,K,U,n(s,{to:"/id/references/accounts.html#sign-with-a-pda"},{default:r(()=>[M]),_:1}),R,H,O,T,q]),a("p",null,[G,a("a",J,[Q,W,n(i)]),X]),Y,a("ul",null,[a("li",null,[a("a",Z,[$,n(i)])]),a("li",null,[a("a",aa,[ea,n(i)])])])],64)}var ra=d(h,[["render",na]]);export{ra as default}; +import{_ as d,r as t,o,c as u,a,b as n,w as r,F as l,d as e,e as m}from"./app.2fbb9e96.js";var c="/assets/account-matrix.508bf274.png",k="/assets/pda-curve.7c0b9307.png";const h={},p=a("h1",{id:"program-derived-addresses-pda",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#program-derived-addresses-pda","aria-hidden":"true"},"#"),e(" Program Derived Addresses (PDA)")],-1),g=e("Program Derived Addresses (PDA) adalah tempat seperti rumah untuk akun-akun yang di desain untuk dikendalikan oleh suatu program tertentu. Dengan PDA, program bisa memverifikasi alamat tertentu secara terprogram tanpa membutuhkan private key. PDA berfungsi sebagai fondasi untuk "),_={href:"https://docs.solana.com/developing/programming-model/calling-between-programs#cross-program-invocations",target:"_blank",rel:"noopener noreferrer"},b=e("Cross-Program Invocation"),f=e(", yang memungkinkan aplikasi Solana dapat disusun satu sama lain."),v=a("h2",{id:"fakta-fakta",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#fakta-fakta","aria-hidden":"true"},"#"),e(" Fakta-Fakta")],-1),y={class:"custom-container tip"},D=a("p",{class:"custom-container-title"},"Fakta",-1),P=a("li",null,"PDA adalah string 32 byte yang mirip seperti public key, namun tidak memiliki private key",-1),A=a("li",null,[a("code",null,"findProgramAddress"),e(" akan menurunkan sebuah PDA dari programld dan seeds (kumpulan byte) secara deterministik")],-1),x=a("li",null,[e("Satu byte (bump) digunakan untuk mendorong sebuah potential PDA dari "),a("code",null,"ed25519 elliptic curve")],-1),w=e("Program bisa memverifikasi PDA-nya dengan menyediakan seeds dan bump untuk "),S={href:"https://docs.solana.com/developing/programming-model/calling-between-programs#program-signed-accounts",target:"_blank",rel:"noopener noreferrer"},j=e("invoke_signed"),L=a("li",null,"Sebuah PDA hanya bisa diverifikasi oleh program asalnya",-1),F=e("Selain untuk mengizinkan program diverifikasi dengan instruksi lain, PDA juga menyediakan antarmuka ("),I=a("em",null,"interface",-1),B=e(") seperti hashmap untuk "),C=e("Mengindeks Akun"),N=m('

    Lebih Dalam

    PDA adalah bahan penting untuk mengembangkan program di Solana. Dengan PDA, program-program dapat memverifikasi akun sambil menjamin tidak ada pengguna dari luar yang bisa memverifikasi akun yang sama. Selain memverifikasi akun, program tertentu juga dapat memodifikasi akun dalam PDA masing-masing.

    Accounts matrix

    Image courtesy of Pencilflip

    Membuat PDA

    Untuk memahami konsep PDA, akan sangat membantu untuk memandang PDA sebagai sesuatu yang \u201Cditemukan\u201D dan bukan \u201Cdiciptakan\u201D. PDA dihasilkan dari kombinasi seeds (seperti string \u201Cvote_account\u201D) dan sebuah program id. Kombinasi seeds ini kemudian dijalankan melalui sebuah fungsi sha256 hash untuk melihat bahwa mereka menghasilkan sebuah public key yang berdasarkan pada ed25519 elliptic curve atau tidak.

    Dalam menjalankan program id dan seeds dengan sebuah fungsi hash, ada 50% kemungkinan menghasilkan sebuah public key yang valid namun tidak tepat di kurva ekliptik. Dalam kasus ini, yang dapat dilakukan adalah menambahkan sesuatu (fudge) untuk mendorong input dan uji coba ulang. Istilah teknis dari fudge ini adalah bump. Dalam Solana, dimulai dengan bump = 255 dan secara perlahan turunkan nilainya bump = 254, bump = 253 dan seterusnya. Sampai kita mendapatkan alamat (address) yang tidak ada di elliptic curve. Cara ini memang belum sempurna, namun ketika membuahkan hasil, ini memberikan kita cara deterministik untuk menurunkan PDA yang sama berulang kali.

    PDA on the ellipitic curve

    Berinteraksi dengan PDAs

    ',9),V=e("Ketika sebuah PDA dihasilkan, "),z=a("code",null,"findProgramAddress",-1),E=e(" akan mengembalikan alamat dan juga bump yang digunakan untuk mengeluarkannya dari "),K=a("code",null,"elliptic curve",-1),U=e(". Dilengkapi dengan bump ini, sebuah program dapat "),M=e("memverifikasi"),R=e(" instruksi apapun yang dibutuhkan oleh PDA tersebut. Untuk memverifikasi, program harus meloloskan instruksi, sejumlah akun, dan seeds yang digunakan untuk menurunkan PDA ke "),H=a("code",null,"invoke_signed",-1),O=e(". Selain memverifikasi instruksi, PDA juga harus memverifikasi hasilnya via "),T=a("code",null,"invoke_signed",-1),q=e("."),G=e("Ketika pembuatan dangan PDA, sangatlah umum untuk "),J={href:"https://github.com/solana-labs/solana-program-library/blob/78e29e9238e555967b9125799d7d420d7d12b959/token-swap/program/src/state.rs#L100",target:"_blank",rel:"noopener noreferrer"},Q=e("menyimpan "),W=a("em",null,"bump seed",-1),X=e(" di data akun tersebut. Hal ini mengizinkan pada developer untuk memvalidasi sebuah PDA tanpa harus melewati bump sebagai argumen instruksi."),Y=a("h2",{id:"sumber-lainnya",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#sumber-lainnya","aria-hidden":"true"},"#"),e(" Sumber lainnya")],-1),Z={href:"https://docs.solana.com/developing/programming-model/calling-between-programs#program-derived-addresses",target:"_blank",rel:"noopener noreferrer"},$=e("Official Documentation"),aa={href:"https://www.brianfriel.xyz/understanding-program-derived-addresses/",target:"_blank",rel:"noopener noreferrer"},ea=e("Understanding Program Derived Addresses");function na(ia,sa){const i=t("ExternalLinkIcon"),s=t("RouterLink");return o(),u(l,null,[p,a("p",null,[g,a("a",_,[b,n(i)]),f]),v,a("div",y,[D,a("ul",null,[P,A,x,a("li",null,[w,a("a",S,[j,n(i)])]),L,a("li",null,[F,I,B,n(s,{to:"/id/guides/account-maps.html"},{default:r(()=>[C]),_:1})])])]),N,a("p",null,[V,z,E,K,U,n(s,{to:"/id/references/accounts.html#sign-with-a-pda"},{default:r(()=>[M]),_:1}),R,H,O,T,q]),a("p",null,[G,a("a",J,[Q,W,n(i)]),X]),Y,a("ul",null,[a("li",null,[a("a",Z,[$,n(i)])]),a("li",null,[a("a",aa,[ea,n(i)])])])],64)}var ra=d(h,[["render",na]]);export{ra as default}; diff --git a/docs/.vuepress/dist/assets/pdas.html.b3265701.js b/docs/.vuepress/dist/assets/pdas.html.e8a69463.js similarity index 99% rename from docs/.vuepress/dist/assets/pdas.html.b3265701.js rename to docs/.vuepress/dist/assets/pdas.html.e8a69463.js index 20c0cc999..686e54b47 100644 --- a/docs/.vuepress/dist/assets/pdas.html.b3265701.js +++ b/docs/.vuepress/dist/assets/pdas.html.e8a69463.js @@ -1 +1 @@ -import{_ as n,r as a,o as d,c as i,a as e,b as s,w as c,F as l,d as o,e as _}from"./app.cfdf84e7.js";var h="/assets/account-matrix.11f1f839.png",p="/assets/pda-curve.018ed1bf.png";const m={},u=e("h1",{id:"\u7A0B\u5E8F\u6D3E\u751F\u8D26\u6237-pda",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#\u7A0B\u5E8F\u6D3E\u751F\u8D26\u6237-pda","aria-hidden":"true"},"#"),o(" \u7A0B\u5E8F\u6D3E\u751F\u8D26\u6237\uFF08PDA\uFF09")],-1),g=o("\u7A0B\u5E8F\u6D3E\u751F\u8D26\u6237\uFF08PDA\uFF09\u662F\u4E3A\u4E86\u8BA9\u7279\u5B9A\u7A0B\u5E8F\u53EF\u4EE5\u63A7\u5236\u4E00\u4E9B\u8D26\u6237\u800C\u8BBE\u8BA1\u51FA\u6765\u7684\u3002\u4F7F\u7528PDA\uFF0C\u7A0B\u5E8F\u53EF\u4EE5\u901A\u8FC7\u7F16\u7A0B\u65B9\u6CD5\u4E3A\u4E00\u4E9B\u5730\u5740\u8FDB\u884C\u7B7E\u540D\uFF0C\u800C\u4E0D\u4E00\u5B9A\u7528\u5230\u79C1\u94A5\u3002 PDA\u662F"),b={href:"https://docs.solana.com/developing/programming-model/calling-between-programs#cross-program-invocations",target:"_blank",rel:"noopener noreferrer"},f=o("Cross-Program Invocation\uFF08\u8DE8\u7A0B\u5E8F\u8C03\u7528\uFF09"),P=o("\u7684\u57FA\u7840\uFF0C \u8FD9\u4E2A\u529F\u80FD\u8BA9Solana\u7684app\u53EF\u4EE5\u8DDF\u5176\u4ED6app\u8FDB\u884C\u7EC4\u5408\u3002"),A=e("h2",{id:"\u7EFC\u8FF0",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#\u7EFC\u8FF0","aria-hidden":"true"},"#"),o(" \u7EFC\u8FF0")],-1),D={class:"custom-container tip"},v=e("p",{class:"custom-container-title"},"\u8981\u70B9",-1),x=e("li",null,"PDA\u662F\u957F\u5EA6\u4E3A32\u7684\u5B57\u8282\u4E32\uFF0C\u770B\u8D77\u6765\u548C\u516C\u94A5\u5F88\u50CF\uFF0C\u4F46\u662F\u5E76\u6CA1\u6709\u4E0E\u4E4B\u5BF9\u5E94\u7684\u79C1\u94A5",-1),k=e("li",null,[e("code",null,"findProgramAddress"),o("\u53EF\u4EE5\u9488\u5BF9\u4E00\u4E2AprogramId\uFF08\u7A0B\u5E8Fid\uFF09\u548Cseeds\uFF08\u79CD\u5B50\uFF09\u552F\u4E00\u786E\u5B9A\u7684\u751F\u6210\u4E00\u4E2APDA\u3002\u8FD9\u91CC\u7684seeds\uFF08\u79CD\u5B50\uFF09\u662F\u4E00\u7EC4\u6307\u5B9A\u7684\u5B57\u8282\u4E32")],-1),w=e("li",null,"\u4E00\u4E2A\u8DF3\u8DC3\uFF08\u4E00\u4E2A\u5B57\u8282\uFF09\u7528\u4E8E\u5C06\u5019\u9009PDA\u63A8\u79BBed25519\u692D\u5706\u66F2\u7EBF",-1),L=o("\u7A0B\u5E8F\u901A\u8FC7\u4F20\u5165\u79CD\u5B50\u548C\u8DF3\u8DC3\u53C2\u6570\uFF0C\u8C03\u7528"),y={href:"https://docs.solana.com/developing/programming-model/calling-between-programs#program-signed-accounts",target:"_blank",rel:"noopener noreferrer"},I=o("invoke_signed"),N=o("\u4E3APDA\u8FDB\u884C\u7B7E\u540D"),S=e("li",null,"PDA\u53EA\u80FD\u88AB\u7528\u6765\u6D3E\u751F\u51FA\u8FD9\u4E2A\u5730\u5740\u7684\u7A0B\u5E8F\u6240\u7B7E\u540D",-1),V=o("\u9664\u4E86\u5141\u8BB8\u7A0B\u5E8F\u4E3A\u4E0D\u540C\u7684instruction\u7B7E\u540D\u4E4B\u5916\uFF0CPDA\u8FD8\u63D0\u4F9B\u4E86\u4E00\u4E2A\u50CF\u54C8\u5E0C\u8868\u4E00\u6837\u7684\u63A5\u53E3\uFF0C\u7528\u4E8E"),B=o("\u5EFA\u7ACB\u8D26\u6237\u7D22\u5F15"),C=_('

    \u6DF1\u5165

    PDA\u662FSolana\u7A0B\u5E8F\u5F00\u53D1\u7684\u91CD\u8981\u6784\u6210\u8981\u7D20\u3002\u6709\u4E86PDA\uFF0C\u7A0B\u5E8F\u53EF\u4EE5\u4E3A\u8D26\u6237\u7B7E\u540D\uFF0C\u540C\u65F6\u4FDD\u8BC1\u6CA1\u6709\u5916\u90E8\u7528\u6237\u80FD\u591F\u4EA7\u751F\u9488\u5BF9\u540C\u4E00\u4E2A\u8D26\u6237\u7684\u6709\u6548\u7B7E\u540D\u3002 \u9664\u4E86\u4E3A\u8D26\u6237\u7B7E\u540D\u5916\uFF0C\u4E00\u4E9B\u7A0B\u5E8F\u8FD8\u53EF\u4EE5\u4FEE\u6539\u81EA\u5DF1\u6D3E\u751F\u51FA\u6765\u7684PDA\u91CC\u7684\u6570\u636E\u3002

    Accounts matrix

    \u56FE\u7247\u6765\u6E90\uFF1APencilflip

    \u751F\u6210PDA

    \u4E3A\u4E86\u66F4\u597D\u7684\u7406\u89E3PDA\u7684\u6982\u5FF5\uFF0C\u53EF\u4EE5\u8BA4\u4E3APDA\u4ECE\u6280\u672F\u89D2\u5EA6\u8BB2\u5E76\u4E0D\u662F\u521B\u5EFA\u51FA\u6765\u7684\uFF0C\u800C\u662F\u627E\u5230\u7684\u3002PDA\u7531\u4E00\u7EC4\u79CD\u5B50\uFF08\u4F8B\u5982\u5B57\u7B26\u4E32"vote_account"\uFF09\u4EE5\u53CA\u7A0B\u5E8Fid\u751F\u6210\u3002 \u8FD9\u7EC4\u79CD\u5B50\u548C\u7A0B\u5E8Fid\u63A5\u4E0B\u6765\u4F1A\u653E\u5230sha256\u54C8\u5E0C\u51FD\u6570\u4E2D\u6267\u884C\u4E00\u904D\uFF0C\u68C0\u67E5\u4ED6\u4EEC\u4EA7\u751F\u7684\u516C\u94A5\u662F\u5426\u843D\u5728ed25519\u692D\u5706\u66F2\u7EBF\u4E0A\u3002

    \u5728\u7A0B\u5E8Fid\u548C\u79CD\u5B50\u4E0A\u8FD0\u884C\u54C8\u5E0C\u51FD\u6570\u65F6\uFF0C\u6709\u5927\u7EA650%\u7684\u6982\u7387\u4F1A\u5F97\u5230\u5728\u4E00\u4E2A\u843D\u5728\u692D\u5706\u66F2\u7EBF\u4E0A\u6709\u6548\u7684\u516C\u94A5\u3002\u8FD9\u79CD\u60C5\u51B5\u4E0B\uFF0C\u6211\u4EEC\u9700\u8981\u5411\u8F93\u5165\u5F53\u4E2D\u52A0\u70B9\u6270\u52A8\uFF0C\u7565\u5FAE\u6539\u53D8\u8F93\u5165\uFF0C\u518D\u8FDB\u884C\u91CD\u8BD5\u3002 \u8FD9\u4E2A\u6270\u52A8\u7684\u6280\u672F\u540D\u79F0\u53EBbump\uFF08\u8DF3\u8DC3\uFF09\u3002\u5728Solana\u4E2D\uFF0C\u6211\u4EEC\u4E00\u5F00\u59CB\u6307\u5B9Abump = 255\uFF0C\u7136\u540E\u5411\u4E0B\u8FED\u4EE3bump\uFF0C\u5230254\uFF0C253\u7B49\u7B49\u3002\u77E5\u9053\u6211\u4EEC\u80FD\u591F\u627E\u5230\u4E00\u4E2A\u4E0D\u5728\u692D\u5706\u66F2\u7EBF\u4E0A\u7684\u5730\u5740\u4E3A\u6B62\u3002 \u8FD9\u4E2A\u770B\u8D77\u6765\u7B80\u964B\u7684\u529E\u6CD5\u53EF\u4EE5\u8BA9\u6211\u4EEC\u6BCF\u6B21\u751F\u6210PDA\u7684\u65F6\u5019\u90FD\u80FD\u591F\u5F97\u5230\u552F\u4E00\u786E\u5B9A\u7684\u7ED3\u679C\u3002

    \u843D\u5728\u692D\u5706\u66F2\u7EBF\u4E0A\u7684PDA

    \u4E0EPDA\u4EA4\u4E92

    \u751F\u6210PDA\u7684\u65F6\u5019\uFF0CfindProgramAddress\u4F1A\u628A\u5F97\u5230\u7684\u5730\u5740\u548C\u7528\u6765\u5C06PDA\u78B0\u649E\u51FA\u692D\u5706\u66F2\u7EBF\u6240\u7528\u7684bump\u90FD\u8FD4\u56DE\u51FA\u6765\u3002 \u6709\u4E86\u8FD9\u4E2Abump\uFF0C\u7A0B\u5E8F\u5C31\u53EF\u4EE5\u5BF9\u4EFB\u4F55\u9700\u8981\u8FD9\u4E2APDA\u5730\u5740\u7684\u6307\u4EE4\u8FDB\u884C\u7B7E\u540D\u3002\u7B7E\u540D\u65F6\uFF0C\u7A0B\u5E8F\u8C03\u7528invoke_signed\u51FD\u6570\uFF0C\u4F20\u5165\u6307\u4EE4\uFF0C\u8D26\u6237\u5217\u8868\uFF0C\u4EE5\u53CA\u7528\u4E8E\u751F\u6210PDA\u7684\u79CD\u5B50\u548Cbump\u3002 \u9664\u4E86\u4E3A\u6307\u4EE4\u7B7E\u540D\u4E4B\u5916\uFF0CPDA\u5728\u4ED6\u81EA\u5DF1\u901A\u8FC7invoke_signed\u51FD\u6570\u88AB\u521B\u5EFA\u65F6\uFF0C\u4E5F\u9700\u8981\u7B7E\u540D\u3002

    ',10),E=o("\u5728\u4F7F\u7528PDA\u7F16\u5199\u7A0B\u5E8F\u65F6\uFF0C\u7ECF\u5E38\u4F1A\u5C06\u8FD9\u4E2Abump"),R={href:"https://github.com/solana-labs/solana-program-library/blob/78e29e9238e555967b9125799d7d420d7d12b959/token-swap/program/src/state.rs#L100",target:"_blank",rel:"noopener noreferrer"},q=o("\u5B58\u50A8\u5728\u8FD9\u4E2A\u8D26\u6237\u672C\u8EAB\u7684\u6570\u636E\u5F53\u4E2D"),z=o("\u3002 \u8FD9\u79CD\u673A\u5236\u53EF\u4EE5\u8BA9\u5F00\u53D1\u8005\u8F7B\u6613\u7684\u5BF9PDA\u8FDB\u884C\u9A8C\u8BC1\uFF0C\u800C\u4E0D\u7528\u91CD\u65B0\u5728\u6307\u4EE4\u53C2\u6570\u5F53\u4E2D\u4F20\u5165\u8FD9\u4E2A\u503C\u3002"),F=e("h2",{id:"other-resources",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#other-resources","aria-hidden":"true"},"#"),o(" Other Resources")],-1),O={href:"https://docs.solana.com/developing/programming-model/calling-between-programs#program-derived-addresses",target:"_blank",rel:"noopener noreferrer"},T=o("\u5B98\u65B9\u6587\u6863"),U={href:"https://www.brianfriel.xyz/understanding-program-derived-addresses/",target:"_blank",rel:"noopener noreferrer"},j=o("Understanding Program Derived Addresses");function G(H,J){const t=a("ExternalLinkIcon"),r=a("RouterLink");return d(),i(l,null,[u,e("p",null,[g,e("a",b,[f,s(t)]),P]),A,e("div",D,[v,e("ul",null,[x,k,w,e("li",null,[L,e("a",y,[I,s(t)]),N]),S,e("li",null,[V,s(r,{to:"/zh/guides/account-maps.html"},{default:c(()=>[B]),_:1})])])]),C,e("p",null,[E,e("a",R,[q,s(t)]),z]),F,e("ul",null,[e("li",null,[e("a",O,[T,s(t)])]),e("li",null,[e("a",U,[j,s(t)])])])],64)}var M=n(m,[["render",G]]);export{M as default}; +import{_ as n,r as a,o as d,c as i,a as e,b as s,w as c,F as l,d as o,e as _}from"./app.2fbb9e96.js";var h="/assets/account-matrix.11f1f839.png",p="/assets/pda-curve.018ed1bf.png";const m={},u=e("h1",{id:"\u7A0B\u5E8F\u6D3E\u751F\u8D26\u6237-pda",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#\u7A0B\u5E8F\u6D3E\u751F\u8D26\u6237-pda","aria-hidden":"true"},"#"),o(" \u7A0B\u5E8F\u6D3E\u751F\u8D26\u6237\uFF08PDA\uFF09")],-1),g=o("\u7A0B\u5E8F\u6D3E\u751F\u8D26\u6237\uFF08PDA\uFF09\u662F\u4E3A\u4E86\u8BA9\u7279\u5B9A\u7A0B\u5E8F\u53EF\u4EE5\u63A7\u5236\u4E00\u4E9B\u8D26\u6237\u800C\u8BBE\u8BA1\u51FA\u6765\u7684\u3002\u4F7F\u7528PDA\uFF0C\u7A0B\u5E8F\u53EF\u4EE5\u901A\u8FC7\u7F16\u7A0B\u65B9\u6CD5\u4E3A\u4E00\u4E9B\u5730\u5740\u8FDB\u884C\u7B7E\u540D\uFF0C\u800C\u4E0D\u4E00\u5B9A\u7528\u5230\u79C1\u94A5\u3002 PDA\u662F"),b={href:"https://docs.solana.com/developing/programming-model/calling-between-programs#cross-program-invocations",target:"_blank",rel:"noopener noreferrer"},f=o("Cross-Program Invocation\uFF08\u8DE8\u7A0B\u5E8F\u8C03\u7528\uFF09"),P=o("\u7684\u57FA\u7840\uFF0C \u8FD9\u4E2A\u529F\u80FD\u8BA9Solana\u7684app\u53EF\u4EE5\u8DDF\u5176\u4ED6app\u8FDB\u884C\u7EC4\u5408\u3002"),A=e("h2",{id:"\u7EFC\u8FF0",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#\u7EFC\u8FF0","aria-hidden":"true"},"#"),o(" \u7EFC\u8FF0")],-1),D={class:"custom-container tip"},v=e("p",{class:"custom-container-title"},"\u8981\u70B9",-1),x=e("li",null,"PDA\u662F\u957F\u5EA6\u4E3A32\u7684\u5B57\u8282\u4E32\uFF0C\u770B\u8D77\u6765\u548C\u516C\u94A5\u5F88\u50CF\uFF0C\u4F46\u662F\u5E76\u6CA1\u6709\u4E0E\u4E4B\u5BF9\u5E94\u7684\u79C1\u94A5",-1),k=e("li",null,[e("code",null,"findProgramAddress"),o("\u53EF\u4EE5\u9488\u5BF9\u4E00\u4E2AprogramId\uFF08\u7A0B\u5E8Fid\uFF09\u548Cseeds\uFF08\u79CD\u5B50\uFF09\u552F\u4E00\u786E\u5B9A\u7684\u751F\u6210\u4E00\u4E2APDA\u3002\u8FD9\u91CC\u7684seeds\uFF08\u79CD\u5B50\uFF09\u662F\u4E00\u7EC4\u6307\u5B9A\u7684\u5B57\u8282\u4E32")],-1),w=e("li",null,"\u4E00\u4E2A\u8DF3\u8DC3\uFF08\u4E00\u4E2A\u5B57\u8282\uFF09\u7528\u4E8E\u5C06\u5019\u9009PDA\u63A8\u79BBed25519\u692D\u5706\u66F2\u7EBF",-1),L=o("\u7A0B\u5E8F\u901A\u8FC7\u4F20\u5165\u79CD\u5B50\u548C\u8DF3\u8DC3\u53C2\u6570\uFF0C\u8C03\u7528"),y={href:"https://docs.solana.com/developing/programming-model/calling-between-programs#program-signed-accounts",target:"_blank",rel:"noopener noreferrer"},I=o("invoke_signed"),N=o("\u4E3APDA\u8FDB\u884C\u7B7E\u540D"),S=e("li",null,"PDA\u53EA\u80FD\u88AB\u7528\u6765\u6D3E\u751F\u51FA\u8FD9\u4E2A\u5730\u5740\u7684\u7A0B\u5E8F\u6240\u7B7E\u540D",-1),V=o("\u9664\u4E86\u5141\u8BB8\u7A0B\u5E8F\u4E3A\u4E0D\u540C\u7684instruction\u7B7E\u540D\u4E4B\u5916\uFF0CPDA\u8FD8\u63D0\u4F9B\u4E86\u4E00\u4E2A\u50CF\u54C8\u5E0C\u8868\u4E00\u6837\u7684\u63A5\u53E3\uFF0C\u7528\u4E8E"),B=o("\u5EFA\u7ACB\u8D26\u6237\u7D22\u5F15"),C=_('

    \u6DF1\u5165

    PDA\u662FSolana\u7A0B\u5E8F\u5F00\u53D1\u7684\u91CD\u8981\u6784\u6210\u8981\u7D20\u3002\u6709\u4E86PDA\uFF0C\u7A0B\u5E8F\u53EF\u4EE5\u4E3A\u8D26\u6237\u7B7E\u540D\uFF0C\u540C\u65F6\u4FDD\u8BC1\u6CA1\u6709\u5916\u90E8\u7528\u6237\u80FD\u591F\u4EA7\u751F\u9488\u5BF9\u540C\u4E00\u4E2A\u8D26\u6237\u7684\u6709\u6548\u7B7E\u540D\u3002 \u9664\u4E86\u4E3A\u8D26\u6237\u7B7E\u540D\u5916\uFF0C\u4E00\u4E9B\u7A0B\u5E8F\u8FD8\u53EF\u4EE5\u4FEE\u6539\u81EA\u5DF1\u6D3E\u751F\u51FA\u6765\u7684PDA\u91CC\u7684\u6570\u636E\u3002

    Accounts matrix

    \u56FE\u7247\u6765\u6E90\uFF1APencilflip

    \u751F\u6210PDA

    \u4E3A\u4E86\u66F4\u597D\u7684\u7406\u89E3PDA\u7684\u6982\u5FF5\uFF0C\u53EF\u4EE5\u8BA4\u4E3APDA\u4ECE\u6280\u672F\u89D2\u5EA6\u8BB2\u5E76\u4E0D\u662F\u521B\u5EFA\u51FA\u6765\u7684\uFF0C\u800C\u662F\u627E\u5230\u7684\u3002PDA\u7531\u4E00\u7EC4\u79CD\u5B50\uFF08\u4F8B\u5982\u5B57\u7B26\u4E32"vote_account"\uFF09\u4EE5\u53CA\u7A0B\u5E8Fid\u751F\u6210\u3002 \u8FD9\u7EC4\u79CD\u5B50\u548C\u7A0B\u5E8Fid\u63A5\u4E0B\u6765\u4F1A\u653E\u5230sha256\u54C8\u5E0C\u51FD\u6570\u4E2D\u6267\u884C\u4E00\u904D\uFF0C\u68C0\u67E5\u4ED6\u4EEC\u4EA7\u751F\u7684\u516C\u94A5\u662F\u5426\u843D\u5728ed25519\u692D\u5706\u66F2\u7EBF\u4E0A\u3002

    \u5728\u7A0B\u5E8Fid\u548C\u79CD\u5B50\u4E0A\u8FD0\u884C\u54C8\u5E0C\u51FD\u6570\u65F6\uFF0C\u6709\u5927\u7EA650%\u7684\u6982\u7387\u4F1A\u5F97\u5230\u5728\u4E00\u4E2A\u843D\u5728\u692D\u5706\u66F2\u7EBF\u4E0A\u6709\u6548\u7684\u516C\u94A5\u3002\u8FD9\u79CD\u60C5\u51B5\u4E0B\uFF0C\u6211\u4EEC\u9700\u8981\u5411\u8F93\u5165\u5F53\u4E2D\u52A0\u70B9\u6270\u52A8\uFF0C\u7565\u5FAE\u6539\u53D8\u8F93\u5165\uFF0C\u518D\u8FDB\u884C\u91CD\u8BD5\u3002 \u8FD9\u4E2A\u6270\u52A8\u7684\u6280\u672F\u540D\u79F0\u53EBbump\uFF08\u8DF3\u8DC3\uFF09\u3002\u5728Solana\u4E2D\uFF0C\u6211\u4EEC\u4E00\u5F00\u59CB\u6307\u5B9Abump = 255\uFF0C\u7136\u540E\u5411\u4E0B\u8FED\u4EE3bump\uFF0C\u5230254\uFF0C253\u7B49\u7B49\u3002\u77E5\u9053\u6211\u4EEC\u80FD\u591F\u627E\u5230\u4E00\u4E2A\u4E0D\u5728\u692D\u5706\u66F2\u7EBF\u4E0A\u7684\u5730\u5740\u4E3A\u6B62\u3002 \u8FD9\u4E2A\u770B\u8D77\u6765\u7B80\u964B\u7684\u529E\u6CD5\u53EF\u4EE5\u8BA9\u6211\u4EEC\u6BCF\u6B21\u751F\u6210PDA\u7684\u65F6\u5019\u90FD\u80FD\u591F\u5F97\u5230\u552F\u4E00\u786E\u5B9A\u7684\u7ED3\u679C\u3002

    \u843D\u5728\u692D\u5706\u66F2\u7EBF\u4E0A\u7684PDA

    \u4E0EPDA\u4EA4\u4E92

    \u751F\u6210PDA\u7684\u65F6\u5019\uFF0CfindProgramAddress\u4F1A\u628A\u5F97\u5230\u7684\u5730\u5740\u548C\u7528\u6765\u5C06PDA\u78B0\u649E\u51FA\u692D\u5706\u66F2\u7EBF\u6240\u7528\u7684bump\u90FD\u8FD4\u56DE\u51FA\u6765\u3002 \u6709\u4E86\u8FD9\u4E2Abump\uFF0C\u7A0B\u5E8F\u5C31\u53EF\u4EE5\u5BF9\u4EFB\u4F55\u9700\u8981\u8FD9\u4E2APDA\u5730\u5740\u7684\u6307\u4EE4\u8FDB\u884C\u7B7E\u540D\u3002\u7B7E\u540D\u65F6\uFF0C\u7A0B\u5E8F\u8C03\u7528invoke_signed\u51FD\u6570\uFF0C\u4F20\u5165\u6307\u4EE4\uFF0C\u8D26\u6237\u5217\u8868\uFF0C\u4EE5\u53CA\u7528\u4E8E\u751F\u6210PDA\u7684\u79CD\u5B50\u548Cbump\u3002 \u9664\u4E86\u4E3A\u6307\u4EE4\u7B7E\u540D\u4E4B\u5916\uFF0CPDA\u5728\u4ED6\u81EA\u5DF1\u901A\u8FC7invoke_signed\u51FD\u6570\u88AB\u521B\u5EFA\u65F6\uFF0C\u4E5F\u9700\u8981\u7B7E\u540D\u3002

    ',10),E=o("\u5728\u4F7F\u7528PDA\u7F16\u5199\u7A0B\u5E8F\u65F6\uFF0C\u7ECF\u5E38\u4F1A\u5C06\u8FD9\u4E2Abump"),R={href:"https://github.com/solana-labs/solana-program-library/blob/78e29e9238e555967b9125799d7d420d7d12b959/token-swap/program/src/state.rs#L100",target:"_blank",rel:"noopener noreferrer"},q=o("\u5B58\u50A8\u5728\u8FD9\u4E2A\u8D26\u6237\u672C\u8EAB\u7684\u6570\u636E\u5F53\u4E2D"),z=o("\u3002 \u8FD9\u79CD\u673A\u5236\u53EF\u4EE5\u8BA9\u5F00\u53D1\u8005\u8F7B\u6613\u7684\u5BF9PDA\u8FDB\u884C\u9A8C\u8BC1\uFF0C\u800C\u4E0D\u7528\u91CD\u65B0\u5728\u6307\u4EE4\u53C2\u6570\u5F53\u4E2D\u4F20\u5165\u8FD9\u4E2A\u503C\u3002"),F=e("h2",{id:"other-resources",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#other-resources","aria-hidden":"true"},"#"),o(" Other Resources")],-1),O={href:"https://docs.solana.com/developing/programming-model/calling-between-programs#program-derived-addresses",target:"_blank",rel:"noopener noreferrer"},T=o("\u5B98\u65B9\u6587\u6863"),U={href:"https://www.brianfriel.xyz/understanding-program-derived-addresses/",target:"_blank",rel:"noopener noreferrer"},j=o("Understanding Program Derived Addresses");function G(H,J){const t=a("ExternalLinkIcon"),r=a("RouterLink");return d(),i(l,null,[u,e("p",null,[g,e("a",b,[f,s(t)]),P]),A,e("div",D,[v,e("ul",null,[x,k,w,e("li",null,[L,e("a",y,[I,s(t)]),N]),S,e("li",null,[V,s(r,{to:"/zh/guides/account-maps.html"},{default:c(()=>[B]),_:1})])])]),C,e("p",null,[E,e("a",R,[q,s(t)]),z]),F,e("ul",null,[e("li",null,[e("a",O,[T,s(t)])]),e("li",null,[e("a",U,[j,s(t)])])])],64)}var M=n(m,[["render",G]]);export{M as default}; diff --git a/docs/.vuepress/dist/assets/programs.html.f5be05d7.js b/docs/.vuepress/dist/assets/programs.html.2be33c5f.js similarity index 99% rename from docs/.vuepress/dist/assets/programs.html.f5be05d7.js rename to docs/.vuepress/dist/assets/programs.html.2be33c5f.js index c6558eca7..29a39fb23 100644 --- a/docs/.vuepress/dist/assets/programs.html.f5be05d7.js +++ b/docs/.vuepress/dist/assets/programs.html.2be33c5f.js @@ -1,4 +1,4 @@ -import{_ as r,r as c,o as i,c as k,b as t,w as a,F as b,a as n,d as s,e as p}from"./app.cfdf84e7.js";const m={},d=n("h1",{id:"menulis-program",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#menulis-program","aria-hidden":"true"},"#"),s(" Menulis Program")],-1),_=n("h2",{id:"bagaimana-cara-mentransfer-sol-di-dalam-sebuah-program",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#bagaimana-cara-mentransfer-sol-di-dalam-sebuah-program","aria-hidden":"true"},"#"),s(" Bagaimana cara mentransfer SOL di dalam sebuah program")],-1),y=n("p",null,[s("Program Solana anda dapat mentransfer lamports dari sebuah akun ke akun lainnya tanpa 'invoke' program system. Aturan dasar adalah program anda dapat mentransfer lamports dari akun mana saja yang "),n("strong",null,"dimiliki"),s(" oleh program anda ke semua akun.")],-1),g=n("p",null,[s("Penerima akun "),n("strong",null,"tidak harus menjadi"),s(" sebuah akun yang dimilik oleh program anda.")],-1),f=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"/// Transfers lamports from one account (must be program owned)"),s(` +import{_ as r,r as c,o as i,c as k,b as t,w as a,F as b,a as n,d as s,e as p}from"./app.2fbb9e96.js";const m={},d=n("h1",{id:"menulis-program",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#menulis-program","aria-hidden":"true"},"#"),s(" Menulis Program")],-1),_=n("h2",{id:"bagaimana-cara-mentransfer-sol-di-dalam-sebuah-program",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#bagaimana-cara-mentransfer-sol-di-dalam-sebuah-program","aria-hidden":"true"},"#"),s(" Bagaimana cara mentransfer SOL di dalam sebuah program")],-1),y=n("p",null,[s("Program Solana anda dapat mentransfer lamports dari sebuah akun ke akun lainnya tanpa 'invoke' program system. Aturan dasar adalah program anda dapat mentransfer lamports dari akun mana saja yang "),n("strong",null,"dimiliki"),s(" oleh program anda ke semua akun.")],-1),g=n("p",null,[s("Penerima akun "),n("strong",null,"tidak harus menjadi"),s(" sebuah akun yang dimilik oleh program anda.")],-1),f=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"/// Transfers lamports from one account (must be program owned)"),s(` `),n("span",{class:"token comment"},"/// to another account. The recipient can by any account"),s(` `),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"transfer_service_fee_lamports"),n("span",{class:"token punctuation"},"("),s(` from_account`),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token operator"},"&"),n("span",{class:"token class-name"},"AccountInfo"),n("span",{class:"token punctuation"},","),s(` diff --git a/docs/.vuepress/dist/assets/programs.html.c3f30078.js b/docs/.vuepress/dist/assets/programs.html.2cb2bd0c.js similarity index 99% rename from docs/.vuepress/dist/assets/programs.html.c3f30078.js rename to docs/.vuepress/dist/assets/programs.html.2cb2bd0c.js index 10ec8bf97..99c386ba5 100644 --- a/docs/.vuepress/dist/assets/programs.html.c3f30078.js +++ b/docs/.vuepress/dist/assets/programs.html.2cb2bd0c.js @@ -1,4 +1,4 @@ -import{_ as r,r as c,o as i,c as k,b as t,w as a,F as b,a as n,d as s,e as p}from"./app.cfdf84e7.js";const m={},d=n("h1",{id:"escribiendo-programas",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#escribiendo-programas","aria-hidden":"true"},"#"),s(" Escribiendo Programas")],-1),_=n("h2",{id:"como-transferir-sol-a-un-programa",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#como-transferir-sol-a-un-programa","aria-hidden":"true"},"#"),s(" C\xF3mo transferir SOL a un programa")],-1),y=n("p",null,[s("Tu programa en Solana puede transferir lamports de una cuenta a otra sin 'invocar' al programa del Sistema (System Program). La regla fundamental es que tu programa puede transferir lamports desde cualquier cuenta "),n("strong",null,"propiedad"),s(" de tu programa a cualquier cuenta.")],-1),f=n("p",null,[s("La cuenta del destinatario "),n("em",null,"no tiene que ser"),s(" una cuenta propiedad de tu programa.")],-1),g=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"/// Transfers lamports from one account (must be program owned)"),s(` +import{_ as r,r as c,o as i,c as k,b as t,w as a,F as b,a as n,d as s,e as p}from"./app.2fbb9e96.js";const m={},d=n("h1",{id:"escribiendo-programas",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#escribiendo-programas","aria-hidden":"true"},"#"),s(" Escribiendo Programas")],-1),_=n("h2",{id:"como-transferir-sol-a-un-programa",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#como-transferir-sol-a-un-programa","aria-hidden":"true"},"#"),s(" C\xF3mo transferir SOL a un programa")],-1),y=n("p",null,[s("Tu programa en Solana puede transferir lamports de una cuenta a otra sin 'invocar' al programa del Sistema (System Program). La regla fundamental es que tu programa puede transferir lamports desde cualquier cuenta "),n("strong",null,"propiedad"),s(" de tu programa a cualquier cuenta.")],-1),f=n("p",null,[s("La cuenta del destinatario "),n("em",null,"no tiene que ser"),s(" una cuenta propiedad de tu programa.")],-1),g=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"/// Transfers lamports from one account (must be program owned)"),s(` `),n("span",{class:"token comment"},"/// to another account. The recipient can by any account"),s(` `),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"transfer_service_fee_lamports"),n("span",{class:"token punctuation"},"("),s(` from_account`),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token operator"},"&"),n("span",{class:"token class-name"},"AccountInfo"),n("span",{class:"token punctuation"},","),s(` diff --git a/docs/.vuepress/dist/assets/programs.html.abac7a7f.js b/docs/.vuepress/dist/assets/programs.html.372ac186.js similarity index 99% rename from docs/.vuepress/dist/assets/programs.html.abac7a7f.js rename to docs/.vuepress/dist/assets/programs.html.372ac186.js index 179430b35..df5329e81 100644 --- a/docs/.vuepress/dist/assets/programs.html.abac7a7f.js +++ b/docs/.vuepress/dist/assets/programs.html.372ac186.js @@ -1,4 +1,4 @@ -import{_ as r,r as c,o as i,c as k,b as t,w as a,F as b,a as n,d as s,e as p}from"./app.cfdf84e7.js";const m={},d=n("h1",{id:"xay-dung-program",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#xay-dung-program","aria-hidden":"true"},"#"),s(" X\xE2y d\u1EF1ng Program")],-1),_=n("h2",{id:"lam-the-nao-\u0111e-chuyen-sol-trong-mot-program",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#lam-the-nao-\u0111e-chuyen-sol-trong-mot-program","aria-hidden":"true"},"#"),s(" L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 chuy\u1EC3n SOL trong m\u1ED9t program")],-1),y=n("p",null,"Program tr\xEAn Solana c\xF3 th\u1EC3 chuy\u1EC3n lamports \u1EEB m\u1ED9t account \u0111\u1EBFn m\u1ED9t account kh\xE1c m\xE0 kh\xF4ng c\u1EA7n \u0111\u1EBFn 'truy v\u1EA5n thu\u1EA7n' System program. M\u1ED9t lu\u1EADt c\u01A1 b\u1EA3n \u0111\xF3 l\xE0 program c\u1EE7a b\u1EA1n c\xF3 th\u1EC3 chuy\u1EC3n lamports t\u1EEB b\u1EA5t k\u1EF3 account n\xE0o m\xE0 n\xF3 s\u1EDF h\u1EEFu \u0111\u1EBFn g\u1EA7n nh\u01B0 h\u1EA7u h\u1EBFt c\xE1c account kh\xE1c.",-1),g=n("p",null,[s("Tuy nhi\xEAn, account nh\u1EADn "),n("em",null,"kh\xF4ng \u0111\u01B0\u1EE3c"),s(" l\xE0 account s\u1EDF h\u1EEFu b\u1EDFi ch\u01B0\u01A1ng ch\xECnh \u0111\xF3.")],-1),f=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"/// Transfers lamports from one account (must be program owned)"),s(` +import{_ as r,r as c,o as i,c as k,b as t,w as a,F as b,a as n,d as s,e as p}from"./app.2fbb9e96.js";const m={},d=n("h1",{id:"xay-dung-program",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#xay-dung-program","aria-hidden":"true"},"#"),s(" X\xE2y d\u1EF1ng Program")],-1),_=n("h2",{id:"lam-the-nao-\u0111e-chuyen-sol-trong-mot-program",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#lam-the-nao-\u0111e-chuyen-sol-trong-mot-program","aria-hidden":"true"},"#"),s(" L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 chuy\u1EC3n SOL trong m\u1ED9t program")],-1),y=n("p",null,"Program tr\xEAn Solana c\xF3 th\u1EC3 chuy\u1EC3n lamports \u1EEB m\u1ED9t account \u0111\u1EBFn m\u1ED9t account kh\xE1c m\xE0 kh\xF4ng c\u1EA7n \u0111\u1EBFn 'truy v\u1EA5n thu\u1EA7n' System program. M\u1ED9t lu\u1EADt c\u01A1 b\u1EA3n \u0111\xF3 l\xE0 program c\u1EE7a b\u1EA1n c\xF3 th\u1EC3 chuy\u1EC3n lamports t\u1EEB b\u1EA5t k\u1EF3 account n\xE0o m\xE0 n\xF3 s\u1EDF h\u1EEFu \u0111\u1EBFn g\u1EA7n nh\u01B0 h\u1EA7u h\u1EBFt c\xE1c account kh\xE1c.",-1),g=n("p",null,[s("Tuy nhi\xEAn, account nh\u1EADn "),n("em",null,"kh\xF4ng \u0111\u01B0\u1EE3c"),s(" l\xE0 account s\u1EDF h\u1EEFu b\u1EDFi ch\u01B0\u01A1ng ch\xECnh \u0111\xF3.")],-1),f=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"/// Transfers lamports from one account (must be program owned)"),s(` `),n("span",{class:"token comment"},"/// to another account. The recipient can by any account"),s(` `),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"transfer_service_fee_lamports"),n("span",{class:"token punctuation"},"("),s(` from_account`),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token operator"},"&"),n("span",{class:"token class-name"},"AccountInfo"),n("span",{class:"token punctuation"},","),s(` diff --git a/docs/.vuepress/dist/assets/programs.html.e835864a.js b/docs/.vuepress/dist/assets/programs.html.44f14c2f.js similarity index 99% rename from docs/.vuepress/dist/assets/programs.html.e835864a.js rename to docs/.vuepress/dist/assets/programs.html.44f14c2f.js index ab37bd1c2..a0e23cf52 100644 --- a/docs/.vuepress/dist/assets/programs.html.e835864a.js +++ b/docs/.vuepress/dist/assets/programs.html.44f14c2f.js @@ -1,4 +1,4 @@ -import{_ as r,r as c,o as i,c as k,b as t,w as a,F as b,a as n,d as s,e as p}from"./app.cfdf84e7.js";const m={},d=n("h1",{id:"writing-programs",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#writing-programs","aria-hidden":"true"},"#"),s(" Writing Programs")],-1),_=n("h2",{id:"how-to-transfer-sol-in-a-program",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-transfer-sol-in-a-program","aria-hidden":"true"},"#"),s(" How to transfer SOL in a program")],-1),y=n("p",null,[s("Your Solana Program can transfer lamports from one account to another without 'invoking' the System program. The fundamental rule is that your program can transfer lamports from any account "),n("strong",null,"owned"),s(" by your program to any account at all.")],-1),f=n("p",null,[s("The recipient account "),n("em",null,"does not have to be"),s(" an account owned by your program.")],-1),w=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"/// Transfers lamports from one account (must be program owned)"),s(` +import{_ as r,r as c,o as i,c as k,b as t,w as a,F as b,a as n,d as s,e as p}from"./app.2fbb9e96.js";const m={},d=n("h1",{id:"writing-programs",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#writing-programs","aria-hidden":"true"},"#"),s(" Writing Programs")],-1),_=n("h2",{id:"how-to-transfer-sol-in-a-program",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-transfer-sol-in-a-program","aria-hidden":"true"},"#"),s(" How to transfer SOL in a program")],-1),y=n("p",null,[s("Your Solana Program can transfer lamports from one account to another without 'invoking' the System program. The fundamental rule is that your program can transfer lamports from any account "),n("strong",null,"owned"),s(" by your program to any account at all.")],-1),f=n("p",null,[s("The recipient account "),n("em",null,"does not have to be"),s(" an account owned by your program.")],-1),w=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"/// Transfers lamports from one account (must be program owned)"),s(` `),n("span",{class:"token comment"},"/// to another account. The recipient can by any account"),s(` `),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"transfer_service_fee_lamports"),n("span",{class:"token punctuation"},"("),s(` from_account`),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token operator"},"&"),n("span",{class:"token class-name"},"AccountInfo"),n("span",{class:"token punctuation"},","),s(` diff --git a/docs/.vuepress/dist/assets/programs.html.59a5a1e4.js b/docs/.vuepress/dist/assets/programs.html.59a5a1e4.js new file mode 100644 index 000000000..c7ce50f6a --- /dev/null +++ b/docs/.vuepress/dist/assets/programs.html.59a5a1e4.js @@ -0,0 +1,2 @@ +import{_ as h,r as c,o as i,c as s,a as t,b as o,w as l,F as d,d as n,e}from"./app.2fbb9e96.js";const _={},g=t("h1",{id:"program",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#program","aria-hidden":"true"},"#"),n(" Program")],-1),u=t("p",null,"B\u1EA5t k\u1EF3 l\u1EADp tr\xECnh vi\xEAn n\xE0o \u0111\u1EC1u c\xF3 th\u1EC3 vi\u1EBFt v\xE0 tri\u1EC3n khai m\u1ED9t ch\u01B0\u01A1ng tr\xECnh tr\xEAn Solana. Program (hay \u0111\u01B0\u1EE3c bi\u1EBFt \u0111\u1EBFn v\u1EDBi t\xEAn g\u1ECDi l\xE0 Smart Contract tr\xEAn c\xE1c blockchain kh\xE1c) s\u1EBD l\xE0 n\u1EC1n t\u1EA3ng cho c\xE1c ho\u1EA1t \u0111\u1ED9ng on-chain; th\u1EE9 gi\xFAp t\u1EA1o n\xEAn \u0111a s\u1ED1 c\xE1c h\xECnh th\xE1i t\u1EEB DeFi, NFTs cho \u0111\u1EBFn M\u1EA1ng x\xE3 h\u1ED9i v\xE0 Tr\xF2 ch\u01A1i.",-1),m=t("h2",{id:"co-the-ban-chua-biet",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#co-the-ban-chua-biet","aria-hidden":"true"},"#"),n(" C\xF3 th\u1EC3 b\u1EA1n ch\u01B0a bi\u1EBFt")],-1),p={class:"custom-container tip"},b=t("p",{class:"custom-container-title"},"Nh\u1EEFng \u0111i\u1EC1u c\xF3 th\u1EC3 b\u1EA1n ch\u01B0a bi\u1EBFt",-1),k=t("li",null,[n("Program s\u1EBD x\u1EED l\xFD c\xE1c "),t("a",{href:"./transactions"},"instruction"),n(" t\u1EEB ng\u01B0\u1EDDi d\xF9ng v\xE0 c\xE1c Program kh\xE1c")],-1),v=n("T\u1EA5t c\u1EA3 c\xE1c Program \u0111\u1EC1u l\xE0 "),P=t("em",null,"stateless",-1),f=n(": m\u1ECDi d\u1EEF li\u1EC7u m\xE0 Program t\u01B0\u01A1ng t\xE1c \u0111\u1EC1u \u0111\u01B0\u1EE3c l\u01B0u tr\xEAn nh\u1EEFng "),y=n("Account"),L=n(" t\xE1ch bi\u1EC7t v\xE0 \u0111\u01B0\u1EE3c lan truy\u1EC1n th\xF4ng qua c\xE1c instruction"),S=t("li",null,[n("B\u1EA3n th\xE2n Program \u0111\u01B0\u1EE3c l\u01B0u b\xEAn trong nh\u1EEFng Account \u0111\u01B0\u1EE3c \u0111\xE1nh d\u1EA5u l\xE0 "),t("code",null,"executable")],-1),x=n("T\u1EA5t c\u1EA3 Program \u0111\u01B0\u1EE3c s\u1EDF h\u1EEFu b\u1EDFi "),A={href:"https://docs.solana.com/developing/runtime-facilities/programs#bpf-loader",target:"_blank",rel:"noopener noreferrer"},T=n("BPF Loader"),F=n(" v\xE0 \u0111\u01B0\u1EE3c th\u1EF1c thi b\u1EDFi "),B={href:"https://docs.solana.com/developing/programming-model/runtime",target:"_blank",rel:"noopener noreferrer"},C=n("Solana Runtime"),R=n("H\u1EA7u h\u1EBFt c\xE1c l\u1EADp tr\xECnh vi\xEAn \u0111\u1EC1u ph\xE1t tri\u1EC3n Program b\u1EB1ng Rust ho\u1EB7c C++, nh\u01B0ng b\u1EA1n v\u1EABn c\xF3 th\u1EC3 l\u1EF1a ch\u1ECDn b\u1EA5t k\u1EF3 ng\xF4n ng\u1EEF l\u1EADp tr\xECnh m\xE0 c\xF3 h\u1ED7 tr\u1EE3 "),N={href:"https://en.wikipedia.org/wiki/Berkeley_Packet_Filter",target:"_blank",rel:"noopener noreferrer"},M=n("BPF"),w=n(" c\u1EE7a "),I={href:"https://llvm.org/",target:"_blank",rel:"noopener noreferrer"},V=n("LLVM"),q=e("
  • M\u1ECDi Program ch\u1EC9 c\xF3 duy nh\u1EA5t m\u1ED9t \u0111i\u1EC3m truy c\u1EADp, n\u01A1i m\xE0 c\xE1c instruction \u0111\u01B0\u1EE3c x\u1EED l\xFD (c\u1EE5 th\u1EC3 l\xE0 process_instruction); c\xE1c tham s\u1ED1 \u0111\u1EA7u v\xE0o lu\xF4n bao g\u1ED3m:
    • program_id: pubkey
    • accounts: array,
    • instruction_data: byte array
  • ",1),E=t("h2",{id:"chi-tiet",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#chi-tiet","aria-hidden":"true"},"#"),n(" Chi ti\u1EBFt")],-1),H=t("p",null,"Kh\xF4ng gi\u1ED1ng nh\u01B0 h\u1EA5u h\u1EBFt c\xE1c blockchain kh\xE1c, Solana t\xE1ch b\u1EA1ch gi\u1EEFa code v\xE0 d\u1EEF li\u1EC7u. T\u1EA5t c\u1EA3 d\u1EEF li\u1EC7u m\xE0 ch\u01B0\u01A1ng tr\xECnh c\u1EA7n t\u01B0\u01A1ng t\xE1c s\u1EBD \u0111\u01B0\u1EE3c l\u01B0u \u1EDF c\xE1c Account t\xE1ch bi\u1EC7t v\xE0 \u0111\u01B0\u1EE3c lan truy\u1EC1n th\xF4ng d\u01B0\u1EDBi d\u1EA1ng tham chi\u1EBFu th\xF4ng qua c\xE1c instruction. M\xF4 h\xECnh n\xE0y cho ph\xE9p m\u1ED9t ch\u01B0\u01A1ng tr\xECnh chung c\xF3 th\u1EC3 ho\u1EA1t \u0111\u1ED9ng tr\xEAn nhi\u1EC1u ki\u1EC3u Account kh\xE1c nhau m\xE0 kh\xF4ng c\u1EA7n t\xE1i c\u01A1 c\u1EA5u l\u1EA1i ch\u01B0\u01A1ng tr\xECnh. M\u1ED9t v\xED d\u1EE5 hay g\u1EB7p c\u1EE7a m\xF4 h\xECnh n\xE0y l\xE0 Native Programs v\xE0 SPL Programs.",-1),D=t("h3",{id:"native-programs-solana-program-library-spl-programs",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#native-programs-solana-program-library-spl-programs","aria-hidden":"true"},"#"),n(" Native Programs & Solana Program Library (SPL) Programs")],-1),j=n("Solana \u0111\u01B0\u1EE3c trang b\u1ECB s\u1EB5n m\u1ED9t s\u1ED1 Program n\u1EC1n t\u1EA3ng v\xE0 \u0111\u01B0\u1EE3c d\xF9ng \u0111\u1EC3 x\xE2y d\u1EF1ng c\xE1c t\u01B0\u01A1ng t\xE1c on-chain. Nh\u1EEFng Program n\xE0y th\u01B0\u1EDDng \u0111\u01B0\u1EE3c chia th\xE0nh "),K={href:"https://docs.solana.com/developing/runtime-facilities/programs#bpf-loader",target:"_blank",rel:"noopener noreferrer"},z=n("Native Programs"),O=n(" v\xE0 "),U={href:"https://spl.solana.com/",target:"_blank",rel:"noopener noreferrer"},G=n("Solana Program Library (SPL) Programs"),J=n("."),Q=n("Native Programs cung c\u1EA5p c\xE1c ch\u1EE9c n\u0103ng c\u01A1 s\u1EDF v\xE0 c\u1EA7n thi\u1EBFt \u0111\u1EC3 v\u1EADn h\xE0nh c\xE1c validators. Trong c\xE1c Program n\xE0y, ch\u01B0\u01A1ng tr\xECnh \u0111\u01B0\u1EE3c bi\u1EBFt \u0111\u1EBFn r\u1ED9ng r\xE3i nh\u1EA5t l\xE0 "),W={href:"https://docs.solana.com/developing/runtime-facilities/programs#system-program",target:"_blank",rel:"noopener noreferrer"},X=n("System Program"),Y=n(". System Program ch\u1ECBu tr\xE1ch nhi\u1EC7m cho vi\u1EC7c c\u1EA5p ph\xE1t Account m\u1EDBi, c\u0169ng nh\u01B0 chuy\u1EC3n SOL gi\u1EEFa c\xE1c Account kh\xE1c nhau."),Z=n("SPL Programs h\u1ED7 tr\u1EE3 m\u1ED9t s\u1ED1 c\xE1c ho\u1EA1t \u0111\u1ED9ng on-chain bao g\u1ED3m t\u1EA1o tokens, trao \u0111\u1ED5i tokens, cho vay tokens, c\u0169ng nh\u01B0 t\u1EA1o stake pools, v\xE0 duy tr\xEC name service. "),$={href:"https://spl.solana.com/token",target:"_blank",rel:"noopener noreferrer"},tt=n("SPL Token Program"),nt=n(" c\xF3 th\u1EC3 \u0111\u01B0\u1EE3c g\u1ECDi tr\u1EF1c ti\u1EBFp th\xF4ng qua Solana CLI, ho\u1EB7c b\u1EB1ng c\xE1ch kh\xE1c h\u01A1n nh\u01B0 l\xE0 "),ot={href:"https://spl.solana.com/associated-token-account",target:"_blank",rel:"noopener noreferrer"},rt=n("Associated Token Account Program"),et=n(". Associated Token Account Program th\u01B0\u1EDDng \u0111\u01B0\u1EE3c k\u1EBFt h\u1EE3p v\u1EDBi c\xE1c ch\u01B0\u01A1ng tr\xECnh tu\u1EF3 ch\u1EC9nh \u0111\u1EC3 g\u1ECDi \u0111\u1EBFn SPL Token Program h\u01A1n l\xE0 g\u1ECDi \u0111\u1ED9c l\u1EADp."),ct=t("h3",{id:"viet-mot-program",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#viet-mot-program","aria-hidden":"true"},"#"),n(" Vi\u1EBFt m\u1ED9t Program")],-1),at=n("Program h\u1EA7u nh\u01B0 \u0111\u01B0\u1EE3c ph\xE1t tri\u1EC3n d\u1EF1a tr\xEAn Rust ho\u1EB7c C++. Tuy nhi\xEAn b\u1EA1n v\u1EABn c\xF3 th\u1EC3 ph\xE1t tri\u1EC3n b\u1EB1ng b\u1EA5t k\u1EF3 ng\xF4n ng\u1EEF n\xE0o mi\u1EC5n l\xE0 h\u1ED7 tr\u1EE3 BPF c\u1EE7a LLVM. Hi\u1EC7n t\u1EA1i, l\u1EADp tr\xECnh vi\xEAn c\u0169ng c\xF3 th\u1EC3 chuy\u1EC3n \u0111\u1ED5i smart contract tr\xEAn EVM \u0111\u01B0\u1EE3c vi\u1EBFt b\u1EB1ng Solidity th\xF4ng qua d\u1EF1 \xE1n \u0111\u01B0\u1EE3c kh\u1EDFi x\u01B0\u1EDBng b\u1EDFi "),ht={href:"https://neon-labs.org/",target:"_blank",rel:"noopener noreferrer"},it=n("Neon Labs"),st=n(" v\xE0 "),lt={href:"https://solang.readthedocs.io/en/latest/",target:"_blank",rel:"noopener noreferrer"},dt=n("Solang"),_t=n("."),gt=e("

    \u0110a s\u1ED1 c\xE1c Program d\u1EF1 tr\xEAn Rust \u0111\u1EC1u b\xE1m s\xE1t ki\u1EBFn tr\xFAc sau:

    T\u1EC7pM\xF4 t\u1EA3
    lib.rs\u0110\u0103ng k\xFD c\xE1c modules
    entrypoint.rs\u0110i\u1EC3m truy c\u1EADp c\u1EE7a Program
    instruction.rsProgram API, tu\u1EA7n t\u1EF1 v\xE0 phi tu\u1EA7n t\u1EF1 ho\xE1 d\u1EEF li\u1EC7u \u0111\u1EA7u v\xE0o
    processor.rsLogic c\u1EE7a Program
    state.rsC\xE1c \u0111\u1ED1i t\u01B0\u1EE3ng c\u1EE7a Program, tu\u1EA7n t\u1EF1 v\xE0 phi tu\u1EA7n t\u1EF1 ho\xE1 tr\u1EA1ng th\xE1i
    error.rs\u0110\u1ECBnh ngh\u0129a l\u1ED7i c\u1EE7a Program
    ",2),ut=n("Hi\u1EC7n t\u1EA1i, "),mt={href:"https://github.com/coral-xyz/anchor",target:"_blank",rel:"noopener noreferrer"},pt=n("Anchor"),bt=n(" \u0111ang n\u1ED5i l\xEAn nh\u01B0 l\xE0 m\u1ED9t framework ph\u1ED5 bi\u1EBFn gi\xFAp ph\xE1t tri\u1EC3n Program nhanh ch\xF3ng h\u01A1n. Anchor \u0111\u01B0\u1EE3c l\u1EA5y c\u1EA3m h\u1EE9ng nhi\u1EC1u t\u1EEB Ruby on Rails nh\u1EB1m gi\u1EA3m thi\u1EC3u c\xE1c m\u1EABu code l\u1EB7p l\u1EA1i, \u0111\u1ED3ng th\u1EDDi chu\u1EA9n ho\xE1 vi\u1EC7c tu\u1EA7n t\u1EF1 v\xE0 phi tu\u1EA7n t\u1EF1 ho\xE1 d\u1EEF li\u1EC7u trong qu\xE1 tr\xECnh ph\xE1t tri\u1EC3n b\u1EB1ng Rust."),kt=e("

    Program th\u01B0\u1EDDng \u0111\u01B0\u1EE3c ph\xE1t tri\u1EC3n v\xE0 ki\u1EC3m th\u1EED tr\xEAn m\xF4i tr\u01B0\u1EDDng localhost v\xE0 devnet tr\u01B0\u1EDBc khi \u0111\u01B0\u1EE3c tri\u1EC3n khai tr\xEAn testnet ho\u1EB7c mainnet. Solana h\u1ED7 tr\u1EE3 c\xE1c m\xF4i tr\u01B0\u1EDDng sau:

    C\u1EE5m m\xF4i tr\u01B0\u1EDDng\u0110\u01B0\u1EDDng d\u1EABn k\u1EBFt n\u1ED1i RPC
    Mainnet-betahttps://api.mainnet-beta.solana.com
    Testnethttps://api.testnet.solana.com
    Devnethttps://api.devnet.solana.com
    LocalhostPort m\u1EB7c \u0111\u1ECBnh: 8899 (e.g. http://localhost:8899, http://192.168.1.88:8899)
    ",2),vt=n("Sau khi tri\u1EC3n khai l\xEAn m\u1ED9t m\xF4i tr\u01B0\u1EDDng c\u1EE5 th\u1EC3, ng\u01B0\u1EDDi d\xF9ng c\xF3 th\u1EC3 t\u01B0\u01A1ng t\xE1c v\u1EDBi c\xE1c Program tr\xEAn on-chain th\xF4ng qua "),Pt={href:"https://docs.solana.com/developing/clients/jsonrpc-api",target:"_blank",rel:"noopener noreferrer"},ft=n("k\u1EBFt n\u1ED1i RPC"),yt=n(" t\u01B0\u01A1ng \u1EE9ng."),Lt=t("h3",{id:"trien-khai-program",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#trien-khai-program","aria-hidden":"true"},"#"),n(" Tri\u1EC3n khai Program")],-1),St=n("L\u1EADp tr\xECnh vi\xEAn c\xF3 th\u1EC3 tri\u1EC3n khai Program c\u1EE7a h\u1ECD th\xF4ng qua "),xt={href:"https://docs.solana.com/cli/deploy-a-program",target:"_blank",rel:"noopener noreferrer"},At=n("CLI"),Tt=n(":"),Ft=e(`
    solana program deploy <PROGRAM_FILEPATH>
    +
    `,1),Bt=n("Khi m\u1ED9t Program \u0111\u01B0\u1EE3c tri\u1EC3n khai, n\xF3 s\u1EBD \u0111\u01B0\u1EE3c bi\xEAn d\u1ECBch th\xE0nh m\u1ED9t "),Ct={href:"https://en.wikipedia.org/wiki/Executable_and_Linkable_Format",target:"_blank",rel:"noopener noreferrer"},Rt=n("ELF shared object"),Nt=n(" (c\xF3 ch\u1EE9a BPF bytecode) v\xE0 \u0111\u01B0\u1EE3c t\u1EA3i l\xEAn m\u1EA1ng Solana. Program \u0111\u01B0\u1EE3c l\u01B0u tr\u1EEF trong Account (gi\u1ED1ng nh\u01B0 h\u1EA5u h\u1EBFt m\u1ECDi th\u1EE9 tr\xEAn Solana), ngo\u1EA1i tr\u1EEB vi\u1EC7c \u0111\u01B0\u1EE3c \u0111\xE1nh d\u1EA5u l\xE0 "),Mt=t("code",null,"executable",-1),wt=n(" v\xE0 "),It=t("code",null,"owner",-1),Vt=n(" \u0111\u01B0\u1EE3c g\xE1n cho BPF Loader. \u0110\u1ECBa ch\u1EC9 c\u1EE7a Account n\xE0y s\u1EBD \u0111\u01B0\u1EE3c g\u1ECDi l\xE0 "),qt=t("code",null,"program_id",-1),Et=n(" v\xE0 \u0111\u01B0\u1EE3c s\u1EED d\u1EE5ng nh\u01B0ng l\xE0 tham chi\u1EBFu cho Program trong c\xE1c giao d\u1ECBch \u1EDF t\u01B0\u01A1ng lai."),Ht=n("Solana h\u1ED7 tr\u1EE3 \u0111a d\u1EA1ng c\xE1c BPF Loader v\u1EDBi phi\xEAn b\u1EA3n m\u1EDBi nh\u1EA5t l\xE0 "),Dt={href:"https://explorer.solana.com/address/BPFLoaderUpgradeab1e11111111111111111111111",target:"_blank",rel:"noopener noreferrer"},jt=n("Upgradable BPF Loader"),Kt=n(". BPF Loader ch\u1ECBu tr\xE1ch nhi\u1EC7m cho vi\u1EC7c \u0111i\u1EC1u h\xE0nh c\xE1c Account c\u1EE7a Program v\xE0 cho ph\xE9p ng\u01B0\u1EDDi d\xF9ng t\u01B0\u01A1ng t\xE1c b\u1EB1ng "),zt=t("code",null,"program_id",-1),Ot=n(". T\u1EA5t c\u1EA3 Program ch\u1EC9 c\xF3 m\u1ED9t \u0111i\u1EC3m truy c\u1EADp duy nh\u1EA5t, n\u01A1i m\xE0 c\xE1c instruction s\u1EBD \u0111\u01B0\u1EE3c ghi nh\u1EADn v\xE0 x\u1EED l\xFD (c\u1EE5 th\u1EC3 l\xE0 "),Ut=t("code",null,"process_instruction",-1),Gt=n(") v\u1EDBi c\xE1c tham s\u1ED1 bao g\u1ED3m:"),Jt=e('
    • program_id: pubkey
    • accounts: array,
    • instruction_data: byte array

    M\u1ED7i khi \u0111\u01B0\u1EE3c g\u1ECDi, Program s\u1EBD \u0111\u01B0\u1EE3c th\u1EF1c thi b\u1EDFi Solana Runtime.

    C\xE1c ngu\u1ED3n t\xE0i li\u1EC7u kh\xE1c

    ',3),Qt={href:"https://docs.solana.com/developing/on-chain-programs/overview",target:"_blank",rel:"noopener noreferrer"},Wt=n("T\xE0i li\u1EC7u ch\xEDnh th\u1ED1ng"),Xt={href:"https://spl.solana.com/",target:"_blank",rel:"noopener noreferrer"},Yt=n("T\xE0i li\u1EC7u SPL"),Zt={href:"https://jstarry.notion.site/Program-deploys-29780c48794c47308d5f138074dd9838",target:"_blank",rel:"noopener noreferrer"},$t=n("Program Deploys by Justin Starry"),tn={href:"https://book.solmeet.dev/notes/solana-starter-kit",target:"_blank",rel:"noopener noreferrer"},nn=n("Solana Starter Kit by Iron Addicted Dog"),on={href:"https://paulx.dev/blog/2021/01/14/programming-on-solana-an-introduction/",target:"_blank",rel:"noopener noreferrer"},rn=n("Programming on Solana by Paulx"),en={href:"https://2501babe.github.io/posts/solana101.html",target:"_blank",rel:"noopener noreferrer"},cn=n("An Introduction to the Solana Blockchain by Hana"),an={href:"https://github.com/coral-xyz/anchor",target:"_blank",rel:"noopener noreferrer"},hn=n("Anchor");function sn(ln,dn){const a=c("RouterLink"),r=c("ExternalLinkIcon");return i(),s(d,null,[g,u,m,t("div",p,[b,t("ul",null,[k,t("li",null,[v,P,f,o(a,{to:"/vi/core-concepts/accounts.html"},{default:l(()=>[y]),_:1}),L]),S,t("li",null,[x,t("a",A,[T,o(r)]),F,t("a",B,[C,o(r)])]),t("li",null,[R,t("a",N,[M,o(r)]),w,t("a",I,[V,o(r)])]),q])]),E,H,D,t("p",null,[j,t("a",K,[z,o(r)]),O,t("a",U,[G,o(r)]),J]),t("p",null,[Q,t("a",W,[X,o(r)]),Y]),t("p",null,[Z,t("a",$,[tt,o(r)]),nt,t("a",ot,[rt,o(r)]),et]),ct,t("p",null,[at,t("a",ht,[it,o(r)]),st,t("a",lt,[dt,o(r)]),_t]),gt,t("p",null,[ut,t("a",mt,[pt,o(r)]),bt]),kt,t("p",null,[vt,t("a",Pt,[ft,o(r)]),yt]),Lt,t("p",null,[St,t("a",xt,[At,o(r)]),Tt]),Ft,t("p",null,[Bt,t("a",Ct,[Rt,o(r)]),Nt,Mt,wt,It,Vt,qt,Et]),t("p",null,[Ht,t("a",Dt,[jt,o(r)]),Kt,zt,Ot,Ut,Gt]),Jt,t("ul",null,[t("li",null,[t("a",Qt,[Wt,o(r)])]),t("li",null,[t("a",Xt,[Yt,o(r)])]),t("li",null,[t("a",Zt,[$t,o(r)])]),t("li",null,[t("a",tn,[nn,o(r)])]),t("li",null,[t("a",on,[rn,o(r)])]),t("li",null,[t("a",en,[cn,o(r)])]),t("li",null,[t("a",an,[hn,o(r)])])])],64)}var gn=h(_,[["render",sn]]);export{gn as default}; diff --git a/docs/.vuepress/dist/assets/programs.html.f461f5d0.js b/docs/.vuepress/dist/assets/programs.html.6f7ab3c6.js similarity index 99% rename from docs/.vuepress/dist/assets/programs.html.f461f5d0.js rename to docs/.vuepress/dist/assets/programs.html.6f7ab3c6.js index ae90cbc58..49fae4c2c 100644 --- a/docs/.vuepress/dist/assets/programs.html.f461f5d0.js +++ b/docs/.vuepress/dist/assets/programs.html.6f7ab3c6.js @@ -1,2 +1,2 @@ -import{_ as i,r as a,o as c,c as d,a as o,b as t,w as l,F as _,d as e,e as n}from"./app.cfdf84e7.js";const h={},p=o("h1",{id:"programs",tabindex:"-1"},[o("a",{class:"header-anchor",href:"#programs","aria-hidden":"true"},"#"),e(" Programs")],-1),g=o("p",null,"\uC5B4\uB5A4 \uAC1C\uBC1C\uC790\uB4E0 Solana \uBE14\uB85D\uCCB4\uC778\uC5D0 Program\uC744 \uC791\uC131\uD558\uACE0 \uBC30\uD3EC\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4. Program(\uB2E4\uB978 \uD504\uB85C\uD1A0\uCF5C\uB4E4\uC5D0\uC11C smart contract\uB85C \uC54C\uB824\uC9C4)\uB4E4\uC740 DeFi, NFTs\uBD80\uD130 \uC18C\uC15C \uBBF8\uB514\uC5B4\uC640 \uAC8C\uC784\uAE4C\uC9C0 \uBAA8\uB4E0 \uAC83\uC744 \uAC00\uB2A5\uD558\uAC8C \uD558\uB294 on-chain \uD65C\uB3D9\uC744 \uC704\uD55C \uAE30\uBC18 \uC5ED\uD560\uC744 \uC218\uD589\uD569\uB2C8\uB2E4.",-1),m=o("h2",{id:"facts",tabindex:"-1"},[o("a",{class:"header-anchor",href:"#facts","aria-hidden":"true"},"#"),e(" Facts")],-1),u={class:"custom-container tip"},b=o("p",{class:"custom-container-title"},"Fact Sheet",-1),P=o("li",null,[e("Program\uC740 \uC0AC\uC6A9\uC790\uB098 \uB2E4\uB978 Program\uC73C\uB85C\uBD80\uD130 \uBC1B\uC740 "),o("a",{href:"./transactions"},"instructions"),e("\uC744 \uCC98\uB9AC\uD569\uB2C8\uB2E4.")],-1),f=e("\uBAA8\uB4E0 Program\uB4E4\uC740 \uC0C1\uD0DC\uB97C \uBCF4\uC874\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. \uC989, Program\uB4E4\uC774 \uC0AC\uC6A9\uD558\uB294 \uBAA8\uB4E0 \uB370\uC774\uD130\uB294 Instruction\uB4E4\uC744 \uAC70\uCCD0 \uBD84\uB9AC\uB41C "),k=e("Account"),y=e("\uB4E4\uB85C \uBCF4\uB0B4\uC9D1\uB2C8\uB2E4."),v=o("li",null,[e("Program \uADF8 \uC790\uCCB4\uB294 "),o("code",null,"executable"),e(" \uD45C\uC2DC\uB41C Account\uC5D0 \uC800\uC7A5\uB429\uB2C8\uB2E4.")],-1),L=e("\uBAA8\uB4E0 Program\uC740 "),S={href:"https://docs.solana.com/developing/runtime-facilities/programs#bpf-loader",target:"_blank",rel:"noopener noreferrer"},x=e("BPF Loader"),F=e("\uC5D0 \uC758\uD574 \uC18C\uC720\uB418\uACE0 "),A={href:"https://docs.solana.com/developing/programming-model/runtime",target:"_blank",rel:"noopener noreferrer"},R=e("Solana Runtime"),C=e("\uC5D0 \uC758\uD574 \uC2E4\uD589\uB429\uB2C8\uB2E4."),B=e("\uAC1C\uBC1C\uC790\uB4E4\uC740 \uBCF4\uD1B5 Rust\uB098 C++\uB85C Program\uC744 \uC791\uC131\uD569\uB2C8\uB2E4. \uD558\uC9C0\uB9CC, "),D={href:"https://llvm.org/",target:"_blank",rel:"noopener noreferrer"},I=e("LLVM"),E=e("\uC758 "),N={href:"https://en.wikipedia.org/wiki/Berkeley_Packet_Filter",target:"_blank",rel:"noopener noreferrer"},w=e("BPF"),T=e(" backend\uB85C \uBE4C\uB4DC\uB418\uB294 \uC5B4\uB5A4 \uC5B8\uC5B4\uB3C4 \uC120\uD0DD \uAC00\uB2A5\uD569\uB2C8\uB2E4."),V=n("
  • \uBAA8\uB4E0 Program\uC740 Instruction \uCC98\uB9AC\uAC00 \uC77C\uC5B4\uB098\uB294 \uB2E8\uC77C entry point\uB97C \uAC16\uACE0 \uC788\uC2B5\uB2C8\uB2E4.(i.e. process_instructio);
    \uC544\uB798\uB294 \uD56D\uC0C1 \uD3EC\uD568\uB418\uB294 \uD30C\uB77C\uBBF8\uD130\uB4E4\uC785\uB2C8\uB2E4.
    • program_id: pubkey
    • accounts: array,
    • instruction_data: byte array
  • ",1),M=o("h2",{id:"deep-dive",tabindex:"-1"},[o("a",{class:"header-anchor",href:"#deep-dive","aria-hidden":"true"},"#"),e(" Deep Dive")],-1),z=o("p",null,"\uB300\uBD80\uBD84\uC758 \uB2E4\uB978 \uBE14\uB85D\uCCB4\uC778\uB4E4\uACFC \uB2E4\uB974\uAC8C, Solana\uB294 \uB370\uC774\uD130\uC640 \uCF54\uB4DC\uB97C \uC644\uBCBD\uD558\uAC8C \uBD84\uB9AC\uD569\uB2C8\uB2E4. Program\uC774 \uC0C1\uD638 \uC791\uC6A9\uD558\uB294 \uBAA8\uB4E0 \uB370\uC774\uD130\uB4E4\uC740 \uBD84\uB9AC\uB41C Account\uB4E4\uC5D0 \uC800\uC7A5\uB418\uBA70, Instruction\uB4E4\uC744 \uAC70\uCCD0 \uD638\uCD9C\uB429\uB2C8\uB2E4. \uC774\uB7EC\uD55C \uBAA8\uB378\uC740 \uB2E8\uC77C Generic Program\uC774 \uCD94\uAC00\uC801\uC778 \uBC30\uD3EC \uC5C6\uC774 \uB2E4\uC591\uD55C Account\uB4E4\uC744 \uAC70\uCCD0 \uB3D9\uC791\uD558\uB294 \uAC83\uC744 \uAC00\uB2A5\uD558\uAC8C \uD569\uB2C8\uB2E4. \uC774\uB7EC\uD55C \uD328\uD134\uC758 \uD754\uD55C \uC608\uB294 Native\uC640 SPL Program \uB4E4\uC5D0\uC11C \uBCFC \uC218 \uC788\uC2B5\uB2C8\uB2E4.",-1),O=o("h3",{id:"native-programs-the-solana-program-library-spl",tabindex:"-1"},[o("a",{class:"header-anchor",href:"#native-programs-the-solana-program-library-spl","aria-hidden":"true"},"#"),e(" Native Programs & The Solana Program Library (SPL)")],-1),j=e("Solana\uB294 on-chain \uC0C1\uD638 \uC791\uC6A9\uC744 \uC704\uD574 \uD589\uC2DD \uAD6C\uC131 \uC694\uC18C\uB85C\uC368 \uAE30\uB2A5\uD558\uB294 \uB2E4\uC218\uC758 Program\uB4E4\uC744 \uAC16\uACE0 \uC788\uC2B5\uB2C8\uB2E4. \uC774 Program\uB4E4\uC740 "),U={href:"https://docs.solana.com/developing/runtime-facilities/programs#bpf-loader",target:"_blank",rel:"noopener noreferrer"},G=e("Native Program"),H=e("\uB4E4\uACFC "),J={href:"https://spl.solana.com/",target:"_blank",rel:"noopener noreferrer"},K=e("Solana Program Library (SPL) Program"),W=e("\uB4E4\uB85C \uB098\uB269\uB2C8\uB2E4."),q=e("Native Program\uB4E4\uC740 validator\uB4E4\uC744 \uC6B4\uC601\uD558\uAE30 \uC704\uD574 \uC694\uAD6C\uB418\uB294 \uAE30\uBC18 \uAE30\uB2A5\uC744 \uC81C\uACF5\uD569\uB2C8\uB2E4. \uC774 Program\uB4E4 \uC911\uC5D0 \uAC00\uC7A5 \uC798 \uC54C\uB824\uC9C4 \uAC83\uC774 "),Q={href:"https://docs.solana.com/developing/runtime-facilities/programs#system-program",target:"_blank",rel:"noopener noreferrer"},X=e("System Program"),Y=e("\uC785\uB2C8\uB2E4. System Program\uC740 \uC0C8\uB85C\uC6B4 Account\uB4E4\uC744 \uAD00\uB9AC\uD558\uB294 \uAC83\uACFC \uB450 \uC9D1\uB2E8 \uC0AC\uC774\uC5D0\uC11C SOL\uC744 \uC804\uC1A1\uD558\uB294 \uAC83\uC744 \uCC45\uC784\uC9D1\uB2C8\uB2E4."),Z=e("SLP Program\uC740 \uD1A0\uD070 \uC0DD\uC131, \uAD50\uD658, \uB300\uC5EC\uD558\uB294 \uAC83\uC5D0 \uB354\uD574 stake pool\uC744 \uBC1C\uC0DD\uC2DC\uD0A4\uACE0, on-chain name service\uB97C \uC720\uC9C0\uD558\uB294 \uAC83 \uD3EC\uD568\uD574 \uB2E4\uC218\uC758 on-chain \uD65C\uB3D9\uC744 \uC9C0\uC6D0\uD569\uB2C8\uB2E4. "),$={href:"https://spl.solana.com/token",target:"_blank",rel:"noopener noreferrer"},oo=e("SPL Token Program"),eo=e("\uB4E4\uC740 CLI\uB97C \uAC70\uCCD0 \uC9C1\uC811 \uD638\uCD9C\uB420 \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uBC18\uBA74\uC5D0 "),to={href:"https://spl.solana.com/associated-token-account",target:"_blank",rel:"noopener noreferrer"},ro=e("Associated Token Account Program"),no=e(" \uAC19\uC740 \uB2E4\uB978 \uAC83\uB4E4\uC740 \uBCF4\uD1B5 Custom Program\uB4E4\uB85C \uAD6C\uC131\uB429\uB2C8\uB2E4."),ao=o("h3",{id:"writing-programs",tabindex:"-1"},[o("a",{class:"header-anchor",href:"#writing-programs","aria-hidden":"true"},"#"),e(" Writing Programs")],-1),so=e("Program\uB4E4\uC740 \uBCF4\uD1B5 Rust\uC640 C++\uB85C \uAC1C\uBC1C\uB429\uB2C8\uB2E4. \uD558\uC9C0\uB9CC, LLVM\uC758 BPF backend\uB85C \uBE4C\uB4DC\uB418\uB294 \uC5B4\uB5A4 \uC5B8\uC5B4\uB85C\uB3C4 \uAC1C\uBC1C \uAC00\uB2A5\uD569\uB2C8\uB2E4. "),io={href:"https://neon-labs.org/",target:"_blank",rel:"noopener noreferrer"},co=e("Neon Labs"),lo=e("\uC640 "),_o={href:"https://solang.readthedocs.io/en/latest/",target:"_blank",rel:"noopener noreferrer"},ho=e("Solang"),po=e("\uC740 \uCD5C\uADFC "),go={href:"https://ethereum.org/en/developers/docs/evm/",target:"_blank",rel:"noopener noreferrer"},mo=e("EVM"),uo=e(" \uD638\uD658\uC744 \uAC00\uB2A5\uD558\uAC8C \uD558\uACE0 \uAC1C\uBC1C\uC790\uB4E4\uC774 Program\uC744 Solidity\uC5D0\uC11C \uC791\uC131\uD560 \uC218 \uC788\uAC8C \uD558\uB294 \uC2DC\uB3C4\uB97C \uD558\uACE0 \uC788\uC2B5\uB2C8\uB2E4."),bo=n("

    \uB300\uBD80\uBD84\uC758 Rust \uAE30\uBC18 Program\uB4E4\uC740 \uC544\uB798\uC640 \uAC19\uC740 \uC544\uD0A4\uD14D\uCC98\uB97C \uC0AC\uC6A9\uD569\uB2C8\uB2E4.:

    FileDescription
    lib.rsRegistering modules
    entrypoint.rsEntrypoint to the program
    instruction.rsProgram API, (de)serializing instruction data
    processor.rsProgram logic
    state.rsProgram objects, (de)serializing state
    error.rsProgram-specific errors
    ",2),Po=e("\uCD5C\uADFC\uC5D0\uB294, "),fo={href:"https://github.com/coral-xyz/anchor",target:"_blank",rel:"noopener noreferrer"},ko=e("Anchor"),yo=e("\uAC00 Program\uC744 \uAC1C\uBC1C\uD558\uAE30 \uC704\uD55C \uD504\uB808\uC784\uC6CC\uD06C\uB85C \uB728\uACE0 \uC788\uC2B5\uB2C8\uB2E4. Anchor\uB294 boilerplate\uB97C \uC904\uC774\uACE0 (de)serialization \uCC98\uB9AC\uB97C \uAC04\uC18C\uD654\uD558\uB294 Ruby on Rails\uC640 \uBE44\uC2B7\uD55C Rust \uAE30\uBC18 \uD504\uB808\uC784\uC6CC\uD06C\uC785\uB2C8\uB2E4."),vo=n('

    Program\uB4E4\uC740 \uBCF4\uD1B5 Testnet\uACFC Mainnet\uC5D0 \uBC30\uD3EC\uB418\uAE30 \uC804\uC5D0 Localhost\uC640 Devnet \uD658\uACBD\uC5D0\uC11C \uAC1C\uBC1C\uB418\uACE0 \uD14C\uC2A4\uD2B8\uB429\uB2C8\uB2E4. Solana\uB294 \uC544\uB798 \uD658\uACBD\uB4E4\uC744 \uC9C0\uC6D0\uD569\uB2C8\uB2E4.

    Cluster EnvironmentRPC Connection URL
    Mainnet-betahttps://api.mainnet-beta.solana.com
    Testnethttps://api.testnet.solana.com
    Devnethttps://api.devnet.solana.com
    LocalhostDefault port: 8899 (e.g. http://localhost:8899, http://192.168.1.88:8899)

    \uC77C\uB2E8 \uD658\uACBD\uC5D0 \uBC30\uD3EC\uB418\uACE0 \uB098\uBA74, Client\uB4E4\uC740 \uAC01\uAC01\uC758 Cluster\uB85C\uC758 RPC \uC5F0\uACB0\uC744 \uD1B5\uD574 On-chain Program\uB4E4\uACFC \uC0C1\uD638\uC791\uC6A9 \uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.

    Deploying Programs

    ',4),Lo=e("\uAC1C\uBC1C\uC790\uB4E4\uC740 \uB2E4\uC74C\uACFC \uAC19\uC774 "),So={href:"https://docs.solana.com/cli/deploy-a-program",target:"_blank",rel:"noopener noreferrer"},xo=e("CLI"),Fo=e("\uB97C \uD1B5\uD574 Program\uC744 \uBC30\uD3EC\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4."),Ao=n(`
    solana program deploy <PROGRAM_FILEPATH>
    +import{_ as i,r as a,o as c,c as d,a as o,b as t,w as l,F as _,d as e,e as n}from"./app.2fbb9e96.js";const h={},p=o("h1",{id:"programs",tabindex:"-1"},[o("a",{class:"header-anchor",href:"#programs","aria-hidden":"true"},"#"),e(" Programs")],-1),g=o("p",null,"\uC5B4\uB5A4 \uAC1C\uBC1C\uC790\uB4E0 Solana \uBE14\uB85D\uCCB4\uC778\uC5D0 Program\uC744 \uC791\uC131\uD558\uACE0 \uBC30\uD3EC\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4. Program(\uB2E4\uB978 \uD504\uB85C\uD1A0\uCF5C\uB4E4\uC5D0\uC11C smart contract\uB85C \uC54C\uB824\uC9C4)\uB4E4\uC740 DeFi, NFTs\uBD80\uD130 \uC18C\uC15C \uBBF8\uB514\uC5B4\uC640 \uAC8C\uC784\uAE4C\uC9C0 \uBAA8\uB4E0 \uAC83\uC744 \uAC00\uB2A5\uD558\uAC8C \uD558\uB294 on-chain \uD65C\uB3D9\uC744 \uC704\uD55C \uAE30\uBC18 \uC5ED\uD560\uC744 \uC218\uD589\uD569\uB2C8\uB2E4.",-1),m=o("h2",{id:"facts",tabindex:"-1"},[o("a",{class:"header-anchor",href:"#facts","aria-hidden":"true"},"#"),e(" Facts")],-1),u={class:"custom-container tip"},b=o("p",{class:"custom-container-title"},"Fact Sheet",-1),P=o("li",null,[e("Program\uC740 \uC0AC\uC6A9\uC790\uB098 \uB2E4\uB978 Program\uC73C\uB85C\uBD80\uD130 \uBC1B\uC740 "),o("a",{href:"./transactions"},"instructions"),e("\uC744 \uCC98\uB9AC\uD569\uB2C8\uB2E4.")],-1),f=e("\uBAA8\uB4E0 Program\uB4E4\uC740 \uC0C1\uD0DC\uB97C \uBCF4\uC874\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. \uC989, Program\uB4E4\uC774 \uC0AC\uC6A9\uD558\uB294 \uBAA8\uB4E0 \uB370\uC774\uD130\uB294 Instruction\uB4E4\uC744 \uAC70\uCCD0 \uBD84\uB9AC\uB41C "),k=e("Account"),y=e("\uB4E4\uB85C \uBCF4\uB0B4\uC9D1\uB2C8\uB2E4."),v=o("li",null,[e("Program \uADF8 \uC790\uCCB4\uB294 "),o("code",null,"executable"),e(" \uD45C\uC2DC\uB41C Account\uC5D0 \uC800\uC7A5\uB429\uB2C8\uB2E4.")],-1),L=e("\uBAA8\uB4E0 Program\uC740 "),S={href:"https://docs.solana.com/developing/runtime-facilities/programs#bpf-loader",target:"_blank",rel:"noopener noreferrer"},x=e("BPF Loader"),F=e("\uC5D0 \uC758\uD574 \uC18C\uC720\uB418\uACE0 "),A={href:"https://docs.solana.com/developing/programming-model/runtime",target:"_blank",rel:"noopener noreferrer"},R=e("Solana Runtime"),C=e("\uC5D0 \uC758\uD574 \uC2E4\uD589\uB429\uB2C8\uB2E4."),B=e("\uAC1C\uBC1C\uC790\uB4E4\uC740 \uBCF4\uD1B5 Rust\uB098 C++\uB85C Program\uC744 \uC791\uC131\uD569\uB2C8\uB2E4. \uD558\uC9C0\uB9CC, "),D={href:"https://llvm.org/",target:"_blank",rel:"noopener noreferrer"},I=e("LLVM"),E=e("\uC758 "),N={href:"https://en.wikipedia.org/wiki/Berkeley_Packet_Filter",target:"_blank",rel:"noopener noreferrer"},w=e("BPF"),T=e(" backend\uB85C \uBE4C\uB4DC\uB418\uB294 \uC5B4\uB5A4 \uC5B8\uC5B4\uB3C4 \uC120\uD0DD \uAC00\uB2A5\uD569\uB2C8\uB2E4."),V=n("
  • \uBAA8\uB4E0 Program\uC740 Instruction \uCC98\uB9AC\uAC00 \uC77C\uC5B4\uB098\uB294 \uB2E8\uC77C entry point\uB97C \uAC16\uACE0 \uC788\uC2B5\uB2C8\uB2E4.(i.e. process_instructio);
    \uC544\uB798\uB294 \uD56D\uC0C1 \uD3EC\uD568\uB418\uB294 \uD30C\uB77C\uBBF8\uD130\uB4E4\uC785\uB2C8\uB2E4.
    • program_id: pubkey
    • accounts: array,
    • instruction_data: byte array
  • ",1),M=o("h2",{id:"deep-dive",tabindex:"-1"},[o("a",{class:"header-anchor",href:"#deep-dive","aria-hidden":"true"},"#"),e(" Deep Dive")],-1),z=o("p",null,"\uB300\uBD80\uBD84\uC758 \uB2E4\uB978 \uBE14\uB85D\uCCB4\uC778\uB4E4\uACFC \uB2E4\uB974\uAC8C, Solana\uB294 \uB370\uC774\uD130\uC640 \uCF54\uB4DC\uB97C \uC644\uBCBD\uD558\uAC8C \uBD84\uB9AC\uD569\uB2C8\uB2E4. Program\uC774 \uC0C1\uD638 \uC791\uC6A9\uD558\uB294 \uBAA8\uB4E0 \uB370\uC774\uD130\uB4E4\uC740 \uBD84\uB9AC\uB41C Account\uB4E4\uC5D0 \uC800\uC7A5\uB418\uBA70, Instruction\uB4E4\uC744 \uAC70\uCCD0 \uD638\uCD9C\uB429\uB2C8\uB2E4. \uC774\uB7EC\uD55C \uBAA8\uB378\uC740 \uB2E8\uC77C Generic Program\uC774 \uCD94\uAC00\uC801\uC778 \uBC30\uD3EC \uC5C6\uC774 \uB2E4\uC591\uD55C Account\uB4E4\uC744 \uAC70\uCCD0 \uB3D9\uC791\uD558\uB294 \uAC83\uC744 \uAC00\uB2A5\uD558\uAC8C \uD569\uB2C8\uB2E4. \uC774\uB7EC\uD55C \uD328\uD134\uC758 \uD754\uD55C \uC608\uB294 Native\uC640 SPL Program \uB4E4\uC5D0\uC11C \uBCFC \uC218 \uC788\uC2B5\uB2C8\uB2E4.",-1),O=o("h3",{id:"native-programs-the-solana-program-library-spl",tabindex:"-1"},[o("a",{class:"header-anchor",href:"#native-programs-the-solana-program-library-spl","aria-hidden":"true"},"#"),e(" Native Programs & The Solana Program Library (SPL)")],-1),j=e("Solana\uB294 on-chain \uC0C1\uD638 \uC791\uC6A9\uC744 \uC704\uD574 \uD589\uC2DD \uAD6C\uC131 \uC694\uC18C\uB85C\uC368 \uAE30\uB2A5\uD558\uB294 \uB2E4\uC218\uC758 Program\uB4E4\uC744 \uAC16\uACE0 \uC788\uC2B5\uB2C8\uB2E4. \uC774 Program\uB4E4\uC740 "),U={href:"https://docs.solana.com/developing/runtime-facilities/programs#bpf-loader",target:"_blank",rel:"noopener noreferrer"},G=e("Native Program"),H=e("\uB4E4\uACFC "),J={href:"https://spl.solana.com/",target:"_blank",rel:"noopener noreferrer"},K=e("Solana Program Library (SPL) Program"),W=e("\uB4E4\uB85C \uB098\uB269\uB2C8\uB2E4."),q=e("Native Program\uB4E4\uC740 validator\uB4E4\uC744 \uC6B4\uC601\uD558\uAE30 \uC704\uD574 \uC694\uAD6C\uB418\uB294 \uAE30\uBC18 \uAE30\uB2A5\uC744 \uC81C\uACF5\uD569\uB2C8\uB2E4. \uC774 Program\uB4E4 \uC911\uC5D0 \uAC00\uC7A5 \uC798 \uC54C\uB824\uC9C4 \uAC83\uC774 "),Q={href:"https://docs.solana.com/developing/runtime-facilities/programs#system-program",target:"_blank",rel:"noopener noreferrer"},X=e("System Program"),Y=e("\uC785\uB2C8\uB2E4. System Program\uC740 \uC0C8\uB85C\uC6B4 Account\uB4E4\uC744 \uAD00\uB9AC\uD558\uB294 \uAC83\uACFC \uB450 \uC9D1\uB2E8 \uC0AC\uC774\uC5D0\uC11C SOL\uC744 \uC804\uC1A1\uD558\uB294 \uAC83\uC744 \uCC45\uC784\uC9D1\uB2C8\uB2E4."),Z=e("SLP Program\uC740 \uD1A0\uD070 \uC0DD\uC131, \uAD50\uD658, \uB300\uC5EC\uD558\uB294 \uAC83\uC5D0 \uB354\uD574 stake pool\uC744 \uBC1C\uC0DD\uC2DC\uD0A4\uACE0, on-chain name service\uB97C \uC720\uC9C0\uD558\uB294 \uAC83 \uD3EC\uD568\uD574 \uB2E4\uC218\uC758 on-chain \uD65C\uB3D9\uC744 \uC9C0\uC6D0\uD569\uB2C8\uB2E4. "),$={href:"https://spl.solana.com/token",target:"_blank",rel:"noopener noreferrer"},oo=e("SPL Token Program"),eo=e("\uB4E4\uC740 CLI\uB97C \uAC70\uCCD0 \uC9C1\uC811 \uD638\uCD9C\uB420 \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uBC18\uBA74\uC5D0 "),to={href:"https://spl.solana.com/associated-token-account",target:"_blank",rel:"noopener noreferrer"},ro=e("Associated Token Account Program"),no=e(" \uAC19\uC740 \uB2E4\uB978 \uAC83\uB4E4\uC740 \uBCF4\uD1B5 Custom Program\uB4E4\uB85C \uAD6C\uC131\uB429\uB2C8\uB2E4."),ao=o("h3",{id:"writing-programs",tabindex:"-1"},[o("a",{class:"header-anchor",href:"#writing-programs","aria-hidden":"true"},"#"),e(" Writing Programs")],-1),so=e("Program\uB4E4\uC740 \uBCF4\uD1B5 Rust\uC640 C++\uB85C \uAC1C\uBC1C\uB429\uB2C8\uB2E4. \uD558\uC9C0\uB9CC, LLVM\uC758 BPF backend\uB85C \uBE4C\uB4DC\uB418\uB294 \uC5B4\uB5A4 \uC5B8\uC5B4\uB85C\uB3C4 \uAC1C\uBC1C \uAC00\uB2A5\uD569\uB2C8\uB2E4. "),io={href:"https://neon-labs.org/",target:"_blank",rel:"noopener noreferrer"},co=e("Neon Labs"),lo=e("\uC640 "),_o={href:"https://solang.readthedocs.io/en/latest/",target:"_blank",rel:"noopener noreferrer"},ho=e("Solang"),po=e("\uC740 \uCD5C\uADFC "),go={href:"https://ethereum.org/en/developers/docs/evm/",target:"_blank",rel:"noopener noreferrer"},mo=e("EVM"),uo=e(" \uD638\uD658\uC744 \uAC00\uB2A5\uD558\uAC8C \uD558\uACE0 \uAC1C\uBC1C\uC790\uB4E4\uC774 Program\uC744 Solidity\uC5D0\uC11C \uC791\uC131\uD560 \uC218 \uC788\uAC8C \uD558\uB294 \uC2DC\uB3C4\uB97C \uD558\uACE0 \uC788\uC2B5\uB2C8\uB2E4."),bo=n("

    \uB300\uBD80\uBD84\uC758 Rust \uAE30\uBC18 Program\uB4E4\uC740 \uC544\uB798\uC640 \uAC19\uC740 \uC544\uD0A4\uD14D\uCC98\uB97C \uC0AC\uC6A9\uD569\uB2C8\uB2E4.:

    FileDescription
    lib.rsRegistering modules
    entrypoint.rsEntrypoint to the program
    instruction.rsProgram API, (de)serializing instruction data
    processor.rsProgram logic
    state.rsProgram objects, (de)serializing state
    error.rsProgram-specific errors
    ",2),Po=e("\uCD5C\uADFC\uC5D0\uB294, "),fo={href:"https://github.com/coral-xyz/anchor",target:"_blank",rel:"noopener noreferrer"},ko=e("Anchor"),yo=e("\uAC00 Program\uC744 \uAC1C\uBC1C\uD558\uAE30 \uC704\uD55C \uD504\uB808\uC784\uC6CC\uD06C\uB85C \uB728\uACE0 \uC788\uC2B5\uB2C8\uB2E4. Anchor\uB294 boilerplate\uB97C \uC904\uC774\uACE0 (de)serialization \uCC98\uB9AC\uB97C \uAC04\uC18C\uD654\uD558\uB294 Ruby on Rails\uC640 \uBE44\uC2B7\uD55C Rust \uAE30\uBC18 \uD504\uB808\uC784\uC6CC\uD06C\uC785\uB2C8\uB2E4."),vo=n('

    Program\uB4E4\uC740 \uBCF4\uD1B5 Testnet\uACFC Mainnet\uC5D0 \uBC30\uD3EC\uB418\uAE30 \uC804\uC5D0 Localhost\uC640 Devnet \uD658\uACBD\uC5D0\uC11C \uAC1C\uBC1C\uB418\uACE0 \uD14C\uC2A4\uD2B8\uB429\uB2C8\uB2E4. Solana\uB294 \uC544\uB798 \uD658\uACBD\uB4E4\uC744 \uC9C0\uC6D0\uD569\uB2C8\uB2E4.

    Cluster EnvironmentRPC Connection URL
    Mainnet-betahttps://api.mainnet-beta.solana.com
    Testnethttps://api.testnet.solana.com
    Devnethttps://api.devnet.solana.com
    LocalhostDefault port: 8899 (e.g. http://localhost:8899, http://192.168.1.88:8899)

    \uC77C\uB2E8 \uD658\uACBD\uC5D0 \uBC30\uD3EC\uB418\uACE0 \uB098\uBA74, Client\uB4E4\uC740 \uAC01\uAC01\uC758 Cluster\uB85C\uC758 RPC \uC5F0\uACB0\uC744 \uD1B5\uD574 On-chain Program\uB4E4\uACFC \uC0C1\uD638\uC791\uC6A9 \uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.

    Deploying Programs

    ',4),Lo=e("\uAC1C\uBC1C\uC790\uB4E4\uC740 \uB2E4\uC74C\uACFC \uAC19\uC774 "),So={href:"https://docs.solana.com/cli/deploy-a-program",target:"_blank",rel:"noopener noreferrer"},xo=e("CLI"),Fo=e("\uB97C \uD1B5\uD574 Program\uC744 \uBC30\uD3EC\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4."),Ao=n(`
    solana program deploy <PROGRAM_FILEPATH>
     
    `,1),Ro=e("Program\uC774 \uBC30\uD3EC\uB420 \uB54C, "),Co={href:"https://en.wikipedia.org/wiki/Executable_and_Linkable_Format",target:"_blank",rel:"noopener noreferrer"},Bo=e("ELF shared object"),Do=e("(BPF bytecode\uB97C \uD3EC\uD568\uD558\uB294)\uB85C \uCEF4\uD30C\uC77C\uB418\uACE0 Solana Cluster\uB85C \uC5C5\uB85C\uB4DC\uB429\uB2C8\uB2E4. Program\uB4E4\uC740 \uADF8\uB4E4\uC758 Account\uAC00 "),Io=o("code",null,"execuable",-1),Eo=e(" \uD45C\uC2DC\uB418\uACE0 BPF Loader\uC5D0 \uD560\uB2F9\uB420 \uB54C\uB97C \uC81C\uC678\uD558\uACE0 Account \uC548\uC5D0 \uC874\uC7AC\uD569\uB2C8\uB2E4. \uC774 Account\uC758 \uC8FC\uC18C\uB294 "),No=o("code",null,"program_id",-1),wo=e("\uB85C\uC368 \uBAA8\uB4E0 Transaction\uC5D0\uC11C Program\uC744 \uCC38\uC870\uD558\uAE30 \uC704\uD574 \uC0AC\uC6A9\uB429\uB2C8\uB2E4."),To=e("Solana\uB294 \uCD5C\uADFC "),Vo={href:"https://explorer.solana.com/address/BPFLoaderUpgradeab1e11111111111111111111111",target:"_blank",rel:"noopener noreferrer"},Mo=e("Upgradable BPF Loader"),zo=e("\uB97C \uD3EC\uD568\uD574 multiple BPF Loader\uB97C \uC9C0\uC6D0\uD569\uB2C8\uB2E4. BPF Loader\uB294 Program\uC758 Account\uB97C \uAD00\uB9AC\uD558\uB294\uB370 Client\uB4E4\uC774 "),Oo=o("code",null,"program_id",-1),jo=e("\uB97C \uD1B5\uD574 \uC774\uAC83\uC744 \uAC00\uB2A5\uD558\uAC8C \uB9CC\uB4E4 \uCC45\uC784\uC774 \uC788\uC2B5\uB2C8\uB2E4. \uBAA8\uB4E0 Program\uB4E4\uC740 Instruction\uC5D0 \uB300\uD55C \uCC98\uB9AC\uAC00 \uC77C\uC5B4\uB098\uB294 \uD558\uB098\uC758 Entry Point\uB97C \uAC16\uACE0 \uC788\uC2B5\uB2C8\uB2E4. (i.e. "),Uo=o("code",null,"process_instruction",-1),Go=e(")"),Ho=o("br",null,null,-1),Jo=e(" \uC544\uB798\uB294 \uD56D\uC0C1 \uD3EC\uD568\uB418\uB294 \uD30C\uB77C\uBBF8\uD130\uB4E4\uC785\uB2C8\uB2E4."),Ko=n('
    • program_id: pubkey
    • accounts: array,
    • instruction_data: byte array

    \uC77C\uB2E8 \uD638\uCD9C\uB418\uACE0 \uB098\uBA74, Program\uB4E4\uC740 Solana Runtime\uC5D0 \uC758\uD574 \uC2E4\uD589\uB429\uB2C8\uB2E4.

    Other Resources

    ',3),Wo={href:"https://docs.solana.com/developing/on-chain-programs/overview",target:"_blank",rel:"noopener noreferrer"},qo=e("Official Documentation"),Qo={href:"https://spl.solana.com/",target:"_blank",rel:"noopener noreferrer"},Xo=e("SPL Documentation"),Yo={href:"https://jstarry.notion.site/Program-deploys-29780c48794c47308d5f138074dd9838",target:"_blank",rel:"noopener noreferrer"},Zo=e("Program Deploys by Justin Starry"),$o={href:"https://book.solmeet.dev/notes/solana-starter-kit",target:"_blank",rel:"noopener noreferrer"},oe=e("Solana Starter Kit by Iron Addicted Dog"),ee={href:"https://paulx.dev/blog/2021/01/14/programming-on-solana-an-introduction/",target:"_blank",rel:"noopener noreferrer"},te=e("Programming on Solana by Paulx"),re={href:"https://2501babe.github.io/posts/solana101.html",target:"_blank",rel:"noopener noreferrer"},ne=e("An Introduction to the Solana Blockchain by Hana"),ae={href:"https://github.com/coral-xyz/anchor",target:"_blank",rel:"noopener noreferrer"},se=e("Anchor");function ie(ce,de){const s=a("RouterLink"),r=a("ExternalLinkIcon");return c(),d(_,null,[p,g,m,o("div",u,[b,o("ul",null,[P,o("li",null,[f,t(s,{to:"/kr/core-concepts/accounts.html"},{default:l(()=>[k]),_:1}),y]),v,o("li",null,[L,o("a",S,[x,t(r)]),F,o("a",A,[R,t(r)]),C]),o("li",null,[B,o("a",D,[I,t(r)]),E,o("a",N,[w,t(r)]),T]),V])]),M,z,O,o("p",null,[j,o("a",U,[G,t(r)]),H,o("a",J,[K,t(r)]),W]),o("p",null,[q,o("a",Q,[X,t(r)]),Y]),o("p",null,[Z,o("a",$,[oo,t(r)]),eo,o("a",to,[ro,t(r)]),no]),ao,o("p",null,[so,o("a",io,[co,t(r)]),lo,o("a",_o,[ho,t(r)]),po,o("a",go,[mo,t(r)]),uo]),bo,o("p",null,[Po,o("a",fo,[ko,t(r)]),yo]),vo,o("p",null,[Lo,o("a",So,[xo,t(r)]),Fo]),Ao,o("p",null,[Ro,o("a",Co,[Bo,t(r)]),Do,Io,Eo,No,wo]),o("p",null,[To,o("a",Vo,[Mo,t(r)]),zo,Oo,jo,Uo,Go,Ho,Jo]),Ko,o("ul",null,[o("li",null,[o("a",Wo,[qo,t(r)])]),o("li",null,[o("a",Qo,[Xo,t(r)])]),o("li",null,[o("a",Yo,[Zo,t(r)])]),o("li",null,[o("a",$o,[oe,t(r)])]),o("li",null,[o("a",ee,[te,t(r)])]),o("li",null,[o("a",re,[ne,t(r)])]),o("li",null,[o("a",ae,[se,t(r)])])])],64)}var _e=i(h,[["render",ie]]);export{_e as default}; diff --git a/docs/.vuepress/dist/assets/programs.html.36150b0a.js b/docs/.vuepress/dist/assets/programs.html.712cf75d.js similarity index 97% rename from docs/.vuepress/dist/assets/programs.html.36150b0a.js rename to docs/.vuepress/dist/assets/programs.html.712cf75d.js index e08151bb4..702d0d373 100644 --- a/docs/.vuepress/dist/assets/programs.html.36150b0a.js +++ b/docs/.vuepress/dist/assets/programs.html.712cf75d.js @@ -1 +1 @@ -const t={key:"v-8b9f2cde",path:"/vi/core-concepts/programs.html",title:"Programs",lang:"vi-VN",frontmatter:{title:"Programs",head:[["meta",{name:"title",content:"To\xE0n t\u1EADp Solana | Programs"}],["meta",{name:"og:title",content:"To\xE0n t\u1EADp Solana | Programs"}],["meta",{name:"description",content:"Programs (hay th\u01B0\u1EDDng \u0111\u01B0\u1EE3c bi\u1EBFt \u0111\u1EBFn v\u1EDBi t\xEAn g\u1ECDi smart contracts) x\xE2y d\u1EF1ng n\u1EC1n t\u1EA3ng cho c\xE1c ho\u1EA1t \u0111\u1ED9ng on-chain. Chi ti\u1EBFt v\u1EC1 Programs v\xE0 c\xE1c kh\xE1i ni\u1EC7m c\u01A1n b\u1EA3n kh\xE1c trong To\xE0n t\u1EADp Solana."}],["meta",{name:"og:description",content:"Programs (hay th\u01B0\u1EDDng \u0111\u01B0\u1EE3c bi\u1EBFt \u0111\u1EBFn v\u1EDBi t\xEAn g\u1ECDi smart contracts) x\xE2y d\u1EF1ng n\u1EC1n t\u1EA3ng cho c\xE1c ho\u1EA1t \u0111\u1ED9ng on-chain. Chi ti\u1EBFt v\u1EC1 Programs v\xE0 c\xE1c kh\xE1i ni\u1EC7m c\u01A1n b\u1EA3n kh\xE1c trong To\xE0n t\u1EADp Solana."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"C\xF3 th\u1EC3 b\u1EA1n ch\u01B0a bi\u1EBFt",slug:"co-the-ban-chua-biet",children:[]},{level:2,title:"Chi ti\u1EBFt",slug:"chi-tiet",children:[{level:3,title:"Native Programs & Solana Program Library (SPL) Programs",slug:"native-programs-solana-program-library-spl-programs",children:[]},{level:3,title:"Vi\u1EBFt m\u1ED9t Program",slug:"viet-mot-program",children:[]},{level:3,title:"Tri\u1EC3n khai Program",slug:"trien-khai-program",children:[]}]},{level:2,title:"C\xE1c ngu\u1ED3n t\xE0i li\u1EC7u kh\xE1c",slug:"cac-nguon-tai-lieu-khac",children:[]}],git:{updatedTime:1658783638e3},filePathRelative:"vi/core-concepts/programs.md"};export{t as data}; +const t={key:"v-8b9f2cde",path:"/vi/core-concepts/programs.html",title:"Programs",lang:"vi-VN",frontmatter:{title:"Programs",head:[["meta",{name:"title",content:"To\xE0n t\u1EADp Solana | Programs"}],["meta",{name:"og:title",content:"To\xE0n t\u1EADp Solana | Programs"}],["meta",{name:"description",content:"Programs (hay th\u01B0\u1EDDng \u0111\u01B0\u1EE3c bi\u1EBFt \u0111\u1EBFn v\u1EDBi t\xEAn g\u1ECDi smart contracts) x\xE2y d\u1EF1ng n\u1EC1n t\u1EA3ng cho c\xE1c ho\u1EA1t \u0111\u1ED9ng on-chain. Chi ti\u1EBFt v\u1EC1 Programs v\xE0 c\xE1c kh\xE1i ni\u1EC7m c\u01A1n b\u1EA3n kh\xE1c trong To\xE0n t\u1EADp Solana."}],["meta",{name:"og:description",content:"Programs (hay th\u01B0\u1EDDng \u0111\u01B0\u1EE3c bi\u1EBFt \u0111\u1EBFn v\u1EDBi t\xEAn g\u1ECDi smart contracts) x\xE2y d\u1EF1ng n\u1EC1n t\u1EA3ng cho c\xE1c ho\u1EA1t \u0111\u1ED9ng on-chain. Chi ti\u1EBFt v\u1EC1 Programs v\xE0 c\xE1c kh\xE1i ni\u1EC7m c\u01A1n b\u1EA3n kh\xE1c trong To\xE0n t\u1EADp Solana."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"C\xF3 th\u1EC3 b\u1EA1n ch\u01B0a bi\u1EBFt",slug:"co-the-ban-chua-biet",children:[]},{level:2,title:"Chi ti\u1EBFt",slug:"chi-tiet",children:[{level:3,title:"Native Programs & Solana Program Library (SPL) Programs",slug:"native-programs-solana-program-library-spl-programs",children:[]},{level:3,title:"Vi\u1EBFt m\u1ED9t Program",slug:"viet-mot-program",children:[]},{level:3,title:"Tri\u1EC3n khai Program",slug:"trien-khai-program",children:[]}]},{level:2,title:"C\xE1c ngu\u1ED3n t\xE0i li\u1EC7u kh\xE1c",slug:"cac-nguon-tai-lieu-khac",children:[]}],git:{updatedTime:1677551527e3},filePathRelative:"vi/core-concepts/programs.md"};export{t as data}; diff --git a/docs/.vuepress/dist/assets/programs.html.3037de5a.js b/docs/.vuepress/dist/assets/programs.html.72bc0c7e.js similarity index 99% rename from docs/.vuepress/dist/assets/programs.html.3037de5a.js rename to docs/.vuepress/dist/assets/programs.html.72bc0c7e.js index 274b7317c..c4d1c3672 100644 --- a/docs/.vuepress/dist/assets/programs.html.3037de5a.js +++ b/docs/.vuepress/dist/assets/programs.html.72bc0c7e.js @@ -1,2 +1,2 @@ -import{_ as i,r as n,o as s,c as d,a as e,b as a,w as c,F as h,d as r,e as o}from"./app.cfdf84e7.js";const m={},_=e("h1",{id:"programs-programlar",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#programs-programlar","aria-hidden":"true"},"#"),r(" Programs (Programlar)")],-1),p=e("h2",{id:"facts-ozet-bilgiler",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#facts-ozet-bilgiler","aria-hidden":"true"},"#"),r(" Facts (\xD6zet Bilgiler)")],-1),g=e("p",null,[e("strong",null,"Bilgi Tablosu")],-1),u=e("li",null,[r("Programlar, hem son kullan\u0131c\u0131lardan hem de di\u011Fer programlardan gelen "),e("a",{href:"./transactions"},"talimatlar\u0131"),r(" i\u015Fler.")],-1),k=r("T\xFCm programlar stateless\u2019d\u0131r(durumsuzdur): etkile\u015Fime girdikleri t\xFCm veriler, talimatlar yoluyla iletilen ayr\u0131 "),b=r("account'larda"),y=r(" saklan\u0131r."),f=e("li",null,[r("Programlar "),e("code",null,"executable (y\xFCr\xFCt\xFClebilir)"),r(" olarak i\u015Faretlenmi\u015F account'larda saklan\u0131r.")],-1),v=r("T\xFCm programlar "),P={href:"https://docs.solana.com/developing/runtime-facilities/programs#bpf-loader",target:"_blank",rel:"noopener noreferrer"},L=r("BPF Loader"),z=r("'a aittir ve "),S={href:"https://docs.solana.com/developing/programming-model/runtime",target:"_blank",rel:"noopener noreferrer"},B=r("Solana Runtime"),x=r(" taraf\u0131ndan y\xFCr\xFCt\xFCl\xFCr."),R=r("Geli\u015Ftiriciler en yayg\u0131n olarak Rust veya C++'da programlar yazarlar, ancak "),F={href:"https://llvm.org/",target:"_blank",rel:"noopener noreferrer"},D=r("LLVM"),w=r("'nin "),A={href:"https://en.wikipedia.org/wiki/Berkeley_Packet_Filter",target:"_blank",rel:"noopener noreferrer"},C=r("BPF"),T=r(" arka ucunu hedefleyen herhangi bir dili se\xE7ebilirler."),N=o("
  • T\xFCm programlar\u0131n, talimat i\u015Flemenin ger\xE7ekle\u015Fti\u011Fi tek bir giri\u015F noktas\u0131 vard\u0131r. (process_instruction); parametreler her zaman \u015Funlar\u0131 i\xE7erir:
    • program_id: pubkey
    • accounts: array,
    • instruction_data: byte array
  • ",1),E=e("h2",{id:"deep-dive-derinlemesine-bak\u0131s",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#deep-dive-derinlemesine-bak\u0131s","aria-hidden":"true"},"#"),r(" Deep Dive (Derinlemesine Bak\u0131\u015F)")],-1),I=e("p",null,"Di\u011Fer bir\xE7ok blockchainden farkl\u0131 olarak Solana, kodu verilerden tamamen ay\u0131r\u0131r. Programlar\u0131n etkile\u015Fimde bulundu\u011Fu t\xFCm veriler ayr\u0131 account'larda saklan\u0131r ve talimatlar arac\u0131l\u0131\u011F\u0131yla referans olarak iletilir. Bu model, tek bir genel program\u0131n ek da\u011F\u0131t\u0131mlar gerektirmeden \xE7e\u015Fitli account'larda \xE7al\u0131\u015Fmas\u0131na izin verir. Bu kal\u0131b\u0131n yayg\u0131n \xF6rnekleri, Native(yerel) ve SPL Programlar\u0131nda g\xF6r\xFCl\xFCr.",-1),M=e("h3",{id:"native-program-lar-solana-program-library-spl",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#native-program-lar-solana-program-library-spl","aria-hidden":"true"},"#"),r(" Native Program\u2019lar & Solana Program Library (SPL)")],-1),V=e("p",null,"Solana, on-chain etkile\u015Fimler i\xE7in temel yap\u0131 ta\u015Flar\u0131 olarak hizmet eden bir dizi programla donat\u0131lm\u0131\u015F olarak gelir. Bu programlar Native Programlar ve Solana Program Library (SPL) Programlar\u0131 olarak ikiye ayr\u0131l\u0131r.",-1),O=e("p",null,"Native Program\u2019lar, validator\u2019leri \xE7al\u0131\u015Ft\u0131rmak i\xE7in gereken temel i\u015Flevleri sa\u011Flar. Bu programlar aras\u0131nda en \xE7ok bilineni, yeni account\u2019lar\u0131n y\xF6netilmesinden ve iki taraf aras\u0131nda SOL transferinden sorumlu olan Sistem Program\u0131d\u0131r.",-1),j=r("SPL Programlar\u0131, token olu\u015Fturma, takas etme ve \xF6d\xFCn\xE7 vermenin yan\u0131 s\u0131ra stake pool (hisse havuzu) olu\u015Fturma ve on-chain name service dahil olmak \xFCzere bir dizi on-chain etkinli\u011Fi destekler. SPL Token Program\u0131 do\u011Frudan CLI arac\u0131l\u0131\u011F\u0131yla \xE7a\u011Fr\u0131labilirken, "),G={href:"https://spl.solana.com/associated-token-account",target:"_blank",rel:"noopener noreferrer"},H=r("Associated Token Account Program"),K=r(" gibi di\u011Ferleri genellikle \xF6zel programlardan olu\u015Fur."),U=e("h3",{id:"writing-programs-program-yazma",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#writing-programs-program-yazma","aria-hidden":"true"},"#"),r(" Writing Programs (Program Yazma)")],-1),J=r("Programlar en yayg\u0131n olarak Rust veya C++ ile geli\u015Ftirilir, ancak LLVM'nin BPF arka ucunu hedefleyen herhangi bir dille geli\u015Ftirilebilir. "),W={href:"https://neon-labs.org/",target:"_blank",rel:"noopener noreferrer"},Y=r("Neon Labs"),q=r(" ve "),Q={href:"https://solang.readthedocs.io/en/latest/",target:"_blank",rel:"noopener noreferrer"},X=r("Solang"),Z=r("'\u0131n son giri\u015Fimleri, "),$={href:"https://ethereum.org/en/developers/docs/evm/",target:"_blank",rel:"noopener noreferrer"},ee=r("EVM"),re=r(" uyumlulu\u011Funu m\xFCmk\xFCn k\u0131lar ve geli\u015Ftiricilerin Solidity'de programlar yazmas\u0131na olanak tan\u0131r."),ae=o("

    Rust tabanl\u0131 programlar\u0131n \xE7o\u011Fu a\u015Fa\u011F\u0131daki mimariye uyar:

    DosyaA\xE7\u0131klama
    lib.rsMod\xFCllerin kaydedilmesi
    entrypoint.rsPrograma ba\u015Flang\u0131\xE7
    instruction.rsProgram API'si, komut verilerini (de)serialize etme
    processor.rsProgram mant\u0131\u011F\u0131n\u0131n bulundu\u011Fu b\xF6l\xFCm
    state.rsProgram nesneleri, durumu (de) serialize etme
    error.rsPrograma \xF6zg\xFC hatalar
    ",2),te=r("Son zamanlarda, "),oe={href:"https://github.com/coral-xyz/anchor",target:"_blank",rel:"noopener noreferrer"},ne=r("Anchor"),le=r(" program geli\u015Ftirmek i\xE7in pop\xFCler bir framework olarak ortaya \xE7\u0131km\u0131\u015Ft\u0131r. Anchor, Ruby on Rails'e benzeyen, Rust tabanl\u0131 geli\u015Ftirme i\xE7in (de)serialization s\xFCrecini kolayla\u015Ft\u0131ran, \xFCzerinde d\xFC\u015F\xFCn\xFClm\xFC\u015F bir frameworkt\xFCr."),ie=o("

    Programlar genellikle Testnet veya Mainnet'e da\u011F\u0131t\u0131lmadan \xF6nce Localhost ve Devnet geli\u015Ftirilir ve test edilir. Solana a\u015Fa\u011F\u0131daki ortamlar\u0131 destekler:

    Cluster EnvironmenRPC Connection URL
    Mainnet-betahttps://api.mainnet-beta.solana.com
    Testnethttps://api.testnet.solana.com
    Devnethttps://api.devnet.solana.com
    LocalhostDefault port: 8899 (e.g. http://localhost:8899, http://192.168.1.88:8899)
    ",2),se=r("Bir ortamda deploy edildikten sonra Client\u2019lar ilgili cluster'la olan "),de={href:"https://docs.solana.com/developing/clients/jsonrpc-api",target:"_blank",rel:"noopener noreferrer"},ce=r("RPC ba\u011Flant\u0131lar\u0131"),he=r(" arac\u0131l\u0131\u011F\u0131yla on-chain programlarla etkile\u015Fime girebilir."),me=e("h3",{id:"deploying-programs-programlar\u0131-cal\u0131st\u0131rma",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#deploying-programs-programlar\u0131-cal\u0131st\u0131rma","aria-hidden":"true"},"#"),r(" Deploying Programs (Programlar\u0131 \xC7al\u0131\u015Ft\u0131rma)")],-1),_e=r("Geli\u015Ftiriciler programlar\u0131n\u0131 "),pe={href:"https://docs.solana.com/cli/deploy-a-program",target:"_blank",rel:"noopener noreferrer"},ge=r("CLI"),ue=r(" arac\u0131l\u0131\u011F\u0131yla \xE7al\u0131\u015Ft\u0131rabilir:"),ke=o(`
    solana program deploy <PROGRAM_FILEPATH>
    +import{_ as i,r as n,o as s,c as d,a as e,b as a,w as c,F as h,d as r,e as o}from"./app.2fbb9e96.js";const m={},_=e("h1",{id:"programs-programlar",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#programs-programlar","aria-hidden":"true"},"#"),r(" Programs (Programlar)")],-1),p=e("h2",{id:"facts-ozet-bilgiler",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#facts-ozet-bilgiler","aria-hidden":"true"},"#"),r(" Facts (\xD6zet Bilgiler)")],-1),g=e("p",null,[e("strong",null,"Bilgi Tablosu")],-1),u=e("li",null,[r("Programlar, hem son kullan\u0131c\u0131lardan hem de di\u011Fer programlardan gelen "),e("a",{href:"./transactions"},"talimatlar\u0131"),r(" i\u015Fler.")],-1),k=r("T\xFCm programlar stateless\u2019d\u0131r(durumsuzdur): etkile\u015Fime girdikleri t\xFCm veriler, talimatlar yoluyla iletilen ayr\u0131 "),b=r("account'larda"),y=r(" saklan\u0131r."),f=e("li",null,[r("Programlar "),e("code",null,"executable (y\xFCr\xFCt\xFClebilir)"),r(" olarak i\u015Faretlenmi\u015F account'larda saklan\u0131r.")],-1),v=r("T\xFCm programlar "),P={href:"https://docs.solana.com/developing/runtime-facilities/programs#bpf-loader",target:"_blank",rel:"noopener noreferrer"},L=r("BPF Loader"),z=r("'a aittir ve "),S={href:"https://docs.solana.com/developing/programming-model/runtime",target:"_blank",rel:"noopener noreferrer"},B=r("Solana Runtime"),x=r(" taraf\u0131ndan y\xFCr\xFCt\xFCl\xFCr."),R=r("Geli\u015Ftiriciler en yayg\u0131n olarak Rust veya C++'da programlar yazarlar, ancak "),F={href:"https://llvm.org/",target:"_blank",rel:"noopener noreferrer"},D=r("LLVM"),w=r("'nin "),A={href:"https://en.wikipedia.org/wiki/Berkeley_Packet_Filter",target:"_blank",rel:"noopener noreferrer"},C=r("BPF"),T=r(" arka ucunu hedefleyen herhangi bir dili se\xE7ebilirler."),N=o("
  • T\xFCm programlar\u0131n, talimat i\u015Flemenin ger\xE7ekle\u015Fti\u011Fi tek bir giri\u015F noktas\u0131 vard\u0131r. (process_instruction); parametreler her zaman \u015Funlar\u0131 i\xE7erir:
    • program_id: pubkey
    • accounts: array,
    • instruction_data: byte array
  • ",1),E=e("h2",{id:"deep-dive-derinlemesine-bak\u0131s",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#deep-dive-derinlemesine-bak\u0131s","aria-hidden":"true"},"#"),r(" Deep Dive (Derinlemesine Bak\u0131\u015F)")],-1),I=e("p",null,"Di\u011Fer bir\xE7ok blockchainden farkl\u0131 olarak Solana, kodu verilerden tamamen ay\u0131r\u0131r. Programlar\u0131n etkile\u015Fimde bulundu\u011Fu t\xFCm veriler ayr\u0131 account'larda saklan\u0131r ve talimatlar arac\u0131l\u0131\u011F\u0131yla referans olarak iletilir. Bu model, tek bir genel program\u0131n ek da\u011F\u0131t\u0131mlar gerektirmeden \xE7e\u015Fitli account'larda \xE7al\u0131\u015Fmas\u0131na izin verir. Bu kal\u0131b\u0131n yayg\u0131n \xF6rnekleri, Native(yerel) ve SPL Programlar\u0131nda g\xF6r\xFCl\xFCr.",-1),M=e("h3",{id:"native-program-lar-solana-program-library-spl",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#native-program-lar-solana-program-library-spl","aria-hidden":"true"},"#"),r(" Native Program\u2019lar & Solana Program Library (SPL)")],-1),V=e("p",null,"Solana, on-chain etkile\u015Fimler i\xE7in temel yap\u0131 ta\u015Flar\u0131 olarak hizmet eden bir dizi programla donat\u0131lm\u0131\u015F olarak gelir. Bu programlar Native Programlar ve Solana Program Library (SPL) Programlar\u0131 olarak ikiye ayr\u0131l\u0131r.",-1),O=e("p",null,"Native Program\u2019lar, validator\u2019leri \xE7al\u0131\u015Ft\u0131rmak i\xE7in gereken temel i\u015Flevleri sa\u011Flar. Bu programlar aras\u0131nda en \xE7ok bilineni, yeni account\u2019lar\u0131n y\xF6netilmesinden ve iki taraf aras\u0131nda SOL transferinden sorumlu olan Sistem Program\u0131d\u0131r.",-1),j=r("SPL Programlar\u0131, token olu\u015Fturma, takas etme ve \xF6d\xFCn\xE7 vermenin yan\u0131 s\u0131ra stake pool (hisse havuzu) olu\u015Fturma ve on-chain name service dahil olmak \xFCzere bir dizi on-chain etkinli\u011Fi destekler. SPL Token Program\u0131 do\u011Frudan CLI arac\u0131l\u0131\u011F\u0131yla \xE7a\u011Fr\u0131labilirken, "),G={href:"https://spl.solana.com/associated-token-account",target:"_blank",rel:"noopener noreferrer"},H=r("Associated Token Account Program"),K=r(" gibi di\u011Ferleri genellikle \xF6zel programlardan olu\u015Fur."),U=e("h3",{id:"writing-programs-program-yazma",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#writing-programs-program-yazma","aria-hidden":"true"},"#"),r(" Writing Programs (Program Yazma)")],-1),J=r("Programlar en yayg\u0131n olarak Rust veya C++ ile geli\u015Ftirilir, ancak LLVM'nin BPF arka ucunu hedefleyen herhangi bir dille geli\u015Ftirilebilir. "),W={href:"https://neon-labs.org/",target:"_blank",rel:"noopener noreferrer"},Y=r("Neon Labs"),q=r(" ve "),Q={href:"https://solang.readthedocs.io/en/latest/",target:"_blank",rel:"noopener noreferrer"},X=r("Solang"),Z=r("'\u0131n son giri\u015Fimleri, "),$={href:"https://ethereum.org/en/developers/docs/evm/",target:"_blank",rel:"noopener noreferrer"},ee=r("EVM"),re=r(" uyumlulu\u011Funu m\xFCmk\xFCn k\u0131lar ve geli\u015Ftiricilerin Solidity'de programlar yazmas\u0131na olanak tan\u0131r."),ae=o("

    Rust tabanl\u0131 programlar\u0131n \xE7o\u011Fu a\u015Fa\u011F\u0131daki mimariye uyar:

    DosyaA\xE7\u0131klama
    lib.rsMod\xFCllerin kaydedilmesi
    entrypoint.rsPrograma ba\u015Flang\u0131\xE7
    instruction.rsProgram API'si, komut verilerini (de)serialize etme
    processor.rsProgram mant\u0131\u011F\u0131n\u0131n bulundu\u011Fu b\xF6l\xFCm
    state.rsProgram nesneleri, durumu (de) serialize etme
    error.rsPrograma \xF6zg\xFC hatalar
    ",2),te=r("Son zamanlarda, "),oe={href:"https://github.com/coral-xyz/anchor",target:"_blank",rel:"noopener noreferrer"},ne=r("Anchor"),le=r(" program geli\u015Ftirmek i\xE7in pop\xFCler bir framework olarak ortaya \xE7\u0131km\u0131\u015Ft\u0131r. Anchor, Ruby on Rails'e benzeyen, Rust tabanl\u0131 geli\u015Ftirme i\xE7in (de)serialization s\xFCrecini kolayla\u015Ft\u0131ran, \xFCzerinde d\xFC\u015F\xFCn\xFClm\xFC\u015F bir frameworkt\xFCr."),ie=o("

    Programlar genellikle Testnet veya Mainnet'e da\u011F\u0131t\u0131lmadan \xF6nce Localhost ve Devnet geli\u015Ftirilir ve test edilir. Solana a\u015Fa\u011F\u0131daki ortamlar\u0131 destekler:

    Cluster EnvironmenRPC Connection URL
    Mainnet-betahttps://api.mainnet-beta.solana.com
    Testnethttps://api.testnet.solana.com
    Devnethttps://api.devnet.solana.com
    LocalhostDefault port: 8899 (e.g. http://localhost:8899, http://192.168.1.88:8899)
    ",2),se=r("Bir ortamda deploy edildikten sonra Client\u2019lar ilgili cluster'la olan "),de={href:"https://docs.solana.com/developing/clients/jsonrpc-api",target:"_blank",rel:"noopener noreferrer"},ce=r("RPC ba\u011Flant\u0131lar\u0131"),he=r(" arac\u0131l\u0131\u011F\u0131yla on-chain programlarla etkile\u015Fime girebilir."),me=e("h3",{id:"deploying-programs-programlar\u0131-cal\u0131st\u0131rma",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#deploying-programs-programlar\u0131-cal\u0131st\u0131rma","aria-hidden":"true"},"#"),r(" Deploying Programs (Programlar\u0131 \xC7al\u0131\u015Ft\u0131rma)")],-1),_e=r("Geli\u015Ftiriciler programlar\u0131n\u0131 "),pe={href:"https://docs.solana.com/cli/deploy-a-program",target:"_blank",rel:"noopener noreferrer"},ge=r("CLI"),ue=r(" arac\u0131l\u0131\u011F\u0131yla \xE7al\u0131\u015Ft\u0131rabilir:"),ke=o(`
    solana program deploy <PROGRAM_FILEPATH>
     
    `,1),be=r("Bir program \xE7al\u0131\u015Ft\u0131\u011F\u0131nda, bir "),ye={href:"https://en.wikipedia.org/wiki/Executable_and_Linkable_Format",target:"_blank",rel:"noopener noreferrer"},fe=r("ELF"),ve=r(" shared object\u2019e (BPF bayt kodu i\xE7eren) derlenir ve Solana cluster\u2019a y\xFCklenir. Programlar account\u2019larda ya\u015Far (Solana'daki di\u011Fer her \u015Fey gibi), ancak bu account'lar "),Pe=e("code",null,"executable",-1),Le=r(" olarak i\u015Faretlenir ve BPF Loader\u2019a atan\u0131r. Bu account\u2019\u0131n adresi "),ze=e("code",null,"program_id",-1),Se=r(" olarak adland\u0131r\u0131l\u0131r ve gelecekteki t\xFCm i\u015Flemlerde programa ba\u015Fvurmak i\xE7in kullan\u0131l\u0131r."),Be=o('

    Solana, Upgradable BPF Loader da dahil olmak \xFCzere birden fazla BPF Loader\u2019\u0131 destekler. BPF Loader, program\u0131n account\u2019\u0131n\u0131 y\xF6netmekten ve program_id arac\u0131l\u0131\u011F\u0131yla client\u2019lara (client\u2019lara) sunmaktan sorumludur. T\xFCm programlarda instruction i\u015Flemenin ger\xE7ekle\u015Fti\u011Fi tek bir giri\u015F noktas\u0131 vard\u0131r (proses_instruction) ve parametreler her zaman \u015Funlar\u0131 i\xE7erir:

    • program_id: pubkey
    • accounts: array,
    • instruction_data: byte array

    \xC7a\u011Fr\u0131ld\u0131klar\u0131nda programlar Solana Runtime taraf\u0131ndan y\xFCr\xFCt\xFCl\xFCr.

    Other Resources (Di\u011Fer Kaynaklar)

    ',4),xe={href:"https://docs.solana.com/developing/on-chain-programs/overview",target:"_blank",rel:"noopener noreferrer"},Re=r("Official Documentation"),Fe={href:"https://spl.solana.com/",target:"_blank",rel:"noopener noreferrer"},De=r("SPL Documentation"),we={href:"https://jstarry.notion.site/Program-deploys-29780c48794c47308d5f138074dd9838",target:"_blank",rel:"noopener noreferrer"},Ae=r("Program Deploys by Justin Starry"),Ce={href:"https://book.solmeet.dev/notes/solana-starter-kit",target:"_blank",rel:"noopener noreferrer"},Te=r("Solana Starter Kit by Iron Addicted Dog"),Ne={href:"https://paulx.dev/blog/2021/01/14/programming-on-solana-an-introduction/",target:"_blank",rel:"noopener noreferrer"},Ee=r("Programming on Solana by Paulx"),Ie={href:"https://2501babe.github.io/posts/solana101.html",target:"_blank",rel:"noopener noreferrer"},Me=r("An Introduction to the Solana Blockchain by Hana"),Ve={href:"https://github.com/coral-xyz/anchor",target:"_blank",rel:"noopener noreferrer"},Oe=r("Anchor");function je(Ge,He){const l=n("RouterLink"),t=n("ExternalLinkIcon");return s(),d(h,null,[_,p,g,e("ul",null,[u,e("li",null,[k,a(l,{to:"/tr/core-concepts/accounts.html"},{default:c(()=>[b]),_:1}),y]),f,e("li",null,[v,e("a",P,[L,a(t)]),z,e("a",S,[B,a(t)]),x]),e("li",null,[R,e("a",F,[D,a(t)]),w,e("a",A,[C,a(t)]),T]),N]),E,I,M,V,O,e("p",null,[j,e("a",G,[H,a(t)]),K]),U,e("p",null,[J,e("a",W,[Y,a(t)]),q,e("a",Q,[X,a(t)]),Z,e("a",$,[ee,a(t)]),re]),ae,e("p",null,[te,e("a",oe,[ne,a(t)]),le]),ie,e("p",null,[se,e("a",de,[ce,a(t)]),he]),me,e("p",null,[_e,e("a",pe,[ge,a(t)]),ue]),ke,e("p",null,[be,e("a",ye,[fe,a(t)]),ve,Pe,Le,ze,Se]),Be,e("ul",null,[e("li",null,[e("a",xe,[Re,a(t)])]),e("li",null,[e("a",Fe,[De,a(t)])]),e("li",null,[e("a",we,[Ae,a(t)])]),e("li",null,[e("a",Ce,[Te,a(t)])]),e("li",null,[e("a",Ne,[Ee,a(t)])]),e("li",null,[e("a",Ie,[Me,a(t)])]),e("li",null,[e("a",Ve,[Oe,a(t)])])])],64)}var Ue=i(m,[["render",je]]);export{Ue as default}; diff --git a/docs/.vuepress/dist/assets/programs.html.bd94c517.js b/docs/.vuepress/dist/assets/programs.html.75772791.js similarity index 99% rename from docs/.vuepress/dist/assets/programs.html.bd94c517.js rename to docs/.vuepress/dist/assets/programs.html.75772791.js index 3b706d7f3..72dfe271b 100644 --- a/docs/.vuepress/dist/assets/programs.html.bd94c517.js +++ b/docs/.vuepress/dist/assets/programs.html.75772791.js @@ -1,4 +1,4 @@ -import{_ as r,r as c,o as i,c as k,b as t,w as a,F as b,a as n,d as s,e as p}from"./app.cfdf84e7.js";const m={},d=n("h1",{id:"programme-schreiben",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#programme-schreiben","aria-hidden":"true"},"#"),s(" Programme schreiben")],-1),_=n("h2",{id:"so-ubertragen-sie-sol-in-einem-programm",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#so-ubertragen-sie-sol-in-einem-programm","aria-hidden":"true"},"#"),s(" So \xFCbertragen Sie SOL in einem Programm")],-1),y=n("p",null,[s('Ihr Solana-Programm kann Lamports von einem Konto auf ein anderes \xFCbertragen ohne das Systemprogramm "aufzurufen". Die Grundregel ist die Ihr Programm kann Lamports von jedem Konto \xFCbertragen, das Ihrem Programm \xFCberhaupt auf irgendein Konto '),n("strong",null,"geh\xF6rt"),s(" .")],-1),f=n("p",null,[s("Das Empf\xE4ngerkonto "),n("em",null,"muss nicht"),s(" ein Konto Ihres Programms sein.")],-1),g=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"/// Transfers lamports from one account (must be program owned)"),s(` +import{_ as r,r as c,o as i,c as k,b as t,w as a,F as b,a as n,d as s,e as p}from"./app.2fbb9e96.js";const m={},d=n("h1",{id:"programme-schreiben",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#programme-schreiben","aria-hidden":"true"},"#"),s(" Programme schreiben")],-1),_=n("h2",{id:"so-ubertragen-sie-sol-in-einem-programm",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#so-ubertragen-sie-sol-in-einem-programm","aria-hidden":"true"},"#"),s(" So \xFCbertragen Sie SOL in einem Programm")],-1),y=n("p",null,[s('Ihr Solana-Programm kann Lamports von einem Konto auf ein anderes \xFCbertragen ohne das Systemprogramm "aufzurufen". Die Grundregel ist die Ihr Programm kann Lamports von jedem Konto \xFCbertragen, das Ihrem Programm \xFCberhaupt auf irgendein Konto '),n("strong",null,"geh\xF6rt"),s(" .")],-1),f=n("p",null,[s("Das Empf\xE4ngerkonto "),n("em",null,"muss nicht"),s(" ein Konto Ihres Programms sein.")],-1),g=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"/// Transfers lamports from one account (must be program owned)"),s(` `),n("span",{class:"token comment"},"/// to another account. The recipient can by any account"),s(` `),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"transfer_service_fee_lamports"),n("span",{class:"token punctuation"},"("),s(` from_account`),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token operator"},"&"),n("span",{class:"token class-name"},"AccountInfo"),n("span",{class:"token punctuation"},","),s(` diff --git a/docs/.vuepress/dist/assets/programs.html.ceb14559.js b/docs/.vuepress/dist/assets/programs.html.86897b5c.js similarity index 99% rename from docs/.vuepress/dist/assets/programs.html.ceb14559.js rename to docs/.vuepress/dist/assets/programs.html.86897b5c.js index ae0a2adfe..6800fbb45 100644 --- a/docs/.vuepress/dist/assets/programs.html.ceb14559.js +++ b/docs/.vuepress/dist/assets/programs.html.86897b5c.js @@ -1,2 +1,2 @@ -import{_ as i,r as a,o as d,c as l,a as e,b as t,w as h,F as c,d as n,e as o}from"./app.cfdf84e7.js";const _={},m=e("h1",{id:"programme",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#programme","aria-hidden":"true"},"#"),n(" Programme")],-1),g=e("p",null,"Jeder Entwickler kann Programme f\xFCr die Solana-Blockchain schreiben und bereitstellen. Das Programm (in anderen Protokollen als Smart Contracts bekannt) dient als Grundlage f\xFCr On-Chain-Aktivit\xE4ten und treibt alles an, von DeFi und NFTs bis hin zu Social Media und Gaming.",-1),u=e("h2",{id:"facts",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#facts","aria-hidden":"true"},"#"),n(" Facts")],-1),p={class:"custom-container tip"},b=e("p",{class:"custom-container-title"},"Fact Sheet",-1),f=e("li",null,[n("Programme verarbeiten "),e("a",{href:"./transactions"},"Aneweisungen"),n(" sowohl von Endbenutzern als auch von anderen Programmen")],-1),k=n("Alle Programme sind "),P=e("em",null,"zustandslos",-1),v=n(" ("),w=e("em",null,"stateless",-1),z=n("): Alle Daten, mit denen sie interagieren, werden in separaten "),S=n("Konten"),L=n(" gespeichert, die \xFCber Anweisungen gegeben werden."),B=e("li",null,'Programme selbst werden in Konten gespeichert, die als "ausf\xFChrbar" gekennzeichnet sind',-1),y=n("Alle Programme geh\xF6ren dem "),D={href:"https://docs.solana.com/developing/runtime-facilities/programs#bpf-loader",target:"_blank",rel:"noopener noreferrer"},x=n("BPF Loader"),A=n(" und werden von der "),E={href:"https://docs.solana.com/developing/programming-model/runtime",target:"_blank",rel:"noopener noreferrer"},F=n("Solana Runtime"),C=n(" ausgef\xFChrt"),R=n("Entwickler schreiben am h\xE4ufigsten Programme in Rust oder C++, k\xF6nnen aber jede Sprache w\xE4hlen, die auf das "),K={href:"https://llvm.org/",target:"_blank",rel:"noopener noreferrer"},V=n("LLVM"),N=n("'s "),I={href:"https://en.wikipedia.org/wiki/Berkeley_Packet_Filter",target:"_blank",rel:"noopener noreferrer"},M=n("BPF"),T=n(" Backend abziehlt"),j=o("
  • Alle Programme haben einen einzigen Einstiegspunkt, an dem die Befehlsverarbeitung stattfindet (i.e. process_instruction); Parameter beinhalten immer:
    • program_id: pubkey
    • accounts: array,
    • instruction_data: byte array
  • ",1),O=e("h2",{id:"deep-dive",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#deep-dive","aria-hidden":"true"},"#"),n(" Deep Dive")],-1),U=e("p",null,"Im Gegensatz zu den meisten anderen Blockchains trennt Solana Code vollst\xE4ndig von Daten. Alle Daten, mit denen Programme interagieren, werden in separaten Konten gespeichert und als Referenzen \xFCber Anweisungen weitergegeben. Dieses Modell erm\xF6glicht es, dass ein einziges generisches Programm \xFCber verschiedene Konten l\xE4uft, ohne dass zus\xE4tzliche Bereitstellungen (Deployments) erforderlich sind. \xDCbliche Beispiele f\xFCr dieses Muster finden sich in den Native- und SPL-Programmen.",-1),G=e("h3",{id:"native-programme-die-solana-programm-bibliothek-spl-solana-program-library",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#native-programme-die-solana-programm-bibliothek-spl-solana-program-library","aria-hidden":"true"},"#"),n(" Native Programme & Die Solana Programm Bibliothek (SPL - Solana Program Library)")],-1),J=n("Solana ist mit einer Reihe von Programmen ausgestattet, die als Kernbausteine \u200B\u200Bf\xFCr On-Chain-Interaktionen dienen. Diese Programme sind unterteilt in "),W={href:"https://docs.solana.com/developing/runtime-facilities/programs#bpf-loader",target:"_blank",rel:"noopener noreferrer"},q=n("Native Programme"),H=n(" und "),Q={href:"https://spl.solana.com/",target:"_blank",rel:"noopener noreferrer"},X=n("Solana Programm (SPL) Bibliotheken"),Y=n("."),Z=n("Native Programme stellen die Basisfunktionalit\xE4t bereit, die f\xFCr den Betrieb von Validatoren erforderlich ist. Unter diesen Programmen ist das bekannteste das "),$={href:"https://docs.solana.com/developing/runtime-facilities/programs#system-program",target:"_blank",rel:"noopener noreferrer"},ee=n("System Programm"),ne=n(", welches f\xFCr die Verwaltung neuer Konten und die \xDCbertragung von SOL zwischen zwei Parteien verantwortlich ist."),te=n("SPL-Programme unterst\xFCtzen eine Reihe von On-Chain-Aktivit\xE4ten, darunter das Erstellen, Tauschen und Verleihen von Token sowie die Generierung von Stake-Pools und die Aufrechterhaltung eines On-Chain-Namensdienstes. Das "),re={href:"https://spl.solana.com/token",target:"_blank",rel:"noopener noreferrer"},oe=n("SPL Token Program"),ae=n(" an direkt \xFCber die CLI aufgerufen werden, w\xE4hrend andere wie das "),se={href:"https://spl.solana.com/associated-token-account",target:"_blank",rel:"noopener noreferrer"},ie=n("verbundene Token-Kontoprogramm"),de=n(" werden normalerweise mit benutzerdefinierten Programmen zusammengestellt."),le=e("h3",{id:"writing-programs",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#writing-programs","aria-hidden":"true"},"#"),n(" Writing Programs")],-1),he=n("Programme werden am h\xE4ufigsten mit Rust oder C++ entwickelt, k\xF6nnen aber mit jeder Sprache entwickelt werden, die auf das BPF-Backend des LLVM abzielt. J\xFCngste Initiativen von "),ce={href:"https://neon-labs.org/",target:"_blank",rel:"noopener noreferrer"},_e=n("Neon Labs"),me=n(" und "),ge={href:"https://solang.readthedocs.io/en/latest/",target:"_blank",rel:"noopener noreferrer"},ue=n("Solang"),pe=n(" erm\xF6glichen jedoch "),be={href:"https://ethereum.org/en/developers/docs/evm/",target:"_blank",rel:"noopener noreferrer"},fe=n("EVM"),ke=n(" Kompatibilit\xE4t und erm\xF6glichen es Entwicklern, Programme in Solidity zu schreiben."),Pe=o("

    Die meisten Rust-basierten Programme halten sich an die folgende Architektur:

    DateiBeschreibung
    lib.rsModule registrieren
    entrypoint.rsEinstieg ins Programm
    instruction.rsProgramm-API, (De-)Serialisierung von Befehlsdaten
    processor.rsProgrammlogik
    state.rsProgrammobjekte, (De-)Serialisierungszustand
    error.rsProgrammspezifische Fehler
    ",2),ve=n("K\xFCrzlich hat sich "),we={href:"https://github.com/coral-xyz/anchor",target:"_blank",rel:"noopener noreferrer"},ze=n("Anchor"),Se=n(" zu einem beliebten Framework f\xFCr die Entwicklung von Programmen entwickelt. Anchor ist ein rechthaberisches Framework, \xE4hnlich wie Ruby on Rails, das Boilerplates reduziert und den (De-)Serialisierungsprozess f\xFCr die Rust-basierte Entwicklung rationalisiert."),Le=o("

    Programme werden normalerweise entwickelt und in Localhost- und Devnet-Umgebungen getestet, bevor sie auf Testnet oder Mainnet bereitgestellt werden. Solana unterst\xFCtzt die folgenden Umgebungen:

    Cluster-UmgebungRPC Verbindungs URL
    Mainnet-betahttps://api.mainnet-beta.solana.com
    Testnethttps://api.testnet.solana.com
    Devnethttps://api.devnet.solana.com
    LocalhostDefault port: 8899 (e.g. http://localhost:8899, http://192.168.1.88:8899)
    ",2),Be=n("Nach der Bereitstellung in einer Umgebung k\xF6nnen Clients mit On-Chain-Programmen \xFCber "),ye={href:"https://docs.solana.com/developing/clients/jsonrpc-api",target:"_blank",rel:"noopener noreferrer"},De=n("RPC Verbindungen"),xe=n(" mit dem jeweiligen Cluster interagieren."),Ae=e("h3",{id:"bereitstellen-von-programmen",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#bereitstellen-von-programmen","aria-hidden":"true"},"#"),n(" Bereitstellen von Programmen")],-1),Ee=n("Entwickler k\xF6nnen ihre Programme \xFCber die "),Fe={href:"https://docs.solana.com/cli/deploy-a-program",target:"_blank",rel:"noopener noreferrer"},Ce=n("CLI"),Re=n(" bereitstellen:"),Ke=o(`
    solana program deploy <PROGRAM_FILEPATH>
    +import{_ as i,r as a,o as d,c as l,a as e,b as t,w as h,F as c,d as n,e as o}from"./app.2fbb9e96.js";const _={},m=e("h1",{id:"programme",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#programme","aria-hidden":"true"},"#"),n(" Programme")],-1),g=e("p",null,"Jeder Entwickler kann Programme f\xFCr die Solana-Blockchain schreiben und bereitstellen. Das Programm (in anderen Protokollen als Smart Contracts bekannt) dient als Grundlage f\xFCr On-Chain-Aktivit\xE4ten und treibt alles an, von DeFi und NFTs bis hin zu Social Media und Gaming.",-1),u=e("h2",{id:"facts",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#facts","aria-hidden":"true"},"#"),n(" Facts")],-1),p={class:"custom-container tip"},b=e("p",{class:"custom-container-title"},"Fact Sheet",-1),f=e("li",null,[n("Programme verarbeiten "),e("a",{href:"./transactions"},"Aneweisungen"),n(" sowohl von Endbenutzern als auch von anderen Programmen")],-1),k=n("Alle Programme sind "),P=e("em",null,"zustandslos",-1),v=n(" ("),w=e("em",null,"stateless",-1),z=n("): Alle Daten, mit denen sie interagieren, werden in separaten "),S=n("Konten"),L=n(" gespeichert, die \xFCber Anweisungen gegeben werden."),B=e("li",null,'Programme selbst werden in Konten gespeichert, die als "ausf\xFChrbar" gekennzeichnet sind',-1),y=n("Alle Programme geh\xF6ren dem "),D={href:"https://docs.solana.com/developing/runtime-facilities/programs#bpf-loader",target:"_blank",rel:"noopener noreferrer"},x=n("BPF Loader"),A=n(" und werden von der "),E={href:"https://docs.solana.com/developing/programming-model/runtime",target:"_blank",rel:"noopener noreferrer"},F=n("Solana Runtime"),C=n(" ausgef\xFChrt"),R=n("Entwickler schreiben am h\xE4ufigsten Programme in Rust oder C++, k\xF6nnen aber jede Sprache w\xE4hlen, die auf das "),K={href:"https://llvm.org/",target:"_blank",rel:"noopener noreferrer"},V=n("LLVM"),N=n("'s "),I={href:"https://en.wikipedia.org/wiki/Berkeley_Packet_Filter",target:"_blank",rel:"noopener noreferrer"},M=n("BPF"),T=n(" Backend abziehlt"),j=o("
  • Alle Programme haben einen einzigen Einstiegspunkt, an dem die Befehlsverarbeitung stattfindet (i.e. process_instruction); Parameter beinhalten immer:
    • program_id: pubkey
    • accounts: array,
    • instruction_data: byte array
  • ",1),O=e("h2",{id:"deep-dive",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#deep-dive","aria-hidden":"true"},"#"),n(" Deep Dive")],-1),U=e("p",null,"Im Gegensatz zu den meisten anderen Blockchains trennt Solana Code vollst\xE4ndig von Daten. Alle Daten, mit denen Programme interagieren, werden in separaten Konten gespeichert und als Referenzen \xFCber Anweisungen weitergegeben. Dieses Modell erm\xF6glicht es, dass ein einziges generisches Programm \xFCber verschiedene Konten l\xE4uft, ohne dass zus\xE4tzliche Bereitstellungen (Deployments) erforderlich sind. \xDCbliche Beispiele f\xFCr dieses Muster finden sich in den Native- und SPL-Programmen.",-1),G=e("h3",{id:"native-programme-die-solana-programm-bibliothek-spl-solana-program-library",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#native-programme-die-solana-programm-bibliothek-spl-solana-program-library","aria-hidden":"true"},"#"),n(" Native Programme & Die Solana Programm Bibliothek (SPL - Solana Program Library)")],-1),J=n("Solana ist mit einer Reihe von Programmen ausgestattet, die als Kernbausteine \u200B\u200Bf\xFCr On-Chain-Interaktionen dienen. Diese Programme sind unterteilt in "),W={href:"https://docs.solana.com/developing/runtime-facilities/programs#bpf-loader",target:"_blank",rel:"noopener noreferrer"},q=n("Native Programme"),H=n(" und "),Q={href:"https://spl.solana.com/",target:"_blank",rel:"noopener noreferrer"},X=n("Solana Programm (SPL) Bibliotheken"),Y=n("."),Z=n("Native Programme stellen die Basisfunktionalit\xE4t bereit, die f\xFCr den Betrieb von Validatoren erforderlich ist. Unter diesen Programmen ist das bekannteste das "),$={href:"https://docs.solana.com/developing/runtime-facilities/programs#system-program",target:"_blank",rel:"noopener noreferrer"},ee=n("System Programm"),ne=n(", welches f\xFCr die Verwaltung neuer Konten und die \xDCbertragung von SOL zwischen zwei Parteien verantwortlich ist."),te=n("SPL-Programme unterst\xFCtzen eine Reihe von On-Chain-Aktivit\xE4ten, darunter das Erstellen, Tauschen und Verleihen von Token sowie die Generierung von Stake-Pools und die Aufrechterhaltung eines On-Chain-Namensdienstes. Das "),re={href:"https://spl.solana.com/token",target:"_blank",rel:"noopener noreferrer"},oe=n("SPL Token Program"),ae=n(" an direkt \xFCber die CLI aufgerufen werden, w\xE4hrend andere wie das "),se={href:"https://spl.solana.com/associated-token-account",target:"_blank",rel:"noopener noreferrer"},ie=n("verbundene Token-Kontoprogramm"),de=n(" werden normalerweise mit benutzerdefinierten Programmen zusammengestellt."),le=e("h3",{id:"writing-programs",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#writing-programs","aria-hidden":"true"},"#"),n(" Writing Programs")],-1),he=n("Programme werden am h\xE4ufigsten mit Rust oder C++ entwickelt, k\xF6nnen aber mit jeder Sprache entwickelt werden, die auf das BPF-Backend des LLVM abzielt. J\xFCngste Initiativen von "),ce={href:"https://neon-labs.org/",target:"_blank",rel:"noopener noreferrer"},_e=n("Neon Labs"),me=n(" und "),ge={href:"https://solang.readthedocs.io/en/latest/",target:"_blank",rel:"noopener noreferrer"},ue=n("Solang"),pe=n(" erm\xF6glichen jedoch "),be={href:"https://ethereum.org/en/developers/docs/evm/",target:"_blank",rel:"noopener noreferrer"},fe=n("EVM"),ke=n(" Kompatibilit\xE4t und erm\xF6glichen es Entwicklern, Programme in Solidity zu schreiben."),Pe=o("

    Die meisten Rust-basierten Programme halten sich an die folgende Architektur:

    DateiBeschreibung
    lib.rsModule registrieren
    entrypoint.rsEinstieg ins Programm
    instruction.rsProgramm-API, (De-)Serialisierung von Befehlsdaten
    processor.rsProgrammlogik
    state.rsProgrammobjekte, (De-)Serialisierungszustand
    error.rsProgrammspezifische Fehler
    ",2),ve=n("K\xFCrzlich hat sich "),we={href:"https://github.com/coral-xyz/anchor",target:"_blank",rel:"noopener noreferrer"},ze=n("Anchor"),Se=n(" zu einem beliebten Framework f\xFCr die Entwicklung von Programmen entwickelt. Anchor ist ein rechthaberisches Framework, \xE4hnlich wie Ruby on Rails, das Boilerplates reduziert und den (De-)Serialisierungsprozess f\xFCr die Rust-basierte Entwicklung rationalisiert."),Le=o("

    Programme werden normalerweise entwickelt und in Localhost- und Devnet-Umgebungen getestet, bevor sie auf Testnet oder Mainnet bereitgestellt werden. Solana unterst\xFCtzt die folgenden Umgebungen:

    Cluster-UmgebungRPC Verbindungs URL
    Mainnet-betahttps://api.mainnet-beta.solana.com
    Testnethttps://api.testnet.solana.com
    Devnethttps://api.devnet.solana.com
    LocalhostDefault port: 8899 (e.g. http://localhost:8899, http://192.168.1.88:8899)
    ",2),Be=n("Nach der Bereitstellung in einer Umgebung k\xF6nnen Clients mit On-Chain-Programmen \xFCber "),ye={href:"https://docs.solana.com/developing/clients/jsonrpc-api",target:"_blank",rel:"noopener noreferrer"},De=n("RPC Verbindungen"),xe=n(" mit dem jeweiligen Cluster interagieren."),Ae=e("h3",{id:"bereitstellen-von-programmen",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#bereitstellen-von-programmen","aria-hidden":"true"},"#"),n(" Bereitstellen von Programmen")],-1),Ee=n("Entwickler k\xF6nnen ihre Programme \xFCber die "),Fe={href:"https://docs.solana.com/cli/deploy-a-program",target:"_blank",rel:"noopener noreferrer"},Ce=n("CLI"),Re=n(" bereitstellen:"),Ke=o(`
    solana program deploy <PROGRAM_FILEPATH>
     
    `,1),Ve=n("Wenn ein Programm bereitgestellt wird, wird es zu einem "),Ne={href:"https://en.wikipedia.org/wiki/Executable_and_Linkable_Format",target:"_blank",rel:"noopener noreferrer"},Ie=n("ELF shared object"),Me=n(" kompiliert und in den Solana-Cluster hochgeladen. Programme befinden sich in Konten (\xE4hnlich wie alles andere auf Solana), au\xDFer dass diese Konten als \u201Eausf\xFChrbar\u201C markiert und dem BPF Loader zugewiesen sind. Die Adresse dieses Kontos wird als \u201Eprogram_id\u201C bezeichnet und wird verwendet, um bei allen zuk\xFCnftigen Transaktionen auf das Programm zu verweisen."),Te=n("Solana unterst\xFCtzt mehrere BPF Loader, wobei der neueste der "),je={href:"https://explorer.solana.com/address/BPFLoaderUpgradeab1e11111111111111111111111",target:"_blank",rel:"noopener noreferrer"},Oe=n("aktualisierbare BPF Lader"),Ue=n(". Der BPF Loader ist daf\xFCr verantwortlich, das Konto des Programms zu verwalten und es den Clients \xFCber die \u201Eprogram_id\u201C zur Verf\xFCgung zu stellen. Alle Programme haben einen einzigen Einstiegspunkt, an dem die Befehlsverarbeitung stattfindet (d. h. \u201Eprocess_instruction\u201C), und die Parameter beinhalten immer:"),Ge=o('
    • program_id: pubkey
    • accounts: array,
    • instruction_data: byte array

    Einmal aufgerufen, werden Programme von der Solana-Laufzeit ausgef\xFChrt.

    Weitere Quellen

    ',3),Je={href:"https://docs.solana.com/developing/on-chain-programs/overview",target:"_blank",rel:"noopener noreferrer"},We=n("Offizielle Dokumentation"),qe={href:"https://spl.solana.com/",target:"_blank",rel:"noopener noreferrer"},He=n("SPL Dokumentation"),Qe={href:"https://jstarry.notion.site/Program-deploys-29780c48794c47308d5f138074dd9838",target:"_blank",rel:"noopener noreferrer"},Xe=n("Programm-Bereitstellung von Justin Starry"),Ye={href:"https://book.solmeet.dev/notes/solana-starter-kit",target:"_blank",rel:"noopener noreferrer"},Ze=n("Solana Starter Kit von Iron Addicted Dog"),$e={href:"https://paulx.dev/blog/2021/01/14/programming-on-solana-an-introduction/",target:"_blank",rel:"noopener noreferrer"},en=n("Programmierung auf Solana by Paulx"),nn={href:"https://2501babe.github.io/posts/solana101.html",target:"_blank",rel:"noopener noreferrer"},tn=n("Eine Einf\xFChrung in die Solana Blockchain von Hana"),rn={href:"https://github.com/coral-xyz/anchor",target:"_blank",rel:"noopener noreferrer"},on=n("Anchor");function an(sn,dn){const s=a("RouterLink"),r=a("ExternalLinkIcon");return d(),l(c,null,[m,g,u,e("div",p,[b,e("ul",null,[f,e("li",null,[k,P,v,w,z,t(s,{to:"/de/core-concepts/accounts.html"},{default:h(()=>[S]),_:1}),L]),B,e("li",null,[y,e("a",D,[x,t(r)]),A,e("a",E,[F,t(r)]),C]),e("li",null,[R,e("a",K,[V,t(r)]),N,e("a",I,[M,t(r)]),T]),j])]),O,U,G,e("p",null,[J,e("a",W,[q,t(r)]),H,e("a",Q,[X,t(r)]),Y]),e("p",null,[Z,e("a",$,[ee,t(r)]),ne]),e("p",null,[te,e("a",re,[oe,t(r)]),ae,e("a",se,[ie,t(r)]),de]),le,e("p",null,[he,e("a",ce,[_e,t(r)]),me,e("a",ge,[ue,t(r)]),pe,e("a",be,[fe,t(r)]),ke]),Pe,e("p",null,[ve,e("a",we,[ze,t(r)]),Se]),Le,e("p",null,[Be,e("a",ye,[De,t(r)]),xe]),Ae,e("p",null,[Ee,e("a",Fe,[Ce,t(r)]),Re]),Ke,e("p",null,[Ve,e("a",Ne,[Ie,t(r)]),Me]),e("p",null,[Te,e("a",je,[Oe,t(r)]),Ue]),Ge,e("ul",null,[e("li",null,[e("a",Je,[We,t(r)])]),e("li",null,[e("a",qe,[He,t(r)])]),e("li",null,[e("a",Qe,[Xe,t(r)])]),e("li",null,[e("a",Ye,[Ze,t(r)])]),e("li",null,[e("a",$e,[en,t(r)])]),e("li",null,[e("a",nn,[tn,t(r)])]),e("li",null,[e("a",rn,[on,t(r)])])])],64)}var hn=i(_,[["render",an]]);export{hn as default}; diff --git a/docs/.vuepress/dist/assets/programs.html.0b307755.js b/docs/.vuepress/dist/assets/programs.html.8ae34e5c.js similarity index 99% rename from docs/.vuepress/dist/assets/programs.html.0b307755.js rename to docs/.vuepress/dist/assets/programs.html.8ae34e5c.js index 0c87d7392..8e6d1711d 100644 --- a/docs/.vuepress/dist/assets/programs.html.0b307755.js +++ b/docs/.vuepress/dist/assets/programs.html.8ae34e5c.js @@ -1,4 +1,4 @@ -import{_ as r,r as c,o as i,c as k,b as t,w as a,F as b,a as n,d as s,e as p}from"./app.cfdf84e7.js";const m={},d=n("h1",{id:"writing-programs",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#writing-programs","aria-hidden":"true"},"#"),s(" Writing Programs")],-1),_=n("h2",{id:"how-to-transfer-sol-in-a-program",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-transfer-sol-in-a-program","aria-hidden":"true"},"#"),s(" How to transfer SOL in a program")],-1),y=n("p",null,[s("\uB2F9\uC2E0\uC758 Solana Program\uC740 System Program\uC744 \uD638\uCD9C\uD558\uC9C0 \uC54A\uACE0 \uD558\uB098\uC758 Account\uC5D0\uC11C \uB2E4\uB978 Account\uB85C \uC804\uC1A1\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uD575\uC2EC\uC801\uC778 \uADDC\uCE59\uC740 \uB2F9\uC2E0\uC758 Program\uC774 "),n("strong",null,"\uC18C\uC720\uD55C"),s(" \uBAA8\uB4E0 Account\uC5D0\uC11C \uB2E4\uB978 Account\uB4E4\uB85C lamports\uB97C \uBCF4\uB0BC \uC218 \uC788\uB2E4\uB294 \uAC83\uC785\uB2C8\uB2E4.")],-1),f=n("p",null,"\uC804\uC1A1\uC744 \uBC1B\uB294 Account\uB294 \uB2F9\uC2E0\uC774 Program\uC774 \uC18C\uC720\uD55C Account\uAC00 \uC544\uB2C8\uC5B4\uC57C \uD569\uB2C8\uB2E4.",-1),g=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"/// Transfers lamports from one account (must be program owned)"),s(` +import{_ as r,r as c,o as i,c as k,b as t,w as a,F as b,a as n,d as s,e as p}from"./app.2fbb9e96.js";const m={},d=n("h1",{id:"writing-programs",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#writing-programs","aria-hidden":"true"},"#"),s(" Writing Programs")],-1),_=n("h2",{id:"how-to-transfer-sol-in-a-program",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-transfer-sol-in-a-program","aria-hidden":"true"},"#"),s(" How to transfer SOL in a program")],-1),y=n("p",null,[s("\uB2F9\uC2E0\uC758 Solana Program\uC740 System Program\uC744 \uD638\uCD9C\uD558\uC9C0 \uC54A\uACE0 \uD558\uB098\uC758 Account\uC5D0\uC11C \uB2E4\uB978 Account\uB85C \uC804\uC1A1\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uD575\uC2EC\uC801\uC778 \uADDC\uCE59\uC740 \uB2F9\uC2E0\uC758 Program\uC774 "),n("strong",null,"\uC18C\uC720\uD55C"),s(" \uBAA8\uB4E0 Account\uC5D0\uC11C \uB2E4\uB978 Account\uB4E4\uB85C lamports\uB97C \uBCF4\uB0BC \uC218 \uC788\uB2E4\uB294 \uAC83\uC785\uB2C8\uB2E4.")],-1),f=n("p",null,"\uC804\uC1A1\uC744 \uBC1B\uB294 Account\uB294 \uB2F9\uC2E0\uC774 Program\uC774 \uC18C\uC720\uD55C Account\uAC00 \uC544\uB2C8\uC5B4\uC57C \uD569\uB2C8\uB2E4.",-1),g=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"/// Transfers lamports from one account (must be program owned)"),s(` `),n("span",{class:"token comment"},"/// to another account. The recipient can by any account"),s(` `),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"transfer_service_fee_lamports"),n("span",{class:"token punctuation"},"("),s(` from_account`),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token operator"},"&"),n("span",{class:"token class-name"},"AccountInfo"),n("span",{class:"token punctuation"},","),s(` diff --git a/docs/.vuepress/dist/assets/programs.html.53ea3f69.js b/docs/.vuepress/dist/assets/programs.html.8e2df564.js similarity index 99% rename from docs/.vuepress/dist/assets/programs.html.53ea3f69.js rename to docs/.vuepress/dist/assets/programs.html.8e2df564.js index 35aee1ba1..687a1adfc 100644 --- a/docs/.vuepress/dist/assets/programs.html.53ea3f69.js +++ b/docs/.vuepress/dist/assets/programs.html.8e2df564.js @@ -1,2 +1,2 @@ -import{_ as i,r as s,o as c,c as d,a as o,b as t,w as l,F as _,d as e,e as n}from"./app.cfdf84e7.js";const h={},p=o("h1",{id:"programs",tabindex:"-1"},[o("a",{class:"header-anchor",href:"#programs","aria-hidden":"true"},"#"),e(" Programs")],-1),m=o("p",null,"\u0E19\u0E31\u0E01\u0E1E\u0E31\u0E12\u0E19\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E40\u0E02\u0E35\u0E22\u0E19 \u0E41\u0E25\u0E30\u0E1B\u0E25\u0E48\u0E2D\u0E22 (deploy) programs \u0E1A\u0E19 Solana blockchain. Programs (\u0E0B\u0E36\u0E48\u0E07\u0E01\u0E47\u0E04\u0E37\u0E2D smart contracts \u0E1A\u0E19 protocols \u0E2D\u0E37\u0E48\u0E19\u0E46) \u0E40\u0E1B\u0E47\u0E19\u0E2A\u0E48\u0E27\u0E19\u0E23\u0E32\u0E01\u0E10\u0E32\u0E19\u0E02\u0E2D\u0E07\u0E01\u0E32\u0E23\u0E17\u0E33\u0E07\u0E32\u0E19 on-chain, \u0E17\u0E33\u0E44\u0E14\u0E49\u0E17\u0E38\u0E01\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E15\u0E31\u0E49\u0E07\u0E41\u0E15\u0E48 DeFi \u0E41\u0E25\u0E30 NFTs \u0E08\u0E19\u0E44\u0E1B\u0E16\u0E36\u0E07 Social Media \u0E41\u0E25\u0E30 Gaming.",-1),g=o("h2",{id:"\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49",tabindex:"-1"},[o("a",{class:"header-anchor",href:"#\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49","aria-hidden":"true"},"#"),e(" \u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49")],-1),u={class:"custom-container tip"},b=o("p",{class:"custom-container-title"},"Fact Sheet",-1),f=o("li",null,[e("Programs \u0E1B\u0E23\u0E30\u0E21\u0E27\u0E25\u0E1C\u0E25 "),o("a",{href:"./transactions"},"instructions"),e(" \u0E17\u0E31\u0E49\u0E07\u0E17\u0E35\u0E48\u0E21\u0E32\u0E08\u0E32\u0E01 end users \u0E41\u0E25\u0E30\u0E21\u0E32\u0E08\u0E32\u0E01 programs \u0E2D\u0E37\u0E48\u0E19\u0E46")],-1),k=e("\u0E17\u0E38\u0E01\u0E46 programs \u0E08\u0E30\u0E40\u0E1B\u0E47\u0E19 "),P=o("em",null,"stateless",-1),y=e(": \u0E41\u0E25\u0E30 data \u0E17\u0E35\u0E48\u0E21\u0E31\u0E19\u0E17\u0E33\u0E07\u0E32\u0E19\u0E14\u0E49\u0E27\u0E22\u0E08\u0E30\u0E16\u0E39\u0E01\u0E40\u0E01\u0E47\u0E1A\u0E41\u0E22\u0E01\u0E44\u0E27\u0E49\u0E17\u0E35\u0E48 "),v=e("accounts"),L=e(" \u0E17\u0E35\u0E48\u0E2A\u0E48\u0E07\u0E1C\u0E48\u0E32\u0E19\u0E21\u0E32\u0E17\u0E32\u0E07 instructions"),S=o("li",null,[e("Programs \u0E08\u0E30\u0E16\u0E39\u0E01\u0E40\u0E01\u0E47\u0E1A\u0E43\u0E19 accounts \u0E17\u0E35\u0E48\u0E23\u0E30\u0E1A\u0E38\u0E44\u0E27\u0E49\u0E27\u0E48\u0E32 "),o("code",null,"executable")],-1),x=e("\u0E17\u0E38\u0E01\u0E46 programs \u0E08\u0E30\u0E21\u0E35\u0E40\u0E08\u0E49\u0E32\u0E02\u0E2D\u0E07\u0E04\u0E37\u0E2D "),F={href:"https://docs.solana.com/developing/runtime-facilities/programs#bpf-loader",target:"_blank",rel:"noopener noreferrer"},R=e("BPF Loader"),B=e(" \u0E41\u0E25\u0E30\u0E08\u0E30\u0E16\u0E39\u0E01\u0E14\u0E33\u0E40\u0E19\u0E34\u0E19\u0E01\u0E32\u0E23 (executed) \u0E42\u0E14\u0E22 "),w={href:"https://docs.solana.com/developing/programming-model/runtime",target:"_blank",rel:"noopener noreferrer"},A=e("Solana Runtime"),C=e("\u0E19\u0E31\u0E01\u0E1E\u0E31\u0E12\u0E19\u0E32\u0E08\u0E30\u0E40\u0E02\u0E35\u0E22\u0E19 programs \u0E14\u0E49\u0E27\u0E22\u0E20\u0E32\u0E29\u0E32 Rust \u0E2B\u0E23\u0E37\u0E2D C++, \u0E41\u0E15\u0E48\u0E01\u0E47\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E40\u0E25\u0E37\u0E2D\u0E01\u0E20\u0E32\u0E29\u0E32\u0E43\u0E14\u0E46 \u0E01\u0E47\u0E44\u0E14\u0E49\u0E17\u0E35\u0E48 target "),N={href:"https://llvm.org/",target:"_blank",rel:"noopener noreferrer"},D=e("LLVM"),E=e("'s "),T={href:"https://en.wikipedia.org/wiki/Berkeley_Packet_Filter",target:"_blank",rel:"noopener noreferrer"},I=e("BPF"),M=e(" \u0E44\u0E14\u0E49"),V=n("
  • \u0E17\u0E38\u0E01\u0E46 programs \u0E08\u0E30\u0E21\u0E35\u0E17\u0E32\u0E07\u0E40\u0E02\u0E49\u0E32 (entry point) \u0E17\u0E32\u0E07\u0E40\u0E14\u0E35\u0E22\u0E27 \u0E0B\u0E36\u0E48\u0E07\u0E40\u0E1B\u0E47\u0E19\u0E17\u0E35\u0E48\u0E17\u0E35\u0E48 instruction \u0E08\u0E30\u0E16\u0E39\u0E01\u0E14\u0E33\u0E40\u0E19\u0E34\u0E19\u0E01\u0E32\u0E23(process_instruction); parameters \u0E08\u0E30\u0E15\u0E49\u0E2D\u0E07\u0E21\u0E35\u0E2A\u0E34\u0E48\u0E07\u0E40\u0E2B\u0E25\u0E48\u0E32\u0E19\u0E35\u0E49\u0E40\u0E2A\u0E21\u0E2D:
    • program_id: pubkey
    • accounts: array,
    • instruction_data: byte array
  • ",1),z=o("h2",{id:"\u0E25\u0E07\u0E25\u0E36\u0E01",tabindex:"-1"},[o("a",{class:"header-anchor",href:"#\u0E25\u0E07\u0E25\u0E36\u0E01","aria-hidden":"true"},"#"),e(" \u0E25\u0E07\u0E25\u0E36\u0E01")],-1),j=o("p",null,"Solana \u0E44\u0E21\u0E48\u0E40\u0E2B\u0E21\u0E37\u0E2D\u0E19 blockchains \u0E2D\u0E37\u0E48\u0E19\u0E46 \u0E15\u0E23\u0E07\u0E17\u0E35\u0E48\u0E40\u0E23\u0E32\u0E08\u0E30\u0E41\u0E22\u0E01 code \u0E01\u0E31\u0E1A data \u0E2D\u0E2D\u0E01\u0E08\u0E32\u0E01\u0E01\u0E31\u0E19 \u0E17\u0E38\u0E01\u0E46 data \u0E17\u0E35\u0E48 programs \u0E08\u0E30\u0E43\u0E0A\u0E49\u0E08\u0E30\u0E16\u0E39\u0E01\u0E40\u0E01\u0E47\u0E1A\u0E44\u0E27\u0E49\u0E43\u0E19 account \u0E2D\u0E35\u0E01\u0E15\u0E31\u0E27\u0E41\u0E22\u0E01\u0E01\u0E31\u0E19 \u0E41\u0E25\u0E30 programs \u0E08\u0E30\u0E23\u0E31\u0E1A\u0E40\u0E1B\u0E47\u0E19\u0E0A\u0E38\u0E14\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E49\u0E32\u0E07\u0E2D\u0E34\u0E07 (references) \u0E44\u0E1B\u0E16\u0E36\u0E07 account \u0E40\u0E2B\u0E25\u0E48\u0E32\u0E19\u0E31\u0E49\u0E19\u0E1C\u0E48\u0E32\u0E19\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E0A\u0E38\u0E14\u0E04\u0E33\u0E2A\u0E31\u0E48\u0E07 (instructions) \u0E01\u0E32\u0E23\u0E17\u0E33\u0E41\u0E1A\u0E1A\u0E19\u0E35\u0E49\u0E08\u0E30\u0E17\u0E33\u0E43\u0E2B\u0E49 program \u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E17\u0E33\u0E07\u0E32\u0E19\u0E02\u0E49\u0E32\u0E21 \u0E2B\u0E23\u0E37\u0E2D\u0E40\u0E23\u0E35\u0E22\u0E01\u0E43\u0E0A\u0E49 accounts \u0E15\u0E48\u0E32\u0E07\u0E46 \u0E42\u0E14\u0E22\u0E44\u0E21\u0E48\u0E15\u0E49\u0E2D\u0E07 deploy \u0E43\u0E2B\u0E21\u0E48 \u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A (pattern) \u0E40\u0E2B\u0E25\u0E48\u0E32\u0E19\u0E35\u0E49\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E40\u0E2B\u0E47\u0E19\u0E44\u0E14\u0E49\u0E43\u0E19\u0E17\u0E31\u0E49\u0E07 Native \u0E41\u0E25\u0E30 SPL Programs",-1),O=o("h3",{id:"native-programs-\u0E41\u0E25\u0E30-the-solana-program-library-spl",tabindex:"-1"},[o("a",{class:"header-anchor",href:"#native-programs-\u0E41\u0E25\u0E30-the-solana-program-library-spl","aria-hidden":"true"},"#"),e(" Native Programs \u0E41\u0E25\u0E30 The Solana Program Library (SPL)")],-1),U=e("Solana \u0E21\u0E32\u0E1E\u0E23\u0E49\u0E2D\u0E21\u0E01\u0E31\u0E1A programs \u0E2B\u0E25\u0E32\u0E22\u0E15\u0E31\u0E27\u0E17\u0E35\u0E48\u0E43\u0E0A\u0E49\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E01\u0E32\u0E23\u0E17\u0E33\u0E07\u0E32\u0E19 on-chain. \u0E42\u0E14\u0E22\u0E17\u0E35\u0E48 programs \u0E08\u0E30\u0E41\u0E1A\u0E48\u0E07\u0E40\u0E1B\u0E47\u0E19 "),G={href:"https://docs.solana.com/developing/runtime-facilities/programs#bpf-loader",target:"_blank",rel:"noopener noreferrer"},H=e("Native Programs"),J=e(" \u0E41\u0E25\u0E30 "),K={href:"https://spl.solana.com/",target:"_blank",rel:"noopener noreferrer"},q=e("Solana Program Library (SPL) Programs"),Q=e("."),W=e("Native Programs \u0E21\u0E35\u0E44\u0E27\u0E49\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E01\u0E32\u0E23\u0E17\u0E33\u0E07\u0E32\u0E19\u0E02\u0E2D\u0E07 validators \u0E42\u0E14\u0E22\u0E15\u0E31\u0E27\u0E17\u0E35\u0E48\u0E23\u0E39\u0E49\u0E08\u0E31\u0E01\u0E01\u0E31\u0E19\u0E21\u0E32\u0E01\u0E04\u0E37\u0E2D "),X={href:"https://docs.solana.com/developing/runtime-facilities/programs#system-program",target:"_blank",rel:"noopener noreferrer"},Y=e("System Program"),Z=e(" \u0E17\u0E35\u0E48\u0E08\u0E30\u0E04\u0E2D\u0E22\u0E23\u0E31\u0E1A\u0E1C\u0E34\u0E14\u0E0A\u0E2D\u0E1A\u0E14\u0E39\u0E41\u0E25 accounts \u0E43\u0E2B\u0E21\u0E48 \u0E41\u0E25\u0E30\u0E2A\u0E48\u0E07(transfer) SOL \u0E44\u0E1B\u0E21\u0E32."),$=e("SPL Programs \u0E21\u0E35\u0E44\u0E27\u0E49\u0E17\u0E33\u0E07\u0E32\u0E19 on-chain \u0E2B\u0E25\u0E32\u0E22\u0E2D\u0E22\u0E48\u0E32\u0E07, \u0E17\u0E31\u0E49\u0E07\u0E2A\u0E23\u0E49\u0E32\u0E07 (creating), \u0E2A\u0E25\u0E31\u0E1A (swapping), \u0E41\u0E25\u0E30\u0E40\u0E0A\u0E48\u0E32 (lending) \u0E42\u0E17\u0E40\u0E04\u0E19 (tokens), \u0E41\u0E25\u0E30\u0E22\u0E31\u0E07\u0E21\u0E35\u0E44\u0E27\u0E49\u0E2A\u0E23\u0E49\u0E32\u0E07 stake pools \u0E41\u0E25\u0E30\u0E14\u0E39\u0E41\u0E25 on-chain name service \u0E2D\u0E35\u0E01\u0E14\u0E49\u0E27\u0E22 \u0E42\u0E14\u0E22 "),oo={href:"https://spl.solana.com/token",target:"_blank",rel:"noopener noreferrer"},eo=e("SPL Token Program"),to=e(" \u0E08\u0E30\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E40\u0E23\u0E35\u0E22\u0E01\u0E43\u0E0A\u0E49 (invoke) \u0E44\u0E14\u0E49\u0E42\u0E14\u0E22\u0E15\u0E23\u0E07\u0E1C\u0E48\u0E32\u0E19 CLI, \u0E43\u0E19\u0E02\u0E13\u0E30\u0E17\u0E35\u0E48 "),ro={href:"https://spl.solana.com/associated-token-account",target:"_blank",rel:"noopener noreferrer"},no=e("Associated Token Account Program"),so=e(" \u0E08\u0E30\u0E16\u0E39\u0E01\u0E1B\u0E23\u0E30\u0E01\u0E2D\u0E1A\u0E02\u0E36\u0E49\u0E19\u0E21\u0E32\u0E14\u0E49\u0E27\u0E22 programs \u0E17\u0E35\u0E48\u0E17\u0E33\u0E02\u0E36\u0E49\u0E19\u0E21\u0E32\u0E40\u0E2D\u0E07."),ao=o("h3",{id:"\u0E40\u0E02\u0E35\u0E22\u0E19-programs",tabindex:"-1"},[o("a",{class:"header-anchor",href:"#\u0E40\u0E02\u0E35\u0E22\u0E19-programs","aria-hidden":"true"},"#"),e(" \u0E40\u0E02\u0E35\u0E22\u0E19 Programs")],-1),io=e("Programs \u0E2A\u0E48\u0E27\u0E19\u0E43\u0E2B\u0E0D\u0E48\u0E08\u0E30\u0E40\u0E02\u0E35\u0E22\u0E19\u0E14\u0E49\u0E27\u0E22 Rust \u0E2B\u0E23\u0E37\u0E2D C++, \u0E41\u0E15\u0E48\u0E01\u0E47\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E40\u0E25\u0E37\u0E2D\u0E01\u0E20\u0E32\u0E29\u0E32\u0E43\u0E14\u0E46 \u0E01\u0E47\u0E44\u0E14\u0E49\u0E17\u0E35\u0E48 target LLVM\u2019s BPF \u0E44\u0E14\u0E49 \u0E19\u0E2D\u0E01\u0E08\u0E32\u0E01\u0E19\u0E35\u0E49\u0E08\u0E32\u0E01\u0E04\u0E27\u0E32\u0E21\u0E23\u0E48\u0E27\u0E21\u0E21\u0E37\u0E2D\u0E02\u0E2D\u0E07 "),co={href:"https://neon-labs.org/",target:"_blank",rel:"noopener noreferrer"},lo=e("Neon Labs"),_o=e(" \u0E41\u0E25\u0E30 "),ho={href:"https://solang.readthedocs.io/en/latest/",target:"_blank",rel:"noopener noreferrer"},po=e("Solang"),mo=e(" \u0E17\u0E33\u0E43\u0E2B\u0E49\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E2A\u0E19\u0E31\u0E1A\u0E2A\u0E19\u0E38\u0E19 "),go={href:"https://ethereum.org/en/developers/docs/evm/",target:"_blank",rel:"noopener noreferrer"},uo=e("EVM"),bo=e(" \u0E0B\u0E36\u0E48\u0E07\u0E17\u0E33\u0E43\u0E2B\u0E49\u0E19\u0E31\u0E01\u0E1E\u0E31\u0E12\u0E19\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E40\u0E02\u0E35\u0E22\u0E19 programs \u0E14\u0E49\u0E27\u0E22 Solidity \u0E44\u0E14\u0E49."),fo=n("

    programs \u0E17\u0E35\u0E48\u0E40\u0E02\u0E35\u0E22\u0E19\u0E14\u0E49\u0E27\u0E22 Rust \u0E08\u0E30\u0E22\u0E36\u0E14\u0E42\u0E04\u0E23\u0E07\u0E2A\u0E23\u0E49\u0E32\u0E07\u0E19\u0E35\u0E49:

    \u0E44\u0E1F\u0E25\u0E4C (File)\u0E04\u0E33\u0E2D\u0E18\u0E34\u0E1A\u0E32\u0E22
    lib.rs\u0E25\u0E07\u0E17\u0E30\u0E40\u0E1A\u0E35\u0E22\u0E19 modules
    entrypoint.rs\u0E17\u0E32\u0E07\u0E40\u0E02\u0E49\u0E32 (Entrypoint) \u0E02\u0E2D\u0E07 program
    instruction.rsProgram API, (de)serializing instruction data
    processor.rsProgram logic
    state.rsProgram objects, (de)serializing state
    error.rsProgram-specific errors
    ",2),ko=e("\u0E43\u0E19\u0E15\u0E2D\u0E19\u0E19\u0E35\u0E49, "),Po={href:"https://github.com/coral-xyz/anchor",target:"_blank",rel:"noopener noreferrer"},yo=e("Anchor"),vo=e(" \u0E40\u0E1B\u0E47\u0E19 framework \u0E17\u0E35\u0E48\u0E19\u0E34\u0E22\u0E21\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E1E\u0E31\u0E12\u0E19\u0E32 programs. Anchor \u0E04\u0E37\u0E2D framework \u0E17\u0E35\u0E48\u0E21\u0E35\u0E41\u0E19\u0E27\u0E17\u0E32\u0E07\u0E0A\u0E31\u0E14\u0E40\u0E08\u0E19 (opinionated), \u0E04\u0E25\u0E49\u0E32\u0E22\u0E01\u0E31\u0E1A Ruby on Rails \u0E17\u0E35\u0E48\u0E25\u0E14\u0E01\u0E32\u0E23\u0E40\u0E02\u0E35\u0E22\u0E19\u0E2D\u0E30\u0E44\u0E23\u0E0B\u0E49\u0E33\u0E46 \u0E41\u0E25\u0E30\u0E0A\u0E48\u0E27\u0E22\u0E43\u0E2B\u0E49\u0E01\u0E32\u0E23\u0E41\u0E01\u0E30 (de)serialization \u0E2A\u0E30\u0E14\u0E27\u0E01\u0E02\u0E36\u0E49\u0E19\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E01\u0E32\u0E23\u0E1E\u0E31\u0E12\u0E19\u0E32\u0E14\u0E49\u0E27\u0E22 Rust."),Lo=n("

    Programs \u0E1B\u0E01\u0E15\u0E34\u0E41\u0E25\u0E49\u0E27\u0E08\u0E30\u0E16\u0E39\u0E01\u0E1E\u0E31\u0E12\u0E19\u0E32 (dev) \u0E41\u0E25\u0E30\u0E17\u0E14\u0E2A\u0E2D\u0E1A(test) \u0E1A\u0E19\u0E2A\u0E34\u0E48\u0E07\u0E41\u0E27\u0E14\u0E25\u0E49\u0E2D\u0E21(environments) Localhost \u0E41\u0E25\u0E30 Devnet \u0E01\u0E48\u0E2D\u0E19\u0E17\u0E35\u0E48\u0E08\u0E30 deploy \u0E44\u0E1B\u0E1A\u0E19 Testnet \u0E2B\u0E23\u0E37\u0E2D Mainnet. Solana \u0E08\u0E30\u0E2A\u0E19\u0E31\u0E1A\u0E2A\u0E19\u0E38\u0E19 environments \u0E15\u0E48\u0E2D\u0E44\u0E1B\u0E19\u0E35\u0E49:

    Cluster EnvironmentRPC Connection URL
    Mainnet-betahttps://api.mainnet-beta.solana.com
    Testnethttps://api.testnet.solana.com
    Devnethttps://api.devnet.solana.com
    LocalhostDefault port: 8899 (e.g. http://localhost:8899, http://192.168.1.88:8899)
    ",2),So=e("\u0E40\u0E21\u0E37\u0E48\u0E2D deployed \u0E44\u0E1B\u0E1A\u0E19 environment \u0E41\u0E25\u0E49\u0E27\u0E1C\u0E39\u0E49\u0E43\u0E0A\u0E49 (clients) \u0E08\u0E30\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19 on-chain programs \u0E1C\u0E48\u0E32\u0E19 "),xo={href:"https://docs.solana.com/developing/clients/jsonrpc-api",target:"_blank",rel:"noopener noreferrer"},Fo=e("RPC connections"),Ro=e(" \u0E44\u0E1B\u0E17\u0E35\u0E48 cluster \u0E15\u0E32\u0E21\u0E17\u0E35\u0E48\u0E40\u0E25\u0E37\u0E2D\u0E01\u0E44\u0E27\u0E49."),Bo=o("h3",{id:"deploying-programs",tabindex:"-1"},[o("a",{class:"header-anchor",href:"#deploying-programs","aria-hidden":"true"},"#"),e(" Deploying Programs")],-1),wo=e("\u0E19\u0E31\u0E01\u0E1E\u0E31\u0E12\u0E19\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 deploy programs \u0E1C\u0E48\u0E32\u0E19 "),Ao={href:"https://docs.solana.com/cli/deploy-a-program",target:"_blank",rel:"noopener noreferrer"},Co=e("CLI"),No=e(":"),Do=n(`
    solana program deploy <PROGRAM_FILEPATH>
    +import{_ as i,r as s,o as c,c as d,a as o,b as t,w as l,F as _,d as e,e as n}from"./app.2fbb9e96.js";const h={},p=o("h1",{id:"programs",tabindex:"-1"},[o("a",{class:"header-anchor",href:"#programs","aria-hidden":"true"},"#"),e(" Programs")],-1),m=o("p",null,"\u0E19\u0E31\u0E01\u0E1E\u0E31\u0E12\u0E19\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E40\u0E02\u0E35\u0E22\u0E19 \u0E41\u0E25\u0E30\u0E1B\u0E25\u0E48\u0E2D\u0E22 (deploy) programs \u0E1A\u0E19 Solana blockchain. Programs (\u0E0B\u0E36\u0E48\u0E07\u0E01\u0E47\u0E04\u0E37\u0E2D smart contracts \u0E1A\u0E19 protocols \u0E2D\u0E37\u0E48\u0E19\u0E46) \u0E40\u0E1B\u0E47\u0E19\u0E2A\u0E48\u0E27\u0E19\u0E23\u0E32\u0E01\u0E10\u0E32\u0E19\u0E02\u0E2D\u0E07\u0E01\u0E32\u0E23\u0E17\u0E33\u0E07\u0E32\u0E19 on-chain, \u0E17\u0E33\u0E44\u0E14\u0E49\u0E17\u0E38\u0E01\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E15\u0E31\u0E49\u0E07\u0E41\u0E15\u0E48 DeFi \u0E41\u0E25\u0E30 NFTs \u0E08\u0E19\u0E44\u0E1B\u0E16\u0E36\u0E07 Social Media \u0E41\u0E25\u0E30 Gaming.",-1),g=o("h2",{id:"\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49",tabindex:"-1"},[o("a",{class:"header-anchor",href:"#\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49","aria-hidden":"true"},"#"),e(" \u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49")],-1),u={class:"custom-container tip"},b=o("p",{class:"custom-container-title"},"Fact Sheet",-1),f=o("li",null,[e("Programs \u0E1B\u0E23\u0E30\u0E21\u0E27\u0E25\u0E1C\u0E25 "),o("a",{href:"./transactions"},"instructions"),e(" \u0E17\u0E31\u0E49\u0E07\u0E17\u0E35\u0E48\u0E21\u0E32\u0E08\u0E32\u0E01 end users \u0E41\u0E25\u0E30\u0E21\u0E32\u0E08\u0E32\u0E01 programs \u0E2D\u0E37\u0E48\u0E19\u0E46")],-1),k=e("\u0E17\u0E38\u0E01\u0E46 programs \u0E08\u0E30\u0E40\u0E1B\u0E47\u0E19 "),P=o("em",null,"stateless",-1),y=e(": \u0E41\u0E25\u0E30 data \u0E17\u0E35\u0E48\u0E21\u0E31\u0E19\u0E17\u0E33\u0E07\u0E32\u0E19\u0E14\u0E49\u0E27\u0E22\u0E08\u0E30\u0E16\u0E39\u0E01\u0E40\u0E01\u0E47\u0E1A\u0E41\u0E22\u0E01\u0E44\u0E27\u0E49\u0E17\u0E35\u0E48 "),v=e("accounts"),L=e(" \u0E17\u0E35\u0E48\u0E2A\u0E48\u0E07\u0E1C\u0E48\u0E32\u0E19\u0E21\u0E32\u0E17\u0E32\u0E07 instructions"),S=o("li",null,[e("Programs \u0E08\u0E30\u0E16\u0E39\u0E01\u0E40\u0E01\u0E47\u0E1A\u0E43\u0E19 accounts \u0E17\u0E35\u0E48\u0E23\u0E30\u0E1A\u0E38\u0E44\u0E27\u0E49\u0E27\u0E48\u0E32 "),o("code",null,"executable")],-1),x=e("\u0E17\u0E38\u0E01\u0E46 programs \u0E08\u0E30\u0E21\u0E35\u0E40\u0E08\u0E49\u0E32\u0E02\u0E2D\u0E07\u0E04\u0E37\u0E2D "),F={href:"https://docs.solana.com/developing/runtime-facilities/programs#bpf-loader",target:"_blank",rel:"noopener noreferrer"},R=e("BPF Loader"),B=e(" \u0E41\u0E25\u0E30\u0E08\u0E30\u0E16\u0E39\u0E01\u0E14\u0E33\u0E40\u0E19\u0E34\u0E19\u0E01\u0E32\u0E23 (executed) \u0E42\u0E14\u0E22 "),w={href:"https://docs.solana.com/developing/programming-model/runtime",target:"_blank",rel:"noopener noreferrer"},A=e("Solana Runtime"),C=e("\u0E19\u0E31\u0E01\u0E1E\u0E31\u0E12\u0E19\u0E32\u0E08\u0E30\u0E40\u0E02\u0E35\u0E22\u0E19 programs \u0E14\u0E49\u0E27\u0E22\u0E20\u0E32\u0E29\u0E32 Rust \u0E2B\u0E23\u0E37\u0E2D C++, \u0E41\u0E15\u0E48\u0E01\u0E47\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E40\u0E25\u0E37\u0E2D\u0E01\u0E20\u0E32\u0E29\u0E32\u0E43\u0E14\u0E46 \u0E01\u0E47\u0E44\u0E14\u0E49\u0E17\u0E35\u0E48 target "),N={href:"https://llvm.org/",target:"_blank",rel:"noopener noreferrer"},D=e("LLVM"),E=e("'s "),T={href:"https://en.wikipedia.org/wiki/Berkeley_Packet_Filter",target:"_blank",rel:"noopener noreferrer"},I=e("BPF"),M=e(" \u0E44\u0E14\u0E49"),V=n("
  • \u0E17\u0E38\u0E01\u0E46 programs \u0E08\u0E30\u0E21\u0E35\u0E17\u0E32\u0E07\u0E40\u0E02\u0E49\u0E32 (entry point) \u0E17\u0E32\u0E07\u0E40\u0E14\u0E35\u0E22\u0E27 \u0E0B\u0E36\u0E48\u0E07\u0E40\u0E1B\u0E47\u0E19\u0E17\u0E35\u0E48\u0E17\u0E35\u0E48 instruction \u0E08\u0E30\u0E16\u0E39\u0E01\u0E14\u0E33\u0E40\u0E19\u0E34\u0E19\u0E01\u0E32\u0E23(process_instruction); parameters \u0E08\u0E30\u0E15\u0E49\u0E2D\u0E07\u0E21\u0E35\u0E2A\u0E34\u0E48\u0E07\u0E40\u0E2B\u0E25\u0E48\u0E32\u0E19\u0E35\u0E49\u0E40\u0E2A\u0E21\u0E2D:
    • program_id: pubkey
    • accounts: array,
    • instruction_data: byte array
  • ",1),z=o("h2",{id:"\u0E25\u0E07\u0E25\u0E36\u0E01",tabindex:"-1"},[o("a",{class:"header-anchor",href:"#\u0E25\u0E07\u0E25\u0E36\u0E01","aria-hidden":"true"},"#"),e(" \u0E25\u0E07\u0E25\u0E36\u0E01")],-1),j=o("p",null,"Solana \u0E44\u0E21\u0E48\u0E40\u0E2B\u0E21\u0E37\u0E2D\u0E19 blockchains \u0E2D\u0E37\u0E48\u0E19\u0E46 \u0E15\u0E23\u0E07\u0E17\u0E35\u0E48\u0E40\u0E23\u0E32\u0E08\u0E30\u0E41\u0E22\u0E01 code \u0E01\u0E31\u0E1A data \u0E2D\u0E2D\u0E01\u0E08\u0E32\u0E01\u0E01\u0E31\u0E19 \u0E17\u0E38\u0E01\u0E46 data \u0E17\u0E35\u0E48 programs \u0E08\u0E30\u0E43\u0E0A\u0E49\u0E08\u0E30\u0E16\u0E39\u0E01\u0E40\u0E01\u0E47\u0E1A\u0E44\u0E27\u0E49\u0E43\u0E19 account \u0E2D\u0E35\u0E01\u0E15\u0E31\u0E27\u0E41\u0E22\u0E01\u0E01\u0E31\u0E19 \u0E41\u0E25\u0E30 programs \u0E08\u0E30\u0E23\u0E31\u0E1A\u0E40\u0E1B\u0E47\u0E19\u0E0A\u0E38\u0E14\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E49\u0E32\u0E07\u0E2D\u0E34\u0E07 (references) \u0E44\u0E1B\u0E16\u0E36\u0E07 account \u0E40\u0E2B\u0E25\u0E48\u0E32\u0E19\u0E31\u0E49\u0E19\u0E1C\u0E48\u0E32\u0E19\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E0A\u0E38\u0E14\u0E04\u0E33\u0E2A\u0E31\u0E48\u0E07 (instructions) \u0E01\u0E32\u0E23\u0E17\u0E33\u0E41\u0E1A\u0E1A\u0E19\u0E35\u0E49\u0E08\u0E30\u0E17\u0E33\u0E43\u0E2B\u0E49 program \u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E17\u0E33\u0E07\u0E32\u0E19\u0E02\u0E49\u0E32\u0E21 \u0E2B\u0E23\u0E37\u0E2D\u0E40\u0E23\u0E35\u0E22\u0E01\u0E43\u0E0A\u0E49 accounts \u0E15\u0E48\u0E32\u0E07\u0E46 \u0E42\u0E14\u0E22\u0E44\u0E21\u0E48\u0E15\u0E49\u0E2D\u0E07 deploy \u0E43\u0E2B\u0E21\u0E48 \u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A (pattern) \u0E40\u0E2B\u0E25\u0E48\u0E32\u0E19\u0E35\u0E49\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E40\u0E2B\u0E47\u0E19\u0E44\u0E14\u0E49\u0E43\u0E19\u0E17\u0E31\u0E49\u0E07 Native \u0E41\u0E25\u0E30 SPL Programs",-1),O=o("h3",{id:"native-programs-\u0E41\u0E25\u0E30-the-solana-program-library-spl",tabindex:"-1"},[o("a",{class:"header-anchor",href:"#native-programs-\u0E41\u0E25\u0E30-the-solana-program-library-spl","aria-hidden":"true"},"#"),e(" Native Programs \u0E41\u0E25\u0E30 The Solana Program Library (SPL)")],-1),U=e("Solana \u0E21\u0E32\u0E1E\u0E23\u0E49\u0E2D\u0E21\u0E01\u0E31\u0E1A programs \u0E2B\u0E25\u0E32\u0E22\u0E15\u0E31\u0E27\u0E17\u0E35\u0E48\u0E43\u0E0A\u0E49\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E01\u0E32\u0E23\u0E17\u0E33\u0E07\u0E32\u0E19 on-chain. \u0E42\u0E14\u0E22\u0E17\u0E35\u0E48 programs \u0E08\u0E30\u0E41\u0E1A\u0E48\u0E07\u0E40\u0E1B\u0E47\u0E19 "),G={href:"https://docs.solana.com/developing/runtime-facilities/programs#bpf-loader",target:"_blank",rel:"noopener noreferrer"},H=e("Native Programs"),J=e(" \u0E41\u0E25\u0E30 "),K={href:"https://spl.solana.com/",target:"_blank",rel:"noopener noreferrer"},q=e("Solana Program Library (SPL) Programs"),Q=e("."),W=e("Native Programs \u0E21\u0E35\u0E44\u0E27\u0E49\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E01\u0E32\u0E23\u0E17\u0E33\u0E07\u0E32\u0E19\u0E02\u0E2D\u0E07 validators \u0E42\u0E14\u0E22\u0E15\u0E31\u0E27\u0E17\u0E35\u0E48\u0E23\u0E39\u0E49\u0E08\u0E31\u0E01\u0E01\u0E31\u0E19\u0E21\u0E32\u0E01\u0E04\u0E37\u0E2D "),X={href:"https://docs.solana.com/developing/runtime-facilities/programs#system-program",target:"_blank",rel:"noopener noreferrer"},Y=e("System Program"),Z=e(" \u0E17\u0E35\u0E48\u0E08\u0E30\u0E04\u0E2D\u0E22\u0E23\u0E31\u0E1A\u0E1C\u0E34\u0E14\u0E0A\u0E2D\u0E1A\u0E14\u0E39\u0E41\u0E25 accounts \u0E43\u0E2B\u0E21\u0E48 \u0E41\u0E25\u0E30\u0E2A\u0E48\u0E07(transfer) SOL \u0E44\u0E1B\u0E21\u0E32."),$=e("SPL Programs \u0E21\u0E35\u0E44\u0E27\u0E49\u0E17\u0E33\u0E07\u0E32\u0E19 on-chain \u0E2B\u0E25\u0E32\u0E22\u0E2D\u0E22\u0E48\u0E32\u0E07, \u0E17\u0E31\u0E49\u0E07\u0E2A\u0E23\u0E49\u0E32\u0E07 (creating), \u0E2A\u0E25\u0E31\u0E1A (swapping), \u0E41\u0E25\u0E30\u0E40\u0E0A\u0E48\u0E32 (lending) \u0E42\u0E17\u0E40\u0E04\u0E19 (tokens), \u0E41\u0E25\u0E30\u0E22\u0E31\u0E07\u0E21\u0E35\u0E44\u0E27\u0E49\u0E2A\u0E23\u0E49\u0E32\u0E07 stake pools \u0E41\u0E25\u0E30\u0E14\u0E39\u0E41\u0E25 on-chain name service \u0E2D\u0E35\u0E01\u0E14\u0E49\u0E27\u0E22 \u0E42\u0E14\u0E22 "),oo={href:"https://spl.solana.com/token",target:"_blank",rel:"noopener noreferrer"},eo=e("SPL Token Program"),to=e(" \u0E08\u0E30\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E40\u0E23\u0E35\u0E22\u0E01\u0E43\u0E0A\u0E49 (invoke) \u0E44\u0E14\u0E49\u0E42\u0E14\u0E22\u0E15\u0E23\u0E07\u0E1C\u0E48\u0E32\u0E19 CLI, \u0E43\u0E19\u0E02\u0E13\u0E30\u0E17\u0E35\u0E48 "),ro={href:"https://spl.solana.com/associated-token-account",target:"_blank",rel:"noopener noreferrer"},no=e("Associated Token Account Program"),so=e(" \u0E08\u0E30\u0E16\u0E39\u0E01\u0E1B\u0E23\u0E30\u0E01\u0E2D\u0E1A\u0E02\u0E36\u0E49\u0E19\u0E21\u0E32\u0E14\u0E49\u0E27\u0E22 programs \u0E17\u0E35\u0E48\u0E17\u0E33\u0E02\u0E36\u0E49\u0E19\u0E21\u0E32\u0E40\u0E2D\u0E07."),ao=o("h3",{id:"\u0E40\u0E02\u0E35\u0E22\u0E19-programs",tabindex:"-1"},[o("a",{class:"header-anchor",href:"#\u0E40\u0E02\u0E35\u0E22\u0E19-programs","aria-hidden":"true"},"#"),e(" \u0E40\u0E02\u0E35\u0E22\u0E19 Programs")],-1),io=e("Programs \u0E2A\u0E48\u0E27\u0E19\u0E43\u0E2B\u0E0D\u0E48\u0E08\u0E30\u0E40\u0E02\u0E35\u0E22\u0E19\u0E14\u0E49\u0E27\u0E22 Rust \u0E2B\u0E23\u0E37\u0E2D C++, \u0E41\u0E15\u0E48\u0E01\u0E47\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E40\u0E25\u0E37\u0E2D\u0E01\u0E20\u0E32\u0E29\u0E32\u0E43\u0E14\u0E46 \u0E01\u0E47\u0E44\u0E14\u0E49\u0E17\u0E35\u0E48 target LLVM\u2019s BPF \u0E44\u0E14\u0E49 \u0E19\u0E2D\u0E01\u0E08\u0E32\u0E01\u0E19\u0E35\u0E49\u0E08\u0E32\u0E01\u0E04\u0E27\u0E32\u0E21\u0E23\u0E48\u0E27\u0E21\u0E21\u0E37\u0E2D\u0E02\u0E2D\u0E07 "),co={href:"https://neon-labs.org/",target:"_blank",rel:"noopener noreferrer"},lo=e("Neon Labs"),_o=e(" \u0E41\u0E25\u0E30 "),ho={href:"https://solang.readthedocs.io/en/latest/",target:"_blank",rel:"noopener noreferrer"},po=e("Solang"),mo=e(" \u0E17\u0E33\u0E43\u0E2B\u0E49\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E2A\u0E19\u0E31\u0E1A\u0E2A\u0E19\u0E38\u0E19 "),go={href:"https://ethereum.org/en/developers/docs/evm/",target:"_blank",rel:"noopener noreferrer"},uo=e("EVM"),bo=e(" \u0E0B\u0E36\u0E48\u0E07\u0E17\u0E33\u0E43\u0E2B\u0E49\u0E19\u0E31\u0E01\u0E1E\u0E31\u0E12\u0E19\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E40\u0E02\u0E35\u0E22\u0E19 programs \u0E14\u0E49\u0E27\u0E22 Solidity \u0E44\u0E14\u0E49."),fo=n("

    programs \u0E17\u0E35\u0E48\u0E40\u0E02\u0E35\u0E22\u0E19\u0E14\u0E49\u0E27\u0E22 Rust \u0E08\u0E30\u0E22\u0E36\u0E14\u0E42\u0E04\u0E23\u0E07\u0E2A\u0E23\u0E49\u0E32\u0E07\u0E19\u0E35\u0E49:

    \u0E44\u0E1F\u0E25\u0E4C (File)\u0E04\u0E33\u0E2D\u0E18\u0E34\u0E1A\u0E32\u0E22
    lib.rs\u0E25\u0E07\u0E17\u0E30\u0E40\u0E1A\u0E35\u0E22\u0E19 modules
    entrypoint.rs\u0E17\u0E32\u0E07\u0E40\u0E02\u0E49\u0E32 (Entrypoint) \u0E02\u0E2D\u0E07 program
    instruction.rsProgram API, (de)serializing instruction data
    processor.rsProgram logic
    state.rsProgram objects, (de)serializing state
    error.rsProgram-specific errors
    ",2),ko=e("\u0E43\u0E19\u0E15\u0E2D\u0E19\u0E19\u0E35\u0E49, "),Po={href:"https://github.com/coral-xyz/anchor",target:"_blank",rel:"noopener noreferrer"},yo=e("Anchor"),vo=e(" \u0E40\u0E1B\u0E47\u0E19 framework \u0E17\u0E35\u0E48\u0E19\u0E34\u0E22\u0E21\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E1E\u0E31\u0E12\u0E19\u0E32 programs. Anchor \u0E04\u0E37\u0E2D framework \u0E17\u0E35\u0E48\u0E21\u0E35\u0E41\u0E19\u0E27\u0E17\u0E32\u0E07\u0E0A\u0E31\u0E14\u0E40\u0E08\u0E19 (opinionated), \u0E04\u0E25\u0E49\u0E32\u0E22\u0E01\u0E31\u0E1A Ruby on Rails \u0E17\u0E35\u0E48\u0E25\u0E14\u0E01\u0E32\u0E23\u0E40\u0E02\u0E35\u0E22\u0E19\u0E2D\u0E30\u0E44\u0E23\u0E0B\u0E49\u0E33\u0E46 \u0E41\u0E25\u0E30\u0E0A\u0E48\u0E27\u0E22\u0E43\u0E2B\u0E49\u0E01\u0E32\u0E23\u0E41\u0E01\u0E30 (de)serialization \u0E2A\u0E30\u0E14\u0E27\u0E01\u0E02\u0E36\u0E49\u0E19\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E01\u0E32\u0E23\u0E1E\u0E31\u0E12\u0E19\u0E32\u0E14\u0E49\u0E27\u0E22 Rust."),Lo=n("

    Programs \u0E1B\u0E01\u0E15\u0E34\u0E41\u0E25\u0E49\u0E27\u0E08\u0E30\u0E16\u0E39\u0E01\u0E1E\u0E31\u0E12\u0E19\u0E32 (dev) \u0E41\u0E25\u0E30\u0E17\u0E14\u0E2A\u0E2D\u0E1A(test) \u0E1A\u0E19\u0E2A\u0E34\u0E48\u0E07\u0E41\u0E27\u0E14\u0E25\u0E49\u0E2D\u0E21(environments) Localhost \u0E41\u0E25\u0E30 Devnet \u0E01\u0E48\u0E2D\u0E19\u0E17\u0E35\u0E48\u0E08\u0E30 deploy \u0E44\u0E1B\u0E1A\u0E19 Testnet \u0E2B\u0E23\u0E37\u0E2D Mainnet. Solana \u0E08\u0E30\u0E2A\u0E19\u0E31\u0E1A\u0E2A\u0E19\u0E38\u0E19 environments \u0E15\u0E48\u0E2D\u0E44\u0E1B\u0E19\u0E35\u0E49:

    Cluster EnvironmentRPC Connection URL
    Mainnet-betahttps://api.mainnet-beta.solana.com
    Testnethttps://api.testnet.solana.com
    Devnethttps://api.devnet.solana.com
    LocalhostDefault port: 8899 (e.g. http://localhost:8899, http://192.168.1.88:8899)
    ",2),So=e("\u0E40\u0E21\u0E37\u0E48\u0E2D deployed \u0E44\u0E1B\u0E1A\u0E19 environment \u0E41\u0E25\u0E49\u0E27\u0E1C\u0E39\u0E49\u0E43\u0E0A\u0E49 (clients) \u0E08\u0E30\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19 on-chain programs \u0E1C\u0E48\u0E32\u0E19 "),xo={href:"https://docs.solana.com/developing/clients/jsonrpc-api",target:"_blank",rel:"noopener noreferrer"},Fo=e("RPC connections"),Ro=e(" \u0E44\u0E1B\u0E17\u0E35\u0E48 cluster \u0E15\u0E32\u0E21\u0E17\u0E35\u0E48\u0E40\u0E25\u0E37\u0E2D\u0E01\u0E44\u0E27\u0E49."),Bo=o("h3",{id:"deploying-programs",tabindex:"-1"},[o("a",{class:"header-anchor",href:"#deploying-programs","aria-hidden":"true"},"#"),e(" Deploying Programs")],-1),wo=e("\u0E19\u0E31\u0E01\u0E1E\u0E31\u0E12\u0E19\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 deploy programs \u0E1C\u0E48\u0E32\u0E19 "),Ao={href:"https://docs.solana.com/cli/deploy-a-program",target:"_blank",rel:"noopener noreferrer"},Co=e("CLI"),No=e(":"),Do=n(`
    solana program deploy <PROGRAM_FILEPATH>
     
    `,1),Eo=e("\u0E40\u0E21\u0E37\u0E48\u0E2D program \u0E16\u0E39\u0E01 deploy \u0E44\u0E1B\u0E41\u0E25\u0E49\u0E27, \u0E21\u0E31\u0E19\u0E08\u0E30\u0E16\u0E39\u0E01\u0E41\u0E1B\u0E25\u0E07 (compile) \u0E40\u0E1B\u0E47\u0E19 "),To={href:"https://en.wikipedia.org/wiki/Executable_and_Linkable_Format",target:"_blank",rel:"noopener noreferrer"},Io=e("ELF shared object"),Mo=e(" (\u0E1B\u0E23\u0E30\u0E01\u0E2D\u0E1A\u0E44\u0E1B\u0E14\u0E49\u0E27\u0E22 BPF bytecode) \u0E41\u0E25\u0E30\u0E16\u0E39\u0E01 upload \u0E44\u0E1B\u0E17\u0E35\u0E48 Solana cluster. Programs \u0E08\u0E30\u0E2D\u0E22\u0E39\u0E48\u0E43\u0E19 accounts (\u0E1A\u0E19 Solana \u0E17\u0E38\u0E01\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E2D\u0E22\u0E38\u0E48\u0E43\u0E19 accounts), \u0E15\u0E48\u0E32\u0E07\u0E15\u0E23\u0E07\u0E17\u0E35\u0E48 accounts \u0E19\u0E35\u0E49\u0E08\u0E30\u0E21\u0E35\u0E2A\u0E16\u0E32\u0E19\u0E30 "),Vo=o("code",null,"executable",-1),zo=e(" \u0E41\u0E25\u0E30\u0E16\u0E39\u0E01\u0E21\u0E2D\u0E1A\u0E2B\u0E21\u0E32\u0E22\u0E43\u0E2B\u0E49 BPF Loader. \u0E17\u0E35\u0E48\u0E2D\u0E22\u0E39\u0E48 (address) \u0E02\u0E2D\u0E07 account \u0E40\u0E2B\u0E25\u0E48\u0E32\u0E19\u0E35\u0E49\u0E08\u0E30\u0E16\u0E39\u0E01\u0E40\u0E23\u0E35\u0E22\u0E01\u0E27\u0E48\u0E32 "),jo=o("code",null,"program_id",-1),Oo=e(" \u0E41\u0E25\u0E30\u0E08\u0E30\u0E40\u0E2D\u0E32\u0E44\u0E27\u0E49\u0E2D\u0E49\u0E32\u0E07\u0E2D\u0E34\u0E07\u0E43\u0E19\u0E01\u0E32\u0E23\u0E17\u0E33 transactions \u0E15\u0E48\u0E2D\u0E44\u0E1B."),Uo=e("Solana \u0E2A\u0E19\u0E31\u0E1A\u0E2A\u0E19\u0E38\u0E19 BPF Loaders \u0E2B\u0E25\u0E32\u0E22\u0E41\u0E1A\u0E1A, \u0E40\u0E0A\u0E48\u0E19 "),Go={href:"https://explorer.solana.com/address/BPFLoaderUpgradeab1e11111111111111111111111",target:"_blank",rel:"noopener noreferrer"},Ho=e("Upgradable BPF Loader"),Jo=e(". The BPF Loader \u0E08\u0E30\u0E23\u0E31\u0E1A\u0E1C\u0E34\u0E14\u0E0A\u0E2D\u0E1A\u0E14\u0E39\u0E41\u0E25 program\u2019s account \u0E41\u0E25\u0E30\u0E17\u0E33\u0E43\u0E2B\u0E49 clients \u0E43\u0E0A\u0E49\u0E44\u0E14\u0E49\u0E1C\u0E48\u0E32\u0E19 "),Ko=o("code",null,"program_id",-1),qo=e(". \u0E17\u0E38\u0E01 programs \u0E21\u0E35 entry point \u0E17\u0E32\u0E07\u0E40\u0E14\u0E35\u0E22\u0E27 \u0E41\u0E25\u0E30\u0E40\u0E1B\u0E47\u0E19\u0E17\u0E35\u0E48\u0E1B\u0E23\u0E30\u0E21\u0E27\u0E25\u0E1C\u0E25 instruction ("),Qo=o("code",null,"process_instruction",-1),Wo=e(") \u0E41\u0E25\u0E30 parameters \u0E17\u0E35\u0E48\u0E08\u0E30\u0E15\u0E49\u0E2D\u0E07\u0E21\u0E35\u0E40\u0E2A\u0E21\u0E2D\u0E04\u0E37\u0E2D:"),Xo=n('
    • program_id: pubkey
    • accounts: array,
    • instruction_data: byte array

    \u0E40\u0E21\u0E37\u0E48\u0E2D\u0E40\u0E01\u0E34\u0E14\u0E01\u0E32\u0E23\u0E40\u0E23\u0E35\u0E22\u0E01\u0E43\u0E0A\u0E49 (invoke) programs \u0E21\u0E31\u0E19\u0E08\u0E30\u0E16\u0E39\u0E01\u0E14\u0E33\u0E40\u0E19\u0E34\u0E19\u0E01\u0E32\u0E23 (execute) \u0E42\u0E14\u0E22 Solana Runtime.

    \u0E41\u0E2B\u0E25\u0E48\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19

    ',3),Yo={href:"https://docs.solana.com/developing/on-chain-programs/overview",target:"_blank",rel:"noopener noreferrer"},Zo=e("Official Documentation"),$o={href:"https://spl.solana.com/",target:"_blank",rel:"noopener noreferrer"},oe=e("SPL Documentation"),ee={href:"https://jstarry.notion.site/Program-deploys-29780c48794c47308d5f138074dd9838",target:"_blank",rel:"noopener noreferrer"},te=e("Program Deploys by Justin Starry"),re={href:"https://book.solmeet.dev/notes/solana-starter-kit",target:"_blank",rel:"noopener noreferrer"},ne=e("Solana Starter Kit by Iron Addicted Dog"),se={href:"https://paulx.dev/blog/2021/01/14/programming-on-solana-an-introduction/",target:"_blank",rel:"noopener noreferrer"},ae=e("Programming on Solana by Paulx"),ie={href:"https://2501babe.github.io/posts/solana101.html",target:"_blank",rel:"noopener noreferrer"},ce=e("An Introduction to the Solana Blockchain by Hana"),de={href:"https://github.com/coral-xyz/anchor",target:"_blank",rel:"noopener noreferrer"},le=e("Anchor");function _e(he,pe){const a=s("RouterLink"),r=s("ExternalLinkIcon");return c(),d(_,null,[p,m,g,o("div",u,[b,o("ul",null,[f,o("li",null,[k,P,y,t(a,{to:"/th/core-concepts/accounts.html"},{default:l(()=>[v]),_:1}),L]),S,o("li",null,[x,o("a",F,[R,t(r)]),B,o("a",w,[A,t(r)])]),o("li",null,[C,o("a",N,[D,t(r)]),E,o("a",T,[I,t(r)]),M]),V])]),z,j,O,o("p",null,[U,o("a",G,[H,t(r)]),J,o("a",K,[q,t(r)]),Q]),o("p",null,[W,o("a",X,[Y,t(r)]),Z]),o("p",null,[$,o("a",oo,[eo,t(r)]),to,o("a",ro,[no,t(r)]),so]),ao,o("p",null,[io,o("a",co,[lo,t(r)]),_o,o("a",ho,[po,t(r)]),mo,o("a",go,[uo,t(r)]),bo]),fo,o("p",null,[ko,o("a",Po,[yo,t(r)]),vo]),Lo,o("p",null,[So,o("a",xo,[Fo,t(r)]),Ro]),Bo,o("p",null,[wo,o("a",Ao,[Co,t(r)]),No]),Do,o("p",null,[Eo,o("a",To,[Io,t(r)]),Mo,Vo,zo,jo,Oo]),o("p",null,[Uo,o("a",Go,[Ho,t(r)]),Jo,Ko,qo,Qo,Wo]),Xo,o("ul",null,[o("li",null,[o("a",Yo,[Zo,t(r)])]),o("li",null,[o("a",$o,[oe,t(r)])]),o("li",null,[o("a",ee,[te,t(r)])]),o("li",null,[o("a",re,[ne,t(r)])]),o("li",null,[o("a",se,[ae,t(r)])]),o("li",null,[o("a",ie,[ce,t(r)])]),o("li",null,[o("a",de,[le,t(r)])])])],64)}var ge=i(h,[["render",_e]]);export{ge as default}; diff --git a/docs/.vuepress/dist/assets/programs.html.ae1c022e.js b/docs/.vuepress/dist/assets/programs.html.98ed5152.js similarity index 99% rename from docs/.vuepress/dist/assets/programs.html.ae1c022e.js rename to docs/.vuepress/dist/assets/programs.html.98ed5152.js index 820baceba..4ee99da96 100644 --- a/docs/.vuepress/dist/assets/programs.html.ae1c022e.js +++ b/docs/.vuepress/dist/assets/programs.html.98ed5152.js @@ -1,2 +1,2 @@ -import{_ as i,r as n,o as d,c as l,a as e,b as s,w as c,F as p,d as t,e as r}from"./app.cfdf84e7.js";const m={},u=e("h1",{id:"programmes",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#programmes","aria-hidden":"true"},"#"),t(" Programmes")],-1),_=e("p",null,"N'importe quel d\xE9veloppeur peut \xE9crire et d\xE9ployer des programmes sur la blockchain Solana. Les programmes (connus sous le nom de contrats intelligents sur d'autres protocoles) servent de base \xE0 l'activit\xE9 sur la blockchain, permettant tout, partant de la DeFi et des NFTs jusqu'aux m\xE9dias sociaux tout en passant par les jeux.",-1),h=e("h2",{id:"faits",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#faits","aria-hidden":"true"},"#"),t(" Faits")],-1),g={class:"custom-container tip"},b=e("p",{class:"custom-container-title"},"Fiche d'Information",-1),f=e("li",null,[t("Les programmes traitent les "),e("a",{href:"./transactions"},"instructions"),t(" des utilisateurs finaux mais aussi d'autres programmes")],-1),v=t("Tous les programmes sont "),k=e("em",null,"stateless",-1),L=t(" (sans \xE9tat): toutes les donn\xE9es avec lesquelles ils interagissent sont stock\xE9es dans des "),x=t("comptes"),P=t(" s\xE9par\xE9s qui sont transmis par des instructions."),y=e("li",null,[t("Les programmes eux-m\xEAmes sont stock\xE9s dans des comptes marqu\xE9s comme "),e("code",null,"executable")],-1),q=t("Tous les programmes appartiennent au "),S={href:"https://docs.solana.com/developing/runtime-facilities/programs#bpf-loader",target:"_blank",rel:"noopener noreferrer"},F=t("BPF Loader"),R=t(" et sont ex\xE9cut\xE9s par le "),B={href:"https://docs.solana.com/developing/programming-model/runtime",target:"_blank",rel:"noopener noreferrer"},C=t("Solana Runtime"),j=t("Les d\xE9veloppeurs \xE9crivent le plus souvent des programmes en Rust ou en C++, mais ils peuvent choisir n'importe quel langage qui cible le backend "),E={href:"https://en.wikipedia.org/wiki/Berkeley_Packet_Filter",target:"_blank",rel:"noopener noreferrer"},T=t("BPF"),A=t(" de "),D={href:"https://llvm.org/",target:"_blank",rel:"noopener noreferrer"},N=t("LLVM"),w=r("
  • Tous les programmes ont un point d'entr\xE9e unique o\xF9 le traitement des instructions a lieu (i.e. process_instruction); et dont les param\xE8tres incluent toujours:
    • program_id: pubkey
    • accounts: array,
    • instruction_data: byte array
  • ",1),I=e("h2",{id:"examen-plus-approfondi",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#examen-plus-approfondi","aria-hidden":"true"},"#"),t(" Examen plus approfondi")],-1),V=e("p",null,"Contrairement \xE0 la plupart des autres blockchains, Solana s\xE9pare compl\xE8tement le code des donn\xE9es. Toutes les donn\xE9es avec lesquelles les programmes interagissent sont stock\xE9es dans des comptes s\xE9par\xE9s et sont transmises, en tant que r\xE9f\xE9rences, via des instructions. Ce mod\xE8le permet \xE0 un seul programme g\xE9n\xE9rique de fonctionner sur plusieurs comptes sans n\xE9cessiter de d\xE9ploiements suppl\xE9mentaires. Des exemples communs de ce mod\xE8le sont observ\xE9s dans les programmes natifs et les programmes SPL.",-1),M=e("h3",{id:"programmes-natifs-la-bibliotheque-des-programmes-de-solana-spl",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#programmes-natifs-la-bibliotheque-des-programmes-de-solana-spl","aria-hidden":"true"},"#"),t(" Programmes Natifs & La Biblioth\xE8que des Programmes de Solana (SPL)")],-1),U=t("Solana est \xE9quip\xE9 d'un certain nombre de programmes qui servent d'\xE9l\xE9ments de base pour les interactions sur la blockchain. Ces programmes sont divis\xE9s en "),J={href:"https://docs.solana.com/developing/runtime-facilities/programs#bpf-loader",target:"_blank",rel:"noopener noreferrer"},O=t("Programmes Natifs"),z=t(" et en "),H={href:"https://spl.solana.com/",target:"_blank",rel:"noopener noreferrer"},G=t("Programmes de la Biblioth\xE8que des Programmes de Solana (SPL)"),K=t("."),Q=t("Les Programmes Natifs fournissent les fonctions de base n\xE9cessaires au fonctionnement des validateurs. Parmi ces programmes, le plus connu est le "),W={href:"https://docs.solana.com/developing/runtime-facilities/programs#system-program",target:"_blank",rel:"noopener noreferrer"},X=t("Programme Syst\xE8me (System Program)"),Y=t(" qui est responsable de l'administration des nouveaux comptes et de transf\xE9rer des SOL entre deux parties."),Z=t("Les programmes de la Biblioth\xE8que des Programmes de Solana (SPL) prennent en charge d'autres activit\xE9s au sein de la blockchain, telles que, par exemple, la cr\xE9ation de jetons, l'\xE9change de jetons ainsi ou encore le pr\xEAt de jetons, ainsi que la cr\xE9ation de pools de staking et le maintien on-chain du service de noms de domaine. Le "),$={href:"https://spl.solana.com/token",target:"_blank",rel:"noopener noreferrer"},ee=t("Programme de Jeton SPL (SPL Token Program)"),te=t(" peut \xEAtre invoqu\xE9 directement via l'interface CLI, tandis que d'autres, comme le "),se={href:"https://spl.solana.com/associated-token-account",target:"_blank",rel:"noopener noreferrer"},oe=t("Programme de Compte de Jeton Associ\xE9 (Associated Token Account Program)"),re=t(" sont g\xE9n\xE9ralement utilis\xE9s par d'autres programmes."),ne=e("h3",{id:"ecrire-des-programmes",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#ecrire-des-programmes","aria-hidden":"true"},"#"),t(" Ecrire des programmes")],-1),ae=t("Les programmes sont le plus souvent d\xE9velopp\xE9s avec Rust ou C++, mais peuvent \xEAtre d\xE9velopp\xE9s avec n'importe quel langage qui cible le backend BPF de LLVM. Les initiatives r\xE9centes de "),ie={href:"https://neon-labs.org/",target:"_blank",rel:"noopener noreferrer"},de=t("Neon Labs"),le=t(" et "),ce={href:"https://solang.readthedocs.io/en/latest/",target:"_blank",rel:"noopener noreferrer"},pe=t("Solang"),me=t(" permettent la compatibilit\xE9 "),ue={href:"https://ethereum.org/en/developers/docs/evm/",target:"_blank",rel:"noopener noreferrer"},_e=t("EVM"),he=t(" et permettent donc aux d\xE9veloppeurs d'\xE9crire des programmes en Solidity."),ge=r("

    La plupart des programmes Rust suivent l'architecture suivante :

    FichierDescription
    lib.rsRegistre des modules
    entrypoint.rsPoint d'entr\xE9e du programme
    instruction.rsAPI du programme, (d\xE9)s\xE9rialisation des instructions
    processor.rsLogique du programme
    state.rsObjets du programme, (d\xE9)s\xE9rialisation des \xE9tats
    error.rsErreurs sp\xE9cifiques au programme
    ",2),be=t("R\xE9cemment, "),fe={href:"https://github.com/coral-xyz/anchor",target:"_blank",rel:"noopener noreferrer"},ve=t("Anchor"),ke=t(" est devenu le framework le plus populaire pour le d\xE9veloppement de programmes. Anchor est un framework, semblable \xE0 Ruby on Rails, qui r\xE9duit le boilerplate (code passe-partout) et facilite la (d\xE9)s\xE9rialisation pour les programmes d\xE9velopp\xE9s en Rust."),Le=r("

    Les programmes sont g\xE9n\xE9ralement d\xE9velopp\xE9s et test\xE9s dans les environnements appel\xE9s Localhost et Devnet avant d'\xEAtre d\xE9ploy\xE9s sur le Testnet ou le Mainnet. Solana supporte les environnements suivants :

    Environnement du clusterURL de Connexion RPC
    Mainnet-betahttps://api.mainnet-beta.solana.com
    Testnethttps://api.testnet.solana.com
    Devnethttps://api.devnet.solana.com
    LocalhostDefault port: 8899 (e.g. http://localhost:8899, http://192.168.1.88:8899)
    ",2),xe=t("Une fois d\xE9ploy\xE9s dans un environnement, les clients peuvent interagir avec les programmes de la blockchain via les "),Pe={href:"https://docs.solana.com/developing/clients/jsonrpc-api",target:"_blank",rel:"noopener noreferrer"},ye=t("Connexions RPC"),qe=t(" du cluster correspondant."),Se=e("h3",{id:"deployer-des-programmes",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#deployer-des-programmes","aria-hidden":"true"},"#"),t(" D\xE9ployer des programmes")],-1),Fe=t("Les d\xE9veloppeurs peuvent d\xE9ployer leurs programmes via le "),Re={href:"https://docs.solana.com/cli/deploy-a-program",target:"_blank",rel:"noopener noreferrer"},Be=t("CLI"),Ce=t(":"),je=r(`
    solana program deploy <PROGRAM_FILEPATH>
    +import{_ as i,r as n,o as d,c as l,a as e,b as s,w as c,F as p,d as t,e as r}from"./app.2fbb9e96.js";const m={},u=e("h1",{id:"programmes",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#programmes","aria-hidden":"true"},"#"),t(" Programmes")],-1),_=e("p",null,"N'importe quel d\xE9veloppeur peut \xE9crire et d\xE9ployer des programmes sur la blockchain Solana. Les programmes (connus sous le nom de contrats intelligents sur d'autres protocoles) servent de base \xE0 l'activit\xE9 sur la blockchain, permettant tout, partant de la DeFi et des NFTs jusqu'aux m\xE9dias sociaux tout en passant par les jeux.",-1),h=e("h2",{id:"faits",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#faits","aria-hidden":"true"},"#"),t(" Faits")],-1),g={class:"custom-container tip"},b=e("p",{class:"custom-container-title"},"Fiche d'Information",-1),f=e("li",null,[t("Les programmes traitent les "),e("a",{href:"./transactions"},"instructions"),t(" des utilisateurs finaux mais aussi d'autres programmes")],-1),v=t("Tous les programmes sont "),k=e("em",null,"stateless",-1),L=t(" (sans \xE9tat): toutes les donn\xE9es avec lesquelles ils interagissent sont stock\xE9es dans des "),x=t("comptes"),P=t(" s\xE9par\xE9s qui sont transmis par des instructions."),y=e("li",null,[t("Les programmes eux-m\xEAmes sont stock\xE9s dans des comptes marqu\xE9s comme "),e("code",null,"executable")],-1),q=t("Tous les programmes appartiennent au "),S={href:"https://docs.solana.com/developing/runtime-facilities/programs#bpf-loader",target:"_blank",rel:"noopener noreferrer"},F=t("BPF Loader"),R=t(" et sont ex\xE9cut\xE9s par le "),B={href:"https://docs.solana.com/developing/programming-model/runtime",target:"_blank",rel:"noopener noreferrer"},C=t("Solana Runtime"),j=t("Les d\xE9veloppeurs \xE9crivent le plus souvent des programmes en Rust ou en C++, mais ils peuvent choisir n'importe quel langage qui cible le backend "),E={href:"https://en.wikipedia.org/wiki/Berkeley_Packet_Filter",target:"_blank",rel:"noopener noreferrer"},T=t("BPF"),A=t(" de "),D={href:"https://llvm.org/",target:"_blank",rel:"noopener noreferrer"},N=t("LLVM"),w=r("
  • Tous les programmes ont un point d'entr\xE9e unique o\xF9 le traitement des instructions a lieu (i.e. process_instruction); et dont les param\xE8tres incluent toujours:
    • program_id: pubkey
    • accounts: array,
    • instruction_data: byte array
  • ",1),I=e("h2",{id:"examen-plus-approfondi",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#examen-plus-approfondi","aria-hidden":"true"},"#"),t(" Examen plus approfondi")],-1),V=e("p",null,"Contrairement \xE0 la plupart des autres blockchains, Solana s\xE9pare compl\xE8tement le code des donn\xE9es. Toutes les donn\xE9es avec lesquelles les programmes interagissent sont stock\xE9es dans des comptes s\xE9par\xE9s et sont transmises, en tant que r\xE9f\xE9rences, via des instructions. Ce mod\xE8le permet \xE0 un seul programme g\xE9n\xE9rique de fonctionner sur plusieurs comptes sans n\xE9cessiter de d\xE9ploiements suppl\xE9mentaires. Des exemples communs de ce mod\xE8le sont observ\xE9s dans les programmes natifs et les programmes SPL.",-1),M=e("h3",{id:"programmes-natifs-la-bibliotheque-des-programmes-de-solana-spl",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#programmes-natifs-la-bibliotheque-des-programmes-de-solana-spl","aria-hidden":"true"},"#"),t(" Programmes Natifs & La Biblioth\xE8que des Programmes de Solana (SPL)")],-1),U=t("Solana est \xE9quip\xE9 d'un certain nombre de programmes qui servent d'\xE9l\xE9ments de base pour les interactions sur la blockchain. Ces programmes sont divis\xE9s en "),J={href:"https://docs.solana.com/developing/runtime-facilities/programs#bpf-loader",target:"_blank",rel:"noopener noreferrer"},O=t("Programmes Natifs"),z=t(" et en "),H={href:"https://spl.solana.com/",target:"_blank",rel:"noopener noreferrer"},G=t("Programmes de la Biblioth\xE8que des Programmes de Solana (SPL)"),K=t("."),Q=t("Les Programmes Natifs fournissent les fonctions de base n\xE9cessaires au fonctionnement des validateurs. Parmi ces programmes, le plus connu est le "),W={href:"https://docs.solana.com/developing/runtime-facilities/programs#system-program",target:"_blank",rel:"noopener noreferrer"},X=t("Programme Syst\xE8me (System Program)"),Y=t(" qui est responsable de l'administration des nouveaux comptes et de transf\xE9rer des SOL entre deux parties."),Z=t("Les programmes de la Biblioth\xE8que des Programmes de Solana (SPL) prennent en charge d'autres activit\xE9s au sein de la blockchain, telles que, par exemple, la cr\xE9ation de jetons, l'\xE9change de jetons ainsi ou encore le pr\xEAt de jetons, ainsi que la cr\xE9ation de pools de staking et le maintien on-chain du service de noms de domaine. Le "),$={href:"https://spl.solana.com/token",target:"_blank",rel:"noopener noreferrer"},ee=t("Programme de Jeton SPL (SPL Token Program)"),te=t(" peut \xEAtre invoqu\xE9 directement via l'interface CLI, tandis que d'autres, comme le "),se={href:"https://spl.solana.com/associated-token-account",target:"_blank",rel:"noopener noreferrer"},oe=t("Programme de Compte de Jeton Associ\xE9 (Associated Token Account Program)"),re=t(" sont g\xE9n\xE9ralement utilis\xE9s par d'autres programmes."),ne=e("h3",{id:"ecrire-des-programmes",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#ecrire-des-programmes","aria-hidden":"true"},"#"),t(" Ecrire des programmes")],-1),ae=t("Les programmes sont le plus souvent d\xE9velopp\xE9s avec Rust ou C++, mais peuvent \xEAtre d\xE9velopp\xE9s avec n'importe quel langage qui cible le backend BPF de LLVM. Les initiatives r\xE9centes de "),ie={href:"https://neon-labs.org/",target:"_blank",rel:"noopener noreferrer"},de=t("Neon Labs"),le=t(" et "),ce={href:"https://solang.readthedocs.io/en/latest/",target:"_blank",rel:"noopener noreferrer"},pe=t("Solang"),me=t(" permettent la compatibilit\xE9 "),ue={href:"https://ethereum.org/en/developers/docs/evm/",target:"_blank",rel:"noopener noreferrer"},_e=t("EVM"),he=t(" et permettent donc aux d\xE9veloppeurs d'\xE9crire des programmes en Solidity."),ge=r("

    La plupart des programmes Rust suivent l'architecture suivante :

    FichierDescription
    lib.rsRegistre des modules
    entrypoint.rsPoint d'entr\xE9e du programme
    instruction.rsAPI du programme, (d\xE9)s\xE9rialisation des instructions
    processor.rsLogique du programme
    state.rsObjets du programme, (d\xE9)s\xE9rialisation des \xE9tats
    error.rsErreurs sp\xE9cifiques au programme
    ",2),be=t("R\xE9cemment, "),fe={href:"https://github.com/coral-xyz/anchor",target:"_blank",rel:"noopener noreferrer"},ve=t("Anchor"),ke=t(" est devenu le framework le plus populaire pour le d\xE9veloppement de programmes. Anchor est un framework, semblable \xE0 Ruby on Rails, qui r\xE9duit le boilerplate (code passe-partout) et facilite la (d\xE9)s\xE9rialisation pour les programmes d\xE9velopp\xE9s en Rust."),Le=r("

    Les programmes sont g\xE9n\xE9ralement d\xE9velopp\xE9s et test\xE9s dans les environnements appel\xE9s Localhost et Devnet avant d'\xEAtre d\xE9ploy\xE9s sur le Testnet ou le Mainnet. Solana supporte les environnements suivants :

    Environnement du clusterURL de Connexion RPC
    Mainnet-betahttps://api.mainnet-beta.solana.com
    Testnethttps://api.testnet.solana.com
    Devnethttps://api.devnet.solana.com
    LocalhostDefault port: 8899 (e.g. http://localhost:8899, http://192.168.1.88:8899)
    ",2),xe=t("Une fois d\xE9ploy\xE9s dans un environnement, les clients peuvent interagir avec les programmes de la blockchain via les "),Pe={href:"https://docs.solana.com/developing/clients/jsonrpc-api",target:"_blank",rel:"noopener noreferrer"},ye=t("Connexions RPC"),qe=t(" du cluster correspondant."),Se=e("h3",{id:"deployer-des-programmes",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#deployer-des-programmes","aria-hidden":"true"},"#"),t(" D\xE9ployer des programmes")],-1),Fe=t("Les d\xE9veloppeurs peuvent d\xE9ployer leurs programmes via le "),Re={href:"https://docs.solana.com/cli/deploy-a-program",target:"_blank",rel:"noopener noreferrer"},Be=t("CLI"),Ce=t(":"),je=r(`
    solana program deploy <PROGRAM_FILEPATH>
     
    `,1),Ee=t("Lorsqu'un programme est d\xE9ploy\xE9, il est compil\xE9 en un "),Te={href:"https://en.wikipedia.org/wiki/Executable_and_Linkable_Format",target:"_blank",rel:"noopener noreferrer"},Ae=t("objet partag\xE9 ELF (ELF shared object)"),De=t(" (contenant le bytecode du BPF) et t\xE9l\xE9charg\xE9 sur le cluster Solana. Les programmes vivent dans des comptes (comme \xE0 peu pr\xE8s tout ce qui se trouve sur Solana), sauf que ceux-ci sont marqu\xE9s comme "),Ne=e("code",null,"executable",-1),we=t(" et assign\xE9 au BPF Loader. L'adresse de ce compte est appel\xE9e "),Ie=e("code",null,"program_id",-1),Ve=t(" et est utilis\xE9e pour r\xE9f\xE9rencer le programme dans toutes les transactions futures."),Me=t("Solana supporte plusieurs BPF Loaders, dont le dernier en date est le "),Ue={href:"https://explorer.solana.com/address/BPFLoaderUpgradeab1e11111111111111111111111",target:"_blank",rel:"noopener noreferrer"},Je=t("Upgradable BPF Loader"),Oe=t(". Le BPF Loader est charg\xE9 de g\xE9rer les comptes du programme et de les rendre accessibles aux clients via le "),ze=e("code",null,"program_id",-1),He=t(". Tous les programmes ont un point d'entr\xE9e unique o\xF9 le traitement des instructions a lieu (i.e. "),Ge=e("code",null,"process_instruction",-1),Ke=t(") et dont les param\xE8tres incluent toujours:"),Qe=r('
    • program_id: pubkey
    • accounts: array,
    • instruction_data: byte array

    Une fois invoqu\xE9s, les programmes sont ex\xE9cut\xE9s par le Runtime de Solana.

    Autres Ressources

    ',3),We={href:"https://docs.solana.com/developing/on-chain-programs/overview",target:"_blank",rel:"noopener noreferrer"},Xe=t("Documentation officielle"),Ye={href:"https://spl.solana.com/",target:"_blank",rel:"noopener noreferrer"},Ze=t("Documentation sur le SPL"),$e={href:"https://jstarry.notion.site/Program-deploys-29780c48794c47308d5f138074dd9838",target:"_blank",rel:"noopener noreferrer"},et=t("D\xE9ploiements de programmes par Justin Starry"),tt={href:"https://book.solmeet.dev/notes/solana-starter-kit",target:"_blank",rel:"noopener noreferrer"},st=t("Kit de d\xE9marrage pour Solana par Iron Addicted Dog"),ot={href:"https://paulx.dev/blog/2021/01/14/programming-on-solana-an-introduction/",target:"_blank",rel:"noopener noreferrer"},rt=t("Programmation sur Solana par Paulx"),nt={href:"https://2501babe.github.io/posts/solana101.html",target:"_blank",rel:"noopener noreferrer"},at=t("Une Introduction \xE0 la Blockchain Solana par Hana"),it={href:"https://github.com/coral-xyz/anchor",target:"_blank",rel:"noopener noreferrer"},dt=t("Anchor");function lt(ct,pt){const a=n("RouterLink"),o=n("ExternalLinkIcon");return d(),l(p,null,[u,_,h,e("div",g,[b,e("ul",null,[f,e("li",null,[v,k,L,s(a,{to:"/fr/core-concepts/accounts.html"},{default:c(()=>[x]),_:1}),P]),y,e("li",null,[q,e("a",S,[F,s(o)]),R,e("a",B,[C,s(o)])]),e("li",null,[j,e("a",E,[T,s(o)]),A,e("a",D,[N,s(o)])]),w])]),I,V,M,e("p",null,[U,e("a",J,[O,s(o)]),z,e("a",H,[G,s(o)]),K]),e("p",null,[Q,e("a",W,[X,s(o)]),Y]),e("p",null,[Z,e("a",$,[ee,s(o)]),te,e("a",se,[oe,s(o)]),re]),ne,e("p",null,[ae,e("a",ie,[de,s(o)]),le,e("a",ce,[pe,s(o)]),me,e("a",ue,[_e,s(o)]),he]),ge,e("p",null,[be,e("a",fe,[ve,s(o)]),ke]),Le,e("p",null,[xe,e("a",Pe,[ye,s(o)]),qe]),Se,e("p",null,[Fe,e("a",Re,[Be,s(o)]),Ce]),je,e("p",null,[Ee,e("a",Te,[Ae,s(o)]),De,Ne,we,Ie,Ve]),e("p",null,[Me,e("a",Ue,[Je,s(o)]),Oe,ze,He,Ge,Ke]),Qe,e("ul",null,[e("li",null,[e("a",We,[Xe,s(o)])]),e("li",null,[e("a",Ye,[Ze,s(o)])]),e("li",null,[e("a",$e,[et,s(o)])]),e("li",null,[e("a",tt,[st,s(o)])]),e("li",null,[e("a",ot,[rt,s(o)])]),e("li",null,[e("a",nt,[at,s(o)])]),e("li",null,[e("a",it,[dt,s(o)])])])],64)}var ut=i(m,[["render",lt]]);export{ut as default}; diff --git a/docs/.vuepress/dist/assets/programs.html.8c3223e3.js b/docs/.vuepress/dist/assets/programs.html.a729e5a5.js similarity index 99% rename from docs/.vuepress/dist/assets/programs.html.8c3223e3.js rename to docs/.vuepress/dist/assets/programs.html.a729e5a5.js index 261666177..8ece62cbc 100644 --- a/docs/.vuepress/dist/assets/programs.html.8c3223e3.js +++ b/docs/.vuepress/dist/assets/programs.html.a729e5a5.js @@ -1,4 +1,4 @@ -import{_ as r,r as c,o as i,c as k,b as t,w as a,F as b,a as n,d as s,e as p}from"./app.cfdf84e7.js";const m={},d=n("h1",{id:"ecrire-des-programmes",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#ecrire-des-programmes","aria-hidden":"true"},"#"),s(" \xC9crire des Programmes")],-1),_=n("h2",{id:"comment-transferer-sol-dans-un-programme",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#comment-transferer-sol-dans-un-programme","aria-hidden":"true"},"#"),s(" Comment transf\xE9rer SOL dans un programme")],-1),y=n("p",null,[s(`Votre Programme Solana peut transf\xE9rer des lamports d'un compte \xE0 un autre sans "invoquer" le programme du Syst\xE8me (System program). La r\xE8gle fondamentale est que votre programme peut transf\xE9rer des lamports de n'importe quel compte `),n("strong",null,"appartenant"),s(" \xE0 votre programme vers n'importe quel compte.")],-1),f=n("p",null,[s("Le compte destinataire "),n("em",null,"ne doit pas n\xE9cessairement \xEAtre"),s(" un compte appartenant \xE0 votre programme.")],-1),g=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"/// Transfers lamports from one account (must be program owned)"),s(` +import{_ as r,r as c,o as i,c as k,b as t,w as a,F as b,a as n,d as s,e as p}from"./app.2fbb9e96.js";const m={},d=n("h1",{id:"ecrire-des-programmes",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#ecrire-des-programmes","aria-hidden":"true"},"#"),s(" \xC9crire des Programmes")],-1),_=n("h2",{id:"comment-transferer-sol-dans-un-programme",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#comment-transferer-sol-dans-un-programme","aria-hidden":"true"},"#"),s(" Comment transf\xE9rer SOL dans un programme")],-1),y=n("p",null,[s(`Votre Programme Solana peut transf\xE9rer des lamports d'un compte \xE0 un autre sans "invoquer" le programme du Syst\xE8me (System program). La r\xE8gle fondamentale est que votre programme peut transf\xE9rer des lamports de n'importe quel compte `),n("strong",null,"appartenant"),s(" \xE0 votre programme vers n'importe quel compte.")],-1),f=n("p",null,[s("Le compte destinataire "),n("em",null,"ne doit pas n\xE9cessairement \xEAtre"),s(" un compte appartenant \xE0 votre programme.")],-1),g=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"/// Transfers lamports from one account (must be program owned)"),s(` `),n("span",{class:"token comment"},"/// to another account. The recipient can by any account"),s(` `),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"transfer_service_fee_lamports"),n("span",{class:"token punctuation"},"("),s(` from_account`),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token operator"},"&"),n("span",{class:"token class-name"},"AccountInfo"),n("span",{class:"token punctuation"},","),s(` diff --git a/docs/.vuepress/dist/assets/programs.html.533f07a3.js b/docs/.vuepress/dist/assets/programs.html.a7ccbe5d.js similarity index 99% rename from docs/.vuepress/dist/assets/programs.html.533f07a3.js rename to docs/.vuepress/dist/assets/programs.html.a7ccbe5d.js index e81c02595..5d6401067 100644 --- a/docs/.vuepress/dist/assets/programs.html.533f07a3.js +++ b/docs/.vuepress/dist/assets/programs.html.a7ccbe5d.js @@ -1,4 +1,4 @@ -import{_ as n,e as s}from"./app.cfdf84e7.js";const a={},p=s(`

    Writing Programs (Programlar\u0131 Yazma)

    How to transfer SOL in a program (Programda SOL aktarma)

    Solana Program\u0131n\u0131z, Sistem program\u0131n\u0131 '\xE7a\u011F\u0131rmadan', lamp\u2019lar\u0131 bir account'tan di\u011Ferine aktarabilir. Temel kural, program\u0131n\u0131z\u0131n, program\u0131n\u0131z\u0131n sahip oldu\u011Fu herhangi bir account'tan herhangi bir account'a lamp aktarabilmesidir.

    Al\u0131c\u0131 account'\u0131n\u0131n, program\u0131n\u0131za ait bir account olmas\u0131 gerekmez.

    /// Transfers lamports from one account (must be program owned)
    +import{_ as n,e as s}from"./app.2fbb9e96.js";const a={},p=s(`

    Writing Programs (Programlar\u0131 Yazma)

    How to transfer SOL in a program (Programda SOL aktarma)

    Solana Program\u0131n\u0131z, Sistem program\u0131n\u0131 '\xE7a\u011F\u0131rmadan', lamp\u2019lar\u0131 bir account'tan di\u011Ferine aktarabilir. Temel kural, program\u0131n\u0131z\u0131n, program\u0131n\u0131z\u0131n sahip oldu\u011Fu herhangi bir account'tan herhangi bir account'a lamp aktarabilmesidir.

    Al\u0131c\u0131 account'\u0131n\u0131n, program\u0131n\u0131za ait bir account olmas\u0131 gerekmez.

    /// Transfers lamports from one account (must be program owned)
     /// to another account. The recipient can by any account
     fn transfer_service_fee_lamports(
         from_account: &AccountInfo,
    diff --git a/docs/.vuepress/dist/assets/programs.html.1c9a5bba.js b/docs/.vuepress/dist/assets/programs.html.abb8a7d0.js
    similarity index 99%
    rename from docs/.vuepress/dist/assets/programs.html.1c9a5bba.js
    rename to docs/.vuepress/dist/assets/programs.html.abb8a7d0.js
    index e2a474200..1ef89aa13 100644
    --- a/docs/.vuepress/dist/assets/programs.html.1c9a5bba.js
    +++ b/docs/.vuepress/dist/assets/programs.html.abb8a7d0.js
    @@ -1,2 +1,2 @@
    -import{_ as i,r as a,o as d,c,a as e,b as o,w as l,F as h,d as t,e as n}from"./app.cfdf84e7.js";const _={},p=e("h1",{id:"programs",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#programs","aria-hidden":"true"},"#"),t(" Programs")],-1),g=e("p",null,"Any developer can write and deploy programs to the Solana blockchain. Programs (known as smart contracts on other protocols) serve as the foundation for on-chain activity, powering anything from DeFi and NFTs to Social Media and Gaming.",-1),m=e("h2",{id:"facts",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#facts","aria-hidden":"true"},"#"),t(" Facts")],-1),u={class:"custom-container tip"},b=e("p",{class:"custom-container-title"},"Fact Sheet",-1),f=e("li",null,[t("Programs process "),e("a",{href:"./transactions"},"instructions"),t(" from both end users and other programs")],-1),k=t("All programs are "),v=e("em",null,"stateless",-1),y=t(": any data they interact with is stored in separate "),P=t("accounts"),w=t(" that are passed in via instructions"),L=e("li",null,[t("Programs themselves are stored in accounts marked as "),e("code",null,"executable")],-1),S=t("All programs are owned by the "),x={href:"https://docs.solana.com/developing/runtime-facilities/programs#bpf-loader",target:"_blank",rel:"noopener noreferrer"},F=t("BPF Loader"),R=t(" and executed by the "),A={href:"https://docs.solana.com/developing/programming-model/runtime",target:"_blank",rel:"noopener noreferrer"},B=t("Solana Runtime"),D=t("Developers most commonly write programs in Rust or C++, but can choose any language that targets the "),T={href:"https://llvm.org/",target:"_blank",rel:"noopener noreferrer"},C=t("LLVM"),N=t("'s "),E={href:"https://en.wikipedia.org/wiki/Berkeley_Packet_Filter",target:"_blank",rel:"noopener noreferrer"},I=t("BPF"),M=t(" backend"),V=n("
  • All programs have a single entry point where instruction processing takes place (i.e. process_instruction); parameters always include:
    • program_id: pubkey
    • accounts: array,
    • instruction_data: byte array
  • ",1),O=e("h2",{id:"deep-dive",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#deep-dive","aria-hidden":"true"},"#"),t(" Deep Dive")],-1),z=e("p",null,"Unlike most other blockchains, Solana completely separates code from data. All data that programs interact with are stored in separate accounts and passed in as references via instructions. This model allows for a single generic program to operate across various accounts without requiring additional deployments. Common examples of this pattern are seen across the Native and SPL Programs.",-1),j=e("h3",{id:"native-programs-the-solana-program-library-spl",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#native-programs-the-solana-program-library-spl","aria-hidden":"true"},"#"),t(" Native Programs & The Solana Program Library (SPL)")],-1),U=t("Solana comes equipped with a number of programs that serve as core building blocks for on-chain interactions. These programs are divided into "),q={href:"https://docs.solana.com/developing/runtime-facilities/programs#bpf-loader",target:"_blank",rel:"noopener noreferrer"},G=t("Native Programs"),H=t(" and "),W={href:"https://spl.solana.com/",target:"_blank",rel:"noopener noreferrer"},J=t("Solana Program Library (SPL) Programs"),K=t("."),Q=t("Native Programs provide the base functionality that is required to operate validators. Among these programs, the most well known is the "),X={href:"https://docs.solana.com/developing/runtime-facilities/programs#system-program",target:"_blank",rel:"noopener noreferrer"},Y=t("System Program"),Z=t(" which is responsible for administering new accounts and transferring SOL between two parties."),$=t("SPL Programs support a number of on-chain activities, including creating, swapping, and lending tokens, as well as generating stake pools and maintaining an on-chain name service. The "),ee={href:"https://spl.solana.com/token",target:"_blank",rel:"noopener noreferrer"},te=t("SPL Token Program"),oe=t(" can be invoked directly via the CLI, while others like the "),re={href:"https://spl.solana.com/associated-token-account",target:"_blank",rel:"noopener noreferrer"},ne=t("Associated Token Account Program"),ae=t(" are usually composed with custom programs."),se=e("h3",{id:"writing-programs",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#writing-programs","aria-hidden":"true"},"#"),t(" Writing Programs")],-1),ie=t("Programs are most commonly developed with Rust or C++, but can be developed with any language that targets the LLVM\u2019s BPF backend. Recent initiatives by "),de={href:"https://neon-labs.org/",target:"_blank",rel:"noopener noreferrer"},ce=t("Neon Labs"),le=t(" and "),he={href:"https://solang.readthedocs.io/en/latest/",target:"_blank",rel:"noopener noreferrer"},_e=t("Solang"),pe=t(" enable "),ge={href:"https://ethereum.org/en/developers/docs/evm/",target:"_blank",rel:"noopener noreferrer"},me=t("EVM"),ue=t(" compatibility and allow developers to write programs in Solidity."),be=n("

    Most Rust-based programs adhere to the following architecture:

    FileDescription
    lib.rsRegistering modules
    entrypoint.rsEntrypoint to the program
    instruction.rsProgram API, (de)serializing instruction data
    processor.rsProgram logic
    state.rsProgram objects, (de)serializing state
    error.rsProgram-specific errors
    ",2),fe=t("Recently, "),ke={href:"https://github.com/coral-xyz/anchor",target:"_blank",rel:"noopener noreferrer"},ve=t("Anchor"),ye=t(" has emerged as a popular framework for developing programs. Anchor is an opinionated framework, akin to Ruby on Rails, that reduces boilerplate and streamlines the (de)serialization process for Rust-based development."),Pe=n("

    Programs are usually developed and tested against Localhost and Devnet environments before being deployed to Testnet or Mainnet. Solana supports the following environments:

    Cluster EnvironmentRPC Connection URL
    Mainnet-betahttps://api.mainnet-beta.solana.com
    Testnethttps://api.testnet.solana.com
    Devnethttps://api.devnet.solana.com
    LocalhostDefault port: 8899 (e.g. http://localhost:8899, http://192.168.1.88:8899)
    ",2),we=t("Once deployed to an environment, clients can interact with on-chain programs via "),Le={href:"https://docs.solana.com/developing/clients/jsonrpc-api",target:"_blank",rel:"noopener noreferrer"},Se=t("RPC connections"),xe=t(" to the respective cluster."),Fe=e("h3",{id:"deploying-programs",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#deploying-programs","aria-hidden":"true"},"#"),t(" Deploying Programs")],-1),Re=t("Developers can deploy their programs via the "),Ae={href:"https://docs.solana.com/cli/deploy-a-program",target:"_blank",rel:"noopener noreferrer"},Be=t("CLI"),De=t(":"),Te=n(`
    solana program deploy <PROGRAM_FILEPATH>
    +import{_ as i,r as a,o as d,c,a as e,b as o,w as l,F as h,d as t,e as n}from"./app.2fbb9e96.js";const _={},p=e("h1",{id:"programs",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#programs","aria-hidden":"true"},"#"),t(" Programs")],-1),g=e("p",null,"Any developer can write and deploy programs to the Solana blockchain. Programs (known as smart contracts on other protocols) serve as the foundation for on-chain activity, powering anything from DeFi and NFTs to Social Media and Gaming.",-1),m=e("h2",{id:"facts",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#facts","aria-hidden":"true"},"#"),t(" Facts")],-1),u={class:"custom-container tip"},b=e("p",{class:"custom-container-title"},"Fact Sheet",-1),f=e("li",null,[t("Programs process "),e("a",{href:"./transactions"},"instructions"),t(" from both end users and other programs")],-1),k=t("All programs are "),v=e("em",null,"stateless",-1),y=t(": any data they interact with is stored in separate "),P=t("accounts"),w=t(" that are passed in via instructions"),L=e("li",null,[t("Programs themselves are stored in accounts marked as "),e("code",null,"executable")],-1),S=t("All programs are owned by the "),x={href:"https://docs.solana.com/developing/runtime-facilities/programs#bpf-loader",target:"_blank",rel:"noopener noreferrer"},F=t("BPF Loader"),R=t(" and executed by the "),A={href:"https://docs.solana.com/developing/programming-model/runtime",target:"_blank",rel:"noopener noreferrer"},B=t("Solana Runtime"),D=t("Developers most commonly write programs in Rust or C++, but can choose any language that targets the "),T={href:"https://llvm.org/",target:"_blank",rel:"noopener noreferrer"},C=t("LLVM"),N=t("'s "),E={href:"https://en.wikipedia.org/wiki/Berkeley_Packet_Filter",target:"_blank",rel:"noopener noreferrer"},I=t("BPF"),M=t(" backend"),V=n("
  • All programs have a single entry point where instruction processing takes place (i.e. process_instruction); parameters always include:
    • program_id: pubkey
    • accounts: array,
    • instruction_data: byte array
  • ",1),O=e("h2",{id:"deep-dive",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#deep-dive","aria-hidden":"true"},"#"),t(" Deep Dive")],-1),z=e("p",null,"Unlike most other blockchains, Solana completely separates code from data. All data that programs interact with are stored in separate accounts and passed in as references via instructions. This model allows for a single generic program to operate across various accounts without requiring additional deployments. Common examples of this pattern are seen across the Native and SPL Programs.",-1),j=e("h3",{id:"native-programs-the-solana-program-library-spl",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#native-programs-the-solana-program-library-spl","aria-hidden":"true"},"#"),t(" Native Programs & The Solana Program Library (SPL)")],-1),U=t("Solana comes equipped with a number of programs that serve as core building blocks for on-chain interactions. These programs are divided into "),q={href:"https://docs.solana.com/developing/runtime-facilities/programs#bpf-loader",target:"_blank",rel:"noopener noreferrer"},G=t("Native Programs"),H=t(" and "),W={href:"https://spl.solana.com/",target:"_blank",rel:"noopener noreferrer"},J=t("Solana Program Library (SPL) Programs"),K=t("."),Q=t("Native Programs provide the base functionality that is required to operate validators. Among these programs, the most well known is the "),X={href:"https://docs.solana.com/developing/runtime-facilities/programs#system-program",target:"_blank",rel:"noopener noreferrer"},Y=t("System Program"),Z=t(" which is responsible for administering new accounts and transferring SOL between two parties."),$=t("SPL Programs support a number of on-chain activities, including creating, swapping, and lending tokens, as well as generating stake pools and maintaining an on-chain name service. The "),ee={href:"https://spl.solana.com/token",target:"_blank",rel:"noopener noreferrer"},te=t("SPL Token Program"),oe=t(" can be invoked directly via the CLI, while others like the "),re={href:"https://spl.solana.com/associated-token-account",target:"_blank",rel:"noopener noreferrer"},ne=t("Associated Token Account Program"),ae=t(" are usually composed with custom programs."),se=e("h3",{id:"writing-programs",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#writing-programs","aria-hidden":"true"},"#"),t(" Writing Programs")],-1),ie=t("Programs are most commonly developed with Rust or C++, but can be developed with any language that targets the LLVM\u2019s BPF backend. Recent initiatives by "),de={href:"https://neon-labs.org/",target:"_blank",rel:"noopener noreferrer"},ce=t("Neon Labs"),le=t(" and "),he={href:"https://solang.readthedocs.io/en/latest/",target:"_blank",rel:"noopener noreferrer"},_e=t("Solang"),pe=t(" enable "),ge={href:"https://ethereum.org/en/developers/docs/evm/",target:"_blank",rel:"noopener noreferrer"},me=t("EVM"),ue=t(" compatibility and allow developers to write programs in Solidity."),be=n("

    Most Rust-based programs adhere to the following architecture:

    FileDescription
    lib.rsRegistering modules
    entrypoint.rsEntrypoint to the program
    instruction.rsProgram API, (de)serializing instruction data
    processor.rsProgram logic
    state.rsProgram objects, (de)serializing state
    error.rsProgram-specific errors
    ",2),fe=t("Recently, "),ke={href:"https://github.com/coral-xyz/anchor",target:"_blank",rel:"noopener noreferrer"},ve=t("Anchor"),ye=t(" has emerged as a popular framework for developing programs. Anchor is an opinionated framework, akin to Ruby on Rails, that reduces boilerplate and streamlines the (de)serialization process for Rust-based development."),Pe=n("

    Programs are usually developed and tested against Localhost and Devnet environments before being deployed to Testnet or Mainnet. Solana supports the following environments:

    Cluster EnvironmentRPC Connection URL
    Mainnet-betahttps://api.mainnet-beta.solana.com
    Testnethttps://api.testnet.solana.com
    Devnethttps://api.devnet.solana.com
    LocalhostDefault port: 8899 (e.g. http://localhost:8899, http://192.168.1.88:8899)
    ",2),we=t("Once deployed to an environment, clients can interact with on-chain programs via "),Le={href:"https://docs.solana.com/developing/clients/jsonrpc-api",target:"_blank",rel:"noopener noreferrer"},Se=t("RPC connections"),xe=t(" to the respective cluster."),Fe=e("h3",{id:"deploying-programs",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#deploying-programs","aria-hidden":"true"},"#"),t(" Deploying Programs")],-1),Re=t("Developers can deploy their programs via the "),Ae={href:"https://docs.solana.com/cli/deploy-a-program",target:"_blank",rel:"noopener noreferrer"},Be=t("CLI"),De=t(":"),Te=n(`
    solana program deploy <PROGRAM_FILEPATH>
     
    `,1),Ce=t("When a program is deployed, it is compiled to an "),Ne={href:"https://en.wikipedia.org/wiki/Executable_and_Linkable_Format",target:"_blank",rel:"noopener noreferrer"},Ee=t("ELF shared object"),Ie=t(" (containing BPF bytecode) and uploaded to the Solana cluster. Programs live in accounts (much like everything else on Solana), except these accounts are marked as "),Me=e("code",null,"executable",-1),Ve=t(" and assigned to the BPF Loader. The address of this account is referred to as the "),Oe=e("code",null,"program_id",-1),ze=t(" and is used to reference the program in all future transactions."),je=t("Solana supports multiple BPF Loaders, with the latest being the "),Ue={href:"https://explorer.solana.com/address/BPFLoaderUpgradeab1e11111111111111111111111",target:"_blank",rel:"noopener noreferrer"},qe=t("Upgradable BPF Loader"),Ge=t(". The BPF Loader is responsible for administering the program\u2019s account and making it available to clients via the "),He=e("code",null,"program_id",-1),We=t(". All programs have a single entry point where instruction processing takes place (i.e. "),Je=e("code",null,"process_instruction",-1),Ke=t(") and parameters always include:"),Qe=n('
    • program_id: pubkey
    • accounts: array,
    • instruction_data: byte array

    Once invoked, programs are executed by the Solana Runtime.

    Other Resources

    ',3),Xe={href:"https://docs.solana.com/developing/on-chain-programs/overview",target:"_blank",rel:"noopener noreferrer"},Ye=t("Official Documentation"),Ze={href:"https://spl.solana.com/",target:"_blank",rel:"noopener noreferrer"},$e=t("SPL Documentation"),et={href:"https://jstarry.notion.site/Program-deploys-29780c48794c47308d5f138074dd9838",target:"_blank",rel:"noopener noreferrer"},tt=t("Program Deploys by Justin Starry"),ot={href:"https://book.solmeet.dev/notes/solana-starter-kit",target:"_blank",rel:"noopener noreferrer"},rt=t("Solana Starter Kit by Iron Addicted Dog"),nt={href:"https://paulx.dev/blog/2021/01/14/programming-on-solana-an-introduction/",target:"_blank",rel:"noopener noreferrer"},at=t("Programming on Solana by Paulx"),st={href:"https://2501babe.github.io/posts/solana101.html",target:"_blank",rel:"noopener noreferrer"},it=t("An Introduction to the Solana Blockchain by Hana"),dt={href:"https://github.com/coral-xyz/anchor",target:"_blank",rel:"noopener noreferrer"},ct=t("Anchor");function lt(ht,_t){const s=a("RouterLink"),r=a("ExternalLinkIcon");return d(),c(h,null,[p,g,m,e("div",u,[b,e("ul",null,[f,e("li",null,[k,v,y,o(s,{to:"/core-concepts/accounts.html"},{default:l(()=>[P]),_:1}),w]),L,e("li",null,[S,e("a",x,[F,o(r)]),R,e("a",A,[B,o(r)])]),e("li",null,[D,e("a",T,[C,o(r)]),N,e("a",E,[I,o(r)]),M]),V])]),O,z,j,e("p",null,[U,e("a",q,[G,o(r)]),H,e("a",W,[J,o(r)]),K]),e("p",null,[Q,e("a",X,[Y,o(r)]),Z]),e("p",null,[$,e("a",ee,[te,o(r)]),oe,e("a",re,[ne,o(r)]),ae]),se,e("p",null,[ie,e("a",de,[ce,o(r)]),le,e("a",he,[_e,o(r)]),pe,e("a",ge,[me,o(r)]),ue]),be,e("p",null,[fe,e("a",ke,[ve,o(r)]),ye]),Pe,e("p",null,[we,e("a",Le,[Se,o(r)]),xe]),Fe,e("p",null,[Re,e("a",Ae,[Be,o(r)]),De]),Te,e("p",null,[Ce,e("a",Ne,[Ee,o(r)]),Ie,Me,Ve,Oe,ze]),e("p",null,[je,e("a",Ue,[qe,o(r)]),Ge,He,We,Je,Ke]),Qe,e("ul",null,[e("li",null,[e("a",Xe,[Ye,o(r)])]),e("li",null,[e("a",Ze,[$e,o(r)])]),e("li",null,[e("a",et,[tt,o(r)])]),e("li",null,[e("a",ot,[rt,o(r)])]),e("li",null,[e("a",nt,[at,o(r)])]),e("li",null,[e("a",st,[it,o(r)])]),e("li",null,[e("a",dt,[ct,o(r)])])])],64)}var gt=i(_,[["render",lt]]);export{gt as default}; diff --git a/docs/.vuepress/dist/assets/programs.html.434be993.js b/docs/.vuepress/dist/assets/programs.html.bdb42a51.js similarity index 99% rename from docs/.vuepress/dist/assets/programs.html.434be993.js rename to docs/.vuepress/dist/assets/programs.html.bdb42a51.js index 47d9c4977..31bdf4464 100644 --- a/docs/.vuepress/dist/assets/programs.html.434be993.js +++ b/docs/.vuepress/dist/assets/programs.html.bdb42a51.js @@ -1,4 +1,4 @@ -import{_ as r,r as c,o as i,c as k,b as t,w as a,F as b,a as n,d as s,e as p}from"./app.cfdf84e7.js";const m={},d=n("h1",{id:"writing-programs",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#writing-programs","aria-hidden":"true"},"#"),s(" Writing Programs")],-1),_=n("h2",{id:"\u0E27\u0E34\u0E18\u0E35-transfer-sol-in-a-program",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E27\u0E34\u0E18\u0E35-transfer-sol-in-a-program","aria-hidden":"true"},"#"),s(" \u0E27\u0E34\u0E18\u0E35 transfer SOL in a program")],-1),y=n("p",null,[s("Solana Program \u0E02\u0E2D\u0E07\u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E2A\u0E48\u0E07 lamports \u0E08\u0E32\u0E01 account \u0E19\u0E36\u0E07\u0E44\u0E1B\u0E2D\u0E35\u0E01 account \u0E19\u0E36\u0E07\u0E42\u0E14\u0E22\u0E44\u0E21\u0E48\u0E15\u0E49\u0E2D\u0E07 '\u0E23\u0E49\u0E2D\u0E07\u0E02\u0E2D' (invoking) \u0E44\u0E1B\u0E17\u0E35\u0E48 System program. \u0E42\u0E14\u0E22\u0E2B\u0E25\u0E31\u0E01\u0E40\u0E1A\u0E37\u0E49\u0E2D\u0E07\u0E15\u0E49\u0E19\u0E01\u0E47\u0E04\u0E37\u0E2D program \u0E02\u0E2D\u0E07\u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E2A\u0E48\u0E07 lamports \u0E08\u0E32\u0E01 account \u0E17\u0E35\u0E48 program \u0E02\u0E2D\u0E07\u0E40\u0E23\u0E32 "),n("strong",null,"\u0E40\u0E1B\u0E47\u0E19\u0E40\u0E08\u0E49\u0E32\u0E02\u0E2D\u0E07"),s(" \u0E44\u0E1B\u0E17\u0E35\u0E48 account \u0E44\u0E2B\u0E19\u0E01\u0E47\u0E44\u0E14\u0E49")],-1),f=n("p",null,[s("account \u0E02\u0E2D\u0E07\u0E04\u0E19\u0E23\u0E31\u0E1A "),n("em",null,"\u0E44\u0E21\u0E48\u0E08\u0E33\u0E40\u0E1B\u0E47\u0E19\u0E15\u0E49\u0E2D\u0E07"),s(" \u0E40\u0E1B\u0E47\u0E19 account \u0E17\u0E35\u0E48 program \u0E02\u0E2D\u0E07\u0E40\u0E23\u0E32\u0E40\u0E1B\u0E47\u0E19\u0E40\u0E08\u0E49\u0E32\u0E02\u0E2D\u0E07")],-1),g=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"/// Transfers lamports from one account (must be program owned)"),s(` +import{_ as r,r as c,o as i,c as k,b as t,w as a,F as b,a as n,d as s,e as p}from"./app.2fbb9e96.js";const m={},d=n("h1",{id:"writing-programs",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#writing-programs","aria-hidden":"true"},"#"),s(" Writing Programs")],-1),_=n("h2",{id:"\u0E27\u0E34\u0E18\u0E35-transfer-sol-in-a-program",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E27\u0E34\u0E18\u0E35-transfer-sol-in-a-program","aria-hidden":"true"},"#"),s(" \u0E27\u0E34\u0E18\u0E35 transfer SOL in a program")],-1),y=n("p",null,[s("Solana Program \u0E02\u0E2D\u0E07\u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E2A\u0E48\u0E07 lamports \u0E08\u0E32\u0E01 account \u0E19\u0E36\u0E07\u0E44\u0E1B\u0E2D\u0E35\u0E01 account \u0E19\u0E36\u0E07\u0E42\u0E14\u0E22\u0E44\u0E21\u0E48\u0E15\u0E49\u0E2D\u0E07 '\u0E23\u0E49\u0E2D\u0E07\u0E02\u0E2D' (invoking) \u0E44\u0E1B\u0E17\u0E35\u0E48 System program. \u0E42\u0E14\u0E22\u0E2B\u0E25\u0E31\u0E01\u0E40\u0E1A\u0E37\u0E49\u0E2D\u0E07\u0E15\u0E49\u0E19\u0E01\u0E47\u0E04\u0E37\u0E2D program \u0E02\u0E2D\u0E07\u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E2A\u0E48\u0E07 lamports \u0E08\u0E32\u0E01 account \u0E17\u0E35\u0E48 program \u0E02\u0E2D\u0E07\u0E40\u0E23\u0E32 "),n("strong",null,"\u0E40\u0E1B\u0E47\u0E19\u0E40\u0E08\u0E49\u0E32\u0E02\u0E2D\u0E07"),s(" \u0E44\u0E1B\u0E17\u0E35\u0E48 account \u0E44\u0E2B\u0E19\u0E01\u0E47\u0E44\u0E14\u0E49")],-1),f=n("p",null,[s("account \u0E02\u0E2D\u0E07\u0E04\u0E19\u0E23\u0E31\u0E1A "),n("em",null,"\u0E44\u0E21\u0E48\u0E08\u0E33\u0E40\u0E1B\u0E47\u0E19\u0E15\u0E49\u0E2D\u0E07"),s(" \u0E40\u0E1B\u0E47\u0E19 account \u0E17\u0E35\u0E48 program \u0E02\u0E2D\u0E07\u0E40\u0E23\u0E32\u0E40\u0E1B\u0E47\u0E19\u0E40\u0E08\u0E49\u0E32\u0E02\u0E2D\u0E07")],-1),g=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"/// Transfers lamports from one account (must be program owned)"),s(` `),n("span",{class:"token comment"},"/// to another account. The recipient can by any account"),s(` `),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"transfer_service_fee_lamports"),n("span",{class:"token punctuation"},"("),s(` from_account`),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token operator"},"&"),n("span",{class:"token class-name"},"AccountInfo"),n("span",{class:"token punctuation"},","),s(` diff --git a/docs/.vuepress/dist/assets/programs.html.4884ba4b.js b/docs/.vuepress/dist/assets/programs.html.bfb8bafa.js similarity index 99% rename from docs/.vuepress/dist/assets/programs.html.4884ba4b.js rename to docs/.vuepress/dist/assets/programs.html.bfb8bafa.js index 40ac246e1..4c9ffe897 100644 --- a/docs/.vuepress/dist/assets/programs.html.4884ba4b.js +++ b/docs/.vuepress/dist/assets/programs.html.bfb8bafa.js @@ -1,2 +1,2 @@ -import{_ as i,r,o as d,c as l,a,b as n,w as c,F as h,d as e,e as o}from"./app.cfdf84e7.js";const _={},m=a("h1",{id:"program",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#program","aria-hidden":"true"},"#"),e(" Program")],-1),u=a("p",null,"Setiap developer bisa menulis dan memasukan programnya ke Solana Blockchain. Program (diketahui sebagai smart contracts di protokol lain) berfungsi sebagai dasar untuk aktivitas on-chain, mendukung apa pun mulai dari DeFi dan NFT hingga ke Media Sosial dan Game.",-1),p=a("h2",{id:"fakta-fakta",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#fakta-fakta","aria-hidden":"true"},"#"),e(" Fakta-Fakta")],-1),g={class:"custom-container tip"},k=a("p",{class:"custom-container-title"},"Fakta",-1),b=a("li",null,[e("Program Memproses "),a("a",{href:"./transactions"},"instruksi"),e(" dari pengguna akhir dan program lain")],-1),f=e("Semua program adalah "),y=a("em",null,"stateless",-1),P=e(" / "),S=a("em",null,"tidak memiliki status",-1),v=e(": semua data apa pun yang berinteraksi dengannya disimpan di "),L=e("Akun"),x=e(" terpisah yang diteruskan melalui intruksi"),F=a("li",null,"Program itu sendiri disimpan dalam akun yang ditandai sebagai 'executable'",-1),B=e("Semua program merupakan milik "),R={href:"https://docs.solana.com/developing/runtime-facilities/programs#bpf-loader",target:"_blank",rel:"noopener noreferrer"},j=e("BPF Loader"),w=e(" dan dieksekusi oleh "),A={href:"https://docs.solana.com/developing/programming-model/runtime",target:"_blank",rel:"noopener noreferrer"},D=e("Solana Runtime"),M=e("Pengembang paling sering menulis program dalam bahasa Rust atau C++, tetapi bisa memilih bahasa lain yang menargetkan "),C={href:"https://llvm.org/",target:"_blank",rel:"noopener noreferrer"},N=e("LLVM"),E=e("'s "),I={href:"https://en.wikipedia.org/wiki/Berkeley_Packet_Filter",target:"_blank",rel:"noopener noreferrer"},T=e("BPF"),V=e(" backend"),K=o("
  • Semua program memiliki satu titik masuk dimana pemrosessan instruksi berlangsung (i.e. process_instruction); parameternya selalu meliputi:
    • program_id: pubkey
    • accounts: array,
    • instruction_data: byte array
  • ",1),O=a("h2",{id:"lebih-dalam",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#lebih-dalam","aria-hidden":"true"},"#"),e(" Lebih Dalam")],-1),U=a("p",null,[e("Tidak seperti kebanyakan blockchain lainnya, Solana benar-benar memisahkan kode dari data. Semua data yang berinteraksi dengan program disimpan dalam akun terpisah dan diteruskan sebagai referensi via instruksi. Model ini memungkinkan satu program generik untuk beroperasi di berbagai akun tanpa memerlukan penerapan tambahan. Contoh umum dari pola ini terlihat di seluruh program bawaan ("),a("code",null,"Native"),e(") dan Program SPL.")],-1),z=a("h3",{id:"native-program-solana-program-library-spl",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#native-program-solana-program-library-spl","aria-hidden":"true"},"#"),e(" Native Program & Solana Program Library (SPL)")],-1),G=e("Solana dilengkapi dengan sejumlah program yang berfungsi sebagai blok bangunan inti untuk interaksi dalam on-chain. Program ini dibagi menjadi "),H={href:"https://docs.solana.com/developing/runtime-facilities/programs#bpf-loader",target:"_blank",rel:"noopener noreferrer"},J=e("Native Programs"),q=e(" dan "),Q={href:"https://spl.solana.com/",target:"_blank",rel:"noopener noreferrer"},W=e("Solana Program Library (SPL) Programs"),X=e("."),Y=e("Program bawaan ("),Z=a("code",null,"native",-1),$=e(") menyediakan fungsionalitas dasar yang yang diperlukan untuk mengoperasikan validator. Di antara program-program ini, yang paling terkenal adalah "),aa={href:"https://docs.solana.com/developing/runtime-facilities/programs#system-program",target:"_blank",rel:"noopener noreferrer"},ea=e("System Program"),na=e(" yang bertanggung jawab untuk mengelola akun baru dan mentransfer SOL antara dua belah pihak."),ta=e("Program SPL mendukung sejumlah aktivitas on-chain, termasuk membuat, menukar, dan meminjamkan token, serta membuat "),oa=a("code",null,"Stake Pools",-1),ra=e(" dan memelihara layanan nama ("),sa=a("code",null,"name service",-1),ia=e(") sebuah on-chain. "),da={href:"https://spl.solana.com/token",target:"_blank",rel:"noopener noreferrer"},la=e("SPL Token Program"),ca=e(" dapat dipanggil langsung melalui CLI, sementara yang lain seperti "),ha={href:"https://spl.solana.com/associated-token-account",target:"_blank",rel:"noopener noreferrer"},_a=e("Associated Token Account Program"),ma=e(" biasanya dibuat dengan program khusus."),ua=a("h3",{id:"menulis-program",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#menulis-program","aria-hidden":"true"},"#"),e(" Menulis Program")],-1),pa=e("Program paling sering dikembangkan dengan bahasa Rust atau C++, tetapi bisa juga dikembangkan dengan berbagai bahasa yang menargetkan backend BPF LLVM. Inisiatif terbaru oleh "),ga={href:"https://neon-labs.org/",target:"_blank",rel:"noopener noreferrer"},ka=e("Neon Labs"),ba=e(" dan "),fa={href:"https://solang.readthedocs.io/en/latest/",target:"_blank",rel:"noopener noreferrer"},ya=e("Solang"),Pa=e(" mengaktifkan "),Sa={href:"https://ethereum.org/en/developers/docs/evm/",target:"_blank",rel:"noopener noreferrer"},va=e("EVM"),La=e(" kompatibilitas dan memungkinkan para pengembang untuk menulis program dalam Solidity."),xa=o("

    Sebagian besar program berbasis Rust mengikuti arsitektur berikut:

    FileDeskripsi
    lib.rsMendaftarkan modul
    entrypoint.rsTitik masuk ke program
    instruction.rsProgram API, deserialisasi data instruksi
    processor.rsLogika program
    state.rsObjek program, status deserialisasi
    error.rsKesalahan (error) khusus program
    ",2),Fa=e("Baru-baru ini, "),Ba={href:"https://github.com/coral-xyz/anchor",target:"_blank",rel:"noopener noreferrer"},Ra=e("Anchor"),ja=e(" telah muncul sebagai framework yang populer untuk mengembangkan program. Anchor adalah sebuah framework, mirip dengan Ruby on Rails, yang mengurangi boilerplate dan mempermudah proses deserialisasi untuk pengembangan berbasis Rust."),wa=o("

    Program pada umumnya dikembangkan dan diuji di localhost dan devnet sebelum di deploy ke testnet atau mainnet. Solana mendukung environment berikut:

    Kluster EnvironmentURL Koneksi RPC
    Mainnet-betahttps://api.mainnet-beta.solana.com
    Testnethttps://api.testnet.solana.com
    Devnethttps://api.devnet.solana.com
    Localhostport bawaan: 8899 (contoh http://localhost:8899, http://192.168.1.88:8899)
    ",2),Aa=e("Setelah di deploy ke environment, klien dapat berinteraksi dengan program on-chain melalui "),Da={href:"https://docs.solana.com/developing/clients/jsonrpc-api",target:"_blank",rel:"noopener noreferrer"},Ma=e("RPC connections"),Ca=e(" ke masing-masing kluster."),Na=a("h3",{id:"deploy-program",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#deploy-program","aria-hidden":"true"},"#"),e(" Deploy Program")],-1),Ea=e("Pengembang dapat men-deploy program mereka melalui "),Ia={href:"https://docs.solana.com/cli/deploy-a-program",target:"_blank",rel:"noopener noreferrer"},Ta=e("CLI"),Va=e(":"),Ka=o(`
    solana program deploy <PROGRAM_FILEPATH>
    +import{_ as i,r,o as d,c as l,a,b as n,w as c,F as h,d as e,e as o}from"./app.2fbb9e96.js";const _={},m=a("h1",{id:"program",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#program","aria-hidden":"true"},"#"),e(" Program")],-1),u=a("p",null,"Setiap developer bisa menulis dan memasukan programnya ke Solana Blockchain. Program (diketahui sebagai smart contracts di protokol lain) berfungsi sebagai dasar untuk aktivitas on-chain, mendukung apa pun mulai dari DeFi dan NFT hingga ke Media Sosial dan Game.",-1),p=a("h2",{id:"fakta-fakta",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#fakta-fakta","aria-hidden":"true"},"#"),e(" Fakta-Fakta")],-1),g={class:"custom-container tip"},k=a("p",{class:"custom-container-title"},"Fakta",-1),b=a("li",null,[e("Program Memproses "),a("a",{href:"./transactions"},"instruksi"),e(" dari pengguna akhir dan program lain")],-1),f=e("Semua program adalah "),y=a("em",null,"stateless",-1),P=e(" / "),S=a("em",null,"tidak memiliki status",-1),v=e(": semua data apa pun yang berinteraksi dengannya disimpan di "),L=e("Akun"),x=e(" terpisah yang diteruskan melalui intruksi"),F=a("li",null,"Program itu sendiri disimpan dalam akun yang ditandai sebagai 'executable'",-1),B=e("Semua program merupakan milik "),R={href:"https://docs.solana.com/developing/runtime-facilities/programs#bpf-loader",target:"_blank",rel:"noopener noreferrer"},j=e("BPF Loader"),w=e(" dan dieksekusi oleh "),A={href:"https://docs.solana.com/developing/programming-model/runtime",target:"_blank",rel:"noopener noreferrer"},D=e("Solana Runtime"),M=e("Pengembang paling sering menulis program dalam bahasa Rust atau C++, tetapi bisa memilih bahasa lain yang menargetkan "),C={href:"https://llvm.org/",target:"_blank",rel:"noopener noreferrer"},N=e("LLVM"),E=e("'s "),I={href:"https://en.wikipedia.org/wiki/Berkeley_Packet_Filter",target:"_blank",rel:"noopener noreferrer"},T=e("BPF"),V=e(" backend"),K=o("
  • Semua program memiliki satu titik masuk dimana pemrosessan instruksi berlangsung (i.e. process_instruction); parameternya selalu meliputi:
    • program_id: pubkey
    • accounts: array,
    • instruction_data: byte array
  • ",1),O=a("h2",{id:"lebih-dalam",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#lebih-dalam","aria-hidden":"true"},"#"),e(" Lebih Dalam")],-1),U=a("p",null,[e("Tidak seperti kebanyakan blockchain lainnya, Solana benar-benar memisahkan kode dari data. Semua data yang berinteraksi dengan program disimpan dalam akun terpisah dan diteruskan sebagai referensi via instruksi. Model ini memungkinkan satu program generik untuk beroperasi di berbagai akun tanpa memerlukan penerapan tambahan. Contoh umum dari pola ini terlihat di seluruh program bawaan ("),a("code",null,"Native"),e(") dan Program SPL.")],-1),z=a("h3",{id:"native-program-solana-program-library-spl",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#native-program-solana-program-library-spl","aria-hidden":"true"},"#"),e(" Native Program & Solana Program Library (SPL)")],-1),G=e("Solana dilengkapi dengan sejumlah program yang berfungsi sebagai blok bangunan inti untuk interaksi dalam on-chain. Program ini dibagi menjadi "),H={href:"https://docs.solana.com/developing/runtime-facilities/programs#bpf-loader",target:"_blank",rel:"noopener noreferrer"},J=e("Native Programs"),q=e(" dan "),Q={href:"https://spl.solana.com/",target:"_blank",rel:"noopener noreferrer"},W=e("Solana Program Library (SPL) Programs"),X=e("."),Y=e("Program bawaan ("),Z=a("code",null,"native",-1),$=e(") menyediakan fungsionalitas dasar yang yang diperlukan untuk mengoperasikan validator. Di antara program-program ini, yang paling terkenal adalah "),aa={href:"https://docs.solana.com/developing/runtime-facilities/programs#system-program",target:"_blank",rel:"noopener noreferrer"},ea=e("System Program"),na=e(" yang bertanggung jawab untuk mengelola akun baru dan mentransfer SOL antara dua belah pihak."),ta=e("Program SPL mendukung sejumlah aktivitas on-chain, termasuk membuat, menukar, dan meminjamkan token, serta membuat "),oa=a("code",null,"Stake Pools",-1),ra=e(" dan memelihara layanan nama ("),sa=a("code",null,"name service",-1),ia=e(") sebuah on-chain. "),da={href:"https://spl.solana.com/token",target:"_blank",rel:"noopener noreferrer"},la=e("SPL Token Program"),ca=e(" dapat dipanggil langsung melalui CLI, sementara yang lain seperti "),ha={href:"https://spl.solana.com/associated-token-account",target:"_blank",rel:"noopener noreferrer"},_a=e("Associated Token Account Program"),ma=e(" biasanya dibuat dengan program khusus."),ua=a("h3",{id:"menulis-program",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#menulis-program","aria-hidden":"true"},"#"),e(" Menulis Program")],-1),pa=e("Program paling sering dikembangkan dengan bahasa Rust atau C++, tetapi bisa juga dikembangkan dengan berbagai bahasa yang menargetkan backend BPF LLVM. Inisiatif terbaru oleh "),ga={href:"https://neon-labs.org/",target:"_blank",rel:"noopener noreferrer"},ka=e("Neon Labs"),ba=e(" dan "),fa={href:"https://solang.readthedocs.io/en/latest/",target:"_blank",rel:"noopener noreferrer"},ya=e("Solang"),Pa=e(" mengaktifkan "),Sa={href:"https://ethereum.org/en/developers/docs/evm/",target:"_blank",rel:"noopener noreferrer"},va=e("EVM"),La=e(" kompatibilitas dan memungkinkan para pengembang untuk menulis program dalam Solidity."),xa=o("

    Sebagian besar program berbasis Rust mengikuti arsitektur berikut:

    FileDeskripsi
    lib.rsMendaftarkan modul
    entrypoint.rsTitik masuk ke program
    instruction.rsProgram API, deserialisasi data instruksi
    processor.rsLogika program
    state.rsObjek program, status deserialisasi
    error.rsKesalahan (error) khusus program
    ",2),Fa=e("Baru-baru ini, "),Ba={href:"https://github.com/coral-xyz/anchor",target:"_blank",rel:"noopener noreferrer"},Ra=e("Anchor"),ja=e(" telah muncul sebagai framework yang populer untuk mengembangkan program. Anchor adalah sebuah framework, mirip dengan Ruby on Rails, yang mengurangi boilerplate dan mempermudah proses deserialisasi untuk pengembangan berbasis Rust."),wa=o("

    Program pada umumnya dikembangkan dan diuji di localhost dan devnet sebelum di deploy ke testnet atau mainnet. Solana mendukung environment berikut:

    Kluster EnvironmentURL Koneksi RPC
    Mainnet-betahttps://api.mainnet-beta.solana.com
    Testnethttps://api.testnet.solana.com
    Devnethttps://api.devnet.solana.com
    Localhostport bawaan: 8899 (contoh http://localhost:8899, http://192.168.1.88:8899)
    ",2),Aa=e("Setelah di deploy ke environment, klien dapat berinteraksi dengan program on-chain melalui "),Da={href:"https://docs.solana.com/developing/clients/jsonrpc-api",target:"_blank",rel:"noopener noreferrer"},Ma=e("RPC connections"),Ca=e(" ke masing-masing kluster."),Na=a("h3",{id:"deploy-program",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#deploy-program","aria-hidden":"true"},"#"),e(" Deploy Program")],-1),Ea=e("Pengembang dapat men-deploy program mereka melalui "),Ia={href:"https://docs.solana.com/cli/deploy-a-program",target:"_blank",rel:"noopener noreferrer"},Ta=e("CLI"),Va=e(":"),Ka=o(`
    solana program deploy <PROGRAM_FILEPATH>
     
    `,1),Oa=e("Ketika program telah di deploy, program tersebut dikompilasi ke "),Ua={href:"https://en.wikipedia.org/wiki/Executable_and_Linkable_Format",target:"_blank",rel:"noopener noreferrer"},za=e("ELF shared object"),Ga=e(" (berisi BPF bytecode) dan diunggah ke kluster Solana. Program berjalan di akun (seperti semua yang lain di Solana), kecuali akun-akun itu telah ditandai sebagai "),Ha=a("code",null,"executable",-1),Ja=e(" dan ditugaskan ke BPF loader. Alamat akun ini disebut sebagai "),qa=a("code",null,"program_id",-1),Qa=e(" dan digunakan untuk merujuk program dalam semua transaksi."),Wa=e("Solana mendukung beberapa BPF Loaders, dengan yang terbaru adalah "),Xa={href:"https://explorer.solana.com/address/BPFLoaderUpgradeab1e11111111111111111111111",target:"_blank",rel:"noopener noreferrer"},Ya=e("Upgradable BPF Loader"),Za=e(". BPF Loader bertanggung jawab untuk mengelola akun program dan membuatnya tersedia untuk klien melalui "),$a=a("code",null,"program_id",-1),ae=e(". Semua program mempunyai satu titik masuk dimana semua pemrosesan instruksi berlangsung (i.e. "),ee=a("code",null,"process_instruction",-1),ne=e(") dan parameternya selalu menyertakan :"),te=o('
    • program_id: pubkey
    • accounts: array,
    • instruction_data: byte array

    Setelah dipanggil, program akan dijalankan oleh Solana Runtime.

    Sumber Lainnya

    ',3),oe={href:"https://docs.solana.com/developing/on-chain-programs/overview",target:"_blank",rel:"noopener noreferrer"},re=e("Dokumentasi Resmi "),se={href:"https://spl.solana.com/",target:"_blank",rel:"noopener noreferrer"},ie=e("Dokumentasi SPL"),de={href:"https://jstarry.notion.site/Program-deploys-29780c48794c47308d5f138074dd9838",target:"_blank",rel:"noopener noreferrer"},le=e("Program Deploys oleh Justin Starry"),ce={href:"https://book.solmeet.dev/notes/solana-starter-kit",target:"_blank",rel:"noopener noreferrer"},he=e("Solana Starter Kit oleh Iron Addicted Dog"),_e={href:"https://paulx.dev/blog/2021/01/14/programming-on-solana-an-introduction/",target:"_blank",rel:"noopener noreferrer"},me=e("Programming di Solana oleh Paulx"),ue={href:"https://2501babe.github.io/posts/solana101.html",target:"_blank",rel:"noopener noreferrer"},pe=e("Perkenalan Solana Blockchain oleh Hana"),ge={href:"https://github.com/coral-xyz/anchor",target:"_blank",rel:"noopener noreferrer"},ke=e("Anchor");function be(fe,ye){const s=r("RouterLink"),t=r("ExternalLinkIcon");return d(),l(h,null,[m,u,p,a("div",g,[k,a("ul",null,[b,a("li",null,[f,y,P,S,v,n(s,{to:"/id/core-concepts/accounts.html"},{default:c(()=>[L]),_:1}),x]),F,a("li",null,[B,a("a",R,[j,n(t)]),w,a("a",A,[D,n(t)])]),a("li",null,[M,a("a",C,[N,n(t)]),E,a("a",I,[T,n(t)]),V]),K])]),O,U,z,a("p",null,[G,a("a",H,[J,n(t)]),q,a("a",Q,[W,n(t)]),X]),a("p",null,[Y,Z,$,a("a",aa,[ea,n(t)]),na]),a("p",null,[ta,oa,ra,sa,ia,a("a",da,[la,n(t)]),ca,a("a",ha,[_a,n(t)]),ma]),ua,a("p",null,[pa,a("a",ga,[ka,n(t)]),ba,a("a",fa,[ya,n(t)]),Pa,a("a",Sa,[va,n(t)]),La]),xa,a("p",null,[Fa,a("a",Ba,[Ra,n(t)]),ja]),wa,a("p",null,[Aa,a("a",Da,[Ma,n(t)]),Ca]),Na,a("p",null,[Ea,a("a",Ia,[Ta,n(t)]),Va]),Ka,a("p",null,[Oa,a("a",Ua,[za,n(t)]),Ga,Ha,Ja,qa,Qa]),a("p",null,[Wa,a("a",Xa,[Ya,n(t)]),Za,$a,ae,ee,ne]),te,a("ul",null,[a("li",null,[a("a",oe,[re,n(t)])]),a("li",null,[a("a",se,[ie,n(t)])]),a("li",null,[a("a",de,[le,n(t)])]),a("li",null,[a("a",ce,[he,n(t)])]),a("li",null,[a("a",_e,[me,n(t)])]),a("li",null,[a("a",ue,[pe,n(t)])]),a("li",null,[a("a",ge,[ke,n(t)])])])],64)}var Se=i(_,[["render",be]]);export{Se as default}; diff --git a/docs/.vuepress/dist/assets/programs.html.d3118fa5.js b/docs/.vuepress/dist/assets/programs.html.d0bfafe6.js similarity index 99% rename from docs/.vuepress/dist/assets/programs.html.d3118fa5.js rename to docs/.vuepress/dist/assets/programs.html.d0bfafe6.js index dd2ea1805..51a94120f 100644 --- a/docs/.vuepress/dist/assets/programs.html.d3118fa5.js +++ b/docs/.vuepress/dist/assets/programs.html.d0bfafe6.js @@ -1,2 +1,2 @@ -import{_ as d,r as t,o as i,c as l,a as e,b as a,w as c,F as p,d as o,e as r}from"./app.cfdf84e7.js";const _={},h=e("h1",{id:"programas",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#programas","aria-hidden":"true"},"#"),o(" Programas")],-1),u=e("p",null,"Cualquier desarrollador puede escribir e implementar programas en la cadena de bloques de Solana. Los programas (conocidos como contratos inteligentes en otros protocolos) sirven como base para la actividad dentro de la cadena de bloques, potenciando desde DeFi y NFTs hasta redes sociales y juegos.",-1),m=e("h2",{id:"hechos",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#hechos","aria-hidden":"true"},"#"),o(" Hechos")],-1),g={class:"custom-container tip"},b=e("p",{class:"custom-container-title"},"Hoja de hechos",-1),f=e("li",null,[o("Los programas procesan "),e("a",{href:"./transactions"},"instrucciones"),o(" de otros programas y de usuarios finales")],-1),k=o("Todos los programas son "),v=e("em",null,"stateless",-1),y=o(" (sin estado): Los datos con los que interact\xFAan son almacenados en "),L=o("cuentas"),P=o(" que son enviadas al programa en instrucciones"),q=e("li",null,[o("Los mismos programas son almacenadas en cuentas marcadas como "),e("code",null,"executable"),o(" (ejecutables)")],-1),x=o("El due\xF1o de todos los programas es "),S={href:"https://docs.solana.com/developing/runtime-facilities/programs#bpf-loader",target:"_blank",rel:"noopener noreferrer"},F=o("BPF Loader"),E=o(" y es ejectuado por el "),R={href:"https://docs.solana.com/developing/programming-model/runtime",target:"_blank",rel:"noopener noreferrer"},j=o("Runtime de Solana"),B=o("Los programadores comunmente utilizan Rust y C++ para escribir programas, pero pueden elegir cualquier lenguaje que compile con el backend de "),C={href:"https://en.wikipedia.org/wiki/Berkeley_Packet_Filter",target:"_blank",rel:"noopener noreferrer"},T=o("BPF"),z=o(" para "),A={href:"https://llvm.org/",target:"_blank",rel:"noopener noreferrer"},D=o("LLVM"),w=r("
  • Todos los programas tienen un punto \xFAnico de entrada donde se procesan las instrucciones (i.e. process_instruction); los par\xE1metros siempre incluyen:
    • program_id: pubkey
    • accounts: array,
    • instruction_data: byte array
  • ",1),I=e("h2",{id:"un-vistazo-mas-profundo",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#un-vistazo-mas-profundo","aria-hidden":"true"},"#"),o(" Un vistazo m\xE1s profundo")],-1),U=e("p",null,"A diferencia de la mayor\xEDa de cadenas de bloques, Solana separa completamente el c\xF3digo de los datos. Todos los datos con los que interact\xFAan los programas se almacenan en cuentas separadas y se env\xEDan a trav\xE9s de instrucciones. Este modelo permite que un \xFAnico programa gen\xE9rico funcione en varias cuentas sin necesidad de implementaciones adicionales. Se ven ejemplos comunes de este patr\xF3n en los programas nativos y SPL.",-1),V=e("h3",{id:"programas-nativos-la-libreria-de-programas-de-solana-spl",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#programas-nativos-la-libreria-de-programas-de-solana-spl","aria-hidden":"true"},"#"),o(" Programas nativos & La librer\xEDa de Programas de Solana (SPL)")],-1),M=o("Solana viene equipado con programas que sirven como bloques de construcci\xF3n para interactuar con la cadena de bloques. Estos programas est\xE1n dividos en "),N={href:"https://docs.solana.com/developing/runtime-facilities/programs#bpf-loader",target:"_blank",rel:"noopener noreferrer"},H=o("Programas nativos"),O=o(" y "),G={href:"https://spl.solana.com/",target:"_blank",rel:"noopener noreferrer"},J=o("Programas de la librer\xEDa de programas (SPL)"),K=o("."),Q=o("Los programas nativos brindan la funcionalidad base que es requerida para operar validadores. Entre estos programas el m\xE1s conocido es el "),W={href:"https://docs.solana.com/developing/runtime-facilities/programs#system-program",target:"_blank",rel:"noopener noreferrer"},X=o("Programa del sistema (System Program)"),Y=o(" que es responsable de administrar las cuentas y transferir SOL."),Z=o("Los programas de la librer\xEDa de programas soportan otras actividades dentro de la cadena de bloques como crear tokens, intercambiarlos, prestar tokens, as\xED como generar pools de staking y mantener el servicio de nombres dentro de la cadena de bloques. El "),$={href:"https://spl.solana.com/token",target:"_blank",rel:"noopener noreferrer"},ee=o("Programa de Token (SPL Token Program)"),oe=o(" puede ser invocado directamente desde el CLI (Command Line Interface), mientras que otros como el "),ae={href:"https://spl.solana.com/associated-token-account",target:"_blank",rel:"noopener noreferrer"},se=o("Programa de cuentas asociadas a token (Associated Token Account Program)"),re=o(" son usados dentro de otros programas."),te=e("h3",{id:"escribiendo-programas",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#escribiendo-programas","aria-hidden":"true"},"#"),o(" Escribiendo programas")],-1),ne=o("Los Programas est\xE1n escritos comunmente en Rust o C++, pero pueden ser desarrollado con cualquier lenguaje que compile al backend BPF de LLVM. Iniciativas recientes de "),de={href:"https://neon-labs.org/",target:"_blank",rel:"noopener noreferrer"},ie=o("Neon Labs"),le=o(" y "),ce={href:"https://solang.readthedocs.io/en/latest/",target:"_blank",rel:"noopener noreferrer"},pe=o("Solang"),_e=o(" habilitan la compatibilidad con "),he={href:"https://ethereum.org/en/developers/docs/evm/",target:"_blank",rel:"noopener noreferrer"},ue=o("EVM"),me=o(" para permitir a desarrolladores escribir programas con Solidity."),ge=r("

    La mayor\xEDa de programas de Rust siguen la siguiente arquitectura:

    ArcguviDescripci\xF3n
    lib.rsRegistro de m\xF3dulos
    entrypoint.rsPunto de entrada para el programa
    instruction.rsAPI del programa, deserializa las instrucciones
    processor.rsL\xF3gica del programa
    state.rsObjetos del programa, deserializa el estado
    error.rsErrores espec\xEDficos del programa
    ",2),be=o("Recientemente, "),fe={href:"https://project-serum.github.io/anchor/getting-started/introduction.html",target:"_blank",rel:"noopener noreferrer"},ke=o("Anchor"),ve=o(" se ha convertido en el framework m\xE1s popular para desarrollar programas. Anchor es un framework que reduce el boilerplate y facilita la deserializaci\xF3n para los programas desarrollados en Rust."),ye=r("

    Los programas normalmente son desarrollados y testeados en los entornos Localhost y Devnet antes de ser desplegados a Testnet y Mainnet. Solana soporta los siguientes entornos:

    Entorno del clusterURL de conexi\xF3n RPC
    Mainnet-betahttps://api.mainnet-beta.solana.com
    Testnethttps://api.testnet.solana.com
    Devnethttps://api.devnet.solana.com
    LocalhostDefault port: 8899 (e.g. http://localhost:8899, http://192.168.1.88:8899)
    ",2),Le=o("Una vez desplegado a un entorno, los clientes pueden interactuar con el programa dentro de la cadena de bloques utilizando "),Pe={href:"https://docs.solana.com/developing/clients/jsonrpc-api",target:"_blank",rel:"noopener noreferrer"},qe=o("Conexiones RPC"),xe=o(" apuntando al cluster correspondiente."),Se=e("h3",{id:"desplegando-programas",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#desplegando-programas","aria-hidden":"true"},"#"),o(" Desplegando Programas")],-1),Fe=o("Los desarrolladores pueden desplegar sus programas utilizando el "),Ee={href:"https://docs.solana.com/cli/deploy-a-program",target:"_blank",rel:"noopener noreferrer"},Re=o("CLI"),je=o(":"),Be=r(`
    solana program deploy <PROGRAM_FILEPATH>
    +import{_ as d,r as t,o as i,c as l,a as e,b as a,w as c,F as p,d as o,e as r}from"./app.2fbb9e96.js";const _={},h=e("h1",{id:"programas",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#programas","aria-hidden":"true"},"#"),o(" Programas")],-1),u=e("p",null,"Cualquier desarrollador puede escribir e implementar programas en la cadena de bloques de Solana. Los programas (conocidos como contratos inteligentes en otros protocolos) sirven como base para la actividad dentro de la cadena de bloques, potenciando desde DeFi y NFTs hasta redes sociales y juegos.",-1),m=e("h2",{id:"hechos",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#hechos","aria-hidden":"true"},"#"),o(" Hechos")],-1),g={class:"custom-container tip"},b=e("p",{class:"custom-container-title"},"Hoja de hechos",-1),f=e("li",null,[o("Los programas procesan "),e("a",{href:"./transactions"},"instrucciones"),o(" de otros programas y de usuarios finales")],-1),k=o("Todos los programas son "),v=e("em",null,"stateless",-1),y=o(" (sin estado): Los datos con los que interact\xFAan son almacenados en "),L=o("cuentas"),P=o(" que son enviadas al programa en instrucciones"),q=e("li",null,[o("Los mismos programas son almacenadas en cuentas marcadas como "),e("code",null,"executable"),o(" (ejecutables)")],-1),x=o("El due\xF1o de todos los programas es "),S={href:"https://docs.solana.com/developing/runtime-facilities/programs#bpf-loader",target:"_blank",rel:"noopener noreferrer"},F=o("BPF Loader"),E=o(" y es ejectuado por el "),R={href:"https://docs.solana.com/developing/programming-model/runtime",target:"_blank",rel:"noopener noreferrer"},j=o("Runtime de Solana"),B=o("Los programadores comunmente utilizan Rust y C++ para escribir programas, pero pueden elegir cualquier lenguaje que compile con el backend de "),C={href:"https://en.wikipedia.org/wiki/Berkeley_Packet_Filter",target:"_blank",rel:"noopener noreferrer"},T=o("BPF"),z=o(" para "),A={href:"https://llvm.org/",target:"_blank",rel:"noopener noreferrer"},D=o("LLVM"),w=r("
  • Todos los programas tienen un punto \xFAnico de entrada donde se procesan las instrucciones (i.e. process_instruction); los par\xE1metros siempre incluyen:
    • program_id: pubkey
    • accounts: array,
    • instruction_data: byte array
  • ",1),I=e("h2",{id:"un-vistazo-mas-profundo",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#un-vistazo-mas-profundo","aria-hidden":"true"},"#"),o(" Un vistazo m\xE1s profundo")],-1),U=e("p",null,"A diferencia de la mayor\xEDa de cadenas de bloques, Solana separa completamente el c\xF3digo de los datos. Todos los datos con los que interact\xFAan los programas se almacenan en cuentas separadas y se env\xEDan a trav\xE9s de instrucciones. Este modelo permite que un \xFAnico programa gen\xE9rico funcione en varias cuentas sin necesidad de implementaciones adicionales. Se ven ejemplos comunes de este patr\xF3n en los programas nativos y SPL.",-1),V=e("h3",{id:"programas-nativos-la-libreria-de-programas-de-solana-spl",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#programas-nativos-la-libreria-de-programas-de-solana-spl","aria-hidden":"true"},"#"),o(" Programas nativos & La librer\xEDa de Programas de Solana (SPL)")],-1),M=o("Solana viene equipado con programas que sirven como bloques de construcci\xF3n para interactuar con la cadena de bloques. Estos programas est\xE1n dividos en "),N={href:"https://docs.solana.com/developing/runtime-facilities/programs#bpf-loader",target:"_blank",rel:"noopener noreferrer"},H=o("Programas nativos"),O=o(" y "),G={href:"https://spl.solana.com/",target:"_blank",rel:"noopener noreferrer"},J=o("Programas de la librer\xEDa de programas (SPL)"),K=o("."),Q=o("Los programas nativos brindan la funcionalidad base que es requerida para operar validadores. Entre estos programas el m\xE1s conocido es el "),W={href:"https://docs.solana.com/developing/runtime-facilities/programs#system-program",target:"_blank",rel:"noopener noreferrer"},X=o("Programa del sistema (System Program)"),Y=o(" que es responsable de administrar las cuentas y transferir SOL."),Z=o("Los programas de la librer\xEDa de programas soportan otras actividades dentro de la cadena de bloques como crear tokens, intercambiarlos, prestar tokens, as\xED como generar pools de staking y mantener el servicio de nombres dentro de la cadena de bloques. El "),$={href:"https://spl.solana.com/token",target:"_blank",rel:"noopener noreferrer"},ee=o("Programa de Token (SPL Token Program)"),oe=o(" puede ser invocado directamente desde el CLI (Command Line Interface), mientras que otros como el "),ae={href:"https://spl.solana.com/associated-token-account",target:"_blank",rel:"noopener noreferrer"},se=o("Programa de cuentas asociadas a token (Associated Token Account Program)"),re=o(" son usados dentro de otros programas."),te=e("h3",{id:"escribiendo-programas",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#escribiendo-programas","aria-hidden":"true"},"#"),o(" Escribiendo programas")],-1),ne=o("Los Programas est\xE1n escritos comunmente en Rust o C++, pero pueden ser desarrollado con cualquier lenguaje que compile al backend BPF de LLVM. Iniciativas recientes de "),de={href:"https://neon-labs.org/",target:"_blank",rel:"noopener noreferrer"},ie=o("Neon Labs"),le=o(" y "),ce={href:"https://solang.readthedocs.io/en/latest/",target:"_blank",rel:"noopener noreferrer"},pe=o("Solang"),_e=o(" habilitan la compatibilidad con "),he={href:"https://ethereum.org/en/developers/docs/evm/",target:"_blank",rel:"noopener noreferrer"},ue=o("EVM"),me=o(" para permitir a desarrolladores escribir programas con Solidity."),ge=r("

    La mayor\xEDa de programas de Rust siguen la siguiente arquitectura:

    ArcguviDescripci\xF3n
    lib.rsRegistro de m\xF3dulos
    entrypoint.rsPunto de entrada para el programa
    instruction.rsAPI del programa, deserializa las instrucciones
    processor.rsL\xF3gica del programa
    state.rsObjetos del programa, deserializa el estado
    error.rsErrores espec\xEDficos del programa
    ",2),be=o("Recientemente, "),fe={href:"https://project-serum.github.io/anchor/getting-started/introduction.html",target:"_blank",rel:"noopener noreferrer"},ke=o("Anchor"),ve=o(" se ha convertido en el framework m\xE1s popular para desarrollar programas. Anchor es un framework que reduce el boilerplate y facilita la deserializaci\xF3n para los programas desarrollados en Rust."),ye=r("

    Los programas normalmente son desarrollados y testeados en los entornos Localhost y Devnet antes de ser desplegados a Testnet y Mainnet. Solana soporta los siguientes entornos:

    Entorno del clusterURL de conexi\xF3n RPC
    Mainnet-betahttps://api.mainnet-beta.solana.com
    Testnethttps://api.testnet.solana.com
    Devnethttps://api.devnet.solana.com
    LocalhostDefault port: 8899 (e.g. http://localhost:8899, http://192.168.1.88:8899)
    ",2),Le=o("Una vez desplegado a un entorno, los clientes pueden interactuar con el programa dentro de la cadena de bloques utilizando "),Pe={href:"https://docs.solana.com/developing/clients/jsonrpc-api",target:"_blank",rel:"noopener noreferrer"},qe=o("Conexiones RPC"),xe=o(" apuntando al cluster correspondiente."),Se=e("h3",{id:"desplegando-programas",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#desplegando-programas","aria-hidden":"true"},"#"),o(" Desplegando Programas")],-1),Fe=o("Los desarrolladores pueden desplegar sus programas utilizando el "),Ee={href:"https://docs.solana.com/cli/deploy-a-program",target:"_blank",rel:"noopener noreferrer"},Re=o("CLI"),je=o(":"),Be=r(`
    solana program deploy <PROGRAM_FILEPATH>
     
    `,1),Ce=o("Cuando un programa es desplegado, es compilado a un "),Te={href:"https://en.wikipedia.org/wiki/Executable_and_Linkable_Format",target:"_blank",rel:"noopener noreferrer"},ze=o("ELF shared object"),Ae=o(" (conteniendo el bytecode de BPF) y subido al cluster de Solana. Los Programas viven en cuentas (como casi todo en Solana), con la excepci\xF3n de aquellas marcadas como "),De=e("code",null,"executable",-1),we=o(" y asignadas al BPF Loader. La direcci\xF3n del programa desplegada se llama "),Ie=e("code",null,"program_id",-1),Ue=o(" y es usada para llamar al programa."),Ve=o("Solana soporta m\xFAltiples BPF Loaders, siendo el \xFAltimo el "),Me={href:"https://explorer.solana.com/address/BPFLoaderUpgradeab1e11111111111111111111111",target:"_blank",rel:"noopener noreferrer"},Ne=o("Upgradable BPF Loader"),He=o(". El BPF Loader es responsable de administrar las cuentas del programa y hacerlas accesibles a los clientes a trav\xE9s del "),Oe=e("code",null,"program_id",-1),Ge=o(". Todos los programas tienen un \xFAnico punto de entrada donde se procesan las instrucciones (i.e. "),Je=e("code",null,"process_instruction",-1),Ke=o(") y los par\xE1metros siempre incluyen:"),Qe=r('
    • program_id: pubkey
    • accounts: array,
    • instruction_data: byte array

    Una vez llamado, los Programas son ejecutados por el Runtime de Solana.

    Other Resources

    ',3),We={href:"https://docs.solana.com/developing/on-chain-programs/overview",target:"_blank",rel:"noopener noreferrer"},Xe=o("Documentaci\xF3n oficial"),Ye={href:"https://spl.solana.com/",target:"_blank",rel:"noopener noreferrer"},Ze=o("Documentaci\xF3n de SPL"),$e={href:"https://jstarry.notion.site/Program-deploys-29780c48794c47308d5f138074dd9838",target:"_blank",rel:"noopener noreferrer"},eo=o("Despliegue de Programas por Justin Starry"),oo={href:"https://book.solmeet.dev/notes/solana-starter-kit",target:"_blank",rel:"noopener noreferrer"},ao=o("Kit de inicio de Solana por Iron Addicted Dog"),so={href:"https://paulx.dev/blog/2021/01/14/programming-on-solana-an-introduction/",target:"_blank",rel:"noopener noreferrer"},ro=o("Programando en Solana por Paulx"),to={href:"https://2501babe.github.io/posts/solana101.html",target:"_blank",rel:"noopener noreferrer"},no=o("Una introducci\xF3n a la cadena de bloques por Hana"),io={href:"https://project-serum.github.io/anchor/getting-started/introduction.html",target:"_blank",rel:"noopener noreferrer"},lo=o("Anchor");function co(po,_o){const n=t("RouterLink"),s=t("ExternalLinkIcon");return i(),l(p,null,[h,u,m,e("div",g,[b,e("ul",null,[f,e("li",null,[k,v,y,a(n,{to:"/es/core-concepts/accounts.html"},{default:c(()=>[L]),_:1}),P]),q,e("li",null,[x,e("a",S,[F,a(s)]),E,e("a",R,[j,a(s)])]),e("li",null,[B,e("a",C,[T,a(s)]),z,e("a",A,[D,a(s)])]),w])]),I,U,V,e("p",null,[M,e("a",N,[H,a(s)]),O,e("a",G,[J,a(s)]),K]),e("p",null,[Q,e("a",W,[X,a(s)]),Y]),e("p",null,[Z,e("a",$,[ee,a(s)]),oe,e("a",ae,[se,a(s)]),re]),te,e("p",null,[ne,e("a",de,[ie,a(s)]),le,e("a",ce,[pe,a(s)]),_e,e("a",he,[ue,a(s)]),me]),ge,e("p",null,[be,e("a",fe,[ke,a(s)]),ve]),ye,e("p",null,[Le,e("a",Pe,[qe,a(s)]),xe]),Se,e("p",null,[Fe,e("a",Ee,[Re,a(s)]),je]),Be,e("p",null,[Ce,e("a",Te,[ze,a(s)]),Ae,De,we,Ie,Ue]),e("p",null,[Ve,e("a",Me,[Ne,a(s)]),He,Oe,Ge,Je,Ke]),Qe,e("ul",null,[e("li",null,[e("a",We,[Xe,a(s)])]),e("li",null,[e("a",Ye,[Ze,a(s)])]),e("li",null,[e("a",$e,[eo,a(s)])]),e("li",null,[e("a",oo,[ao,a(s)])]),e("li",null,[e("a",so,[ro,a(s)])]),e("li",null,[e("a",to,[no,a(s)])]),e("li",null,[e("a",io,[lo,a(s)])])])],64)}var uo=d(_,[["render",co]]);export{uo as default}; diff --git a/docs/.vuepress/dist/assets/programs.html.de342ed2.js b/docs/.vuepress/dist/assets/programs.html.de342ed2.js deleted file mode 100644 index 120feaa62..000000000 --- a/docs/.vuepress/dist/assets/programs.html.de342ed2.js +++ /dev/null @@ -1,2 +0,0 @@ -import{_ as h,r as c,o as s,c as i,a as t,b as o,w as l,F as d,d as n,e}from"./app.cfdf84e7.js";const _={},g=t("h1",{id:"program",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#program","aria-hidden":"true"},"#"),n(" Program")],-1),u=t("p",null,"B\u1EA5t k\u1EF3 l\u1EADp tr\xECnh vi\xEAn n\xE0o \u0111\u1EC1u c\xF3 th\u1EC3 vi\u1EBFt v\xE0 tri\u1EC3n khai m\u1ED9t ch\u01B0\u01A1ng tr\xECnh tr\xEAn Solana. Program (hay \u0111\u01B0\u1EE3c bi\u1EBFt \u0111\u1EBFn v\u1EDBi t\xEAn g\u1ECDi l\xE0 Smart Contract tr\xEAn c\xE1c blockchain kh\xE1c) s\u1EBD l\xE0 n\u1EC1n t\u1EA3ng cho c\xE1c ho\u1EA1t \u0111\u1ED9ng on-chain; th\u1EE9 gi\xFAp t\u1EA1o n\xEAn \u0111a s\u1ED1 c\xE1c h\xECnh th\xE1i t\u1EEB DeFi, NFTs cho \u0111\u1EBFn M\u1EA1ng x\xE3 h\u1ED9i v\xE0 Tr\xF2 ch\u01A1i.",-1),m=t("h2",{id:"co-the-ban-chua-biet",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#co-the-ban-chua-biet","aria-hidden":"true"},"#"),n(" C\xF3 th\u1EC3 b\u1EA1n ch\u01B0a bi\u1EBFt")],-1),p={class:"custom-container tip"},b=t("p",{class:"custom-container-title"},"Nh\u1EEFng \u0111i\u1EC1u c\xF3 th\u1EC3 b\u1EA1n ch\u01B0a bi\u1EBFt",-1),k=t("li",null,[n("Program s\u1EBD x\u1EED l\xFD c\xE1c "),t("a",{href:"./transactions"},"ch\u1EC9 th\u1ECB"),n(" t\u1EEB c\u1EA3 ng\u01B0\u1EDDi d\xF9ng v\xE0 c\xE1c Program kh\xE1c")],-1),v=n("T\u1EA5t c\u1EA3 c\xE1c Program \u0111\u1EC1u l\xE0 "),P=t("em",null,"stateless",-1),f=n(": m\u1ECDi d\u1EEF li\u1EC7u m\xE0 Program t\u01B0\u01A1ng t\xE1c \u0111\u1EC1u \u0111\u01B0\u1EE3c l\u01B0u tr\xEAn nh\u1EEFng "),y=n("Account"),L=n(" t\xE1ch bi\u1EC7t v\xE0 \u0111\u01B0\u1EE3c truy\u1EC1n th\xF4ng qua c\xE1c ch\u1EC9 th\u1ECB"),S=t("li",null,[n("B\u1EA3n th\xE2n Program \u0111\u01B0\u1EE3c l\u01B0u b\xEAn trong nh\u1EEFng Account d\u01B0\u1EE3c \u0111\xE1nh d\u1EA5u l\xE0 "),t("code",null,"executable")],-1),x=n("T\u1EA5t c\u1EA3 Program \u0111\u01B0\u1EE3c s\u1EDF h\u1EEFu b\u1EDFi "),A={href:"https://docs.solana.com/developing/runtime-facilities/programs#bpf-loader",target:"_blank",rel:"noopener noreferrer"},T=n("BPF Loader"),F=n(" v\xE0 \u0111\u01B0\u1EE3c th\u1EF1c thi b\u1EDFi "),B={href:"https://docs.solana.com/developing/programming-model/runtime",target:"_blank",rel:"noopener noreferrer"},C=n("Solana Runtime"),R=n("H\u1EA7u h\u1EBFt c\xE1c l\u1EADp tr\xECnh vi\xEAn \u0111\u1EC1u ph\xE1t tri\u1EC3n Program b\u1EB1ng Rust ho\u1EB7c C++, nh\u01B0ng b\u1EA1n v\u1EABn c\xF3 th\u1EC3 l\u1EF1a ch\u1ECDn b\u1EA5t k\u1EF3 ng\xF4n ng\u1EEF l\u1EADp tr\xECnh m\xE0 c\xF3 h\u1ED7 tr\u1EE3 "),N={href:"https://en.wikipedia.org/wiki/Berkeley_Packet_Filter",target:"_blank",rel:"noopener noreferrer"},M=n("BPF"),w=n(" c\u1EE7a "),I={href:"https://llvm.org/",target:"_blank",rel:"noopener noreferrer"},V=n("LLVM"),q=e("
  • M\u1ECDi Program ch\u1EC9 c\xF3 duy nh\u1EA5t m\u1ED9t \u0111i\u1EC3m truy c\u1EADp n\u01A1i m\xE0 c\xE1c ch\u1EC9 th\u1ECB \u0111\u01B0\u1EE3c x\u1EED l\xFD (c\u1EE5 th\u1EC3 l\xE0 process_instruction); c\xE1c tham s\u1ED1 \u0111\u1EA7u v\xE0o lu\xF4n bao g\u1ED3m:
    • program_id: pubkey
    • accounts: array,
    • instruction_data: byte array
  • ",1),E=t("h2",{id:"chi-tiet",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#chi-tiet","aria-hidden":"true"},"#"),n(" Chi ti\u1EBFt")],-1),H=t("p",null,"Kh\xF4ng gi\u1ED1ng nh\u01B0 h\u1EA5u h\u1EBFt c\xE1c blockchain kh\xE1c, Solana t\xE1ch b\u1EA1ch gi\u1EEFa code v\xE0 d\u1EEF li\u1EC7u. T\u1EA5t c\u1EA3 d\u1EEF li\u1EC7u m\xE0 ch\u01B0\u01A1ng tr\xECnh c\u1EA7n t\u01B0\u01A1ng t\xE1c s\u1EBD \u0111\u01B0\u1EE3c l\u01B0u \u1EDF c\xE1c Account t\xE1ch bi\u1EC7t v\xE0 \u0111\u01B0\u1EE3c truy\u1EC1n th\xF4ng qua c\xE1c tham chi\u1EBFu \u1EDF c\xE2u ch\u1EC9 th\u1ECB. M\xF4 h\xECnh n\xE0y cho ph\xE9p m\u1ED9t ch\u01B0\u01A1ng tr\xECnh chung c\xF3 th\u1EC3 ho\u1EA1t \u0111\u1ED9ng tr\xEAn nhi\u1EC1u ki\u1EC3u Account kh\xE1c nhau m\xE0 kh\xF4ng c\u1EA7n t\xE1i c\u01A1 c\u1EA5u l\u1EA1i ch\u01B0\u01A1ng tr\xECnh. M\u1ED9t v\xED d\u1EE5 hay g\u1EB7p c\u1EE7a m\xF4 h\xECnh n\xE0y l\xE0 Native Programs v\xE0 SPL Programs.",-1),D=t("h3",{id:"native-programs-solana-program-library-spl-programs",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#native-programs-solana-program-library-spl-programs","aria-hidden":"true"},"#"),n(" Native Programs & Solana Program Library (SPL) Programs")],-1),j=n("Solana \u0111\u01B0\u1EE3c trang b\u1ECB s\u1EB5n m\u1ED9t s\u1ED1 Program n\u1EC1n t\u1EA3ng v\xE0 \u0111\u01B0\u1EE3c d\xF9ng \u0111\u1EC3 x\xE2y d\u1EF1ng c\xE1c t\u01B0\u01A1ng t\xE1c on-chain. Nh\u1EEFng Program n\xE0y th\u01B0\u1EDDng \u0111\u01B0\u1EE3c chia th\xE0nh "),K={href:"https://docs.solana.com/developing/runtime-facilities/programs#bpf-loader",target:"_blank",rel:"noopener noreferrer"},z=n("Native Programs"),O=n(" v\xE0 "),U={href:"https://spl.solana.com/",target:"_blank",rel:"noopener noreferrer"},G=n("Solana Program Library (SPL) Programs"),J=n("."),Q=n("Native Programs cung c\u1EA5p c\xE1c ch\u1EE9c n\u0103ng c\u01A1 s\u1EDF v\xE0 c\u1EA7n thi\u1EBFt \u0111\u1EC3 v\u1EADn h\xE0nh c\xE1c validators. Trong c\xE1c Program n\xE0y, ch\u01B0\u01A1ng tr\xECnh \u0111\u01B0\u1EE3c bi\u1EBFt \u0111\u1EBFn r\u1ED9ng r\xE3i nh\u1EA5t l\xE0 "),W={href:"https://docs.solana.com/developing/runtime-facilities/programs#system-program",target:"_blank",rel:"noopener noreferrer"},X=n("System Program"),Y=n(". System Program ch\u1ECBu tr\xE1ch nhi\u1EC7m cho vi\u1EC7c c\u1EA5p ph\xE1t Account m\u1EDBi, c\u0169ng nh\u01B0 chuy\u1EC3n SOL gi\u1EEFa c\xE1c Account kh\xE1c nhau."),Z=n("SPL Programs h\u1ED7 tr\u1EE3 m\u1ED9t s\u1ED1 c\xE1c ho\u1EA1t \u0111\u1ED9ng on-chain bao g\u1ED3m t\u1EA1o tokens, trao \u0111\u1ED5i tokens, cho vay tokens, c\u0169ng nh\u01B0 t\u1EA1o stake pools, v\xE0 duy tr\xEC name service. "),$={href:"https://spl.solana.com/token",target:"_blank",rel:"noopener noreferrer"},tt=n("SPL Token Program"),nt=n(" c\xF3 th\u1EC3 \u0111\u01B0\u1EE3c g\u1ECDi tr\u1EF1c ti\u1EBFp th\xF4ng qua Solana CLI, ho\u1EB7c b\u1EB1ng c\xE1ch kh\xE1c h\u01A1n nh\u01B0 l\xE0 "),ot={href:"https://spl.solana.com/associated-token-account",target:"_blank",rel:"noopener noreferrer"},rt=n("Associated Token Account Program"),et=n(". Associated Token Account Program th\u01B0\u1EDDng \u0111\u01B0\u1EE3c k\u1EBFt h\u1EE3p v\u1EDBi c\xE1c ch\u01B0\u01A1ng tr\xECnh tu\u1EF3 ch\u1EC9nh \u0111\u1EC3 g\u1ECDi \u0111\u1EBFn SPL Token Program h\u01A1n l\xE0 g\u1ECDi \u0111\u1ED9c l\u1EADp."),ct=t("h3",{id:"viet-mot-program",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#viet-mot-program","aria-hidden":"true"},"#"),n(" Vi\u1EBFt m\u1ED9t Program")],-1),at=n("Program h\u1EA7u nh\u01B0 \u0111\u01B0\u1EE3c ph\xE1t tri\u1EC3n d\u1EF1a tr\xEAn Rust ho\u1EB7c C++. Tuy nhi\xEAn b\u1EA1n v\u1EABn c\xF3 th\u1EC3 ph\xE1t tri\u1EC3n b\u1EB1ng b\u1EA5t k\u1EF3 ng\xF4n ng\u1EEF n\xE0o mi\u1EC5n l\xE0 h\u1ED7 tr\u1EE3 BPF c\u1EE7a LLVM. Hi\u1EC7n t\u1EA1i, l\u1EADp tr\xECnh vi\xEAn c\u0169ng c\xF3 th\u1EC3 chuy\u1EC3n \u0111\u1ED5i smart contract tr\xEAn EVM \u0111\u01B0\u1EE3c vi\u1EBFt b\u1EB1ng Solidity th\xF4ng qua d\u1EF1 \xE1n \u0111\u01B0\u1EE3c kh\u1EDFi x\u01B0\u1EDBng b\u1EDFi "),ht={href:"https://neon-labs.org/",target:"_blank",rel:"noopener noreferrer"},st=n("Neon Labs"),it=n(" v\xE0 "),lt={href:"https://solang.readthedocs.io/en/latest/",target:"_blank",rel:"noopener noreferrer"},dt=n("Solang"),_t=n("."),gt=e("

    \u0110a s\u1ED1 c\xE1c Program d\u1EF1 tr\xEAn Rust \u0111\u1EC1u b\xE1m s\xE1t ki\u1EBFn tr\xFAc sau:

    T\u1EC7pM\xF4 t\u1EA3
    lib.rs\u0110\u0103ng k\xFD c\xE1c modules
    entrypoint.rs\u0110i\u1EC3m truy c\u1EADp c\u1EE7a Program
    instruction.rsProgram API, tu\u1EA7n t\u1EF1 v\xE0 phi tu\u1EA7n t\u1EF1 ho\xE1 d\u1EEF li\u1EC7u \u0111\u1EA7u v\xE0o
    processor.rsLu\u1EADn l\xFD c\u1EE7a Program
    state.rsC\xE1c \u0111\u1ED1i t\u01B0\u1EE3ng c\u1EE7a Program, tu\u1EA7n t\u1EF1 v\xE0 phi tu\u1EA7n t\u1EF1 ho\xE1 tr\u1EA1ng th\xE1i
    error.rs\u0110\u1ECBnh ngh\u0129a l\u1ED7i c\u1EE7a Program
    ",2),ut=n("Hi\u1EC7n t\u1EA1i, "),mt={href:"https://github.com/coral-xyz/anchor",target:"_blank",rel:"noopener noreferrer"},pt=n("Anchor"),bt=n(" \u0111ang n\u1ED5i l\xEAn nh\u01B0 l\xE0 m\u1ED9t framework ph\u1ED5 bi\u1EBFn gi\xFAp ph\xE1t tri\u1EC3n Program nhanh ch\xF3ng h\u01A1n. Anchor \u0111\u01B0\u1EE3c l\u1EA5y c\u1EA3m h\u1EE9ng nhi\u1EC1u t\u1EEB Ruby on Rails nh\u1EB1m gi\u1EA3m thi\u1EC3u c\xE1c m\u1EABu code l\u1EB7p l\u1EA1i, \u0111\u1ED3ng th\u1EDDi chu\u1EA9n ho\xE1 vi\u1EC7c tu\u1EA7n t\u1EF1 v\xE0 phi tu\u1EA7n t\u1EF1 ho\xE1 d\u1EEF li\u1EC7u trong qu\xE1 tr\xECnh ph\xE1t tri\u1EC3n b\u1EB1ng Rust."),kt=e("

    Program th\u01B0\u1EDDng \u0111\u01B0\u1EE3c ph\xE1t tri\u1EC3n v\xE0 ki\u1EC3m th\u1EED tr\xEAn m\xF4i tr\u01B0\u1EDDng localhost v\xE0 devnet tr\u01B0\u1EDBc khi \u0111\u01B0\u1EE3c tri\u1EC3n khai tr\xEAn testnet ho\u1EB7c mainnet. Solana h\u1ED7 tr\u1EE3 c\xE1c m\xF4i tr\u01B0\u1EDDng sau:

    C\u1EE5m m\xF4i tr\u01B0\u1EDDng\u0110\u01B0\u1EDDng d\u1EABn k\u1EBFt n\u1ED1i RPC
    Mainnet-betahttps://api.mainnet-beta.solana.com
    Testnethttps://api.testnet.solana.com
    Devnethttps://api.devnet.solana.com
    LocalhostPort m\u1EB7c \u0111\u1ECBnh: 8899 (e.g. http://localhost:8899, http://192.168.1.88:8899)
    ",2),vt=n("Sau khi tri\u1EC3n khai l\xEAn m\u1ED9t m\xF4i tr\u01B0\u1EDDng c\u1EE5 th\u1EC3, ng\u01B0\u1EDDi d\xF9ng c\xF3 th\u1EC3 t\u01B0\u01A1ng t\xE1c v\u1EDBi ch\xFAng on-chain th\xF4ng qua "),Pt={href:"https://docs.solana.com/developing/clients/jsonrpc-api",target:"_blank",rel:"noopener noreferrer"},ft=n("k\u1EBFt n\u1ED1i RPC"),yt=n(" t\u01B0\u01A1ng \u1EE9ng."),Lt=t("h3",{id:"trien-khai-program",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#trien-khai-program","aria-hidden":"true"},"#"),n(" Tri\u1EC3n khai Program")],-1),St=n("L\u1EADp tr\xECnh vi\xEAn c\xF3 th\u1EC3 tri\u1EC3n khai Program c\u1EE7a h\u1ECD th\xF4ng qua "),xt={href:"https://docs.solana.com/cli/deploy-a-program",target:"_blank",rel:"noopener noreferrer"},At=n("CLI"),Tt=n(":"),Ft=e(`
    solana program deploy <PROGRAM_FILEPATH>
    -
    `,1),Bt=n("Khi m\u1ED9t Program \u0111\u01B0\u1EE3c tri\u1EC3n khai, n\xF3 s\u1EBD \u0111\u01B0\u1EE3c bi\xEAn d\u1ECBch th\xE0nh m\u1ED9t "),Ct={href:"https://en.wikipedia.org/wiki/Executable_and_Linkable_Format",target:"_blank",rel:"noopener noreferrer"},Rt=n("ELF shared object"),Nt=n(" (c\xF3 ch\u1EE9a BPF bytecode) v\xE0 \u0111\u01B0\u1EE3c t\u1EA3i l\xEAn m\u1EA1ng Solana. Program \u0111\u01B0\u1EE3c l\u01B0u tr\u1EEF trong Account (gi\u1ED1ng nh\u01B0 h\u1EA5u h\u1EBFt m\u1ECDi th\u1EE9 tr\xEAn Solana), ngo\u1EA1i tr\u1EEB vi\u1EC7c \u0111\u01B0\u1EE3c \u0111\xE1nh \u0111\u1EA5u l\xE0 "),Mt=t("code",null,"executable",-1),wt=n(" v\xE0 "),It=t("code",null,"owner",-1),Vt=n(" \u0111\u01B0\u1EE3c g\xE1n cho BPF Loader. \u0110\u1ECBa ch\u1EC9 c\u1EE7a Account n\xE0y s\u1EBD \u0111\u01B0\u1EE3c g\u1ECDi l\xE0 "),qt=t("code",null,"program_id",-1),Et=n(" v\xE0 \u0111\u01B0\u1EE3c s\u1EED d\u1EE5ng nh\u01B0ng l\xE0 tham chi\u1EBFu cho Program trong c\xE1c giao d\u1ECBch \u1EDF t\u01B0\u01A1ng lai."),Ht=n("Solana h\u1ED7 tr\u1EE3 \u0111a d\u1EA1ng c\xE1c BPF Loader v\u1EDBi phi\xEAn b\u1EA3n m\u1EDBi nh\u1EA5t l\xE0 "),Dt={href:"https://explorer.solana.com/address/BPFLoaderUpgradeab1e11111111111111111111111",target:"_blank",rel:"noopener noreferrer"},jt=n("Upgradable BPF Loader"),Kt=n(". BPF Loader ch\u1ECBu tr\xE1ch nhi\u1EC7m cho vi\u1EC7c \u0111i\u1EC1u h\xE0nh c\xE1c Account c\u1EE7a Program v\xE0 cho ph\xE9p ng\u01B0\u1EDDi d\xF9ng t\u01B0\u01A1ng t\xE1c b\u1EB1ng "),zt=t("code",null,"program_id",-1),Ot=n(". T\u1EA5t c\u1EA3 Program ch\u1EC9 c\xF3 m\u1ED9t \u0111i\u1EC3m truy c\u1EADp duy nh\u1EA5t, n\u01A1i m\xE0 c\xE1c ch\u1EC9 th\u1ECB s\u1EBD \u0111\u01B0\u1EE3c ghi nh\u1EADn v\xE0 x\u1EED l\xFD (c\u1EE5 th\u1EC3 l\xE0 "),Ut=t("code",null,"process_instruction",-1),Gt=n(") v\u1EDBi c\xE1c tham s\u1ED1 bao g\u1ED3m:"),Jt=e('
    • program_id: pubkey
    • accounts: array,
    • instruction_data: byte array

    M\u1ED7i khi \u0111\u01B0\u1EE3c g\u1ECDi, Program s\u1EBD \u0111\u01B0\u1EE3c th\u1EF1c thi b\u1EDFi Solana Runtime.

    C\xE1c ngu\u1ED3n t\xE0i li\u1EC7u kh\xE1c

    ',3),Qt={href:"https://docs.solana.com/developing/on-chain-programs/overview",target:"_blank",rel:"noopener noreferrer"},Wt=n("T\xE0i li\u1EC7u ch\xEDnh th\u1ED1ng"),Xt={href:"https://spl.solana.com/",target:"_blank",rel:"noopener noreferrer"},Yt=n("T\xE0i li\u1EC7u SPL"),Zt={href:"https://jstarry.notion.site/Program-deploys-29780c48794c47308d5f138074dd9838",target:"_blank",rel:"noopener noreferrer"},$t=n("Program Deploys by Justin Starry"),tn={href:"https://book.solmeet.dev/notes/solana-starter-kit",target:"_blank",rel:"noopener noreferrer"},nn=n("Solana Starter Kit by Iron Addicted Dog"),on={href:"https://paulx.dev/blog/2021/01/14/programming-on-solana-an-introduction/",target:"_blank",rel:"noopener noreferrer"},rn=n("Programming on Solana by Paulx"),en={href:"https://2501babe.github.io/posts/solana101.html",target:"_blank",rel:"noopener noreferrer"},cn=n("An Introduction to the Solana Blockchain by Hana"),an={href:"https://github.com/coral-xyz/anchor",target:"_blank",rel:"noopener noreferrer"},hn=n("Anchor");function sn(ln,dn){const a=c("RouterLink"),r=c("ExternalLinkIcon");return s(),i(d,null,[g,u,m,t("div",p,[b,t("ul",null,[k,t("li",null,[v,P,f,o(a,{to:"/vi/core-concepts/accounts.html"},{default:l(()=>[y]),_:1}),L]),S,t("li",null,[x,t("a",A,[T,o(r)]),F,t("a",B,[C,o(r)])]),t("li",null,[R,t("a",N,[M,o(r)]),w,t("a",I,[V,o(r)])]),q])]),E,H,D,t("p",null,[j,t("a",K,[z,o(r)]),O,t("a",U,[G,o(r)]),J]),t("p",null,[Q,t("a",W,[X,o(r)]),Y]),t("p",null,[Z,t("a",$,[tt,o(r)]),nt,t("a",ot,[rt,o(r)]),et]),ct,t("p",null,[at,t("a",ht,[st,o(r)]),it,t("a",lt,[dt,o(r)]),_t]),gt,t("p",null,[ut,t("a",mt,[pt,o(r)]),bt]),kt,t("p",null,[vt,t("a",Pt,[ft,o(r)]),yt]),Lt,t("p",null,[St,t("a",xt,[At,o(r)]),Tt]),Ft,t("p",null,[Bt,t("a",Ct,[Rt,o(r)]),Nt,Mt,wt,It,Vt,qt,Et]),t("p",null,[Ht,t("a",Dt,[jt,o(r)]),Kt,zt,Ot,Ut,Gt]),Jt,t("ul",null,[t("li",null,[t("a",Qt,[Wt,o(r)])]),t("li",null,[t("a",Xt,[Yt,o(r)])]),t("li",null,[t("a",Zt,[$t,o(r)])]),t("li",null,[t("a",tn,[nn,o(r)])]),t("li",null,[t("a",on,[rn,o(r)])]),t("li",null,[t("a",en,[cn,o(r)])]),t("li",null,[t("a",an,[hn,o(r)])])])],64)}var gn=h(_,[["render",sn]]);export{gn as default}; diff --git a/docs/.vuepress/dist/assets/programs.html.6e4947b0.js b/docs/.vuepress/dist/assets/programs.html.f78f6de4.js similarity index 99% rename from docs/.vuepress/dist/assets/programs.html.6e4947b0.js rename to docs/.vuepress/dist/assets/programs.html.f78f6de4.js index 0aab858f4..567d0dfcd 100644 --- a/docs/.vuepress/dist/assets/programs.html.6e4947b0.js +++ b/docs/.vuepress/dist/assets/programs.html.f78f6de4.js @@ -1,2 +1,2 @@ -import{_ as d,r as s,o as i,c as l,a as t,b as o,w as c,F as _,d as e,e as r}from"./app.cfdf84e7.js";const h={},p=t("h1",{id:"\u7A0B\u5E8F",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#\u7A0B\u5E8F","aria-hidden":"true"},"#"),e(" \u7A0B\u5E8F")],-1),u=t("p",null,"\u4EFB\u4F55\u5F00\u53D1\u8005\u90FD\u53EF\u4EE5\u5728Solana\u94FE\u4E0A\u7F16\u5199\u4EE5\u53CA\u90E8\u7F72\u7A0B\u5E8F\u3002Solana\u7A0B\u5E8F\uFF08\u5728\u5176\u4ED6\u94FE\u4E0A\u53EB\u505A\u667A\u80FD\u5408\u7EA6\uFF09\uFF0C\u662F\u6240\u6709\u94FE\u4E0A\u6D3B\u52A8\u7684\u57FA\u7840\u3002 \u94FE\u4E0A\u7684\u4E00\u5207\u6D3B\u52A8\uFF0C\u4ECE\u53BB\u4E2D\u5FC3\u5316\u91D1\u878D\uFF08DeFi\uFF09\uFF0C\u5230\u975E\u540C\u8D28\u5316\u4EE3\u5E01\uFF08NFT\uFF09\uFF0C\u518D\u5230\u793E\u4EA4\u5A92\u4F53\uFF0C\u94FE\u4E0A\u6E38\u620F\uFF0C\u90FD\u7531Solana\u7A0B\u5E8F\u6240\u9A71\u52A8\u3002",-1),g=t("h2",{id:"\u7EFC\u8FF0",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#\u7EFC\u8FF0","aria-hidden":"true"},"#"),e(" \u7EFC\u8FF0")],-1),b={class:"custom-container tip"},m=t("p",{class:"custom-container-title"},"\u8981\u70B9",-1),f=t("li",null,[e("\u7A0B\u5E8F\u53EF\u4EE5\u5904\u7406\u6765\u81EA\u7528\u6237\u548C\u5176\u4ED6\u7A0B\u5E8F\u7684"),t("a",{href:"./transactions"},"\u6307\u4EE4")],-1),k=e("\u6240\u6709\u7684\u7A0B\u5E8F\u90FD\u662F"),S=t("strong",null,"\u65E0\u72B6\u6001",-1),P=e("\u7684\uFF1A\u6240\u6709\u7684\u548C\u7A0B\u5E8F\u4EA4\u4E92\u7684\u6570\u636E\u90FD\u662F\u5B58\u50A8\u5728\u72EC\u7ACB\u7684"),y=e("\u8D26\u6237"),L=e("\u4E2D\u3002\u6267\u884C\u65F6\uFF0C\u8FD9\u4E9B\u8D26\u6237\u501F\u7531\u6307\u4EE4\u4F20\u5165\u7A0B\u5E8F"),v=t("li",null,[e("\u7A0B\u5E8F\u672C\u8EAB\u5B58\u50A8\u5728\u6807\u8BB0\u4E3A"),t("code",null,"executable"),e("\uFF08\u53EF\u6267\u884C\uFF09\u7684\u8D26\u6237\u4E2D\u3002")],-1),x=e("\u4EFB\u4F55\u7A0B\u5E8F\u7684\u6240\u6709\u8005\u90FD\u662F"),F={href:"https://docs.solana.com/developing/runtime-facilities/programs#bpf-loader",target:"_blank",rel:"noopener noreferrer"},B=e("BPF Loader"),R=e(" and executed by the "),A={href:"https://docs.solana.com/developing/programming-model/runtime",target:"_blank",rel:"noopener noreferrer"},w=e("Solana Runtime"),E=e("\u5F00\u53D1\u8005\u901A\u5E38\u4F7F\u7528Rust\u6216C++\u6765\u7F16\u5199\u7A0B\u5E8F\uFF0C\u4E5F\u53EF\u4EE5\u91C7\u7528\u4EFB\u4F55\u5176\u4ED6\u53EF\u4EE5\u7F16\u8BD1\u4E3A"),T={href:"https://llvm.org/",target:"_blank",rel:"noopener noreferrer"},V=e("LLVM"),C=e("\u7684"),I={href:"https://en.wikipedia.org/wiki/Berkeley_Packet_Filter",target:"_blank",rel:"noopener noreferrer"},M=e("BPF"),N=e("\u540E\u7AEF\u7684\u8BED\u8A00"),D=r("
  • \u6240\u6709\u7684\u7A0B\u5E8F\u90FD\u6709\u4E00\u4E2A\u5355\u72EC\u7684\u5165\u53E3\u70B9\uFF0C\u6307\u4EE4\u7684\u6267\u884C\u5C31\u662F\u4ECE\u8FD9\u91CC\u5F00\u59CB\u7684\uFF08\u4EA6\u5373process_instruction\uFF09\u3002\u53C2\u6570\u987B\u5305\u62EC\uFF1A
    • program_id: pubkey \uFF08\u516C\u94A5\uFF09
    • accounts: array \uFF08\u6570\u7EC4\uFF09
    • instruction_data: byte array \uFF08\u5B57\u8282\u6570\u7EC4\uFF09
  • ",1),j=t("h2",{id:"\u6DF1\u5165",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#\u6DF1\u5165","aria-hidden":"true"},"#"),e(" \u6DF1\u5165")],-1),U=t("p",null,'\u4E0E\u5176\u4ED6\u94FE\u4E0D\u540C\uFF0CSolana\u5C06\u4EE3\u7801\u4E0E\u6570\u636E\u5B8C\u5168\u5206\u5F00\u3002 \u7A0B\u5E8F\u9700\u8981\u8BBF\u95EE\u7684\u5168\u90E8\u6570\u636E\u90FD\u5B58\u50A8\u5728\u72EC\u7ACB\u7684\u8D26\u6237\u4E2D\uFF0C\u5728\u6307\u4EE4\u4E2D\u8FD9\u4E9B\u8D26\u6237\u9700\u8981\u4EE5\u5F15\u7528\u7684\u65B9\u5F0F\u4F20\u5165\u3002 \u8FD9\u79CD\u6A21\u5F0F\u4F7F\u5F97\u4E00\u4E2A\u901A\u7528\u7684\u7A0B\u5E8F\u53EF\u4EE5\u5728\u4E0D\u540C\u7684\u8D26\u6237\u4E0A\u8FD0\u884C\uFF0C\u800C\u4E0D\u7528\u4E3A\u6B64\u989D\u5916\u90E8\u7F72\u7A0B\u5E8F\u3002 \u8FD9\u79CD\u6A21\u5F0F\u7684\u4F8B\u5B50\u5F88\u5E38\u89C1\uFF0C\u5305\u62EC\u4E86"\u539F\u751F\u7A0B\u5E8F"\u4EE5\u53CA"SPL\u7A0B\u5E8F"\u7B49\u3002',-1),H=t("h3",{id:"\u539F\u751F\u7A0B\u5E8F\u548Csolana\u7A0B\u5E8F\u5E93-spl",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#\u539F\u751F\u7A0B\u5E8F\u548Csolana\u7A0B\u5E8F\u5E93-spl","aria-hidden":"true"},"#"),e(" \u539F\u751F\u7A0B\u5E8F\u548CSolana\u7A0B\u5E8F\u5E93\uFF08SPL\uFF09")],-1),O=e("Solana\u81EA\u5E26\u4E00\u7CFB\u5217\u7A0B\u5E8F\uFF0C\u8FD9\u4E9B\u7A0B\u5E8F\u662F\u94FE\u4E0A\u4EA4\u4E92\u7684\u6838\u5FC3\u6784\u6210\u8981\u7D20\u3002 \u8FD9\u4E9B\u7A0B\u5E8F\u5206\u4E3A"),z={href:"https://docs.solana.com/developing/runtime-facilities/programs#bpf-loader",target:"_blank",rel:"noopener noreferrer"},G=e("\u539F\u751F\u7A0B\u5E8F"),J=e(" \u548C"),K={href:"https://spl.solana.com/",target:"_blank",rel:"noopener noreferrer"},q=e("Solana\u7A0B\u5E8F\u5E93\uFF08SPL\u7A0B\u5E8F\uFF09"),Q=e("\u539F\u751F\u7A0B\u5E8F\u63D0\u4F9B\u4E86\u8FD0\u884C\u9A8C\u8BC1\u8282\u70B9\uFF08validator\uFF09\u6240\u9700\u7684\u529F\u80FD\u3002\u539F\u751F\u7A0B\u5E8F\u4E2D\u6700\u5E7F\u4E3A\u4EBA\u77E5\u7684\u662F"),W={href:"https://docs.solana.com/developing/runtime-facilities/programs#system-program",target:"_blank",rel:"noopener noreferrer"},X=e("System Program"),Y=e("\u3002 \u8FD9\u4E2A\u7A0B\u5E8F\u8D1F\u8D23\u7BA1\u7406\u5EFA\u7ACB\u65B0\u8D26\u6237\u4EE5\u53CA\u5728\u4E24\u4E2A\u8D26\u6237\u4E4B\u95F4\u8F6C\u8D26SOL\u3002"),Z=e("SPL\u7A0B\u5E8F\u5B9A\u4E49\u4E86\u4E00\u7CFB\u5217\u7684\u94FE\u4E0A\u6D3B\u52A8\uFF0C\u5176\u4E2D\u5305\u62EC\u9488\u5BF9\u4EE3\u5E01\u7684\u521B\u5EFA\uFF0C\u4EA4\u6362\uFF0C\u501F\u8D37\uFF0C\u4EE5\u53CA\u521B\u5EFA\u8D28\u62BC\u6C60\uFF0C\u7EF4\u62A4\u94FE\u4E0A\u57DF\u540D\u89E3\u6790\u670D\u52A1\u7B49\u3002 "),$={href:"https://spl.solana.com/token",target:"_blank",rel:"noopener noreferrer"},tt=e("SPL Token Program\uFF08SPL\u4EE3\u5E01\u7A0B\u5E8F\uFF09"),et=e("\u53EF\u4EE5\u76F4\u63A5\u5728\u547D\u4EE4\u884C\u8C03\u7528\uFF0C\u5176\u4ED6\u7684\u4E00\u4E9B\uFF0C\u5982 "),ot={href:"https://spl.solana.com/associated-token-account",target:"_blank",rel:"noopener noreferrer"},nt=e("Associated Token Account Program\uFF08\u5173\u8054\u4EE3\u5E01\u8D26\u6237\u7A0B\u5E8F\uFF09"),rt=e("\uFF0C \u5219\u5E38\u88AB\u7528\u4E8E\u7F16\u5199\u5176\u4ED6\u5B9A\u5236\u7A0B\u5E8F\u3002"),st=t("h3",{id:"\u7F16\u5199\u7A0B\u5E8F",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#\u7F16\u5199\u7A0B\u5E8F","aria-hidden":"true"},"#"),e(" \u7F16\u5199\u7A0B\u5E8F")],-1),at=e("\u7F16\u5199Solana\u7A0B\u5E8F\u5E38\u7528\u7684\u662FRust\u548CC++\uFF0C\u4F46\u662F\u4E5F\u53EF\u4EE5\u4F7F\u7528\u5176\u4ED6\u53EF\u4EE5\u7F16\u8BD1\u4E3ALLVM\u7684BPF\u540E\u7AEF\u7684\u8BED\u8A00\u3002 \u6700\u8FD1"),dt={href:"https://neon-labs.org/",target:"_blank",rel:"noopener noreferrer"},it=e("Neon Labs"),lt=e("\u548C"),ct={href:"https://solang.readthedocs.io/en/latest/",target:"_blank",rel:"noopener noreferrer"},_t=e("Solang"),ht=e("\u53D1\u8D77\u4E86\u4E00\u4E2A\u9879\u76EE\uFF0C \u65E8\u5728\u5EFA\u7ACBSolana\u7684"),pt={href:"https://ethereum.org/en/developers/docs/evm/",target:"_blank",rel:"noopener noreferrer"},ut=e("EVM"),gt=e("\u517C\u5BB9\u6027\uFF0C\u8FDB\u800C\u8BA9\u5F00\u53D1\u8005\u53EF\u4EE5\u4F7F\u7528Solidity\u7F16\u5199\u7A0B\u5E8F\u3002"),bt=r("

    \u5927\u90E8\u5206Rust\u7F16\u5199\u7684\u7A0B\u5E8F\u9075\u5FAA\u4EE5\u4E0B\u67B6\u6784\uFF1A

    \u6587\u4EF6\u63CF\u8FF0
    lib.rs\u6CE8\u518C\u6A21\u5757
    entrypoint.rs\u7A0B\u5E8F\u7684\u5165\u53E3\u70B9
    instruction.rs\u7A0B\u5E8F\u7684API, \u5BF9\u6307\u4EE4\u7684\u6570\u636E\u8FDB\u884C\u5E8F\u5217\u5316\u4E0E\u53CD\u5E8F\u5217\u5316
    processor.rs\u7A0B\u5E8F\u7684\u4E1A\u52A1\u903B\u8F91
    state.rs\u7A0B\u5E8F\u5BF9\u8C61\uFF0C\u5BF9\u72B6\u6001\u8FDB\u884C\u53CD\u5E8F\u5217\u5316
    error.rs\u7A0B\u5E8F\u4E2D\u5236\u5B9A\u7684\u9519\u8BEF
    ",2),mt=e("\u6700\u8FD1\uFF0C"),ft={href:"https://project-serum.github.io/anchor/getting-started/introduction.html",target:"_blank",rel:"noopener noreferrer"},kt=e("Anchor"),St=e("\u9010\u6E10\u6210\u4E3A\u4E86\u4E00\u4E2A\u5E7F\u53D7\u6B22\u8FCE\u7684Solana\u7A0B\u5E8F\u5F00\u53D1\u6846\u67B6\u3002 Anchor\u662F\u4E00\u4E2A\u6709\u6001\u5EA6\u7684\u6846\u67B6\uFF0C\u4E0ERuby on Rails\u76F8\u4F3C\uFF0C\u8FD9\u4E2A\u6846\u67B6\u65E8\u5728\u51CF\u5C11\u6A21\u5F0F\u5316\u7684\u4EE3\u7801\uFF0C\u5C06Rust\u5F00\u53D1\u6D41\u7A0B\u4E2D\u7684\u5E8F\u5217\u5316\u4E0E\u53CD\u5E8F\u5217\u5316\u8FC7\u7A0B\u6D41\u6C34\u7EBF\u5316\u3002"),Pt=r("

    \u5728\u90E8\u7F72\u5230Testnet\uFF08\u6D4B\u8BD5\u7F51\uFF09\u548CMainnet\uFF08\u4E3B\u7F51\uFF09\u4E4B\u524D\uFF0C\u7A0B\u5E8F\u5728\u5F00\u53D1\u548C\u6D4B\u8BD5\u9636\u6BB5\u7ECF\u5E38\u4F7F\u7528Localhost\u548CDevnet\uFF08\u5F00\u53D1\u7F51\uFF09\u73AF\u5883\u3002 Solana\u652F\u6301\u4EE5\u4E0B\u7684\u51E0\u4E2A\u73AF\u5883\uFF1A

    \u96C6\u7FA4\u73AF\u5883RPC\u8FDE\u63A5URL
    Mainnet-betahttps://api.mainnet-beta.solana.com
    Testnethttps://api.testnet.solana.com
    Devnethttps://api.devnet.solana.com
    Localhost\u9ED8\u8BA4\u7AEF\u53E3\uFF1A8899\uFF08\u4F8B\u5982\uFF0Chttp://localhost:8899\uFF0Chttp://192.168.1.88:8899\uFF09
    ",2),yt=e("\u90E8\u7F72\u5230\u4E00\u4E2A\u73AF\u5883\u4E4B\u540E\uFF0C\u5BA2\u6237\u7AEF\u5C31\u53EF\u4EE5\u901A\u8FC7\u5BF9\u5E94\u96C6\u7FA4\u7684"),Lt={href:"https://docs.solana.com/developing/clients/jsonrpc-api",target:"_blank",rel:"noopener noreferrer"},vt=e("RPC\u8FDE\u63A5"),xt=e("\u4E0E\u94FE\u4E0A\u7A0B\u5E8F\u8FDB\u884C\u4EA4\u4E92\u3002"),Ft=t("h3",{id:"\u90E8\u7F72\u7A0B\u5E8F",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#\u90E8\u7F72\u7A0B\u5E8F","aria-hidden":"true"},"#"),e(" \u90E8\u7F72\u7A0B\u5E8F")],-1),Bt=e("\u5F00\u53D1\u8005\u53EF\u4EE5\u4F7F\u7528"),Rt={href:"https://docs.solana.com/cli/deploy-a-program",target:"_blank",rel:"noopener noreferrer"},At=e("\u547D\u4EE4\u884C"),wt=e("\u90E8\u7F72\u7A0B\u5E8F\uFF1A"),Et=r(`
    solana program deploy <PROGRAM_FILEPATH>
    +import{_ as d,r as s,o as i,c as l,a as t,b as o,w as c,F as _,d as e,e as r}from"./app.2fbb9e96.js";const h={},p=t("h1",{id:"\u7A0B\u5E8F",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#\u7A0B\u5E8F","aria-hidden":"true"},"#"),e(" \u7A0B\u5E8F")],-1),u=t("p",null,"\u4EFB\u4F55\u5F00\u53D1\u8005\u90FD\u53EF\u4EE5\u5728Solana\u94FE\u4E0A\u7F16\u5199\u4EE5\u53CA\u90E8\u7F72\u7A0B\u5E8F\u3002Solana\u7A0B\u5E8F\uFF08\u5728\u5176\u4ED6\u94FE\u4E0A\u53EB\u505A\u667A\u80FD\u5408\u7EA6\uFF09\uFF0C\u662F\u6240\u6709\u94FE\u4E0A\u6D3B\u52A8\u7684\u57FA\u7840\u3002 \u94FE\u4E0A\u7684\u4E00\u5207\u6D3B\u52A8\uFF0C\u4ECE\u53BB\u4E2D\u5FC3\u5316\u91D1\u878D\uFF08DeFi\uFF09\uFF0C\u5230\u975E\u540C\u8D28\u5316\u4EE3\u5E01\uFF08NFT\uFF09\uFF0C\u518D\u5230\u793E\u4EA4\u5A92\u4F53\uFF0C\u94FE\u4E0A\u6E38\u620F\uFF0C\u90FD\u7531Solana\u7A0B\u5E8F\u6240\u9A71\u52A8\u3002",-1),g=t("h2",{id:"\u7EFC\u8FF0",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#\u7EFC\u8FF0","aria-hidden":"true"},"#"),e(" \u7EFC\u8FF0")],-1),b={class:"custom-container tip"},m=t("p",{class:"custom-container-title"},"\u8981\u70B9",-1),f=t("li",null,[e("\u7A0B\u5E8F\u53EF\u4EE5\u5904\u7406\u6765\u81EA\u7528\u6237\u548C\u5176\u4ED6\u7A0B\u5E8F\u7684"),t("a",{href:"./transactions"},"\u6307\u4EE4")],-1),k=e("\u6240\u6709\u7684\u7A0B\u5E8F\u90FD\u662F"),S=t("strong",null,"\u65E0\u72B6\u6001",-1),P=e("\u7684\uFF1A\u6240\u6709\u7684\u548C\u7A0B\u5E8F\u4EA4\u4E92\u7684\u6570\u636E\u90FD\u662F\u5B58\u50A8\u5728\u72EC\u7ACB\u7684"),y=e("\u8D26\u6237"),L=e("\u4E2D\u3002\u6267\u884C\u65F6\uFF0C\u8FD9\u4E9B\u8D26\u6237\u501F\u7531\u6307\u4EE4\u4F20\u5165\u7A0B\u5E8F"),v=t("li",null,[e("\u7A0B\u5E8F\u672C\u8EAB\u5B58\u50A8\u5728\u6807\u8BB0\u4E3A"),t("code",null,"executable"),e("\uFF08\u53EF\u6267\u884C\uFF09\u7684\u8D26\u6237\u4E2D\u3002")],-1),x=e("\u4EFB\u4F55\u7A0B\u5E8F\u7684\u6240\u6709\u8005\u90FD\u662F"),F={href:"https://docs.solana.com/developing/runtime-facilities/programs#bpf-loader",target:"_blank",rel:"noopener noreferrer"},B=e("BPF Loader"),R=e(" and executed by the "),A={href:"https://docs.solana.com/developing/programming-model/runtime",target:"_blank",rel:"noopener noreferrer"},w=e("Solana Runtime"),E=e("\u5F00\u53D1\u8005\u901A\u5E38\u4F7F\u7528Rust\u6216C++\u6765\u7F16\u5199\u7A0B\u5E8F\uFF0C\u4E5F\u53EF\u4EE5\u91C7\u7528\u4EFB\u4F55\u5176\u4ED6\u53EF\u4EE5\u7F16\u8BD1\u4E3A"),T={href:"https://llvm.org/",target:"_blank",rel:"noopener noreferrer"},V=e("LLVM"),C=e("\u7684"),I={href:"https://en.wikipedia.org/wiki/Berkeley_Packet_Filter",target:"_blank",rel:"noopener noreferrer"},M=e("BPF"),N=e("\u540E\u7AEF\u7684\u8BED\u8A00"),D=r("
  • \u6240\u6709\u7684\u7A0B\u5E8F\u90FD\u6709\u4E00\u4E2A\u5355\u72EC\u7684\u5165\u53E3\u70B9\uFF0C\u6307\u4EE4\u7684\u6267\u884C\u5C31\u662F\u4ECE\u8FD9\u91CC\u5F00\u59CB\u7684\uFF08\u4EA6\u5373process_instruction\uFF09\u3002\u53C2\u6570\u987B\u5305\u62EC\uFF1A
    • program_id: pubkey \uFF08\u516C\u94A5\uFF09
    • accounts: array \uFF08\u6570\u7EC4\uFF09
    • instruction_data: byte array \uFF08\u5B57\u8282\u6570\u7EC4\uFF09
  • ",1),j=t("h2",{id:"\u6DF1\u5165",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#\u6DF1\u5165","aria-hidden":"true"},"#"),e(" \u6DF1\u5165")],-1),U=t("p",null,'\u4E0E\u5176\u4ED6\u94FE\u4E0D\u540C\uFF0CSolana\u5C06\u4EE3\u7801\u4E0E\u6570\u636E\u5B8C\u5168\u5206\u5F00\u3002 \u7A0B\u5E8F\u9700\u8981\u8BBF\u95EE\u7684\u5168\u90E8\u6570\u636E\u90FD\u5B58\u50A8\u5728\u72EC\u7ACB\u7684\u8D26\u6237\u4E2D\uFF0C\u5728\u6307\u4EE4\u4E2D\u8FD9\u4E9B\u8D26\u6237\u9700\u8981\u4EE5\u5F15\u7528\u7684\u65B9\u5F0F\u4F20\u5165\u3002 \u8FD9\u79CD\u6A21\u5F0F\u4F7F\u5F97\u4E00\u4E2A\u901A\u7528\u7684\u7A0B\u5E8F\u53EF\u4EE5\u5728\u4E0D\u540C\u7684\u8D26\u6237\u4E0A\u8FD0\u884C\uFF0C\u800C\u4E0D\u7528\u4E3A\u6B64\u989D\u5916\u90E8\u7F72\u7A0B\u5E8F\u3002 \u8FD9\u79CD\u6A21\u5F0F\u7684\u4F8B\u5B50\u5F88\u5E38\u89C1\uFF0C\u5305\u62EC\u4E86"\u539F\u751F\u7A0B\u5E8F"\u4EE5\u53CA"SPL\u7A0B\u5E8F"\u7B49\u3002',-1),H=t("h3",{id:"\u539F\u751F\u7A0B\u5E8F\u548Csolana\u7A0B\u5E8F\u5E93-spl",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#\u539F\u751F\u7A0B\u5E8F\u548Csolana\u7A0B\u5E8F\u5E93-spl","aria-hidden":"true"},"#"),e(" \u539F\u751F\u7A0B\u5E8F\u548CSolana\u7A0B\u5E8F\u5E93\uFF08SPL\uFF09")],-1),O=e("Solana\u81EA\u5E26\u4E00\u7CFB\u5217\u7A0B\u5E8F\uFF0C\u8FD9\u4E9B\u7A0B\u5E8F\u662F\u94FE\u4E0A\u4EA4\u4E92\u7684\u6838\u5FC3\u6784\u6210\u8981\u7D20\u3002 \u8FD9\u4E9B\u7A0B\u5E8F\u5206\u4E3A"),z={href:"https://docs.solana.com/developing/runtime-facilities/programs#bpf-loader",target:"_blank",rel:"noopener noreferrer"},G=e("\u539F\u751F\u7A0B\u5E8F"),J=e(" \u548C"),K={href:"https://spl.solana.com/",target:"_blank",rel:"noopener noreferrer"},q=e("Solana\u7A0B\u5E8F\u5E93\uFF08SPL\u7A0B\u5E8F\uFF09"),Q=e("\u539F\u751F\u7A0B\u5E8F\u63D0\u4F9B\u4E86\u8FD0\u884C\u9A8C\u8BC1\u8282\u70B9\uFF08validator\uFF09\u6240\u9700\u7684\u529F\u80FD\u3002\u539F\u751F\u7A0B\u5E8F\u4E2D\u6700\u5E7F\u4E3A\u4EBA\u77E5\u7684\u662F"),W={href:"https://docs.solana.com/developing/runtime-facilities/programs#system-program",target:"_blank",rel:"noopener noreferrer"},X=e("System Program"),Y=e("\u3002 \u8FD9\u4E2A\u7A0B\u5E8F\u8D1F\u8D23\u7BA1\u7406\u5EFA\u7ACB\u65B0\u8D26\u6237\u4EE5\u53CA\u5728\u4E24\u4E2A\u8D26\u6237\u4E4B\u95F4\u8F6C\u8D26SOL\u3002"),Z=e("SPL\u7A0B\u5E8F\u5B9A\u4E49\u4E86\u4E00\u7CFB\u5217\u7684\u94FE\u4E0A\u6D3B\u52A8\uFF0C\u5176\u4E2D\u5305\u62EC\u9488\u5BF9\u4EE3\u5E01\u7684\u521B\u5EFA\uFF0C\u4EA4\u6362\uFF0C\u501F\u8D37\uFF0C\u4EE5\u53CA\u521B\u5EFA\u8D28\u62BC\u6C60\uFF0C\u7EF4\u62A4\u94FE\u4E0A\u57DF\u540D\u89E3\u6790\u670D\u52A1\u7B49\u3002 "),$={href:"https://spl.solana.com/token",target:"_blank",rel:"noopener noreferrer"},tt=e("SPL Token Program\uFF08SPL\u4EE3\u5E01\u7A0B\u5E8F\uFF09"),et=e("\u53EF\u4EE5\u76F4\u63A5\u5728\u547D\u4EE4\u884C\u8C03\u7528\uFF0C\u5176\u4ED6\u7684\u4E00\u4E9B\uFF0C\u5982 "),ot={href:"https://spl.solana.com/associated-token-account",target:"_blank",rel:"noopener noreferrer"},nt=e("Associated Token Account Program\uFF08\u5173\u8054\u4EE3\u5E01\u8D26\u6237\u7A0B\u5E8F\uFF09"),rt=e("\uFF0C \u5219\u5E38\u88AB\u7528\u4E8E\u7F16\u5199\u5176\u4ED6\u5B9A\u5236\u7A0B\u5E8F\u3002"),st=t("h3",{id:"\u7F16\u5199\u7A0B\u5E8F",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#\u7F16\u5199\u7A0B\u5E8F","aria-hidden":"true"},"#"),e(" \u7F16\u5199\u7A0B\u5E8F")],-1),at=e("\u7F16\u5199Solana\u7A0B\u5E8F\u5E38\u7528\u7684\u662FRust\u548CC++\uFF0C\u4F46\u662F\u4E5F\u53EF\u4EE5\u4F7F\u7528\u5176\u4ED6\u53EF\u4EE5\u7F16\u8BD1\u4E3ALLVM\u7684BPF\u540E\u7AEF\u7684\u8BED\u8A00\u3002 \u6700\u8FD1"),dt={href:"https://neon-labs.org/",target:"_blank",rel:"noopener noreferrer"},it=e("Neon Labs"),lt=e("\u548C"),ct={href:"https://solang.readthedocs.io/en/latest/",target:"_blank",rel:"noopener noreferrer"},_t=e("Solang"),ht=e("\u53D1\u8D77\u4E86\u4E00\u4E2A\u9879\u76EE\uFF0C \u65E8\u5728\u5EFA\u7ACBSolana\u7684"),pt={href:"https://ethereum.org/en/developers/docs/evm/",target:"_blank",rel:"noopener noreferrer"},ut=e("EVM"),gt=e("\u517C\u5BB9\u6027\uFF0C\u8FDB\u800C\u8BA9\u5F00\u53D1\u8005\u53EF\u4EE5\u4F7F\u7528Solidity\u7F16\u5199\u7A0B\u5E8F\u3002"),bt=r("

    \u5927\u90E8\u5206Rust\u7F16\u5199\u7684\u7A0B\u5E8F\u9075\u5FAA\u4EE5\u4E0B\u67B6\u6784\uFF1A

    \u6587\u4EF6\u63CF\u8FF0
    lib.rs\u6CE8\u518C\u6A21\u5757
    entrypoint.rs\u7A0B\u5E8F\u7684\u5165\u53E3\u70B9
    instruction.rs\u7A0B\u5E8F\u7684API, \u5BF9\u6307\u4EE4\u7684\u6570\u636E\u8FDB\u884C\u5E8F\u5217\u5316\u4E0E\u53CD\u5E8F\u5217\u5316
    processor.rs\u7A0B\u5E8F\u7684\u4E1A\u52A1\u903B\u8F91
    state.rs\u7A0B\u5E8F\u5BF9\u8C61\uFF0C\u5BF9\u72B6\u6001\u8FDB\u884C\u53CD\u5E8F\u5217\u5316
    error.rs\u7A0B\u5E8F\u4E2D\u5236\u5B9A\u7684\u9519\u8BEF
    ",2),mt=e("\u6700\u8FD1\uFF0C"),ft={href:"https://project-serum.github.io/anchor/getting-started/introduction.html",target:"_blank",rel:"noopener noreferrer"},kt=e("Anchor"),St=e("\u9010\u6E10\u6210\u4E3A\u4E86\u4E00\u4E2A\u5E7F\u53D7\u6B22\u8FCE\u7684Solana\u7A0B\u5E8F\u5F00\u53D1\u6846\u67B6\u3002 Anchor\u662F\u4E00\u4E2A\u6709\u6001\u5EA6\u7684\u6846\u67B6\uFF0C\u4E0ERuby on Rails\u76F8\u4F3C\uFF0C\u8FD9\u4E2A\u6846\u67B6\u65E8\u5728\u51CF\u5C11\u6A21\u5F0F\u5316\u7684\u4EE3\u7801\uFF0C\u5C06Rust\u5F00\u53D1\u6D41\u7A0B\u4E2D\u7684\u5E8F\u5217\u5316\u4E0E\u53CD\u5E8F\u5217\u5316\u8FC7\u7A0B\u6D41\u6C34\u7EBF\u5316\u3002"),Pt=r("

    \u5728\u90E8\u7F72\u5230Testnet\uFF08\u6D4B\u8BD5\u7F51\uFF09\u548CMainnet\uFF08\u4E3B\u7F51\uFF09\u4E4B\u524D\uFF0C\u7A0B\u5E8F\u5728\u5F00\u53D1\u548C\u6D4B\u8BD5\u9636\u6BB5\u7ECF\u5E38\u4F7F\u7528Localhost\u548CDevnet\uFF08\u5F00\u53D1\u7F51\uFF09\u73AF\u5883\u3002 Solana\u652F\u6301\u4EE5\u4E0B\u7684\u51E0\u4E2A\u73AF\u5883\uFF1A

    \u96C6\u7FA4\u73AF\u5883RPC\u8FDE\u63A5URL
    Mainnet-betahttps://api.mainnet-beta.solana.com
    Testnethttps://api.testnet.solana.com
    Devnethttps://api.devnet.solana.com
    Localhost\u9ED8\u8BA4\u7AEF\u53E3\uFF1A8899\uFF08\u4F8B\u5982\uFF0Chttp://localhost:8899\uFF0Chttp://192.168.1.88:8899\uFF09
    ",2),yt=e("\u90E8\u7F72\u5230\u4E00\u4E2A\u73AF\u5883\u4E4B\u540E\uFF0C\u5BA2\u6237\u7AEF\u5C31\u53EF\u4EE5\u901A\u8FC7\u5BF9\u5E94\u96C6\u7FA4\u7684"),Lt={href:"https://docs.solana.com/developing/clients/jsonrpc-api",target:"_blank",rel:"noopener noreferrer"},vt=e("RPC\u8FDE\u63A5"),xt=e("\u4E0E\u94FE\u4E0A\u7A0B\u5E8F\u8FDB\u884C\u4EA4\u4E92\u3002"),Ft=t("h3",{id:"\u90E8\u7F72\u7A0B\u5E8F",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#\u90E8\u7F72\u7A0B\u5E8F","aria-hidden":"true"},"#"),e(" \u90E8\u7F72\u7A0B\u5E8F")],-1),Bt=e("\u5F00\u53D1\u8005\u53EF\u4EE5\u4F7F\u7528"),Rt={href:"https://docs.solana.com/cli/deploy-a-program",target:"_blank",rel:"noopener noreferrer"},At=e("\u547D\u4EE4\u884C"),wt=e("\u90E8\u7F72\u7A0B\u5E8F\uFF1A"),Et=r(`
    solana program deploy <PROGRAM_FILEPATH>
     
    `,1),Tt=e("\u90E8\u7F72\u7A0B\u5E8F\u7684\u65F6\u5019\uFF0C\u7A0B\u5E8F\u4F1A\u88AB\u7F16\u8BD1\u4E3A\u5305\u542BBPF\u5B57\u8282\u7801\u7684"),Vt={href:"https://en.wikipedia.org/wiki/Executable_and_Linkable_Format",target:"_blank",rel:"noopener noreferrer"},Ct=e("ELF\u5171\u4EAB\u5BF9\u8C61"),It=e("\uFF0C\u5E76\u4E0A\u4F20\u5230Solana\u96C6\u7FA4\u4E0A\u3002 \u548CSolana\u4E0A\u5176\u4ED6\u7684\u4EFB\u4F55\u4E1C\u897F\u4E00\u6837\uFF0C\u7A0B\u5E8F\u50A8\u5B58\u5728\u8D26\u6237\u5F53\u4E2D\u3002\u552F\u4E00\u7684\u7279\u6B8A\u4E4B\u5904\u662F\uFF0C\u8FD9\u4E9B\u8D26\u6237\u6807\u8BB0\u4E3A"),Mt=t("code",null,"executable",-1),Nt=e('\uFF08\u53EF\u6267\u884C\uFF09\uFF0C\u5E76\u4E14\u5176\u6240\u6709\u8005\u662F"BPF Loader\uFF08BPF\u52A0\u8F7D\u5668\uFF09"\u3002 \u8FD9\u4E2A\u8D26\u6237\u7684\u5730\u5740\u88AB\u79F0\u4E3A'),Dt=t("code",null,"program_id",-1),jt=e("\uFF0C\u5728\u540E\u9762\u7684\u4E00\u5207\u4EA4\u6613\u5F53\u4E2D\uFF0C\u7528\u4E8E\u6307\u4EE3\u8FD9\u4E2A\u7A0B\u5E8F\u3002"),Ut=e("Solana\u652F\u6301\u591A\u79CDBPF\u52A0\u8F7D\u5668\uFF0C\u6700\u65B0\u7684\u662F"),Ht={href:"https://explorer.solana.com/address/BPFLoaderUpgradeab1e11111111111111111111111",target:"_blank",rel:"noopener noreferrer"},Ot=e("Upgradable BPF Loader"),zt=e("\u3002 BPF\u52A0\u8F7D\u5668\u8D1F\u8D23\u7BA1\u7406\u7A0B\u5E8F\u8D26\u6237\uFF0C\u8BA9\u5BA2\u6237\u7AEF\u53EF\u4EE5\u901A\u8FC7\u5176"),Gt=t("code",null,"program_id",-1),Jt=e("\u5BF9\u7A0B\u5E8F\u8FDB\u884C\u8BBF\u95EE\u3002\u6BCF\u4E2A\u7A0B\u5E8F\u90FD\u53EA\u6709\u4E00\u4E2A\u5165\u53E3\u70B9\uFF0C\u8FD9\u91CC\u5BF9\u6307\u4EE4\u8FDB\u884C\u5904\u7406\u3002\u8FD9\u91CC\u7684\u53C2\u6570\u987B\u5305\u62EC\uFF1A"),Kt=r('
    • program_id: pubkey\uFF08\u516C\u94A5\uFF09
    • accounts: array\uFF08\u6570\u7EC4\uFF09
    • instruction_data: byte array\uFF08\u5B57\u8282\u6570\u7EC4\uFF09

    \u5F53\u7A0B\u5E8F\u88AB\u8C03\u7528\u65F6\uFF0C\u4F1A\u5728Solana\u8FD0\u884C\u5E93\u4E2D\u88AB\u6267\u884C\u3002

    \u5176\u4ED6\u8D44\u6599

    ',3),qt={href:"https://docs.solana.com/developing/on-chain-programs/overview",target:"_blank",rel:"noopener noreferrer"},Qt=e("\u5B98\u65B9\u6587\u6863"),Wt={href:"https://spl.solana.com/",target:"_blank",rel:"noopener noreferrer"},Xt=e("SPL\u6587\u6863"),Yt={href:"https://jstarry.notion.site/Program-deploys-29780c48794c47308d5f138074dd9838",target:"_blank",rel:"noopener noreferrer"},Zt=e("Program Deploys by Justin Starry"),$t={href:"https://hackmd.io/@ironaddicteddog/solana-starter-kit",target:"_blank",rel:"noopener noreferrer"},te=e("Solana Starter Kit by Iron Addicted Dog"),ee={href:"https://paulx.dev/blog/2021/01/14/programming-on-solana-an-introduction/",target:"_blank",rel:"noopener noreferrer"},oe=e("Programming on Solana by Paulx"),ne={href:"https://2501babe.github.io/posts/solana101.html",target:"_blank",rel:"noopener noreferrer"},re=e("An Introduction to the Solana Blockchain by Hana"),se={href:"https://project-serum.github.io/anchor/getting-started/introduction.html",target:"_blank",rel:"noopener noreferrer"},ae=e("Anchor");function de(ie,le){const a=s("RouterLink"),n=s("ExternalLinkIcon");return i(),l(_,null,[p,u,g,t("div",b,[m,t("ul",null,[f,t("li",null,[k,S,P,o(a,{to:"/zh/core-concepts/accounts.html"},{default:c(()=>[y]),_:1}),L]),v,t("li",null,[x,t("a",F,[B,o(n)]),R,t("a",A,[w,o(n)])]),t("li",null,[E,t("a",T,[V,o(n)]),C,t("a",I,[M,o(n)]),N]),D])]),j,U,H,t("p",null,[O,t("a",z,[G,o(n)]),J,t("a",K,[q,o(n)])]),t("p",null,[Q,t("a",W,[X,o(n)]),Y]),t("p",null,[Z,t("a",$,[tt,o(n)]),et,t("a",ot,[nt,o(n)]),rt]),st,t("p",null,[at,t("a",dt,[it,o(n)]),lt,t("a",ct,[_t,o(n)]),ht,t("a",pt,[ut,o(n)]),gt]),bt,t("p",null,[mt,t("a",ft,[kt,o(n)]),St]),Pt,t("p",null,[yt,t("a",Lt,[vt,o(n)]),xt]),Ft,t("p",null,[Bt,t("a",Rt,[At,o(n)]),wt]),Et,t("p",null,[Tt,t("a",Vt,[Ct,o(n)]),It,Mt,Nt,Dt,jt]),t("p",null,[Ut,t("a",Ht,[Ot,o(n)]),zt,Gt,Jt]),Kt,t("ul",null,[t("li",null,[t("a",qt,[Qt,o(n)])]),t("li",null,[t("a",Wt,[Xt,o(n)])]),t("li",null,[t("a",Yt,[Zt,o(n)])]),t("li",null,[t("a",$t,[te,o(n)])]),t("li",null,[t("a",ee,[oe,o(n)])]),t("li",null,[t("a",ne,[re,o(n)])]),t("li",null,[t("a",se,[ae,o(n)])])])],64)}var _e=d(h,[["render",de]]);export{_e as default}; diff --git a/docs/.vuepress/dist/assets/pyth.html.993a62c0.js b/docs/.vuepress/dist/assets/pyth.html.13b048d9.js similarity index 99% rename from docs/.vuepress/dist/assets/pyth.html.993a62c0.js rename to docs/.vuepress/dist/assets/pyth.html.13b048d9.js index d3e1d6dd0..600e2d6f8 100644 --- a/docs/.vuepress/dist/assets/pyth.html.993a62c0.js +++ b/docs/.vuepress/dist/assets/pyth.html.13b048d9.js @@ -1,4 +1,4 @@ -import{_ as l,r as e,o as u,c as i,a as n,b as a,w as t,F as r,d as s}from"./app.cfdf84e7.js";const k={},b=n("h1",{id:"pyth",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#pyth","aria-hidden":"true"},"#"),s(" Pyth")],-1),m=n("p",null,"Pyth is an Oracle used to get real-world financial and crypto market data. Pyth Oracle can be used by on-chain programs in consuming data for a variety of use cases.",-1),d=n("h2",{id:"how-to-use-pyth-in-client",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-use-pyth-in-client","aria-hidden":"true"},"#"),s(" How to use Pyth in Client")],-1),h=s("Pyth provides a JavaScript/TypeScript library called "),y=n("strong",null,"@pythnetwork/client",-1),_=s(". This library can be used to read on-chain Pyth Data for off-chain applications, such as displaying the Pyth price on a website. Learn more about this "),f={href:"https://www.npmjs.com/package/@pythnetwork/client",target:"_blank",rel:"noopener noreferrer"},g=s("here"),w=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" web3 "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +import{_ as l,r as e,o as u,c as i,a as n,b as a,w as t,F as r,d as s}from"./app.2fbb9e96.js";const k={},b=n("h1",{id:"pyth",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#pyth","aria-hidden":"true"},"#"),s(" Pyth")],-1),m=n("p",null,"Pyth is an Oracle used to get real-world financial and crypto market data. Pyth Oracle can be used by on-chain programs in consuming data for a variety of use cases.",-1),d=n("h2",{id:"how-to-use-pyth-in-client",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-use-pyth-in-client","aria-hidden":"true"},"#"),s(" How to use Pyth in Client")],-1),h=s("Pyth provides a JavaScript/TypeScript library called "),y=n("strong",null,"@pythnetwork/client",-1),_=s(". This library can be used to read on-chain Pyth Data for off-chain applications, such as displaying the Pyth price on a website. Learn more about this "),f={href:"https://www.npmjs.com/package/@pythnetwork/client",target:"_blank",rel:"noopener noreferrer"},g=s("here"),w=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" web3 "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" pyth "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@pythnetwork/client"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` diff --git a/docs/.vuepress/dist/assets/pyth.html.436ae8b9.js b/docs/.vuepress/dist/assets/pyth.html.2e623aa1.js similarity index 99% rename from docs/.vuepress/dist/assets/pyth.html.436ae8b9.js rename to docs/.vuepress/dist/assets/pyth.html.2e623aa1.js index 9a6a508c9..1f0d984b6 100644 --- a/docs/.vuepress/dist/assets/pyth.html.436ae8b9.js +++ b/docs/.vuepress/dist/assets/pyth.html.2e623aa1.js @@ -1,4 +1,4 @@ -import{_ as l,r as o,o as u,c as i,a as n,b as a,w as t,F as r,d as s}from"./app.cfdf84e7.js";const k={},b=n("h1",{id:"pyth",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#pyth","aria-hidden":"true"},"#"),s(" Pyth")],-1),m=n("p",null,"Pyth ist ein Oracle, mit dem reale Finanz- und Kryptomarktdaten abgerufen werden. Pyth Oracle kann von On-Chain-Programmen zum Konsumieren von Daten f\xFCr eine Vielzahl von Anwendungsf\xE4llen verwendet werden.",-1),d=n("h2",{id:"verwendung-von-pyth-im-client",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#verwendung-von-pyth-im-client","aria-hidden":"true"},"#"),s(" Verwendung von Pyth im Client")],-1),h=s("Pyth stellt eine JavaScript/TypeScript-Bibliothek namens "),y=n("strong",null,"@pythnetwork/client",-1),_=s(" bereit. Diese Bibliothek kann zum Lesen von On-Chain-Pyth-Daten f\xFCr Off-Chain-Anwendungen verwendet werden, z. B. zum Anzeigen des Pyth-Preises auf einer Website. Erfahren Sie mehr dar\xFCber "),g={href:"https://www.npmjs.com/package/@pythnetwork/client",target:"_blank",rel:"noopener noreferrer"},f=s("hier"),w=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" web3 "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +import{_ as l,r as o,o as u,c as i,a as n,b as a,w as t,F as r,d as s}from"./app.2fbb9e96.js";const k={},b=n("h1",{id:"pyth",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#pyth","aria-hidden":"true"},"#"),s(" Pyth")],-1),m=n("p",null,"Pyth ist ein Oracle, mit dem reale Finanz- und Kryptomarktdaten abgerufen werden. Pyth Oracle kann von On-Chain-Programmen zum Konsumieren von Daten f\xFCr eine Vielzahl von Anwendungsf\xE4llen verwendet werden.",-1),d=n("h2",{id:"verwendung-von-pyth-im-client",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#verwendung-von-pyth-im-client","aria-hidden":"true"},"#"),s(" Verwendung von Pyth im Client")],-1),h=s("Pyth stellt eine JavaScript/TypeScript-Bibliothek namens "),y=n("strong",null,"@pythnetwork/client",-1),_=s(" bereit. Diese Bibliothek kann zum Lesen von On-Chain-Pyth-Daten f\xFCr Off-Chain-Anwendungen verwendet werden, z. B. zum Anzeigen des Pyth-Preises auf einer Website. Erfahren Sie mehr dar\xFCber "),g={href:"https://www.npmjs.com/package/@pythnetwork/client",target:"_blank",rel:"noopener noreferrer"},f=s("hier"),w=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" web3 "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" pyth "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@pythnetwork/client"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` diff --git a/docs/.vuepress/dist/assets/pyth.html.06a5a080.js b/docs/.vuepress/dist/assets/pyth.html.30db177c.js similarity index 99% rename from docs/.vuepress/dist/assets/pyth.html.06a5a080.js rename to docs/.vuepress/dist/assets/pyth.html.30db177c.js index a5e5b3d90..1beff5e93 100644 --- a/docs/.vuepress/dist/assets/pyth.html.06a5a080.js +++ b/docs/.vuepress/dist/assets/pyth.html.30db177c.js @@ -1,4 +1,4 @@ -import{_ as l,r as o,o as u,c as i,a as n,b as a,w as t,F as r,d as s}from"./app.cfdf84e7.js";const k={},b=n("h1",{id:"pyth",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#pyth","aria-hidden":"true"},"#"),s(" Pyth")],-1),m=n("p",null,"Pyth est un Oracle utilis\xE9 pour obtenir des donn\xE9es financi\xE8res et des donn\xE9es sur le march\xE9 des crypto-monnaies dans le monde r\xE9el. L'Oracle de Pyth peut \xEAtre utilis\xE9 par les programmes on-chain afin d'utiliser des donn\xE9es dans divers cas d'utilisation.",-1),d=n("h2",{id:"comment-utiliser-pyth-dans-le-client",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#comment-utiliser-pyth-dans-le-client","aria-hidden":"true"},"#"),s(" Comment utiliser Pyth dans le Client")],-1),h=s("Pyth fournit une biblioth\xE8que JavaScript/TypeScript appel\xE9e "),y=n("strong",null,"@pythnetwork/client",-1),_=s(". Cette biblioth\xE8que peut \xEAtre utilis\xE9e pour lire les donn\xE9es on-chain de Pyth pour des applications off-chain, comme l'affichage du prix du jeton Pyth sur un site web. Plus d'informations \xE0 ce sujet "),f={href:"https://www.npmjs.com/package/@pythnetwork/client",target:"_blank",rel:"noopener noreferrer"},g=s("ici"),w=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" web3 "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +import{_ as l,r as o,o as u,c as i,a as n,b as a,w as t,F as r,d as s}from"./app.2fbb9e96.js";const k={},b=n("h1",{id:"pyth",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#pyth","aria-hidden":"true"},"#"),s(" Pyth")],-1),m=n("p",null,"Pyth est un Oracle utilis\xE9 pour obtenir des donn\xE9es financi\xE8res et des donn\xE9es sur le march\xE9 des crypto-monnaies dans le monde r\xE9el. L'Oracle de Pyth peut \xEAtre utilis\xE9 par les programmes on-chain afin d'utiliser des donn\xE9es dans divers cas d'utilisation.",-1),d=n("h2",{id:"comment-utiliser-pyth-dans-le-client",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#comment-utiliser-pyth-dans-le-client","aria-hidden":"true"},"#"),s(" Comment utiliser Pyth dans le Client")],-1),h=s("Pyth fournit une biblioth\xE8que JavaScript/TypeScript appel\xE9e "),y=n("strong",null,"@pythnetwork/client",-1),_=s(". Cette biblioth\xE8que peut \xEAtre utilis\xE9e pour lire les donn\xE9es on-chain de Pyth pour des applications off-chain, comme l'affichage du prix du jeton Pyth sur un site web. Plus d'informations \xE0 ce sujet "),f={href:"https://www.npmjs.com/package/@pythnetwork/client",target:"_blank",rel:"noopener noreferrer"},g=s("ici"),w=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" web3 "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" pyth "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@pythnetwork/client"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` diff --git a/docs/.vuepress/dist/assets/pyth.html.f216b027.js b/docs/.vuepress/dist/assets/pyth.html.ca4338c1.js similarity index 99% rename from docs/.vuepress/dist/assets/pyth.html.f216b027.js rename to docs/.vuepress/dist/assets/pyth.html.ca4338c1.js index 1209a24c3..781587f28 100644 --- a/docs/.vuepress/dist/assets/pyth.html.f216b027.js +++ b/docs/.vuepress/dist/assets/pyth.html.ca4338c1.js @@ -1,4 +1,4 @@ -import{_ as l,r as o,o as u,c as i,a as n,b as a,w as t,F as r,d as s}from"./app.cfdf84e7.js";const k={},b=n("h1",{id:"pyth",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#pyth","aria-hidden":"true"},"#"),s(" Pyth")],-1),m=n("p",null,"Pyth adalah Oracle yang digunakan untuk mendapatkan data pasar keuangan dan kripto. Pyth Oracle dapat digunakan oleh program on-chain dalam mengkonsumsi data untuk berbagai kasus penggunaan.",-1),d=n("h2",{id:"cara-menggunakan-pyth-di-client",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#cara-menggunakan-pyth-di-client","aria-hidden":"true"},"#"),s(" Cara Menggunakan Pyth di Client")],-1),h=s("Pyth menyediakan a JavaScript/TypeScript library yang disebut "),y=n("strong",null,"@pythnetwork/client",-1),_=s(". Librari ini bisa digunakan untuk membaca data on-chain untuk aplikasi off-chain, seperti menampilan harga Pyth di website. Pelajari lebih lanjut "),g={href:"https://www.npmjs.com/package/@pythnetwork/client",target:"_blank",rel:"noopener noreferrer"},f=s("here"),w=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" web3 "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +import{_ as l,r as o,o as u,c as i,a as n,b as a,w as t,F as r,d as s}from"./app.2fbb9e96.js";const k={},b=n("h1",{id:"pyth",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#pyth","aria-hidden":"true"},"#"),s(" Pyth")],-1),m=n("p",null,"Pyth adalah Oracle yang digunakan untuk mendapatkan data pasar keuangan dan kripto. Pyth Oracle dapat digunakan oleh program on-chain dalam mengkonsumsi data untuk berbagai kasus penggunaan.",-1),d=n("h2",{id:"cara-menggunakan-pyth-di-client",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#cara-menggunakan-pyth-di-client","aria-hidden":"true"},"#"),s(" Cara Menggunakan Pyth di Client")],-1),h=s("Pyth menyediakan a JavaScript/TypeScript library yang disebut "),y=n("strong",null,"@pythnetwork/client",-1),_=s(". Librari ini bisa digunakan untuk membaca data on-chain untuk aplikasi off-chain, seperti menampilan harga Pyth di website. Pelajari lebih lanjut "),g={href:"https://www.npmjs.com/package/@pythnetwork/client",target:"_blank",rel:"noopener noreferrer"},f=s("here"),w=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" web3 "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" pyth "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@pythnetwork/client"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` diff --git a/docs/.vuepress/dist/assets/pyth.html.e5157e23.js b/docs/.vuepress/dist/assets/pyth.html.edd0e7cd.js similarity index 99% rename from docs/.vuepress/dist/assets/pyth.html.e5157e23.js rename to docs/.vuepress/dist/assets/pyth.html.edd0e7cd.js index 48c4cdf3f..879326e6d 100644 --- a/docs/.vuepress/dist/assets/pyth.html.e5157e23.js +++ b/docs/.vuepress/dist/assets/pyth.html.edd0e7cd.js @@ -1,4 +1,4 @@ -import{_ as l,r as e,o as u,c as i,a as n,b as a,w as t,F as r,d as s}from"./app.cfdf84e7.js";const k={},b=n("h1",{id:"pyth",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#pyth","aria-hidden":"true"},"#"),s(" Pyth")],-1),m=n("p",null,"Pyth \u0E40\u0E1B\u0E47\u0E19 Oracle \u0E17\u0E35\u0E48\u0E40\u0E2D\u0E32\u0E44\u0E27\u0E49\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25 financial \u0E41\u0E25\u0E30 crypto market \u0E42\u0E14\u0E22 Pyth Oracle \u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 \u0E43\u0E0A\u0E49\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E14\u0E49 on-chain programs \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19\u0E17\u0E35\u0E48\u0E2B\u0E25\u0E32\u0E01\u0E2B\u0E25\u0E32\u0E22",-1),d=n("h2",{id:"\u0E27\u0E34\u0E18\u0E35\u0E43\u0E0A\u0E49-pyth-\u0E08\u0E32\u0E01-client",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E27\u0E34\u0E18\u0E35\u0E43\u0E0A\u0E49-pyth-\u0E08\u0E32\u0E01-client","aria-hidden":"true"},"#"),s(" \u0E27\u0E34\u0E18\u0E35\u0E43\u0E0A\u0E49 Pyth \u0E08\u0E32\u0E01 Client")],-1),h=s("Pyth \u0E21\u0E35 JavaScript/TypeScript library \u0E40\u0E23\u0E35\u0E22\u0E01\u0E27\u0E48\u0E32 "),y=n("strong",null,"@pythnetwork/client",-1),_=s(" \u0E0B\u0E36\u0E48\u0E07 library \u0E19\u0E35\u0E49\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E43\u0E0A\u0E49\u0E2D\u0E48\u0E32\u0E19 on-chain Pyth Data \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A off-chain app, \u0E40\u0E0A\u0E48\u0E19\u0E01\u0E32\u0E23\u0E41\u0E2A\u0E14\u0E07 Pyth price \u0E1A\u0E19 website. \u0E40\u0E23\u0E35\u0E22\u0E19\u0E23\u0E39\u0E49\u0E40\u0E1E\u0E34\u0E48\u0E21\u0E40\u0E15\u0E34\u0E21\u0E44\u0E14\u0E49 "),f={href:"https://www.npmjs.com/package/@pythnetwork/client",target:"_blank",rel:"noopener noreferrer"},g=s("\u0E17\u0E35\u0E48\u0E19\u0E35\u0E48"),w=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" web3 "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +import{_ as l,r as e,o as u,c as i,a as n,b as a,w as t,F as r,d as s}from"./app.2fbb9e96.js";const k={},b=n("h1",{id:"pyth",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#pyth","aria-hidden":"true"},"#"),s(" Pyth")],-1),m=n("p",null,"Pyth \u0E40\u0E1B\u0E47\u0E19 Oracle \u0E17\u0E35\u0E48\u0E40\u0E2D\u0E32\u0E44\u0E27\u0E49\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25 financial \u0E41\u0E25\u0E30 crypto market \u0E42\u0E14\u0E22 Pyth Oracle \u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 \u0E43\u0E0A\u0E49\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E14\u0E49 on-chain programs \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19\u0E17\u0E35\u0E48\u0E2B\u0E25\u0E32\u0E01\u0E2B\u0E25\u0E32\u0E22",-1),d=n("h2",{id:"\u0E27\u0E34\u0E18\u0E35\u0E43\u0E0A\u0E49-pyth-\u0E08\u0E32\u0E01-client",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E27\u0E34\u0E18\u0E35\u0E43\u0E0A\u0E49-pyth-\u0E08\u0E32\u0E01-client","aria-hidden":"true"},"#"),s(" \u0E27\u0E34\u0E18\u0E35\u0E43\u0E0A\u0E49 Pyth \u0E08\u0E32\u0E01 Client")],-1),h=s("Pyth \u0E21\u0E35 JavaScript/TypeScript library \u0E40\u0E23\u0E35\u0E22\u0E01\u0E27\u0E48\u0E32 "),y=n("strong",null,"@pythnetwork/client",-1),_=s(" \u0E0B\u0E36\u0E48\u0E07 library \u0E19\u0E35\u0E49\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E43\u0E0A\u0E49\u0E2D\u0E48\u0E32\u0E19 on-chain Pyth Data \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A off-chain app, \u0E40\u0E0A\u0E48\u0E19\u0E01\u0E32\u0E23\u0E41\u0E2A\u0E14\u0E07 Pyth price \u0E1A\u0E19 website. \u0E40\u0E23\u0E35\u0E22\u0E19\u0E23\u0E39\u0E49\u0E40\u0E1E\u0E34\u0E48\u0E21\u0E40\u0E15\u0E34\u0E21\u0E44\u0E14\u0E49 "),f={href:"https://www.npmjs.com/package/@pythnetwork/client",target:"_blank",rel:"noopener noreferrer"},g=s("\u0E17\u0E35\u0E48\u0E19\u0E35\u0E48"),w=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" web3 "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" pyth "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@pythnetwork/client"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` diff --git a/docs/.vuepress/dist/assets/pyth.html.bd384ffa.js b/docs/.vuepress/dist/assets/pyth.html.f34a4d6f.js similarity index 99% rename from docs/.vuepress/dist/assets/pyth.html.bd384ffa.js rename to docs/.vuepress/dist/assets/pyth.html.f34a4d6f.js index d3e1d6dd0..600e2d6f8 100644 --- a/docs/.vuepress/dist/assets/pyth.html.bd384ffa.js +++ b/docs/.vuepress/dist/assets/pyth.html.f34a4d6f.js @@ -1,4 +1,4 @@ -import{_ as l,r as e,o as u,c as i,a as n,b as a,w as t,F as r,d as s}from"./app.cfdf84e7.js";const k={},b=n("h1",{id:"pyth",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#pyth","aria-hidden":"true"},"#"),s(" Pyth")],-1),m=n("p",null,"Pyth is an Oracle used to get real-world financial and crypto market data. Pyth Oracle can be used by on-chain programs in consuming data for a variety of use cases.",-1),d=n("h2",{id:"how-to-use-pyth-in-client",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-use-pyth-in-client","aria-hidden":"true"},"#"),s(" How to use Pyth in Client")],-1),h=s("Pyth provides a JavaScript/TypeScript library called "),y=n("strong",null,"@pythnetwork/client",-1),_=s(". This library can be used to read on-chain Pyth Data for off-chain applications, such as displaying the Pyth price on a website. Learn more about this "),f={href:"https://www.npmjs.com/package/@pythnetwork/client",target:"_blank",rel:"noopener noreferrer"},g=s("here"),w=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" web3 "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +import{_ as l,r as e,o as u,c as i,a as n,b as a,w as t,F as r,d as s}from"./app.2fbb9e96.js";const k={},b=n("h1",{id:"pyth",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#pyth","aria-hidden":"true"},"#"),s(" Pyth")],-1),m=n("p",null,"Pyth is an Oracle used to get real-world financial and crypto market data. Pyth Oracle can be used by on-chain programs in consuming data for a variety of use cases.",-1),d=n("h2",{id:"how-to-use-pyth-in-client",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-use-pyth-in-client","aria-hidden":"true"},"#"),s(" How to use Pyth in Client")],-1),h=s("Pyth provides a JavaScript/TypeScript library called "),y=n("strong",null,"@pythnetwork/client",-1),_=s(". This library can be used to read on-chain Pyth Data for off-chain applications, such as displaying the Pyth price on a website. Learn more about this "),f={href:"https://www.npmjs.com/package/@pythnetwork/client",target:"_blank",rel:"noopener noreferrer"},g=s("here"),w=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" web3 "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" pyth "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@pythnetwork/client"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` diff --git a/docs/.vuepress/dist/assets/react-native.html.b2340292.js b/docs/.vuepress/dist/assets/react-native.html.192d957c.js similarity index 99% rename from docs/.vuepress/dist/assets/react-native.html.b2340292.js rename to docs/.vuepress/dist/assets/react-native.html.192d957c.js index f53be5169..3f7e7e69a 100644 --- a/docs/.vuepress/dist/assets/react-native.html.b2340292.js +++ b/docs/.vuepress/dist/assets/react-native.html.192d957c.js @@ -1,4 +1,4 @@ -import{_ as p,r as o,o as c,c as l,a as n,b as e,F as r,e as t,d as a}from"./app.cfdf84e7.js";const i={},u=t(`

    React Native \u0E41\u0E25\u0E30 Solana

    React Native \u0E40\u0E1B\u0E47\u0E19 open-source UI software framework \u0E43\u0E0A\u0E49\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A dev mobile, web \u0E41\u0E25\u0E30 desktop applications \u0E42\u0E14\u0E22\u0E19\u0E31\u0E01\u0E1E\u0E31\u0E12\u0E19\u0E32\u0E08\u0E30\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E43\u0E0A\u0E49 React framework \u0E01\u0E31\u0E1A native platform capabilities \u0E44\u0E14\u0E49 \u0E41\u0E25\u0E30\u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49\u0E01\u0E31\u0E1A Solana SDK \u0E08\u0E30\u0E40\u0E1B\u0E47\u0E19 platform \u0E17\u0E35\u0E48\u0E14\u0E35\u0E43\u0E19\u0E01\u0E32\u0E23\u0E2A\u0E23\u0E49\u0E32\u0E07 native Crypto apps.

    \u0E17\u0E32\u0E07\u0E17\u0E35\u0E48\u0E40\u0E23\u0E47\u0E27\u0E17\u0E35\u0E48\u0E2A\u0E38\u0E14\u0E43\u0E19\u0E01\u0E32\u0E23\u0E17\u0E35\u0E48\u0E08\u0E30\u0E40\u0E23\u0E34\u0E48\u0E21\u0E15\u0E49\u0E19\u0E01\u0E31\u0E1A React Native \u0E41\u0E25\u0E30 Solana \u0E04\u0E37\u0E2D\u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49 Solana DApp Scaffold \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A React Native.

    \u0E27\u0E34\u0E18\u0E35\u0E43\u0E0A\u0E49 @solana/web3.js \u0E43\u0E19 React Native app

    \u0E43\u0E19\u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E19\u0E35\u0E49\u0E40\u0E23\u0E32\u0E08\u0E30\u0E44\u0E14\u0E49\u0E40\u0E23\u0E35\u0E22\u0E19\u0E23\u0E39\u0E49\u0E27\u0E34\u0E18\u0E35\u0E01\u0E32\u0E23\u0E2A\u0E23\u0E49\u0E32\u0E07 React Native app, \u0E01\u0E32\u0E23\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07 \u0E41\u0E25\u0E30 configure @solana/web3.js SDK, \u0E41\u0E25\u0E30 dependencies \u0E15\u0E48\u0E32\u0E07\u0E46

    \u0E16\u0E49\u0E32\u0E40\u0E23\u0E32\u0E21\u0E35 app \u0E41\u0E25\u0E49\u0E27\u0E43\u0E2B\u0E49\u0E02\u0E49\u0E32\u0E21\u0E44\u0E1B\u0E17\u0E35\u0E48 \u0E01\u0E32\u0E23\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07 dependencies.

    \u0E2A\u0E23\u0E49\u0E32\u0E07 app \u0E43\u0E2B\u0E21\u0E48

    \u0E40\u0E23\u0E32\u0E08\u0E30\u0E40\u0E23\u0E34\u0E48\u0E21\u0E08\u0E32\u0E01\u0E01\u0E32\u0E23\u0E2A\u0E23\u0E49\u0E32\u0E07 React Native app \u0E42\u0E14\u0E22\u0E43\u0E0A\u0E49 TypeScript, \u0E41\u0E25\u0E49\u0E27 cd \u0E40\u0E02\u0E49\u0E32\u0E44\u0E1B\u0E43\u0E19 project directory, \u0E17\u0E35\u0E48\u0E17\u0E35\u0E48\u0E40\u0E23\u0E32\u0E08\u0E30 execute commands \u0E15\u0E48\u0E32\u0E07\u0E46.

    npx react-native init SolanaReactNative --template react-native-template-typescript
    +import{_ as p,r as o,o as c,c as l,a as n,b as e,F as r,e as t,d as a}from"./app.2fbb9e96.js";const i={},u=t(`

    React Native \u0E41\u0E25\u0E30 Solana

    React Native \u0E40\u0E1B\u0E47\u0E19 open-source UI software framework \u0E43\u0E0A\u0E49\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A dev mobile, web \u0E41\u0E25\u0E30 desktop applications \u0E42\u0E14\u0E22\u0E19\u0E31\u0E01\u0E1E\u0E31\u0E12\u0E19\u0E32\u0E08\u0E30\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E43\u0E0A\u0E49 React framework \u0E01\u0E31\u0E1A native platform capabilities \u0E44\u0E14\u0E49 \u0E41\u0E25\u0E30\u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49\u0E01\u0E31\u0E1A Solana SDK \u0E08\u0E30\u0E40\u0E1B\u0E47\u0E19 platform \u0E17\u0E35\u0E48\u0E14\u0E35\u0E43\u0E19\u0E01\u0E32\u0E23\u0E2A\u0E23\u0E49\u0E32\u0E07 native Crypto apps.

    \u0E17\u0E32\u0E07\u0E17\u0E35\u0E48\u0E40\u0E23\u0E47\u0E27\u0E17\u0E35\u0E48\u0E2A\u0E38\u0E14\u0E43\u0E19\u0E01\u0E32\u0E23\u0E17\u0E35\u0E48\u0E08\u0E30\u0E40\u0E23\u0E34\u0E48\u0E21\u0E15\u0E49\u0E19\u0E01\u0E31\u0E1A React Native \u0E41\u0E25\u0E30 Solana \u0E04\u0E37\u0E2D\u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49 Solana DApp Scaffold \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A React Native.

    \u0E27\u0E34\u0E18\u0E35\u0E43\u0E0A\u0E49 @solana/web3.js \u0E43\u0E19 React Native app

    \u0E43\u0E19\u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E19\u0E35\u0E49\u0E40\u0E23\u0E32\u0E08\u0E30\u0E44\u0E14\u0E49\u0E40\u0E23\u0E35\u0E22\u0E19\u0E23\u0E39\u0E49\u0E27\u0E34\u0E18\u0E35\u0E01\u0E32\u0E23\u0E2A\u0E23\u0E49\u0E32\u0E07 React Native app, \u0E01\u0E32\u0E23\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07 \u0E41\u0E25\u0E30 configure @solana/web3.js SDK, \u0E41\u0E25\u0E30 dependencies \u0E15\u0E48\u0E32\u0E07\u0E46

    \u0E16\u0E49\u0E32\u0E40\u0E23\u0E32\u0E21\u0E35 app \u0E41\u0E25\u0E49\u0E27\u0E43\u0E2B\u0E49\u0E02\u0E49\u0E32\u0E21\u0E44\u0E1B\u0E17\u0E35\u0E48 \u0E01\u0E32\u0E23\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07 dependencies.

    \u0E2A\u0E23\u0E49\u0E32\u0E07 app \u0E43\u0E2B\u0E21\u0E48

    \u0E40\u0E23\u0E32\u0E08\u0E30\u0E40\u0E23\u0E34\u0E48\u0E21\u0E08\u0E32\u0E01\u0E01\u0E32\u0E23\u0E2A\u0E23\u0E49\u0E32\u0E07 React Native app \u0E42\u0E14\u0E22\u0E43\u0E0A\u0E49 TypeScript, \u0E41\u0E25\u0E49\u0E27 cd \u0E40\u0E02\u0E49\u0E32\u0E44\u0E1B\u0E43\u0E19 project directory, \u0E17\u0E35\u0E48\u0E17\u0E35\u0E48\u0E40\u0E23\u0E32\u0E08\u0E30 execute commands \u0E15\u0E48\u0E32\u0E07\u0E46.

    npx react-native init SolanaReactNative --template react-native-template-typescript
     cd SolanaReactNative
     

    \u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07 dependencies

    \u0E15\u0E48\u0E2D\u0E44\u0E1B\u0E40\u0E23\u0E32\u0E08\u0E30\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07 dependencies. \u0E40\u0E21\u0E37\u0E48\u0E2D\u0E40\u0E23\u0E32\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07 Solana SDK, \u0E41\u0E25\u0E30\u0E19\u0E2D\u0E01\u0E08\u0E32\u0E01\u0E19\u0E49\u0E35\u0E40\u0E23\u0E32\u0E22\u0E31\u0E07\u0E08\u0E30\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07 package \u0E40\u0E1E\u0E37\u0E48\u0E2D patch metro configuration, \u0E41\u0E25\u0E30 polyfills 2 \u0E15\u0E31\u0E27\u0E17\u0E35\u0E48\u0E40\u0E2D\u0E32\u0E44\u0E27\u0E49 patch \u0E43\u0E19\u0E2A\u0E48\u0E27\u0E19\u0E02\u0E2D\u0E07 React Native environment.

    yarn add @solana/web3.js metro-config react-native-get-random-values react-native-url-polyfill
     

    Update index.js

    \u0E40\u0E1E\u0E37\u0E48\u0E2D load polyfills, \u0E40\u0E23\u0E32\u0E08\u0E30\u0E40\u0E1B\u0E34\u0E14 file index.js \u0E17\u0E35\u0E48 root \u0E02\u0E2D\u0E07 project \u0E41\u0E25\u0E30\u0E40\u0E1E\u0E34\u0E48\u0E21 2 \u0E1A\u0E23\u0E23\u0E17\u0E31\u0E14\u0E19\u0E35\u0E49\u0E40\u0E02\u0E49\u0E32\u0E44\u0E1B\u0E17\u0E35\u0E48 2 \u0E1A\u0E23\u0E23\u0E17\u0E31\u0E14\u0E41\u0E23\u0E01\u0E02\u0E2D\u0E07 file:

    import 'react-native-get-random-values';
    diff --git a/docs/.vuepress/dist/assets/react-native.html.6e38f883.js b/docs/.vuepress/dist/assets/react-native.html.20032395.js
    similarity index 99%
    rename from docs/.vuepress/dist/assets/react-native.html.6e38f883.js
    rename to docs/.vuepress/dist/assets/react-native.html.20032395.js
    index cad156c0d..6536a1066 100644
    --- a/docs/.vuepress/dist/assets/react-native.html.6e38f883.js
    +++ b/docs/.vuepress/dist/assets/react-native.html.20032395.js
    @@ -1,4 +1,4 @@
    -import{_ as p,r as o,o as c,c as i,a,b as e,F as l,e as t,d as n}from"./app.cfdf84e7.js";const r={},u=t(`

    React Native dan Solana

    React Native adalah kerangka kerja perangkat lunak UI sumber terbuka yang digunakan untuk mengembangkan aplikasi mobile, web, dan desktop dengan memungkinkan pengembang menggunakan kerangka kerja React bersama dengan kemampuan platform native. Didukung dengan Solana SDK, ini adalah platform hebat untuk dengan cepat membangun aplikasi Crypto native yang berkinerja baik.

    Cara tercepat untuk memulai dengan React Native dan Solana adalah dengan menggunakan Solana DApp Scaffold untuk React Native.

    Cara Pakai @solana/web3.js di React Native app

    Dalam tutorial ini Anda akan belajar cara membuat aplikasi React Native baru dan menginstal dan mengonfigurasi SDK @solana/web3.js, dan dependensinya.

    Jika Anda sudah memiliki aplikasi, lewati ke instalasi dependensi.

    Buat aplikasi baru

    Kita memulai aplikasi React Native baru yang menggunakan TypeScript, lalu cd ke direktori proyek, di mana kita akan mengeksekusi sisa perintah.

    npx react-native init SolanaReactNative --template react-native-template-typescript
    +import{_ as p,r as o,o as c,c as i,a,b as e,F as l,e as t,d as n}from"./app.2fbb9e96.js";const r={},u=t(`

    React Native dan Solana

    React Native adalah kerangka kerja perangkat lunak UI sumber terbuka yang digunakan untuk mengembangkan aplikasi mobile, web, dan desktop dengan memungkinkan pengembang menggunakan kerangka kerja React bersama dengan kemampuan platform native. Didukung dengan Solana SDK, ini adalah platform hebat untuk dengan cepat membangun aplikasi Crypto native yang berkinerja baik.

    Cara tercepat untuk memulai dengan React Native dan Solana adalah dengan menggunakan Solana DApp Scaffold untuk React Native.

    Cara Pakai @solana/web3.js di React Native app

    Dalam tutorial ini Anda akan belajar cara membuat aplikasi React Native baru dan menginstal dan mengonfigurasi SDK @solana/web3.js, dan dependensinya.

    Jika Anda sudah memiliki aplikasi, lewati ke instalasi dependensi.

    Buat aplikasi baru

    Kita memulai aplikasi React Native baru yang menggunakan TypeScript, lalu cd ke direktori proyek, di mana kita akan mengeksekusi sisa perintah.

    npx react-native init SolanaReactNative --template react-native-template-typescript
     cd SolanaReactNative
     

    Install dependensi

    Selanjutnya, kita menginstal dependensi. kita menginstal Solana SDK, dan sebagai tambahan kita menginstal sebuah paket untuk menambal konfigurasi metro, dan dua polyfill yang menambal lingkungan React Native.

    yarn add @solana/web3.js metro-config react-native-get-random-values react-native-url-polyfill
     

    Update index.js

    Untuk load polyfills, kita buka file index.js di root proyek dan tambahkan 2 baris berikut di bagian paling atas file:

    import 'react-native-get-random-values';
    diff --git a/docs/.vuepress/dist/assets/react-native.html.86a2f8e1.js b/docs/.vuepress/dist/assets/react-native.html.4e30041b.js
    similarity index 99%
    rename from docs/.vuepress/dist/assets/react-native.html.86a2f8e1.js
    rename to docs/.vuepress/dist/assets/react-native.html.4e30041b.js
    index 6b6359b30..5374cc861 100644
    --- a/docs/.vuepress/dist/assets/react-native.html.86a2f8e1.js
    +++ b/docs/.vuepress/dist/assets/react-native.html.4e30041b.js
    @@ -1,4 +1,4 @@
    -import{_ as p,r as o,o as c,c as i,a as n,b as e,F as l,e as t,d as a}from"./app.cfdf84e7.js";const r={},u=t(`

    React Native and Solana

    React Native is an open-source UI software framework used to develop mobile, web and desktop applications by enabling developers to use the React framework along with native platform capabilities. Powered with the Solana SDK, this is a great platform to quickly build performant native Crypto apps.

    The fastest way to start with React Native and Solana is by using the Solana DApp Scaffold for React Native.

    How to use @solana/web3.js in a React Native app

    In this tutorial you will learn how to create a new React Native app and install and configure the @solana/web3.js SDK, and its dependencies.

    If you already have an existing app, skip to installing the dependencies.

    Create a new app

    We start a new React Native application that uses TypeScript, then cd into the project directory, where we will execute the rest of the commands.

    npx react-native@0.70.0 init SolanaReactNative --template react-native-template-typescript
    +import{_ as p,r as o,o as c,c as i,a as n,b as e,F as l,e as t,d as a}from"./app.2fbb9e96.js";const r={},u=t(`

    React Native and Solana

    React Native is an open-source UI software framework used to develop mobile, web and desktop applications by enabling developers to use the React framework along with native platform capabilities. Powered with the Solana SDK, this is a great platform to quickly build performant native Crypto apps.

    The fastest way to start with React Native and Solana is by using the Solana DApp Scaffold for React Native.

    How to use @solana/web3.js in a React Native app

    In this tutorial you will learn how to create a new React Native app and install and configure the @solana/web3.js SDK, and its dependencies.

    If you already have an existing app, skip to installing the dependencies.

    Create a new app

    We start a new React Native application that uses TypeScript, then cd into the project directory, where we will execute the rest of the commands.

    npx react-native@0.70.0 init SolanaReactNative --template react-native-template-typescript
     cd SolanaReactNative
     

    Install dependencies

    Next, we install the dependencies. The Solana JavaScript SDK, a package to patch the React Native build system (Metro), a secure random number generator, and a fix to patch React Native's missing URL class.

    yarn add \\
       @solana/web3.js \\
    diff --git a/docs/.vuepress/dist/assets/react-native.html.453fd391.js b/docs/.vuepress/dist/assets/react-native.html.8e2cf68d.js
    similarity index 99%
    rename from docs/.vuepress/dist/assets/react-native.html.453fd391.js
    rename to docs/.vuepress/dist/assets/react-native.html.8e2cf68d.js
    index 7e8466765..abf0dd651 100644
    --- a/docs/.vuepress/dist/assets/react-native.html.453fd391.js
    +++ b/docs/.vuepress/dist/assets/react-native.html.8e2cf68d.js
    @@ -1,4 +1,4 @@
    -import{_ as p,r as o,o as c,c as l,a as n,b as e,F as i,e as t,d as a}from"./app.cfdf84e7.js";const r={},u=t(`

    React Native and Solana

    React Native is an open-source UI software framework used to develop mobile, web and desktop applications by enabling developers to use the React framework along with native platform capabilities. Powered with the Solana SDK, this is a great platform to quickly build performant native Crypto apps.

    The fastest way to start with React Native and Solana is by using the Solana DApp Scaffold for React Native.

    How to use @solana/web3.js in a React Native app

    In this tutorial you will learn how to create a new React Native app and install and configure the @solana/web3.js SDK, and its dependencies.

    If you already have an existing app, skip to installing the dependencies.

    Create a new app

    We start a new React Native application that uses TypeScript, then cd into the project directory, where we will execute the rest of the commands.

    npx react-native init SolanaReactNative --template react-native-template-typescript
    +import{_ as p,r as o,o as c,c as l,a as n,b as e,F as i,e as t,d as a}from"./app.2fbb9e96.js";const r={},u=t(`

    React Native and Solana

    React Native is an open-source UI software framework used to develop mobile, web and desktop applications by enabling developers to use the React framework along with native platform capabilities. Powered with the Solana SDK, this is a great platform to quickly build performant native Crypto apps.

    The fastest way to start with React Native and Solana is by using the Solana DApp Scaffold for React Native.

    How to use @solana/web3.js in a React Native app

    In this tutorial you will learn how to create a new React Native app and install and configure the @solana/web3.js SDK, and its dependencies.

    If you already have an existing app, skip to installing the dependencies.

    Create a new app

    We start a new React Native application that uses TypeScript, then cd into the project directory, where we will execute the rest of the commands.

    npx react-native init SolanaReactNative --template react-native-template-typescript
     cd SolanaReactNative
     

    Install dependencies

    Next, we install the dependencies. We install the Solana SDK, and in addition we install a package to patch the metro configuration, and two polyfills that patch the React Native environment.

    yarn add @solana/web3.js metro-config react-native-get-random-values react-native-url-polyfill
     

    Update index.js

    To load the polyfills, we open the file index.js in the root of the project and add the following two lines to the top of the file:

    import 'react-native-get-random-values';
    diff --git a/docs/.vuepress/dist/assets/react-native.html.c1e070c2.js b/docs/.vuepress/dist/assets/react-native.html.d0862c32.js
    similarity index 99%
    rename from docs/.vuepress/dist/assets/react-native.html.c1e070c2.js
    rename to docs/.vuepress/dist/assets/react-native.html.d0862c32.js
    index d52738d59..88c2b1599 100644
    --- a/docs/.vuepress/dist/assets/react-native.html.c1e070c2.js
    +++ b/docs/.vuepress/dist/assets/react-native.html.d0862c32.js
    @@ -1,4 +1,4 @@
    -import{_ as p,r as o,o as c,c as l,a as n,b as e,F as r,e as t,d as a}from"./app.cfdf84e7.js";const i={},u=t(`

    React Native et Solana

    React Native est un framework UI open-source utilis\xE9 pour d\xE9velopper des applications mobiles, web et de bureau permettant aux d\xE9veloppeurs d'utiliser le framework React avec les fonctionnalit\xE9s natives de ces plateformes. Gr\xE2ce \xE0 Solana SDK, il s'agit d'une excellente plateforme pour cr\xE9er rapidement des applications Crypto natives performantes.

    La fa\xE7on la plus rapide de commencer avec React Native et Solana est d'utiliser le Solana DApp Scaffold for React Native.

    Comment utiliser @solana/web3.js dans une application React Native

    Dans ce tutoriel, vous apprendrez \xE0 cr\xE9er une nouvelle application React Native et \xE0 installer et configurer le SDK @solana/web3.js, ainsi que ses d\xE9pendances.

    Si vous avez d\xE9j\xE0 une application existante, passez directement \xE0 l'installation des d\xE9pendances.

    Cr\xE9er une nouvelle application

    Nous d\xE9marrons une nouvelle application React Native qui utilise TypeScript, puis ex\xE9cutons la commande cd vers le r\xE9pertoire du projet o\xF9 nous allons ex\xE9cuter le reste des commandes.

    npx react-native@0.70.0 init SolanaReactNative --template react-native-template-typescript
    +import{_ as p,r as o,o as c,c as l,a as n,b as e,F as r,e as t,d as a}from"./app.2fbb9e96.js";const i={},u=t(`

    React Native et Solana

    React Native est un framework UI open-source utilis\xE9 pour d\xE9velopper des applications mobiles, web et de bureau permettant aux d\xE9veloppeurs d'utiliser le framework React avec les fonctionnalit\xE9s natives de ces plateformes. Gr\xE2ce \xE0 Solana SDK, il s'agit d'une excellente plateforme pour cr\xE9er rapidement des applications Crypto natives performantes.

    La fa\xE7on la plus rapide de commencer avec React Native et Solana est d'utiliser le Solana DApp Scaffold for React Native.

    Comment utiliser @solana/web3.js dans une application React Native

    Dans ce tutoriel, vous apprendrez \xE0 cr\xE9er une nouvelle application React Native et \xE0 installer et configurer le SDK @solana/web3.js, ainsi que ses d\xE9pendances.

    Si vous avez d\xE9j\xE0 une application existante, passez directement \xE0 l'installation des d\xE9pendances.

    Cr\xE9er une nouvelle application

    Nous d\xE9marrons une nouvelle application React Native qui utilise TypeScript, puis ex\xE9cutons la commande cd vers le r\xE9pertoire du projet o\xF9 nous allons ex\xE9cuter le reste des commandes.

    npx react-native@0.70.0 init SolanaReactNative --template react-native-template-typescript
     cd SolanaReactNative
     

    Installer les d\xE9pendances

    Ensuite, nous installons les d\xE9pendances. \xC0 savoir, le SDK JavaScript de Solana, un paquet pour corriger le syst\xE8me de compilation de React Native (Metro), un g\xE9n\xE9rateur de nombres al\xE9atoires s\xE9curis\xE9, et un correctif pour corriger la classe URL manquante de React Native.

    yarn add \\
       @solana/web3.js \\
    diff --git a/docs/.vuepress/dist/assets/react-native.html.bc9438a7.js b/docs/.vuepress/dist/assets/react-native.html.e8b4a92a.js
    similarity index 99%
    rename from docs/.vuepress/dist/assets/react-native.html.bc9438a7.js
    rename to docs/.vuepress/dist/assets/react-native.html.e8b4a92a.js
    index 4a5ab3634..259a2c0ac 100644
    --- a/docs/.vuepress/dist/assets/react-native.html.bc9438a7.js
    +++ b/docs/.vuepress/dist/assets/react-native.html.e8b4a92a.js
    @@ -1,4 +1,4 @@
    -import{_ as p,r as i,o,c,a,b as e,F as r,e as t,d as n}from"./app.cfdf84e7.js";const l={},u=t(`

    React Native und Solana

    React Native ist ein Open-Source-UI-Software-Framework, das zur Entwicklung von Mobil-, Web- und Desktop-Anwendungen verwendet wird, indem es Entwicklern erm\xF6glicht, das React-Framework zusammen mit nativen Plattformfunktionen zu verwenden. Mit dem Solana SDK ausgestattet, ist dies eine gro\xDFartige Plattform, um schnell leistungsstarke native Crypto-Apps zu erstellen.

    Der schnellste Weg, um mit React Native und Solana zu beginnen, ist die Verwendung des Solana DApp Scaffold for React Native.

    How to use @solana/web3.js in a React Native app

    In diesem Tutorial erfahren Sie, wie Sie eine neue React Native-App erstellen und das SDK \u201E@solana/web3.js\u201C und seine Abh\xE4ngigkeiten installieren und konfigurieren.

    Wenn Sie bereits \xFCber eine vorhandene App verf\xFCgen, fahren Sie mit Installation der Abh\xE4ngigkeiten fort.

    Erstellen Sie eine neue Anwendung

    Wir starten eine neue React Native-Anwendung, die TypeScript verwendet, dann cd in das Projektverzeichnis, wo wir den Rest der Befehle ausf\xFChren werden.

    npx react-native@0.70.0 init SolanaReactNative --template react-native-template-typescript
    +import{_ as p,r as i,o,c,a,b as e,F as r,e as t,d as n}from"./app.2fbb9e96.js";const l={},u=t(`

    React Native und Solana

    React Native ist ein Open-Source-UI-Software-Framework, das zur Entwicklung von Mobil-, Web- und Desktop-Anwendungen verwendet wird, indem es Entwicklern erm\xF6glicht, das React-Framework zusammen mit nativen Plattformfunktionen zu verwenden. Mit dem Solana SDK ausgestattet, ist dies eine gro\xDFartige Plattform, um schnell leistungsstarke native Crypto-Apps zu erstellen.

    Der schnellste Weg, um mit React Native und Solana zu beginnen, ist die Verwendung des Solana DApp Scaffold for React Native.

    How to use @solana/web3.js in a React Native app

    In diesem Tutorial erfahren Sie, wie Sie eine neue React Native-App erstellen und das SDK \u201E@solana/web3.js\u201C und seine Abh\xE4ngigkeiten installieren und konfigurieren.

    Wenn Sie bereits \xFCber eine vorhandene App verf\xFCgen, fahren Sie mit Installation der Abh\xE4ngigkeiten fort.

    Erstellen Sie eine neue Anwendung

    Wir starten eine neue React Native-Anwendung, die TypeScript verwendet, dann cd in das Projektverzeichnis, wo wir den Rest der Befehle ausf\xFChren werden.

    npx react-native@0.70.0 init SolanaReactNative --template react-native-template-typescript
     cd SolanaReactNative
     

    Abh\xE4ngigkeiten installieren

    Als n\xE4chstes installieren wir die Abh\xE4ngigkeiten. Das Solana JavaScript SDK, ein Paket zum Patchen des React Native Build-Systems (Metro), ein sicherer Zufallszahlengenerator und ein Fix zum Patchen der fehlenden \u201EURL\u201C-Klasse von React Native.

    yarn add \\
       @solana/web3.js \\
    diff --git a/docs/.vuepress/dist/assets/retrying-transactions.html.5bd8a8b2.js b/docs/.vuepress/dist/assets/retrying-transactions.html.5fd1bc68.js
    similarity index 99%
    rename from docs/.vuepress/dist/assets/retrying-transactions.html.5bd8a8b2.js
    rename to docs/.vuepress/dist/assets/retrying-transactions.html.5fd1bc68.js
    index e247bfd6a..9c8eba0b1 100644
    --- a/docs/.vuepress/dist/assets/retrying-transactions.html.5bd8a8b2.js
    +++ b/docs/.vuepress/dist/assets/retrying-transactions.html.5fd1bc68.js
    @@ -1,4 +1,4 @@
    -import{_ as p,r as a,o as d,c as h,a as n,b as e,w as o,F as u,d as t,e as r}from"./app.cfdf84e7.js";var _="/assets/tx-journey.dd6310be.png",k="/assets/tpu-jito-labs.8bb32fb6.png",b="/assets/dropped-via-rpc-pool.8d1ce9af.png",f="/assets/dropped-minority-fork-pre-process.555653e1.png",m="/assets/dropped-minority-fork-post-process.48c3c955.png";const g={},w=n("h1",{id:"retrying-transactions",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#retrying-transactions","aria-hidden":"true"},"#"),t(" Retrying Transactions")],-1),y=t("On some occasions, a seemingly valid transaction may be dropped before it is included in a block. This most often occurs during periods of network congestion, when an RPC node fails to rebroadcast the transaction to the "),v={href:"https://docs.solana.com/terminology#leader",target:"_blank",rel:"noopener noreferrer"},T=t("leader"),P=t(". To an end-user, it may appear as if their transaction disappears entirely. While RPC nodes are equipped with a generic rebroadcasting algorithm, application developers are also capable of developing their own custom rebroadcasting logic."),x=r('

    Facts

    Fact Sheet

    • RPC nodes will attempt to rebroadcast transactions using a generic algorithm
    • Application developers can implement their own custom rebroadcasting logic
    • Developers should take advantage of the maxRetries parameter on the sendTransaction JSON-RPC method
    • Developers should enable preflight checks to raise errors before transactions are submitted
    • Before re-signing any transaction, it is very important to ensure that the initial transaction\u2019s blockhash has expired

    The Journey of a Transaction

    How Clients Submit Transactions

    In Solana, there is no concept of a mempool. All transactions, whether they are initiated programmatically or by an end-user, are efficiently routed to leaders so that they can be processed into a block. There are two main ways in which a transaction can be sent to leaders:

    ',5),R=t("By proxy via an RPC server and the "),C={href:"https://docs.solana.com/developing/clients/jsonrpc-api#sendtransaction",target:"_blank",rel:"noopener noreferrer"},B=t("sendTransaction"),S=t(" JSON-RPC method"),L=t("Directly to leaders via a "),I={href:"https://docs.rs/solana-client/1.7.3/solana_client/tpu_client/index.html",target:"_blank",rel:"noopener noreferrer"},j=t("TPU Client"),z=n("p",null,"The vast majority of end-users will submit transactions via an RPC server. When a client submits a transaction, the receiving RPC node will in turn attempt to broadcast the transaction to both the current and next leaders. Until the transaction is processed by a leader, there is no record of the transaction outside of what the client and the relaying RPC nodes are aware of. In the case of a TPU client, rebroadcast and leader forwarding is handled entirely by the client software.",-1),A=n("p",null,[n("img",{src:_,alt:"Transaction Journey"})],-1),H=n("h3",{id:"how-rpc-nodes-broadcast-transactions",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-rpc-nodes-broadcast-transactions","aria-hidden":"true"},"#"),t(" How RPC Nodes Broadcast Transactions")],-1),D=t("After an RPC node receives a transaction via "),q=n("code",null,"sendTransaction",-1),F=t(", it will convert the transaction into a "),V={href:"https://en.wikipedia.org/wiki/User_Datagram_Protocol",target:"_blank",rel:"noopener noreferrer"},W=t("UDP"),O=t(" packet before forwarding it to the relevant leaders. UDP allows validators to quickly communicate with one another, but does not provide any guarantees regarding transaction delivery."),U=t("Because Solana\u2019s leader schedule is known in advance of every "),E={href:"https://docs.solana.com/terminology#epoch",target:"_blank",rel:"noopener noreferrer"},K=t("epoch"),N=t(" (~2 days), an RPC node will broadcast its transaction directly to the current and next leaders. This is in contrast to other gossip protocols such as Ethereum that propagate transactions randomly and broadly across the entire network. By default, RPC nodes will try to forward transactions to leaders every two seconds until either the transaction is finalized or the transaction\u2019s blockhash expires (150 blocks or ~1 minute 19 seconds as of the time of this writing). If the outstanding rebroadcast queue size is greater than "),J={href:"https://github.com/solana-labs/solana/blob/bfbbc53dac93b3a5c6be9b4b65f679fdb13e41d9/send-transaction-service/src/send_transaction_service.rs#L20",target:"_blank",rel:"noopener noreferrer"},M=t("10,000 transactions"),G=t(", newly submitted transactions are dropped. There are command-line "),Y={href:"https://github.com/solana-labs/solana/blob/bfbbc53dac93b3a5c6be9b4b65f679fdb13e41d9/validator/src/main.rs#L1172",target:"_blank",rel:"noopener noreferrer"},Q=t("arguments"),X=t(" that RPC operators can adjust to change the default behavior of this retry logic."),Z=t("When an RPC node broadcasts a transaction, it will attempt to forward the transaction to a leader\u2019s "),$={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/validator.rs#L867",target:"_blank",rel:"noopener noreferrer"},nn=t("Transaction Processing Unit (TPU)"),tn=t(". The TPU processes transactions in five distinct phases:"),en={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/fetch_stage.rs#L21",target:"_blank",rel:"noopener noreferrer"},sn=t("Fetch Stage"),an={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/tpu.rs#L91",target:"_blank",rel:"noopener noreferrer"},on=t("SigVerify Stage"),rn={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/banking_stage.rs#L249",target:"_blank",rel:"noopener noreferrer"},cn=t("Banking Stage"),ln={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/poh/src/poh_service.rs",target:"_blank",rel:"noopener noreferrer"},pn=t("Proof of History Service"),dn={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/tpu.rs#L136",target:"_blank",rel:"noopener noreferrer"},hn=t("Broadcast Stage"),un=n("p",null,[n("img",{src:k,alt:"TPU Overview"}),n("small",{style:{display:"block","text-align":"center"}},"Image Courtesy of Jito Labs")],-1),_n=n("p",null,"Of these five phases, the Fetch Stage is responsible for receiving transactions. Within the Fetch Stage, validators will categorize incoming transactions according to three ports:",-1),kn={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/gossip/src/contact_info.rs#L27",target:"_blank",rel:"noopener noreferrer"},bn=t("tpu"),fn=t(" handles regular transactions such as token transfers, NFT mints, and program instructions"),mn={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/gossip/src/contact_info.rs#L31",target:"_blank",rel:"noopener noreferrer"},gn=t("tpu_vote"),wn=t(" focuses exclusively on voting transactions"),yn={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/gossip/src/contact_info.rs#L29",target:"_blank",rel:"noopener noreferrer"},vn=t("tpu_forwards"),Tn=t(" forwards unprocessed packets to the next leader if the current leader is unable to process all transactions"),Pn=t("For more information on the TPU, please refer to "),xn={href:"https://jito-labs.medium.com/solana-validator-101-transaction-processing-90bcdc271143",target:"_blank",rel:"noopener noreferrer"},Rn=t("this excellent writeup by Jito Labs"),Cn=t("."),Bn=n("h2",{id:"how-transactions-get-dropped",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-transactions-get-dropped","aria-hidden":"true"},"#"),t(" How Transactions Get Dropped")],-1),Sn=n("p",null,"Throughout a transaction\u2019s journey, there are a few scenarios in which the transaction can be unintentionally dropped from the network.",-1),Ln=n("h3",{id:"before-a-transaction-is-processed",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#before-a-transaction-is-processed","aria-hidden":"true"},"#"),t(" Before a transaction is processed")],-1),In=t("If the network drops a transaction, it will most likely do so before the transaction is processed by a leader. UDP "),jn={href:"https://en.wikipedia.org/wiki/Packet_loss",target:"_blank",rel:"noopener noreferrer"},zn=t("packet loss"),An=t(" is the simplest reason why this might occur. During times of intense network load, it\u2019s also possible for validators to become overwhelmed by the sheer number of transactions required for processing. While validators are equipped to forward surplus transactions via "),Hn=n("code",null,"tpu_forwards",-1),Dn=t(", there is a limit to the amount of data that can be "),qn={href:"https://github.com/solana-labs/solana/blob/master/core/src/banking_stage.rs#L389",target:"_blank",rel:"noopener noreferrer"},Fn=t("forwarded"),Vn=t(". Furthermore, each forward is limited to a single hop between validators. That is, transactions received on the "),Wn=n("code",null,"tpu_forwards",-1),On=t(" port are not forwarded on to other validators."),Un=t("There are also two lesser known reasons why a transaction may be dropped before it is processed. The first scenario involves transactions that are submitted via an RPC pool. Occasionally, part of the RPC pool can be sufficiently ahead of the rest of the pool. This can cause issues when nodes within the pool are required to work together. In this example, the transaction\u2019s "),En={href:"https://docs.solana.com/developing/programming-model/transactions#recent-blockhash",target:"_blank",rel:"noopener noreferrer"},Kn=t("recentBlockhash"),Nn=t(" is queried from the advanced part of the pool (Backend A). When the transaction is submitted to the lagging part of the pool (Backend B), the nodes will not recognize the advanced blockhash and will drop the transaction. This can be detected upon transaction submission if developers enable "),Jn={href:"https://docs.solana.com/developing/clients/jsonrpc-api#sendtransaction",target:"_blank",rel:"noopener noreferrer"},Mn=t("preflight checks"),Gn=t(" on "),Yn=n("code",null,"sendTransaction",-1),Qn=t("."),Xn=r('

    Dropped via RPC Pool

    Temporarily network forks can also result in dropped transactions. If a validator is slow to replay its blocks within the Banking Stage, it may end up creating a minority fork. When a client builds a transaction, it\u2019s possible for the transaction to reference a recentBlockhash that only exists on the minority fork. After the transaction is submitted, the cluster can then switch away from its minority fork before the transaction is processed. In this scenario, the transaction is dropped due to the blockhash not being found.

    Dropped due to Minority Fork (Before Processed)

    After a transaction is processed and before it is finalized

    In the event a transaction references a recentBlockhash from a minority fork, it\u2019s still possible for the transaction to be processed. In this case, however, it would be processed by the leader on the minority fork. When this leader attempts to share its processed transactions with the rest of the network, it would fail to reach consensus with the majority of validators that do not recognize the minority fork. At this time, the transaction would be dropped before it could be finalized.

    Dropped due to Minority Fork (After Processed)

    Handling Dropped Transactions

    While RPC nodes will attempt to rebroadcast transactions, the algorithm they employ is generic and often ill-suited for the needs of specific applications. To prepare for times of network congestion, application developers should customize their own rebroadcasting logic.

    An In-Depth Look at sendTransaction

    When it comes to submitting transactions, the sendTransaction RPC method is the primary tool available to developers. sendTransaction is only responsible for relaying a transaction from a client to an RPC node. If the node receives the transaction, sendTransaction will return the transaction id that can be used to track the transaction. A successful response does not indicate whether the transaction will be processed or finalized by the cluster.

    ',10),Zn={class:"custom-container tip"},$n=n("p",{class:"custom-container-title"},"TIP",-1),nt=n("h4",{id:"request-parameters",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#request-parameters","aria-hidden":"true"},"#"),t(" Request Parameters")],-1),tt=n("li",null,[n("code",null,"transaction"),t(": "),n("code",null,"string"),t(" - fully-signed Transaction, as encoded string")],-1),et=t("(optional) "),st=n("code",null,"configuration object",-1),at=t(": "),ot=n("code",null,"object",-1),rt=n("li",null,[n("code",null,"skipPreflight"),t(": "),n("code",null,"boolean"),t(" - if true, skip the preflight transaction checks (default: false)")],-1),it=t("(optional) "),ct=n("code",null,"preflightCommitment",-1),lt=t(": "),pt=n("code",null,"string",-1),dt=t(" - "),ht={href:"https://docs.solana.com/developing/clients/jsonrpc-api#configuring-state-commitment",target:"_blank",rel:"noopener noreferrer"},ut=t("Commitment"),_t=t(' level to use for preflight simulations against the bank slot (default: "finalized").'),kt=n("li",null,[t("(optional) "),n("code",null,"encoding"),t(": "),n("code",null,"string"),t(' - Encoding used for the transaction data. Either "base58" (slow), or "base64". (default: "base58").')],-1),bt=n("li",null,[t("(optional) "),n("code",null,"maxRetries"),t(": "),n("code",null,"usize"),t(" - Maximum number of times for the RPC node to retry sending the transaction to the leader. If this parameter is not provided, the RPC node will retry the transaction until it is finalized or until the blockhash expires.")],-1),ft=n("h4",{id:"response",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#response","aria-hidden":"true"},"#"),t(" Response")],-1),mt=n("code",null,"transaction id",-1),gt=t(": "),wt=n("code",null,"string",-1),yt=t(" - First transaction signature embedded in the transaction, as base-58 encoded string. This transaction id can be used with "),vt={href:"https://docs.solana.com/developing/clients/jsonrpc-api#getsignaturestatuses",target:"_blank",rel:"noopener noreferrer"},Tt=t("getSignatureStatuses"),Pt=t(" to poll for status updates."),xt=n("h2",{id:"customizing-rebroadcast-logic",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#customizing-rebroadcast-logic","aria-hidden":"true"},"#"),t(" Customizing Rebroadcast Logic")],-1),Rt=t("In order to develop their own rebroadcasting logic, developers should take advantage of "),Ct=n("code",null,"sendTransaction",-1),Bt=t("\u2019s "),St=n("code",null,"maxRetries",-1),Lt=t(" parameter. If provided, "),It=n("code",null,"maxRetries",-1),jt=t(" will override an RPC node\u2019s default retry logic, allowing developers to manually control the retry process "),zt={href:"https://github.com/solana-labs/solana/blob/98707baec2385a4f7114d2167ef6dfb1406f954f/validator/src/main.rs#L1258-L1274",target:"_blank",rel:"noopener noreferrer"},At=t("within reasonable bounds"),Ht=t("."),Dt=t("A common pattern for manually retrying transactions involves temporarily storing the "),qt=n("code",null,"lastValidBlockHeight",-1),Ft=t(" that comes from "),Vt={href:"https://docs.solana.com/developing/clients/jsonrpc-api#getlatestblockhash",target:"_blank",rel:"noopener noreferrer"},Wt=t("getLatestBlockhash"),Ot=t(". Once stashed, an application can then "),Ut={href:"https://docs.solana.com/developing/clients/jsonrpc-api#getblockheight",target:"_blank",rel:"noopener noreferrer"},Et=t("poll the cluster\u2019s blockheight"),Kt=t(" and manually retry the transaction at an appropriate interval. In times of network congestion, it\u2019s advantageous to set "),Nt=n("code",null,"maxRetries",-1),Jt=t(" to 0 and manually rebroadcast via a custom algorithm. While some applications may employ an "),Mt={href:"https://en.wikipedia.org/wiki/Exponential_backoff",target:"_blank",rel:"noopener noreferrer"},Gt=t("exponential backoff"),Yt=t(" algorithm, others such as "),Qt={href:"https://www.mango.markets/",target:"_blank",rel:"noopener noreferrer"},Xt=t("Mango"),Zt=t(" opt to "),$t={href:"https://github.com/blockworks-foundation/mango-ui/blob/b6abfc6c13b71fc17ebbe766f50b8215fa1ec54f/src/utils/send.tsx#L713",target:"_blank",rel:"noopener noreferrer"},ne=t("continuously resubmit"),te=t(" transactions at a constant interval until some timeout has occurred."),ee=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),t(),n("span",{class:"token punctuation"},"{"),t(` +import{_ as p,r as a,o as d,c as h,a as n,b as e,w as o,F as u,d as t,e as r}from"./app.2fbb9e96.js";var _="/assets/tx-journey.dd6310be.png",k="/assets/tpu-jito-labs.8bb32fb6.png",b="/assets/dropped-via-rpc-pool.8d1ce9af.png",f="/assets/dropped-minority-fork-pre-process.555653e1.png",m="/assets/dropped-minority-fork-post-process.48c3c955.png";const g={},w=n("h1",{id:"retrying-transactions",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#retrying-transactions","aria-hidden":"true"},"#"),t(" Retrying Transactions")],-1),y=t("On some occasions, a seemingly valid transaction may be dropped before it is included in a block. This most often occurs during periods of network congestion, when an RPC node fails to rebroadcast the transaction to the "),v={href:"https://docs.solana.com/terminology#leader",target:"_blank",rel:"noopener noreferrer"},T=t("leader"),P=t(". To an end-user, it may appear as if their transaction disappears entirely. While RPC nodes are equipped with a generic rebroadcasting algorithm, application developers are also capable of developing their own custom rebroadcasting logic."),x=r('

    Facts

    Fact Sheet

    • RPC nodes will attempt to rebroadcast transactions using a generic algorithm
    • Application developers can implement their own custom rebroadcasting logic
    • Developers should take advantage of the maxRetries parameter on the sendTransaction JSON-RPC method
    • Developers should enable preflight checks to raise errors before transactions are submitted
    • Before re-signing any transaction, it is very important to ensure that the initial transaction\u2019s blockhash has expired

    The Journey of a Transaction

    How Clients Submit Transactions

    In Solana, there is no concept of a mempool. All transactions, whether they are initiated programmatically or by an end-user, are efficiently routed to leaders so that they can be processed into a block. There are two main ways in which a transaction can be sent to leaders:

    ',5),R=t("By proxy via an RPC server and the "),C={href:"https://docs.solana.com/developing/clients/jsonrpc-api#sendtransaction",target:"_blank",rel:"noopener noreferrer"},B=t("sendTransaction"),S=t(" JSON-RPC method"),L=t("Directly to leaders via a "),I={href:"https://docs.rs/solana-client/1.7.3/solana_client/tpu_client/index.html",target:"_blank",rel:"noopener noreferrer"},j=t("TPU Client"),z=n("p",null,"The vast majority of end-users will submit transactions via an RPC server. When a client submits a transaction, the receiving RPC node will in turn attempt to broadcast the transaction to both the current and next leaders. Until the transaction is processed by a leader, there is no record of the transaction outside of what the client and the relaying RPC nodes are aware of. In the case of a TPU client, rebroadcast and leader forwarding is handled entirely by the client software.",-1),A=n("p",null,[n("img",{src:_,alt:"Transaction Journey"})],-1),H=n("h3",{id:"how-rpc-nodes-broadcast-transactions",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-rpc-nodes-broadcast-transactions","aria-hidden":"true"},"#"),t(" How RPC Nodes Broadcast Transactions")],-1),D=t("After an RPC node receives a transaction via "),q=n("code",null,"sendTransaction",-1),F=t(", it will convert the transaction into a "),V={href:"https://en.wikipedia.org/wiki/User_Datagram_Protocol",target:"_blank",rel:"noopener noreferrer"},W=t("UDP"),O=t(" packet before forwarding it to the relevant leaders. UDP allows validators to quickly communicate with one another, but does not provide any guarantees regarding transaction delivery."),U=t("Because Solana\u2019s leader schedule is known in advance of every "),E={href:"https://docs.solana.com/terminology#epoch",target:"_blank",rel:"noopener noreferrer"},K=t("epoch"),N=t(" (~2 days), an RPC node will broadcast its transaction directly to the current and next leaders. This is in contrast to other gossip protocols such as Ethereum that propagate transactions randomly and broadly across the entire network. By default, RPC nodes will try to forward transactions to leaders every two seconds until either the transaction is finalized or the transaction\u2019s blockhash expires (150 blocks or ~1 minute 19 seconds as of the time of this writing). If the outstanding rebroadcast queue size is greater than "),J={href:"https://github.com/solana-labs/solana/blob/bfbbc53dac93b3a5c6be9b4b65f679fdb13e41d9/send-transaction-service/src/send_transaction_service.rs#L20",target:"_blank",rel:"noopener noreferrer"},M=t("10,000 transactions"),G=t(", newly submitted transactions are dropped. There are command-line "),Y={href:"https://github.com/solana-labs/solana/blob/bfbbc53dac93b3a5c6be9b4b65f679fdb13e41d9/validator/src/main.rs#L1172",target:"_blank",rel:"noopener noreferrer"},Q=t("arguments"),X=t(" that RPC operators can adjust to change the default behavior of this retry logic."),Z=t("When an RPC node broadcasts a transaction, it will attempt to forward the transaction to a leader\u2019s "),$={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/validator.rs#L867",target:"_blank",rel:"noopener noreferrer"},nn=t("Transaction Processing Unit (TPU)"),tn=t(". The TPU processes transactions in five distinct phases:"),en={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/fetch_stage.rs#L21",target:"_blank",rel:"noopener noreferrer"},sn=t("Fetch Stage"),an={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/tpu.rs#L91",target:"_blank",rel:"noopener noreferrer"},on=t("SigVerify Stage"),rn={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/banking_stage.rs#L249",target:"_blank",rel:"noopener noreferrer"},cn=t("Banking Stage"),ln={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/poh/src/poh_service.rs",target:"_blank",rel:"noopener noreferrer"},pn=t("Proof of History Service"),dn={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/tpu.rs#L136",target:"_blank",rel:"noopener noreferrer"},hn=t("Broadcast Stage"),un=n("p",null,[n("img",{src:k,alt:"TPU Overview"}),n("small",{style:{display:"block","text-align":"center"}},"Image Courtesy of Jito Labs")],-1),_n=n("p",null,"Of these five phases, the Fetch Stage is responsible for receiving transactions. Within the Fetch Stage, validators will categorize incoming transactions according to three ports:",-1),kn={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/gossip/src/contact_info.rs#L27",target:"_blank",rel:"noopener noreferrer"},bn=t("tpu"),fn=t(" handles regular transactions such as token transfers, NFT mints, and program instructions"),mn={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/gossip/src/contact_info.rs#L31",target:"_blank",rel:"noopener noreferrer"},gn=t("tpu_vote"),wn=t(" focuses exclusively on voting transactions"),yn={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/gossip/src/contact_info.rs#L29",target:"_blank",rel:"noopener noreferrer"},vn=t("tpu_forwards"),Tn=t(" forwards unprocessed packets to the next leader if the current leader is unable to process all transactions"),Pn=t("For more information on the TPU, please refer to "),xn={href:"https://jito-labs.medium.com/solana-validator-101-transaction-processing-90bcdc271143",target:"_blank",rel:"noopener noreferrer"},Rn=t("this excellent writeup by Jito Labs"),Cn=t("."),Bn=n("h2",{id:"how-transactions-get-dropped",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-transactions-get-dropped","aria-hidden":"true"},"#"),t(" How Transactions Get Dropped")],-1),Sn=n("p",null,"Throughout a transaction\u2019s journey, there are a few scenarios in which the transaction can be unintentionally dropped from the network.",-1),Ln=n("h3",{id:"before-a-transaction-is-processed",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#before-a-transaction-is-processed","aria-hidden":"true"},"#"),t(" Before a transaction is processed")],-1),In=t("If the network drops a transaction, it will most likely do so before the transaction is processed by a leader. UDP "),jn={href:"https://en.wikipedia.org/wiki/Packet_loss",target:"_blank",rel:"noopener noreferrer"},zn=t("packet loss"),An=t(" is the simplest reason why this might occur. During times of intense network load, it\u2019s also possible for validators to become overwhelmed by the sheer number of transactions required for processing. While validators are equipped to forward surplus transactions via "),Hn=n("code",null,"tpu_forwards",-1),Dn=t(", there is a limit to the amount of data that can be "),qn={href:"https://github.com/solana-labs/solana/blob/master/core/src/banking_stage.rs#L389",target:"_blank",rel:"noopener noreferrer"},Fn=t("forwarded"),Vn=t(". Furthermore, each forward is limited to a single hop between validators. That is, transactions received on the "),Wn=n("code",null,"tpu_forwards",-1),On=t(" port are not forwarded on to other validators."),Un=t("There are also two lesser known reasons why a transaction may be dropped before it is processed. The first scenario involves transactions that are submitted via an RPC pool. Occasionally, part of the RPC pool can be sufficiently ahead of the rest of the pool. This can cause issues when nodes within the pool are required to work together. In this example, the transaction\u2019s "),En={href:"https://docs.solana.com/developing/programming-model/transactions#recent-blockhash",target:"_blank",rel:"noopener noreferrer"},Kn=t("recentBlockhash"),Nn=t(" is queried from the advanced part of the pool (Backend A). When the transaction is submitted to the lagging part of the pool (Backend B), the nodes will not recognize the advanced blockhash and will drop the transaction. This can be detected upon transaction submission if developers enable "),Jn={href:"https://docs.solana.com/developing/clients/jsonrpc-api#sendtransaction",target:"_blank",rel:"noopener noreferrer"},Mn=t("preflight checks"),Gn=t(" on "),Yn=n("code",null,"sendTransaction",-1),Qn=t("."),Xn=r('

    Dropped via RPC Pool

    Temporarily network forks can also result in dropped transactions. If a validator is slow to replay its blocks within the Banking Stage, it may end up creating a minority fork. When a client builds a transaction, it\u2019s possible for the transaction to reference a recentBlockhash that only exists on the minority fork. After the transaction is submitted, the cluster can then switch away from its minority fork before the transaction is processed. In this scenario, the transaction is dropped due to the blockhash not being found.

    Dropped due to Minority Fork (Before Processed)

    After a transaction is processed and before it is finalized

    In the event a transaction references a recentBlockhash from a minority fork, it\u2019s still possible for the transaction to be processed. In this case, however, it would be processed by the leader on the minority fork. When this leader attempts to share its processed transactions with the rest of the network, it would fail to reach consensus with the majority of validators that do not recognize the minority fork. At this time, the transaction would be dropped before it could be finalized.

    Dropped due to Minority Fork (After Processed)

    Handling Dropped Transactions

    While RPC nodes will attempt to rebroadcast transactions, the algorithm they employ is generic and often ill-suited for the needs of specific applications. To prepare for times of network congestion, application developers should customize their own rebroadcasting logic.

    An In-Depth Look at sendTransaction

    When it comes to submitting transactions, the sendTransaction RPC method is the primary tool available to developers. sendTransaction is only responsible for relaying a transaction from a client to an RPC node. If the node receives the transaction, sendTransaction will return the transaction id that can be used to track the transaction. A successful response does not indicate whether the transaction will be processed or finalized by the cluster.

    ',10),Zn={class:"custom-container tip"},$n=n("p",{class:"custom-container-title"},"TIP",-1),nt=n("h4",{id:"request-parameters",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#request-parameters","aria-hidden":"true"},"#"),t(" Request Parameters")],-1),tt=n("li",null,[n("code",null,"transaction"),t(": "),n("code",null,"string"),t(" - fully-signed Transaction, as encoded string")],-1),et=t("(optional) "),st=n("code",null,"configuration object",-1),at=t(": "),ot=n("code",null,"object",-1),rt=n("li",null,[n("code",null,"skipPreflight"),t(": "),n("code",null,"boolean"),t(" - if true, skip the preflight transaction checks (default: false)")],-1),it=t("(optional) "),ct=n("code",null,"preflightCommitment",-1),lt=t(": "),pt=n("code",null,"string",-1),dt=t(" - "),ht={href:"https://docs.solana.com/developing/clients/jsonrpc-api#configuring-state-commitment",target:"_blank",rel:"noopener noreferrer"},ut=t("Commitment"),_t=t(' level to use for preflight simulations against the bank slot (default: "finalized").'),kt=n("li",null,[t("(optional) "),n("code",null,"encoding"),t(": "),n("code",null,"string"),t(' - Encoding used for the transaction data. Either "base58" (slow), or "base64". (default: "base58").')],-1),bt=n("li",null,[t("(optional) "),n("code",null,"maxRetries"),t(": "),n("code",null,"usize"),t(" - Maximum number of times for the RPC node to retry sending the transaction to the leader. If this parameter is not provided, the RPC node will retry the transaction until it is finalized or until the blockhash expires.")],-1),ft=n("h4",{id:"response",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#response","aria-hidden":"true"},"#"),t(" Response")],-1),mt=n("code",null,"transaction id",-1),gt=t(": "),wt=n("code",null,"string",-1),yt=t(" - First transaction signature embedded in the transaction, as base-58 encoded string. This transaction id can be used with "),vt={href:"https://docs.solana.com/developing/clients/jsonrpc-api#getsignaturestatuses",target:"_blank",rel:"noopener noreferrer"},Tt=t("getSignatureStatuses"),Pt=t(" to poll for status updates."),xt=n("h2",{id:"customizing-rebroadcast-logic",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#customizing-rebroadcast-logic","aria-hidden":"true"},"#"),t(" Customizing Rebroadcast Logic")],-1),Rt=t("In order to develop their own rebroadcasting logic, developers should take advantage of "),Ct=n("code",null,"sendTransaction",-1),Bt=t("\u2019s "),St=n("code",null,"maxRetries",-1),Lt=t(" parameter. If provided, "),It=n("code",null,"maxRetries",-1),jt=t(" will override an RPC node\u2019s default retry logic, allowing developers to manually control the retry process "),zt={href:"https://github.com/solana-labs/solana/blob/98707baec2385a4f7114d2167ef6dfb1406f954f/validator/src/main.rs#L1258-L1274",target:"_blank",rel:"noopener noreferrer"},At=t("within reasonable bounds"),Ht=t("."),Dt=t("A common pattern for manually retrying transactions involves temporarily storing the "),qt=n("code",null,"lastValidBlockHeight",-1),Ft=t(" that comes from "),Vt={href:"https://docs.solana.com/developing/clients/jsonrpc-api#getlatestblockhash",target:"_blank",rel:"noopener noreferrer"},Wt=t("getLatestBlockhash"),Ot=t(". Once stashed, an application can then "),Ut={href:"https://docs.solana.com/developing/clients/jsonrpc-api#getblockheight",target:"_blank",rel:"noopener noreferrer"},Et=t("poll the cluster\u2019s blockheight"),Kt=t(" and manually retry the transaction at an appropriate interval. In times of network congestion, it\u2019s advantageous to set "),Nt=n("code",null,"maxRetries",-1),Jt=t(" to 0 and manually rebroadcast via a custom algorithm. While some applications may employ an "),Mt={href:"https://en.wikipedia.org/wiki/Exponential_backoff",target:"_blank",rel:"noopener noreferrer"},Gt=t("exponential backoff"),Yt=t(" algorithm, others such as "),Qt={href:"https://www.mango.markets/",target:"_blank",rel:"noopener noreferrer"},Xt=t("Mango"),Zt=t(" opt to "),$t={href:"https://github.com/blockworks-foundation/mango-ui/blob/b6abfc6c13b71fc17ebbe766f50b8215fa1ec54f/src/utils/send.tsx#L713",target:"_blank",rel:"noopener noreferrer"},ne=t("continuously resubmit"),te=t(" transactions at a constant interval until some timeout has occurred."),ee=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),t(),n("span",{class:"token punctuation"},"{"),t(` Keypair`),n("span",{class:"token punctuation"},","),t(` Connection`),n("span",{class:"token punctuation"},","),t(` `),n("span",{class:"token constant"},"LAMPORTS_PER_SOL"),n("span",{class:"token punctuation"},","),t(` diff --git a/docs/.vuepress/dist/assets/retrying-transactions.html.d46f8106.js b/docs/.vuepress/dist/assets/retrying-transactions.html.6089e242.js similarity index 99% rename from docs/.vuepress/dist/assets/retrying-transactions.html.d46f8106.js rename to docs/.vuepress/dist/assets/retrying-transactions.html.6089e242.js index c01154fce..15b7892ce 100644 --- a/docs/.vuepress/dist/assets/retrying-transactions.html.d46f8106.js +++ b/docs/.vuepress/dist/assets/retrying-transactions.html.6089e242.js @@ -1,4 +1,4 @@ -import{_ as d,r as a,o as u,c as p,a as e,b as s,w as o,F as h,e as r,d as n}from"./app.cfdf84e7.js";var k="/assets/tx-journey.dd6310be.png",b="/assets/tpu-jito-labs.8bb32fb6.png",g="/assets/dropped-via-rpc-pool.8d1ce9af.png",_="/assets/dropped-minority-fork-pre-process.555653e1.png",m="/assets/dropped-minority-fork-post-process.48c3c955.png";const f={},w=r('

    Die Reise einer Transaktion

    In einigen F\xE4llen kann eine scheinbar g\xFCltige Transaktion verworfen werden, bevor sie in einen Block aufgenommen wird. Dies tritt am h\xE4ufigsten in Zeiten von Netzwerk\xFCberlastung auf, wenn ein RPC-Knoten die Transaktion nicht erneut an den [Leader] (https://docs.solana.com/terminology#leader) sendet. F\xFCr einen Endbenutzer kann es so aussehen, als w\xFCrde seine Transaktion vollst\xE4ndig verschwinden. W\xE4hrend RPC-Knoten mit einem generischen Rebroadcasting-Algorithmus ausgestattet sind, sind Anwendungsentwickler auch in der Lage, ihre eigene benutzerdefinierte Rebroadcasting-Logik zu entwickeln.

    Fakten

    Fact Sheet

    • RPC-Knoten versuchen, Transaktionen unter Verwendung eines generischen Algorithmus erneut auszusenden
    • Anwendungsentwickler k\xF6nnen ihre eigene benutzerdefinierte Rebroadcasting-Logik implementieren
    • Entwickler sollten den Parameter "maxRetries" in der JSON-RPC-Methode "sendTransaction" nutzen
    • Entwickler sollten Preflight-Pr\xFCfungen aktivieren, um Fehler zu melden, bevor Transaktionen \xFCbermittelt werden
    • Bevor Sie eine Transaktion neu signieren, ist es sehr wichtig sicherzustellen, dass der Blockhash der urspr\xFCnglichen Transaktion abgelaufen ist

    Die Reise einer Transaktion

    Wie Anwender Transaktionen \xFCbermitteln

    In Solana gibt es kein Konzept eines Mempools. Alle Transaktionen, ob programmgesteuert oder von einem Endbenutzer initiiert, werden effizient an Leader weitergeleitet, damit sie in einem Block verarbeitet werden k\xF6nnen. Es gibt zwei Hauptwege, auf denen eine Transaktion an F\xFChrungskr\xE4fte gesendet werden kann:

    ',7),v=n("Per Proxy \xFCber einen RPC-Server und die JSON-RPC-Methode "),T={href:"https://docs.solana.com/developing/clients/jsonrpc-api#sendtransaction",target:"_blank",rel:"noopener noreferrer"},z=n("sendTransaction"),P=n("."),y=e("li",null,"Direkt zu F\xFChrungskr\xE4ften \xFCber einen [TPU-Client] (https://docs.rs/solana-client/1.7.3/solana_client/tpu_client/index.html)",-1),B=e("p",null,"Die \xFCberwiegende Mehrheit der Endbenutzer \xFCbermittelt Transaktionen \xFCber einen RPC-Server. Wenn ein Client eine Transaktion \xFCbermittelt, versucht der empfangende RPC-Knoten wiederum, die Transaktion sowohl an den aktuellen als auch an den n\xE4chsten Leader zu senden. Bis die Transaktion von einem Leader verarbeitet wird, gibt es keine Aufzeichnung der Transaktion au\xDFerhalb dessen, was dem Client und den weiterleitenden RPC-Knoten bekannt ist. Im Fall eines TPU-Clients wird das Rebroadcasting und die Leader-Weiterleitung vollst\xE4ndig von der Client-Software gehandhabt.",-1),L=e("p",null,[e("img",{src:k,alt:"Transaction Journey"})],-1),R=e("h3",{id:"wie-rpc-knoten-transaktionen-senden",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#wie-rpc-knoten-transaktionen-senden","aria-hidden":"true"},"#"),n(" Wie RPC-Knoten Transaktionen senden")],-1),C=n("Nachdem ein RPC-Knoten eine Transaktion \xFCber \u201EsendTransaction\u201C empfangen hat, konvertiert er die Transaktion in ein "),S={href:"https://en.wikipedia.org/wiki/User_Datagram_Protocol",target:"_blank",rel:"noopener noreferrer"},x=n("UDP"),A=n("-Paket, bevor er es an die relevanten Leader weiterleitet. UDP erm\xF6glicht es Validatoren, schnell miteinander zu kommunizieren, bietet jedoch keine Garantien f\xFCr die Transaktionszustellung."),K=n("Da Solanas Leader-Zeitplan vor jeder "),F={href:"https://docs.solana.com/terminology#epoch",target:"_blank",rel:"noopener noreferrer"},W=n("Epoche"),E=n(" (~2 Tage) bekannt ist, sendet ein RPC-Knoten seine Transaktion direkt an die aktuellen und n\xE4chsten Leader. Dies steht im Gegensatz zu anderen Klatschprotokollen wie Ethereum, die Transaktionen zuf\xE4llig und breit \xFCber das gesamte Netzwerk verbreiten. Standardm\xE4\xDFig versuchen RPC-Knoten alle zwei Sekunden, Transaktionen an Leader weiterzuleiten, bis entweder die Transaktion abgeschlossen ist oder der Blockhash der Transaktion abl\xE4uft (150 Bl\xF6cke oder ~1 Minute 19 Sekunden zum Zeitpunkt des Schreibens dieses Artikels). Wenn die Gr\xF6\xDFe der ausstehenden Rebroadcast-Warteschlange gr\xF6\xDFer als "),V={href:"https://github.com/solana-labs/solana/blob/bfbbc53dac93b3a5c6be9b4b65f679fdb13e41d9/send-transaction-service/src/send_transaction_service.rs#L20",target:"_blank",rel:"noopener noreferrer"},D=n("10.000 Transaktionen"),I=n(" ist, werden neu \xFCbermittelte Transaktionen fallengelassen. Es gibt Befehlszeilen-"),M={href:"https://github.com/solana-labs/solana/blob/bfbbc53dac93b3a5c6be9b4b65f679fdb13e41d9/validator/src/main.rs#L1172",target:"_blank",rel:"noopener noreferrer"},N=n("Argumente"),j=n(", die die Logik der RPC-Operatoren anpassen k\xF6nnen, um das Standardverhalten dieser Wiederholung zu \xE4ndern."),U=n("Wenn ein RPC-Knoten eine Transaktion sendet, versucht er, die Transaktion an die "),H={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/validator.rs#L867",target:"_blank",rel:"noopener noreferrer"},G=n("Transaction Processing Unit (TPU)"),Z=n(" eines Leaders weiterzuleiten . Die TPU verarbeitet Transaktionen in f\xFCnf verschiedenen Phasen:"),q={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/fetch_stage.rs#L21",target:"_blank",rel:"noopener noreferrer"},O=n("Fetch Stage"),J={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/tpu.rs#L91",target:"_blank",rel:"noopener noreferrer"},Y=n("SigVerify Stage"),Q={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/banking_stage.rs#L249",target:"_blank",rel:"noopener noreferrer"},X=n("Banking Stage"),$={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/poh/src/poh_service.rs",target:"_blank",rel:"noopener noreferrer"},ee=n("Proof of History Service"),ne={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/tpu.rs#L136",target:"_blank",rel:"noopener noreferrer"},se=n("Broadcast Stage"),te=e("p",null,[e("img",{src:b,alt:"TPU Overview"}),e("small",{style:{display:"block","text-align":"center"}},"Image Courtesy of Jito Labs")],-1),ae=e("p",null,"Von diesen f\xFCnf Phasen ist die Fetch-Phase f\xFCr den Empfang von Transaktionen verantwortlich. Innerhalb der Fetch-Phase kategorisieren Validatoren eingehende Transaktionen nach drei Ports:",-1),oe={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/gossip/src/contact_info.rs#L27",target:"_blank",rel:"noopener noreferrer"},re=n("tpu"),ie=n(" verarbeitet regelm\xE4\xDFige Transaktionen wie Token-Transfers, NFT-Mints und Programmanweisungen"),ce={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/gossip/src/contact_info.rs#L31",target:"_blank",rel:"noopener noreferrer"},le=n("tpu_vote"),de=n(" konzentriert sich ausschlie\xDFlich auf Stimmrechtsgesch\xE4fte"),ue={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/gossip/src/contact_info.rs#L29",target:"_blank",rel:"noopener noreferrer"},pe=n("tpu_forwards"),he=n(" leitet unverarbeitete Pakete an den n\xE4chsten Leader weiter, wenn der aktuelle Leader nicht in der Lage ist, alle Transaktionen zu verarbeiten"),ke=n("Weitere Informationen zum TPU finden Sie unter "),be={href:"https://jito-labs.medium.com/solana-validator-101-transaction-processing-90bcdc271143",target:"_blank",rel:"noopener noreferrer"},ge=n("dieser hervorragenden Beschreibung von Jito Labs"),_e=n("."),me=e("h2",{id:"wie-transaktionen-verworfen-werden",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#wie-transaktionen-verworfen-werden","aria-hidden":"true"},"#"),n(" Wie Transaktionen verworfen werden")],-1),fe=e("p",null,"W\xE4hrend der Reise einer Transaktion gibt es einige Szenarien, in denen die Transaktion unbeabsichtigt aus dem Netzwerk fallen gelassen werden kann.",-1),we=e("h3",{id:"bevor-eine-transaktion-verarbeitet-wird",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#bevor-eine-transaktion-verarbeitet-wird","aria-hidden":"true"},"#"),n(" Bevor eine Transaktion verarbeitet wird")],-1),ve=n("Wenn das Netzwerk eine Transaktion verwirft, wird es dies h\xF6chstwahrscheinlich tun, bevor die Transaktion von einem Leader verarbeitet wird. UDP "),Te={href:"https://en.wikipedia.org/wiki/Packet_loss",target:"_blank",rel:"noopener noreferrer"},ze=n("Paketverlust"),Pe=n(" ist der einfachste Grund, warum dies auftreten kann. In Zeiten intensiver Netzwerklast ist es auch m\xF6glich, dass Validierer von der schieren Anzahl der f\xFCr die Verarbeitung erforderlichen Transaktionen \xFCberw\xE4ltigt werden. W\xE4hrend Validatoren in der Lage sind, \xFCbersch\xFCssige Transaktionen \xFCber "),ye=e("code",null,"tpu_forwards",-1),Be=n(" weiterzuleiten, gibt es eine Grenze f\xFCr die Datenmenge, die "),Le={href:"https://github.com/solana-labs/solana/blob/master/core/src/banking_stage.rs#L389",target:"_blank",rel:"noopener noreferrer"},Re=n("weitergeleitet"),Ce=n(" werden kann . Dar\xFCber hinaus ist jede Weiterleitung auf einen einzelnen Sprung zwischen Pr\xFCfern beschr\xE4nkt. Das hei\xDFt, Transaktionen, die auf dem "),Se=e("code",null,"tpu_forwards",-1),xe=n("-Port empfangen werden, werden nicht an andere Validatoren weitergeleitet."),Ae=n("Es gibt auch zwei weniger bekannte Gr\xFCnde, warum eine Transaktion verworfen werden kann, bevor sie verarbeitet wird. Das erste Szenario umfasst Transaktionen, die \xFCber einen RPC-Pool \xFCbermittelt werden. Gelegentlich kann ein Teil des RPC-Pools dem Rest des Pools ausreichend voraus sein. Dies kann zu Problemen f\xFChren, wenn Knoten innerhalb des Pools zusammenarbeiten m\xFCssen. In diesem Beispiel wird der "),Ke={href:"https://docs.solana.com/developing/programming-model/transactions#recent-blockhash",target:"_blank",rel:"noopener noreferrer"},Fe=n("recentBlockhash"),We=n(" der Transaktion aus dem erweiterten Teil des Pools (Backend A) abgefragt. Wenn die Transaktion an den verz\xF6gerten Teil des Pools (Backend B) gesendet wird, erkennen die Knoten den erweiterten Blockhash nicht und verwerfen die Transaktion. Dies kann bei der Transaktions\xFCbermittlung erkannt werden, wenn Entwickler "),Ee={href:"https://docs.solana.com/developing/clients/jsonrpc-api#sendtransaction",target:"_blank",rel:"noopener noreferrer"},Ve=n("Preflight-Pr\xFCfungen"),De=n(" f\xFCr "),Ie=e("code",null,"sendTransaction",-1),Me=n(" aktivieren."),Ne=r('

    \xDCber RPC Pool gel\xF6scht

    Vor\xFCbergehende Netzwerk-Forks k\xF6nnen auch zu abgebrochenen Transaktionen f\xFChren. Wenn ein Validator seine Bl\xF6cke innerhalb der Banking-Phase nur langsam wiedergibt, kann er am Ende einen Minority Fork erstellen. Wenn ein Client eine Transaktion erstellt, ist es m\xF6glich, dass die Transaktion auf einen recentBlockhash verweist, der nur auf dem Minority Fork existiert. Nachdem die Transaktion \xFCbermittelt wurde, kann der Cluster von seinem Minority Fork wegschalten, bevor die Transaktion verarbeitet wird. In diesem Szenario wird die Transaktion verworfen, weil der Blockhash nicht gefunden wird.

    Aufgrund von Minority Fork fallen gelassen (vor der Verarbeitung)

    Nachdem eine Transaktion verarbeitet wurde und bevor sie abgeschlossen wird

    F\xFCr den Fall, dass eine Transaktion auf einen \u201ErecentBlockhash\u201C von einem Minority Fork verweist, ist es immer noch m\xF6glich, dass die Transaktion verarbeitet wird. In diesem Fall w\xFCrde es jedoch vom Leader auf dem Minority Fork verarbeitet. Wenn dieser Anf\xFChrer versucht, seine verarbeiteten Transaktionen mit dem Rest des Netzwerks zu teilen, w\xFCrde er keinen Konsens mit der Mehrheit der Validatoren erzielen, die den Minority Fork nicht anerkennen. Zu diesem Zeitpunkt w\xFCrde die Transaktion fallen gelassen, bevor sie abgeschlossen werden k\xF6nnte.

    Gefallen aufgrund von Minority Fork (nach Verarbeitung)

    Umgang mit abgebrochenen Transaktionen

    W\xE4hrend RPC-Knoten versuchen, Transaktionen erneut zu \xFCbertragen, ist der von ihnen verwendete Algorithmus generisch und oft f\xFCr die Anforderungen bestimmter Anwendungen ungeeignet. Um sich auf Zeiten der Netzwerk\xFCberlastung vorzubereiten, sollten Anwendungsentwickler ihre eigene Rebroadcasting-Logik anpassen.

    Ein eingehender Blick in sendTransaction

    Wenn es um das Senden von Transaktionen geht, ist die RPC-Methode sendTransaction das prim\xE4re Tool, das Entwicklern zur Verf\xFCgung steht. sendTransaction ist nur f\xFCr die Weiterleitung einer Transaktion von einem Client an einen RPC-Knoten verantwortlich. Wenn der Knoten die Transaktion empf\xE4ngt, gibt sendTransaction die Transaktions-ID zur\xFCck, die zum Verfolgen der Transaktion verwendet werden kann. Eine erfolgreiche Antwort zeigt nicht an, ob die Transaktion vom Cluster verarbeitet oder abgeschlossen wird.

    ',10),je={class:"custom-container tip"},Ue=e("p",{class:"custom-container-title"},"TIP",-1),He=e("h4",{id:"request-parameters",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#request-parameters","aria-hidden":"true"},"#"),n(" Request Parameters")],-1),Ge=e("li",null,[e("code",null,"transaction"),n(": "),e("code",null,"string"),n(" - vollst\xE4ndig signierte Transaktion als verschl\xFCsselte Zeichenfolge")],-1),Ze=n("(optional) "),qe=e("code",null,"Konfigurationsobjekt",-1),Oe=n(": "),Je=e("code",null,"Objekt",-1),Ye=e("li",null,[e("code",null,"skipPreflight"),n(": "),e("code",null,"boolean"),n(" - wenn wahr, die Preflight-Transaktionspr\xFCfungen \xFCberspringen (Standard: falsch)")],-1),Qe=n("(optional) "),Xe=e("code",null,"preflightCommitment",-1),$e=n(": "),en=e("code",null,"string",-1),nn=n(" - "),sn={href:"https://docs.solana.com/developing/clients/jsonrpc-api#configuring-state-commitment",target:"_blank",rel:"noopener noreferrer"},tn=n("Commitment"),an=n(' Level zur Verwendung f\xFCr Preflight-Simulationen gegen den Bank-Slot (Standard: "abgeschlossen").'),on=e("li",null,[n("(optional) "),e("code",null,"encoding"),n(": "),e("code",null,"string"),n(' - Codierung, die f\xFCr die Transaktionsdaten verwendet werden. Entweder "base58" (langsam) oder "base64". (Standard: "base58").')],-1),rn=e("li",null,[n("(optional) "),e("code",null,"maxRetries"),n(": "),e("code",null,"usize"),n(" - Maximale Anzahl von Malen f\xFCr den RPC-Knoten, um erneut zu versuchen, die Transaktion an den Leader zu senden. Wenn dieser Parameter nicht angegeben wird, wiederholt der RPC-Knoten die Transaktion, bis sie abgeschlossen ist oder bis der Blockhash abl\xE4uft.")],-1),cn=e("h4",{id:"antwort",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#antwort","aria-hidden":"true"},"#"),n(" Antwort")],-1),ln=e("code",null,"transaction id",-1),dn=n(": "),un=e("code",null,"string",-1),pn=n(" \u2013 Erste in die Transaktion eingebettete Transaktionssignatur als base-58-codierte Zeichenfolge. Diese Transaktions-ID kann mit "),hn={href:"https://docs.solana.com/developing/clients/jsonrpc-api#getsignaturestatuses",target:"_blank",rel:"noopener noreferrer"},kn=n("getSignatureStatuses"),bn=n(" verwendet werden, um Statusaktualisierungen abzurufen."),gn=e("h2",{id:"anpassen-der-reroadcast-logik",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#anpassen-der-reroadcast-logik","aria-hidden":"true"},"#"),n(" Anpassen der Reroadcast-Logik")],-1),_n=n("Um ihre eigene Rebroadcasting-Logik zu entwickeln, sollten Entwickler den Parameter "),mn=e("code",null,"maxRetries",-1),fn=n(" von "),wn=e("code",null,"sendTransaction",-1),vn=n(" nutzen. Falls angegeben, \xFCberschreibt "),Tn=e("code",null,"maxRetries",-1),zn=n(" die standardm\xE4\xDFige Wiederholungslogik eines RPC-Knotens, sodass Entwickler den Wiederholungsprozess "),Pn={href:"https://github.com/solana-labs/solana/blob/98707baec2385a4f7114d2167ef6dfb1406f954f/validator/src/main.rs#L1258-L1274",target:"_blank",rel:"noopener noreferrer"},yn=n("innerhalb vern\xFCnftiger Grenzen"),Bn=n(" manuell steuern k\xF6nnen."),Ln=n("Ein g\xE4ngiges Muster f\xFCr das manuelle Wiederholen von Transaktionen besteht darin, "),Rn=e("code",null,"lastValidBlockHeight",-1),Cn=n(" vor\xFCbergehend zu speichern, das von "),Sn={href:"https://docs.solana.com/developing/clients/jsonrpc-api#getlatestblockhash",target:"_blank",rel:"noopener noreferrer"},xn=n("getLatestBlockhash"),An=n(" stammt. Nach dem Zwischenspeichern kann eine Anwendung dann "),Kn={href:"https://docs.solana.com/developing/clients/jsonrpc-api#getblockheight",target:"_blank",rel:"noopener noreferrer"},Fn=n("die Blockh\xF6he des Clusters abfragen"),Wn=n(" und die Transaktion in einem angemessenen Intervall manuell wiederholen. In Zeiten von Netzwerk\xFCberlastung ist es vorteilhaft, \u201EmaxRetries\u201C auf 0 zu setzen und manuell \xFCber einen benutzerdefinierten Algorithmus erneut zu senden. W\xE4hrend einige Anwendungen m\xF6glicherweise einen "),En={href:"https://en.wikipedia.org/wiki/Exponential_backoff",target:"_blank",rel:"noopener noreferrer"},Vn=n("exponentiellen Backoff"),Dn=n("-Algorithmus verwenden, entscheiden sich andere wie "),In={href:"https://www.mango.markets/",target:"_blank",rel:"noopener noreferrer"},Mn=n("Mango"),Nn=n(" daf\xFCr, Transaktionen in einem konstanten Intervall "),jn={href:"https://github.com/blockworks-foundation/mango-ui/blob/b6abfc6c13b71fc17ebbe766f50b8215fa1ec54f/src/utils/send.tsx#L713",target:"_blank",rel:"noopener noreferrer"},Un=n("kontinuierlich erneut einzureichen"),Hn=n(", bis eine Zeit\xFCberschreitung aufgetreten ist."),Gn=e("div",{class:"language-typescript ext-ts line-numbers-mode"},[e("pre",{class:"language-typescript"},[e("code",null,[e("span",{class:"token keyword"},"import"),n(),e("span",{class:"token punctuation"},"{"),n(` +import{_ as d,r as a,o as u,c as p,a as e,b as s,w as o,F as h,e as r,d as n}from"./app.2fbb9e96.js";var k="/assets/tx-journey.dd6310be.png",b="/assets/tpu-jito-labs.8bb32fb6.png",g="/assets/dropped-via-rpc-pool.8d1ce9af.png",_="/assets/dropped-minority-fork-pre-process.555653e1.png",m="/assets/dropped-minority-fork-post-process.48c3c955.png";const f={},w=r('

    Die Reise einer Transaktion

    In einigen F\xE4llen kann eine scheinbar g\xFCltige Transaktion verworfen werden, bevor sie in einen Block aufgenommen wird. Dies tritt am h\xE4ufigsten in Zeiten von Netzwerk\xFCberlastung auf, wenn ein RPC-Knoten die Transaktion nicht erneut an den [Leader] (https://docs.solana.com/terminology#leader) sendet. F\xFCr einen Endbenutzer kann es so aussehen, als w\xFCrde seine Transaktion vollst\xE4ndig verschwinden. W\xE4hrend RPC-Knoten mit einem generischen Rebroadcasting-Algorithmus ausgestattet sind, sind Anwendungsentwickler auch in der Lage, ihre eigene benutzerdefinierte Rebroadcasting-Logik zu entwickeln.

    Fakten

    Fact Sheet

    • RPC-Knoten versuchen, Transaktionen unter Verwendung eines generischen Algorithmus erneut auszusenden
    • Anwendungsentwickler k\xF6nnen ihre eigene benutzerdefinierte Rebroadcasting-Logik implementieren
    • Entwickler sollten den Parameter "maxRetries" in der JSON-RPC-Methode "sendTransaction" nutzen
    • Entwickler sollten Preflight-Pr\xFCfungen aktivieren, um Fehler zu melden, bevor Transaktionen \xFCbermittelt werden
    • Bevor Sie eine Transaktion neu signieren, ist es sehr wichtig sicherzustellen, dass der Blockhash der urspr\xFCnglichen Transaktion abgelaufen ist

    Die Reise einer Transaktion

    Wie Anwender Transaktionen \xFCbermitteln

    In Solana gibt es kein Konzept eines Mempools. Alle Transaktionen, ob programmgesteuert oder von einem Endbenutzer initiiert, werden effizient an Leader weitergeleitet, damit sie in einem Block verarbeitet werden k\xF6nnen. Es gibt zwei Hauptwege, auf denen eine Transaktion an F\xFChrungskr\xE4fte gesendet werden kann:

    ',7),v=n("Per Proxy \xFCber einen RPC-Server und die JSON-RPC-Methode "),T={href:"https://docs.solana.com/developing/clients/jsonrpc-api#sendtransaction",target:"_blank",rel:"noopener noreferrer"},z=n("sendTransaction"),P=n("."),y=e("li",null,"Direkt zu F\xFChrungskr\xE4ften \xFCber einen [TPU-Client] (https://docs.rs/solana-client/1.7.3/solana_client/tpu_client/index.html)",-1),B=e("p",null,"Die \xFCberwiegende Mehrheit der Endbenutzer \xFCbermittelt Transaktionen \xFCber einen RPC-Server. Wenn ein Client eine Transaktion \xFCbermittelt, versucht der empfangende RPC-Knoten wiederum, die Transaktion sowohl an den aktuellen als auch an den n\xE4chsten Leader zu senden. Bis die Transaktion von einem Leader verarbeitet wird, gibt es keine Aufzeichnung der Transaktion au\xDFerhalb dessen, was dem Client und den weiterleitenden RPC-Knoten bekannt ist. Im Fall eines TPU-Clients wird das Rebroadcasting und die Leader-Weiterleitung vollst\xE4ndig von der Client-Software gehandhabt.",-1),L=e("p",null,[e("img",{src:k,alt:"Transaction Journey"})],-1),R=e("h3",{id:"wie-rpc-knoten-transaktionen-senden",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#wie-rpc-knoten-transaktionen-senden","aria-hidden":"true"},"#"),n(" Wie RPC-Knoten Transaktionen senden")],-1),C=n("Nachdem ein RPC-Knoten eine Transaktion \xFCber \u201EsendTransaction\u201C empfangen hat, konvertiert er die Transaktion in ein "),S={href:"https://en.wikipedia.org/wiki/User_Datagram_Protocol",target:"_blank",rel:"noopener noreferrer"},x=n("UDP"),A=n("-Paket, bevor er es an die relevanten Leader weiterleitet. UDP erm\xF6glicht es Validatoren, schnell miteinander zu kommunizieren, bietet jedoch keine Garantien f\xFCr die Transaktionszustellung."),K=n("Da Solanas Leader-Zeitplan vor jeder "),F={href:"https://docs.solana.com/terminology#epoch",target:"_blank",rel:"noopener noreferrer"},W=n("Epoche"),E=n(" (~2 Tage) bekannt ist, sendet ein RPC-Knoten seine Transaktion direkt an die aktuellen und n\xE4chsten Leader. Dies steht im Gegensatz zu anderen Klatschprotokollen wie Ethereum, die Transaktionen zuf\xE4llig und breit \xFCber das gesamte Netzwerk verbreiten. Standardm\xE4\xDFig versuchen RPC-Knoten alle zwei Sekunden, Transaktionen an Leader weiterzuleiten, bis entweder die Transaktion abgeschlossen ist oder der Blockhash der Transaktion abl\xE4uft (150 Bl\xF6cke oder ~1 Minute 19 Sekunden zum Zeitpunkt des Schreibens dieses Artikels). Wenn die Gr\xF6\xDFe der ausstehenden Rebroadcast-Warteschlange gr\xF6\xDFer als "),V={href:"https://github.com/solana-labs/solana/blob/bfbbc53dac93b3a5c6be9b4b65f679fdb13e41d9/send-transaction-service/src/send_transaction_service.rs#L20",target:"_blank",rel:"noopener noreferrer"},D=n("10.000 Transaktionen"),I=n(" ist, werden neu \xFCbermittelte Transaktionen fallengelassen. Es gibt Befehlszeilen-"),M={href:"https://github.com/solana-labs/solana/blob/bfbbc53dac93b3a5c6be9b4b65f679fdb13e41d9/validator/src/main.rs#L1172",target:"_blank",rel:"noopener noreferrer"},N=n("Argumente"),j=n(", die die Logik der RPC-Operatoren anpassen k\xF6nnen, um das Standardverhalten dieser Wiederholung zu \xE4ndern."),U=n("Wenn ein RPC-Knoten eine Transaktion sendet, versucht er, die Transaktion an die "),H={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/validator.rs#L867",target:"_blank",rel:"noopener noreferrer"},G=n("Transaction Processing Unit (TPU)"),Z=n(" eines Leaders weiterzuleiten . Die TPU verarbeitet Transaktionen in f\xFCnf verschiedenen Phasen:"),q={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/fetch_stage.rs#L21",target:"_blank",rel:"noopener noreferrer"},O=n("Fetch Stage"),J={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/tpu.rs#L91",target:"_blank",rel:"noopener noreferrer"},Y=n("SigVerify Stage"),Q={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/banking_stage.rs#L249",target:"_blank",rel:"noopener noreferrer"},X=n("Banking Stage"),$={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/poh/src/poh_service.rs",target:"_blank",rel:"noopener noreferrer"},ee=n("Proof of History Service"),ne={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/tpu.rs#L136",target:"_blank",rel:"noopener noreferrer"},se=n("Broadcast Stage"),te=e("p",null,[e("img",{src:b,alt:"TPU Overview"}),e("small",{style:{display:"block","text-align":"center"}},"Image Courtesy of Jito Labs")],-1),ae=e("p",null,"Von diesen f\xFCnf Phasen ist die Fetch-Phase f\xFCr den Empfang von Transaktionen verantwortlich. Innerhalb der Fetch-Phase kategorisieren Validatoren eingehende Transaktionen nach drei Ports:",-1),oe={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/gossip/src/contact_info.rs#L27",target:"_blank",rel:"noopener noreferrer"},re=n("tpu"),ie=n(" verarbeitet regelm\xE4\xDFige Transaktionen wie Token-Transfers, NFT-Mints und Programmanweisungen"),ce={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/gossip/src/contact_info.rs#L31",target:"_blank",rel:"noopener noreferrer"},le=n("tpu_vote"),de=n(" konzentriert sich ausschlie\xDFlich auf Stimmrechtsgesch\xE4fte"),ue={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/gossip/src/contact_info.rs#L29",target:"_blank",rel:"noopener noreferrer"},pe=n("tpu_forwards"),he=n(" leitet unverarbeitete Pakete an den n\xE4chsten Leader weiter, wenn der aktuelle Leader nicht in der Lage ist, alle Transaktionen zu verarbeiten"),ke=n("Weitere Informationen zum TPU finden Sie unter "),be={href:"https://jito-labs.medium.com/solana-validator-101-transaction-processing-90bcdc271143",target:"_blank",rel:"noopener noreferrer"},ge=n("dieser hervorragenden Beschreibung von Jito Labs"),_e=n("."),me=e("h2",{id:"wie-transaktionen-verworfen-werden",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#wie-transaktionen-verworfen-werden","aria-hidden":"true"},"#"),n(" Wie Transaktionen verworfen werden")],-1),fe=e("p",null,"W\xE4hrend der Reise einer Transaktion gibt es einige Szenarien, in denen die Transaktion unbeabsichtigt aus dem Netzwerk fallen gelassen werden kann.",-1),we=e("h3",{id:"bevor-eine-transaktion-verarbeitet-wird",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#bevor-eine-transaktion-verarbeitet-wird","aria-hidden":"true"},"#"),n(" Bevor eine Transaktion verarbeitet wird")],-1),ve=n("Wenn das Netzwerk eine Transaktion verwirft, wird es dies h\xF6chstwahrscheinlich tun, bevor die Transaktion von einem Leader verarbeitet wird. UDP "),Te={href:"https://en.wikipedia.org/wiki/Packet_loss",target:"_blank",rel:"noopener noreferrer"},ze=n("Paketverlust"),Pe=n(" ist der einfachste Grund, warum dies auftreten kann. In Zeiten intensiver Netzwerklast ist es auch m\xF6glich, dass Validierer von der schieren Anzahl der f\xFCr die Verarbeitung erforderlichen Transaktionen \xFCberw\xE4ltigt werden. W\xE4hrend Validatoren in der Lage sind, \xFCbersch\xFCssige Transaktionen \xFCber "),ye=e("code",null,"tpu_forwards",-1),Be=n(" weiterzuleiten, gibt es eine Grenze f\xFCr die Datenmenge, die "),Le={href:"https://github.com/solana-labs/solana/blob/master/core/src/banking_stage.rs#L389",target:"_blank",rel:"noopener noreferrer"},Re=n("weitergeleitet"),Ce=n(" werden kann . Dar\xFCber hinaus ist jede Weiterleitung auf einen einzelnen Sprung zwischen Pr\xFCfern beschr\xE4nkt. Das hei\xDFt, Transaktionen, die auf dem "),Se=e("code",null,"tpu_forwards",-1),xe=n("-Port empfangen werden, werden nicht an andere Validatoren weitergeleitet."),Ae=n("Es gibt auch zwei weniger bekannte Gr\xFCnde, warum eine Transaktion verworfen werden kann, bevor sie verarbeitet wird. Das erste Szenario umfasst Transaktionen, die \xFCber einen RPC-Pool \xFCbermittelt werden. Gelegentlich kann ein Teil des RPC-Pools dem Rest des Pools ausreichend voraus sein. Dies kann zu Problemen f\xFChren, wenn Knoten innerhalb des Pools zusammenarbeiten m\xFCssen. In diesem Beispiel wird der "),Ke={href:"https://docs.solana.com/developing/programming-model/transactions#recent-blockhash",target:"_blank",rel:"noopener noreferrer"},Fe=n("recentBlockhash"),We=n(" der Transaktion aus dem erweiterten Teil des Pools (Backend A) abgefragt. Wenn die Transaktion an den verz\xF6gerten Teil des Pools (Backend B) gesendet wird, erkennen die Knoten den erweiterten Blockhash nicht und verwerfen die Transaktion. Dies kann bei der Transaktions\xFCbermittlung erkannt werden, wenn Entwickler "),Ee={href:"https://docs.solana.com/developing/clients/jsonrpc-api#sendtransaction",target:"_blank",rel:"noopener noreferrer"},Ve=n("Preflight-Pr\xFCfungen"),De=n(" f\xFCr "),Ie=e("code",null,"sendTransaction",-1),Me=n(" aktivieren."),Ne=r('

    \xDCber RPC Pool gel\xF6scht

    Vor\xFCbergehende Netzwerk-Forks k\xF6nnen auch zu abgebrochenen Transaktionen f\xFChren. Wenn ein Validator seine Bl\xF6cke innerhalb der Banking-Phase nur langsam wiedergibt, kann er am Ende einen Minority Fork erstellen. Wenn ein Client eine Transaktion erstellt, ist es m\xF6glich, dass die Transaktion auf einen recentBlockhash verweist, der nur auf dem Minority Fork existiert. Nachdem die Transaktion \xFCbermittelt wurde, kann der Cluster von seinem Minority Fork wegschalten, bevor die Transaktion verarbeitet wird. In diesem Szenario wird die Transaktion verworfen, weil der Blockhash nicht gefunden wird.

    Aufgrund von Minority Fork fallen gelassen (vor der Verarbeitung)

    Nachdem eine Transaktion verarbeitet wurde und bevor sie abgeschlossen wird

    F\xFCr den Fall, dass eine Transaktion auf einen \u201ErecentBlockhash\u201C von einem Minority Fork verweist, ist es immer noch m\xF6glich, dass die Transaktion verarbeitet wird. In diesem Fall w\xFCrde es jedoch vom Leader auf dem Minority Fork verarbeitet. Wenn dieser Anf\xFChrer versucht, seine verarbeiteten Transaktionen mit dem Rest des Netzwerks zu teilen, w\xFCrde er keinen Konsens mit der Mehrheit der Validatoren erzielen, die den Minority Fork nicht anerkennen. Zu diesem Zeitpunkt w\xFCrde die Transaktion fallen gelassen, bevor sie abgeschlossen werden k\xF6nnte.

    Gefallen aufgrund von Minority Fork (nach Verarbeitung)

    Umgang mit abgebrochenen Transaktionen

    W\xE4hrend RPC-Knoten versuchen, Transaktionen erneut zu \xFCbertragen, ist der von ihnen verwendete Algorithmus generisch und oft f\xFCr die Anforderungen bestimmter Anwendungen ungeeignet. Um sich auf Zeiten der Netzwerk\xFCberlastung vorzubereiten, sollten Anwendungsentwickler ihre eigene Rebroadcasting-Logik anpassen.

    Ein eingehender Blick in sendTransaction

    Wenn es um das Senden von Transaktionen geht, ist die RPC-Methode sendTransaction das prim\xE4re Tool, das Entwicklern zur Verf\xFCgung steht. sendTransaction ist nur f\xFCr die Weiterleitung einer Transaktion von einem Client an einen RPC-Knoten verantwortlich. Wenn der Knoten die Transaktion empf\xE4ngt, gibt sendTransaction die Transaktions-ID zur\xFCck, die zum Verfolgen der Transaktion verwendet werden kann. Eine erfolgreiche Antwort zeigt nicht an, ob die Transaktion vom Cluster verarbeitet oder abgeschlossen wird.

    ',10),je={class:"custom-container tip"},Ue=e("p",{class:"custom-container-title"},"TIP",-1),He=e("h4",{id:"request-parameters",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#request-parameters","aria-hidden":"true"},"#"),n(" Request Parameters")],-1),Ge=e("li",null,[e("code",null,"transaction"),n(": "),e("code",null,"string"),n(" - vollst\xE4ndig signierte Transaktion als verschl\xFCsselte Zeichenfolge")],-1),Ze=n("(optional) "),qe=e("code",null,"Konfigurationsobjekt",-1),Oe=n(": "),Je=e("code",null,"Objekt",-1),Ye=e("li",null,[e("code",null,"skipPreflight"),n(": "),e("code",null,"boolean"),n(" - wenn wahr, die Preflight-Transaktionspr\xFCfungen \xFCberspringen (Standard: falsch)")],-1),Qe=n("(optional) "),Xe=e("code",null,"preflightCommitment",-1),$e=n(": "),en=e("code",null,"string",-1),nn=n(" - "),sn={href:"https://docs.solana.com/developing/clients/jsonrpc-api#configuring-state-commitment",target:"_blank",rel:"noopener noreferrer"},tn=n("Commitment"),an=n(' Level zur Verwendung f\xFCr Preflight-Simulationen gegen den Bank-Slot (Standard: "abgeschlossen").'),on=e("li",null,[n("(optional) "),e("code",null,"encoding"),n(": "),e("code",null,"string"),n(' - Codierung, die f\xFCr die Transaktionsdaten verwendet werden. Entweder "base58" (langsam) oder "base64". (Standard: "base58").')],-1),rn=e("li",null,[n("(optional) "),e("code",null,"maxRetries"),n(": "),e("code",null,"usize"),n(" - Maximale Anzahl von Malen f\xFCr den RPC-Knoten, um erneut zu versuchen, die Transaktion an den Leader zu senden. Wenn dieser Parameter nicht angegeben wird, wiederholt der RPC-Knoten die Transaktion, bis sie abgeschlossen ist oder bis der Blockhash abl\xE4uft.")],-1),cn=e("h4",{id:"antwort",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#antwort","aria-hidden":"true"},"#"),n(" Antwort")],-1),ln=e("code",null,"transaction id",-1),dn=n(": "),un=e("code",null,"string",-1),pn=n(" \u2013 Erste in die Transaktion eingebettete Transaktionssignatur als base-58-codierte Zeichenfolge. Diese Transaktions-ID kann mit "),hn={href:"https://docs.solana.com/developing/clients/jsonrpc-api#getsignaturestatuses",target:"_blank",rel:"noopener noreferrer"},kn=n("getSignatureStatuses"),bn=n(" verwendet werden, um Statusaktualisierungen abzurufen."),gn=e("h2",{id:"anpassen-der-reroadcast-logik",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#anpassen-der-reroadcast-logik","aria-hidden":"true"},"#"),n(" Anpassen der Reroadcast-Logik")],-1),_n=n("Um ihre eigene Rebroadcasting-Logik zu entwickeln, sollten Entwickler den Parameter "),mn=e("code",null,"maxRetries",-1),fn=n(" von "),wn=e("code",null,"sendTransaction",-1),vn=n(" nutzen. Falls angegeben, \xFCberschreibt "),Tn=e("code",null,"maxRetries",-1),zn=n(" die standardm\xE4\xDFige Wiederholungslogik eines RPC-Knotens, sodass Entwickler den Wiederholungsprozess "),Pn={href:"https://github.com/solana-labs/solana/blob/98707baec2385a4f7114d2167ef6dfb1406f954f/validator/src/main.rs#L1258-L1274",target:"_blank",rel:"noopener noreferrer"},yn=n("innerhalb vern\xFCnftiger Grenzen"),Bn=n(" manuell steuern k\xF6nnen."),Ln=n("Ein g\xE4ngiges Muster f\xFCr das manuelle Wiederholen von Transaktionen besteht darin, "),Rn=e("code",null,"lastValidBlockHeight",-1),Cn=n(" vor\xFCbergehend zu speichern, das von "),Sn={href:"https://docs.solana.com/developing/clients/jsonrpc-api#getlatestblockhash",target:"_blank",rel:"noopener noreferrer"},xn=n("getLatestBlockhash"),An=n(" stammt. Nach dem Zwischenspeichern kann eine Anwendung dann "),Kn={href:"https://docs.solana.com/developing/clients/jsonrpc-api#getblockheight",target:"_blank",rel:"noopener noreferrer"},Fn=n("die Blockh\xF6he des Clusters abfragen"),Wn=n(" und die Transaktion in einem angemessenen Intervall manuell wiederholen. In Zeiten von Netzwerk\xFCberlastung ist es vorteilhaft, \u201EmaxRetries\u201C auf 0 zu setzen und manuell \xFCber einen benutzerdefinierten Algorithmus erneut zu senden. W\xE4hrend einige Anwendungen m\xF6glicherweise einen "),En={href:"https://en.wikipedia.org/wiki/Exponential_backoff",target:"_blank",rel:"noopener noreferrer"},Vn=n("exponentiellen Backoff"),Dn=n("-Algorithmus verwenden, entscheiden sich andere wie "),In={href:"https://www.mango.markets/",target:"_blank",rel:"noopener noreferrer"},Mn=n("Mango"),Nn=n(" daf\xFCr, Transaktionen in einem konstanten Intervall "),jn={href:"https://github.com/blockworks-foundation/mango-ui/blob/b6abfc6c13b71fc17ebbe766f50b8215fa1ec54f/src/utils/send.tsx#L713",target:"_blank",rel:"noopener noreferrer"},Un=n("kontinuierlich erneut einzureichen"),Hn=n(", bis eine Zeit\xFCberschreitung aufgetreten ist."),Gn=e("div",{class:"language-typescript ext-ts line-numbers-mode"},[e("pre",{class:"language-typescript"},[e("code",null,[e("span",{class:"token keyword"},"import"),n(),e("span",{class:"token punctuation"},"{"),n(` Keypair`),e("span",{class:"token punctuation"},","),n(` Connection`),e("span",{class:"token punctuation"},","),n(` `),e("span",{class:"token constant"},"LAMPORTS_PER_SOL"),e("span",{class:"token punctuation"},","),n(` diff --git a/docs/.vuepress/dist/assets/retrying-transactions.html.01743c84.js b/docs/.vuepress/dist/assets/retrying-transactions.html.76ed1f79.js similarity index 99% rename from docs/.vuepress/dist/assets/retrying-transactions.html.01743c84.js rename to docs/.vuepress/dist/assets/retrying-transactions.html.76ed1f79.js index ffe3f9966..ed3e6bbe4 100644 --- a/docs/.vuepress/dist/assets/retrying-transactions.html.01743c84.js +++ b/docs/.vuepress/dist/assets/retrying-transactions.html.76ed1f79.js @@ -1,4 +1,4 @@ -import{_ as p,r as o,o as d,c as u,a as n,b as t,w as e,F as h,d as s,e as c}from"./app.cfdf84e7.js";var _="/assets/tx-journey.dd6310be.png",k="/assets/tpu-jito-labs.8bb32fb6.png",b="/assets/dropped-via-rpc-pool.8d1ce9af.png",g="/assets/dropped-minority-fork-pre-process.555653e1.png",m="/assets/dropped-minority-fork-post-process.48c3c955.png";const f={},y=n("h1",{id:"retrying-transactions",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#retrying-transactions","aria-hidden":"true"},"#"),s(" Retrying Transactions")],-1),w=s("\u0E43\u0E19\u0E1A\u0E32\u0E07\u0E17\u0E35 transaction \u0E2D\u0E32\u0E08\u0E08\u0E30\u0E16\u0E39\u0E01\u0E17\u0E34\u0E49\u0E07\u0E44\u0E1B\u0E01\u0E48\u0E2D\u0E19\u0E17\u0E35\u0E48\u0E08\u0E30\u0E40\u0E02\u0E49\u0E32\u0E44\u0E1B\u0E43\u0E19 block \u0E2A\u0E34\u0E48\u0E07\u0E19\u0E35\u0E49\u0E40\u0E01\u0E34\u0E14\u0E02\u0E36\u0E49\u0E19\u0E1A\u0E48\u0E2D\u0E22\u0E43\u0E19\u0E0A\u0E48\u0E27\u0E07\u0E17\u0E35\u0E48\u0E21\u0E35\u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19\u0E40\u0E22\u0E2D\u0E30\u0E08\u0E19\u0E01\u0E32\u0E23\u0E17\u0E33\u0E07\u0E32\u0E19\u0E15\u0E34\u0E14\u0E02\u0E31\u0E14 (network congestion) \u0E43\u0E19\u0E15\u0E2D\u0E19\u0E17\u0E35\u0E48 RPC node \u0E44\u0E21\u0E48\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E2A\u0E48\u0E07 transaction \u0E44\u0E1B\u0E17\u0E35\u0E48 "),P={href:"https://docs.solana.com/terminology#leader",target:"_blank",rel:"noopener noreferrer"},v=s("\u0E1C\u0E39\u0E49\u0E19\u0E33 (leader)"),R=s(" \u0E44\u0E14\u0E49 \u0E1D\u0E31\u0E48\u0E07 end-user \u0E08\u0E30\u0E40\u0E2B\u0E47\u0E19\u0E27\u0E48\u0E32 transaction \u0E44\u0E14\u0E49\u0E2B\u0E32\u0E22\u0E44\u0E1B\u0E40\u0E25\u0E22 \u0E16\u0E36\u0E07 RPC nodes \u0E08\u0E30\u0E21\u0E35 rebroadcasting algorithm \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E2A\u0E48\u0E07\u0E0B\u0E49\u0E33\u0E17\u0E31\u0E48\u0E27\u0E44\u0E1B\u0E2D\u0E22\u0E39\u0E48\u0E41\u0E25\u0E49\u0E27 \u0E41\u0E15\u0E48\u0E19\u0E31\u0E01\u0E1E\u0E31\u0E12\u0E19\u0E32 app \u0E01\u0E47\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E17\u0E33 custom rebroadcasting logic \u0E40\u0E2D\u0E07\u0E44\u0E14\u0E49."),T=c('

    \u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49

    Fact Sheet

    • RPC nodes \u0E08\u0E30\u0E1E\u0E22\u0E32\u0E22\u0E32\u0E21 rebroadcast transactions \u0E42\u0E14\u0E22\u0E43\u0E0A\u0E49 algorithm \u0E17\u0E31\u0E48\u0E27\u0E44\u0E1B
    • \u0E19\u0E31\u0E01\u0E1E\u0E31\u0E12\u0E19\u0E32 app \u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E17\u0E33 custom rebroadcasting logic \u0E40\u0E2D\u0E07\u0E44\u0E14\u0E49
    • \u0E19\u0E31\u0E01\u0E1E\u0E31\u0E12\u0E19\u0E32 \u0E04\u0E27\u0E23\u0E43\u0E0A\u0E49 maxRetries parameter \u0E15\u0E2D\u0E19 sendTransaction JSON-RPC method
    • \u0E19\u0E31\u0E01\u0E1E\u0E31\u0E12\u0E19\u0E32 \u0E04\u0E27\u0E23\u0E43\u0E0A\u0E49 preflight \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E43\u0E2B\u0E49\u0E40\u0E2B\u0E47\u0E19\u0E1B\u0E31\u0E0D\u0E2B\u0E32\u0E01\u0E48\u0E2D\u0E19\u0E17\u0E35\u0E48\u0E08\u0E30 submit transactions
    • \u0E01\u0E48\u0E2D\u0E19\u0E08\u0E30 re-signing transaction \u0E43\u0E14\u0E46 \u0E21\u0E31\u0E19\u0E2A\u0E33\u0E04\u0E31\u0E0D\u0E21\u0E32\u0E01 \u0E17\u0E35\u0E48\u0E08\u0E30\u0E41\u0E19\u0E48\u0E43\u0E08\u0E27\u0E48\u0E32 blockhash \u0E15\u0E31\u0E27\u0E01\u0E48\u0E2D\u0E19\u0E2B\u0E19\u0E49\u0E32\u0E44\u0E14\u0E49 expired \u0E44\u0E1B\u0E41\u0E25\u0E49\u0E27

    \u0E01\u0E32\u0E23\u0E40\u0E14\u0E34\u0E19\u0E17\u0E32\u0E07\u0E02\u0E2D\u0E07 Transaction

    Clients Submit Transactions \u0E22\u0E31\u0E07\u0E44\u0E07

    \u0E1A\u0E19 Solana \u0E08\u0E30\u0E44\u0E21\u0E48\u0E21\u0E35 mempool \u0E17\u0E38\u0E01\u0E46 transactions \u0E44\u0E21\u0E48\u0E27\u0E48\u0E32\u0E08\u0E30\u0E21\u0E32\u0E08\u0E32\u0E01 program \u0E2B\u0E23\u0E37\u0E2D end-user \u0E01\u0E47\u0E08\u0E30\u0E16\u0E39\u0E01\u0E2A\u0E48\u0E07\u0E44\u0E1B\u0E17\u0E35\u0E48 leaders \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E08\u0E30\u0E44\u0E14\u0E49\u0E44\u0E1B\u0E25\u0E07 block \u0E42\u0E14\u0E19\u0E08\u0E30\u0E21\u0E35\u0E2D\u0E22\u0E39\u0E48 2 \u0E17\u0E32\u0E07\u0E17\u0E35\u0E48 transaction \u0E08\u0E30\u0E2A\u0E48\u0E07\u0E44\u0E1B\u0E16\u0E36\u0E07 leaders:

    ',5),C=s("\u0E1C\u0E48\u0E32\u0E19 RPC server \u0E14\u0E49\u0E27\u0E22 method "),x={href:"https://docs.solana.com/developing/clients/jsonrpc-api#sendtransaction",target:"_blank",rel:"noopener noreferrer"},S=s("sendTransaction"),B=s(" JSON-RPC"),L=s("\u0E2A\u0E48\u0E07\u0E44\u0E1B\u0E15\u0E23\u0E07\u0E46 \u0E1C\u0E48\u0E32\u0E19 "),j={href:"https://docs.rs/solana-client/1.7.3/solana_client/tpu_client/index.html",target:"_blank",rel:"noopener noreferrer"},H=s("TPU Client"),V=n("p",null,"end-users \u0E2A\u0E48\u0E27\u0E19\u0E43\u0E2B\u0E0D\u0E48\u0E08\u0E30 submit transactions \u0E1C\u0E48\u0E32\u0E19 RPC server \u0E40\u0E21\u0E37\u0E48\u0E2D client \u0E44\u0E14\u0E49 submits transaction \u0E44\u0E1B\u0E41\u0E25\u0E49\u0E27\u0E15\u0E31\u0E27 RPC node \u0E08\u0E30\u0E1E\u0E22\u0E32\u0E22\u0E32\u0E21 broadcast transaction \u0E44\u0E1B\u0E2B\u0E32\u0E17\u0E31\u0E49\u0E07 leaders \u0E1B\u0E31\u0E08\u0E08\u0E38\u0E1A\u0E31\u0E19 \u0E41\u0E25\u0E30 leaders \u0E16\u0E31\u0E14\u0E44\u0E1B \u0E08\u0E19\u0E01\u0E23\u0E30\u0E17\u0E31\u0E48\u0E07 transaction \u0E44\u0E14\u0E49\u0E23\u0E31\u0E1A\u0E01\u0E32\u0E23\u0E1B\u0E23\u0E30\u0E21\u0E27\u0E25\u0E1C\u0E25\u0E08\u0E32\u0E01 leader \u0E41\u0E25\u0E30\u0E21\u0E31\u0E19\u0E08\u0E30\u0E44\u0E21\u0E48\u0E21\u0E35\u0E1A\u0E31\u0E19\u0E17\u0E36\u0E01\u0E02\u0E2D\u0E07 transaction \u0E2D\u0E37\u0E48\u0E19\u0E43\u0E14\u0E19\u0E2D\u0E01\u0E40\u0E2B\u0E19\u0E37\u0E2D\u0E44\u0E1B\u0E08\u0E32\u0E01\u0E17\u0E35\u0E48 client \u0E41\u0E25\u0E30 RPC nodes \u0E23\u0E31\u0E1A\u0E23\u0E39\u0E49. \u0E43\u0E19\u0E01\u0E23\u0E13\u0E35\u0E02\u0E2D\u0E07 TPU client, \u0E01\u0E32\u0E23 rebroadcast \u0E41\u0E25\u0E30\u0E2A\u0E48\u0E07\u0E15\u0E48\u0E2D\u0E44\u0E1B\u0E17\u0E35\u0E48 leader \u0E08\u0E30\u0E02\u0E36\u0E49\u0E19\u0E2D\u0E22\u0E39\u0E48\u0E01\u0E31\u0E1A client \u0E17\u0E31\u0E49\u0E07\u0E2B\u0E21\u0E14.",-1),z=n("p",null,[n("img",{src:_,alt:"\u0E01\u0E32\u0E23\u0E40\u0E14\u0E34\u0E19\u0E17\u0E32\u0E07\u0E02\u0E2D\u0E07 Transaction"})],-1),U=n("h3",{id:"rpc-nodes-broadcast-transactions-\u0E22\u0E31\u0E07\u0E44\u0E07",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#rpc-nodes-broadcast-transactions-\u0E22\u0E31\u0E07\u0E44\u0E07","aria-hidden":"true"},"#"),s(" RPC Nodes Broadcast Transactions \u0E22\u0E31\u0E07\u0E44\u0E07")],-1),A=s("\u0E2B\u0E25\u0E31\u0E07\u0E08\u0E32\u0E01 RPC node \u0E23\u0E31\u0E1A transaction \u0E1C\u0E48\u0E32\u0E19 "),E=n("code",null,"sendTransaction",-1),F=s(" \u0E15\u0E31\u0E27 transaction \u0E01\u0E47\u0E08\u0E30\u0E16\u0E39\u0E01\u0E40\u0E1B\u0E25\u0E35\u0E48\u0E22\u0E19\u0E44\u0E1B\u0E40\u0E1B\u0E47\u0E19 "),K={href:"https://en.wikipedia.org/wiki/User_Datagram_Protocol",target:"_blank",rel:"noopener noreferrer"},N=s("UDP"),D=s(" packet \u0E01\u0E48\u0E2D\u0E19\u0E08\u0E30\u0E2A\u0E48\u0E07\u0E15\u0E48\u0E2D\u0E44\u0E1B\u0E17\u0E35\u0E48 leaders \u0E17\u0E35\u0E48\u0E40\u0E01\u0E35\u0E48\u0E22\u0E27\u0E02\u0E49\u0E2D\u0E07 \u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49 UDP \u0E08\u0E30\u0E17\u0E33\u0E43\u0E2B\u0E49 validators \u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E15\u0E34\u0E14\u0E15\u0E48\u0E2D\u0E01\u0E31\u0E19\u0E44\u0E14\u0E49\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E23\u0E27\u0E14\u0E40\u0E23\u0E47\u0E27 \u0E41\u0E15\u0E48\u0E08\u0E30\u0E44\u0E21\u0E48\u0E23\u0E31\u0E1A\u0E1B\u0E23\u0E30\u0E01\u0E31\u0E19\u0E27\u0E48\u0E32 transaction \u0E08\u0E30\u0E2A\u0E48\u0E07\u0E16\u0E36\u0E07\u0E41\u0E19\u0E48\u0E19\u0E2D\u0E19."),I=s("\u0E40\u0E19\u0E37\u0E48\u0E2D\u0E07\u0E08\u0E32\u0E01\u0E01\u0E32\u0E23\u0E17\u0E33\u0E07\u0E32\u0E19\u0E02\u0E2D\u0E07 Solana leader \u0E08\u0E30\u0E23\u0E39\u0E49\u0E01\u0E48\u0E2D\u0E19\u0E2D\u0E22\u0E39\u0E48\u0E41\u0E25\u0E49\u0E27\u0E43\u0E19\u0E17\u0E38\u0E01\u0E46 "),O={href:"https://docs.solana.com/terminology#epoch",target:"_blank",rel:"noopener noreferrer"},J=s("epoch"),M=s(" (~2 \u0E27\u0E31\u0E19) \u0E15\u0E31\u0E27 RPC node \u0E08\u0E30\u0E01\u0E23\u0E30\u0E08\u0E32\u0E22 transaction \u0E44\u0E1B\u0E2B\u0E32\u0E17\u0E31\u0E49\u0E07 leaders \u0E15\u0E31\u0E27\u0E1B\u0E31\u0E08\u0E08\u0E38\u0E1A\u0E31\u0E19 \u0E41\u0E25\u0E30\u0E15\u0E31\u0E27\u0E16\u0E31\u0E14\u0E44\u0E1B \u0E15\u0E23\u0E07\u0E08\u0E38\u0E14\u0E19\u0E35\u0E49\u0E08\u0E30\u0E44\u0E21\u0E48\u0E40\u0E2B\u0E21\u0E37\u0E2D\u0E19 gossip protocols \u0E2D\u0E37\u0E48\u0E19\u0E40\u0E0A\u0E48\u0E19 Ethereum \u0E17\u0E35\u0E48\u0E40\u0E1C\u0E22\u0E41\u0E1E\u0E23\u0E48 transactions \u0E41\u0E1A\u0E1A\u0E2A\u0E38\u0E48\u0E21 \u0E41\u0E25\u0E30\u0E2A\u0E48\u0E07\u0E44\u0E1B\u0E17\u0E31\u0E49\u0E07 network \u0E15\u0E32\u0E21\u0E1B\u0E01\u0E15\u0E34\u0E41\u0E25\u0E49\u0E27 RPC nodes \u0E08\u0E30\u0E1E\u0E22\u0E32\u0E22\u0E32\u0E21\u0E2A\u0E48\u0E07 transactions \u0E44\u0E1B\u0E2B\u0E32 leaders \u0E17\u0E38\u0E01\u0E46 2 \u0E27\u0E34\u0E19\u0E32\u0E17\u0E35 \u0E08\u0E19\u0E01\u0E23\u0E30\u0E17\u0E31\u0E48\u0E07 transaction \u0E16\u0E39\u0E01 finalized \u0E2B\u0E23\u0E37\u0E2D blockhash \u0E2B\u0E21\u0E14\u0E2D\u0E32\u0E22\u0E38 (150 blocks \u0E2B\u0E23\u0E37\u0E2D ~1 \u0E19\u0E32\u0E17\u0E35 19 \u0E27\u0E34\u0E19\u0E32\u0E17\u0E35 \u0E13. \u0E15\u0E2D\u0E19\u0E17\u0E35\u0E48\u0E40\u0E02\u0E35\u0E22\u0E19\u0E19\u0E35\u0E49). \u0E16\u0E49\u0E32\u0E21\u0E35\u0E04\u0E34\u0E27\u0E43\u0E19\u0E01\u0E32\u0E23 rebroadcast \u0E15\u0E01\u0E04\u0E49\u0E32\u0E07\u0E2D\u0E22\u0E39\u0E48\u0E40\u0E01\u0E34\u0E19 "),q={href:"https://github.com/solana-labs/solana/blob/bfbbc53dac93b3a5c6be9b4b65f679fdb13e41d9/send-transaction-service/src/send_transaction_service.rs#L20",target:"_blank",rel:"noopener noreferrer"},G=s("10,000 transactions"),W=s(" \u0E08\u0E30\u0E17\u0E33\u0E43\u0E2B\u0E49 transactions \u0E43\u0E2B\u0E21\u0E48\u0E16\u0E39\u0E01\u0E17\u0E34\u0E49\u0E07\u0E44\u0E1B \u0E0B\u0E36\u0E48\u0E07\u0E08\u0E30\u0E21\u0E35\u0E04\u0E33\u0E2A\u0E31\u0E48\u0E07 command-line "),Y={href:"https://github.com/solana-labs/solana/blob/bfbbc53dac93b3a5c6be9b4b65f679fdb13e41d9/validator/src/main.rs#L1172",target:"_blank",rel:"noopener noreferrer"},Q=s("arguments"),X=s(" \u0E17\u0E35\u0E48\u0E04\u0E19\u0E14\u0E39\u0E41\u0E25 RPC \u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E1B\u0E23\u0E31\u0E1A\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E40\u0E1B\u0E25\u0E35\u0E48\u0E22\u0E19\u0E04\u0E48\u0E32\u0E40\u0E23\u0E34\u0E48\u0E21\u0E15\u0E49\u0E19\u0E02\u0E2D\u0E07\u0E01\u0E32\u0E23 retry \u0E19\u0E35\u0E49\u0E44\u0E14\u0E49"),Z=s("\u0E40\u0E27\u0E25\u0E32\u0E17\u0E35\u0E48 RPC node \u0E08\u0E30\u0E17\u0E33\u0E01\u0E32\u0E23\u0E40\u0E1C\u0E22\u0E41\u0E1E\u0E23\u0E48 transaction \u0E21\u0E31\u0E19\u0E08\u0E30\u0E1E\u0E22\u0E32\u0E22\u0E32\u0E21\u0E2A\u0E48\u0E07\u0E15\u0E48\u0E44\u0E1B\u0E17\u0E35\u0E48 transaction leader\u2019s "),$={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/validator.rs#L867",target:"_blank",rel:"noopener noreferrer"},nn=s("Transaction Processing Unit (TPU)"),sn=s(" \u0E01\u0E32\u0E23\u0E1B\u0E23\u0E30\u0E21\u0E27\u0E25\u0E1C\u0E25 transactions \u0E02\u0E2D\u0E07 TPU \u0E08\u0E30\u0E41\u0E1A\u0E48\u0E07\u0E40\u0E1B\u0E47\u0E19 5 \u0E02\u0E31\u0E49\u0E19\u0E15\u0E2D\u0E19:"),tn={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/fetch_stage.rs#L21",target:"_blank",rel:"noopener noreferrer"},an=s("Fetch Stage"),on={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/tpu.rs#L91",target:"_blank",rel:"noopener noreferrer"},en=s("SigVerify Stage"),cn={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/banking_stage.rs#L249",target:"_blank",rel:"noopener noreferrer"},rn=s("Banking Stage"),ln={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/poh/src/poh_service.rs",target:"_blank",rel:"noopener noreferrer"},pn=s("Proof of History Service"),dn={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/tpu.rs#L136",target:"_blank",rel:"noopener noreferrer"},un=s("Broadcast Stage"),hn=n("p",null,[n("img",{src:k,alt:"TPU Overview"}),n("small",{style:{display:"block","text-align":"center"}},"Image Courtesy of Jito Labs")],-1),_n=n("p",null,"\u0E08\u0E32\u0E01 5 \u0E02\u0E31\u0E49\u0E19\u0E15\u0E2D\u0E19\u0E19\u0E35\u0E49\u0E0A\u0E48\u0E27\u0E07 Fetch Stage \u0E08\u0E30\u0E23\u0E31\u0E1A\u0E1C\u0E34\u0E14\u0E0A\u0E2D\u0E1A\u0E01\u0E32\u0E23\u0E23\u0E31\u0E1A transactions \u0E15\u0E2D\u0E19 Fetch Stage, validators \u0E08\u0E30\u0E08\u0E31\u0E14\u0E2B\u0E21\u0E27\u0E14\u0E2B\u0E21\u0E39\u0E48 transactions \u0E2D\u0E2D\u0E01\u0E40\u0E1B\u0E47\u0E19 3 \u0E0A\u0E48\u0E2D\u0E07\u0E17\u0E32\u0E07\u0E14\u0E31\u0E07\u0E19\u0E35\u0E49:",-1),kn={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/gossip/src/contact_info.rs#L27",target:"_blank",rel:"noopener noreferrer"},bn=s("tpu"),gn=s(" \u0E08\u0E31\u0E14\u0E01\u0E32\u0E23 transactions \u0E1E\u0E27\u0E01 token transfers, NFT mints, \u0E41\u0E25\u0E30 program instructions"),mn={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/gossip/src/contact_info.rs#L31",target:"_blank",rel:"noopener noreferrer"},fn=s("tpu_vote"),yn=s(" \u0E08\u0E31\u0E14\u0E01\u0E32\u0E23\u0E40\u0E09\u0E1E\u0E32\u0E30 transactions \u0E17\u0E35\u0E48\u0E40\u0E01\u0E35\u0E48\u0E22\u0E27\u0E01\u0E31\u0E1A\u0E01\u0E32\u0E23 vote"),wn={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/gossip/src/contact_info.rs#L29",target:"_blank",rel:"noopener noreferrer"},Pn=s("tpu_forwards"),vn=s(" \u0E2A\u0E48\u0E07\u0E15\u0E48\u0E2D packets \u0E17\u0E35\u0E48\u0E22\u0E31\u0E07\u0E44\u0E21\u0E48\u0E44\u0E14\u0E49\u0E14\u0E33\u0E40\u0E19\u0E34\u0E19\u0E01\u0E32\u0E23\u0E44\u0E1B\u0E22\u0E31\u0E07 leader \u0E16\u0E31\u0E14\u0E44\u0E1B\u0E16\u0E49\u0E32 leader \u0E1B\u0E31\u0E08\u0E08\u0E38\u0E1A\u0E31\u0E19 \u0E44\u0E21\u0E48\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 process \u0E17\u0E38\u0E01 transactions \u0E44\u0E14\u0E49\u0E41\u0E25\u0E49\u0E27"),Rn=s("\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07 TPU, \u0E2B\u0E32\u0E2D\u0E48\u0E32\u0E19\u0E40\u0E1E\u0E34\u0E48\u0E21\u0E40\u0E15\u0E34\u0E21\u0E44\u0E14\u0E49\u0E17\u0E35\u0E48 "),Tn={href:"https://jito-labs.medium.com/solana-validator-101-transaction-processing-90bcdc271143",target:"_blank",rel:"noopener noreferrer"},Cn=s("this excellent writeup by Jito Labs"),xn=s("."),Sn=n("h2",{id:"transactions-\u0E16\u0E39\u0E01\u0E17\u0E34\u0E49\u0E07\u0E44\u0E1B\u0E44\u0E14\u0E49\u0E22\u0E31\u0E07\u0E44\u0E07",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#transactions-\u0E16\u0E39\u0E01\u0E17\u0E34\u0E49\u0E07\u0E44\u0E1B\u0E44\u0E14\u0E49\u0E22\u0E31\u0E07\u0E44\u0E07","aria-hidden":"true"},"#"),s(" Transactions \u0E16\u0E39\u0E01\u0E17\u0E34\u0E49\u0E07\u0E44\u0E1B\u0E44\u0E14\u0E49\u0E22\u0E31\u0E07\u0E44\u0E07")],-1),Bn=n("p",null,"\u0E15\u0E25\u0E2D\u0E14\u0E01\u0E32\u0E23\u0E40\u0E14\u0E34\u0E19\u0E17\u0E32\u0E07\u0E02\u0E2D\u0E07 transaction, \u0E2D\u0E32\u0E08\u0E08\u0E30\u0E21\u0E35\u0E40\u0E2B\u0E15\u0E38\u0E01\u0E32\u0E23\u0E13\u0E4C\u0E1A\u0E32\u0E07\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E17\u0E35\u0E48\u0E17\u0E33\u0E43\u0E2B\u0E49 transaction \u0E16\u0E39\u0E01\u0E17\u0E34\u0E49\u0E07\u0E44\u0E1B\u0E08\u0E32\u0E01 network \u0E44\u0E14\u0E49\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E15\u0E31\u0E49\u0E07\u0E43\u0E08.",-1),Ln=n("h3",{id:"\u0E01\u0E48\u0E2D\u0E19-transaction-\u0E08\u0E30\u0E1B\u0E23\u0E30\u0E21\u0E27\u0E25\u0E1C\u0E25\u0E40\u0E2A\u0E23\u0E47\u0E08",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E01\u0E48\u0E2D\u0E19-transaction-\u0E08\u0E30\u0E1B\u0E23\u0E30\u0E21\u0E27\u0E25\u0E1C\u0E25\u0E40\u0E2A\u0E23\u0E47\u0E08","aria-hidden":"true"},"#"),s(" \u0E01\u0E48\u0E2D\u0E19 transaction \u0E08\u0E30\u0E1B\u0E23\u0E30\u0E21\u0E27\u0E25\u0E1C\u0E25\u0E40\u0E2A\u0E23\u0E47\u0E08")],-1),jn=s("\u0E16\u0E49\u0E32 transaction \u0E16\u0E39\u0E01\u0E17\u0E34\u0E49\u0E07 \u0E2A\u0E48\u0E27\u0E19\u0E43\u0E2B\u0E0D\u0E48\u0E08\u0E30\u0E40\u0E01\u0E34\u0E14\u0E01\u0E48\u0E2D\u0E19\u0E17\u0E35\u0E48 transaction \u0E08\u0E30\u0E16\u0E39\u0E01\u0E1B\u0E23\u0E30\u0E21\u0E27\u0E25\u0E1C\u0E25\u0E42\u0E14\u0E22 leader \u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07 UDP "),Hn={href:"https://en.wikipedia.org/wiki/Packet_loss",target:"_blank",rel:"noopener noreferrer"},Vn=s("packet loss"),zn=s(" \u0E40\u0E2B\u0E15\u0E38\u0E1C\u0E25\u0E27\u0E48\u0E32\u0E17\u0E33\u0E44\u0E21\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E35\u0E49\u0E2D\u0E32\u0E08\u0E08\u0E30\u0E40\u0E01\u0E34\u0E14\u0E02\u0E36\u0E49\u0E19\u0E44\u0E14\u0E49\u0E43\u0E19\u0E0A\u0E48\u0E27\u0E07\u0E17\u0E35\u0E48\u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19 network \u0E2A\u0E39\u0E07, \u0E41\u0E25\u0E30\u0E21\u0E31\u0E19\u0E22\u0E31\u0E07\u0E40\u0E1B\u0E47\u0E19\u0E44\u0E1B\u0E44\u0E14\u0E49\u0E27\u0E48\u0E32 validators \u0E01\u0E33\u0E25\u0E31\u0E07\u0E1B\u0E23\u0E30\u0E21\u0E27\u0E25\u0E1C\u0E25 transactions \u0E17\u0E35\u0E48\u0E21\u0E32\u0E01\u0E40\u0E01\u0E34\u0E19\u0E01\u0E27\u0E48\u0E32\u0E17\u0E35\u0E48\u0E08\u0E30\u0E14\u0E33\u0E40\u0E19\u0E34\u0E19\u0E01\u0E32\u0E23\u0E44\u0E14\u0E49. \u0E43\u0E19\u0E02\u0E13\u0E30\u0E17\u0E35\u0E48 validators \u0E1E\u0E23\u0E49\u0E2D\u0E21\u0E17\u0E35\u0E48\u0E08\u0E30\u0E2A\u0E48\u0E07 transactions \u0E2A\u0E48\u0E27\u0E19\u0E40\u0E01\u0E34\u0E19\u0E1C\u0E48\u0E32\u0E19 "),Un=n("code",null,"tpu_forwards",-1),An=s(", \u0E21\u0E31\u0E19\u0E08\u0E30\u0E21\u0E35\u0E02\u0E49\u0E2D\u0E08\u0E33\u0E01\u0E31\u0E14\u0E43\u0E19\u0E01\u0E32\u0E23 "),En={href:"https://github.com/solana-labs/solana/blob/master/core/src/banking_stage.rs#L389",target:"_blank",rel:"noopener noreferrer"},Fn=s("\u0E2A\u0E48\u0E07\u0E15\u0E48\u0E2D"),Kn=s(" \u0E2D\u0E22\u0E39\u0E48\u0E14\u0E49\u0E27\u0E22 \u0E42\u0E14\u0E22\u0E43\u0E19\u0E01\u0E32\u0E23\u0E2A\u0E48\u0E07\u0E15\u0E48\u0E2D\u0E08\u0E30\u0E16\u0E39\u0E01\u0E08\u0E33\u0E01\u0E31\u0E14\u0E43\u0E2B\u0E49\u0E02\u0E49\u0E32\u0E21\u0E23\u0E30\u0E2B\u0E27\u0E48\u0E32\u0E07 validators \u0E44\u0E14\u0E49\u0E04\u0E23\u0E31\u0E49\u0E07\u0E40\u0E14\u0E35\u0E22\u0E27 \u0E14\u0E31\u0E07\u0E19\u0E31\u0E49\u0E19 transactions \u0E17\u0E35\u0E48\u0E44\u0E14\u0E49\u0E23\u0E31\u0E1A\u0E1C\u0E48\u0E32\u0E19 "),Nn=n("code",null,"tpu_forwards",-1),Dn=s(" \u0E21\u0E32\u0E41\u0E25\u0E49\u0E27 \u0E08\u0E30\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E2A\u0E48\u0E07\u0E15\u0E48\u0E2D\u0E44\u0E1B\u0E22\u0E31\u0E07 validators \u0E2D\u0E37\u0E48\u0E19\u0E2D\u0E35\u0E01."),In=s("\u0E22\u0E31\u0E07\u0E21\u0E35\u0E2D\u0E35\u0E01 2 \u0E40\u0E2B\u0E15\u0E38\u0E1C\u0E25\u0E27\u0E48\u0E32\u0E17\u0E33\u0E44\u0E21 transaction \u0E2D\u0E32\u0E08\u0E08\u0E30\u0E16\u0E39\u0E01\u0E17\u0E34\u0E49\u0E07\u0E01\u0E48\u0E2D\u0E19\u0E17\u0E35\u0E48\u0E21\u0E31\u0E19\u0E08\u0E30\u0E16\u0E39\u0E01\u0E1B\u0E23\u0E30\u0E21\u0E27\u0E25\u0E1C\u0E25. \u0E01\u0E23\u0E13\u0E35\u0E41\u0E23\u0E01\u0E21\u0E35\u0E04\u0E27\u0E32\u0E21\u0E40\u0E01\u0E35\u0E48\u0E22\u0E27\u0E02\u0E49\u0E2D\u0E07\u0E01\u0E31\u0E1A transactions \u0E17\u0E35\u0E48\u0E2A\u0E48\u0E07\u0E1C\u0E48\u0E32\u0E19 RPC pool \u0E43\u0E19\u0E1A\u0E32\u0E07\u0E04\u0E23\u0E31\u0E49\u0E07\u0E1A\u0E32\u0E07\u0E2A\u0E48\u0E27\u0E19\u0E02\u0E2D\u0E07 RPC pool \u0E08\u0E30\u0E19\u0E33 pool \u0E2D\u0E37\u0E48\u0E19\u0E46 \u0E2D\u0E22\u0E39\u0E48. \u0E40\u0E2B\u0E15\u0E38\u0E01\u0E32\u0E23\u0E13\u0E4C\u0E19\u0E35\u0E49\u0E08\u0E30\u0E17\u0E33\u0E43\u0E2B\u0E49\u0E40\u0E01\u0E34\u0E14\u0E1B\u0E31\u0E0D\u0E2B\u0E32\u0E44\u0E14\u0E49\u0E16\u0E49\u0E32 nodes \u0E43\u0E19 pool \u0E15\u0E49\u0E2D\u0E07\u0E17\u0E33\u0E07\u0E32\u0E19\u0E44\u0E1B\u0E1E\u0E23\u0E49\u0E2D\u0E21\u0E46 \u0E01\u0E31\u0E19 \u0E43\u0E19\u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E19\u0E35\u0E49 transaction\u2019s "),On={href:"https://docs.solana.com/developing/programming-model/transactions#recent-blockhash",target:"_blank",rel:"noopener noreferrer"},Jn=s("recentBlockhash"),Mn=s(" \u0E21\u0E35\u0E01\u0E32\u0E23\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E25\u0E33\u0E14\u0E31\u0E1A\u0E16\u0E31\u0E14\u0E44\u0E1B\u0E08\u0E32\u0E01 pool (Backend A) \u0E41\u0E15\u0E48\u0E40\u0E21\u0E37\u0E48\u0E2D transaction \u0E2A\u0E48\u0E07\u0E44\u0E1B\u0E43\u0E19\u0E2A\u0E48\u0E27\u0E19\u0E17\u0E35\u0E48 pool \u0E15\u0E32\u0E21\u0E2B\u0E25\u0E31\u0E07\u0E2D\u0E22\u0E39\u0E48 (Backend B) nodes \u0E19\u0E31\u0E49\u0E19\u0E01\u0E47\u0E08\u0E30\u0E44\u0E21\u0E48\u0E23\u0E39\u0E49\u0E08\u0E31\u0E01 blockhash \u0E16\u0E31\u0E14\u0E44\u0E1B \u0E41\u0E25\u0E30\u0E08\u0E30\u0E17\u0E34\u0E49\u0E07 transaction \u0E19\u0E31\u0E49\u0E19\u0E44\u0E1B \u0E01\u0E23\u0E13\u0E35\u0E41\u0E1A\u0E1A\u0E19\u0E35\u0E49\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E15\u0E23\u0E27\u0E08\u0E08\u0E31\u0E1A\u0E44\u0E14\u0E49\u0E43\u0E19\u0E23\u0E30\u0E2B\u0E27\u0E48\u0E32\u0E07\u0E01\u0E32\u0E23\u0E2A\u0E48\u0E07 transaction \u0E16\u0E49\u0E32\u0E19\u0E31\u0E01\u0E1E\u0E31\u0E12\u0E19\u0E32\u0E40\u0E1B\u0E34\u0E14\u0E43\u0E0A\u0E49 "),qn={href:"https://docs.solana.com/developing/clients/jsonrpc-api#sendtransaction",target:"_blank",rel:"noopener noreferrer"},Gn=s("preflight checks"),Wn=s(" \u0E40\u0E27\u0E25\u0E32\u0E17\u0E35\u0E48\u0E40\u0E23\u0E35\u0E22\u0E01\u0E43\u0E0A\u0E49 "),Yn=n("code",null,"sendTransaction",-1),Qn=s("."),Xn=c('

    Dropped via RPC Pool

    \u0E01\u0E32\u0E23 fork network \u0E0A\u0E31\u0E48\u0E27\u0E04\u0E23\u0E32\u0E27\u0E01\u0E47\u0E40\u0E1B\u0E47\u0E19\u0E2D\u0E35\u0E01\u0E2A\u0E32\u0E40\u0E2B\u0E15\u0E38\u0E17\u0E35\u0E48\u0E17\u0E33\u0E43\u0E2B\u0E49 transactions \u0E16\u0E39\u0E01\u0E17\u0E34\u0E49\u0E07\u0E16\u0E49\u0E32 validator replay blocks \u0E44\u0E21\u0E48\u0E17\u0E31\u0E19 Banking Stage, \u0E21\u0E31\u0E19\u0E2D\u0E32\u0E08\u0E08\u0E30\u0E08\u0E1A\u0E25\u0E07\u0E15\u0E23\u0E07\u0E17\u0E35\u0E48\u0E40\u0E01\u0E34\u0E14\u0E01\u0E32\u0E23\u0E2A\u0E23\u0E49\u0E32\u0E07 minority fork \u0E02\u0E36\u0E49\u0E19\u0E21\u0E32 \u0E40\u0E21\u0E37\u0E48\u0E2D client \u0E2A\u0E23\u0E49\u0E32\u0E07 transaction \u0E21\u0E31\u0E19\u0E01\u0E47\u0E40\u0E1B\u0E47\u0E19\u0E44\u0E1B\u0E44\u0E14\u0E49\u0E27\u0E48\u0E32 transaction \u0E08\u0E30\u0E16\u0E39\u0E01\u0E2D\u0E49\u0E32\u0E07\u0E44\u0E1B\u0E17\u0E35\u0E48 recentBlockhash \u0E17\u0E35\u0E48\u0E21\u0E35\u0E2D\u0E22\u0E39\u0E48\u0E40\u0E09\u0E1E\u0E32\u0E30\u0E43\u0E19 minority fork \u0E14\u0E31\u0E07\u0E01\u0E25\u0E48\u0E32\u0E27 \u0E2B\u0E25\u0E31\u0E07\u0E08\u0E32\u0E01\u0E2A\u0E48\u0E07 transaction \u0E41\u0E25\u0E49\u0E27 cluster \u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E40\u0E1B\u0E25\u0E35\u0E48\u0E22\u0E19\u0E08\u0E32\u0E01 minority fork \u0E01\u0E48\u0E2D\u0E19\u0E17\u0E35\u0E48 transaction \u0E08\u0E30\u0E16\u0E39\u0E01\u0E1B\u0E23\u0E30\u0E21\u0E27\u0E25\u0E1C\u0E25 \u0E43\u0E19\u0E01\u0E23\u0E13\u0E35\u0E19\u0E35\u0E49 transaction \u0E08\u0E30\u0E16\u0E39\u0E01\u0E17\u0E34\u0E49\u0E07\u0E40\u0E19\u0E37\u0E48\u0E2D\u0E07\u0E08\u0E32\u0E01 blockhash \u0E2B\u0E32\u0E44\u0E21\u0E48\u0E40\u0E08\u0E2D

    Dropped due to Minority Fork (Before Processed)

    \u0E2B\u0E25\u0E31\u0E07\u0E08\u0E32\u0E01 transaction \u0E1B\u0E23\u0E30\u0E21\u0E27\u0E25\u0E1C\u0E25\u0E40\u0E2A\u0E23\u0E47\u0E08 \u0E41\u0E25\u0E30\u0E01\u0E48\u0E2D\u0E19\u0E08\u0E30 finalized

    \u0E43\u0E19\u0E01\u0E23\u0E13\u0E35\u0E17\u0E35\u0E48 transaction \u0E2D\u0E49\u0E32\u0E07\u0E2D\u0E34\u0E07 recentBlockhash \u0E44\u0E1B\u0E17\u0E35\u0E48 minority fork, \u0E21\u0E31\u0E19\u0E01\u0E47\u0E22\u0E31\u0E07\u0E40\u0E1B\u0E47\u0E19\u0E44\u0E1B\u0E44\u0E14\u0E49\u0E17\u0E35\u0E48 transaction \u0E08\u0E30\u0E16\u0E39\u0E01\u0E1B\u0E23\u0E30\u0E21\u0E27\u0E25\u0E1C\u0E25 \u0E41\u0E15\u0E48\u0E2D\u0E22\u0E48\u0E32\u0E2A\u0E07\u0E44\u0E23\u0E01\u0E47\u0E15\u0E32\u0E21\u0E21\u0E31\u0E19\u0E08\u0E30\u0E15\u0E49\u0E2D\u0E07\u0E16\u0E39\u0E01\u0E1B\u0E23\u0E30\u0E21\u0E27\u0E25\u0E1C\u0E25\u0E42\u0E14\u0E22 leader \u0E1A\u0E19 minority fork. \u0E40\u0E21\u0E37\u0E48\u0E2D leader \u0E1E\u0E22\u0E32\u0E22\u0E32\u0E21\u0E40\u0E1C\u0E22\u0E41\u0E1E\u0E23\u0E48 transactions \u0E19\u0E35\u0E49\u0E44\u0E1B\u0E17\u0E31\u0E49\u0E07 network \u0E21\u0E31\u0E19\u0E01\u0E47\u0E08\u0E30\u0E25\u0E49\u0E21\u0E40\u0E2B\u0E25\u0E27 fail \u0E17\u0E35\u0E48\u0E08\u0E30\u0E44\u0E1B\u0E16\u0E36\u0E07\u0E01\u0E32\u0E23 consensus \u0E14\u0E49\u0E27\u0E22 validators \u0E2D\u0E37\u0E48\u0E19\u0E46 \u0E17\u0E35\u0E48\u0E44\u0E21\u0E48\u0E23\u0E39\u0E49\u0E08\u0E31\u0E01 minority fork \u0E19\u0E31\u0E49\u0E19\u0E2D\u0E22\u0E39\u0E48\u0E14\u0E35 \u0E16\u0E36\u0E07\u0E08\u0E38\u0E14\u0E19\u0E35\u0E49 transaction \u0E01\u0E47\u0E08\u0E30\u0E16\u0E39\u0E01\u0E17\u0E34\u0E49\u0E07\u0E01\u0E48\u0E2D\u0E19\u0E17\u0E35\u0E48\u0E21\u0E31\u0E19\u0E08\u0E30\u0E44\u0E1B\u0E16\u0E36\u0E07\u0E02\u0E31\u0E49\u0E19 finalized

    Dropped due to Minority Fork (After Processed)

    \u0E08\u0E31\u0E14\u0E01\u0E32\u0E23 Transactions \u0E17\u0E35\u0E48\u0E16\u0E39\u0E01\u0E17\u0E34\u0E49\u0E07

    \u0E15\u0E2D\u0E19\u0E17\u0E35\u0E48 RPC nodes \u0E1E\u0E22\u0E32\u0E22\u0E32\u0E21 rebroadcast transactions \u0E08\u0E30\u0E43\u0E0A\u0E49 algorithm \u0E17\u0E31\u0E48\u0E27\u0E44\u0E1B\u0E41\u0E25\u0E30 \u0E21\u0E31\u0E01\u0E08\u0E30\u0E44\u0E21\u0E48\u0E15\u0E23\u0E07\u0E01\u0E31\u0E1A\u0E04\u0E27\u0E32\u0E21\u0E15\u0E49\u0E2D\u0E07\u0E01\u0E32\u0E23\u0E02\u0E2D\u0E07 app \u0E41\u0E15\u0E48\u0E25\u0E30\u0E15\u0E31\u0E27 \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E40\u0E15\u0E23\u0E35\u0E22\u0E21\u0E15\u0E31\u0E27\u0E23\u0E31\u0E1A\u0E21\u0E37\u0E2D\u0E43\u0E19\u0E0A\u0E48\u0E27\u0E07 network congestion \u0E19\u0E31\u0E01\u0E1E\u0E31\u0E12\u0E19\u0E32 app \u0E04\u0E27\u0E23\u0E2D\u0E2D\u0E01\u0E41\u0E1A\u0E1A\u0E01\u0E32\u0E23\u0E17\u0E33\u0E07\u0E32\u0E19 rebroadcasting \u0E40\u0E2D\u0E07

    sendTransaction \u0E40\u0E0A\u0E34\u0E07\u0E25\u0E36\u0E01

    \u0E40\u0E21\u0E37\u0E48\u0E2D\u0E1E\u0E39\u0E14\u0E16\u0E36\u0E07\u0E01\u0E32\u0E23\u0E2A\u0E48\u0E07 transactions \u0E40\u0E23\u0E32\u0E08\u0E30\u0E43\u0E0A\u0E49 RPC method sendTransaction \u0E42\u0E14\u0E22 sendTransaction \u0E08\u0E30\u0E23\u0E31\u0E1A\u0E1C\u0E34\u0E14\u0E0A\u0E2D\u0E1A\u0E43\u0E19\u0E01\u0E32\u0E23\u0E2A\u0E48\u0E07 transaction \u0E08\u0E32\u0E01 client \u0E44\u0E1B RPC node \u0E16\u0E49\u0E32 node \u0E44\u0E14\u0E49\u0E23\u0E31\u0E1A transaction \u0E41\u0E25\u0E49\u0E27, sendTransaction \u0E08\u0E30\u0E04\u0E37\u0E19 transaction id \u0E17\u0E35\u0E48\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E43\u0E0A\u0E49\u0E15\u0E34\u0E14\u0E15\u0E32\u0E21 transaction \u0E0B\u0E36\u0E48\u0E07\u0E01\u0E32\u0E23\u0E17\u0E35\u0E48\u0E40\u0E23\u0E32\u0E44\u0E14\u0E49\u0E23\u0E31\u0E1A response \u0E44\u0E21\u0E48\u0E44\u0E14\u0E49\u0E2B\u0E21\u0E32\u0E22\u0E04\u0E27\u0E32\u0E21\u0E27\u0E48\u0E32 transaction \u0E19\u0E31\u0E49\u0E19\u0E08\u0E30\u0E16\u0E39\u0E01\u0E1B\u0E23\u0E30\u0E21\u0E27\u0E25\u0E1C\u0E25\u0E2B\u0E23\u0E37\u0E2D\u0E16\u0E39\u0E01 finalized \u0E14\u0E49\u0E27\u0E22 cluster.

    ',10),Zn={class:"custom-container tip"},$n=n("p",{class:"custom-container-title"},"TIP",-1),ns=n("h4",{id:"request-parameters",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#request-parameters","aria-hidden":"true"},"#"),s(" Request Parameters")],-1),ss=n("li",null,[n("code",null,"transaction"),s(": "),n("code",null,"string"),s(" - Transaction \u0E17\u0E35\u0E48 sign \u0E40\u0E23\u0E35\u0E22\u0E1A\u0E23\u0E49\u0E2D\u0E22\u0E41\u0E25\u0E49\u0E27\u0E43\u0E19\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A encoded string")],-1),ts=s("(optional) "),as=n("code",null,"configuration object",-1),os=s(": "),es=n("code",null,"object",-1),cs=n("li",null,[n("code",null,"skipPreflight"),s(": "),n("code",null,"boolean"),s(" - \u0E16\u0E49\u0E32\u0E40\u0E1B\u0E47\u0E19 true, \u0E08\u0E30\u0E02\u0E49\u0E32\u0E21\u0E01\u0E32\u0E23\u0E17\u0E33 preflight \u0E44\u0E1B (\u0E04\u0E48\u0E32\u0E1B\u0E01\u0E15\u0E34\u0E04\u0E37\u0E2D: false)")],-1),rs=s("(optional) "),is=n("code",null,"preflightCommitment",-1),ls=s(": "),ps=n("code",null,"string",-1),ds=s(" - "),us={href:"https://docs.solana.com/developing/clients/jsonrpc-api#configuring-state-commitment",target:"_blank",rel:"noopener noreferrer"},hs=s("Commitment"),_s=s(' \u0E23\u0E30\u0E14\u0E31\u0E1A\u0E43\u0E19\u0E01\u0E32\u0E23\u0E08\u0E33\u0E25\u0E2D\u0E07 preflight \u0E01\u0E31\u0E1A bank slot (\u0E04\u0E48\u0E32\u0E1B\u0E01\u0E15\u0E34\u0E04\u0E37\u0E2D: "finalized").'),ks=n("li",null,[s("(optional) "),n("code",null,"encoding"),s(": "),n("code",null,"string"),s(' - Encoding \u0E17\u0E35\u0E48\u0E43\u0E0A\u0E49\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A transaction data. \u0E2D\u0E32\u0E08\u0E08\u0E30\u0E40\u0E1B\u0E47\u0E19 "base58" (\u0E0A\u0E49\u0E32) \u0E2B\u0E23\u0E37\u0E2D "base64" (\u0E04\u0E48\u0E32\u0E1B\u0E01\u0E15\u0E34\u0E04\u0E37\u0E2D: "base58").')],-1),bs=n("li",null,[s("(optional) "),n("code",null,"maxRetries"),s(": "),n("code",null,"usize"),s(" - \u0E40\u0E25\u0E02\u0E21\u0E32\u0E01\u0E17\u0E35\u0E48\u0E2A\u0E38\u0E14\u0E02\u0E2D\u0E07\u0E02\u0E2D\u0E07\u0E40\u0E27\u0E25\u0E32\u0E17\u0E35\u0E48 RPC node \u0E08\u0E30\u0E1E\u0E22\u0E32\u0E22\u0E32\u0E21\u0E2A\u0E48\u0E07 transaction \u0E44\u0E1B\u0E16\u0E36\u0E07 leader. \u0E16\u0E49\u0E32\u0E44\u0E21\u0E48\u0E01\u0E33\u0E2B\u0E19\u0E14 RPC node \u0E08\u0E30 retry transaction \u0E08\u0E19\u0E01\u0E23\u0E30\u0E17\u0E31\u0E48\u0E07\u0E16\u0E39\u0E01 finalized \u0E2B\u0E23\u0E37\u0E2D\u0E08\u0E19\u0E01\u0E23\u0E30\u0E17\u0E31\u0E48\u0E07 blockhash \u0E2B\u0E21\u0E14\u0E2D\u0E32\u0E22\u0E38")],-1),gs=n("h4",{id:"response",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#response","aria-hidden":"true"},"#"),s(" Response")],-1),ms=n("code",null,"transaction id",-1),fs=s(": "),ys=n("code",null,"string",-1),ws=s(" - transaction signature \u0E41\u0E23\u0E01\u0E08\u0E30\u0E16\u0E39\u0E01\u0E40\u0E01\u0E47\u0E1A\u0E2D\u0E22\u0E39\u0E48\u0E43\u0E19 transaction \u0E43\u0E19\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A base-58 encoded string \u0E0B\u0E36\u0E48\u0E07 transaction id \u0E19\u0E35\u0E49\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E43\u0E0A\u0E49\u0E01\u0E31\u0E1A "),Ps={href:"https://docs.solana.com/developing/clients/jsonrpc-api#getsignaturestatuses",target:"_blank",rel:"noopener noreferrer"},vs=s("getSignatureStatuses"),Rs=s(" \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E14\u0E36\u0E07\u0E2A\u0E16\u0E32\u0E19\u0E30\u0E21\u0E32\u0E14\u0E39\u0E44\u0E14\u0E49."),Ts=n("h2",{id:"\u0E17\u0E4D\u0E32-rebroadcast-logic-\u0E40\u0E2D\u0E07",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E17\u0E4D\u0E32-rebroadcast-logic-\u0E40\u0E2D\u0E07","aria-hidden":"true"},"#"),s(" \u0E17\u0E33 Rebroadcast Logic \u0E40\u0E2D\u0E07")],-1),Cs=s("\u0E43\u0E19\u0E01\u0E32\u0E23\u0E17\u0E35\u0E48\u0E08\u0E30\u0E1E\u0E31\u0E12\u0E19\u0E32 rebroadcasting logic \u0E14\u0E49\u0E27\u0E22\u0E15\u0E31\u0E27\u0E40\u0E2D\u0E07 \u0E19\u0E31\u0E01\u0E1E\u0E31\u0E12\u0E19\u0E32\u0E04\u0E27\u0E23\u0E43\u0E0A\u0E49 "),xs=n("code",null,"sendTransaction",-1),Ss=s(", "),Bs=n("code",null,"maxRetries",-1),Ls=s(" parameter. \u0E16\u0E49\u0E32\u0E01\u0E33\u0E2B\u0E19\u0E14\u0E04\u0E48\u0E32 "),js=n("code",null,"maxRetries",-1),Hs=s(" \u0E21\u0E31\u0E19\u0E01\u0E47\u0E08\u0E30\u0E01\u0E33\u0E2B\u0E19\u0E14\u0E17\u0E31\u0E1A\u0E04\u0E48\u0E32\u0E1B\u0E01\u0E15\u0E34\u0E02\u0E2D\u0E07 RPC node retry logic, \u0E17\u0E33\u0E43\u0E2B\u0E49\u0E19\u0E31\u0E01\u0E1E\u0E31\u0E12\u0E19\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E01\u0E33\u0E2B\u0E19\u0E14\u0E0A\u0E48\u0E27\u0E07\u0E01\u0E32\u0E23 retry "),Vs={href:"https://github.com/solana-labs/solana/blob/98707baec2385a4f7114d2167ef6dfb1406f954f/validator/src/main.rs#L1258-L1274",target:"_blank",rel:"noopener noreferrer"},zs=s("\u0E44\u0E14\u0E49\u0E15\u0E32\u0E21\u0E04\u0E27\u0E32\u0E21\u0E40\u0E2B\u0E21\u0E32\u0E30\u0E2A\u0E21"),Us=s("."),As=s("pattern \u0E1B\u0E01\u0E15\u0E34\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E01\u0E32\u0E23 retrying transactions \u0E08\u0E30\u0E40\u0E01\u0E35\u0E48\u0E22\u0E27\u0E02\u0E49\u0E2D\u0E07\u0E01\u0E31\u0E1A\u0E01\u0E32\u0E23\u0E40\u0E01\u0E47\u0E1A "),Es=n("code",null,"lastValidBlockHeight",-1),Fs=s(" \u0E17\u0E35\u0E48\u0E21\u0E32\u0E08\u0E32\u0E01 "),Ks={href:"https://docs.solana.com/developing/clients/jsonrpc-api#getlatestblockhash",target:"_blank",rel:"noopener noreferrer"},Ns=s("getLatestBlockhash"),Ds=s(" \u0E40\u0E21\u0E37\u0E48\u0E2D\u0E40\u0E01\u0E47\u0E1A\u0E44\u0E27\u0E49\u0E41\u0E25\u0E49\u0E27 app \u0E01\u0E47\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 "),Is={href:"https://docs.solana.com/developing/clients/jsonrpc-api#getblockheight",target:"_blank",rel:"noopener noreferrer"},Os=s("\u0E14\u0E36\u0E07 cluster\u2019s blockheight"),Js=s(" \u0E41\u0E25\u0E30 retry transaction \u0E43\u0E19\u0E0A\u0E48\u0E27\u0E07\u0E40\u0E27\u0E25\u0E32\u0E17\u0E35\u0E48\u0E41\u0E2B\u0E21\u0E32\u0E30\u0E2A\u0E21. \u0E2B\u0E32\u0E01\u0E40\u0E01\u0E34\u0E14 network congestion \u0E01\u0E47\u0E43\u0E2B\u0E49\u0E1B\u0E23\u0E31\u0E1A "),Ms=n("code",null,"maxRetries",-1),qs=s(" \u0E40\u0E1B\u0E47\u0E19 0 \u0E01\u0E47\u0E08\u0E30\u0E14\u0E35\u0E01\u0E27\u0E48\u0E32 \u0E41\u0E25\u0E30 rebroadcast \u0E40\u0E2D\u0E07\u0E2D\u0E35\u0E01\u0E17\u0E35 \u0E1A\u0E32\u0E07 app \u0E2D\u0E32\u0E08\u0E08\u0E30\u0E43\u0E0A\u0E49 "),Gs={href:"https://en.wikipedia.org/wiki/Exponential_backoff",target:"_blank",rel:"noopener noreferrer"},Ws=s("exponential backoff"),Ys=s(" algorithm \u0E2B\u0E23\u0E37\u0E2D\u0E27\u0E34\u0E18\u0E35\u0E41\u0E1A\u0E1A "),Qs={href:"https://www.mango.markets/",target:"_blank",rel:"noopener noreferrer"},Xs=s("Mango"),Zs=s(" \u0E40\u0E1E\u0E37\u0E48\u0E2D "),$s={href:"https://github.com/blockworks-foundation/mango-ui/blob/b6abfc6c13b71fc17ebbe766f50b8215fa1ec54f/src/utils/send.tsx#L713",target:"_blank",rel:"noopener noreferrer"},nt=s("\u0E2A\u0E48\u0E07 transactions \u0E40\u0E23\u0E37\u0E48\u0E2D\u0E22\u0E46"),st=s(" \u0E43\u0E19\u0E40\u0E27\u0E25\u0E32\u0E17\u0E35\u0E48\u0E40\u0E2B\u0E21\u0E32\u0E30\u0E2A\u0E21\u0E08\u0E19\u0E40\u0E01\u0E34\u0E14 timeout"),tt=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` +import{_ as p,r as o,o as d,c as u,a as n,b as t,w as e,F as h,d as s,e as c}from"./app.2fbb9e96.js";var _="/assets/tx-journey.dd6310be.png",k="/assets/tpu-jito-labs.8bb32fb6.png",b="/assets/dropped-via-rpc-pool.8d1ce9af.png",g="/assets/dropped-minority-fork-pre-process.555653e1.png",m="/assets/dropped-minority-fork-post-process.48c3c955.png";const f={},y=n("h1",{id:"retrying-transactions",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#retrying-transactions","aria-hidden":"true"},"#"),s(" Retrying Transactions")],-1),w=s("\u0E43\u0E19\u0E1A\u0E32\u0E07\u0E17\u0E35 transaction \u0E2D\u0E32\u0E08\u0E08\u0E30\u0E16\u0E39\u0E01\u0E17\u0E34\u0E49\u0E07\u0E44\u0E1B\u0E01\u0E48\u0E2D\u0E19\u0E17\u0E35\u0E48\u0E08\u0E30\u0E40\u0E02\u0E49\u0E32\u0E44\u0E1B\u0E43\u0E19 block \u0E2A\u0E34\u0E48\u0E07\u0E19\u0E35\u0E49\u0E40\u0E01\u0E34\u0E14\u0E02\u0E36\u0E49\u0E19\u0E1A\u0E48\u0E2D\u0E22\u0E43\u0E19\u0E0A\u0E48\u0E27\u0E07\u0E17\u0E35\u0E48\u0E21\u0E35\u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19\u0E40\u0E22\u0E2D\u0E30\u0E08\u0E19\u0E01\u0E32\u0E23\u0E17\u0E33\u0E07\u0E32\u0E19\u0E15\u0E34\u0E14\u0E02\u0E31\u0E14 (network congestion) \u0E43\u0E19\u0E15\u0E2D\u0E19\u0E17\u0E35\u0E48 RPC node \u0E44\u0E21\u0E48\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E2A\u0E48\u0E07 transaction \u0E44\u0E1B\u0E17\u0E35\u0E48 "),P={href:"https://docs.solana.com/terminology#leader",target:"_blank",rel:"noopener noreferrer"},v=s("\u0E1C\u0E39\u0E49\u0E19\u0E33 (leader)"),R=s(" \u0E44\u0E14\u0E49 \u0E1D\u0E31\u0E48\u0E07 end-user \u0E08\u0E30\u0E40\u0E2B\u0E47\u0E19\u0E27\u0E48\u0E32 transaction \u0E44\u0E14\u0E49\u0E2B\u0E32\u0E22\u0E44\u0E1B\u0E40\u0E25\u0E22 \u0E16\u0E36\u0E07 RPC nodes \u0E08\u0E30\u0E21\u0E35 rebroadcasting algorithm \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E2A\u0E48\u0E07\u0E0B\u0E49\u0E33\u0E17\u0E31\u0E48\u0E27\u0E44\u0E1B\u0E2D\u0E22\u0E39\u0E48\u0E41\u0E25\u0E49\u0E27 \u0E41\u0E15\u0E48\u0E19\u0E31\u0E01\u0E1E\u0E31\u0E12\u0E19\u0E32 app \u0E01\u0E47\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E17\u0E33 custom rebroadcasting logic \u0E40\u0E2D\u0E07\u0E44\u0E14\u0E49."),T=c('

    \u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49

    Fact Sheet

    • RPC nodes \u0E08\u0E30\u0E1E\u0E22\u0E32\u0E22\u0E32\u0E21 rebroadcast transactions \u0E42\u0E14\u0E22\u0E43\u0E0A\u0E49 algorithm \u0E17\u0E31\u0E48\u0E27\u0E44\u0E1B
    • \u0E19\u0E31\u0E01\u0E1E\u0E31\u0E12\u0E19\u0E32 app \u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E17\u0E33 custom rebroadcasting logic \u0E40\u0E2D\u0E07\u0E44\u0E14\u0E49
    • \u0E19\u0E31\u0E01\u0E1E\u0E31\u0E12\u0E19\u0E32 \u0E04\u0E27\u0E23\u0E43\u0E0A\u0E49 maxRetries parameter \u0E15\u0E2D\u0E19 sendTransaction JSON-RPC method
    • \u0E19\u0E31\u0E01\u0E1E\u0E31\u0E12\u0E19\u0E32 \u0E04\u0E27\u0E23\u0E43\u0E0A\u0E49 preflight \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E43\u0E2B\u0E49\u0E40\u0E2B\u0E47\u0E19\u0E1B\u0E31\u0E0D\u0E2B\u0E32\u0E01\u0E48\u0E2D\u0E19\u0E17\u0E35\u0E48\u0E08\u0E30 submit transactions
    • \u0E01\u0E48\u0E2D\u0E19\u0E08\u0E30 re-signing transaction \u0E43\u0E14\u0E46 \u0E21\u0E31\u0E19\u0E2A\u0E33\u0E04\u0E31\u0E0D\u0E21\u0E32\u0E01 \u0E17\u0E35\u0E48\u0E08\u0E30\u0E41\u0E19\u0E48\u0E43\u0E08\u0E27\u0E48\u0E32 blockhash \u0E15\u0E31\u0E27\u0E01\u0E48\u0E2D\u0E19\u0E2B\u0E19\u0E49\u0E32\u0E44\u0E14\u0E49 expired \u0E44\u0E1B\u0E41\u0E25\u0E49\u0E27

    \u0E01\u0E32\u0E23\u0E40\u0E14\u0E34\u0E19\u0E17\u0E32\u0E07\u0E02\u0E2D\u0E07 Transaction

    Clients Submit Transactions \u0E22\u0E31\u0E07\u0E44\u0E07

    \u0E1A\u0E19 Solana \u0E08\u0E30\u0E44\u0E21\u0E48\u0E21\u0E35 mempool \u0E17\u0E38\u0E01\u0E46 transactions \u0E44\u0E21\u0E48\u0E27\u0E48\u0E32\u0E08\u0E30\u0E21\u0E32\u0E08\u0E32\u0E01 program \u0E2B\u0E23\u0E37\u0E2D end-user \u0E01\u0E47\u0E08\u0E30\u0E16\u0E39\u0E01\u0E2A\u0E48\u0E07\u0E44\u0E1B\u0E17\u0E35\u0E48 leaders \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E08\u0E30\u0E44\u0E14\u0E49\u0E44\u0E1B\u0E25\u0E07 block \u0E42\u0E14\u0E19\u0E08\u0E30\u0E21\u0E35\u0E2D\u0E22\u0E39\u0E48 2 \u0E17\u0E32\u0E07\u0E17\u0E35\u0E48 transaction \u0E08\u0E30\u0E2A\u0E48\u0E07\u0E44\u0E1B\u0E16\u0E36\u0E07 leaders:

    ',5),C=s("\u0E1C\u0E48\u0E32\u0E19 RPC server \u0E14\u0E49\u0E27\u0E22 method "),x={href:"https://docs.solana.com/developing/clients/jsonrpc-api#sendtransaction",target:"_blank",rel:"noopener noreferrer"},S=s("sendTransaction"),B=s(" JSON-RPC"),L=s("\u0E2A\u0E48\u0E07\u0E44\u0E1B\u0E15\u0E23\u0E07\u0E46 \u0E1C\u0E48\u0E32\u0E19 "),j={href:"https://docs.rs/solana-client/1.7.3/solana_client/tpu_client/index.html",target:"_blank",rel:"noopener noreferrer"},H=s("TPU Client"),V=n("p",null,"end-users \u0E2A\u0E48\u0E27\u0E19\u0E43\u0E2B\u0E0D\u0E48\u0E08\u0E30 submit transactions \u0E1C\u0E48\u0E32\u0E19 RPC server \u0E40\u0E21\u0E37\u0E48\u0E2D client \u0E44\u0E14\u0E49 submits transaction \u0E44\u0E1B\u0E41\u0E25\u0E49\u0E27\u0E15\u0E31\u0E27 RPC node \u0E08\u0E30\u0E1E\u0E22\u0E32\u0E22\u0E32\u0E21 broadcast transaction \u0E44\u0E1B\u0E2B\u0E32\u0E17\u0E31\u0E49\u0E07 leaders \u0E1B\u0E31\u0E08\u0E08\u0E38\u0E1A\u0E31\u0E19 \u0E41\u0E25\u0E30 leaders \u0E16\u0E31\u0E14\u0E44\u0E1B \u0E08\u0E19\u0E01\u0E23\u0E30\u0E17\u0E31\u0E48\u0E07 transaction \u0E44\u0E14\u0E49\u0E23\u0E31\u0E1A\u0E01\u0E32\u0E23\u0E1B\u0E23\u0E30\u0E21\u0E27\u0E25\u0E1C\u0E25\u0E08\u0E32\u0E01 leader \u0E41\u0E25\u0E30\u0E21\u0E31\u0E19\u0E08\u0E30\u0E44\u0E21\u0E48\u0E21\u0E35\u0E1A\u0E31\u0E19\u0E17\u0E36\u0E01\u0E02\u0E2D\u0E07 transaction \u0E2D\u0E37\u0E48\u0E19\u0E43\u0E14\u0E19\u0E2D\u0E01\u0E40\u0E2B\u0E19\u0E37\u0E2D\u0E44\u0E1B\u0E08\u0E32\u0E01\u0E17\u0E35\u0E48 client \u0E41\u0E25\u0E30 RPC nodes \u0E23\u0E31\u0E1A\u0E23\u0E39\u0E49. \u0E43\u0E19\u0E01\u0E23\u0E13\u0E35\u0E02\u0E2D\u0E07 TPU client, \u0E01\u0E32\u0E23 rebroadcast \u0E41\u0E25\u0E30\u0E2A\u0E48\u0E07\u0E15\u0E48\u0E2D\u0E44\u0E1B\u0E17\u0E35\u0E48 leader \u0E08\u0E30\u0E02\u0E36\u0E49\u0E19\u0E2D\u0E22\u0E39\u0E48\u0E01\u0E31\u0E1A client \u0E17\u0E31\u0E49\u0E07\u0E2B\u0E21\u0E14.",-1),z=n("p",null,[n("img",{src:_,alt:"\u0E01\u0E32\u0E23\u0E40\u0E14\u0E34\u0E19\u0E17\u0E32\u0E07\u0E02\u0E2D\u0E07 Transaction"})],-1),U=n("h3",{id:"rpc-nodes-broadcast-transactions-\u0E22\u0E31\u0E07\u0E44\u0E07",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#rpc-nodes-broadcast-transactions-\u0E22\u0E31\u0E07\u0E44\u0E07","aria-hidden":"true"},"#"),s(" RPC Nodes Broadcast Transactions \u0E22\u0E31\u0E07\u0E44\u0E07")],-1),A=s("\u0E2B\u0E25\u0E31\u0E07\u0E08\u0E32\u0E01 RPC node \u0E23\u0E31\u0E1A transaction \u0E1C\u0E48\u0E32\u0E19 "),E=n("code",null,"sendTransaction",-1),F=s(" \u0E15\u0E31\u0E27 transaction \u0E01\u0E47\u0E08\u0E30\u0E16\u0E39\u0E01\u0E40\u0E1B\u0E25\u0E35\u0E48\u0E22\u0E19\u0E44\u0E1B\u0E40\u0E1B\u0E47\u0E19 "),K={href:"https://en.wikipedia.org/wiki/User_Datagram_Protocol",target:"_blank",rel:"noopener noreferrer"},N=s("UDP"),D=s(" packet \u0E01\u0E48\u0E2D\u0E19\u0E08\u0E30\u0E2A\u0E48\u0E07\u0E15\u0E48\u0E2D\u0E44\u0E1B\u0E17\u0E35\u0E48 leaders \u0E17\u0E35\u0E48\u0E40\u0E01\u0E35\u0E48\u0E22\u0E27\u0E02\u0E49\u0E2D\u0E07 \u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49 UDP \u0E08\u0E30\u0E17\u0E33\u0E43\u0E2B\u0E49 validators \u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E15\u0E34\u0E14\u0E15\u0E48\u0E2D\u0E01\u0E31\u0E19\u0E44\u0E14\u0E49\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E23\u0E27\u0E14\u0E40\u0E23\u0E47\u0E27 \u0E41\u0E15\u0E48\u0E08\u0E30\u0E44\u0E21\u0E48\u0E23\u0E31\u0E1A\u0E1B\u0E23\u0E30\u0E01\u0E31\u0E19\u0E27\u0E48\u0E32 transaction \u0E08\u0E30\u0E2A\u0E48\u0E07\u0E16\u0E36\u0E07\u0E41\u0E19\u0E48\u0E19\u0E2D\u0E19."),I=s("\u0E40\u0E19\u0E37\u0E48\u0E2D\u0E07\u0E08\u0E32\u0E01\u0E01\u0E32\u0E23\u0E17\u0E33\u0E07\u0E32\u0E19\u0E02\u0E2D\u0E07 Solana leader \u0E08\u0E30\u0E23\u0E39\u0E49\u0E01\u0E48\u0E2D\u0E19\u0E2D\u0E22\u0E39\u0E48\u0E41\u0E25\u0E49\u0E27\u0E43\u0E19\u0E17\u0E38\u0E01\u0E46 "),O={href:"https://docs.solana.com/terminology#epoch",target:"_blank",rel:"noopener noreferrer"},J=s("epoch"),M=s(" (~2 \u0E27\u0E31\u0E19) \u0E15\u0E31\u0E27 RPC node \u0E08\u0E30\u0E01\u0E23\u0E30\u0E08\u0E32\u0E22 transaction \u0E44\u0E1B\u0E2B\u0E32\u0E17\u0E31\u0E49\u0E07 leaders \u0E15\u0E31\u0E27\u0E1B\u0E31\u0E08\u0E08\u0E38\u0E1A\u0E31\u0E19 \u0E41\u0E25\u0E30\u0E15\u0E31\u0E27\u0E16\u0E31\u0E14\u0E44\u0E1B \u0E15\u0E23\u0E07\u0E08\u0E38\u0E14\u0E19\u0E35\u0E49\u0E08\u0E30\u0E44\u0E21\u0E48\u0E40\u0E2B\u0E21\u0E37\u0E2D\u0E19 gossip protocols \u0E2D\u0E37\u0E48\u0E19\u0E40\u0E0A\u0E48\u0E19 Ethereum \u0E17\u0E35\u0E48\u0E40\u0E1C\u0E22\u0E41\u0E1E\u0E23\u0E48 transactions \u0E41\u0E1A\u0E1A\u0E2A\u0E38\u0E48\u0E21 \u0E41\u0E25\u0E30\u0E2A\u0E48\u0E07\u0E44\u0E1B\u0E17\u0E31\u0E49\u0E07 network \u0E15\u0E32\u0E21\u0E1B\u0E01\u0E15\u0E34\u0E41\u0E25\u0E49\u0E27 RPC nodes \u0E08\u0E30\u0E1E\u0E22\u0E32\u0E22\u0E32\u0E21\u0E2A\u0E48\u0E07 transactions \u0E44\u0E1B\u0E2B\u0E32 leaders \u0E17\u0E38\u0E01\u0E46 2 \u0E27\u0E34\u0E19\u0E32\u0E17\u0E35 \u0E08\u0E19\u0E01\u0E23\u0E30\u0E17\u0E31\u0E48\u0E07 transaction \u0E16\u0E39\u0E01 finalized \u0E2B\u0E23\u0E37\u0E2D blockhash \u0E2B\u0E21\u0E14\u0E2D\u0E32\u0E22\u0E38 (150 blocks \u0E2B\u0E23\u0E37\u0E2D ~1 \u0E19\u0E32\u0E17\u0E35 19 \u0E27\u0E34\u0E19\u0E32\u0E17\u0E35 \u0E13. \u0E15\u0E2D\u0E19\u0E17\u0E35\u0E48\u0E40\u0E02\u0E35\u0E22\u0E19\u0E19\u0E35\u0E49). \u0E16\u0E49\u0E32\u0E21\u0E35\u0E04\u0E34\u0E27\u0E43\u0E19\u0E01\u0E32\u0E23 rebroadcast \u0E15\u0E01\u0E04\u0E49\u0E32\u0E07\u0E2D\u0E22\u0E39\u0E48\u0E40\u0E01\u0E34\u0E19 "),q={href:"https://github.com/solana-labs/solana/blob/bfbbc53dac93b3a5c6be9b4b65f679fdb13e41d9/send-transaction-service/src/send_transaction_service.rs#L20",target:"_blank",rel:"noopener noreferrer"},G=s("10,000 transactions"),W=s(" \u0E08\u0E30\u0E17\u0E33\u0E43\u0E2B\u0E49 transactions \u0E43\u0E2B\u0E21\u0E48\u0E16\u0E39\u0E01\u0E17\u0E34\u0E49\u0E07\u0E44\u0E1B \u0E0B\u0E36\u0E48\u0E07\u0E08\u0E30\u0E21\u0E35\u0E04\u0E33\u0E2A\u0E31\u0E48\u0E07 command-line "),Y={href:"https://github.com/solana-labs/solana/blob/bfbbc53dac93b3a5c6be9b4b65f679fdb13e41d9/validator/src/main.rs#L1172",target:"_blank",rel:"noopener noreferrer"},Q=s("arguments"),X=s(" \u0E17\u0E35\u0E48\u0E04\u0E19\u0E14\u0E39\u0E41\u0E25 RPC \u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E1B\u0E23\u0E31\u0E1A\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E40\u0E1B\u0E25\u0E35\u0E48\u0E22\u0E19\u0E04\u0E48\u0E32\u0E40\u0E23\u0E34\u0E48\u0E21\u0E15\u0E49\u0E19\u0E02\u0E2D\u0E07\u0E01\u0E32\u0E23 retry \u0E19\u0E35\u0E49\u0E44\u0E14\u0E49"),Z=s("\u0E40\u0E27\u0E25\u0E32\u0E17\u0E35\u0E48 RPC node \u0E08\u0E30\u0E17\u0E33\u0E01\u0E32\u0E23\u0E40\u0E1C\u0E22\u0E41\u0E1E\u0E23\u0E48 transaction \u0E21\u0E31\u0E19\u0E08\u0E30\u0E1E\u0E22\u0E32\u0E22\u0E32\u0E21\u0E2A\u0E48\u0E07\u0E15\u0E48\u0E44\u0E1B\u0E17\u0E35\u0E48 transaction leader\u2019s "),$={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/validator.rs#L867",target:"_blank",rel:"noopener noreferrer"},nn=s("Transaction Processing Unit (TPU)"),sn=s(" \u0E01\u0E32\u0E23\u0E1B\u0E23\u0E30\u0E21\u0E27\u0E25\u0E1C\u0E25 transactions \u0E02\u0E2D\u0E07 TPU \u0E08\u0E30\u0E41\u0E1A\u0E48\u0E07\u0E40\u0E1B\u0E47\u0E19 5 \u0E02\u0E31\u0E49\u0E19\u0E15\u0E2D\u0E19:"),tn={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/fetch_stage.rs#L21",target:"_blank",rel:"noopener noreferrer"},an=s("Fetch Stage"),on={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/tpu.rs#L91",target:"_blank",rel:"noopener noreferrer"},en=s("SigVerify Stage"),cn={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/banking_stage.rs#L249",target:"_blank",rel:"noopener noreferrer"},rn=s("Banking Stage"),ln={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/poh/src/poh_service.rs",target:"_blank",rel:"noopener noreferrer"},pn=s("Proof of History Service"),dn={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/tpu.rs#L136",target:"_blank",rel:"noopener noreferrer"},un=s("Broadcast Stage"),hn=n("p",null,[n("img",{src:k,alt:"TPU Overview"}),n("small",{style:{display:"block","text-align":"center"}},"Image Courtesy of Jito Labs")],-1),_n=n("p",null,"\u0E08\u0E32\u0E01 5 \u0E02\u0E31\u0E49\u0E19\u0E15\u0E2D\u0E19\u0E19\u0E35\u0E49\u0E0A\u0E48\u0E27\u0E07 Fetch Stage \u0E08\u0E30\u0E23\u0E31\u0E1A\u0E1C\u0E34\u0E14\u0E0A\u0E2D\u0E1A\u0E01\u0E32\u0E23\u0E23\u0E31\u0E1A transactions \u0E15\u0E2D\u0E19 Fetch Stage, validators \u0E08\u0E30\u0E08\u0E31\u0E14\u0E2B\u0E21\u0E27\u0E14\u0E2B\u0E21\u0E39\u0E48 transactions \u0E2D\u0E2D\u0E01\u0E40\u0E1B\u0E47\u0E19 3 \u0E0A\u0E48\u0E2D\u0E07\u0E17\u0E32\u0E07\u0E14\u0E31\u0E07\u0E19\u0E35\u0E49:",-1),kn={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/gossip/src/contact_info.rs#L27",target:"_blank",rel:"noopener noreferrer"},bn=s("tpu"),gn=s(" \u0E08\u0E31\u0E14\u0E01\u0E32\u0E23 transactions \u0E1E\u0E27\u0E01 token transfers, NFT mints, \u0E41\u0E25\u0E30 program instructions"),mn={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/gossip/src/contact_info.rs#L31",target:"_blank",rel:"noopener noreferrer"},fn=s("tpu_vote"),yn=s(" \u0E08\u0E31\u0E14\u0E01\u0E32\u0E23\u0E40\u0E09\u0E1E\u0E32\u0E30 transactions \u0E17\u0E35\u0E48\u0E40\u0E01\u0E35\u0E48\u0E22\u0E27\u0E01\u0E31\u0E1A\u0E01\u0E32\u0E23 vote"),wn={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/gossip/src/contact_info.rs#L29",target:"_blank",rel:"noopener noreferrer"},Pn=s("tpu_forwards"),vn=s(" \u0E2A\u0E48\u0E07\u0E15\u0E48\u0E2D packets \u0E17\u0E35\u0E48\u0E22\u0E31\u0E07\u0E44\u0E21\u0E48\u0E44\u0E14\u0E49\u0E14\u0E33\u0E40\u0E19\u0E34\u0E19\u0E01\u0E32\u0E23\u0E44\u0E1B\u0E22\u0E31\u0E07 leader \u0E16\u0E31\u0E14\u0E44\u0E1B\u0E16\u0E49\u0E32 leader \u0E1B\u0E31\u0E08\u0E08\u0E38\u0E1A\u0E31\u0E19 \u0E44\u0E21\u0E48\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 process \u0E17\u0E38\u0E01 transactions \u0E44\u0E14\u0E49\u0E41\u0E25\u0E49\u0E27"),Rn=s("\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07 TPU, \u0E2B\u0E32\u0E2D\u0E48\u0E32\u0E19\u0E40\u0E1E\u0E34\u0E48\u0E21\u0E40\u0E15\u0E34\u0E21\u0E44\u0E14\u0E49\u0E17\u0E35\u0E48 "),Tn={href:"https://jito-labs.medium.com/solana-validator-101-transaction-processing-90bcdc271143",target:"_blank",rel:"noopener noreferrer"},Cn=s("this excellent writeup by Jito Labs"),xn=s("."),Sn=n("h2",{id:"transactions-\u0E16\u0E39\u0E01\u0E17\u0E34\u0E49\u0E07\u0E44\u0E1B\u0E44\u0E14\u0E49\u0E22\u0E31\u0E07\u0E44\u0E07",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#transactions-\u0E16\u0E39\u0E01\u0E17\u0E34\u0E49\u0E07\u0E44\u0E1B\u0E44\u0E14\u0E49\u0E22\u0E31\u0E07\u0E44\u0E07","aria-hidden":"true"},"#"),s(" Transactions \u0E16\u0E39\u0E01\u0E17\u0E34\u0E49\u0E07\u0E44\u0E1B\u0E44\u0E14\u0E49\u0E22\u0E31\u0E07\u0E44\u0E07")],-1),Bn=n("p",null,"\u0E15\u0E25\u0E2D\u0E14\u0E01\u0E32\u0E23\u0E40\u0E14\u0E34\u0E19\u0E17\u0E32\u0E07\u0E02\u0E2D\u0E07 transaction, \u0E2D\u0E32\u0E08\u0E08\u0E30\u0E21\u0E35\u0E40\u0E2B\u0E15\u0E38\u0E01\u0E32\u0E23\u0E13\u0E4C\u0E1A\u0E32\u0E07\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E17\u0E35\u0E48\u0E17\u0E33\u0E43\u0E2B\u0E49 transaction \u0E16\u0E39\u0E01\u0E17\u0E34\u0E49\u0E07\u0E44\u0E1B\u0E08\u0E32\u0E01 network \u0E44\u0E14\u0E49\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E15\u0E31\u0E49\u0E07\u0E43\u0E08.",-1),Ln=n("h3",{id:"\u0E01\u0E48\u0E2D\u0E19-transaction-\u0E08\u0E30\u0E1B\u0E23\u0E30\u0E21\u0E27\u0E25\u0E1C\u0E25\u0E40\u0E2A\u0E23\u0E47\u0E08",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E01\u0E48\u0E2D\u0E19-transaction-\u0E08\u0E30\u0E1B\u0E23\u0E30\u0E21\u0E27\u0E25\u0E1C\u0E25\u0E40\u0E2A\u0E23\u0E47\u0E08","aria-hidden":"true"},"#"),s(" \u0E01\u0E48\u0E2D\u0E19 transaction \u0E08\u0E30\u0E1B\u0E23\u0E30\u0E21\u0E27\u0E25\u0E1C\u0E25\u0E40\u0E2A\u0E23\u0E47\u0E08")],-1),jn=s("\u0E16\u0E49\u0E32 transaction \u0E16\u0E39\u0E01\u0E17\u0E34\u0E49\u0E07 \u0E2A\u0E48\u0E27\u0E19\u0E43\u0E2B\u0E0D\u0E48\u0E08\u0E30\u0E40\u0E01\u0E34\u0E14\u0E01\u0E48\u0E2D\u0E19\u0E17\u0E35\u0E48 transaction \u0E08\u0E30\u0E16\u0E39\u0E01\u0E1B\u0E23\u0E30\u0E21\u0E27\u0E25\u0E1C\u0E25\u0E42\u0E14\u0E22 leader \u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07 UDP "),Hn={href:"https://en.wikipedia.org/wiki/Packet_loss",target:"_blank",rel:"noopener noreferrer"},Vn=s("packet loss"),zn=s(" \u0E40\u0E2B\u0E15\u0E38\u0E1C\u0E25\u0E27\u0E48\u0E32\u0E17\u0E33\u0E44\u0E21\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E35\u0E49\u0E2D\u0E32\u0E08\u0E08\u0E30\u0E40\u0E01\u0E34\u0E14\u0E02\u0E36\u0E49\u0E19\u0E44\u0E14\u0E49\u0E43\u0E19\u0E0A\u0E48\u0E27\u0E07\u0E17\u0E35\u0E48\u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19 network \u0E2A\u0E39\u0E07, \u0E41\u0E25\u0E30\u0E21\u0E31\u0E19\u0E22\u0E31\u0E07\u0E40\u0E1B\u0E47\u0E19\u0E44\u0E1B\u0E44\u0E14\u0E49\u0E27\u0E48\u0E32 validators \u0E01\u0E33\u0E25\u0E31\u0E07\u0E1B\u0E23\u0E30\u0E21\u0E27\u0E25\u0E1C\u0E25 transactions \u0E17\u0E35\u0E48\u0E21\u0E32\u0E01\u0E40\u0E01\u0E34\u0E19\u0E01\u0E27\u0E48\u0E32\u0E17\u0E35\u0E48\u0E08\u0E30\u0E14\u0E33\u0E40\u0E19\u0E34\u0E19\u0E01\u0E32\u0E23\u0E44\u0E14\u0E49. \u0E43\u0E19\u0E02\u0E13\u0E30\u0E17\u0E35\u0E48 validators \u0E1E\u0E23\u0E49\u0E2D\u0E21\u0E17\u0E35\u0E48\u0E08\u0E30\u0E2A\u0E48\u0E07 transactions \u0E2A\u0E48\u0E27\u0E19\u0E40\u0E01\u0E34\u0E19\u0E1C\u0E48\u0E32\u0E19 "),Un=n("code",null,"tpu_forwards",-1),An=s(", \u0E21\u0E31\u0E19\u0E08\u0E30\u0E21\u0E35\u0E02\u0E49\u0E2D\u0E08\u0E33\u0E01\u0E31\u0E14\u0E43\u0E19\u0E01\u0E32\u0E23 "),En={href:"https://github.com/solana-labs/solana/blob/master/core/src/banking_stage.rs#L389",target:"_blank",rel:"noopener noreferrer"},Fn=s("\u0E2A\u0E48\u0E07\u0E15\u0E48\u0E2D"),Kn=s(" \u0E2D\u0E22\u0E39\u0E48\u0E14\u0E49\u0E27\u0E22 \u0E42\u0E14\u0E22\u0E43\u0E19\u0E01\u0E32\u0E23\u0E2A\u0E48\u0E07\u0E15\u0E48\u0E2D\u0E08\u0E30\u0E16\u0E39\u0E01\u0E08\u0E33\u0E01\u0E31\u0E14\u0E43\u0E2B\u0E49\u0E02\u0E49\u0E32\u0E21\u0E23\u0E30\u0E2B\u0E27\u0E48\u0E32\u0E07 validators \u0E44\u0E14\u0E49\u0E04\u0E23\u0E31\u0E49\u0E07\u0E40\u0E14\u0E35\u0E22\u0E27 \u0E14\u0E31\u0E07\u0E19\u0E31\u0E49\u0E19 transactions \u0E17\u0E35\u0E48\u0E44\u0E14\u0E49\u0E23\u0E31\u0E1A\u0E1C\u0E48\u0E32\u0E19 "),Nn=n("code",null,"tpu_forwards",-1),Dn=s(" \u0E21\u0E32\u0E41\u0E25\u0E49\u0E27 \u0E08\u0E30\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E2A\u0E48\u0E07\u0E15\u0E48\u0E2D\u0E44\u0E1B\u0E22\u0E31\u0E07 validators \u0E2D\u0E37\u0E48\u0E19\u0E2D\u0E35\u0E01."),In=s("\u0E22\u0E31\u0E07\u0E21\u0E35\u0E2D\u0E35\u0E01 2 \u0E40\u0E2B\u0E15\u0E38\u0E1C\u0E25\u0E27\u0E48\u0E32\u0E17\u0E33\u0E44\u0E21 transaction \u0E2D\u0E32\u0E08\u0E08\u0E30\u0E16\u0E39\u0E01\u0E17\u0E34\u0E49\u0E07\u0E01\u0E48\u0E2D\u0E19\u0E17\u0E35\u0E48\u0E21\u0E31\u0E19\u0E08\u0E30\u0E16\u0E39\u0E01\u0E1B\u0E23\u0E30\u0E21\u0E27\u0E25\u0E1C\u0E25. \u0E01\u0E23\u0E13\u0E35\u0E41\u0E23\u0E01\u0E21\u0E35\u0E04\u0E27\u0E32\u0E21\u0E40\u0E01\u0E35\u0E48\u0E22\u0E27\u0E02\u0E49\u0E2D\u0E07\u0E01\u0E31\u0E1A transactions \u0E17\u0E35\u0E48\u0E2A\u0E48\u0E07\u0E1C\u0E48\u0E32\u0E19 RPC pool \u0E43\u0E19\u0E1A\u0E32\u0E07\u0E04\u0E23\u0E31\u0E49\u0E07\u0E1A\u0E32\u0E07\u0E2A\u0E48\u0E27\u0E19\u0E02\u0E2D\u0E07 RPC pool \u0E08\u0E30\u0E19\u0E33 pool \u0E2D\u0E37\u0E48\u0E19\u0E46 \u0E2D\u0E22\u0E39\u0E48. \u0E40\u0E2B\u0E15\u0E38\u0E01\u0E32\u0E23\u0E13\u0E4C\u0E19\u0E35\u0E49\u0E08\u0E30\u0E17\u0E33\u0E43\u0E2B\u0E49\u0E40\u0E01\u0E34\u0E14\u0E1B\u0E31\u0E0D\u0E2B\u0E32\u0E44\u0E14\u0E49\u0E16\u0E49\u0E32 nodes \u0E43\u0E19 pool \u0E15\u0E49\u0E2D\u0E07\u0E17\u0E33\u0E07\u0E32\u0E19\u0E44\u0E1B\u0E1E\u0E23\u0E49\u0E2D\u0E21\u0E46 \u0E01\u0E31\u0E19 \u0E43\u0E19\u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E19\u0E35\u0E49 transaction\u2019s "),On={href:"https://docs.solana.com/developing/programming-model/transactions#recent-blockhash",target:"_blank",rel:"noopener noreferrer"},Jn=s("recentBlockhash"),Mn=s(" \u0E21\u0E35\u0E01\u0E32\u0E23\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E25\u0E33\u0E14\u0E31\u0E1A\u0E16\u0E31\u0E14\u0E44\u0E1B\u0E08\u0E32\u0E01 pool (Backend A) \u0E41\u0E15\u0E48\u0E40\u0E21\u0E37\u0E48\u0E2D transaction \u0E2A\u0E48\u0E07\u0E44\u0E1B\u0E43\u0E19\u0E2A\u0E48\u0E27\u0E19\u0E17\u0E35\u0E48 pool \u0E15\u0E32\u0E21\u0E2B\u0E25\u0E31\u0E07\u0E2D\u0E22\u0E39\u0E48 (Backend B) nodes \u0E19\u0E31\u0E49\u0E19\u0E01\u0E47\u0E08\u0E30\u0E44\u0E21\u0E48\u0E23\u0E39\u0E49\u0E08\u0E31\u0E01 blockhash \u0E16\u0E31\u0E14\u0E44\u0E1B \u0E41\u0E25\u0E30\u0E08\u0E30\u0E17\u0E34\u0E49\u0E07 transaction \u0E19\u0E31\u0E49\u0E19\u0E44\u0E1B \u0E01\u0E23\u0E13\u0E35\u0E41\u0E1A\u0E1A\u0E19\u0E35\u0E49\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E15\u0E23\u0E27\u0E08\u0E08\u0E31\u0E1A\u0E44\u0E14\u0E49\u0E43\u0E19\u0E23\u0E30\u0E2B\u0E27\u0E48\u0E32\u0E07\u0E01\u0E32\u0E23\u0E2A\u0E48\u0E07 transaction \u0E16\u0E49\u0E32\u0E19\u0E31\u0E01\u0E1E\u0E31\u0E12\u0E19\u0E32\u0E40\u0E1B\u0E34\u0E14\u0E43\u0E0A\u0E49 "),qn={href:"https://docs.solana.com/developing/clients/jsonrpc-api#sendtransaction",target:"_blank",rel:"noopener noreferrer"},Gn=s("preflight checks"),Wn=s(" \u0E40\u0E27\u0E25\u0E32\u0E17\u0E35\u0E48\u0E40\u0E23\u0E35\u0E22\u0E01\u0E43\u0E0A\u0E49 "),Yn=n("code",null,"sendTransaction",-1),Qn=s("."),Xn=c('

    Dropped via RPC Pool

    \u0E01\u0E32\u0E23 fork network \u0E0A\u0E31\u0E48\u0E27\u0E04\u0E23\u0E32\u0E27\u0E01\u0E47\u0E40\u0E1B\u0E47\u0E19\u0E2D\u0E35\u0E01\u0E2A\u0E32\u0E40\u0E2B\u0E15\u0E38\u0E17\u0E35\u0E48\u0E17\u0E33\u0E43\u0E2B\u0E49 transactions \u0E16\u0E39\u0E01\u0E17\u0E34\u0E49\u0E07\u0E16\u0E49\u0E32 validator replay blocks \u0E44\u0E21\u0E48\u0E17\u0E31\u0E19 Banking Stage, \u0E21\u0E31\u0E19\u0E2D\u0E32\u0E08\u0E08\u0E30\u0E08\u0E1A\u0E25\u0E07\u0E15\u0E23\u0E07\u0E17\u0E35\u0E48\u0E40\u0E01\u0E34\u0E14\u0E01\u0E32\u0E23\u0E2A\u0E23\u0E49\u0E32\u0E07 minority fork \u0E02\u0E36\u0E49\u0E19\u0E21\u0E32 \u0E40\u0E21\u0E37\u0E48\u0E2D client \u0E2A\u0E23\u0E49\u0E32\u0E07 transaction \u0E21\u0E31\u0E19\u0E01\u0E47\u0E40\u0E1B\u0E47\u0E19\u0E44\u0E1B\u0E44\u0E14\u0E49\u0E27\u0E48\u0E32 transaction \u0E08\u0E30\u0E16\u0E39\u0E01\u0E2D\u0E49\u0E32\u0E07\u0E44\u0E1B\u0E17\u0E35\u0E48 recentBlockhash \u0E17\u0E35\u0E48\u0E21\u0E35\u0E2D\u0E22\u0E39\u0E48\u0E40\u0E09\u0E1E\u0E32\u0E30\u0E43\u0E19 minority fork \u0E14\u0E31\u0E07\u0E01\u0E25\u0E48\u0E32\u0E27 \u0E2B\u0E25\u0E31\u0E07\u0E08\u0E32\u0E01\u0E2A\u0E48\u0E07 transaction \u0E41\u0E25\u0E49\u0E27 cluster \u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E40\u0E1B\u0E25\u0E35\u0E48\u0E22\u0E19\u0E08\u0E32\u0E01 minority fork \u0E01\u0E48\u0E2D\u0E19\u0E17\u0E35\u0E48 transaction \u0E08\u0E30\u0E16\u0E39\u0E01\u0E1B\u0E23\u0E30\u0E21\u0E27\u0E25\u0E1C\u0E25 \u0E43\u0E19\u0E01\u0E23\u0E13\u0E35\u0E19\u0E35\u0E49 transaction \u0E08\u0E30\u0E16\u0E39\u0E01\u0E17\u0E34\u0E49\u0E07\u0E40\u0E19\u0E37\u0E48\u0E2D\u0E07\u0E08\u0E32\u0E01 blockhash \u0E2B\u0E32\u0E44\u0E21\u0E48\u0E40\u0E08\u0E2D

    Dropped due to Minority Fork (Before Processed)

    \u0E2B\u0E25\u0E31\u0E07\u0E08\u0E32\u0E01 transaction \u0E1B\u0E23\u0E30\u0E21\u0E27\u0E25\u0E1C\u0E25\u0E40\u0E2A\u0E23\u0E47\u0E08 \u0E41\u0E25\u0E30\u0E01\u0E48\u0E2D\u0E19\u0E08\u0E30 finalized

    \u0E43\u0E19\u0E01\u0E23\u0E13\u0E35\u0E17\u0E35\u0E48 transaction \u0E2D\u0E49\u0E32\u0E07\u0E2D\u0E34\u0E07 recentBlockhash \u0E44\u0E1B\u0E17\u0E35\u0E48 minority fork, \u0E21\u0E31\u0E19\u0E01\u0E47\u0E22\u0E31\u0E07\u0E40\u0E1B\u0E47\u0E19\u0E44\u0E1B\u0E44\u0E14\u0E49\u0E17\u0E35\u0E48 transaction \u0E08\u0E30\u0E16\u0E39\u0E01\u0E1B\u0E23\u0E30\u0E21\u0E27\u0E25\u0E1C\u0E25 \u0E41\u0E15\u0E48\u0E2D\u0E22\u0E48\u0E32\u0E2A\u0E07\u0E44\u0E23\u0E01\u0E47\u0E15\u0E32\u0E21\u0E21\u0E31\u0E19\u0E08\u0E30\u0E15\u0E49\u0E2D\u0E07\u0E16\u0E39\u0E01\u0E1B\u0E23\u0E30\u0E21\u0E27\u0E25\u0E1C\u0E25\u0E42\u0E14\u0E22 leader \u0E1A\u0E19 minority fork. \u0E40\u0E21\u0E37\u0E48\u0E2D leader \u0E1E\u0E22\u0E32\u0E22\u0E32\u0E21\u0E40\u0E1C\u0E22\u0E41\u0E1E\u0E23\u0E48 transactions \u0E19\u0E35\u0E49\u0E44\u0E1B\u0E17\u0E31\u0E49\u0E07 network \u0E21\u0E31\u0E19\u0E01\u0E47\u0E08\u0E30\u0E25\u0E49\u0E21\u0E40\u0E2B\u0E25\u0E27 fail \u0E17\u0E35\u0E48\u0E08\u0E30\u0E44\u0E1B\u0E16\u0E36\u0E07\u0E01\u0E32\u0E23 consensus \u0E14\u0E49\u0E27\u0E22 validators \u0E2D\u0E37\u0E48\u0E19\u0E46 \u0E17\u0E35\u0E48\u0E44\u0E21\u0E48\u0E23\u0E39\u0E49\u0E08\u0E31\u0E01 minority fork \u0E19\u0E31\u0E49\u0E19\u0E2D\u0E22\u0E39\u0E48\u0E14\u0E35 \u0E16\u0E36\u0E07\u0E08\u0E38\u0E14\u0E19\u0E35\u0E49 transaction \u0E01\u0E47\u0E08\u0E30\u0E16\u0E39\u0E01\u0E17\u0E34\u0E49\u0E07\u0E01\u0E48\u0E2D\u0E19\u0E17\u0E35\u0E48\u0E21\u0E31\u0E19\u0E08\u0E30\u0E44\u0E1B\u0E16\u0E36\u0E07\u0E02\u0E31\u0E49\u0E19 finalized

    Dropped due to Minority Fork (After Processed)

    \u0E08\u0E31\u0E14\u0E01\u0E32\u0E23 Transactions \u0E17\u0E35\u0E48\u0E16\u0E39\u0E01\u0E17\u0E34\u0E49\u0E07

    \u0E15\u0E2D\u0E19\u0E17\u0E35\u0E48 RPC nodes \u0E1E\u0E22\u0E32\u0E22\u0E32\u0E21 rebroadcast transactions \u0E08\u0E30\u0E43\u0E0A\u0E49 algorithm \u0E17\u0E31\u0E48\u0E27\u0E44\u0E1B\u0E41\u0E25\u0E30 \u0E21\u0E31\u0E01\u0E08\u0E30\u0E44\u0E21\u0E48\u0E15\u0E23\u0E07\u0E01\u0E31\u0E1A\u0E04\u0E27\u0E32\u0E21\u0E15\u0E49\u0E2D\u0E07\u0E01\u0E32\u0E23\u0E02\u0E2D\u0E07 app \u0E41\u0E15\u0E48\u0E25\u0E30\u0E15\u0E31\u0E27 \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E40\u0E15\u0E23\u0E35\u0E22\u0E21\u0E15\u0E31\u0E27\u0E23\u0E31\u0E1A\u0E21\u0E37\u0E2D\u0E43\u0E19\u0E0A\u0E48\u0E27\u0E07 network congestion \u0E19\u0E31\u0E01\u0E1E\u0E31\u0E12\u0E19\u0E32 app \u0E04\u0E27\u0E23\u0E2D\u0E2D\u0E01\u0E41\u0E1A\u0E1A\u0E01\u0E32\u0E23\u0E17\u0E33\u0E07\u0E32\u0E19 rebroadcasting \u0E40\u0E2D\u0E07

    sendTransaction \u0E40\u0E0A\u0E34\u0E07\u0E25\u0E36\u0E01

    \u0E40\u0E21\u0E37\u0E48\u0E2D\u0E1E\u0E39\u0E14\u0E16\u0E36\u0E07\u0E01\u0E32\u0E23\u0E2A\u0E48\u0E07 transactions \u0E40\u0E23\u0E32\u0E08\u0E30\u0E43\u0E0A\u0E49 RPC method sendTransaction \u0E42\u0E14\u0E22 sendTransaction \u0E08\u0E30\u0E23\u0E31\u0E1A\u0E1C\u0E34\u0E14\u0E0A\u0E2D\u0E1A\u0E43\u0E19\u0E01\u0E32\u0E23\u0E2A\u0E48\u0E07 transaction \u0E08\u0E32\u0E01 client \u0E44\u0E1B RPC node \u0E16\u0E49\u0E32 node \u0E44\u0E14\u0E49\u0E23\u0E31\u0E1A transaction \u0E41\u0E25\u0E49\u0E27, sendTransaction \u0E08\u0E30\u0E04\u0E37\u0E19 transaction id \u0E17\u0E35\u0E48\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E43\u0E0A\u0E49\u0E15\u0E34\u0E14\u0E15\u0E32\u0E21 transaction \u0E0B\u0E36\u0E48\u0E07\u0E01\u0E32\u0E23\u0E17\u0E35\u0E48\u0E40\u0E23\u0E32\u0E44\u0E14\u0E49\u0E23\u0E31\u0E1A response \u0E44\u0E21\u0E48\u0E44\u0E14\u0E49\u0E2B\u0E21\u0E32\u0E22\u0E04\u0E27\u0E32\u0E21\u0E27\u0E48\u0E32 transaction \u0E19\u0E31\u0E49\u0E19\u0E08\u0E30\u0E16\u0E39\u0E01\u0E1B\u0E23\u0E30\u0E21\u0E27\u0E25\u0E1C\u0E25\u0E2B\u0E23\u0E37\u0E2D\u0E16\u0E39\u0E01 finalized \u0E14\u0E49\u0E27\u0E22 cluster.

    ',10),Zn={class:"custom-container tip"},$n=n("p",{class:"custom-container-title"},"TIP",-1),ns=n("h4",{id:"request-parameters",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#request-parameters","aria-hidden":"true"},"#"),s(" Request Parameters")],-1),ss=n("li",null,[n("code",null,"transaction"),s(": "),n("code",null,"string"),s(" - Transaction \u0E17\u0E35\u0E48 sign \u0E40\u0E23\u0E35\u0E22\u0E1A\u0E23\u0E49\u0E2D\u0E22\u0E41\u0E25\u0E49\u0E27\u0E43\u0E19\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A encoded string")],-1),ts=s("(optional) "),as=n("code",null,"configuration object",-1),os=s(": "),es=n("code",null,"object",-1),cs=n("li",null,[n("code",null,"skipPreflight"),s(": "),n("code",null,"boolean"),s(" - \u0E16\u0E49\u0E32\u0E40\u0E1B\u0E47\u0E19 true, \u0E08\u0E30\u0E02\u0E49\u0E32\u0E21\u0E01\u0E32\u0E23\u0E17\u0E33 preflight \u0E44\u0E1B (\u0E04\u0E48\u0E32\u0E1B\u0E01\u0E15\u0E34\u0E04\u0E37\u0E2D: false)")],-1),rs=s("(optional) "),is=n("code",null,"preflightCommitment",-1),ls=s(": "),ps=n("code",null,"string",-1),ds=s(" - "),us={href:"https://docs.solana.com/developing/clients/jsonrpc-api#configuring-state-commitment",target:"_blank",rel:"noopener noreferrer"},hs=s("Commitment"),_s=s(' \u0E23\u0E30\u0E14\u0E31\u0E1A\u0E43\u0E19\u0E01\u0E32\u0E23\u0E08\u0E33\u0E25\u0E2D\u0E07 preflight \u0E01\u0E31\u0E1A bank slot (\u0E04\u0E48\u0E32\u0E1B\u0E01\u0E15\u0E34\u0E04\u0E37\u0E2D: "finalized").'),ks=n("li",null,[s("(optional) "),n("code",null,"encoding"),s(": "),n("code",null,"string"),s(' - Encoding \u0E17\u0E35\u0E48\u0E43\u0E0A\u0E49\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A transaction data. \u0E2D\u0E32\u0E08\u0E08\u0E30\u0E40\u0E1B\u0E47\u0E19 "base58" (\u0E0A\u0E49\u0E32) \u0E2B\u0E23\u0E37\u0E2D "base64" (\u0E04\u0E48\u0E32\u0E1B\u0E01\u0E15\u0E34\u0E04\u0E37\u0E2D: "base58").')],-1),bs=n("li",null,[s("(optional) "),n("code",null,"maxRetries"),s(": "),n("code",null,"usize"),s(" - \u0E40\u0E25\u0E02\u0E21\u0E32\u0E01\u0E17\u0E35\u0E48\u0E2A\u0E38\u0E14\u0E02\u0E2D\u0E07\u0E02\u0E2D\u0E07\u0E40\u0E27\u0E25\u0E32\u0E17\u0E35\u0E48 RPC node \u0E08\u0E30\u0E1E\u0E22\u0E32\u0E22\u0E32\u0E21\u0E2A\u0E48\u0E07 transaction \u0E44\u0E1B\u0E16\u0E36\u0E07 leader. \u0E16\u0E49\u0E32\u0E44\u0E21\u0E48\u0E01\u0E33\u0E2B\u0E19\u0E14 RPC node \u0E08\u0E30 retry transaction \u0E08\u0E19\u0E01\u0E23\u0E30\u0E17\u0E31\u0E48\u0E07\u0E16\u0E39\u0E01 finalized \u0E2B\u0E23\u0E37\u0E2D\u0E08\u0E19\u0E01\u0E23\u0E30\u0E17\u0E31\u0E48\u0E07 blockhash \u0E2B\u0E21\u0E14\u0E2D\u0E32\u0E22\u0E38")],-1),gs=n("h4",{id:"response",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#response","aria-hidden":"true"},"#"),s(" Response")],-1),ms=n("code",null,"transaction id",-1),fs=s(": "),ys=n("code",null,"string",-1),ws=s(" - transaction signature \u0E41\u0E23\u0E01\u0E08\u0E30\u0E16\u0E39\u0E01\u0E40\u0E01\u0E47\u0E1A\u0E2D\u0E22\u0E39\u0E48\u0E43\u0E19 transaction \u0E43\u0E19\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A base-58 encoded string \u0E0B\u0E36\u0E48\u0E07 transaction id \u0E19\u0E35\u0E49\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E43\u0E0A\u0E49\u0E01\u0E31\u0E1A "),Ps={href:"https://docs.solana.com/developing/clients/jsonrpc-api#getsignaturestatuses",target:"_blank",rel:"noopener noreferrer"},vs=s("getSignatureStatuses"),Rs=s(" \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E14\u0E36\u0E07\u0E2A\u0E16\u0E32\u0E19\u0E30\u0E21\u0E32\u0E14\u0E39\u0E44\u0E14\u0E49."),Ts=n("h2",{id:"\u0E17\u0E4D\u0E32-rebroadcast-logic-\u0E40\u0E2D\u0E07",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E17\u0E4D\u0E32-rebroadcast-logic-\u0E40\u0E2D\u0E07","aria-hidden":"true"},"#"),s(" \u0E17\u0E33 Rebroadcast Logic \u0E40\u0E2D\u0E07")],-1),Cs=s("\u0E43\u0E19\u0E01\u0E32\u0E23\u0E17\u0E35\u0E48\u0E08\u0E30\u0E1E\u0E31\u0E12\u0E19\u0E32 rebroadcasting logic \u0E14\u0E49\u0E27\u0E22\u0E15\u0E31\u0E27\u0E40\u0E2D\u0E07 \u0E19\u0E31\u0E01\u0E1E\u0E31\u0E12\u0E19\u0E32\u0E04\u0E27\u0E23\u0E43\u0E0A\u0E49 "),xs=n("code",null,"sendTransaction",-1),Ss=s(", "),Bs=n("code",null,"maxRetries",-1),Ls=s(" parameter. \u0E16\u0E49\u0E32\u0E01\u0E33\u0E2B\u0E19\u0E14\u0E04\u0E48\u0E32 "),js=n("code",null,"maxRetries",-1),Hs=s(" \u0E21\u0E31\u0E19\u0E01\u0E47\u0E08\u0E30\u0E01\u0E33\u0E2B\u0E19\u0E14\u0E17\u0E31\u0E1A\u0E04\u0E48\u0E32\u0E1B\u0E01\u0E15\u0E34\u0E02\u0E2D\u0E07 RPC node retry logic, \u0E17\u0E33\u0E43\u0E2B\u0E49\u0E19\u0E31\u0E01\u0E1E\u0E31\u0E12\u0E19\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E01\u0E33\u0E2B\u0E19\u0E14\u0E0A\u0E48\u0E27\u0E07\u0E01\u0E32\u0E23 retry "),Vs={href:"https://github.com/solana-labs/solana/blob/98707baec2385a4f7114d2167ef6dfb1406f954f/validator/src/main.rs#L1258-L1274",target:"_blank",rel:"noopener noreferrer"},zs=s("\u0E44\u0E14\u0E49\u0E15\u0E32\u0E21\u0E04\u0E27\u0E32\u0E21\u0E40\u0E2B\u0E21\u0E32\u0E30\u0E2A\u0E21"),Us=s("."),As=s("pattern \u0E1B\u0E01\u0E15\u0E34\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E01\u0E32\u0E23 retrying transactions \u0E08\u0E30\u0E40\u0E01\u0E35\u0E48\u0E22\u0E27\u0E02\u0E49\u0E2D\u0E07\u0E01\u0E31\u0E1A\u0E01\u0E32\u0E23\u0E40\u0E01\u0E47\u0E1A "),Es=n("code",null,"lastValidBlockHeight",-1),Fs=s(" \u0E17\u0E35\u0E48\u0E21\u0E32\u0E08\u0E32\u0E01 "),Ks={href:"https://docs.solana.com/developing/clients/jsonrpc-api#getlatestblockhash",target:"_blank",rel:"noopener noreferrer"},Ns=s("getLatestBlockhash"),Ds=s(" \u0E40\u0E21\u0E37\u0E48\u0E2D\u0E40\u0E01\u0E47\u0E1A\u0E44\u0E27\u0E49\u0E41\u0E25\u0E49\u0E27 app \u0E01\u0E47\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 "),Is={href:"https://docs.solana.com/developing/clients/jsonrpc-api#getblockheight",target:"_blank",rel:"noopener noreferrer"},Os=s("\u0E14\u0E36\u0E07 cluster\u2019s blockheight"),Js=s(" \u0E41\u0E25\u0E30 retry transaction \u0E43\u0E19\u0E0A\u0E48\u0E27\u0E07\u0E40\u0E27\u0E25\u0E32\u0E17\u0E35\u0E48\u0E41\u0E2B\u0E21\u0E32\u0E30\u0E2A\u0E21. \u0E2B\u0E32\u0E01\u0E40\u0E01\u0E34\u0E14 network congestion \u0E01\u0E47\u0E43\u0E2B\u0E49\u0E1B\u0E23\u0E31\u0E1A "),Ms=n("code",null,"maxRetries",-1),qs=s(" \u0E40\u0E1B\u0E47\u0E19 0 \u0E01\u0E47\u0E08\u0E30\u0E14\u0E35\u0E01\u0E27\u0E48\u0E32 \u0E41\u0E25\u0E30 rebroadcast \u0E40\u0E2D\u0E07\u0E2D\u0E35\u0E01\u0E17\u0E35 \u0E1A\u0E32\u0E07 app \u0E2D\u0E32\u0E08\u0E08\u0E30\u0E43\u0E0A\u0E49 "),Gs={href:"https://en.wikipedia.org/wiki/Exponential_backoff",target:"_blank",rel:"noopener noreferrer"},Ws=s("exponential backoff"),Ys=s(" algorithm \u0E2B\u0E23\u0E37\u0E2D\u0E27\u0E34\u0E18\u0E35\u0E41\u0E1A\u0E1A "),Qs={href:"https://www.mango.markets/",target:"_blank",rel:"noopener noreferrer"},Xs=s("Mango"),Zs=s(" \u0E40\u0E1E\u0E37\u0E48\u0E2D "),$s={href:"https://github.com/blockworks-foundation/mango-ui/blob/b6abfc6c13b71fc17ebbe766f50b8215fa1ec54f/src/utils/send.tsx#L713",target:"_blank",rel:"noopener noreferrer"},nt=s("\u0E2A\u0E48\u0E07 transactions \u0E40\u0E23\u0E37\u0E48\u0E2D\u0E22\u0E46"),st=s(" \u0E43\u0E19\u0E40\u0E27\u0E25\u0E32\u0E17\u0E35\u0E48\u0E40\u0E2B\u0E21\u0E32\u0E30\u0E2A\u0E21\u0E08\u0E19\u0E40\u0E01\u0E34\u0E14 timeout"),tt=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` Keypair`),n("span",{class:"token punctuation"},","),s(` Connection`),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token constant"},"LAMPORTS_PER_SOL"),n("span",{class:"token punctuation"},","),s(` diff --git a/docs/.vuepress/dist/assets/retrying-transactions.html.b36ecf68.js b/docs/.vuepress/dist/assets/retrying-transactions.html.9deaf6d5.js similarity index 54% rename from docs/.vuepress/dist/assets/retrying-transactions.html.b36ecf68.js rename to docs/.vuepress/dist/assets/retrying-transactions.html.9deaf6d5.js index cf0424176..5fb0c6e32 100644 --- a/docs/.vuepress/dist/assets/retrying-transactions.html.b36ecf68.js +++ b/docs/.vuepress/dist/assets/retrying-transactions.html.9deaf6d5.js @@ -1,4 +1,4 @@ -import{_ as h,r as o,o as p,c as u,a as n,b as s,w as c,F as d,d as t,e}from"./app.cfdf84e7.js";var g="/assets/tx-journey.dd6310be.png",k="/assets/tpu-jito-labs.8bb32fb6.png",_="/assets/dropped-via-rpc-pool.8d1ce9af.png",b="/assets/dropped-minority-fork-pre-process.555653e1.png",m="/assets/dropped-minority-fork-post-process.48c3c955.png";const f={},y=n("h1",{id:"thu-lai-transaction",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#thu-lai-transaction","aria-hidden":"true"},"#"),t(" Th\u1EED l\u1EA1i Transaction")],-1),v=t("Trong m\u1ED9t v\xE0i t\xEDnh hu\u1ED1ng, m\u1ED9t Transaction tr\xF4ng c\xF3 v\u1EC3 h\u1EE3p l\u1EC7 c\xF3 th\u1EC3 b\u1ECB h\u1EBFt h\u1EA1n ngay tr\u01B0\u1EDBc khi \u0111\u01B0\u1EE3c ch\u1EA5p nh\u1EADn (th\xEAm v\xE0o block). \u0110i\u1EC1u \u0111\xF3 th\u01B0\u1EDDng di\u1EC5n ra nh\u1EA5t l\xE0 khi m\u1EA1ng l\u01B0\u1EDBi b\u1ECB ngh\u1EBDn v\xE0 m\u1ED9t n\u1ED1t RPC kh\xF4ng th\u1EC3 truy\u1EC1n Transaction \u0111\u1EBFn "),T={href:"https://docs.solana.com/terminology#leader",target:"_blank",rel:"noopener noreferrer"},w=t("leader"),x=t(". D\u01B0\u1EDBi g\xF3c \u0111\u1ED9 ng\u01B0\u1EDDi d\xF9ng, b\u1EA1n c\xF3 th\u1EC3 nh\u1EADn ra tr\u01B0\u1EDDng h\u1EE3p n\xE0y khi Transaction bi\u1EBFn m\u1EA5t ho\xE0n to\xE0n. Trong khi c\xE1c n\u1ED1t RPC \u0111\u01B0\u1EE3c trang b\u1ECB m\u1ED9t thu\u1EADt to\xE1n lan truy\u1EC1n chung, \u1EE9ng d\u1EE5ng c\u1EE7a c\xE1c l\u1EADp tr\xECnh vi\xEAn v\u1EABn c\xF3 kh\u1EA3 n\u0103ng ph\xE1t tri\u1EC3n c\xE1c lu\u1EADn l\xFD lan truy\u1EC1n tu\xFD ch\u1EC9nh."),P=e('

    C\xF3 th\u1EC3 b\u1EA1n ch\u01B0a bi\u1EBFt

    Nh\u1EEFng \u0111i\u1EC1u c\xF3 th\u1EC3 b\u1EA1n ch\u01B0a bi\u1EBFt

    • C\xE1c n\u1ED1t RPC s\u1EBD th\u1EED lan truy\u1EC1n l\u1EA1i Transaction khi s\u1EED d\u1EE5ng m\u1ED9t thu\u1EADt to\xE1n chung
    • \u1EE8ng d\u1EE5ng ri\xEAng c\xF3 th\u1EC3 hi\u1EC7n th\u1EF1c c\xE1c lu\u1EADn l\xFD lan truy\u1EC1n tu\u1EF3 ch\u1EC9nh
    • L\u1EADp tr\xECnh vi\xEAn n\xEAn hi\u1EC3u r\xF5 tham s\u1ED1 maxRetries c\u1EE7a ph\u01B0\u01A1ng th\u1EE9c sendTransaction trong JSON-RPC.
    • L\u1EADp tr\xECnh vi\xEAn n\xEAn k\xEDch ho\u1EA1t preflight \u0111\u1EC3 ki\u1EC3m tra c\xE1c t\xECnh hu\u1ED1ng l\u1ED7i tr\u01B0\u1EDBc khi g\u1EEDi Transaction \u0111i
    • Tr\u01B0\u1EDBc khi k\xFD l\u1EA1i b\u1EA5t k\u1EF3 m\u1ED9t Transaction n\xE0o, l\xE0 r\u1EA5t quan tr\u1ECDng khi \u0111\u1EA3m b\u1EA3o r\u1EB1ng blockhash c\u1EE7a Transaction \u0111\xE3 h\u1EBFt h\u1EA1n

    H\xE0nh tr\xECnh c\u1EE7a m\u1ED9t Transaction

    L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 ng\u01B0\u1EDDi d\xF9ng g\u1EEDi Transactions

    Trong Solana, kh\xF4ng t\u1ED3n t\u1EA1i kh\xE1i ni\u1EC7m mempool. T\u1EA5t c\u1EA3 c\xE1c Transaction, d\xF9 l\xE0 \u0111\u01B0\u1EE3c t\u1EA1o n\xEAn t\u1EEB c\xE1c Program hay l\xE0 t\u1EEB ng\u01B0\u1EDDi d\xF9ng, \u0111\u1EC1u \u0111\u01B0\u1EE3c \u0111i\u1EC1u h\u01B0\u1EDBng hi\u1EC7u qu\u1EA3 \u0111\u1EBFn c\xE1c leader \u0111\u1EC3 h\u1ECD c\xF3 th\u1EC3 x\u1EED l\xFD v\xE0 ghi nh\u1EADn ch\xFAng v\xE0o block. C\xF3 2 c\xE1ch m\xE0 m\u1ED9t Transaction c\xF3 th\u1EC3 d\u01B0\u1EE3c g\u1EEDi \u0111\u1EBFn c\xE1c leader:

    ',5),C=t("U\u1EF7 quy\u1EC1n cho c\xE1c m\xE1y ch\u1EE7 RPC b\u1EB1ng ph\u01B0\u01A1ng th\u1EE9c "),R={href:"https://docs.solana.com/developing/clients/jsonrpc-api#sendtransaction",target:"_blank",rel:"noopener noreferrer"},L=t("sendTransaction"),S=t(" trong JSON-RPC."),B=t("G\u1EEDi tr\u1EF1c ti\u1EBFp \u0111\u1EBFn c\xE1c leader th\xF4ng qua "),q={href:"https://docs.rs/solana-client/1.7.3/solana_client/tpu_client/index.html",target:"_blank",rel:"noopener noreferrer"},N=t("TPU Client"),K=n("p",null,"Ph\u1EA7n l\u1EDBn ng\u01B0\u1EDDi d\xF9ng s\u1EBD g\u1EEDi Transaction th\xF4ng qua m\xE1y ch\u1EE7 RPC. KHi m\u1ED9t ng\u01B0\u1EDDi d\xF9ng g\u1EEDi Transaction \u0111i, n\u1ED1t RPC s\u1EBD ti\u1EBFp nh\u1EADn v\xE0 c\u1ED1 g\u1EAFng truy\u1EC1n l\u1EA7n l\u01B0\u1EE3t c\xE1c Transaction \u0111\u1EBFn leader hi\u1EC7n t\u1EA1i c\u0169ng nh\u01B0 leader ti\u1EBFp theo. Cho \u0111\u1EBFn khi Transaction \u0111\u01B0\u1EE3c x\u1EED l\xFD b\u1EDFi m\u1ED9t leader, s\u1EBD kh\xF4ng t\u1ED3n t\u1EA1i b\u1EA5t k\u1EF3 b\u1EA3n sao n\xE0o c\u1EE7a Transaction \u0111\u01B0\u1EE3c l\u01B0u tr\u1EEF ngo\u1EA1i tr\u1EEB ng\u01B0\u1EDDi d\xF9ng v\xE0 c\xE1c n\u1ED1t RPC trung chuy\u1EC3n. Trong tr\u01B0\u1EDDng h\u1EE3p TPU Client, qu\xE1 tr\xECnh lan truy\u1EC1n v\xE0 \u0111i\u1EC1u h\u01B0\u1EDBng \u0111\u1EBFn leader s\u1EBD \u0111\u01B0\u1EE3c x\u1EED l\xFD to\xE0n b\u1ED9 b\u1EDFi ng\u01B0\u1EDDi d\xF9ng.",-1),M=n("p",null,[n("img",{src:g,alt:"Transaction Journey"})],-1),j=n("h3",{id:"lam-the-nao-\u0111e-cac-not-rpc-lan-truyen-transaction",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#lam-the-nao-\u0111e-cac-not-rpc-lan-truyen-transaction","aria-hidden":"true"},"#"),t(" L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 c\xE1c n\u1ED1t RPC lan truy\u1EC1n Transaction")],-1),H=t("Ngay sau khi m\u1ED9t n\u1ED1t RPC ti\u1EBFp nh\u1EADn Transaction th\xF4ng qu\xE1 "),V=n("code",null,"sendTransaction",-1),U=t(", n\xF3 s\u1EBD chuy\u1EC3n Transaction \u0111\xF3 th\xE0nh m\u1ED9t g\xF3i tin "),A={href:"https://en.wikipedia.org/wiki/User_Datagram_Protocol",target:"_blank",rel:"noopener noreferrer"},D=t("UDP"),F=t(" tr\u01B0\u1EDBc khi truy\u1EC1n \u0111\u1EBFn c\xE1c leader th\xEDch h\u1EE3p. UDP cho ph\xE9p validator c\xF3 th\u1EC3 giao ti\u1EBFp nhanh ch\xF3ng v\u1EDBi nhau, nh\u01B0ng kh\xF4ng \u0111\u1EA3m b\u1EA3o g\xF3i tin c\xF3 th\u1EC3 ch\u1EAFc ch\u1EAFn \u0111\u01B0\u1EE3c chuy\u1EC3n \u0111i \u0111\xFAng h\u01B0\u1EDBng."),E=t("B\u1EDFi v\xEC l\u1ECBch tr\xECnh c\u1EE7a c\xE1c leader trong Solana l\xE0 bi\u1EBFt tr\u01B0\u1EDBc cho m\u1ED7i "),J={href:"https://docs.solana.com/terminology#epoch",target:"_blank",rel:"noopener noreferrer"},O=t("epoch"),I=t(" (~2 ng\xE0y), m\u1ED9t n\u1ED1t RPC will lan truy\u1EC1n Transaction c\u1EE7a n\xF3 tr\u1EF1c ti\u1EBFp \u0111\u1EBFn leader hi\u1EC7n t\u1EA1i c\u0169ng nh\u01B0 ti\u1EBFp sau. \u0110i\u1EC1u n\xE0y tr\xE1i ng\u01B0\u1EE3c v\u1EDBi c\xE1c giao th\u1EE9c gossip kh\xE1c, v\xED d\u1EE5 nh\u01B0 Ethereum truy\u1EC1n Transaction m\u1ED9t c\xE1ch ng\u1EABu nhi\xEAn v\xE0 ph\u1EE7 kh\u1EAFp tr\xEAn to\xE0n m\u1EA1ng. M\u1EB7c \u0111\u1ECBnh, c\xE1c n\u1ED1t RPC s\u1EBD th\u1EED chuy\u1EC3n Transaction \u0111\u1EBFn c\xE1c leader c\u1EE9 m\u1ED7i 2 gi\xE2y cho \u0111\u1EC3 khi, ho\u1EB7c Transaction th\xE0nh c\xF4ng, ho\u1EB7c blockhash c\u1EE7a Transaction b\u1ECB qu\xE1 h\u1EA1n (150 blocks ho\u1EB7c ~1 ph\xFAt 19 gi\xE2y t\u1EA1i th\u1EDDi \u0111i\u1EC3m vi\u1EBFt b\xE0i). N\u1EBFu h\xE0ng \u0111\u1EE3i c\xE1c Transaction c\u1EA7n \u0111\u01B0\u1EE3c truy\u1EC1n \u0111i l\u1EDBn h\u01A1n "),z={href:"https://github.com/solana-labs/solana/blob/bfbbc53dac93b3a5c6be9b4b65f679fdb13e41d9/send-transaction-service/src/send_transaction_service.rs#L20",target:"_blank",rel:"noopener noreferrer"},G=t("10,000 transactions"),X=t(", c\xE1c Transaction \u0111\u1EBFn sau s\u1EBD b\u1ECB t\u1EEB ch\u1ED1i. \u0110\u1EC3 \u0111i\u1EC1u ch\u1EC9nh c\xE0i \u0111\u1EB7t m\u1EB7c \u0111\u1ECBnh, tham kh\u1EA3o c\xE1c tham s\u1ED1 cho c\xE2u l\u1EC7nh "),W={href:"https://github.com/solana-labs/solana/blob/bfbbc53dac93b3a5c6be9b4b65f679fdb13e41d9/validator/src/main.rs#L1172",target:"_blank",rel:"noopener noreferrer"},Y=t("t\u1EA1i \u0111\xE2y"),Q=t("."),Z=t("Khi m\u1ED9t n\u1ED1t RPC lan truy\u1EC1n m\u1ED9t Transaction, n\xF3 s\u1EBD c\u1ED1 g\u1EAFng chuy\u1EC3n Transaction \u0111\xF3 \u0111\u1EC3 "),$={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/validator.rs#L867",target:"_blank",rel:"noopener noreferrer"},nn=t("Transaction Processing Unit (TPU)"),tn=t(" c\u1EE7a m\u1ED9t leader."),sn=n("p",null,"TPU x\u1EED l\xFD c\xE1c Transaction trong 5 pha ri\xEAng bi\u1EC7t:",-1),an={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/fetch_stage.rs#L21",target:"_blank",rel:"noopener noreferrer"},on=t("Fetch Stage"),cn={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/tpu.rs#L91",target:"_blank",rel:"noopener noreferrer"},en=t("SigVerify Stage"),rn={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/banking_stage.rs#L249",target:"_blank",rel:"noopener noreferrer"},ln=t("Banking Stage"),hn={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/poh/src/poh_service.rs",target:"_blank",rel:"noopener noreferrer"},pn=t("Proof of History Service"),un={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/tpu.rs#L136",target:"_blank",rel:"noopener noreferrer"},dn=t("Broadcast Stage"),gn=n("p",null,[n("img",{src:k,alt:"TPU Overview"}),n("small",{style:{display:"block","text-align":"center"}},"H\xECnh \u1EA3nh \u0111\u01B0\u1EE3c cho ph\xE9p b\u1EDFi Jito Labs")],-1),kn=n("p",null,"Trong 5 pha n\xE0y, Fetch Stage ch\u1ECBu tr\xE1ch nhi\u1EC7m cho vi\u1EC7c ti\u1EBFp nh\u1EADn Transaction. Trong ph\u1EA1m vi Fetch Stage, validator s\u1EBD ph\xE2n o\u1EA1i c\xE1c Transaction m\u1EDBi \u0111\u1EBFn d\u1EF1a theo 3 c\u1ED5ng:",-1),_n={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/gossip/src/contact_info.rs#L27",target:"_blank",rel:"noopener noreferrer"},bn=t("tpu"),mn=t(" x\u1EED l\xFD c\xE1c Transaction b\xECnh th\u01B0\u1EDDng nh\u01B0 l\xE0 chuy\u1EC3n token, t\u1EA1o NFT, v\xE0 c\xE1c ch\u1EC9 th\u1ECB cho c\xE1c Program"),fn={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/gossip/src/contact_info.rs#L31",target:"_blank",rel:"noopener noreferrer"},yn=t("tpu_vote"),vn=t(" t\u1EADp trung ho\xE0n to\xE0n v\xE0o Transaction b\u1ECF phi\u1EBFu"),Tn={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/gossip/src/contact_info.rs#L29",target:"_blank",rel:"noopener noreferrer"},wn=t("tpu_forwards"),xn=t(" \u0111i\u1EC1u h\u01B0\u1EDBng c\xE1c g\xF3i tin ch\u01B0a x\u1EED l\xFD \u0111\u1EBFn c\xE1c leader ti\u1EBFp theo n\u1EBFu leader hi\u1EC7n t\u1EA1i kh\xF4ng \u0111\u1EE7 kh\u1EA3 n\u0103ng x\u1EED l\xFD h\u1EBFt t\u1EA5t c\u1EA3 c\xE1c Transaction"),Pn=t("Chi ti\u1EBFt h\u01A1n v\u1EC1 TPU, vui l\xF2ng tham kh\u1EA3o "),Cn={href:"https://jito-labs.medium.com/solana-validator-101-transaction-processing-90bcdc271143",target:"_blank",rel:"noopener noreferrer"},Rn=t("b\xE0i vi\u1EBFt r\u1EA5t xu\u1EA5t s\u1EAFc c\u1EE7a Jito Labs"),Ln=t("."),Sn=n("h2",{id:"khi-nao-cac-transaction-bi-huy",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#khi-nao-cac-transaction-bi-huy","aria-hidden":"true"},"#"),t(" Khi n\xE0o c\xE1c Transaction b\u1ECB hu\u1EF7")],-1),Bn=n("p",null,"Xuy\xEAn su\u1ED1t h\xE0nh tr\xECnh c\u1EE7a m\u1ED9t Transaction, lu\xF4n c\xF3 m\u1ED9t v\xE0i t\xECnh hu\u1ED1ng Transaction \u0111\xF3 c\xF3 th\u1EC3 b\u1ECB l\xE0m m\u1EA5t m\u1ED9t c\xE1ch t\xECnh c\u1EDD do m\u1EA1ng.",-1),qn=n("h3",{id:"truoc-khi-transaction-\u0111uoc-xu-ly",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#truoc-khi-transaction-\u0111uoc-xu-ly","aria-hidden":"true"},"#"),t(" Tr\u01B0\u1EDBc khi Transaction \u0111\u01B0\u1EE3c x\u1EED l\xFD")],-1),Nn=t("N\u1EBFu m\u1EA1ng l\xE0m m\u1EA5t m\u1ED9t Transaction, kh\u1EA3 n\u0103ng g\u1EA7n nh\u01B0 n\xF3 s\u1EBD b\u1ECB hu\u1EF9 tr\u01B0\u1EDBc khi \u0111\u01B0\u1EE3c x\u1EED l\xFD b\u1EDFi m\u1ED9t leader. "),Kn={href:"https://en.wikipedia.org/wiki/Packet_loss",target:"_blank",rel:"noopener noreferrer"},Mn=t("M\u1EA5t g\xF3i tin"),jn=t(" trong UDP l\xE0 m\u1ED9t nguy\xEAn nh\xE2n \u0111\u01A1n gi\u1EA3n nh\u1EA5t d\u1EABn \u0111\u1EBFn t\xECnh tr\u1EA1ng tr\xEAn. Trong th\u1EDDi gian m\u1EA1ng ngh\u1EBDn, c\xE1c validator c\xF3 th\u1EC3 \u0111\xE3 b\u1ECB qu\xE1 t\u1EA3i v\u1EDBi s\u1ED1 l\u01B0\u1EE3ng kh\u1ED5ng l\u1ED3 c\xE1c Transaction c\u1EA7n x\u1EED l\xFD. Trong khi c\xE1c validator \u0111\u01B0\u1EE3c trang b\u1ECB "),Hn=n("code",null,"tpu_forwards",-1),Vn=t(" \u0111\u1EC3 \u0111i\u1EC1u h\u01B0\u1EDBng c\xE1c Transaction \u0111\u1EBFn sau, th\xEC v\u1EABn lu\xF4n c\xF3 m\u1ED9t gi\u1EDBi h\u1EA1n s\u1ED1 l\u01B0\u1EE3ng c\xE1c g\xF3i tin "),Un={href:"https://github.com/solana-labs/solana/blob/master/core/src/banking_stage.rs#L389",target:"_blank",rel:"noopener noreferrer"},An=t("\u0111\u01B0\u1EE3c \u0111i\u1EC1u h\u01B0\u1EDBng"),Dn=t(". H\u01A1n n\u1EEFa, m\u1ED7i l\u1EA7n \u0111i\u1EC1u h\u01B0\u1EDBng s\u1EBD b\u1ECB gi\u1EDBi h\u1EA1n trong ph\u1EA1m v\u1ECB m\u1ED9t \u0111\u01A1n v\u1ECB k\u1EBFt n\u1ED1i (hop) gi\u1EEFa c\xE1c validator. B\u1EDFi v\u1EADy m\xE0 c\xE1c Transaction \u0111\u01B0\u1EE3c nh\u1EADn th\xF4ng qua c\u1ED5ng "),Fn=n("code",null,"tpu_forwards",-1),En=t(" s\u1EBD kh\xF4ng bao gi\u1EDD \u0111\u01B0\u1EE3c \u0111i\u1EC1u h\u01B0\u1EDBng th\xEAm cho c\xE1c validator kh\xE1c."),Jn=t("Ngo\xE0i ra, c\u0169ng c\xF3 2 l\xFD do \u0111\u01B0\u1EE3c ghi nh\u1EADn kh\xE1c d\u1EABn \u0111\u1EBFn m\u1ED9t Transaction b\u1ECB \u0111\xE1nh m\u1EA5t tr\u01B0\u1EDBc khi n\xF3 \u0111\u01B0\u1EE3c x\u1EED l\xFD. Tr\u01B0\u1EDDng h\u1EE3p \u0111\u1EA7u ti\xEAn l\xE0 nh\u1EEFng Transaction \u0111\u01B0\u1EE3c g\u1EEDi t\u1EEB m\u1ED9t RPC pool. Thi tho\u1EA3ng, m\u1ED9t ph\u1EA7n c\u1EE7a RPC pool c\xF3 th\u1EC3 \u0111i nhanh h\u01A1n \u0111\xE1ng k\u1EC3 ph\u1EA7n c\xF2n l\u1EA1i c\u1EE7a pool. V\u1EA5n \u0111\u1EC1 n\xE0y th\u01B0\u1EDDng g\u1EB7p khi c\xE1c n\u1ED1t trong pool c\u1EA7n l\xE0m vi\u1EC7c k\u1EBFt h\u1EE3p c\xF9ng nhau. Trong v\xED d\u1EE5 n\xE0y, "),On={href:"https://docs.solana.com/developing/programming-model/transactions#recent-blockhash",target:"_blank",rel:"noopener noreferrer"},In=t("recentBlockhash"),zn=t(" c\u1EE7a Transaction \u0111\u01B0\u1EE3c truy v\u1EA5n t\u1EEB ph\u1EA7n \u0111i nhanh h\u01A1n c\u1EE7a pool (M\xE1y ch\u1EE7 A). Khi Transaction \u0111\u01B0\u1EE3c g\u1EEDi \u0111\u1EBFn ph\u1EA7n \u0111i ch\u1EADm c\u1EE7a pool (M\xE1y ch\u1EE7 B), c\xE1c n\u1ED1t n\xE0y s\u1EBD kh\xF4ng nh\u1EADn ra blockhash v\xE0 s\u1EBD v\xF4 hi\u1EC7u ho\xE1 Transaction \u0111\xF3. Ch\xFAng ta c\xF3 th\u1EC3 ph\xE1t hi\u1EC7n l\u1ED7i n\xE0y, n\u1EBFu l\u1EADp tr\xECnh vi\xEAn k\xEDch ho\u1EA1t "),Gn={href:"https://docs.solana.com/developing/clients/jsonrpc-api#sendtransaction",target:"_blank",rel:"noopener noreferrer"},Xn=t("vi\u1EC7c ki\u1EC3m tra preflight"),Wn=t(" l\xFAc g\u1ECDi "),Yn=n("code",null,"sendTransaction",-1),Qn=t("."),Zn=e('

    Dropped via RPC Pool

    M\u1ED9t m\u1EA1ng b\u1ECB r\u1EBD nh\xE1nh t\u1EA1m th\u1EDDi c\u0169ng c\xF3 th\u1EC3 d\u1EABn \u0111\u1EBFn Transaction kh\xF4ng h\u1EE3p l\u1EC7. N\u1EBFu m\u1ED9t validator b\u1ECB ch\u1EADm trong qu\xE1 tr\xECnh trung chuy\u1EC3n c\xE1c block t\u1EA1i pha Banking Stage, r\u1EA5t c\xF3 th\u1EC3 n\xF3 s\u1EBD r\u1EBD sang m\u1ED9t nh\xE1nh thi\u1EC3u s\u1ED1. Khi m\u1ED9t Transaction \u0111\u01B0\u1EE3c t\u1EA1o, c\xF3 kh\u1EA3 n\u0103ng Transaction tham chi\u1EBFu \u0111\u1EBFn recentBlockhash m\xE0 ch\u1EC9 h\u1EE3p l\xEAn tr\xEAn nh\xE1nh thi\u1EC3u s\u1ED1. Sau khi Transaction n\xE0y \u0111\u01B0\u1EE3c g\u1EEDi \u0111i, m\u1EA1ng l\u01B0\u1EDBi c\xF3 th\u1EC3 nh\u1EA3y v\u1EC1 nh\xE1nh ch\xEDnh t\u1EEB nh\xE1nh thi\u1EC3u s\u1ED1 tr\u01B0\u1EDBc khi Transaction \u0111\u01B0\u1EE3c x\u1EED l\xFD. Trong t\xECnh hu\u1ED1ng \u0111\xF3, Transaction s\u1EBD kh\xF4ng h\u1EE3p l\u1EC7 v\xEC m\u1EA1ng kh\xF4ng th\u1EC3 t\xECm th\u1EA5y blockhash.

    Dropped due to Minority Fork (Before Processed)

    Sau khi Transaction \u0111\u01B0\u1EE3c x\u1EED l\xFD nh\u01B0nh tr\u01B0\u1EDBc khi \u0111\u01B0\u1EE3c ghi v\xE0o block

    Trong tr\u01B0\u1EDDng h\u1EE3p m\u1ED9t Transaction tham chi\u1EBFu recentBlockhash t\u1EEB m\u1ED9t nh\xE1nh thi\u1EC3u s\u1ED1, n\xF3 v\u1EABn c\xF3 th\u1EC3 \u0111\u01B0\u1EE3c x\u1EED l\xFD b\xEDnh th\u01B0\u1EDDng. Tuy nhi\xEAn trong tr\u01B0\u1EDDng h\u1EE3p \u0111\xF3, n\xF3 ch\u1EC9 \u0111\u01B0\u1EE3c ti\u1EBFp nh\u1EADn b\u1EDFi leader tr\xEAn nh\xE1nh thi\u1EC3u s\u1ED1. Khi leader n\xE0y c\u1ED1 g\u1EAFng chia s\u1EBB nh\u1EEFng Transaction m\xE0 n\xF3 \u0111\xE3 x\u1EED l\xFD v\u1EDBi ph\u1EA7n c\xF2n l\u1EA1i c\u1EE7a m\u1EA1ng, l\u1ED7i \u0111\u1ED3ng thu\u1EADn s\u1EBD x\u1EA3y ra v\u1EDBi ph\u1EA7n c\u1ED3ng c\xE1c validator kh\xE1c \u0111ang duy tr\xEC tr\xEAn nh\xE1nh ch\xEDnh v\xE0 kh\xF4ng h\u1EC1 nh\u1EADn ra nh\xE1nh thi\u1EC3u s\u1ED1. L\xFAc \u0111\xF3, Transaction s\u1EBD b\u1ECB xem l\xE0 kh\xF4ng h\u1EE3p l\xEAn tr\u01B0\u1EDBc khi \u0111\u01B0\u1EE3c \u0111\xF3ng v\xE0o block.

    Dropped due to Minority Fork (After Processed)

    X\u1EED tr\xED v\u1EDBi Transaction b\u1ECB hu\u1EF7

    Trong khi c\xE1c n\u1ED1t RPC s\u1EBD c\u1ED1 g\u1EAFng lan truy\u1EC1n c\xE1c Transaction, thu\u1EADt to\xE1n \u0111\u01B0\u1EE3c d\xF9ng th\u01B0\u1EDDng ch\u1EC9 \u0111\xE1p \u1EE9ng c\xE1c nhu c\u1EA7u ph\u1ED5 bi\u1EBFn v\xE0 kh\xF4ng t\u01B0\u01A1ng th\xEDch v\u1EDBi c\xE1c nhu c\u1EA7u \u0111\u1EB7t bi\u1EC7t. \u0110\u1EC3 d\u1EF1 ph\xF2ng trong t\xECnh hu\u1ED1ng m\u1EA1ng ngh\u1EBDn, c\xE1c l\u1EADp tr\xECnh vi\xEAn s\u1EBD ph\u1EA3i tu\u1EF3 ch\u1EC9nh thu\u1EADt to\xE1n lan truy\u1EC1n trong \u1EE9ng d\u1EE5ng c\u1EE7a h\u1ECD.

    Nghi\xEAn c\u1EE9u sendTransaction

    Khi c\u1EA7n g\u1EEDi Transaction, ph\u01B0\u01A1ng th\u1EE9c sendTransaction trong RPC l\xE0 c\xF4ng c\u1EE5 c\u01A1 b\u1EA3n nh\u1EA5t s\u1EB5n c\xF3 cho l\u1EADp tr\xECnh vi\xEAn. sendTransaction ch\u1EC9 ch\u1ECBu tr\xE1ch nhi\u1EC7m cho vi\u1EC7c trung chuy\u1EC3n t\u1EEB ng\u01B0\u1EDDi d\xF9ng \u0111\u1EBFn m\u1ED9t n\u1ED1t RPC. N\xEAys n\u1ED1t \u0111\xF3 nh\u1EADn \u0111\u01B0\u1EE3c Transaction, sendTransaction s\u1EBD tr\u1EA3 v\u1EC1 id c\u1EE7a Transaction v\xE0 c\xF3 th\u1EC3 d\xF9ng n\xF3 \u0111\u1EC3 theo d\xF5i ti\u1EBFn \u0111\u1ED9 c\u1EE7a Transaction. M\u1ED9t ph\u1EA3n h\u1ED3i th\xE0nh c\xF4ng t\u1EEB RPC kh\xF4ng \u0111\u1ED3ng ngh\u0129a v\u1EDBi vi\u1EC7c Transaction \u0111\xF3 \u0111\xE3 \u0111\u01B0\u1EE3c ti\u1EBFp nh\u1EADn, x\u1EED l\xFD v\xE0 \u0111\xF3ng v\xE0o m\u1ED9t block tr\xEAn m\u1EA1ng l\u01B0\u1EDBi Solana.

    ',10),$n={class:"custom-container tip"},nt=n("p",{class:"custom-container-title"},"TIP",-1),tt=n("h4",{id:"tham-so-cua-request",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#tham-so-cua-request","aria-hidden":"true"},"#"),t(" Tham s\u1ED1 c\u1EE7a Request")],-1),st=n("li",null,[n("code",null,"transaction"),t(": "),n("code",null,"string"),t(" - Transaction \u0111\xE3 \u0111\u01B0\u1EE3c k\xFD d\u1EA7y \u0111\u1EE7 v\xE0 \u0111\u01B0\u1EE3c m\xE3 ho\xE1 l\u1EA1i th\xE0nh chu\u1ED7i k\xFD t\u1EF1")],-1),at=t("(optional) "),ot=n("code",null,"configuration object",-1),ct=t(": "),et=n("code",null,"object",-1),it=n("li",null,[n("code",null,"skipPreflight"),t(": "),n("code",null,"boolean"),t(" - N\u1EBFu "),n("code",null,"true"),t(", b\u1ECF qua qu\xE1 tr\xECnh ki\u1EC3m tra Transaction b\u1EB1ng preflight (M\u1EB7c \u0111\u1ECBnh: "),n("code",null,"false"),t(")")],-1),rt=t("(optional) "),lt=n("code",null,"preflightCommitment",-1),ht=t(": "),pt=n("code",null,"string",-1),ut=t(" - C\u1EA5p \u0111\u1ED9 "),dt={href:"https://docs.solana.com/developing/clients/jsonrpc-api#configuring-state-commitment",target:"_blank",rel:"noopener noreferrer"},gt=t("Commitment"),kt=t(' \u0111\u01B0\u1EE3c d\xF9ng cho m\xF4 ph\u1ECFng preflight trong ng\xE2n h\xE0ng ch\u1ED7 tr\u1ED1ng (M\u1EB7c \u0111\u1ECBnh: "finalized").'),_t=n("li",null,[t("(optional) "),n("code",null,"encoding"),t(": "),n("code",null,"string"),t(' - M\xE3 ho\xE1 \u0111\u01B0\u1EE3c d\xF9ng cho d\u1EEF li\u1EC7u trong Transaction. Ho\u1EB7c "base58" (ch\u1EADm), ho\u1EB7c "base64". (M\u1EB7c \u0111\u1ECBnh: "base58").')],-1),bt=n("li",null,[t("(optional) "),n("code",null,"maxRetries"),t(": "),n("code",null,"usize"),t(" - S\u1ED1 l\u01B0\u1EE3ng t\u1ED1i \u0111a l\u1EA7n th\u1EED l\u1EA1i cho n\u1ED1t RPC g\u1EEDi Transaction \u0111\u1EBFn c\xE1c leader. N\u1EBFu tham s\u1ED1 n\xE0y kh\xF4ng \u0111\u01B0\u1EE3c \u0111\u1EC1 c\u1EADp, n\u1ED1t RPC s\u1EBD th\u1EED l\u1EA1i cho \u0111\u1EBFn khi Transaction th\xE0nh c\xF4ng ho\u1EB7c blockhash b\u1ECB h\u1EBFt h\u1EA1n.")],-1),mt=n("h4",{id:"response",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#response","aria-hidden":"true"},"#"),t(" Response")],-1),ft=n("code",null,"transaction id",-1),yt=t(": "),vt=n("code",null,"string",-1),Tt=t(" - Ch\u1EEF k\xFD \u0111\u1EA7u ti\xEAn \u0111\u01B0\u1EE3c nh\xFAng v\xE0o trong Transaction. Id c\u1EE7a transaction c\xF3 th\u1EC3 d\u01B0\u1EE3c d\xF9ng v\u1EDBi "),wt={href:"https://docs.solana.com/developing/clients/jsonrpc-api#getsignaturestatuses",target:"_blank",rel:"noopener noreferrer"},xt=t("getSignatureStatuses"),Pt=t(" \u0111\u1EC3 c\u1EADp nh\u1EADt tr\u1EA1ng th\xE1i m\u1EDBi nh\u1EA5t c\u1EE7a Transaction."),Ct=n("h2",{id:"tuy-chinh-thuat-toan-lan-truyen",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#tuy-chinh-thuat-toan-lan-truyen","aria-hidden":"true"},"#"),t(" Tu\u1EF3 ch\u1EC9nh thu\u1EADt to\xE1n lan truy\u1EC1n")],-1),Rt=t("\u0110\u1EC3 ph\xE1t tri\u1EC3n thu\u1EADt to\xE1n lan truy\u1EC1n c\u1EE7a ri\xEAng m\xECnh, l\u1EADp tr\xECnh vi\xEAn c\u1EA7n hi\u1EC3u r\xF5 tham s\u1ED1 "),Lt=n("code",null,"maxRetries",-1),St=t(" trong "),Bt=n("code",null,"sendTransaction",-1),qt=t(". N\u1EBFu \u0111\u01B0\u1EE3c khai b\xE1o, "),Nt=n("code",null,"maxRetries",-1),Kt=t(" s\u1EBD ghi \u0111\xE8 l\xEAn gi\xE1 tr\u1ECB m\u1EB7c \u0111\u1ECBnh c\u1EE7a n\u1ED1t RPC v\xE0 cho ph\xE9p l\u1EADp tr\xECnh vi\xEAn \u0111i\u1EC1u khi\u1EC3n th\u1EED c\xF4ng qu\xE1 tr\xECnh th\u1EED l\u1EA1i trong "),Mt={href:"https://github.com/solana-labs/solana/blob/98707baec2385a4f7114d2167ef6dfb1406f954f/validator/src/main.rs#L1258-L1274",target:"_blank",rel:"noopener noreferrer"},jt=t("ph\u1EA1m vi gi\u1EDBi h\u1EA1n h\u1EE3p l\xFD"),Ht=t("."),Vt=t("M\u1ED9t c\xE0i \u0111\u1EB7t ph\u1ED5 bi\u1EBFn cho vi\u1EC7c th\u1EED l\u1EA1i th\u1EE7 c\xF4ng l\xE0 t\u1EA1m l\u01B0u "),Ut=n("code",null,"lastValidBlockHeight",-1),At=t(" \u0111\u01B0\u1EE3c truy v\u1EA5n t\u1EEB "),Dt={href:"https://docs.solana.com/developing/clients/jsonrpc-api#getlatestblockhash",target:"_blank",rel:"noopener noreferrer"},Ft=t("getLatestBlockhash"),Et=t(". Sau khi l\u01B0u l\u1EA1i, m\u1ED9t \u1EE9ng d\u1EE5ng c\xF3 th\u1EC3 "),Jt={href:"https://docs.solana.com/developing/clients/jsonrpc-api#getblockheight",target:"_blank",rel:"noopener noreferrer"},Ot=t("theo d\xF5i blockheight c\u1EE7a m\u1EA1ng l\u01B0\u1EDBi"),It=t(" v\xE0 lan truy\u1EC1n Transaction th\u1EE7 c\xF4ng th\xF4ng qua thu\u1EADt to\xE1n tu\u1EF3 ch\u1EC9nh. C\xF3 m\u1ED9t v\xE0i \u1EE9ng d\u1EE5ng s\u1EED d\u1EE5ng gi\u1EA3i thu\u1EADt "),zt={href:"https://en.wikipedia.org/wiki/Exponential_backoff",target:"_blank",rel:"noopener noreferrer"},Gt=t("exponential backoff"),Xt=t(", th\xEC m\u1ED9t v\xE0i \u1EE9ng d\u1EE5ng kh\xE1c v\xED nh\u01B0 "),Wt={href:"https://www.mango.markets/",target:"_blank",rel:"noopener noreferrer"},Yt=t("Mango"),Qt=t(" ch\u1ECDn "),Zt={href:"https://github.com/blockworks-foundation/mango-ui/blob/b6abfc6c13b71fc17ebbe766f50b8215fa1ec54f/src/utils/send.tsx#L713",target:"_blank",rel:"noopener noreferrer"},$t=t("li\xEAn t\u1EE5c t\xE1i g\u1EEDi"),ns=t(" Transaction v\u1EDBi m\u1ED9t kho\u1EA3ng th\u1EDDi gian l\u1EB7p \u0111\u1ECBnh tr\u01B0\u1EDBc cho \u0111\u1EBFn khi qu\xE1 h\u1EA1n."),ts=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),t(),n("span",{class:"token punctuation"},"{"),t(` +import{_ as h,r as o,o as p,c as u,a as n,b as s,w as c,F as d,d as t,e}from"./app.2fbb9e96.js";var g="/assets/tx-journey.dd6310be.png",k="/assets/tpu-jito-labs.8bb32fb6.png",_="/assets/dropped-via-rpc-pool.8d1ce9af.png",b="/assets/dropped-minority-fork-pre-process.555653e1.png",m="/assets/dropped-minority-fork-post-process.48c3c955.png";const f={},y=n("h1",{id:"thu-lai-transaction",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#thu-lai-transaction","aria-hidden":"true"},"#"),t(" Th\u1EED l\u1EA1i Transaction")],-1),v=t("Trong m\u1ED9t v\xE0i t\xEDnh hu\u1ED1ng, m\u1ED9t Transaction tr\xF4ng c\xF3 v\u1EBB h\u1EE3p l\u1EC7 c\xF3 th\u1EC3 b\u1ECB h\u1EBFt h\u1EA1n ngay tr\u01B0\u1EDBc khi \u0111\u01B0\u1EE3c ch\u1EA5p nh\u1EADn (th\xEAm v\xE0o block). \u0110i\u1EC1u \u0111\xF3 th\u01B0\u1EDDng di\u1EC5n ra nh\u1EA5t l\xE0 khi m\u1EA1ng l\u01B0\u1EDBi b\u1ECB ngh\u1EBDn v\xE0 m\u1ED9t n\u1ED1t RPC kh\xF4ng th\u1EC3 truy\u1EC1n Transaction \u0111\u1EBFn "),T={href:"https://docs.solana.com/terminology#leader",target:"_blank",rel:"noopener noreferrer"},w=t("leader"),x=t(". D\u01B0\u1EDBi g\xF3c \u0111\u1ED9 ng\u01B0\u1EDDi d\xF9ng, b\u1EA1n c\xF3 th\u1EC3 nh\u1EADn ra tr\u01B0\u1EDDng h\u1EE3p n\xE0y khi Transaction bi\u1EBFn m\u1EA5t ho\xE0n to\xE0n. Trong khi c\xE1c n\u1ED1t RPC \u0111\u01B0\u1EE3c trang b\u1ECB m\u1ED9t thu\u1EADt to\xE1n lan truy\u1EC1n chung, \u1EE9ng d\u1EE5ng c\u1EE7a c\xE1c l\u1EADp tr\xECnh vi\xEAn v\u1EABn c\xF3 kh\u1EA3 n\u0103ng ph\xE1t tri\u1EC3n c\xE1c lu\u1EADn l\xFD lan truy\u1EC1n tu\xFD ch\u1EC9nh."),P=e('

    C\xF3 th\u1EC3 b\u1EA1n ch\u01B0a bi\u1EBFt

    Nh\u1EEFng \u0111i\u1EC1u c\xF3 th\u1EC3 b\u1EA1n ch\u01B0a bi\u1EBFt

    • C\xE1c n\u1ED1t RPC s\u1EBD th\u1EED lan truy\u1EC1n l\u1EA1i Transaction khi s\u1EED d\u1EE5ng m\u1ED9t thu\u1EADt to\xE1n chung
    • \u1EE8ng d\u1EE5ng ri\xEAng c\xF3 th\u1EC3 hi\u1EC7n th\u1EF1c c\xE1c lu\u1EADn l\xFD lan truy\u1EC1n tu\u1EF3 ch\u1EC9nh
    • L\u1EADp tr\xECnh vi\xEAn n\xEAn hi\u1EC3u r\xF5 tham s\u1ED1 maxRetries c\u1EE7a ph\u01B0\u01A1ng th\u1EE9c sendTransaction trong JSON-RPC.
    • L\u1EADp tr\xECnh vi\xEAn n\xEAn k\xEDch ho\u1EA1t preflight \u0111\u1EC3 ki\u1EC3m tra c\xE1c t\xECnh hu\u1ED1ng l\u1ED7i tr\u01B0\u1EDBc khi g\u1EEDi Transaction \u0111i
    • Tr\u01B0\u1EDBc khi k\xFD l\u1EA1i b\u1EA5t k\u1EF3 m\u1ED9t Transaction n\xE0o, l\xE0 r\u1EA5t quan tr\u1ECDng khi \u0111\u1EA3m b\u1EA3o r\u1EB1ng blockhash c\u1EE7a Transaction \u0111\xE3 h\u1EBFt h\u1EA1n

    H\xE0nh tr\xECnh c\u1EE7a m\u1ED9t Transaction

    L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 ng\u01B0\u1EDDi d\xF9ng g\u1EEDi Transactions

    Trong Solana, kh\xF4ng t\u1ED3n t\u1EA1i kh\xE1i ni\u1EC7m mempool. T\u1EA5t c\u1EA3 c\xE1c Transaction, d\xF9 l\xE0 \u0111\u01B0\u1EE3c t\u1EA1o n\xEAn t\u1EEB c\xE1c Program hay l\xE0 t\u1EEB ng\u01B0\u1EDDi d\xF9ng, \u0111\u1EC1u \u0111\u01B0\u1EE3c \u0111i\u1EC1u h\u01B0\u1EDBng hi\u1EC7u qu\u1EA3 \u0111\u1EBFn c\xE1c leader \u0111\u1EC3 h\u1ECD c\xF3 th\u1EC3 x\u1EED l\xFD v\xE0 ghi nh\u1EADn ch\xFAng v\xE0o block. C\xF3 2 c\xE1ch m\xE0 m\u1ED9t Transaction c\xF3 th\u1EC3 \u0111\u01B0\u1EE3c g\u1EEDi \u0111\u1EBFn c\xE1c leader:

    ',5),C=t("U\u1EF7 quy\u1EC1n cho c\xE1c m\xE1y ch\u1EE7 RPC b\u1EB1ng ph\u01B0\u01A1ng th\u1EE9c "),R={href:"https://docs.solana.com/developing/clients/jsonrpc-api#sendtransaction",target:"_blank",rel:"noopener noreferrer"},L=t("sendTransaction"),S=t(" trong JSON-RPC."),B=t("G\u1EEDi tr\u1EF1c ti\u1EBFp \u0111\u1EBFn c\xE1c leader th\xF4ng qua "),q={href:"https://docs.rs/solana-client/1.7.3/solana_client/tpu_client/index.html",target:"_blank",rel:"noopener noreferrer"},N=t("TPU Client"),K=n("p",null,"Ph\u1EA7n l\u1EDBn ng\u01B0\u1EDDi d\xF9ng s\u1EBD g\u1EEDi Transaction th\xF4ng qua m\xE1y ch\u1EE7 RPC. Khi m\u1ED9t ng\u01B0\u1EDDi d\xF9ng g\u1EEDi Transaction \u0111i, n\u1ED1t RPC s\u1EBD ti\u1EBFp nh\u1EADn v\xE0 c\u1ED1 g\u1EAFng truy\u1EC1n l\u1EA7n l\u01B0\u1EE3t c\xE1c Transaction \u0111\u1EBFn leader hi\u1EC7n t\u1EA1i c\u0169ng nh\u01B0 leader ti\u1EBFp theo. Cho \u0111\u1EBFn khi Transaction \u0111\u01B0\u1EE3c x\u1EED l\xFD b\u1EDFi m\u1ED9t leader, s\u1EBD kh\xF4ng t\u1ED3n t\u1EA1i b\u1EA5t k\u1EF3 b\u1EA3n sao n\xE0o c\u1EE7a Transaction \u0111\u01B0\u1EE3c l\u01B0u tr\u1EEF ngo\u1EA1i tr\u1EEB ng\u01B0\u1EDDi d\xF9ng v\xE0 c\xE1c n\u1ED1t RPC trung chuy\u1EC3n. Trong tr\u01B0\u1EDDng h\u1EE3p TPU Client, qu\xE1 tr\xECnh lan truy\u1EC1n v\xE0 \u0111i\u1EC1u h\u01B0\u1EDBng \u0111\u1EBFn leader s\u1EBD \u0111\u01B0\u1EE3c x\u1EED l\xFD to\xE0n b\u1ED9 b\u1EDFi ng\u01B0\u1EDDi d\xF9ng.",-1),M=n("p",null,[n("img",{src:g,alt:"Transaction Journey"})],-1),j=n("h3",{id:"lam-the-nao-\u0111e-cac-not-rpc-lan-truyen-transaction",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#lam-the-nao-\u0111e-cac-not-rpc-lan-truyen-transaction","aria-hidden":"true"},"#"),t(" L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 c\xE1c n\u1ED1t RPC lan truy\u1EC1n Transaction")],-1),V=t("Ngay sau khi m\u1ED9t n\u1ED1t RPC ti\u1EBFp nh\u1EADn Transaction th\xF4ng qua "),H=n("code",null,"sendTransaction",-1),U=t(", n\xF3 s\u1EBD chuy\u1EC3n Transaction \u0111\xF3 th\xE0nh m\u1ED9t g\xF3i tin "),A={href:"https://en.wikipedia.org/wiki/User_Datagram_Protocol",target:"_blank",rel:"noopener noreferrer"},D=t("UDP"),F=t(" tr\u01B0\u1EDBc khi truy\u1EC1n \u0111\u1EBFn c\xE1c leader th\xEDch h\u1EE3p. UDP cho ph\xE9p validator c\xF3 th\u1EC3 giao ti\u1EBFp nhanh ch\xF3ng v\u1EDBi nhau, nh\u01B0ng kh\xF4ng \u0111\u1EA3m b\u1EA3o g\xF3i tin c\xF3 th\u1EC3 ch\u1EAFc ch\u1EAFn \u0111\u01B0\u1EE3c chuy\u1EC3n \u0111i \u0111\xFAng h\u01B0\u1EDBng."),E=t("B\u1EDFi v\xEC l\u1ECBch tr\xECnh c\u1EE7a c\xE1c leader trong Solana l\xE0 bi\u1EBFt tr\u01B0\u1EDBc cho m\u1ED7i "),J={href:"https://docs.solana.com/terminology#epoch",target:"_blank",rel:"noopener noreferrer"},O=t("epoch"),I=t(" (~2 ng\xE0y), m\u1ED9t n\u1ED1t RPC s\u1EBD lan truy\u1EC1n Transaction c\u1EE7a n\xF3 tr\u1EF1c ti\u1EBFp \u0111\u1EBFn leader hi\u1EC7n t\u1EA1i c\u0169ng nh\u01B0 ti\u1EBFp sau. \u0110i\u1EC1u n\xE0y tr\xE1i ng\u01B0\u1EE3c v\u1EDBi c\xE1c giao th\u1EE9c gossip kh\xE1c, v\xED d\u1EE5 nh\u01B0 Ethereum truy\u1EC1n Transaction m\u1ED9t c\xE1ch ng\u1EABu nhi\xEAn v\xE0 ph\u1EE7 kh\u1EAFp tr\xEAn to\xE0n m\u1EA1ng. M\u1EB7c \u0111\u1ECBnh, c\xE1c n\u1ED1t RPC s\u1EBD th\u1EED chuy\u1EC3n Transaction \u0111\u1EBFn c\xE1c leader c\u1EE9 m\u1ED7i 2 gi\xE2y cho \u0111\u1EC3 khi, ho\u1EB7c Transaction th\xE0nh c\xF4ng, ho\u1EB7c blockhash c\u1EE7a Transaction b\u1ECB qu\xE1 h\u1EA1n (150 blocks ho\u1EB7c ~1 ph\xFAt 19 gi\xE2y t\u1EA1i th\u1EDDi \u0111i\u1EC3m vi\u1EBFt b\xE0i). N\u1EBFu h\xE0ng \u0111\u1EE3i c\xE1c Transaction c\u1EA7n \u0111\u01B0\u1EE3c truy\u1EC1n \u0111i l\u1EDBn h\u01A1n "),z={href:"https://github.com/solana-labs/solana/blob/bfbbc53dac93b3a5c6be9b4b65f679fdb13e41d9/send-transaction-service/src/send_transaction_service.rs#L20",target:"_blank",rel:"noopener noreferrer"},G=t("10,000 transactions"),X=t(", c\xE1c Transaction \u0111\u1EBFn sau s\u1EBD b\u1ECB t\u1EEB ch\u1ED1i. \u0110\u1EC3 \u0111i\u1EC1u ch\u1EC9nh c\xE0i \u0111\u1EB7t m\u1EB7c \u0111\u1ECBnh, tham kh\u1EA3o c\xE1c tham s\u1ED1 cho c\xE2u l\u1EC7nh "),W={href:"https://github.com/solana-labs/solana/blob/bfbbc53dac93b3a5c6be9b4b65f679fdb13e41d9/validator/src/main.rs#L1172",target:"_blank",rel:"noopener noreferrer"},Y=t("t\u1EA1i \u0111\xE2y"),Q=t("."),Z=t("Khi m\u1ED9t n\u1ED1t RPC lan truy\u1EC1n m\u1ED9t Transaction, n\xF3 s\u1EBD c\u1ED1 g\u1EAFng chuy\u1EC3n Transaction \u0111\xF3 \u0111\u1EC3 "),$={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/validator.rs#L867",target:"_blank",rel:"noopener noreferrer"},nn=t("Transaction Processing Unit (TPU)"),tn=t(" c\u1EE7a m\u1ED9t leader."),sn=n("p",null,"TPU x\u1EED l\xFD c\xE1c Transaction trong 5 pha ri\xEAng bi\u1EC7t:",-1),an={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/fetch_stage.rs#L21",target:"_blank",rel:"noopener noreferrer"},on=t("Fetch Stage"),cn={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/tpu.rs#L91",target:"_blank",rel:"noopener noreferrer"},en=t("SigVerify Stage"),rn={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/banking_stage.rs#L249",target:"_blank",rel:"noopener noreferrer"},ln=t("Banking Stage"),hn={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/poh/src/poh_service.rs",target:"_blank",rel:"noopener noreferrer"},pn=t("Proof of History Service"),un={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/tpu.rs#L136",target:"_blank",rel:"noopener noreferrer"},dn=t("Broadcast Stage"),gn=n("p",null,[n("img",{src:k,alt:"TPU Overview"}),n("small",{style:{display:"block","text-align":"center"}},"H\xECnh \u1EA3nh \u0111\u01B0\u1EE3c cho ph\xE9p b\u1EDFi Jito Labs")],-1),kn=n("p",null,"Trong 5 pha n\xE0y, Fetch Stage ch\u1ECBu tr\xE1ch nhi\u1EC7m cho vi\u1EC7c ti\u1EBFp nh\u1EADn Transaction. Trong ph\u1EA1m vi Fetch Stage, validator s\u1EBD ph\xE2n lo\u1EA1i c\xE1c Transaction m\u1EDBi \u0111\u1EBFn d\u1EF1a theo 3 c\u1ED5ng:",-1),_n={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/gossip/src/contact_info.rs#L27",target:"_blank",rel:"noopener noreferrer"},bn=t("tpu"),mn=t(" x\u1EED l\xFD c\xE1c Transaction b\xECnh th\u01B0\u1EDDng nh\u01B0 l\xE0 chuy\u1EC3n token, t\u1EA1o NFT, v\xE0 c\xE1c ch\u1EC9 th\u1ECB cho c\xE1c Program"),fn={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/gossip/src/contact_info.rs#L31",target:"_blank",rel:"noopener noreferrer"},yn=t("tpu_vote"),vn=t(" t\u1EADp trung ho\xE0n to\xE0n v\xE0o Transaction b\u1ECF phi\u1EBFu"),Tn={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/gossip/src/contact_info.rs#L29",target:"_blank",rel:"noopener noreferrer"},wn=t("tpu_forwards"),xn=t(" \u0111i\u1EC1u h\u01B0\u1EDBng c\xE1c g\xF3i tin ch\u01B0a x\u1EED l\xFD \u0111\u1EBFn c\xE1c leader ti\u1EBFp theo n\u1EBFu leader hi\u1EC7n t\u1EA1i kh\xF4ng \u0111\u1EE7 kh\u1EA3 n\u0103ng x\u1EED l\xFD h\u1EBFt t\u1EA5t c\u1EA3 c\xE1c Transaction"),Pn=t("Chi ti\u1EBFt h\u01A1n v\u1EC1 TPU, vui l\xF2ng tham kh\u1EA3o "),Cn={href:"https://jito-labs.medium.com/solana-validator-101-transaction-processing-90bcdc271143",target:"_blank",rel:"noopener noreferrer"},Rn=t("b\xE0i vi\u1EBFt r\u1EA5t xu\u1EA5t s\u1EAFc c\u1EE7a Jito Labs"),Ln=t("."),Sn=n("h2",{id:"khi-nao-cac-transaction-bi-huy",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#khi-nao-cac-transaction-bi-huy","aria-hidden":"true"},"#"),t(" Khi n\xE0o c\xE1c Transaction b\u1ECB hu\u1EF7")],-1),Bn=n("p",null,"Xuy\xEAn su\u1ED1t h\xE0nh tr\xECnh c\u1EE7a m\u1ED9t Transaction, lu\xF4n c\xF3 m\u1ED9t v\xE0i t\xECnh hu\u1ED1ng Transaction \u0111\xF3 c\xF3 th\u1EC3 b\u1ECB l\xE0m m\u1EA5t m\u1ED9t c\xE1ch t\xECnh c\u1EDD do m\u1EA1ng.",-1),qn=n("h3",{id:"truoc-khi-transaction-\u0111uoc-xu-ly",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#truoc-khi-transaction-\u0111uoc-xu-ly","aria-hidden":"true"},"#"),t(" Tr\u01B0\u1EDBc khi Transaction \u0111\u01B0\u1EE3c x\u1EED l\xFD")],-1),Nn=t("N\u1EBFu m\u1EA1ng l\xE0m m\u1EA5t m\u1ED9t Transaction, kh\u1EA3 n\u0103ng g\u1EA7n nh\u01B0 n\xF3 s\u1EBD b\u1ECB hu\u1EF9 tr\u01B0\u1EDBc khi \u0111\u01B0\u1EE3c x\u1EED l\xFD b\u1EDFi m\u1ED9t leader. "),Kn={href:"https://en.wikipedia.org/wiki/Packet_loss",target:"_blank",rel:"noopener noreferrer"},Mn=t("M\u1EA5t g\xF3i tin"),jn=t(" trong UDP l\xE0 m\u1ED9t nguy\xEAn nh\xE2n \u0111\u01A1n gi\u1EA3n nh\u1EA5t d\u1EABn \u0111\u1EBFn t\xECnh tr\u1EA1ng tr\xEAn. Trong th\u1EDDi gian m\u1EA1ng ngh\u1EBDn, c\xE1c validator c\xF3 th\u1EC3 \u0111\xE3 b\u1ECB qu\xE1 t\u1EA3i v\u1EDBi s\u1ED1 l\u01B0\u1EE3ng kh\u1ED5ng l\u1ED3 c\xE1c Transaction c\u1EA7n x\u1EED l\xFD. Trong khi c\xE1c validator \u0111\u01B0\u1EE3c trang b\u1ECB "),Vn=n("code",null,"tpu_forwards",-1),Hn=t(" \u0111\u1EC3 \u0111i\u1EC1u h\u01B0\u1EDBng c\xE1c Transaction \u0111\u1EBFn sau, th\xEC v\u1EABn lu\xF4n c\xF3 m\u1ED9t gi\u1EDBi h\u1EA1n s\u1ED1 l\u01B0\u1EE3ng c\xE1c g\xF3i tin "),Un={href:"https://github.com/solana-labs/solana/blob/master/core/src/banking_stage.rs#L389",target:"_blank",rel:"noopener noreferrer"},An=t("\u0111\u01B0\u1EE3c \u0111i\u1EC1u h\u01B0\u1EDBng"),Dn=t(". H\u01A1n n\u1EEFa, m\u1ED7i l\u1EA7n \u0111i\u1EC1u h\u01B0\u1EDBng s\u1EBD b\u1ECB gi\u1EDBi h\u1EA1n trong ph\u1EA1m v\u1ECB m\u1ED9t \u0111\u01A1n v\u1ECB k\u1EBFt n\u1ED1i (hop) gi\u1EEFa c\xE1c validator. B\u1EDFi v\u1EADy m\xE0 c\xE1c Transaction \u0111\u01B0\u1EE3c nh\u1EADn th\xF4ng qua c\u1ED5ng "),Fn=n("code",null,"tpu_forwards",-1),En=t(" s\u1EBD kh\xF4ng bao gi\u1EDD \u0111\u01B0\u1EE3c \u0111i\u1EC1u h\u01B0\u1EDBng th\xEAm cho c\xE1c validator kh\xE1c."),Jn=t("Ngo\xE0i ra, c\u0169ng c\xF3 2 l\xFD do \u0111\u01B0\u1EE3c ghi nh\u1EADn kh\xE1c d\u1EABn \u0111\u1EBFn m\u1ED9t Transaction b\u1ECB \u0111\xE1nh m\u1EA5t tr\u01B0\u1EDBc khi n\xF3 \u0111\u01B0\u1EE3c x\u1EED l\xFD. Tr\u01B0\u1EDDng h\u1EE3p \u0111\u1EA7u ti\xEAn l\xE0 nh\u1EEFng Transaction \u0111\u01B0\u1EE3c g\u1EEDi t\u1EEB m\u1ED9t RPC pool. Thi tho\u1EA3ng, m\u1ED9t ph\u1EA7n c\u1EE7a RPC pool c\xF3 th\u1EC3 \u0111i nhanh h\u01A1n \u0111\xE1ng k\u1EC3 ph\u1EA7n c\xF2n l\u1EA1i c\u1EE7a pool. V\u1EA5n \u0111\u1EC1 n\xE0y th\u01B0\u1EDDng g\u1EB7p khi c\xE1c n\u1ED1t trong pool c\u1EA7n l\xE0m vi\u1EC7c k\u1EBFt h\u1EE3p c\xF9ng nhau. Trong v\xED d\u1EE5 n\xE0y, "),On={href:"https://docs.solana.com/developing/programming-model/transactions#recent-blockhash",target:"_blank",rel:"noopener noreferrer"},In=t("recentBlockhash"),zn=t(" c\u1EE7a Transaction \u0111\u01B0\u1EE3c truy v\u1EA5n t\u1EEB ph\u1EA7n \u0111i nhanh h\u01A1n c\u1EE7a pool (M\xE1y ch\u1EE7 A). Khi Transaction \u0111\u01B0\u1EE3c g\u1EEDi \u0111\u1EBFn ph\u1EA7n \u0111i ch\u1EADm c\u1EE7a pool (M\xE1y ch\u1EE7 B), c\xE1c n\u1ED1t n\xE0y s\u1EBD kh\xF4ng nh\u1EADn ra blockhash v\xE0 s\u1EBD v\xF4 hi\u1EC7u ho\xE1 Transaction \u0111\xF3. Ch\xFAng ta c\xF3 th\u1EC3 ph\xE1t hi\u1EC7n l\u1ED7i n\xE0y, n\u1EBFu l\u1EADp tr\xECnh vi\xEAn k\xEDch ho\u1EA1t "),Gn={href:"https://docs.solana.com/developing/clients/jsonrpc-api#sendtransaction",target:"_blank",rel:"noopener noreferrer"},Xn=t("vi\u1EC7c ki\u1EC3m tra preflight"),Wn=t(" l\xFAc g\u1ECDi "),Yn=n("code",null,"sendTransaction",-1),Qn=t("."),Zn=e('

    Dropped via RPC Pool

    M\u1ED9t m\u1EA1ng b\u1ECB r\u1EBD nh\xE1nh t\u1EA1m th\u1EDDi c\u0169ng c\xF3 th\u1EC3 d\u1EABn \u0111\u1EBFn Transaction kh\xF4ng h\u1EE3p l\u1EC7. N\u1EBFu m\u1ED9t validator b\u1ECB ch\u1EADm trong qu\xE1 tr\xECnh trung chuy\u1EC3n c\xE1c block t\u1EA1i pha Banking Stage, r\u1EA5t c\xF3 th\u1EC3 n\xF3 s\u1EBD r\u1EBD sang m\u1ED9t nh\xE1nh thi\u1EC3u s\u1ED1. Khi m\u1ED9t Transaction \u0111\u01B0\u1EE3c t\u1EA1o, c\xF3 kh\u1EA3 n\u0103ng Transaction tham chi\u1EBFu \u0111\u1EBFn recentBlockhash m\xE0 ch\u1EC9 h\u1EE3p l\xEAn tr\xEAn nh\xE1nh thi\u1EC3u s\u1ED1. Sau khi Transaction n\xE0y \u0111\u01B0\u1EE3c g\u1EEDi \u0111i, m\u1EA1ng l\u01B0\u1EDBi c\xF3 th\u1EC3 nh\u1EA3y v\u1EC1 nh\xE1nh ch\xEDnh t\u1EEB nh\xE1nh thi\u1EC3u s\u1ED1 tr\u01B0\u1EDBc khi Transaction \u0111\u01B0\u1EE3c x\u1EED l\xFD. Trong t\xECnh hu\u1ED1ng \u0111\xF3, Transaction s\u1EBD kh\xF4ng h\u1EE3p l\u1EC7 v\xEC m\u1EA1ng kh\xF4ng th\u1EC3 t\xECm th\u1EA5y blockhash.

    Dropped due to Minority Fork (Before Processed)

    Sau khi Transaction \u0111\u01B0\u1EE3c x\u1EED l\xFD v\xE0 tr\u01B0\u1EDBc khi \u0111\u01B0\u1EE3c ghi v\xE0o block

    Trong tr\u01B0\u1EDDng h\u1EE3p m\u1ED9t Transaction tham chi\u1EBFu recentBlockhash t\u1EEB m\u1ED9t nh\xE1nh thi\u1EC3u s\u1ED1, n\xF3 v\u1EABn c\xF3 th\u1EC3 \u0111\u01B0\u1EE3c x\u1EED l\xFD b\xEDnh th\u01B0\u1EDDng. Tuy nhi\xEAn trong tr\u01B0\u1EDDng h\u1EE3p \u0111\xF3, n\xF3 ch\u1EC9 \u0111\u01B0\u1EE3c ti\u1EBFp nh\u1EADn b\u1EDFi leader tr\xEAn nh\xE1nh thi\u1EC3u s\u1ED1. Khi leader n\xE0y c\u1ED1 g\u1EAFng chia s\u1EBB nh\u1EEFng Transaction m\xE0 n\xF3 \u0111\xE3 x\u1EED l\xFD v\u1EDBi ph\u1EA7n c\xF2n l\u1EA1i c\u1EE7a m\u1EA1ng, l\u1ED7i \u0111\u1ED3ng thu\u1EADn s\u1EBD x\u1EA3y ra v\u1EDBi ph\u1EA7n c\u1ED3ng c\xE1c validator kh\xE1c \u0111ang duy tr\xEC tr\xEAn nh\xE1nh ch\xEDnh v\xE0 kh\xF4ng h\u1EC1 nh\u1EADn ra nh\xE1nh thi\u1EC3u s\u1ED1. L\xFAc \u0111\xF3, Transaction s\u1EBD b\u1ECB xem l\xE0 kh\xF4ng h\u1EE3p l\xEAn tr\u01B0\u1EDBc khi \u0111\u01B0\u1EE3c \u0111\xF3ng v\xE0o block.

    Dropped due to Minority Fork (After Processed)

    X\u1EED tr\xED v\u1EDBi Transaction b\u1ECB hu\u1EF7

    Trong khi c\xE1c n\u1ED1t RPC s\u1EBD c\u1ED1 g\u1EAFng lan truy\u1EC1n c\xE1c Transaction, thu\u1EADt to\xE1n \u0111\u01B0\u1EE3c d\xF9ng th\u01B0\u1EDDng ch\u1EC9 \u0111\xE1p \u1EE9ng c\xE1c nhu c\u1EA7u ph\u1ED5 bi\u1EBFn v\xE0 kh\xF4ng t\u01B0\u01A1ng th\xEDch v\u1EDBi c\xE1c nhu c\u1EA7u \u0111\u1EB7c bi\u1EC7t. \u0110\u1EC3 d\u1EF1 ph\xF2ng trong t\xECnh hu\u1ED1ng m\u1EA1ng ngh\u1EBDn, c\xE1c l\u1EADp tr\xECnh vi\xEAn s\u1EBD ph\u1EA3i tu\u1EF3 ch\u1EC9nh thu\u1EADt to\xE1n lan truy\u1EC1n trong \u1EE9ng d\u1EE5ng c\u1EE7a h\u1ECD.

    Nghi\xEAn c\u1EE9u sendTransaction

    Khi c\u1EA7n g\u1EEDi Transaction, ph\u01B0\u01A1ng th\u1EE9c sendTransaction trong RPC l\xE0 c\xF4ng c\u1EE5 c\u01A1 b\u1EA3n nh\u1EA5t s\u1EB5n c\xF3 cho l\u1EADp tr\xECnh vi\xEAn. sendTransaction ch\u1EC9 ch\u1ECBu tr\xE1ch nhi\u1EC7m cho vi\u1EC7c trung chuy\u1EC3n t\u1EEB ng\u01B0\u1EDDi d\xF9ng \u0111\u1EBFn m\u1ED9t n\u1ED1t RPC. N\u1EBFu n\u1ED1t \u0111\xF3 nh\u1EADn \u0111\u01B0\u1EE3c Transaction, sendTransaction s\u1EBD tr\u1EA3 v\u1EC1 id c\u1EE7a Transaction v\xE0 c\xF3 th\u1EC3 d\xF9ng n\xF3 \u0111\u1EC3 theo d\xF5i ti\u1EBFn \u0111\u1ED9 c\u1EE7a Transaction. M\u1ED9t ph\u1EA3n h\u1ED3i th\xE0nh c\xF4ng t\u1EEB RPC kh\xF4ng \u0111\u1ED3ng ngh\u0129a v\u1EDBi vi\u1EC7c Transaction \u0111\xF3 \u0111\xE3 \u0111\u01B0\u1EE3c ti\u1EBFp nh\u1EADn, x\u1EED l\xFD v\xE0 \u0111\xF3ng v\xE0o m\u1ED9t block tr\xEAn m\u1EA1ng l\u01B0\u1EDBi Solana.

    ',10),$n={class:"custom-container tip"},nt=n("p",{class:"custom-container-title"},"TIP",-1),tt=n("h4",{id:"tham-so-cua-request",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#tham-so-cua-request","aria-hidden":"true"},"#"),t(" Tham s\u1ED1 c\u1EE7a Request")],-1),st=n("li",null,[n("code",null,"transaction"),t(": "),n("code",null,"string"),t(" - Transaction \u0111\xE3 \u0111\u01B0\u1EE3c k\xFD \u0111\u1EA7y \u0111\u1EE7 v\xE0 \u0111\u01B0\u1EE3c m\xE3 ho\xE1 l\u1EA1i th\xE0nh chu\u1ED7i k\xFD t\u1EF1")],-1),at=t("(optional) "),ot=n("code",null,"configuration object",-1),ct=t(": "),et=n("code",null,"object",-1),it=n("li",null,[n("code",null,"skipPreflight"),t(": "),n("code",null,"boolean"),t(" - N\u1EBFu "),n("code",null,"true"),t(", b\u1ECF qua qu\xE1 tr\xECnh ki\u1EC3m tra Transaction b\u1EB1ng preflight (M\u1EB7c \u0111\u1ECBnh: "),n("code",null,"false"),t(")")],-1),rt=t("(optional) "),lt=n("code",null,"preflightCommitment",-1),ht=t(": "),pt=n("code",null,"string",-1),ut=t(" - C\u1EA5p \u0111\u1ED9 "),dt={href:"https://docs.solana.com/developing/clients/jsonrpc-api#configuring-state-commitment",target:"_blank",rel:"noopener noreferrer"},gt=t("Commitment"),kt=t(' \u0111\u01B0\u1EE3c d\xF9ng cho m\xF4 ph\u1ECFng preflight trong ng\xE2n h\xE0ng ch\u1ED7 tr\u1ED1ng (M\u1EB7c \u0111\u1ECBnh: "finalized").'),_t=n("li",null,[t("(optional) "),n("code",null,"encoding"),t(": "),n("code",null,"string"),t(' - M\xE3 ho\xE1 \u0111\u01B0\u1EE3c d\xF9ng cho d\u1EEF li\u1EC7u trong Transaction. Ho\u1EB7c "base58" (ch\u1EADm), ho\u1EB7c "base64". (M\u1EB7c \u0111\u1ECBnh: "base58").')],-1),bt=n("li",null,[t("(optional) "),n("code",null,"maxRetries"),t(": "),n("code",null,"usize"),t(" - S\u1ED1 l\u01B0\u1EE3ng t\u1ED1i \u0111a l\u1EA7n th\u1EED l\u1EA1i cho n\u1ED1t RPC g\u1EEDi Transaction \u0111\u1EBFn c\xE1c leader. N\u1EBFu tham s\u1ED1 n\xE0y kh\xF4ng \u0111\u01B0\u1EE3c \u0111\u1EC1 c\u1EADp, n\u1ED1t RPC s\u1EBD th\u1EED l\u1EA1i cho \u0111\u1EBFn khi Transaction th\xE0nh c\xF4ng ho\u1EB7c blockhash b\u1ECB h\u1EBFt h\u1EA1n.")],-1),mt=n("h4",{id:"response",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#response","aria-hidden":"true"},"#"),t(" Response")],-1),ft=n("code",null,"transaction id",-1),yt=t(": "),vt=n("code",null,"string",-1),Tt=t(" - Ch\u1EEF k\xFD \u0111\u1EA7u ti\xEAn \u0111\u01B0\u1EE3c nh\xFAng v\xE0o trong Transaction. Id c\u1EE7a transaction c\xF3 th\u1EC3 \u0111\u01B0\u1EE3c d\xF9ng v\u1EDBi "),wt={href:"https://docs.solana.com/developing/clients/jsonrpc-api#getsignaturestatuses",target:"_blank",rel:"noopener noreferrer"},xt=t("getSignatureStatuses"),Pt=t(" \u0111\u1EC3 c\u1EADp nh\u1EADt tr\u1EA1ng th\xE1i m\u1EDBi nh\u1EA5t c\u1EE7a Transaction."),Ct=n("h2",{id:"tuy-chinh-thuat-toan-lan-truyen",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#tuy-chinh-thuat-toan-lan-truyen","aria-hidden":"true"},"#"),t(" Tu\u1EF3 ch\u1EC9nh thu\u1EADt to\xE1n lan truy\u1EC1n")],-1),Rt=t("\u0110\u1EC3 ph\xE1t tri\u1EC3n thu\u1EADt to\xE1n lan truy\u1EC1n c\u1EE7a ri\xEAng m\xECnh, l\u1EADp tr\xECnh vi\xEAn c\u1EA7n hi\u1EC3u r\xF5 tham s\u1ED1 "),Lt=n("code",null,"maxRetries",-1),St=t(" trong "),Bt=n("code",null,"sendTransaction",-1),qt=t(". N\u1EBFu \u0111\u01B0\u1EE3c khai b\xE1o, "),Nt=n("code",null,"maxRetries",-1),Kt=t(" s\u1EBD ghi \u0111\xE8 l\xEAn gi\xE1 tr\u1ECB m\u1EB7c \u0111\u1ECBnh c\u1EE7a n\u1ED1t RPC v\xE0 cho ph\xE9p l\u1EADp tr\xECnh vi\xEAn \u0111i\u1EC1u khi\u1EC3n th\u1EE7 c\xF4ng qu\xE1 tr\xECnh th\u1EED l\u1EA1i trong "),Mt={href:"https://github.com/solana-labs/solana/blob/98707baec2385a4f7114d2167ef6dfb1406f954f/validator/src/main.rs#L1258-L1274",target:"_blank",rel:"noopener noreferrer"},jt=t("ph\u1EA1m vi gi\u1EDBi h\u1EA1n h\u1EE3p l\xFD"),Vt=t("."),Ht=t("M\u1ED9t c\xE0i \u0111\u1EB7t ph\u1ED5 bi\u1EBFn cho vi\u1EC7c th\u1EED l\u1EA1i th\u1EE7 c\xF4ng l\xE0 t\u1EA1m l\u01B0u "),Ut=n("code",null,"lastValidBlockHeight",-1),At=t(" \u0111\u01B0\u1EE3c truy v\u1EA5n t\u1EEB "),Dt={href:"https://docs.solana.com/developing/clients/jsonrpc-api#getlatestblockhash",target:"_blank",rel:"noopener noreferrer"},Ft=t("getLatestBlockhash"),Et=t(". Sau khi l\u01B0u l\u1EA1i, m\u1ED9t \u1EE9ng d\u1EE5ng c\xF3 th\u1EC3 "),Jt={href:"https://docs.solana.com/developing/clients/jsonrpc-api#getblockheight",target:"_blank",rel:"noopener noreferrer"},Ot=t("theo d\xF5i blockheight c\u1EE7a m\u1EA1ng l\u01B0\u1EDBi"),It=t(" v\xE0 lan truy\u1EC1n Transaction th\u1EE7 c\xF4ng th\xF4ng qua thu\u1EADt to\xE1n tu\u1EF3 ch\u1EC9nh. C\xF3 m\u1ED9t v\xE0i \u1EE9ng d\u1EE5ng s\u1EED d\u1EE5ng gi\u1EA3i thu\u1EADt "),zt={href:"https://en.wikipedia.org/wiki/Exponential_backoff",target:"_blank",rel:"noopener noreferrer"},Gt=t("exponential backoff"),Xt=t(", th\xEC m\u1ED9t v\xE0i \u1EE9ng d\u1EE5ng kh\xE1c v\xED nh\u01B0 "),Wt={href:"https://www.mango.markets/",target:"_blank",rel:"noopener noreferrer"},Yt=t("Mango"),Qt=t(" ch\u1ECDn "),Zt={href:"https://github.com/blockworks-foundation/mango-ui/blob/b6abfc6c13b71fc17ebbe766f50b8215fa1ec54f/src/utils/send.tsx#L713",target:"_blank",rel:"noopener noreferrer"},$t=t("li\xEAn t\u1EE5c t\xE1i g\u1EEDi"),ns=t(" Transaction v\u1EDBi m\u1ED9t kho\u1EA3ng th\u1EDDi gian l\u1EB7p \u0111\u1ECBnh tr\u01B0\u1EDBc cho \u0111\u1EBFn khi qu\xE1 h\u1EA1n."),ts=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),t(),n("span",{class:"token punctuation"},"{"),t(` Keypair`),n("span",{class:"token punctuation"},","),t(` Connection`),n("span",{class:"token punctuation"},","),t(` `),n("span",{class:"token constant"},"LAMPORTS_PER_SOL"),n("span",{class:"token punctuation"},","),t(` @@ -59,4 +59,4 @@ import{_ as h,r as o,o as p,c as u,a as n,b as s,w as c,F as d,d as t,e}from"./a `),n("span",{class:"token keyword"},"await"),t(),n("span",{class:"token function"},"sleep"),n("span",{class:"token punctuation"},"("),n("span",{class:"token number"},"500"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),t(` blockheight `),n("span",{class:"token operator"},"="),t(),n("span",{class:"token keyword"},"await"),t(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"getBlockHeight"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),t(` `),n("span",{class:"token punctuation"},"}"),t(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),as=t("Khi g\u1ECDi "),os=n("code",null,"getLatestBlockhash",-1),cs=t(", \u1EE9ng d\u1EE5ng n\xEAn ch\u1EC9 r\xF5 m\u1EE9c "),es={href:"https://docs.solana.com/developing/clients/jsonrpc-api#configuring-state-commitment",target:"_blank",rel:"noopener noreferrer"},is=t("commitment"),rs=t(" mong mu\u1ED1n. B\u1EB1ng c\xE1ch \u0111\u1EB7t commitment l\xE0 "),ls=n("code",null,"confirmed",-1),hs=t(" (\u0111\xE3 \u0111\u01B0\u1EE3c b\u1ECF phi\u1EBFu ch\u1ECDn) ho\u1EB7c "),ps=n("code",null,"finalized",-1),us=t(" (~30 block sau khi "),ds=n("code",null,"confirmed",-1),gs=t("), \u1EE9ng d\u1EE5ng c\xF3 th\u1EC3 tr\xE1nh \u0111\u01B0\u1EE3c tr\u01B0\u1EDDng h\u1EE3p \u0111\u1ECDc blockhash t\u1EEB m\u1ED9t nh\xE1nh r\u1EBD thi\u1EC3u s\u1ED1."),ks=t("N\u1EBFu m\u1ED9t \u1EE9ng d\u1EE5ng truy c\u1EADp v\xE0o nh\u1EEFng n\u1ED1t RPC th\xF4ng qua m\u1ED9t m\xE1y ch\u1EE7 c\xE2n b\u1EB1ng t\u1EA3i, n\xF3 c\xF3 l\u1EF1a ch\u1ECDn c\xE1c n\u1ED1t c\u1EE5 th\u1EC3 \u0111\u1EC3 chia nh\u1ECF t\u1EA3i l\u01B0\u1EE3ng. C\xE1c n\u1ED1t RPC \u0111\xE1p \u1EE9ng c\xE1c y\xEAu c\u1EA7u thi\xEAn v\u1EC1 d\u1EEF li\u1EC7u nh\u01B0 l\xE0 "),_s=t("getProgramAccounts"),bs=t(" c\xF3 th\u1EC3 d\u1EC5 b\u1ECB qu\xE1 t\u1EA3i v\xE0 b\u1ECB \u0111\u1ED3ng b\u1ED9 ch\u1EADm, c\u0169ng nh\u01B0 l\xE0 kh\xF4ng th\xEDch h\u1EE3p cho vi\u1EC7c \u0111i\u1EC1u h\u01B0\u1EDBng Transaction. V\u1EDBi nh\u1EEFng \u1EE9ng d\u1EE5ng \u0111\xF2i h\u1ECFi th\u1EDDi gian \u0111\xE1p \u1EE9ng Transaction nhanh, n\xEAn c\xF3 m\u1ED9t m\xE1y ch\u1EE7 chuy\xEAn \u0111\u1EC3 x\u1EED l\xFD duy nh\u1EA5t cho "),ms=n("code",null,"sendTransaction",-1),fs=t("."),ys=e('

    C\xE2n nh\u1EAFc khi b\u1ECF qua Preflight

    M\u1EB7c \u0111\u1ECBnh, sendTransaction s\u1EBD th\u1EF1c hi\u1EC7n preflight ki\u1EC3m tra 3 b\u01B0\u1EDBc tr\u01B0\u1EDBc khi g\u1EEDi Transaction \u0111\xF3 \u0111i. C\u1EE5 th\u1EC3, sendTransaction s\u1EBD:

    • X\xE1c nh\u1EADn t\u1EA5t c\u1EA3 c\xE1c ch\u1EEF k\xFD l\xE0 h\u1EE3p l\u1EC7
    • Ki\u1EC3m tra blockhash \u0111\u01B0\u1EE3c tham chi\u1EBFu c\xF3 n\u1EB1m trong ph\u1EA1m vi 150 block kh\xF4ng
    • Ch\u1EA1y gi\u1EA3i l\u1EADp transaction trong ng\xE2n h\xE0ng ch\u1ED7 tr\u1ED1ng \u0111\u01B0\u1EE3c \u0111\u1ECBnh ngh\u0129a b\u1EDFi preflightCommitment.

    N\u1EBFu m\u1ED9t trong 3 b\u01B0\u1EDBc tr\xEAn b\u1ECB l\u1ED7i, sendTransaction s\u1EBD \u0111\u1EA9y ra l\u1ED7i tr\u01B0\u1EDBc khi g\u1EEDi transaction \u0111i. Ki\u1EC3m tra preflight s\u1EBD kh\xF4ng \u0111\u1EA3m b\u1EA3o c\xE1c tr\u01B0\u1EDDng h\u1EE3p m\u1EA5t transaction ho\u1EB7c l\xE0 cho ph\xE9p ng\u01B0\u1EDDi d\xF9ng x\u1EED l\xFD l\u1ED7i. Thay v\xE0o \u0111\xF3 n\xF3 \u0111\u1EA3m b\u1EA3o c\xE1c l\u1ED7i c\u01A1 b\u1EA3n s\u1EBD \u0111\u01B0\u1EE3c ki\u1EC3m tra tr\u01B0\u1EDBc v\xE0 khuy\u1EBFn kh\xEDch c\xE1c l\u1EADp tr\xECnh vi\xEAn n\xEAn gi\u1EEF n\xF3 l\u1EA1i b\u1EB1ng c\xE1ch g\xE1n false cho skipPreflight.

    Khi n\xE0o n\xEAn t\xE1i k\xFD transaction

    D\xF9 cho t\u1EA5t c\u1EA3 n\u1ED7 l\u1EF1c g\u1EEDi l\u1EA1i, th\xEC v\u1EABn c\xF3 m\u1ED9t x\xE1c su\u1EA5t m\xE0 ng\u01B0\u1EDDi d\xF9ng b\u1ECB y\xEAu c\u1EA7u k\xFD l\u1EA1i transaction \u0111\xF3. Tr\u01B0\u1EDBc khi t\xE1i k\xFD b\u1EA5t k\u1EF3 m\u1ED9t transaction n\xE0o, b\u1EA1n c\u1EA7n \u0111\u1EA3m b\u1EA3o r\u1EB1ng transaction tr\u01B0\u1EDBc \u0111\xF3 \u0111\xE3 h\u1EBFt h\u1EA1n \u0111\u1ED1i v\u1EDBi blockhash. N\u1EBFu transaction v\u1EABn c\xF2n hi\u1EC7u l\u1EF1c, c\u1EA3 hai transaction c\xF3 th\u1EC3 s\u1EBD \u0111\u01B0\u1EE3c x\u1EED l\xFD b\u1EDFi m\u1EA1ng l\u01B0\u1EDBi. \u0110i\u1EC1u t\u01B0\u01A1ng t\u1EF1 c\u0169ng c\xF3 th\u1EC3 x\u1EA3y ra trong tr\u01B0\u1EDDng h\u1EE3p ng\u01B0\u1EDDi d\xF9ng kh\xF4ng may g\u1EEDi 2 l\u1EA7n v\u1EDBi 2 transaction gi\u1ED1ng nhau.

    ',6),vs=t("Trong Solana, m\u1ED9t transaction \u0111\u01B0\u1EE3c xem l\xE0 \u0111\xE3 v\xF4 hi\u1EC7u ho\xE1 v\xE0 an to\xE0n khi gi\xE1 tr\u1ECB blockhash \u0111\u01B0\u1EE3c tham chi\u1EBFu \u0111\xE3 qu\xE1 h\u1EA1n so v\u1EDBi "),Ts=n("code",null,"lastValidBlock",-1),ws=t(" tr\u1EA3 v\u1EC1 t\u1EEB h\xE0m "),xs=n("code",null,"getRecentBlockhash",-1),Ps=t(". L\u1EADp tr\xECnh vi\xEAn c\xF3 th\u1EC3 ki\u1EC3m tra nhanh ch\xF3ng gi\xE1 tr\u1ECB blockhash th\xF4ng qua h\xE0m "),Cs={href:"https://docs.solana.com/developing/clients/jsonrpc-api#isblockhashvalid",target:"_blank",rel:"noopener noreferrer"},Rs=t("isBlockhashValid"),Ls=t(". M\u1ED9t khi blockhash \u0111\xE3 qu\xE1 h\u1EA1n, ng\u01B0\u1EDDi d\xF9ng c\xF3 th\u1EC3 t\xE1i k\xFD tr\xEAn gi\xE1 tr\u1ECB blockhash m\u1EDBi v\xE0 h\u1EE3p l\u1EC7."),Ss=n("h2",{id:"loi-cam-on",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#loi-cam-on","aria-hidden":"true"},"#"),t(" L\u1EDDi c\u1EA3m \u01A1n")],-1),Bs=t("R\u1EA5t c\u1EA3m \u01A1n Trent Nelson, "),qs={href:"https://twitter.com/jacobvcreech",target:"_blank",rel:"noopener noreferrer"},Ns=t("Jacob Creech"),Ks=t(", White Tiger, Le Yafo, "),Ms={href:"https://twitter.com/buffalu__",target:"_blank",rel:"noopener noreferrer"},js=t("Buffalu"),Hs=t(", v\xE0 "),Vs={href:"https://twitter.com/jito_labs",target:"_blank",rel:"noopener noreferrer"},Us=t("Jito Labs"),As=t(" v\xEC \u0111\xE3 \u0111\u1ECDc v\xE0 g\xF3p \xFD cho b\xE0i vi\u1EBFt.");function Ds(Fs,Es){const a=o("ExternalLinkIcon"),i=o("SolanaCodeGroupItem"),r=o("SolanaCodeGroup"),l=o("RouterLink");return p(),u(d,null,[y,n("p",null,[v,n("a",T,[w,s(a)]),x]),P,n("ol",null,[n("li",null,[C,n("a",R,[L,s(a)]),S]),n("li",null,[B,n("a",q,[N,s(a)])])]),K,M,j,n("p",null,[H,V,U,n("a",A,[D,s(a)]),F]),n("p",null,[E,n("a",J,[O,s(a)]),I,n("a",z,[G,s(a)]),X,n("a",W,[Y,s(a)]),Q]),n("p",null,[Z,n("a",$,[nn,s(a)]),tn]),sn,n("ul",null,[n("li",null,[n("a",an,[on,s(a)])]),n("li",null,[n("a",cn,[en,s(a)])]),n("li",null,[n("a",rn,[ln,s(a)])]),n("li",null,[n("a",hn,[pn,s(a)])]),n("li",null,[n("a",un,[dn,s(a)])])]),gn,kn,n("ul",null,[n("li",null,[n("a",_n,[bn,s(a)]),mn]),n("li",null,[n("a",fn,[yn,s(a)]),vn]),n("li",null,[n("a",Tn,[wn,s(a)]),xn])]),n("p",null,[Pn,n("a",Cn,[Rn,s(a)]),Ln]),Sn,Bn,qn,n("p",null,[Nn,n("a",Kn,[Mn,s(a)]),jn,Hn,Vn,n("a",Un,[An,s(a)]),Dn,Fn,En]),n("p",null,[Jn,n("a",On,[In,s(a)]),zn,n("a",Gn,[Xn,s(a)]),Wn,Yn,Qn]),Zn,n("div",$n,[nt,tt,n("ul",null,[st,n("li",null,[at,ot,ct,et,n("ul",null,[it,n("li",null,[rt,lt,ht,pt,ut,n("a",dt,[gt,s(a)]),kt]),_t,bt])])]),mt,n("ul",null,[n("li",null,[ft,yt,vt,Tt,n("a",wt,[xt,s(a)]),Pt])])]),Ct,n("p",null,[Rt,Lt,St,Bt,qt,Nt,Kt,n("a",Mt,[jt,s(a)]),Ht]),n("p",null,[Vt,Ut,At,n("a",Dt,[Ft,s(a)]),Et,n("a",Jt,[Ot,s(a)]),It,n("a",zt,[Gt,s(a)]),Xt,n("a",Wt,[Yt,s(a)]),Qt,n("a",Zt,[$t,s(a)]),ns]),s(r,null,{default:c(()=>[s(i,{title:"TS",active:""},{default:c(()=>[ts]),preview:c(()=>[ss]),_:1})]),_:1}),n("p",null,[as,os,cs,n("a",es,[is,s(a)]),rs,ls,hs,ps,us,ds,gs]),n("p",null,[ks,s(l,{to:"/vi/guides/get-program-accounts.html"},{default:c(()=>[_s]),_:1}),bs,ms,fs]),ys,n("p",null,[vs,Ts,ws,xs,Ps,n("a",Cs,[Rs,s(a)]),Ls]),Ss,n("p",null,[Bs,n("a",qs,[Ns,s(a)]),Ks,n("a",Ms,[js,s(a)]),Hs,n("a",Vs,[Us,s(a)]),As])],64)}var Os=h(f,[["render",Ds]]);export{Os as default}; +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br")])],-1),as=t("Khi g\u1ECDi "),os=n("code",null,"getLatestBlockhash",-1),cs=t(", \u1EE9ng d\u1EE5ng n\xEAn ch\u1EC9 r\xF5 m\u1EE9c "),es={href:"https://docs.solana.com/developing/clients/jsonrpc-api#configuring-state-commitment",target:"_blank",rel:"noopener noreferrer"},is=t("commitment"),rs=t(" mong mu\u1ED1n. B\u1EB1ng c\xE1ch \u0111\u1EB7t commitment l\xE0 "),ls=n("code",null,"confirmed",-1),hs=t(" (\u0111\xE3 \u0111\u01B0\u1EE3c b\u1ECF phi\u1EBFu ch\u1ECDn) ho\u1EB7c "),ps=n("code",null,"finalized",-1),us=t(" (~30 block sau khi "),ds=n("code",null,"confirmed",-1),gs=t("), \u1EE9ng d\u1EE5ng c\xF3 th\u1EC3 tr\xE1nh \u0111\u01B0\u1EE3c tr\u01B0\u1EDDng h\u1EE3p \u0111\u1ECDc blockhash t\u1EEB m\u1ED9t nh\xE1nh r\u1EBD thi\u1EC3u s\u1ED1."),ks=t("N\u1EBFu m\u1ED9t \u1EE9ng d\u1EE5ng truy c\u1EADp v\xE0o nh\u1EEFng n\u1ED1t RPC th\xF4ng qua m\u1ED9t m\xE1y ch\u1EE7 c\xE2n b\u1EB1ng t\u1EA3i, n\xF3 c\xF3 l\u1EF1a ch\u1ECDn c\xE1c n\u1ED1t c\u1EE5 th\u1EC3 \u0111\u1EC3 chia nh\u1ECF t\u1EA3i l\u01B0\u1EE3ng. C\xE1c n\u1ED1t RPC \u0111\xE1p \u1EE9ng c\xE1c y\xEAu c\u1EA7u thi\xEAn v\u1EC1 d\u1EEF li\u1EC7u nh\u01B0 l\xE0 "),_s=t("getProgramAccounts"),bs=t(" c\xF3 th\u1EC3 d\u1EC5 b\u1ECB qu\xE1 t\u1EA3i v\xE0 b\u1ECB \u0111\u1ED3ng b\u1ED9 ch\u1EADm, c\u0169ng nh\u01B0 l\xE0 kh\xF4ng th\xEDch h\u1EE3p cho vi\u1EC7c \u0111i\u1EC1u h\u01B0\u1EDBng Transaction. V\u1EDBi nh\u1EEFng \u1EE9ng d\u1EE5ng \u0111\xF2i h\u1ECFi th\u1EDDi gian \u0111\xE1p \u1EE9ng Transaction nhanh, n\xEAn c\xF3 m\u1ED9t m\xE1y ch\u1EE7 chuy\xEAn \u0111\u1EC3 x\u1EED l\xFD duy nh\u1EA5t cho "),ms=n("code",null,"sendTransaction",-1),fs=t("."),ys=e('

    C\xE2n nh\u1EAFc khi b\u1ECF qua Preflight

    M\u1EB7c \u0111\u1ECBnh, sendTransaction s\u1EBD th\u1EF1c hi\u1EC7n preflight ki\u1EC3m tra 3 b\u01B0\u1EDBc tr\u01B0\u1EDBc khi g\u1EEDi Transaction \u0111\xF3 \u0111i. C\u1EE5 th\u1EC3, sendTransaction s\u1EBD:

    • X\xE1c nh\u1EADn t\u1EA5t c\u1EA3 c\xE1c ch\u1EEF k\xFD l\xE0 h\u1EE3p l\u1EC7
    • Ki\u1EC3m tra blockhash \u0111\u01B0\u1EE3c tham chi\u1EBFu c\xF3 n\u1EB1m trong ph\u1EA1m vi 150 block kh\xF4ng
    • Ch\u1EA1y gi\u1EA3i l\u1EADp transaction trong ng\xE2n h\xE0ng ch\u1ED7 tr\u1ED1ng \u0111\u01B0\u1EE3c \u0111\u1ECBnh ngh\u0129a b\u1EDFi preflightCommitment.

    N\u1EBFu m\u1ED9t trong 3 b\u01B0\u1EDBc tr\xEAn b\u1ECB l\u1ED7i, sendTransaction s\u1EBD \u0111\u1EA9y ra l\u1ED7i tr\u01B0\u1EDBc khi g\u1EEDi transaction \u0111i. Ki\u1EC3m tra preflight s\u1EBD kh\xF4ng \u0111\u1EA3m b\u1EA3o c\xE1c tr\u01B0\u1EDDng h\u1EE3p m\u1EA5t transaction ho\u1EB7c l\xE0 cho ph\xE9p ng\u01B0\u1EDDi d\xF9ng x\u1EED l\xFD l\u1ED7i. Thay v\xE0o \u0111\xF3 n\xF3 \u0111\u1EA3m b\u1EA3o c\xE1c l\u1ED7i c\u01A1 b\u1EA3n s\u1EBD \u0111\u01B0\u1EE3c ki\u1EC3m tra tr\u01B0\u1EDBc v\xE0 khuy\u1EBFn kh\xEDch c\xE1c l\u1EADp tr\xECnh vi\xEAn n\xEAn gi\u1EEF n\xF3 l\u1EA1i b\u1EB1ng c\xE1ch g\xE1n false cho skipPreflight.

    Khi n\xE0o n\xEAn t\xE1i k\xFD transaction

    D\xF9 cho t\u1EA5t c\u1EA3 n\u1ED7 l\u1EF1c g\u1EEDi l\u1EA1i, th\xEC v\u1EABn c\xF3 m\u1ED9t x\xE1c su\u1EA5t m\xE0 ng\u01B0\u1EDDi d\xF9ng b\u1ECB y\xEAu c\u1EA7u k\xFD l\u1EA1i transaction \u0111\xF3. Tr\u01B0\u1EDBc khi t\xE1i k\xFD b\u1EA5t k\u1EF3 m\u1ED9t transaction n\xE0o, b\u1EA1n c\u1EA7n \u0111\u1EA3m b\u1EA3o r\u1EB1ng transaction tr\u01B0\u1EDBc \u0111\xF3 \u0111\xE3 h\u1EBFt h\u1EA1n \u0111\u1ED1i v\u1EDBi blockhash. N\u1EBFu transaction v\u1EABn c\xF2n hi\u1EC7u l\u1EF1c, c\u1EA3 hai transaction c\xF3 th\u1EC3 s\u1EBD \u0111\u01B0\u1EE3c x\u1EED l\xFD b\u1EDFi m\u1EA1ng l\u01B0\u1EDBi. \u0110i\u1EC1u t\u01B0\u01A1ng t\u1EF1 c\u0169ng c\xF3 th\u1EC3 x\u1EA3y ra trong tr\u01B0\u1EDDng h\u1EE3p ng\u01B0\u1EDDi d\xF9ng kh\xF4ng may g\u1EEDi 2 l\u1EA7n v\u1EDBi 2 transaction gi\u1ED1ng nhau.

    ',6),vs=t("Trong Solana, m\u1ED9t transaction \u0111\u01B0\u1EE3c xem l\xE0 \u0111\xE3 v\xF4 hi\u1EC7u ho\xE1 v\xE0 an to\xE0n khi gi\xE1 tr\u1ECB blockhash \u0111\u01B0\u1EE3c tham chi\u1EBFu \u0111\xE3 qu\xE1 h\u1EA1n so v\u1EDBi "),Ts=n("code",null,"lastValidBlock",-1),ws=t(" tr\u1EA3 v\u1EC1 t\u1EEB h\xE0m "),xs=n("code",null,"getRecentBlockhash",-1),Ps=t(". L\u1EADp tr\xECnh vi\xEAn c\xF3 th\u1EC3 ki\u1EC3m tra nhanh ch\xF3ng gi\xE1 tr\u1ECB blockhash th\xF4ng qua h\xE0m "),Cs={href:"https://docs.solana.com/developing/clients/jsonrpc-api#isblockhashvalid",target:"_blank",rel:"noopener noreferrer"},Rs=t("isBlockhashValid"),Ls=t(". M\u1ED9t khi blockhash \u0111\xE3 qu\xE1 h\u1EA1n, ng\u01B0\u1EDDi d\xF9ng c\xF3 th\u1EC3 t\xE1i k\xFD tr\xEAn gi\xE1 tr\u1ECB blockhash m\u1EDBi v\xE0 h\u1EE3p l\u1EC7."),Ss=n("h2",{id:"loi-cam-on",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#loi-cam-on","aria-hidden":"true"},"#"),t(" L\u1EDDi c\u1EA3m \u01A1n")],-1),Bs=t("R\u1EA5t c\u1EA3m \u01A1n Trent Nelson, "),qs={href:"https://twitter.com/jacobvcreech",target:"_blank",rel:"noopener noreferrer"},Ns=t("Jacob Creech"),Ks=t(", White Tiger, Le Yafo, "),Ms={href:"https://twitter.com/buffalu__",target:"_blank",rel:"noopener noreferrer"},js=t("Buffalu"),Vs=t(", v\xE0 "),Hs={href:"https://twitter.com/jito_labs",target:"_blank",rel:"noopener noreferrer"},Us=t("Jito Labs"),As=t(" v\xEC \u0111\xE3 \u0111\u1ECDc v\xE0 g\xF3p \xFD cho b\xE0i vi\u1EBFt.");function Ds(Fs,Es){const a=o("ExternalLinkIcon"),i=o("SolanaCodeGroupItem"),r=o("SolanaCodeGroup"),l=o("RouterLink");return p(),u(d,null,[y,n("p",null,[v,n("a",T,[w,s(a)]),x]),P,n("ol",null,[n("li",null,[C,n("a",R,[L,s(a)]),S]),n("li",null,[B,n("a",q,[N,s(a)])])]),K,M,j,n("p",null,[V,H,U,n("a",A,[D,s(a)]),F]),n("p",null,[E,n("a",J,[O,s(a)]),I,n("a",z,[G,s(a)]),X,n("a",W,[Y,s(a)]),Q]),n("p",null,[Z,n("a",$,[nn,s(a)]),tn]),sn,n("ul",null,[n("li",null,[n("a",an,[on,s(a)])]),n("li",null,[n("a",cn,[en,s(a)])]),n("li",null,[n("a",rn,[ln,s(a)])]),n("li",null,[n("a",hn,[pn,s(a)])]),n("li",null,[n("a",un,[dn,s(a)])])]),gn,kn,n("ul",null,[n("li",null,[n("a",_n,[bn,s(a)]),mn]),n("li",null,[n("a",fn,[yn,s(a)]),vn]),n("li",null,[n("a",Tn,[wn,s(a)]),xn])]),n("p",null,[Pn,n("a",Cn,[Rn,s(a)]),Ln]),Sn,Bn,qn,n("p",null,[Nn,n("a",Kn,[Mn,s(a)]),jn,Vn,Hn,n("a",Un,[An,s(a)]),Dn,Fn,En]),n("p",null,[Jn,n("a",On,[In,s(a)]),zn,n("a",Gn,[Xn,s(a)]),Wn,Yn,Qn]),Zn,n("div",$n,[nt,tt,n("ul",null,[st,n("li",null,[at,ot,ct,et,n("ul",null,[it,n("li",null,[rt,lt,ht,pt,ut,n("a",dt,[gt,s(a)]),kt]),_t,bt])])]),mt,n("ul",null,[n("li",null,[ft,yt,vt,Tt,n("a",wt,[xt,s(a)]),Pt])])]),Ct,n("p",null,[Rt,Lt,St,Bt,qt,Nt,Kt,n("a",Mt,[jt,s(a)]),Vt]),n("p",null,[Ht,Ut,At,n("a",Dt,[Ft,s(a)]),Et,n("a",Jt,[Ot,s(a)]),It,n("a",zt,[Gt,s(a)]),Xt,n("a",Wt,[Yt,s(a)]),Qt,n("a",Zt,[$t,s(a)]),ns]),s(r,null,{default:c(()=>[s(i,{title:"TS",active:""},{default:c(()=>[ts]),preview:c(()=>[ss]),_:1})]),_:1}),n("p",null,[as,os,cs,n("a",es,[is,s(a)]),rs,ls,hs,ps,us,ds,gs]),n("p",null,[ks,s(l,{to:"/vi/guides/get-program-accounts.html"},{default:c(()=>[_s]),_:1}),bs,ms,fs]),ys,n("p",null,[vs,Ts,ws,xs,Ps,n("a",Cs,[Rs,s(a)]),Ls]),Ss,n("p",null,[Bs,n("a",qs,[Ns,s(a)]),Ks,n("a",Ms,[js,s(a)]),Vs,n("a",Hs,[Us,s(a)]),As])],64)}var Os=h(f,[["render",Ds]]);export{Os as default}; diff --git a/docs/.vuepress/dist/assets/retrying-transactions.html.fcb1cee2.js b/docs/.vuepress/dist/assets/retrying-transactions.html.a0358ba8.js similarity index 74% rename from docs/.vuepress/dist/assets/retrying-transactions.html.fcb1cee2.js rename to docs/.vuepress/dist/assets/retrying-transactions.html.a0358ba8.js index b557e10c1..433e09464 100644 --- a/docs/.vuepress/dist/assets/retrying-transactions.html.fcb1cee2.js +++ b/docs/.vuepress/dist/assets/retrying-transactions.html.a0358ba8.js @@ -1 +1 @@ -const n={key:"v-0f1acff4",path:"/vi/guides/retrying-transactions.html",title:"Th\u1EED l\u1EA1i Transaction",lang:"vi-VN",frontmatter:{title:"Th\u1EED l\u1EA1i Transaction",head:[["meta",{name:"title",content:"To\xE0n t\u1EADp Solana | Th\u1EED l\u1EA1i Transaction"}],["meta",{name:"og:title",content:"To\xE0n t\u1EADp Solana | Th\u1EED l\u1EA1i Transaction"}],["meta",{name:"description",content:"Thi tho\u1EA3ng, m\u1ED9t Transaction h\u1EE3p l\u1EC7 v\u1EABn c\xF3 th\u1EC3 b\u1ECB h\u1ECFng tr\u01B0\u1EDBc khi \u0111\u01B0\u1EE3c ghi nh\u1EADn v\xE0o block. \u0110\u1EC3 gi\u1EA3i quy\u1EBFt v\u1EA5n \u0111\u1EC1 \u0111\xF3, l\u1EADp tr\xECnh vi\xEAn ph\u1EA3i ph\xE1t tri\u1EC3n c\xE1c c\u01A1 ch\u1EBF lan truy\u1EC1n tu\u1EF3 ch\u1EC9nh. Chi ti\u1EBFt v\u1EC1 Th\u1EED l\u1EA1i Transaction v\xE0 c\xE1c kh\xE1i ni\u1EC7m c\u01A1n b\u1EA3n kh\xE1c trong To\xE0n t\u1EADp Solana."}],["meta",{name:"og:description",content:"Thi tho\u1EA3ng, m\u1ED9t Transaction h\u1EE3p l\u1EC7 v\u1EABn c\xF3 th\u1EC3 b\u1ECB h\u1ECFng tr\u01B0\u1EDBc khi \u0111\u01B0\u1EE3c ghi nh\u1EADn v\xE0o block. \u0110\u1EC3 gi\u1EA3i quy\u1EBFt v\u1EA5n \u0111\u1EC1 \u0111\xF3, l\u1EADp tr\xECnh vi\xEAn ph\u1EA3i ph\xE1t tri\u1EC3n c\xE1c c\u01A1 ch\u1EBF lan truy\u1EC1n tu\u1EF3 ch\u1EC9nh. Chi ti\u1EBFt v\u1EC1 Th\u1EED l\u1EA1i Transaction v\xE0 c\xE1c kh\xE1i ni\u1EC7m c\u01A1n b\u1EA3n kh\xE1c trong To\xE0n t\u1EADp Solana."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"C\xF3 th\u1EC3 b\u1EA1n ch\u01B0a bi\u1EBFt",slug:"co-the-ban-chua-biet",children:[]},{level:2,title:"H\xE0nh tr\xECnh c\u1EE7a m\u1ED9t Transaction",slug:"hanh-trinh-cua-mot-transaction",children:[{level:3,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 ng\u01B0\u1EDDi d\xF9ng g\u1EEDi Transactions",slug:"lam-the-nao-\u0111e-nguoi-dung-gui-transactions",children:[]},{level:3,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 c\xE1c n\u1ED1t RPC lan truy\u1EC1n Transaction",slug:"lam-the-nao-\u0111e-cac-not-rpc-lan-truyen-transaction",children:[]}]},{level:2,title:"Khi n\xE0o c\xE1c Transaction b\u1ECB hu\u1EF7",slug:"khi-nao-cac-transaction-bi-huy",children:[{level:3,title:"Tr\u01B0\u1EDBc khi Transaction \u0111\u01B0\u1EE3c x\u1EED l\xFD",slug:"truoc-khi-transaction-\u0111uoc-xu-ly",children:[]},{level:3,title:"Sau khi Transaction \u0111\u01B0\u1EE3c x\u1EED l\xFD nh\u01B0nh tr\u01B0\u1EDBc khi \u0111\u01B0\u1EE3c ghi v\xE0o block",slug:"sau-khi-transaction-\u0111uoc-xu-ly-nhunh-truoc-khi-\u0111uoc-ghi-vao-block",children:[]}]},{level:2,title:"X\u1EED tr\xED v\u1EDBi Transaction b\u1ECB hu\u1EF7",slug:"xu-tri-voi-transaction-bi-huy",children:[{level:3,title:"Nghi\xEAn c\u1EE9u sendTransaction",slug:"nghien-cuu-sendtransaction",children:[]}]},{level:2,title:"Tu\u1EF3 ch\u1EC9nh thu\u1EADt to\xE1n lan truy\u1EC1n",slug:"tuy-chinh-thuat-toan-lan-truyen",children:[{level:3,title:"C\xE2n nh\u1EAFc khi b\u1ECF qua Preflight",slug:"can-nhac-khi-bo-qua-preflight",children:[]},{level:3,title:"Khi n\xE0o n\xEAn t\xE1i k\xFD transaction",slug:"khi-nao-nen-tai-ky-transaction",children:[]}]},{level:2,title:"L\u1EDDi c\u1EA3m \u01A1n",slug:"loi-cam-on",children:[]}],git:{updatedTime:1658783638e3},filePathRelative:"vi/guides/retrying-transactions.md"};export{n as data}; +const n={key:"v-0f1acff4",path:"/vi/guides/retrying-transactions.html",title:"Th\u1EED l\u1EA1i Transaction",lang:"vi-VN",frontmatter:{title:"Th\u1EED l\u1EA1i Transaction",head:[["meta",{name:"title",content:"To\xE0n t\u1EADp Solana | Th\u1EED l\u1EA1i Transaction"}],["meta",{name:"og:title",content:"To\xE0n t\u1EADp Solana | Th\u1EED l\u1EA1i Transaction"}],["meta",{name:"description",content:"Thi tho\u1EA3ng, m\u1ED9t Transaction h\u1EE3p l\u1EC7 v\u1EABn c\xF3 th\u1EC3 b\u1ECB h\u1ECFng tr\u01B0\u1EDBc khi \u0111\u01B0\u1EE3c ghi nh\u1EADn v\xE0o block. \u0110\u1EC3 gi\u1EA3i quy\u1EBFt v\u1EA5n \u0111\u1EC1 \u0111\xF3, l\u1EADp tr\xECnh vi\xEAn ph\u1EA3i ph\xE1t tri\u1EC3n c\xE1c c\u01A1 ch\u1EBF lan truy\u1EC1n tu\u1EF3 ch\u1EC9nh. Chi ti\u1EBFt v\u1EC1 Th\u1EED l\u1EA1i Transaction v\xE0 c\xE1c kh\xE1i ni\u1EC7m c\u01A1n b\u1EA3n kh\xE1c trong To\xE0n t\u1EADp Solana."}],["meta",{name:"og:description",content:"Thi tho\u1EA3ng, m\u1ED9t Transaction h\u1EE3p l\u1EC7 v\u1EABn c\xF3 th\u1EC3 b\u1ECB h\u1ECFng tr\u01B0\u1EDBc khi \u0111\u01B0\u1EE3c ghi nh\u1EADn v\xE0o block. \u0110\u1EC3 gi\u1EA3i quy\u1EBFt v\u1EA5n \u0111\u1EC1 \u0111\xF3, l\u1EADp tr\xECnh vi\xEAn ph\u1EA3i ph\xE1t tri\u1EC3n c\xE1c c\u01A1 ch\u1EBF lan truy\u1EC1n tu\u1EF3 ch\u1EC9nh. Chi ti\u1EBFt v\u1EC1 Th\u1EED l\u1EA1i Transaction v\xE0 c\xE1c kh\xE1i ni\u1EC7m c\u01A1n b\u1EA3n kh\xE1c trong To\xE0n t\u1EADp Solana."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"C\xF3 th\u1EC3 b\u1EA1n ch\u01B0a bi\u1EBFt",slug:"co-the-ban-chua-biet",children:[]},{level:2,title:"H\xE0nh tr\xECnh c\u1EE7a m\u1ED9t Transaction",slug:"hanh-trinh-cua-mot-transaction",children:[{level:3,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 ng\u01B0\u1EDDi d\xF9ng g\u1EEDi Transactions",slug:"lam-the-nao-\u0111e-nguoi-dung-gui-transactions",children:[]},{level:3,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 c\xE1c n\u1ED1t RPC lan truy\u1EC1n Transaction",slug:"lam-the-nao-\u0111e-cac-not-rpc-lan-truyen-transaction",children:[]}]},{level:2,title:"Khi n\xE0o c\xE1c Transaction b\u1ECB hu\u1EF7",slug:"khi-nao-cac-transaction-bi-huy",children:[{level:3,title:"Tr\u01B0\u1EDBc khi Transaction \u0111\u01B0\u1EE3c x\u1EED l\xFD",slug:"truoc-khi-transaction-\u0111uoc-xu-ly",children:[]},{level:3,title:"Sau khi Transaction \u0111\u01B0\u1EE3c x\u1EED l\xFD v\xE0 tr\u01B0\u1EDBc khi \u0111\u01B0\u1EE3c ghi v\xE0o block",slug:"sau-khi-transaction-\u0111uoc-xu-ly-va-truoc-khi-\u0111uoc-ghi-vao-block",children:[]}]},{level:2,title:"X\u1EED tr\xED v\u1EDBi Transaction b\u1ECB hu\u1EF7",slug:"xu-tri-voi-transaction-bi-huy",children:[{level:3,title:"Nghi\xEAn c\u1EE9u sendTransaction",slug:"nghien-cuu-sendtransaction",children:[]}]},{level:2,title:"Tu\u1EF3 ch\u1EC9nh thu\u1EADt to\xE1n lan truy\u1EC1n",slug:"tuy-chinh-thuat-toan-lan-truyen",children:[{level:3,title:"C\xE2n nh\u1EAFc khi b\u1ECF qua Preflight",slug:"can-nhac-khi-bo-qua-preflight",children:[]},{level:3,title:"Khi n\xE0o n\xEAn t\xE1i k\xFD transaction",slug:"khi-nao-nen-tai-ky-transaction",children:[]}]},{level:2,title:"L\u1EDDi c\u1EA3m \u01A1n",slug:"loi-cam-on",children:[]}],git:{updatedTime:1677551527e3},filePathRelative:"vi/guides/retrying-transactions.md"};export{n as data}; diff --git a/docs/.vuepress/dist/assets/retrying-transactions.html.a90e9b02.js b/docs/.vuepress/dist/assets/retrying-transactions.html.b365dd3a.js similarity index 99% rename from docs/.vuepress/dist/assets/retrying-transactions.html.a90e9b02.js rename to docs/.vuepress/dist/assets/retrying-transactions.html.b365dd3a.js index 23941d2fa..7eb0fc152 100644 --- a/docs/.vuepress/dist/assets/retrying-transactions.html.a90e9b02.js +++ b/docs/.vuepress/dist/assets/retrying-transactions.html.b365dd3a.js @@ -1,4 +1,4 @@ -import{_ as t,r as l,o as s,c as d,a as e,b as n,w as c,F as m,d as a,e as r}from"./app.cfdf84e7.js";var h="/assets/tx-journey.dd6310be.png",_="/assets/tpu-jito-labs.8bb32fb6.png",u="/assets/dropped-via-rpc-pool.8d1ce9af.png",k="/assets/dropped-minority-fork-pre-process.555653e1.png",b="/assets/dropped-minority-fork-post-process.48c3c955.png";const p={},g=e("h1",{id:"retrying-transactions-islemleri-yeniden-denemek",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#retrying-transactions-islemleri-yeniden-denemek","aria-hidden":"true"},"#"),a(" Retrying Transactions (\u0130\u015Flemleri Yeniden Denemek)")],-1),y=a("Baz\u0131 durumlarda, g\xF6r\xFCn\xFC\u015Fte ge\xE7erli bir i\u015Flem, bir blo\u011Fa dahil edilmeden \xF6nce iptal edilebilir. Bu genellikle a\u011F t\u0131kan\u0131kl\u0131\u011F\u0131 d\xF6nemlerinde, bir RPC node\u2019unun i\u015Flemi "),f={href:"https://docs.solana.com/terminology#leader",target:"_blank",rel:"noopener noreferrer"},v=a("leader"),z=a("\u2019da \u2018rebroadcast\u2019 edemedi\u011Finde (yani duyuramad\u0131\u011F\u0131nda) meydana gelir. Bir son kullan\u0131c\u0131ya, i\u015Flemleri tamamen ortadan kalkm\u0131\u015F gibi g\xF6r\xFCnebilir. RPC node\u2019lar\u0131 genel bir rebroadcasting algoritmas\u0131 ile donat\u0131l\u0131rken, uygulama geli\u015Ftiricileri de kendi \xF6zel rebroadcasting mant\u0131\u011F\u0131n\u0131 geli\u015Ftirebilir."),B=r('

    Facts (\xD6zet Bilgiler)

    :::Bilgi Tablosu

    • RPC node\u2019lar, genel bir algoritma kullanarak i\u015Flemleri rebroadcast etmeye \xE7al\u0131\u015Facakt\u0131r.
    • Uygulama geli\u015Ftiricileri kendi \xF6zel rebroadcasting mant\u0131\u011F\u0131n\u0131 uygulayabilir.
    • Geli\u015Ftiriciler, sendTransaction JSON-RPC y\xF6ntemindeki maxRetries parametresinden yararlanmal\u0131d\u0131r.
    • Geli\u015Ftiriciler, i\u015Flemler g\xF6nderilmeden \xF6nce hatalar\u0131 ortaya \xE7\u0131karmak i\xE7in \xF6n kontrol kontrollerini etkinle\u015Ftirmelidir.
    • Herhangi bir i\u015Flemi yeniden imzalamadan \xF6nce, ilk i\u015Flemin blockhash s\xFCresinin doldu\u011Fundan emin olmak \xE7ok \xF6nemlidir.

    :::

    The Journey of a Transaction (Bir \u0130\u015Flemin Yolculu\u011Fu)

    How Clients Submit Transactions (Client\u2019lar \u0130\u015Flemleri Nas\u0131l G\xF6nderir)

    Solana'da bir mempool kavram\u0131 yoktur. \u0130ster programl\u0131 olarak ister son kullan\u0131c\u0131 taraf\u0131ndan ba\u015Flat\u0131ls\u0131n t\xFCm i\u015Flemler, bir blo\u011Fa i\u015Flenebilmeleri i\xE7in leaders\u2019a verimli bir \u015Fekilde y\xF6nlendirilir. Bir i\u015Flemin leader\u2019lara g\xF6nderilmesinin iki ana yolu vard\u0131r:

    ',7),P=a("Bir RPC sunucusu ve "),T={href:"https://docs.solana.com/developing/clients/jsonrpc-api#sendtransaction",target:"_blank",rel:"noopener noreferrer"},w=a("sendTransaction"),C=a(" JSON-RPC y\xF6ntemi arac\u0131l\u0131\u011F\u0131yla proxy ile g\xF6nderme"),R={href:"https://docs.rs/solana-client/1.7.3/solana_client/tpu_client/index.html",target:"_blank",rel:"noopener noreferrer"},x=a("TPU Client"),L=a(" arac\u0131l\u0131\u011F\u0131yla do\u011Frudan leaders\u2019a g\xF6nderme"),A=e("p",null,"Son kullan\u0131c\u0131lar\u0131n b\xFCy\xFCk \xE7o\u011Funlu\u011Fu i\u015Flemleri bir RPC sunucusu arac\u0131l\u0131\u011F\u0131yla g\xF6nderecektir. Bir m\xFC\u015Fteri bir i\u015Flem g\xF6nderdi\u011Finde, al\u0131c\u0131 RPC node s\u0131rayla i\u015Flemi hem mevcut hem de sonraki leader\u2019lara rebroadcast etmeye \xE7al\u0131\u015F\u0131r. \u0130\u015Flem bir leader taraf\u0131ndan i\u015Flenene kadar, Client\u2019\u0131n ve ge\xE7i\u015F yapan RPC node\u2019lar\u0131n\u0131n fark\u0131nda oldu\u011Fu d\u0131\u015F\u0131nda i\u015Flem kayd\u0131 yoktur. TPU Client\u2019\u0131 durumunda, rebroadcast ve leader y\xF6nlendirme tamamen client yaz\u0131l\u0131m\u0131 taraf\u0131ndan ger\xE7ekle\u015Ftirilir.",-1),S=e("p",null,[e("img",{src:h,alt:"Transaction Journey"})],-1),j=e("h3",{id:"how-rpc-nodes-broadcast-transactions-rpc-node-lar\u0131-islemleri-nas\u0131l-yay\u0131nlar",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#how-rpc-nodes-broadcast-transactions-rpc-node-lar\u0131-islemleri-nas\u0131l-yay\u0131nlar","aria-hidden":"true"},"#"),a(" How RPC Nodes Broadcast Transactions (RPC Node\u2019lar\u0131 \u0130\u015Flemleri Nas\u0131l Yay\u0131nlar)")],-1),D=a("Bir RPC node, "),U=e("code",null,"sendTransaction",-1),H=a(" arac\u0131l\u0131\u011F\u0131yla bir i\u015Flem ald\u0131ktan sonra, ilgili leader\u2019lara iletmeden \xF6nce i\u015Flemi bir "),N={href:"https://en.wikipedia.org/wiki/User_Datagram_Protocol",target:"_blank",rel:"noopener noreferrer"},V=a("UDP"),G=a(" paketine d\xF6n\xFC\u015Ft\xFCr\xFCr. UDP, do\u011Frulay\u0131c\u0131lar\u0131n birbirleriyle h\u0131zl\u0131 bir \u015Fekilde ileti\u015Fim kurmas\u0131na izin verir, ancak i\u015Flem teslimiyle ilgili herhangi bir garanti vermez."),Y=a("Solana'n\u0131n leader program\u0131 her "),J={href:"https://docs.solana.com/terminology#epoch",target:"_blank",rel:"noopener noreferrer"},F=a("epoch"),E=a(" (~2 g\xFCn) \xF6nceden bilindi\u011Finden, bir RPC node i\u015Flemini do\u011Frudan mevcut ve sonraki leader\u2019lara yay\u0131nlayacakt\u0131r. Bu, i\u015Flemleri t\xFCm a\u011Fda rastgele ve geni\u015F bir \u015Fekilde yayan Ethereum gibi di\u011Fer protokollerinin aksine bir metoddur. Varsay\u0131lan olarak, RPC node\u2019lar\u0131, i\u015Flem tamamlanana veya i\u015Flemin blockhash s\xFCresi dolana kadar (bu yaz\u0131 yaz\u0131ld\u0131\u011F\u0131 s\u0131rada 150 blok veya ~1 dakika 19 saniye) iki saniyede bir i\u015Flemleri leader\u2019lara iletmeye \xE7al\u0131\u015F\u0131r. Bekleyen rebroadcast kuyru\u011Fu boyutu "),I={href:"https://github.com/solana-labs/solana/blob/bfbbc53dac93b3a5c6be9b4b65f679fdb13e41d9/send-transaction-service/src/send_transaction_service.rs#L20",target:"_blank",rel:"noopener noreferrer"},M=a("10,000"),O=a(" i\u015Flemden b\xFCy\xFCkse, yeni g\xF6nderilen i\u015Flemler b\u0131rak\u0131l\u0131r. Bu yeniden deneme mant\u0131\u011F\u0131n\u0131n varsay\u0131lan davran\u0131\u015F\u0131n\u0131 de\u011Fi\u015Ftirmek i\xE7in RPC operat\xF6rlerinin ayarlayabilece\u011Fi komut sat\u0131r\u0131 "),W={href:"https://github.com/solana-labs/solana/blob/bfbbc53dac93b3a5c6be9b4b65f679fdb13e41d9/validator/src/main.rs#L1172",target:"_blank",rel:"noopener noreferrer"},Z=a("arg\xFCmanlar\u0131"),K=a(" vard\u0131r."),q=a("Bir RPC node, bir i\u015Flem yay\u0131nlad\u0131\u011F\u0131nda, i\u015Flemi bir leader\u2019\u0131n \u0130\u015Flem \u0130\u015Fleme Birimine ("),Q={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/validator.rs#L867",target:"_blank",rel:"noopener noreferrer"},X=a("Transaction Processing Unit (TPU)"),$=a(") iletmeye \xE7al\u0131\u015F\u0131r. TPU, i\u015Flemleri be\u015F farkl\u0131 a\u015Famada i\u015Fler:"),ee={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/fetch_stage.rs#L21",target:"_blank",rel:"noopener noreferrer"},ae=a("Fetch Stage"),ne=a("(Getirme A\u015Famas\u0131)"),ie={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/tpu.rs#L91",target:"_blank",rel:"noopener noreferrer"},re=a("SigVerify Stage"),le=a("(\u0130mza Do\u011Frulama A\u015Famas\u0131)"),oe={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/banking_stage.rs#L249",target:"_blank",rel:"noopener noreferrer"},te=a("Banking Stage"),se=a("(Bankac\u0131l\u0131k A\u015Famas\u0131)"),de={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/poh/src/poh_service.rs",target:"_blank",rel:"noopener noreferrer"},ce=a("Proof of History Service"),me=a("(\u2018Proof of History\u2019 Hizmeti)"),he={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/tpu.rs#L136",target:"_blank",rel:"noopener noreferrer"},_e=a("Broadcast Stage"),ue=a("(Yay\u0131nlama A\u015Famas\u0131)"),ke=e("p",null,[e("img",{src:_,alt:"TPU Overview"}),e("small",{style:{display:"block","text-align":"center"}},"Image Courtesy of Jito Labs")],-1),be=e("p",null,"Bu be\u015F a\u015Famadan, Getirme A\u015Famas\u0131 i\u015Flemleri almaktan sorumludur. Getirme A\u015Famas\u0131nda, validator\u2019ler gelen i\u015Flemleri \xFC\xE7 ba\u011Flant\u0131 noktas\u0131na g\xF6re s\u0131n\u0131fland\u0131r\u0131r:",-1),pe={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/gossip/src/contact_info.rs#L27",target:"_blank",rel:"noopener noreferrer"},ge=a("tpu"),ye=a(", token transferleri, NFT mintleme ve program talimatlar\u0131 gibi d\xFCzenli i\u015Flemleri ger\xE7ekle\u015Ftirir."),fe={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/gossip/src/contact_info.rs#L31",target:"_blank",rel:"noopener noreferrer"},ve=a("tpu_vote"),ze=a(" yaln\u0131zca oylama i\u015Flemlerine odaklan\u0131r"),Be={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/gossip/src/contact_info.rs#L29",target:"_blank",rel:"noopener noreferrer"},Pe=a("tpu_forwards"),Te=a(", mevcut leader t\xFCm i\u015Flemleri ger\xE7ekle\u015Ftiremiyorsa, i\u015Flenmemi\u015F paketleri bir sonraki leader\u2019a iletir."),we=a("TPU hakk\u0131nda daha fazla bilgi i\xE7in l\xFCtfen "),Ce={href:"https://jito-labs.medium.com/solana-validator-101-transaction-processing-90bcdc271143",target:"_blank",rel:"noopener noreferrer"},Re=a("Jito Labs"),xe=a(".'\u0131n bu m\xFCkemmel yaz\u0131s\u0131na bak\u0131n."),Le=e("h2",{id:"how-transactions-get-dropped-islemler-nas\u0131l-duser",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#how-transactions-get-dropped-islemler-nas\u0131l-duser","aria-hidden":"true"},"#"),a(" How Transactions Get Dropped (\u0130\u015Flemler Nas\u0131l D\xFC\u015Fer)")],-1),Ae=e("p",null,"Bir i\u015Flemin yolculu\u011Fu boyunca, i\u015Flemin istemeden a\u011Fdan d\xFC\u015Febilece\u011Fi birka\xE7 senaryo vard\u0131r.",-1),Se=e("h3",{id:"before-a-transaction-is-processed-islem-islenmeden-once",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#before-a-transaction-is-processed-islem-islenmeden-once","aria-hidden":"true"},"#"),a(" Before a transaction is processed (\u0130\u015Flem i\u015Flenmeden \xF6nce)")],-1),je=a("A\u011F bir i\u015Flemi b\u0131rak\u0131rsa, b\xFCy\xFCk olas\u0131l\u0131kla i\u015Flem bir leader taraf\u0131ndan i\u015Flenmeden \xF6nce bunu yapacakt\u0131r. UDP "),De={href:"https://en.wikipedia.org/wiki/Packet_loss",target:"_blank",rel:"noopener noreferrer"},Ue=a("paket kayb\u0131"),He=a(" ,bunun olmas\u0131n\u0131n en basit nedenidir. Yo\u011Fun a\u011F y\xFCk\xFC zamanlar\u0131nda, validator\u2019lar\u0131n i\u015Fleme i\xE7in gereken \xE7ok say\u0131da transaction\u2019dan bunalmas\u0131 da m\xFCmk\xFCnd\xFCr. Validator\u2019lar, fazla i\u015Flemleri "),Ne=e("code",null,"tpu_forwards",-1),Ve=a(" arac\u0131l\u0131\u011F\u0131yla iletmek i\xE7in donat\u0131lm\u0131\u015F olsa da,"),Ge={href:"https://github.com/solana-labs/solana/blob/master/core/src/banking_stage.rs#L389",target:"_blank",rel:"noopener noreferrer"},Ye=a("iletilebilecek"),Je=a(" veri miktar\u0131n\u0131n bir s\u0131n\u0131r\u0131 vard\u0131r. Ayr\u0131ca, her ileri validator aras\u0131nda tek bir atlama ile s\u0131n\u0131rl\u0131d\u0131r. Yani, "),Fe=e("code",null,"tpu_forwards",-1),Ee=a(" ba\u011Flant\u0131 noktas\u0131nda al\u0131nan i\u015Flemler di\u011Fer validator\u2019lara iletilmez."),Ie=a("Ayr\u0131ca, bir i\u015Flemin i\u015Flenmeden \xF6nce iptal edilmesinin daha az bilinen iki nedeni vard\u0131r. \u0130lk senaryo, bir RPC havuzu arac\u0131l\u0131\u011F\u0131yla g\xF6nderilen i\u015Flemleri i\xE7erir. Bazen, RPC havuzunun bir k\u0131sm\u0131 havuzun geri kalan\u0131ndan yeterince \xF6nde olabilir. Bu, havuz i\xE7indeki node\u2019lar\u0131n birlikte \xE7al\u0131\u015Fmas\u0131 gerekti\u011Finde sorunlara neden olabilir. Bu \xF6rnekte, i\u015Flemin "),Me={href:"https://docs.solana.com/developing/programming-model/transactions#recent-blockhash",target:"_blank",rel:"noopener noreferrer"},Oe=a("recentBlockhash"),We=a("'i havuzun geli\u015Fmi\u015F k\u0131sm\u0131ndan sorgulan\u0131r (Arka U\xE7 A). \u0130\u015Flem havuzun gecikmeli k\u0131sm\u0131na (Arka U\xE7 B) g\xF6nderildi\u011Finde, node\u2019lar geli\u015Fmi\u015F blockhash tan\u0131mayacak ve i\u015Flemi b\u0131rakacakt\u0131r. Geli\u015Ftiriciler "),Ze=e("code",null,"sendTransaction",-1),Ke=a("'da \xF6n kontrol kontrollerini"),qe={href:"https://docs.solana.com/developing/clients/jsonrpc-api#sendtransaction",target:"_blank",rel:"noopener noreferrer"},Qe=a("preflight checks"),Xe=a(" etkinle\u015Ftirirse, bu i\u015Flem g\xF6nderimi s\u0131ras\u0131nda tespit edilebilir."),$e=r('

    Dropped via RPC Pool

    Ge\xE7ici olarak network fork da transaction\u2019lar\u0131n d\xFC\u015Fmesine neden olabilir. Bir validator, Bankac\u0131l\u0131k A\u015Famas\u0131nda bloklar\u0131n\u0131 tekrar oynatmak i\xE7in yava\u015Fsa, bir minority fork olu\u015Fturabilir. Bir m\xFC\u015Fteri bir i\u015Flem olu\u015Fturdu\u011Funda, i\u015Flemin yaln\u0131zca minority fork var olan bir recentBlockhash'e ba\u015Fvurmas\u0131 m\xFCmk\xFCnd\xFCr. \u0130\u015Flem g\xF6nderildikten sonra, i\u015Flem i\u015Flenmeden \xF6nce cluster minority fork\u2019tan ge\xE7ebilir. Bu senaryoda, blockhash bulunamad\u0131\u011F\u0131 i\xE7in i\u015Flem b\u0131rak\u0131l\u0131r.

    Dropped due to Minority Fork (Before Processed)

    After a transaction is processed and before it is finalized (\u0130\u015Flem i\u015Flendikten sonra ama sonu\xE7lanmadan \xF6nce)

    Bir i\u015Flemin bir minority fork\u2019tan yeni bir Blockhash'e at\u0131fta bulunmas\u0131 durumunda, i\u015Flemin i\u015Flenmesi hala m\xFCmk\xFCnd\xFCr. Ancak bu durumda, leader taraf\u0131ndan minority fork\u2019ta i\u015Flenir. Bu leader, i\u015Flenmi\u015F i\u015Flemlerini a\u011F\u0131n geri kalan\u0131yla payla\u015Fmaya \xE7al\u0131\u015Ft\u0131\u011F\u0131nda, minority fork\u2019u tan\u0131mayan do\u011Frulay\u0131c\u0131lar\u0131n \xE7o\u011Funlu\u011Fu ile fikir birli\u011Fine varamaz. \u015Eu anda, i\u015Flem tamamlanamadan iptal edilecektir.

    Dropped due to Minority Fork (After Processed)

    Handling Dropped Transactions (D\xFC\u015Fen \u0130\u015Flemleri Y\xF6netme)

    RPC node\u2019lar i\u015Flemleri yeniden yay\u0131nlamaya \xE7al\u0131\u015Facak olsa da, kulland\u0131klar\u0131 algoritma geneldir ve genellikle belirli uygulamalar\u0131n ihtiya\xE7lar\u0131 i\xE7in uygun de\u011Fildir. A\u011F t\u0131kan\u0131kl\u0131\u011F\u0131 zamanlar\u0131na haz\u0131rlanmak i\xE7in uygulama geli\u015Ftiricilerin kendi yeniden yay\u0131n mant\u0131\u011F\u0131n\u0131 \xF6zelle\u015Ftirmesi gerekir. An In-Depth Look at sendTransaction (sendTransaction\u2019a Derinden Bak\u0131\u015F)

    An In-Depth Look at sendTransaction (sendTransaction\u2019a Derinden Bak\u0131\u015F)

    \u0130\u015Flem g\xF6nderme s\xF6z konusu oldu\u011Funda, sendTransaction RPC y\xF6ntemi, geli\u015Ftiricilerin kullanabilece\u011Fi birincil ara\xE7t\u0131r. sendTransaction, yaln\u0131zca bir i\u015Flemi bir client\u2019dan bir RPC node\u2019a ge\xE7irmekten sorumludur. Node transaction\u2019\u0131 al\u0131rsa, sendTransaction transaction\u2019\u0131 izlemek i\xE7in kullan\u0131labilecek transaction id d\xF6nd\xFCr\xFCr. Ba\u015Far\u0131l\u0131 bir yan\u0131t, i\u015Flemin cluster taraf\u0131ndan i\u015Flenip i\u015Flenmeyece\u011Fini veya sonland\u0131r\u0131laca\u011F\u0131n\u0131 g\xF6stermez.

    :::\u0130PUCU

    Parametreleri \xC7a\u011F\u0131rmak

    ',12),ea=e("li",null,[e("code",null,"transaction"),a(": "),e("code",null,"string"),a(" - encoded string olarak tam imzal\u0131 \u0130\u015Flem")],-1),aa=a("(optional) "),na=e("code",null,"configuration object",-1),ia=a("(yap\u0131land\u0131rma nesnesi): "),ra=e("code",null,"object",-1),la=e("li",null,[e("code",null,"skipPreflight"),a(": "),e("code",null,"boolean"),a(" - true ise, \xF6n kontrol i\u015Flem kontrollerini atlay\u0131n (varsay\u0131lan: false)")],-1),oa=a("(optional) "),ta=e("code",null,"preflightCommitment",-1),sa=a(": "),da=e("code",null,"string",-1),ca=a(" - Bank slotuna kar\u015F\u0131 \xF6n kontrol sim\xFClasyonlar\u0131 i\xE7in kullan\u0131lacak "),ma={href:"https://docs.solana.com/developing/clients/jsonrpc-api#configuring-state-commitment",target:"_blank",rel:"noopener noreferrer"},ha=a("Commitment"),_a=a('(taahh\xFCt) seviyesi (varsay\u0131lan: "kesinle\u015Fmi\u015F").'),ua=e("li",null,[a("(optional) "),e("code",null,"encoding"),a(": "),e("code",null,"string"),a('- \u0130\u015Flem verileri i\xE7in kullan\u0131lan kodlama. Ya "base58" (yava\u015F) ya da "base64". (varsay\u0131lan: "base58").')],-1),ka=e("li",null,[a("(optional) "),e("code",null,"maxRetries"),a(": "),e("code",null,"usize"),a(" - RPC node\u2019un i\u015Flemi leader'a g\xF6ndermeyi yeniden denemesi i\xE7in maksimum say\u0131. Bu parametre sa\u011Flanmazsa, RPC node, tamamlan\u0131ncaya veya blockhash s\xFCresi dolana kadar i\u015Flemi yeniden deneyecektir.")],-1),ba=e("h4",{id:"response",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#response","aria-hidden":"true"},"#"),a(" Response")],-1),pa=e("code",null,"transaction id",-1),ga=a(": "),ya=e("code",null,"string",-1),fa=a(" - Temel 58 kodlu string olarak i\u015Fleme g\xF6m\xFCl\xFC ilk i\u015Flem imzas\u0131. Bu i\u015Flem kimli\u011Fi, durum g\xFCncellemelerini yoklamak i\xE7in "),va={href:"https://docs.solana.com/developing/clients/jsonrpc-api#getsignaturestatuses",target:"_blank",rel:"noopener noreferrer"},za=a("getSignatureStatuses"),Ba=a(" ile kullan\u0131labilir. :::"),Pa=e("h2",{id:"customizing-rebroadcast-logic-rebroadcast-logic-ozellestirme",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#customizing-rebroadcast-logic-rebroadcast-logic-ozellestirme","aria-hidden":"true"},"#"),a(" Customizing Rebroadcast Logic (Rebroadcast Logic \xD6zelle\u015Ftirme)")],-1),Ta=a("Geli\u015Ftiriciler, kendi rebroadcasting logic\u2019ini geli\u015Ftirmek i\xE7in "),wa=e("code",null,"sendTransaction",-1),Ca=a("'\u0131n "),Ra=e("code",null,"maxRetries",-1),xa=a(" parametresinden yararlanmal\u0131d\u0131r. Sa\u011Flan\u0131rsa, "),La=e("code",null,"maxRetries",-1),Aa=a(", bir RPC nodu\u2019nun varsay\u0131lan yeniden deneme mant\u0131\u011F\u0131n\u0131 ge\xE7ersiz k\u0131larak geli\u015Ftiricilerin yeniden deneme s\xFCrecini "),Sa={href:"https://github.com/solana-labs/solana/blob/98707baec2385a4f7114d2167ef6dfb1406f954f/validator/src/main.rs#L1258-L1274",target:"_blank",rel:"noopener noreferrer"},ja=a("makul s\u0131n\u0131rlar"),Da=a(". i\xE7inde manuel olarak kontrol etmesine olanak tan\u0131r."),Ua=a("\u0130\u015Flemleri manuel olarak yeniden denemek i\xE7in yayg\u0131n bir kal\u0131p, "),Ha={href:"https://docs.solana.com/developing/clients/jsonrpc-api#getlatestblockhash",target:"_blank",rel:"noopener noreferrer"},Na=a("getLatestBlockhash"),Va=a("'ten gelen "),Ga=e("code",null,"lastValidBlockHeight",-1),Ya=a("'\u0131n ge\xE7ici olarak depolanmas\u0131n\u0131 i\xE7erir. Bir uygulama sakland\u0131ktan sonra "),Ja={href:"https://docs.solana.com/developing/clients/jsonrpc-api#getblockheight",target:"_blank",rel:"noopener noreferrer"},Fa=a("k\xFCmenin blok y\xFCksekli\u011Fin"),Ea=a(" sorguayabilir ve i\u015Flemi uygun bir aral\u0131kta manuel olarak yeniden deneyebilir. A\u011F t\u0131kan\u0131kl\u0131\u011F\u0131 zamanlar\u0131nda, "),Ia=e("code",null,"maxRetries",-1),Ma=a("'i 0'a ayarlamak ve \xF6zel bir algoritma arac\u0131l\u0131\u011F\u0131yla manuel olarak yeniden yay\u0131nlamak avantajl\u0131d\u0131r. Baz\u0131 uygulamalar "),Oa={href:"https://en.wikipedia.org/wiki/Exponential_backoff",target:"_blank",rel:"noopener noreferrer"},Wa=a("\xFCstel bir geri alma"),Za=a(" algoritmas\u0131 kullanabilirken, "),Ka={href:"https://www.mango.markets/",target:"_blank",rel:"noopener noreferrer"},qa=a("Mango"),Qa=a(" gibi di\u011Ferleri, belirli bir zaman a\u015F\u0131m\u0131 ger\xE7ekle\u015Fene kadar i\u015Flemleri sabit bir aral\u0131kta s\xFCrekli olarak "),Xa={href:"https://github.com/blockworks-foundation/mango-ui/blob/b6abfc6c13b71fc17ebbe766f50b8215fa1ec54f/src/utils/send.tsx#L713",target:"_blank",rel:"noopener noreferrer"},$a=a("yeniden g\xF6ndermeyi"),en=a(" tercih eder."),an=r(`
    while (blockheight < lastValidBlockHeight) {
    +import{_ as t,r as l,o as s,c as d,a as e,b as n,w as c,F as m,d as a,e as r}from"./app.2fbb9e96.js";var h="/assets/tx-journey.dd6310be.png",_="/assets/tpu-jito-labs.8bb32fb6.png",u="/assets/dropped-via-rpc-pool.8d1ce9af.png",k="/assets/dropped-minority-fork-pre-process.555653e1.png",b="/assets/dropped-minority-fork-post-process.48c3c955.png";const p={},g=e("h1",{id:"retrying-transactions-islemleri-yeniden-denemek",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#retrying-transactions-islemleri-yeniden-denemek","aria-hidden":"true"},"#"),a(" Retrying Transactions (\u0130\u015Flemleri Yeniden Denemek)")],-1),y=a("Baz\u0131 durumlarda, g\xF6r\xFCn\xFC\u015Fte ge\xE7erli bir i\u015Flem, bir blo\u011Fa dahil edilmeden \xF6nce iptal edilebilir. Bu genellikle a\u011F t\u0131kan\u0131kl\u0131\u011F\u0131 d\xF6nemlerinde, bir RPC node\u2019unun i\u015Flemi "),f={href:"https://docs.solana.com/terminology#leader",target:"_blank",rel:"noopener noreferrer"},v=a("leader"),z=a("\u2019da \u2018rebroadcast\u2019 edemedi\u011Finde (yani duyuramad\u0131\u011F\u0131nda) meydana gelir. Bir son kullan\u0131c\u0131ya, i\u015Flemleri tamamen ortadan kalkm\u0131\u015F gibi g\xF6r\xFCnebilir. RPC node\u2019lar\u0131 genel bir rebroadcasting algoritmas\u0131 ile donat\u0131l\u0131rken, uygulama geli\u015Ftiricileri de kendi \xF6zel rebroadcasting mant\u0131\u011F\u0131n\u0131 geli\u015Ftirebilir."),B=r('

    Facts (\xD6zet Bilgiler)

    :::Bilgi Tablosu

    • RPC node\u2019lar, genel bir algoritma kullanarak i\u015Flemleri rebroadcast etmeye \xE7al\u0131\u015Facakt\u0131r.
    • Uygulama geli\u015Ftiricileri kendi \xF6zel rebroadcasting mant\u0131\u011F\u0131n\u0131 uygulayabilir.
    • Geli\u015Ftiriciler, sendTransaction JSON-RPC y\xF6ntemindeki maxRetries parametresinden yararlanmal\u0131d\u0131r.
    • Geli\u015Ftiriciler, i\u015Flemler g\xF6nderilmeden \xF6nce hatalar\u0131 ortaya \xE7\u0131karmak i\xE7in \xF6n kontrol kontrollerini etkinle\u015Ftirmelidir.
    • Herhangi bir i\u015Flemi yeniden imzalamadan \xF6nce, ilk i\u015Flemin blockhash s\xFCresinin doldu\u011Fundan emin olmak \xE7ok \xF6nemlidir.

    :::

    The Journey of a Transaction (Bir \u0130\u015Flemin Yolculu\u011Fu)

    How Clients Submit Transactions (Client\u2019lar \u0130\u015Flemleri Nas\u0131l G\xF6nderir)

    Solana'da bir mempool kavram\u0131 yoktur. \u0130ster programl\u0131 olarak ister son kullan\u0131c\u0131 taraf\u0131ndan ba\u015Flat\u0131ls\u0131n t\xFCm i\u015Flemler, bir blo\u011Fa i\u015Flenebilmeleri i\xE7in leaders\u2019a verimli bir \u015Fekilde y\xF6nlendirilir. Bir i\u015Flemin leader\u2019lara g\xF6nderilmesinin iki ana yolu vard\u0131r:

    ',7),P=a("Bir RPC sunucusu ve "),T={href:"https://docs.solana.com/developing/clients/jsonrpc-api#sendtransaction",target:"_blank",rel:"noopener noreferrer"},w=a("sendTransaction"),C=a(" JSON-RPC y\xF6ntemi arac\u0131l\u0131\u011F\u0131yla proxy ile g\xF6nderme"),R={href:"https://docs.rs/solana-client/1.7.3/solana_client/tpu_client/index.html",target:"_blank",rel:"noopener noreferrer"},x=a("TPU Client"),L=a(" arac\u0131l\u0131\u011F\u0131yla do\u011Frudan leaders\u2019a g\xF6nderme"),A=e("p",null,"Son kullan\u0131c\u0131lar\u0131n b\xFCy\xFCk \xE7o\u011Funlu\u011Fu i\u015Flemleri bir RPC sunucusu arac\u0131l\u0131\u011F\u0131yla g\xF6nderecektir. Bir m\xFC\u015Fteri bir i\u015Flem g\xF6nderdi\u011Finde, al\u0131c\u0131 RPC node s\u0131rayla i\u015Flemi hem mevcut hem de sonraki leader\u2019lara rebroadcast etmeye \xE7al\u0131\u015F\u0131r. \u0130\u015Flem bir leader taraf\u0131ndan i\u015Flenene kadar, Client\u2019\u0131n ve ge\xE7i\u015F yapan RPC node\u2019lar\u0131n\u0131n fark\u0131nda oldu\u011Fu d\u0131\u015F\u0131nda i\u015Flem kayd\u0131 yoktur. TPU Client\u2019\u0131 durumunda, rebroadcast ve leader y\xF6nlendirme tamamen client yaz\u0131l\u0131m\u0131 taraf\u0131ndan ger\xE7ekle\u015Ftirilir.",-1),S=e("p",null,[e("img",{src:h,alt:"Transaction Journey"})],-1),j=e("h3",{id:"how-rpc-nodes-broadcast-transactions-rpc-node-lar\u0131-islemleri-nas\u0131l-yay\u0131nlar",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#how-rpc-nodes-broadcast-transactions-rpc-node-lar\u0131-islemleri-nas\u0131l-yay\u0131nlar","aria-hidden":"true"},"#"),a(" How RPC Nodes Broadcast Transactions (RPC Node\u2019lar\u0131 \u0130\u015Flemleri Nas\u0131l Yay\u0131nlar)")],-1),D=a("Bir RPC node, "),U=e("code",null,"sendTransaction",-1),H=a(" arac\u0131l\u0131\u011F\u0131yla bir i\u015Flem ald\u0131ktan sonra, ilgili leader\u2019lara iletmeden \xF6nce i\u015Flemi bir "),N={href:"https://en.wikipedia.org/wiki/User_Datagram_Protocol",target:"_blank",rel:"noopener noreferrer"},V=a("UDP"),G=a(" paketine d\xF6n\xFC\u015Ft\xFCr\xFCr. UDP, do\u011Frulay\u0131c\u0131lar\u0131n birbirleriyle h\u0131zl\u0131 bir \u015Fekilde ileti\u015Fim kurmas\u0131na izin verir, ancak i\u015Flem teslimiyle ilgili herhangi bir garanti vermez."),Y=a("Solana'n\u0131n leader program\u0131 her "),J={href:"https://docs.solana.com/terminology#epoch",target:"_blank",rel:"noopener noreferrer"},F=a("epoch"),E=a(" (~2 g\xFCn) \xF6nceden bilindi\u011Finden, bir RPC node i\u015Flemini do\u011Frudan mevcut ve sonraki leader\u2019lara yay\u0131nlayacakt\u0131r. Bu, i\u015Flemleri t\xFCm a\u011Fda rastgele ve geni\u015F bir \u015Fekilde yayan Ethereum gibi di\u011Fer protokollerinin aksine bir metoddur. Varsay\u0131lan olarak, RPC node\u2019lar\u0131, i\u015Flem tamamlanana veya i\u015Flemin blockhash s\xFCresi dolana kadar (bu yaz\u0131 yaz\u0131ld\u0131\u011F\u0131 s\u0131rada 150 blok veya ~1 dakika 19 saniye) iki saniyede bir i\u015Flemleri leader\u2019lara iletmeye \xE7al\u0131\u015F\u0131r. Bekleyen rebroadcast kuyru\u011Fu boyutu "),I={href:"https://github.com/solana-labs/solana/blob/bfbbc53dac93b3a5c6be9b4b65f679fdb13e41d9/send-transaction-service/src/send_transaction_service.rs#L20",target:"_blank",rel:"noopener noreferrer"},M=a("10,000"),O=a(" i\u015Flemden b\xFCy\xFCkse, yeni g\xF6nderilen i\u015Flemler b\u0131rak\u0131l\u0131r. Bu yeniden deneme mant\u0131\u011F\u0131n\u0131n varsay\u0131lan davran\u0131\u015F\u0131n\u0131 de\u011Fi\u015Ftirmek i\xE7in RPC operat\xF6rlerinin ayarlayabilece\u011Fi komut sat\u0131r\u0131 "),W={href:"https://github.com/solana-labs/solana/blob/bfbbc53dac93b3a5c6be9b4b65f679fdb13e41d9/validator/src/main.rs#L1172",target:"_blank",rel:"noopener noreferrer"},Z=a("arg\xFCmanlar\u0131"),K=a(" vard\u0131r."),q=a("Bir RPC node, bir i\u015Flem yay\u0131nlad\u0131\u011F\u0131nda, i\u015Flemi bir leader\u2019\u0131n \u0130\u015Flem \u0130\u015Fleme Birimine ("),Q={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/validator.rs#L867",target:"_blank",rel:"noopener noreferrer"},X=a("Transaction Processing Unit (TPU)"),$=a(") iletmeye \xE7al\u0131\u015F\u0131r. TPU, i\u015Flemleri be\u015F farkl\u0131 a\u015Famada i\u015Fler:"),ee={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/fetch_stage.rs#L21",target:"_blank",rel:"noopener noreferrer"},ae=a("Fetch Stage"),ne=a("(Getirme A\u015Famas\u0131)"),ie={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/tpu.rs#L91",target:"_blank",rel:"noopener noreferrer"},re=a("SigVerify Stage"),le=a("(\u0130mza Do\u011Frulama A\u015Famas\u0131)"),oe={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/banking_stage.rs#L249",target:"_blank",rel:"noopener noreferrer"},te=a("Banking Stage"),se=a("(Bankac\u0131l\u0131k A\u015Famas\u0131)"),de={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/poh/src/poh_service.rs",target:"_blank",rel:"noopener noreferrer"},ce=a("Proof of History Service"),me=a("(\u2018Proof of History\u2019 Hizmeti)"),he={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/tpu.rs#L136",target:"_blank",rel:"noopener noreferrer"},_e=a("Broadcast Stage"),ue=a("(Yay\u0131nlama A\u015Famas\u0131)"),ke=e("p",null,[e("img",{src:_,alt:"TPU Overview"}),e("small",{style:{display:"block","text-align":"center"}},"Image Courtesy of Jito Labs")],-1),be=e("p",null,"Bu be\u015F a\u015Famadan, Getirme A\u015Famas\u0131 i\u015Flemleri almaktan sorumludur. Getirme A\u015Famas\u0131nda, validator\u2019ler gelen i\u015Flemleri \xFC\xE7 ba\u011Flant\u0131 noktas\u0131na g\xF6re s\u0131n\u0131fland\u0131r\u0131r:",-1),pe={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/gossip/src/contact_info.rs#L27",target:"_blank",rel:"noopener noreferrer"},ge=a("tpu"),ye=a(", token transferleri, NFT mintleme ve program talimatlar\u0131 gibi d\xFCzenli i\u015Flemleri ger\xE7ekle\u015Ftirir."),fe={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/gossip/src/contact_info.rs#L31",target:"_blank",rel:"noopener noreferrer"},ve=a("tpu_vote"),ze=a(" yaln\u0131zca oylama i\u015Flemlerine odaklan\u0131r"),Be={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/gossip/src/contact_info.rs#L29",target:"_blank",rel:"noopener noreferrer"},Pe=a("tpu_forwards"),Te=a(", mevcut leader t\xFCm i\u015Flemleri ger\xE7ekle\u015Ftiremiyorsa, i\u015Flenmemi\u015F paketleri bir sonraki leader\u2019a iletir."),we=a("TPU hakk\u0131nda daha fazla bilgi i\xE7in l\xFCtfen "),Ce={href:"https://jito-labs.medium.com/solana-validator-101-transaction-processing-90bcdc271143",target:"_blank",rel:"noopener noreferrer"},Re=a("Jito Labs"),xe=a(".'\u0131n bu m\xFCkemmel yaz\u0131s\u0131na bak\u0131n."),Le=e("h2",{id:"how-transactions-get-dropped-islemler-nas\u0131l-duser",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#how-transactions-get-dropped-islemler-nas\u0131l-duser","aria-hidden":"true"},"#"),a(" How Transactions Get Dropped (\u0130\u015Flemler Nas\u0131l D\xFC\u015Fer)")],-1),Ae=e("p",null,"Bir i\u015Flemin yolculu\u011Fu boyunca, i\u015Flemin istemeden a\u011Fdan d\xFC\u015Febilece\u011Fi birka\xE7 senaryo vard\u0131r.",-1),Se=e("h3",{id:"before-a-transaction-is-processed-islem-islenmeden-once",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#before-a-transaction-is-processed-islem-islenmeden-once","aria-hidden":"true"},"#"),a(" Before a transaction is processed (\u0130\u015Flem i\u015Flenmeden \xF6nce)")],-1),je=a("A\u011F bir i\u015Flemi b\u0131rak\u0131rsa, b\xFCy\xFCk olas\u0131l\u0131kla i\u015Flem bir leader taraf\u0131ndan i\u015Flenmeden \xF6nce bunu yapacakt\u0131r. UDP "),De={href:"https://en.wikipedia.org/wiki/Packet_loss",target:"_blank",rel:"noopener noreferrer"},Ue=a("paket kayb\u0131"),He=a(" ,bunun olmas\u0131n\u0131n en basit nedenidir. Yo\u011Fun a\u011F y\xFCk\xFC zamanlar\u0131nda, validator\u2019lar\u0131n i\u015Fleme i\xE7in gereken \xE7ok say\u0131da transaction\u2019dan bunalmas\u0131 da m\xFCmk\xFCnd\xFCr. Validator\u2019lar, fazla i\u015Flemleri "),Ne=e("code",null,"tpu_forwards",-1),Ve=a(" arac\u0131l\u0131\u011F\u0131yla iletmek i\xE7in donat\u0131lm\u0131\u015F olsa da,"),Ge={href:"https://github.com/solana-labs/solana/blob/master/core/src/banking_stage.rs#L389",target:"_blank",rel:"noopener noreferrer"},Ye=a("iletilebilecek"),Je=a(" veri miktar\u0131n\u0131n bir s\u0131n\u0131r\u0131 vard\u0131r. Ayr\u0131ca, her ileri validator aras\u0131nda tek bir atlama ile s\u0131n\u0131rl\u0131d\u0131r. Yani, "),Fe=e("code",null,"tpu_forwards",-1),Ee=a(" ba\u011Flant\u0131 noktas\u0131nda al\u0131nan i\u015Flemler di\u011Fer validator\u2019lara iletilmez."),Ie=a("Ayr\u0131ca, bir i\u015Flemin i\u015Flenmeden \xF6nce iptal edilmesinin daha az bilinen iki nedeni vard\u0131r. \u0130lk senaryo, bir RPC havuzu arac\u0131l\u0131\u011F\u0131yla g\xF6nderilen i\u015Flemleri i\xE7erir. Bazen, RPC havuzunun bir k\u0131sm\u0131 havuzun geri kalan\u0131ndan yeterince \xF6nde olabilir. Bu, havuz i\xE7indeki node\u2019lar\u0131n birlikte \xE7al\u0131\u015Fmas\u0131 gerekti\u011Finde sorunlara neden olabilir. Bu \xF6rnekte, i\u015Flemin "),Me={href:"https://docs.solana.com/developing/programming-model/transactions#recent-blockhash",target:"_blank",rel:"noopener noreferrer"},Oe=a("recentBlockhash"),We=a("'i havuzun geli\u015Fmi\u015F k\u0131sm\u0131ndan sorgulan\u0131r (Arka U\xE7 A). \u0130\u015Flem havuzun gecikmeli k\u0131sm\u0131na (Arka U\xE7 B) g\xF6nderildi\u011Finde, node\u2019lar geli\u015Fmi\u015F blockhash tan\u0131mayacak ve i\u015Flemi b\u0131rakacakt\u0131r. Geli\u015Ftiriciler "),Ze=e("code",null,"sendTransaction",-1),Ke=a("'da \xF6n kontrol kontrollerini"),qe={href:"https://docs.solana.com/developing/clients/jsonrpc-api#sendtransaction",target:"_blank",rel:"noopener noreferrer"},Qe=a("preflight checks"),Xe=a(" etkinle\u015Ftirirse, bu i\u015Flem g\xF6nderimi s\u0131ras\u0131nda tespit edilebilir."),$e=r('

    Dropped via RPC Pool

    Ge\xE7ici olarak network fork da transaction\u2019lar\u0131n d\xFC\u015Fmesine neden olabilir. Bir validator, Bankac\u0131l\u0131k A\u015Famas\u0131nda bloklar\u0131n\u0131 tekrar oynatmak i\xE7in yava\u015Fsa, bir minority fork olu\u015Fturabilir. Bir m\xFC\u015Fteri bir i\u015Flem olu\u015Fturdu\u011Funda, i\u015Flemin yaln\u0131zca minority fork var olan bir recentBlockhash'e ba\u015Fvurmas\u0131 m\xFCmk\xFCnd\xFCr. \u0130\u015Flem g\xF6nderildikten sonra, i\u015Flem i\u015Flenmeden \xF6nce cluster minority fork\u2019tan ge\xE7ebilir. Bu senaryoda, blockhash bulunamad\u0131\u011F\u0131 i\xE7in i\u015Flem b\u0131rak\u0131l\u0131r.

    Dropped due to Minority Fork (Before Processed)

    After a transaction is processed and before it is finalized (\u0130\u015Flem i\u015Flendikten sonra ama sonu\xE7lanmadan \xF6nce)

    Bir i\u015Flemin bir minority fork\u2019tan yeni bir Blockhash'e at\u0131fta bulunmas\u0131 durumunda, i\u015Flemin i\u015Flenmesi hala m\xFCmk\xFCnd\xFCr. Ancak bu durumda, leader taraf\u0131ndan minority fork\u2019ta i\u015Flenir. Bu leader, i\u015Flenmi\u015F i\u015Flemlerini a\u011F\u0131n geri kalan\u0131yla payla\u015Fmaya \xE7al\u0131\u015Ft\u0131\u011F\u0131nda, minority fork\u2019u tan\u0131mayan do\u011Frulay\u0131c\u0131lar\u0131n \xE7o\u011Funlu\u011Fu ile fikir birli\u011Fine varamaz. \u015Eu anda, i\u015Flem tamamlanamadan iptal edilecektir.

    Dropped due to Minority Fork (After Processed)

    Handling Dropped Transactions (D\xFC\u015Fen \u0130\u015Flemleri Y\xF6netme)

    RPC node\u2019lar i\u015Flemleri yeniden yay\u0131nlamaya \xE7al\u0131\u015Facak olsa da, kulland\u0131klar\u0131 algoritma geneldir ve genellikle belirli uygulamalar\u0131n ihtiya\xE7lar\u0131 i\xE7in uygun de\u011Fildir. A\u011F t\u0131kan\u0131kl\u0131\u011F\u0131 zamanlar\u0131na haz\u0131rlanmak i\xE7in uygulama geli\u015Ftiricilerin kendi yeniden yay\u0131n mant\u0131\u011F\u0131n\u0131 \xF6zelle\u015Ftirmesi gerekir. An In-Depth Look at sendTransaction (sendTransaction\u2019a Derinden Bak\u0131\u015F)

    An In-Depth Look at sendTransaction (sendTransaction\u2019a Derinden Bak\u0131\u015F)

    \u0130\u015Flem g\xF6nderme s\xF6z konusu oldu\u011Funda, sendTransaction RPC y\xF6ntemi, geli\u015Ftiricilerin kullanabilece\u011Fi birincil ara\xE7t\u0131r. sendTransaction, yaln\u0131zca bir i\u015Flemi bir client\u2019dan bir RPC node\u2019a ge\xE7irmekten sorumludur. Node transaction\u2019\u0131 al\u0131rsa, sendTransaction transaction\u2019\u0131 izlemek i\xE7in kullan\u0131labilecek transaction id d\xF6nd\xFCr\xFCr. Ba\u015Far\u0131l\u0131 bir yan\u0131t, i\u015Flemin cluster taraf\u0131ndan i\u015Flenip i\u015Flenmeyece\u011Fini veya sonland\u0131r\u0131laca\u011F\u0131n\u0131 g\xF6stermez.

    :::\u0130PUCU

    Parametreleri \xC7a\u011F\u0131rmak

    ',12),ea=e("li",null,[e("code",null,"transaction"),a(": "),e("code",null,"string"),a(" - encoded string olarak tam imzal\u0131 \u0130\u015Flem")],-1),aa=a("(optional) "),na=e("code",null,"configuration object",-1),ia=a("(yap\u0131land\u0131rma nesnesi): "),ra=e("code",null,"object",-1),la=e("li",null,[e("code",null,"skipPreflight"),a(": "),e("code",null,"boolean"),a(" - true ise, \xF6n kontrol i\u015Flem kontrollerini atlay\u0131n (varsay\u0131lan: false)")],-1),oa=a("(optional) "),ta=e("code",null,"preflightCommitment",-1),sa=a(": "),da=e("code",null,"string",-1),ca=a(" - Bank slotuna kar\u015F\u0131 \xF6n kontrol sim\xFClasyonlar\u0131 i\xE7in kullan\u0131lacak "),ma={href:"https://docs.solana.com/developing/clients/jsonrpc-api#configuring-state-commitment",target:"_blank",rel:"noopener noreferrer"},ha=a("Commitment"),_a=a('(taahh\xFCt) seviyesi (varsay\u0131lan: "kesinle\u015Fmi\u015F").'),ua=e("li",null,[a("(optional) "),e("code",null,"encoding"),a(": "),e("code",null,"string"),a('- \u0130\u015Flem verileri i\xE7in kullan\u0131lan kodlama. Ya "base58" (yava\u015F) ya da "base64". (varsay\u0131lan: "base58").')],-1),ka=e("li",null,[a("(optional) "),e("code",null,"maxRetries"),a(": "),e("code",null,"usize"),a(" - RPC node\u2019un i\u015Flemi leader'a g\xF6ndermeyi yeniden denemesi i\xE7in maksimum say\u0131. Bu parametre sa\u011Flanmazsa, RPC node, tamamlan\u0131ncaya veya blockhash s\xFCresi dolana kadar i\u015Flemi yeniden deneyecektir.")],-1),ba=e("h4",{id:"response",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#response","aria-hidden":"true"},"#"),a(" Response")],-1),pa=e("code",null,"transaction id",-1),ga=a(": "),ya=e("code",null,"string",-1),fa=a(" - Temel 58 kodlu string olarak i\u015Fleme g\xF6m\xFCl\xFC ilk i\u015Flem imzas\u0131. Bu i\u015Flem kimli\u011Fi, durum g\xFCncellemelerini yoklamak i\xE7in "),va={href:"https://docs.solana.com/developing/clients/jsonrpc-api#getsignaturestatuses",target:"_blank",rel:"noopener noreferrer"},za=a("getSignatureStatuses"),Ba=a(" ile kullan\u0131labilir. :::"),Pa=e("h2",{id:"customizing-rebroadcast-logic-rebroadcast-logic-ozellestirme",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#customizing-rebroadcast-logic-rebroadcast-logic-ozellestirme","aria-hidden":"true"},"#"),a(" Customizing Rebroadcast Logic (Rebroadcast Logic \xD6zelle\u015Ftirme)")],-1),Ta=a("Geli\u015Ftiriciler, kendi rebroadcasting logic\u2019ini geli\u015Ftirmek i\xE7in "),wa=e("code",null,"sendTransaction",-1),Ca=a("'\u0131n "),Ra=e("code",null,"maxRetries",-1),xa=a(" parametresinden yararlanmal\u0131d\u0131r. Sa\u011Flan\u0131rsa, "),La=e("code",null,"maxRetries",-1),Aa=a(", bir RPC nodu\u2019nun varsay\u0131lan yeniden deneme mant\u0131\u011F\u0131n\u0131 ge\xE7ersiz k\u0131larak geli\u015Ftiricilerin yeniden deneme s\xFCrecini "),Sa={href:"https://github.com/solana-labs/solana/blob/98707baec2385a4f7114d2167ef6dfb1406f954f/validator/src/main.rs#L1258-L1274",target:"_blank",rel:"noopener noreferrer"},ja=a("makul s\u0131n\u0131rlar"),Da=a(". i\xE7inde manuel olarak kontrol etmesine olanak tan\u0131r."),Ua=a("\u0130\u015Flemleri manuel olarak yeniden denemek i\xE7in yayg\u0131n bir kal\u0131p, "),Ha={href:"https://docs.solana.com/developing/clients/jsonrpc-api#getlatestblockhash",target:"_blank",rel:"noopener noreferrer"},Na=a("getLatestBlockhash"),Va=a("'ten gelen "),Ga=e("code",null,"lastValidBlockHeight",-1),Ya=a("'\u0131n ge\xE7ici olarak depolanmas\u0131n\u0131 i\xE7erir. Bir uygulama sakland\u0131ktan sonra "),Ja={href:"https://docs.solana.com/developing/clients/jsonrpc-api#getblockheight",target:"_blank",rel:"noopener noreferrer"},Fa=a("k\xFCmenin blok y\xFCksekli\u011Fin"),Ea=a(" sorguayabilir ve i\u015Flemi uygun bir aral\u0131kta manuel olarak yeniden deneyebilir. A\u011F t\u0131kan\u0131kl\u0131\u011F\u0131 zamanlar\u0131nda, "),Ia=e("code",null,"maxRetries",-1),Ma=a("'i 0'a ayarlamak ve \xF6zel bir algoritma arac\u0131l\u0131\u011F\u0131yla manuel olarak yeniden yay\u0131nlamak avantajl\u0131d\u0131r. Baz\u0131 uygulamalar "),Oa={href:"https://en.wikipedia.org/wiki/Exponential_backoff",target:"_blank",rel:"noopener noreferrer"},Wa=a("\xFCstel bir geri alma"),Za=a(" algoritmas\u0131 kullanabilirken, "),Ka={href:"https://www.mango.markets/",target:"_blank",rel:"noopener noreferrer"},qa=a("Mango"),Qa=a(" gibi di\u011Ferleri, belirli bir zaman a\u015F\u0131m\u0131 ger\xE7ekle\u015Fene kadar i\u015Flemleri sabit bir aral\u0131kta s\xFCrekli olarak "),Xa={href:"https://github.com/blockworks-foundation/mango-ui/blob/b6abfc6c13b71fc17ebbe766f50b8215fa1ec54f/src/utils/send.tsx#L713",target:"_blank",rel:"noopener noreferrer"},$a=a("yeniden g\xF6ndermeyi"),en=a(" tercih eder."),an=r(`
    while (blockheight < lastValidBlockHeight) {
       connection.sendRawTransaction(rawTransaction, {
         skipPreflight: true,
       });
    diff --git a/docs/.vuepress/dist/assets/retrying-transactions.html.8a1dcb9d.js b/docs/.vuepress/dist/assets/retrying-transactions.html.cfeea4ac.js
    similarity index 99%
    rename from docs/.vuepress/dist/assets/retrying-transactions.html.8a1dcb9d.js
    rename to docs/.vuepress/dist/assets/retrying-transactions.html.cfeea4ac.js
    index 8a67858a2..e031f44b9 100644
    --- a/docs/.vuepress/dist/assets/retrying-transactions.html.8a1dcb9d.js
    +++ b/docs/.vuepress/dist/assets/retrying-transactions.html.cfeea4ac.js
    @@ -1,4 +1,4 @@
    -import{_ as k,r as t,o as p,c as u,a,b as s,w as o,F as d,d as n,e as i}from"./app.cfdf84e7.js";var m="/assets/tx-journey.dd6310be.png",h="/assets/tpu-jito-labs.8bb32fb6.png",b="/assets/dropped-via-rpc-pool.8d1ce9af.png",g="/assets/dropped-minority-fork-pre-process.555653e1.png",_="/assets/dropped-minority-fork-post-process.48c3c955.png";const f={},y=a("h1",{id:"mengulang-kembali-transaksi",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#mengulang-kembali-transaksi","aria-hidden":"true"},"#"),n(" Mengulang Kembali Transaksi")],-1),w=n("Pada beberapa kesempatan, transaksi yang terlihat valid mungkin dibatalkan sebelum dimasukkan ke dalam blok. Ini paling sering terjadi saat ada kemacetan jaringan, ketika node RPC gagal melakukan rebroadcast transaksi ke "),P={href:"https://docs.solana.com/terminology#leader",target:"_blank",rel:"noopener noreferrer"},j=n("leader"),v=n(". Bagi end-user, mungkin transaksi mereka tampak seolah-olah hilang sama sekali. Disaat node RPC telah dilengkapi dengan algoritma generic rebroadcasting, pengembang aplikasi juga mampu mengembangkan logika rebroadcasting kustom mereka sendiri."),S=i('

    Fakta

    Lembar Fakta

    • Node RPC akan mencoba untuk melakukan rebroadcast ulang transaksi menggunakan algoritma generik
    • Pengembang aplikasi dapat menerapkan logika penyiaran ulang kustom mereka sendiri
    • Pengembang dapat memanfaatkan parameter maxRetries pada metode JSON-RPC sendTransaction
    • Pengembang harus mengaktifkan pemeriksaan sebelum broadcast untuk mendeteksi kesalahan sebelum transaksi diajukan
    • Sebelum menandatangani ulang transaksi apa pun, sangat penting untuk memastikan bahwa blockhash transaksi awal telah kedaluwarsa

    Perjalanan dari sebuah Transaksi

    Bagaimana Klien Mengirimkan Transaksi

    Di Solana, tidak ada konsep mempool. Semua transaksi, baik itu dimulai oleh program atau oleh end-user, secara efisien diarahkan ke leader sehingga mereka dapat diproses menjadi block. Ada dua cara utama di mana transaksi dapat dikirim ke leader:

    ',5),T=n("Dengan proxy melalui server RPC dan "),R={href:"https://docs.solana.com/developing/clients/jsonrpc-api#sendtransaction",target:"_blank",rel:"noopener noreferrer"},C=n("sendTransaction"),x=n(" metode JSON-RPC"),B=n("Langsung ke leader melalui "),L={href:"https://docs.rs/solana-client/1.7.3/solana_client/tpu_client/index.html",target:"_blank",rel:"noopener noreferrer"},D=n("TPU Client"),K=a("p",null,[n("Sebagian besar end-user akan mengirimkan transaksi melalui server RPC. Ketika klien mengajukan transaksi, node RPC penerima pada gilirannya akan mencoba untuk melakukan broadcast transaksi ke leader saat ini dan berikutnya. Sampai transaksi diproses oleh leader, tidak ada catatan transaksi di luar yang diketahui oleh klien dan node RPC yang mengirimkan. Dalam kasus TPU client, rebroadcast dan leader forwarding ditangani sepenuhnya oleh perangkat lunak klien. "),a("img",{src:m,alt:"Perjalanan Transaksi"})],-1),U=a("h3",{id:"bagaimana-node-rpc-melakukan-broadcast-transaksi",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#bagaimana-node-rpc-melakukan-broadcast-transaksi","aria-hidden":"true"},"#"),n(" Bagaimana Node RPC melakukan broadcast Transaksi")],-1),J=n("Setelah node RPC menerima transaksi melalui "),M=a("code",null,"sendTransaction",-1),V=n(", node tersebut akan mengubah transaksi menjadi paket "),A={href:"https://en.wikipedia.org/wiki/User_Datagram_Protocol",target:"_blank",rel:"noopener noreferrer"},H=n("UDP"),I=n(" sebelum meneruskannya ke leader terkait. UDP memungkinkan validator untuk berkomunikasi dengan cepat satu sama lain, tetapi tidak memberikan jaminan apa pun terkait pengiriman transaksi."),N=n("Karena jadwal leader Solana diketahui sebelum setiap "),F={href:"https://docs.solana.com/terminology#epoch",target:"_blank",rel:"noopener noreferrer"},E=n("epocj"),O=n(" (~2 hari), node RPC akan menyiarkan transaksinya langsung ke pemimpin saat ini dan selanjutnya. Ini berbeda dengan gossip protocol lain seperti Ethereum yang menyebarkan transaksi secara acak dan luas di seluruh jaringan. Secara default, node RPC akan mencoba meneruskan transaksi ke leader setiap dua detik hingga transaksi diselesaikan atau hash block transaksi kedaluwarsa (150 block atau ~ 1 menit 19 detik pada saat penulisan ini). Jika ukuran antrian rebroadcast yang belum diselesaikan lebih besar dari "),z={href:"https://github.com/solana-labs/solana/blob/bfbbc53dac93b3a5c6be9b4b65f679fdb13e41d9/send-transaction-service/src/send_transaction_service.rs#L20",target:"_blank",rel:"noopener noreferrer"},G=n("10.000 transaksi"),q=n(", transaksi yang baru dikirimkan tidak akan diproses. Ada "),W={href:"https://github.com/solana-labs/solana/blob/bfbbc53dac93b3a5c6be9b4b65f679fdb13e41d9/validator/src/main.rs#L1172",target:"_blank",rel:"noopener noreferrer"},Y=n("argumen"),Q=n(" command-line yang dapat disesuaikan oleh operator RPC untuk mengubah default behaviour dari logika percobaan ulang ini."),X=n("Saat node RPC melakukan broadcast transaksi, node tersebut akan mencoba meneruskan transaksi ke "),Z={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/validator.rs#L867",target:"_blank",rel:"noopener noreferrer"},$=n("Transaction Processing Unit (TPU)"),aa=n(" leader . TPU memproses transaksi dalam lima fase berbeda:"),na={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/fetch_stage.rs#L21",target:"_blank",rel:"noopener noreferrer"},sa=n("Fetch Stage"),ea={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/tpu.rs#L91",target:"_blank",rel:"noopener noreferrer"},ta=n("SigVerify Stage"),oa={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/banking_stage.rs#L249",target:"_blank",rel:"noopener noreferrer"},ia=n("Banking Stage"),ra={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/poh/src/poh_service.rs",target:"_blank",rel:"noopener noreferrer"},la=n("Proof of History Service"),ca={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/tpu.rs#L136",target:"_blank",rel:"noopener noreferrer"},ka=n("Broadcast Stage"),pa=a("p",null,[a("img",{src:h,alt:"Ringkasan TPU"}),a("small",{style:{display:"block","text-align":"center"}},"Gambar Atas Perkenan Jito Labs")],-1),ua=a("p",null,"Dari kelima fase ini, Fetch Stage bertujuan untuk menerima transaksi. Dalam Fetch Stage, validator akan mengkategorikan transaksi yang masuk berdasarkan tiga port berikut:",-1),da={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/gossip/src/contact_info.rs#L27",target:"_blank",rel:"noopener noreferrer"},ma=n("tpu"),ha=n(" menangani transaksi reguler seperti transfer token, NFT mint, dan instruksi program"),ba={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/gossip/src/contact_info.rs#L31",target:"_blank",rel:"noopener noreferrer"},ga=n("tpu_vote"),_a=n(" berfokus secara eksklusif pada transaksi pemungutan suara"),fa={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/gossip/src/contact_info.rs#L29",target:"_blank",rel:"noopener noreferrer"},ya=n("tpu_forwards"),wa=n(" meneruskan paket yang belum diproses ke leader berikutnya jika leader saat ini tidak dapat memproses semua transaksi"),Pa=n("Untuk informasi lebih lanjut tentang TPU, silakan lihat "),ja={href:"https://jito-labs.medium.com/solana-validator-101-transaction-processing-90bcdc271143",target:"_blank",rel:"noopener noreferrer"},va=n("tulisan luar biasa ini oleh Jito Labs"),Sa=n("."),Ta=a("h2",{id:"bagaimana-transaksi-dapat-dibatalkan",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#bagaimana-transaksi-dapat-dibatalkan","aria-hidden":"true"},"#"),n(" Bagaimana Transaksi dapat dibatalkan")],-1),Ra=a("p",null,"Sepanjang perjalanan transaksi, ada beberapa skenario di mana transaksi dapat secara tidak sengaja dibatalkan dari jaringan.",-1),Ca=a("h3",{id:"sebelum-transaksi-diproses",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#sebelum-transaksi-diproses","aria-hidden":"true"},"#"),n(" Sebelum transaksi diproses")],-1),xa=n("Jika jaringan menghentikan sebuah transaksi, kemungkinan besar jaringan akan melakukannya sebelum transaksi diproses oleh leader. UDP "),Ba={href:"https://en.wikipedia.org/wiki/Packet_loss",target:"_blank",rel:"noopener noreferrer"},La=n("packet loss"),Da=n(" adalah alasan paling sederhana mengapa hal ini dapat terjadi. Selama masa beban jaringan yang intens, validator juga mungkin kewalahan oleh banyaknya transaksi yang perlu diproses. Meskipun validator telah diatur untuk meneruskan surplus transaksi melalui "),Ka=a("code",null,"tpu_forwards",-1),Ua=n(", ada batasan jumlah data yang dapat di"),Ja={href:"https://github.com/solana-labs/solana/blob/master/core/src/banking_stage.rs#L389",target:"_blank",rel:"noopener noreferrer"},Ma=n("forward"),Va=n(". Selanjutnya, tiap forward hanya terbatas pada satu hop antara validator. Artinya, transaksi yang diterima pada port "),Aa=a("code",null,"tpu_forwards",-1),Ha=n(" tidak diteruskan ke validator lain."),Ia=n("Ada juga dua alasan yang kurang diketahui mengapa suatu transaksi dapat dibatalkan sebelum diproses. Skenario pertama melibatkan transaksi yang dikirimkan melalui RPC pool. Kadang-kadang, bagian dari RPC pool bisa ada di depan yang lainnya yang merupakan bagian RPC pool yang sama. Ini dapat menyebabkan masalah ketika node dalam pool yang sama perlu bekerja sama. Dalam contoh ini, "),Na={href:"https://docs.solana.com/developing/programming-model/transactions#recent-blockhash",target:"_blank",rel:"noopener noreferrer"},Fa=n("recentBlockhash"),Ea=n(" dari suatu transaksi diambil dari bagian depan pool (Backend A). Ketika transaksi dikirimkan ke bagian pool yang tertinggal (Backend B), node tidak akan mengenali blockhash tadi dan akan membatalkan transaksi. Ini dapat dideteksi saat pengiriman transaksi jika developer mengaktifkan "),Oa={href:"https://docs.solana.com/developing/clients/jsonrpc-api#sendtransaction",target:"_blank",rel:"noopener noreferrer"},za=n("preflight checks"),Ga=n(" di "),qa=a("code",null,"sendTransaction",-1),Wa=n("."),Ya=i('

    Dropped melalui RPC Pool

    Percabangan jaringan sementara juga dapat mengakibatkan transaksi dibatalkan. Jika validator lambat untuk memutar ulang bloknya dalam Banking Stage, ia kemudian mungkin akan membuat cabang kecil (minority fork). Saat klien membuat transaksi, transaksi mungkin merujuk ke recentBlockhash yang hanya ada di cabang kecil. Setelah transaksi dikirimkan, cluster kemudian dapat beralih dari cabang kecilnya sebelum transaksi diproses. Dalam skenario ini, transaksi dibatalkan karena blockhash tidak ditemukan.

    Dibatalkan karena Cabang Kecil/Minority Fork (Sebelum Diproses)

    Setelah transaksi diproses dan sebelum diselesaikan

    Jika transaksi mereferensikan recentBlockhash dari cabang kecil, transaksi masih mungkin diproses. Dalam hal ini, bagaimanapun, itu akan diproses oleh leader di cabang kecil. Ketika leader ini mencoba untuk membagikan transaksi yang diproses dengan seluruh jaringan, ia akan gagal mencapai kesepakatan dengan mayoritas validator yang tidak mengenali cabang kecil. Pada saat ini, transaksi akan dibatalkan sebelum dapat diselesaikan.

    Dibatalkan karena Cabang Kecil/Minority Fork (Setelah Diproses)

    Menangani Transaksi yang dibatalkan

    Meskipun node RPC akan mencoba untuk melakukan rebroadcast transaksi, algoritma yang mereka gunakan bersifat umum dan seringkali tidak cocok untuk kebutuhan aplikasi tertentu. Untuk mempersiapkan apabila terjadi kemacetan jaringan, pengembang aplikasi harus dapat menyesuaikan logika rebroadcast mereka sendiri.

    Menelusuri lebih dalam mengenai sendTransaction

    Dalam hal mengirimkan transaksi, metode RPC sendTransaction adalah alat utama yang tersedia untuk pengembang. sendTransaction hanya bertanggung jawab untuk menyampaikan transaksi dari klien ke node RPC. Jika node menerima transaksi, sendTransaction akan mengembalikan id transaksi yang dapat digunakan untuk melacak transaksi. Respons yang berhasil tidak menunjukkan apakah transaksi akan diproses atau diselesaikan oleh cluster.

    ',10),Qa={class:"custom-container tip"},Xa=a("p",{class:"custom-container-title"},"TIP",-1),Za=a("h4",{id:"request-parameter",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#request-parameter","aria-hidden":"true"},"#"),n(" Request Parameter")],-1),$a=a("li",null,[a("code",null,"transaction"),n(": "),a("code",null,"string"),n(" - Transaksi yang sepenuhnya ditandatangani, sebagai string yang di encode")],-1),an=n("(opsional) "),nn=a("code",null,"configuration object",-1),sn=n(": "),en=a("code",null,"object",-1),tn=a("li",null,[a("code",null,"skipPreflight"),n(": "),a("code",null,"boolean"),n(" - jika true, lewati pemeriksaan preflight dari transaksi (default: false)")],-1),on=n("(opsional) "),rn=a("code",null,"preflightCommitment",-1),ln=n(": "),cn=a("code",null,"string",-1),kn=n(" - "),pn={href:"https://docs.solana.com/developing/clients/jsonrpc-api#configuring-state-commitment",target:"_blank",rel:"noopener noreferrer"},un=n("Komitmen"),dn=n(' level yang akan digunakan untuk simulasi preflight terhadap slot bank (default: "finalized").'),mn=a("li",null,[n("(opsional) "),a("code",null,"encoding"),n(": "),a("code",null,"string"),n(' - Encoding yang digunakan untuk data transaksi. Dapat menggunakan "base58" (lambat), atau "base64". (default: "base58").')],-1),hn=a("li",null,[n("(opsional) "),a("code",null,"maxRetries"),n(": "),a("code",null,"usize"),n(" - Jumlah maksimum percobaan node RPC mengirimkan ulang transaksi ke leader. Jika parameter ini tidak disediakan, node RPC akan mencoba kembali transaksi hingga diselesaikan atau hingga blockhash kedaluwarsa.")],-1),bn=a("h4",{id:"response",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#response","aria-hidden":"true"},"#"),n(" Response")],-1),gn=a("code",null,"transaction id",-1),_n=n(": "),fn=a("code",null,"string",-1),yn=n(" - Tanda tangan transaksi pertama yang disematkan dalam transaksi, sebagai string dengan encode base-58. ID transaksi ini dapat digunakan dengan "),wn={href:"https://docs.solana.com/developing/clients/jsonrpc-api#getsignaturestatuses",target:"_blank",rel:"noopener noreferrer"},Pn=n("getSignatureStatuses"),jn=n(" untuk melakukan polling untuk pembaruan status."),vn=a("h2",{id:"menyesuaikan-logika-rebroadcast",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#menyesuaikan-logika-rebroadcast","aria-hidden":"true"},"#"),n(" Menyesuaikan Logika Rebroadcast")],-1),Sn=n("Untuk mengembangkan logika rebroadcast mereka sendiri, pengembang harus memanfaatkan parameter "),Tn=a("code",null,"maxRetries",-1),Rn=n(),Cn=a("code",null,"sendTransaction",-1),xn=n(". Jika disediakan, "),Bn=a("code",null,"maxRetries",-1),Ln=n(" akan menggantikan logika coba ulang default node RPC, yang memungkinkan developer mengontrol proses coba lagi secara manual "),Dn={href:"https://github.com/solana-labs/solana/blob/98707baec2385a4f7114d2167ef6dfb1406f954f/validator/src/main.rs#L1258-L1274",target:"_blank",rel:"noopener noreferrer"},Kn=n("dalam batas yang wajar"),Un=n("."),Jn=n("Pada umumnya, percobaan kembali transaksi secara manual melibatkan penyimpanan "),Mn=a("code",null,"lastValidBlockHeight",-1),Vn=n(" secara sementara yang berasal dari "),An={href:"https://docs.solana.com/developing/clients/jsonrpc-api#getlatestblockhash",target:"_blank",rel:"noopener noreferrer"},Hn=n("getLatestBlockhash"),In=n(". Setelah disimpan, aplikasi kemudian dapat "),Nn={href:"https://docs.solana.com/developing/clients/jsonrpc-api#getblockheight",target:"_blank",rel:"noopener noreferrer"},Fn=n("melakukan polling ketinggian block cluster"),En=n(" dan mencoba kembali transaksi secara manual dengan interval yang sesuai. Pada saat jaringan macet, akan lebih baik jika menyetel "),On=a("code",null,"maxRetries",-1),zn=n(" ke 0 dan melakukan rebroadcast ulang secara manual melalui algoritma khusus. Di saat beberapa aplikasi mungkin menggunakan algoritma "),Gn={href:"https://en.wikipedia.org/wiki/Exponential_backoff",target:"_blank",rel:"noopener noreferrer"},qn=n("exponential backoff"),Wn=n(", yang lain seperti "),Yn={href:"https://www.mango.markets/",target:"_blank",rel:"noopener noreferrer"},Qn=n("Mango"),Xn=n(" memilih untuk "),Zn={href:"https://github.com/blockworks-foundation/mango-ui/blob/b6abfc6c13b71fc17ebbe766f50b8215fa1ec54f/src/utils/send.tsx#L713",target:"_blank",rel:"noopener noreferrer"},$n=n("terus mengirimkan ulang"),as=n(" transaksi pada interval konstan hingga beberapa waktu habis."),ns=a("div",{class:"language-typescript ext-ts line-numbers-mode"},[a("pre",{class:"language-typescript"},[a("code",null,[a("span",{class:"token keyword"},"import"),n(),a("span",{class:"token punctuation"},"{"),n(` +import{_ as k,r as t,o as p,c as u,a,b as s,w as o,F as d,d as n,e as i}from"./app.2fbb9e96.js";var m="/assets/tx-journey.dd6310be.png",h="/assets/tpu-jito-labs.8bb32fb6.png",b="/assets/dropped-via-rpc-pool.8d1ce9af.png",g="/assets/dropped-minority-fork-pre-process.555653e1.png",_="/assets/dropped-minority-fork-post-process.48c3c955.png";const f={},y=a("h1",{id:"mengulang-kembali-transaksi",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#mengulang-kembali-transaksi","aria-hidden":"true"},"#"),n(" Mengulang Kembali Transaksi")],-1),w=n("Pada beberapa kesempatan, transaksi yang terlihat valid mungkin dibatalkan sebelum dimasukkan ke dalam blok. Ini paling sering terjadi saat ada kemacetan jaringan, ketika node RPC gagal melakukan rebroadcast transaksi ke "),P={href:"https://docs.solana.com/terminology#leader",target:"_blank",rel:"noopener noreferrer"},j=n("leader"),v=n(". Bagi end-user, mungkin transaksi mereka tampak seolah-olah hilang sama sekali. Disaat node RPC telah dilengkapi dengan algoritma generic rebroadcasting, pengembang aplikasi juga mampu mengembangkan logika rebroadcasting kustom mereka sendiri."),S=i('

    Fakta

    Lembar Fakta

    • Node RPC akan mencoba untuk melakukan rebroadcast ulang transaksi menggunakan algoritma generik
    • Pengembang aplikasi dapat menerapkan logika penyiaran ulang kustom mereka sendiri
    • Pengembang dapat memanfaatkan parameter maxRetries pada metode JSON-RPC sendTransaction
    • Pengembang harus mengaktifkan pemeriksaan sebelum broadcast untuk mendeteksi kesalahan sebelum transaksi diajukan
    • Sebelum menandatangani ulang transaksi apa pun, sangat penting untuk memastikan bahwa blockhash transaksi awal telah kedaluwarsa

    Perjalanan dari sebuah Transaksi

    Bagaimana Klien Mengirimkan Transaksi

    Di Solana, tidak ada konsep mempool. Semua transaksi, baik itu dimulai oleh program atau oleh end-user, secara efisien diarahkan ke leader sehingga mereka dapat diproses menjadi block. Ada dua cara utama di mana transaksi dapat dikirim ke leader:

    ',5),T=n("Dengan proxy melalui server RPC dan "),R={href:"https://docs.solana.com/developing/clients/jsonrpc-api#sendtransaction",target:"_blank",rel:"noopener noreferrer"},C=n("sendTransaction"),x=n(" metode JSON-RPC"),B=n("Langsung ke leader melalui "),L={href:"https://docs.rs/solana-client/1.7.3/solana_client/tpu_client/index.html",target:"_blank",rel:"noopener noreferrer"},D=n("TPU Client"),K=a("p",null,[n("Sebagian besar end-user akan mengirimkan transaksi melalui server RPC. Ketika klien mengajukan transaksi, node RPC penerima pada gilirannya akan mencoba untuk melakukan broadcast transaksi ke leader saat ini dan berikutnya. Sampai transaksi diproses oleh leader, tidak ada catatan transaksi di luar yang diketahui oleh klien dan node RPC yang mengirimkan. Dalam kasus TPU client, rebroadcast dan leader forwarding ditangani sepenuhnya oleh perangkat lunak klien. "),a("img",{src:m,alt:"Perjalanan Transaksi"})],-1),U=a("h3",{id:"bagaimana-node-rpc-melakukan-broadcast-transaksi",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#bagaimana-node-rpc-melakukan-broadcast-transaksi","aria-hidden":"true"},"#"),n(" Bagaimana Node RPC melakukan broadcast Transaksi")],-1),J=n("Setelah node RPC menerima transaksi melalui "),M=a("code",null,"sendTransaction",-1),V=n(", node tersebut akan mengubah transaksi menjadi paket "),A={href:"https://en.wikipedia.org/wiki/User_Datagram_Protocol",target:"_blank",rel:"noopener noreferrer"},H=n("UDP"),I=n(" sebelum meneruskannya ke leader terkait. UDP memungkinkan validator untuk berkomunikasi dengan cepat satu sama lain, tetapi tidak memberikan jaminan apa pun terkait pengiriman transaksi."),N=n("Karena jadwal leader Solana diketahui sebelum setiap "),F={href:"https://docs.solana.com/terminology#epoch",target:"_blank",rel:"noopener noreferrer"},E=n("epocj"),O=n(" (~2 hari), node RPC akan menyiarkan transaksinya langsung ke pemimpin saat ini dan selanjutnya. Ini berbeda dengan gossip protocol lain seperti Ethereum yang menyebarkan transaksi secara acak dan luas di seluruh jaringan. Secara default, node RPC akan mencoba meneruskan transaksi ke leader setiap dua detik hingga transaksi diselesaikan atau hash block transaksi kedaluwarsa (150 block atau ~ 1 menit 19 detik pada saat penulisan ini). Jika ukuran antrian rebroadcast yang belum diselesaikan lebih besar dari "),z={href:"https://github.com/solana-labs/solana/blob/bfbbc53dac93b3a5c6be9b4b65f679fdb13e41d9/send-transaction-service/src/send_transaction_service.rs#L20",target:"_blank",rel:"noopener noreferrer"},G=n("10.000 transaksi"),q=n(", transaksi yang baru dikirimkan tidak akan diproses. Ada "),W={href:"https://github.com/solana-labs/solana/blob/bfbbc53dac93b3a5c6be9b4b65f679fdb13e41d9/validator/src/main.rs#L1172",target:"_blank",rel:"noopener noreferrer"},Y=n("argumen"),Q=n(" command-line yang dapat disesuaikan oleh operator RPC untuk mengubah default behaviour dari logika percobaan ulang ini."),X=n("Saat node RPC melakukan broadcast transaksi, node tersebut akan mencoba meneruskan transaksi ke "),Z={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/validator.rs#L867",target:"_blank",rel:"noopener noreferrer"},$=n("Transaction Processing Unit (TPU)"),aa=n(" leader . TPU memproses transaksi dalam lima fase berbeda:"),na={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/fetch_stage.rs#L21",target:"_blank",rel:"noopener noreferrer"},sa=n("Fetch Stage"),ea={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/tpu.rs#L91",target:"_blank",rel:"noopener noreferrer"},ta=n("SigVerify Stage"),oa={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/banking_stage.rs#L249",target:"_blank",rel:"noopener noreferrer"},ia=n("Banking Stage"),ra={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/poh/src/poh_service.rs",target:"_blank",rel:"noopener noreferrer"},la=n("Proof of History Service"),ca={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/tpu.rs#L136",target:"_blank",rel:"noopener noreferrer"},ka=n("Broadcast Stage"),pa=a("p",null,[a("img",{src:h,alt:"Ringkasan TPU"}),a("small",{style:{display:"block","text-align":"center"}},"Gambar Atas Perkenan Jito Labs")],-1),ua=a("p",null,"Dari kelima fase ini, Fetch Stage bertujuan untuk menerima transaksi. Dalam Fetch Stage, validator akan mengkategorikan transaksi yang masuk berdasarkan tiga port berikut:",-1),da={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/gossip/src/contact_info.rs#L27",target:"_blank",rel:"noopener noreferrer"},ma=n("tpu"),ha=n(" menangani transaksi reguler seperti transfer token, NFT mint, dan instruksi program"),ba={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/gossip/src/contact_info.rs#L31",target:"_blank",rel:"noopener noreferrer"},ga=n("tpu_vote"),_a=n(" berfokus secara eksklusif pada transaksi pemungutan suara"),fa={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/gossip/src/contact_info.rs#L29",target:"_blank",rel:"noopener noreferrer"},ya=n("tpu_forwards"),wa=n(" meneruskan paket yang belum diproses ke leader berikutnya jika leader saat ini tidak dapat memproses semua transaksi"),Pa=n("Untuk informasi lebih lanjut tentang TPU, silakan lihat "),ja={href:"https://jito-labs.medium.com/solana-validator-101-transaction-processing-90bcdc271143",target:"_blank",rel:"noopener noreferrer"},va=n("tulisan luar biasa ini oleh Jito Labs"),Sa=n("."),Ta=a("h2",{id:"bagaimana-transaksi-dapat-dibatalkan",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#bagaimana-transaksi-dapat-dibatalkan","aria-hidden":"true"},"#"),n(" Bagaimana Transaksi dapat dibatalkan")],-1),Ra=a("p",null,"Sepanjang perjalanan transaksi, ada beberapa skenario di mana transaksi dapat secara tidak sengaja dibatalkan dari jaringan.",-1),Ca=a("h3",{id:"sebelum-transaksi-diproses",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#sebelum-transaksi-diproses","aria-hidden":"true"},"#"),n(" Sebelum transaksi diproses")],-1),xa=n("Jika jaringan menghentikan sebuah transaksi, kemungkinan besar jaringan akan melakukannya sebelum transaksi diproses oleh leader. UDP "),Ba={href:"https://en.wikipedia.org/wiki/Packet_loss",target:"_blank",rel:"noopener noreferrer"},La=n("packet loss"),Da=n(" adalah alasan paling sederhana mengapa hal ini dapat terjadi. Selama masa beban jaringan yang intens, validator juga mungkin kewalahan oleh banyaknya transaksi yang perlu diproses. Meskipun validator telah diatur untuk meneruskan surplus transaksi melalui "),Ka=a("code",null,"tpu_forwards",-1),Ua=n(", ada batasan jumlah data yang dapat di"),Ja={href:"https://github.com/solana-labs/solana/blob/master/core/src/banking_stage.rs#L389",target:"_blank",rel:"noopener noreferrer"},Ma=n("forward"),Va=n(". Selanjutnya, tiap forward hanya terbatas pada satu hop antara validator. Artinya, transaksi yang diterima pada port "),Aa=a("code",null,"tpu_forwards",-1),Ha=n(" tidak diteruskan ke validator lain."),Ia=n("Ada juga dua alasan yang kurang diketahui mengapa suatu transaksi dapat dibatalkan sebelum diproses. Skenario pertama melibatkan transaksi yang dikirimkan melalui RPC pool. Kadang-kadang, bagian dari RPC pool bisa ada di depan yang lainnya yang merupakan bagian RPC pool yang sama. Ini dapat menyebabkan masalah ketika node dalam pool yang sama perlu bekerja sama. Dalam contoh ini, "),Na={href:"https://docs.solana.com/developing/programming-model/transactions#recent-blockhash",target:"_blank",rel:"noopener noreferrer"},Fa=n("recentBlockhash"),Ea=n(" dari suatu transaksi diambil dari bagian depan pool (Backend A). Ketika transaksi dikirimkan ke bagian pool yang tertinggal (Backend B), node tidak akan mengenali blockhash tadi dan akan membatalkan transaksi. Ini dapat dideteksi saat pengiriman transaksi jika developer mengaktifkan "),Oa={href:"https://docs.solana.com/developing/clients/jsonrpc-api#sendtransaction",target:"_blank",rel:"noopener noreferrer"},za=n("preflight checks"),Ga=n(" di "),qa=a("code",null,"sendTransaction",-1),Wa=n("."),Ya=i('

    Dropped melalui RPC Pool

    Percabangan jaringan sementara juga dapat mengakibatkan transaksi dibatalkan. Jika validator lambat untuk memutar ulang bloknya dalam Banking Stage, ia kemudian mungkin akan membuat cabang kecil (minority fork). Saat klien membuat transaksi, transaksi mungkin merujuk ke recentBlockhash yang hanya ada di cabang kecil. Setelah transaksi dikirimkan, cluster kemudian dapat beralih dari cabang kecilnya sebelum transaksi diproses. Dalam skenario ini, transaksi dibatalkan karena blockhash tidak ditemukan.

    Dibatalkan karena Cabang Kecil/Minority Fork (Sebelum Diproses)

    Setelah transaksi diproses dan sebelum diselesaikan

    Jika transaksi mereferensikan recentBlockhash dari cabang kecil, transaksi masih mungkin diproses. Dalam hal ini, bagaimanapun, itu akan diproses oleh leader di cabang kecil. Ketika leader ini mencoba untuk membagikan transaksi yang diproses dengan seluruh jaringan, ia akan gagal mencapai kesepakatan dengan mayoritas validator yang tidak mengenali cabang kecil. Pada saat ini, transaksi akan dibatalkan sebelum dapat diselesaikan.

    Dibatalkan karena Cabang Kecil/Minority Fork (Setelah Diproses)

    Menangani Transaksi yang dibatalkan

    Meskipun node RPC akan mencoba untuk melakukan rebroadcast transaksi, algoritma yang mereka gunakan bersifat umum dan seringkali tidak cocok untuk kebutuhan aplikasi tertentu. Untuk mempersiapkan apabila terjadi kemacetan jaringan, pengembang aplikasi harus dapat menyesuaikan logika rebroadcast mereka sendiri.

    Menelusuri lebih dalam mengenai sendTransaction

    Dalam hal mengirimkan transaksi, metode RPC sendTransaction adalah alat utama yang tersedia untuk pengembang. sendTransaction hanya bertanggung jawab untuk menyampaikan transaksi dari klien ke node RPC. Jika node menerima transaksi, sendTransaction akan mengembalikan id transaksi yang dapat digunakan untuk melacak transaksi. Respons yang berhasil tidak menunjukkan apakah transaksi akan diproses atau diselesaikan oleh cluster.

    ',10),Qa={class:"custom-container tip"},Xa=a("p",{class:"custom-container-title"},"TIP",-1),Za=a("h4",{id:"request-parameter",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#request-parameter","aria-hidden":"true"},"#"),n(" Request Parameter")],-1),$a=a("li",null,[a("code",null,"transaction"),n(": "),a("code",null,"string"),n(" - Transaksi yang sepenuhnya ditandatangani, sebagai string yang di encode")],-1),an=n("(opsional) "),nn=a("code",null,"configuration object",-1),sn=n(": "),en=a("code",null,"object",-1),tn=a("li",null,[a("code",null,"skipPreflight"),n(": "),a("code",null,"boolean"),n(" - jika true, lewati pemeriksaan preflight dari transaksi (default: false)")],-1),on=n("(opsional) "),rn=a("code",null,"preflightCommitment",-1),ln=n(": "),cn=a("code",null,"string",-1),kn=n(" - "),pn={href:"https://docs.solana.com/developing/clients/jsonrpc-api#configuring-state-commitment",target:"_blank",rel:"noopener noreferrer"},un=n("Komitmen"),dn=n(' level yang akan digunakan untuk simulasi preflight terhadap slot bank (default: "finalized").'),mn=a("li",null,[n("(opsional) "),a("code",null,"encoding"),n(": "),a("code",null,"string"),n(' - Encoding yang digunakan untuk data transaksi. Dapat menggunakan "base58" (lambat), atau "base64". (default: "base58").')],-1),hn=a("li",null,[n("(opsional) "),a("code",null,"maxRetries"),n(": "),a("code",null,"usize"),n(" - Jumlah maksimum percobaan node RPC mengirimkan ulang transaksi ke leader. Jika parameter ini tidak disediakan, node RPC akan mencoba kembali transaksi hingga diselesaikan atau hingga blockhash kedaluwarsa.")],-1),bn=a("h4",{id:"response",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#response","aria-hidden":"true"},"#"),n(" Response")],-1),gn=a("code",null,"transaction id",-1),_n=n(": "),fn=a("code",null,"string",-1),yn=n(" - Tanda tangan transaksi pertama yang disematkan dalam transaksi, sebagai string dengan encode base-58. ID transaksi ini dapat digunakan dengan "),wn={href:"https://docs.solana.com/developing/clients/jsonrpc-api#getsignaturestatuses",target:"_blank",rel:"noopener noreferrer"},Pn=n("getSignatureStatuses"),jn=n(" untuk melakukan polling untuk pembaruan status."),vn=a("h2",{id:"menyesuaikan-logika-rebroadcast",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#menyesuaikan-logika-rebroadcast","aria-hidden":"true"},"#"),n(" Menyesuaikan Logika Rebroadcast")],-1),Sn=n("Untuk mengembangkan logika rebroadcast mereka sendiri, pengembang harus memanfaatkan parameter "),Tn=a("code",null,"maxRetries",-1),Rn=n(),Cn=a("code",null,"sendTransaction",-1),xn=n(". Jika disediakan, "),Bn=a("code",null,"maxRetries",-1),Ln=n(" akan menggantikan logika coba ulang default node RPC, yang memungkinkan developer mengontrol proses coba lagi secara manual "),Dn={href:"https://github.com/solana-labs/solana/blob/98707baec2385a4f7114d2167ef6dfb1406f954f/validator/src/main.rs#L1258-L1274",target:"_blank",rel:"noopener noreferrer"},Kn=n("dalam batas yang wajar"),Un=n("."),Jn=n("Pada umumnya, percobaan kembali transaksi secara manual melibatkan penyimpanan "),Mn=a("code",null,"lastValidBlockHeight",-1),Vn=n(" secara sementara yang berasal dari "),An={href:"https://docs.solana.com/developing/clients/jsonrpc-api#getlatestblockhash",target:"_blank",rel:"noopener noreferrer"},Hn=n("getLatestBlockhash"),In=n(". Setelah disimpan, aplikasi kemudian dapat "),Nn={href:"https://docs.solana.com/developing/clients/jsonrpc-api#getblockheight",target:"_blank",rel:"noopener noreferrer"},Fn=n("melakukan polling ketinggian block cluster"),En=n(" dan mencoba kembali transaksi secara manual dengan interval yang sesuai. Pada saat jaringan macet, akan lebih baik jika menyetel "),On=a("code",null,"maxRetries",-1),zn=n(" ke 0 dan melakukan rebroadcast ulang secara manual melalui algoritma khusus. Di saat beberapa aplikasi mungkin menggunakan algoritma "),Gn={href:"https://en.wikipedia.org/wiki/Exponential_backoff",target:"_blank",rel:"noopener noreferrer"},qn=n("exponential backoff"),Wn=n(", yang lain seperti "),Yn={href:"https://www.mango.markets/",target:"_blank",rel:"noopener noreferrer"},Qn=n("Mango"),Xn=n(" memilih untuk "),Zn={href:"https://github.com/blockworks-foundation/mango-ui/blob/b6abfc6c13b71fc17ebbe766f50b8215fa1ec54f/src/utils/send.tsx#L713",target:"_blank",rel:"noopener noreferrer"},$n=n("terus mengirimkan ulang"),as=n(" transaksi pada interval konstan hingga beberapa waktu habis."),ns=a("div",{class:"language-typescript ext-ts line-numbers-mode"},[a("pre",{class:"language-typescript"},[a("code",null,[a("span",{class:"token keyword"},"import"),n(),a("span",{class:"token punctuation"},"{"),n(` Keypair`),a("span",{class:"token punctuation"},","),n(` Connection`),a("span",{class:"token punctuation"},","),n(` `),a("span",{class:"token constant"},"LAMPORTS_PER_SOL"),a("span",{class:"token punctuation"},","),n(` diff --git a/docs/.vuepress/dist/assets/retrying-transactions.html.2d40edb6.js b/docs/.vuepress/dist/assets/retrying-transactions.html.d1c44dfc.js similarity index 99% rename from docs/.vuepress/dist/assets/retrying-transactions.html.2d40edb6.js rename to docs/.vuepress/dist/assets/retrying-transactions.html.d1c44dfc.js index 60b11a6a4..39d40a53a 100644 --- a/docs/.vuepress/dist/assets/retrying-transactions.html.2d40edb6.js +++ b/docs/.vuepress/dist/assets/retrying-transactions.html.d1c44dfc.js @@ -1,4 +1,4 @@ -import{_ as d,r as o,o as p,c as u,a as n,b as e,w as t,F as h,d as a,e as c}from"./app.cfdf84e7.js";var _="/assets/tx-journey.dd6310be.png",m="/assets/tpu-jito-labs.8bb32fb6.png",b="/assets/dropped-via-rpc-pool.8d1ce9af.png",k="/assets/dropped-minority-fork-pre-process.555653e1.png",f="/assets/dropped-minority-fork-post-process.48c3c955.png";const g={},v=n("h1",{id:"reintentando-transacciones",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#reintentando-transacciones","aria-hidden":"true"},"#"),a(" Reintentando Transacciones")],-1),y=a("En algunas ocasiones, una transacci\xF3n aparentemente v\xE1lida puede descartarse antes de que se incluya en un bloque. Esto ocurre con mayor frecuencia durante los per\xEDodos de congesti\xF3n de la red, cuando un nodo RPC no puede retransmitir la transacci\xF3n al "),q={href:"https://docs.solana.com/terminology#leader",target:"_blank",rel:"noopener noreferrer"},w=a("l\xEDder"),P=a(". Para un usuario final, puede parecer que su transacci\xF3n desaparece por completo. Si bien los nodos RPC est\xE1n equipados con un algoritmo de retransmisi\xF3n gen\xE9rico, los desarrolladores de aplicaciones tambi\xE9n pueden desarrollar su propia l\xF3gica de retransmisi\xF3n personalizada."),C=c('

    Hechos

    Hoja de hechos

    • Los nodos RPC intentar\xE1n retransmitir transacciones usando un algoritmo gen\xE9rico
    • Los desarrolladores de aplicaciones pueden implementar su propia l\xF3gica de retransmisi\xF3n personalizada
    • Los desarrolladores deben aprovechar el par\xE1metro maxRetries en el m\xE9todo JSON-RPC sendTransaction
    • Los desarrolladores deben habilitar las comprobaciones previas para generar errores antes de que se env\xEDen las transacciones.
    • Antes de volver a firmar cualquier transacci\xF3n, es muy importante asegurarse de que el blockhash de la transacci\xF3n inicial haya expirado

    El viaje de una transacci\xF3n

    C\xF3mo los clientes env\xEDan transacciones

    En Solana no existe el concepto de mempool. Todas las transacciones, ya sea que se inicien mediante programaci\xF3n o por un usuario final, se enrutan de manera eficiente a los l\xEDderes para que puedan procesarse en un bloque. Hay dos formas principales en las que se puede enviar una transacci\xF3n a los l\xEDderes:

    ',5),x=a("Por proxy a trav\xE9s de un servidor RPC y el m\xE9todo JSON-RPC "),R={href:"https://docs.solana.com/developing/clients/jsonrpc-api#sendtransaction",target:"_blank",rel:"noopener noreferrer"},T=a("sendTransaction"),L=a("Directamente a los l\xEDderes a trav\xE9s de un "),S={href:"https://docs.rs/solana-client/1.7.3/solana_client/tpu_client/index.html",target:"_blank",rel:"noopener noreferrer"},j=a("Cliente TPU"),E=n("p",null,"La gran mayor\xEDa de los usuarios finales enviar\xE1n transacciones a trav\xE9s de un servidor RPC. Cuando un cliente env\xEDa una transacci\xF3n, el nodo RPC receptor intentar\xE1, a su vez, transmitir la transacci\xF3n a los l\xEDderes actuales y siguientes. Hasta que la transacci\xF3n sea procesada por un l\xEDder, no hay registro de la transacci\xF3n fuera de lo que conocen el cliente y los nodos RPC de retransmisi\xF3n. En el caso de un cliente de TPU, la retransmisi\xF3n y el reenv\xEDo de l\xEDder son manejados completamente por el software del cliente.",-1),B=n("p",null,[n("img",{src:_,alt:"Viaje de una transacci\xF3n"})],-1),z=n("h3",{id:"como-transmiten-las-transacciones-los-nodos-rpc",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#como-transmiten-las-transacciones-los-nodos-rpc","aria-hidden":"true"},"#"),a(" C\xF3mo transmiten las transacciones los nodos RPC")],-1),A=a("Despu\xE9s de que un nodo RPC recibe una transacci\xF3n a trav\xE9s de "),U=n("code",null,"sendTransaction",-1),V=a(", convertir\xE1 la transacci\xF3n en un paquete "),H={href:"https://en.wikipedia.org/wiki/User_Datagram_Protocol",target:"_blank",rel:"noopener noreferrer"},D=a("UDP"),K=a(" antes de reenviarlo a los l\xEDderes relevantes. UDP permite que los validadores se comuniquen r\xE1pidamente entre s\xED, pero no ofrece ninguna garant\xEDa con respecto a la entrega de transacciones."),N=a("Debido a que el cronograma de l\xEDderes de Solana se conoce antes de cada "),O={href:"https://docs.solana.com/terminology#epoch",target:"_blank",rel:"noopener noreferrer"},M=a("\xE9poca"),I=a(" (~2 d\xEDas), un nodo RPC transmitir\xE1 su transacci\xF3n directamente a los l\xEDderes actuales y siguientes. Esto contrasta con otros protocolos gossip como Ethereum que propagan transacciones de forma aleatoria y amplia en toda la red. De forma predeterminada, los nodos RPC intentar\xE1n reenviar transacciones a los l\xEDderes cada dos segundos hasta que finalice la transacci\xF3n o expire el blockhash de la transacci\xF3n (150 bloques o ~1 minuto 19 segundos al momento de escribir este art\xEDculo). Si el tama\xF1o de la cola de retransmisi\xF3n pendiente es superior a "),J={href:"https://github.com/solana-labs/solana/blob/bfbbc53dac93b3a5c6be9b4b65f679fdb13e41d9/send-transaction-service/src/send_transaction_service.rs#L20",target:"_blank",rel:"noopener noreferrer"},F=a("10 000 transacciones"),G=a(", las transacciones enviadas recientemente se descartar\xE1n. Hay "),W={href:"https://github.com/solana-labs/solana/blob/bfbbc53dac93b3a5c6be9b4b65f679fdb13e41d9/validator/src/main.rs#L1172",target:"_blank",rel:"noopener noreferrer"},Y=a("argumentos"),Q=a(" de l\xEDnea de comandos que los operadores de RPC pueden ajustar para cambiar el comportamiento predeterminado de este reintento l\xF3gica."),X=a("Cuando un nodo RPC transmite una transacci\xF3n, intentar\xE1 reenviar la transacci\xF3n a la "),Z={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/validator.rs#L867",target:"_blank",rel:"noopener noreferrer"},$=a("Unidad de procesamiento de transacciones (TPU)"),nn=a(". The TPU processes transactions in five distinct phases:"),an={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/fetch_stage.rs#L21",target:"_blank",rel:"noopener noreferrer"},en=a("Etapa de Fetch"),sn={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/tpu.rs#L91",target:"_blank",rel:"noopener noreferrer"},on=a("Etapa de SigVerify"),tn={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/banking_stage.rs#L249",target:"_blank",rel:"noopener noreferrer"},cn=a("Etapa de Banking"),rn={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/poh/src/poh_service.rs",target:"_blank",rel:"noopener noreferrer"},ln=a("Servicios Proof of History"),dn={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/tpu.rs#L136",target:"_blank",rel:"noopener noreferrer"},pn=a("Etapa de Broadcast"),un=n("p",null,[n("img",{src:m,alt:"TPU Overview"}),n("small",{style:{display:"block","text-align":"center"}},"Image Courtesy of Jito Labs")],-1),hn=n("p",null,"De estas cinco fases, la etapa Fetch es responsable de recibir transacciones. Dentro de la etapa de b\xFAsqueda, los validadores clasificar\xE1n las transacciones entrantes seg\xFAn tres puertos:",-1),_n={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/gossip/src/contact_info.rs#L27",target:"_blank",rel:"noopener noreferrer"},mn=a("tpu"),bn=a(" maneja transacciones regulares como transferencias de tokens, mint de NFT e instrucciones de programas"),kn={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/gossip/src/contact_info.rs#L31",target:"_blank",rel:"noopener noreferrer"},fn=a("tpu_vote"),gn=a(" se enfoca exclusivamente en transacciones de votaci\xF3n"),vn={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/gossip/src/contact_info.rs#L29",target:"_blank",rel:"noopener noreferrer"},yn=a("tpu_forwards"),qn=a(" reenv\xEDa paquetes sin procesar al siguiente l\xEDder si el l\xEDder actual no puede procesar todas las transacciones"),wn=a("Para obtener m\xE1s informaci\xF3n sobre la TPU, consulte "),Pn={href:"https://jito-labs.medium.com/solana-validator-101-transaction-processing-90bcdc271143",target:"_blank",rel:"noopener noreferrer"},Cn=a("este excelente art\xEDculo de Jito Labs"),xn=a("."),Rn=n("h2",{id:"como-se-caen-las-transacciones",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#como-se-caen-las-transacciones","aria-hidden":"true"},"#"),a(" C\xF3mo se caen las transacciones")],-1),Tn=n("p",null,"A lo largo del viaje de una transacci\xF3n, hay algunos escenarios en los que la transacci\xF3n puede eliminarse involuntariamente de la red.",-1),Ln=n("h3",{id:"antes-de-que-se-procese-una-transaccion",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#antes-de-que-se-procese-una-transaccion","aria-hidden":"true"},"#"),a(" Antes de que se procese una transacci\xF3n")],-1),Sn=a("Si la red descarta una transacci\xF3n, lo m\xE1s probable es que lo haga antes de que un l\xEDder procese la transacci\xF3n. La "),jn={href:"https://en.wikipedia.org/wiki/Packet_loss",target:"_blank",rel:"noopener noreferrer"},En=a("p\xE9rdida de paquetes"),Bn=a(" UDP es la raz\xF3n m\xE1s simple por la que esto puede ocurrir. En momentos de intensa carga de la red, tambi\xE9n es posible que los validadores se vean abrumados por la gran cantidad de transacciones necesarias para el procesamiento. Si bien los validadores est\xE1n equipados para reenviar transacciones excedentes a trav\xE9s de "),zn=n("code",null,"tpu_forwards",-1),An=a(", existe un l\xEDmite en la cantidad de datos que se pueden "),Un={href:"https://github.com/solana-labs/solana/blob/master/core/src/banking_stage.rs#L389",target:"_blank",rel:"noopener noreferrer"},Vn=a("reenviar"),Hn=a(". Adem\xE1s, cada reenv\xEDo est\xE1 limitado a un solo salto entre validadores. Es decir, las transacciones recibidas en el puerto "),Dn=n("code",null,"tpu_forwards",-1),Kn=a(" no se reenv\xEDan a otros validadores."),Nn=a("Tambi\xE9n hay dos razones menos conocidas por las que una transacci\xF3n puede descartarse antes de que se procese. El primer escenario implica transacciones que se env\xEDan a trav\xE9s de un grupo de RPC. Ocasionalmente, parte del grupo de RPC puede estar lo suficientemente por delante del resto del grupo. Esto puede causar problemas cuando se requiere que los nodos dentro del grupo trabajen juntos. En este ejemplo, el "),On={href:"https://docs.solana.com/developing/programming-model/transactions#recent-blockhash",target:"_blank",rel:"noopener noreferrer"},Mn=a("recentBlockhash"),In=a(" de la transacci\xF3n se consulta desde la parte avanzada del grupo (Backend A). Cuando la transacci\xF3n se env\xEDa a la parte rezagada del grupo (Backend B), los nodos no reconocer\xE1n el blockhash avanzado y descartar\xE1n la transacci\xF3n. Esto se puede detectar al enviar la transacci\xF3n si los desarrolladores habilitan las "),Jn={href:"https://docs.solana.com/developing/clients/jsonrpc-api#sendtransaction",target:"_blank",rel:"noopener noreferrer"},Fn=a("comprobaciones previas"),Gn=a(" en "),Wn=n("code",null,"sendTransaction",-1),Yn=a("."),Qn=c('

    Caidas via RPC Pool

    Las bifurcaciones de red temporales tambi\xE9n pueden resultar en transacciones descartadas. Si un validador tarda en reproducir sus bloques dentro de la etapa bancaria, puede terminar creando una bifurcaci\xF3n minoritaria. Cuando un cliente crea una transacci\xF3n, es posible que la transacci\xF3n haga referencia a un recentBlockhash que solo existe en la bifurcaci\xF3n minoritaria. Una vez que se env\xEDa la transacci\xF3n, el cl\xFAster puede cambiar su bifurcaci\xF3n minoritaria antes de que se procese la transacci\xF3n. En este escenario, la transacci\xF3n se descarta debido a que no se encuentra el blockhash.

    Ca\xEDdas debido a una Bifurcaci\xF3n Minoritaria (Antes de procesar)

    Despu\xE9s de que se procese una transacci\xF3n y antes de que finalice

    En el caso de que una transacci\xF3n haga referencia a un recentBlockhash de una bifurcaci\xF3n minoritaria, todav\xEDa es posible que se procese la transacci\xF3n. En este caso, sin embargo, ser\xEDa procesado por el l\xEDder en la bifurcaci\xF3n minoritaria. Cuando este l\xEDder intente compartir sus transacciones procesadas con el resto de la red, no lograr\xE1 llegar a un consenso con la mayor\xEDa de los validadores que no reconocen la bifurcaci\xF3n minoritaria. En este momento, la transacci\xF3n se cancelar\xEDa antes de que pudiera finalizarse.

    Ca\xEDdas debido a una Bifurcaci\xF3n Minoritaria (Antes de procesar)

    Manejo de transacciones descartadas

    Si bien los nodos RPC intentar\xE1n retransmitir las transacciones, el algoritmo que emplean es gen\xE9rico y, a menudo, inadecuado para las necesidades de aplicaciones espec\xEDficas. Para prepararse para tiempos de congesti\xF3n de la red, los desarrolladores de aplicaciones deben personalizar su propia l\xF3gica de retransmisi\xF3n.

    Una mirada en profundidad a sendTransaction

    Cuando se trata de enviar transacciones, el m\xE9todo RPC sendTransaction es la principal herramienta disponible para los desarrolladores. sendTransaction solo es responsable de transmitir una transacci\xF3n de un cliente a un nodo RPC. Si el nodo recibe la transacci\xF3n, sendTransaction devolver\xE1 la identificaci\xF3n de la transacci\xF3n que se puede usar para rastrear la transacci\xF3n. Una respuesta satisfactoria no indica si el cl\xFAster procesar\xE1 o finalizar\xE1 la transacci\xF3n.

    ',10),Xn={class:"custom-container tip"},Zn=n("p",{class:"custom-container-title"},"TIP",-1),$n=n("h4",{id:"parametros-de-la-solicitud",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#parametros-de-la-solicitud","aria-hidden":"true"},"#"),a(" Par\xE1metros de la solicitud")],-1),na=n("li",null,[n("code",null,"transaction"),a(": "),n("code",null,"string"),a(" - transacci\xF3n totalmente firmada, como cadena codificada")],-1),aa=a("(opcional) "),ea=n("code",null,"configuration object",-1),sa=a(": "),oa=n("code",null,"object",-1),ta=n("li",null,[n("code",null,"skipPreflight"),a(": "),n("code",null,"boolean"),a(" - si es verdadero, omita las verificaciones de transacciones previas al vuelo (predeterminado: falso)")],-1),ca=a("(opcional) "),ra=n("code",null,"preflightCommitment",-1),ia=a(": "),la=n("code",null,"string",-1),da=a(" - "),pa={href:"https://docs.solana.com/developing/clients/jsonrpc-api#configuring-state-commitment",target:"_blank",rel:"noopener noreferrer"},ua=a("Commitment"),ha=a(' nivel a usar para simulaciones de verificaci\xF3n previa contra la ranura del banco (predeterminado: "finalizado").'),_a=n("li",null,[a("(opcional) "),n("code",null,"encoding"),a(": "),n("code",null,"string"),a(' - Codificaci\xF3n utilizada para los datos de transacci\xF3n. O "base58" (lento) o "base64". (predeterminado: "base58").')],-1),ma=n("li",null,[a("(opcional) "),n("code",null,"maxRetries"),a(": "),n("code",null,"usize"),a(" - N\xFAmero m\xE1ximo de veces para que el nodo RPC vuelva a intentar enviar la transacci\xF3n al l\xEDder. Si no se proporciona este par\xE1metro, el nodo RPC volver\xE1 a intentar la transacci\xF3n hasta que finalice o hasta que caduque el blockhash.")],-1),ba=n("h4",{id:"respuesta",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#respuesta","aria-hidden":"true"},"#"),a(" Respuesta")],-1),ka=n("code",null,"transaction id",-1),fa=a(": "),ga=n("code",null,"string",-1),va=a(" - Primera firma de transacci\xF3n incrustada en la transacci\xF3n como cadena codificada en base 58. Este ID de transacci\xF3n se puede usar con "),ya={href:"https://docs.solana.com/developing/clients/jsonrpc-api#getsignaturestatuses",target:"_blank",rel:"noopener noreferrer"},qa=a("getSignatureStatuses"),wa=a(" para buscar actualizaciones de estado."),Pa=n("h2",{id:"personalizacion-de-la-logica-de-retransmision",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#personalizacion-de-la-logica-de-retransmision","aria-hidden":"true"},"#"),a(" Personalizaci\xF3n de la l\xF3gica de retransmisi\xF3n")],-1),Ca=a("Para desarrollar su propia l\xF3gica de retransmisi\xF3n, los desarrolladores deber\xEDan aprovechar el par\xE1metro "),xa=n("code",null,"maxRetries",-1),Ra=a(" de "),Ta=n("code",null,"sendTransaction",-1),La=a(". Si se proporciona, "),Sa=n("code",null,"maxRetries",-1),ja=a(" anular\xE1 la l\xF3gica de reintento predeterminada de un nodo RPC, lo que permitir\xE1 a los desarrolladores controlar manualmente el proceso de reintento "),Ea={href:"https://github.com/solana-labs/solana/blob/98707baec2385a4f7114d2167ef6dfb1406f954f/validator/src/principal.rs#L1258-L1274",target:"_blank",rel:"noopener noreferrer"},Ba=a("dentro de l\xEDmites razonables"),za=a("."),Aa=a("Un patr\xF3n com\xFAn para volver a intentar transacciones manualmente consiste en almacenar temporalmente "),Ua=n("code",null,"lastValidBlockHeight",-1),Va=a(" que proviene de "),Ha={href:"https://docs.solana.com/developing/clients/jsonrpc-api#getlatestblockhash",target:"_blank",rel:"noopener noreferrer"},Da=a("getLatestBlockhash"),Ka=a(". Una vez almacenada, una aplicaci\xF3n puede "),Na={href:"https://docs.solana.com/developing/clients/jsonrpc-api#getblockheight",target:"_blank",rel:"noopener noreferrer"},Oa=a("obtener la altura del bloque del cl\xFAster"),Ma=a(" y volver a intentar manualmente la transacci\xF3n en un intervalo apropiado. En tiempos de congesti\xF3n de la red, es ventajoso establecer "),Ia=n("code",null,"maxRetries",-1),Ja=a(" en 0 y retransmitir manualmente a trav\xE9s de un algoritmo personalizado. Si bien algunas aplicaciones pueden emplear un algoritmo de "),Fa={href:"https://en.wikipedia.org/wiki/Exponential_backoff",target:"_blank",rel:"noopener noreferrer"},Ga=a("retroceso exponencial"),Wa=a(", otras como "),Ya={href:"https://www.mango.markets/",target:"_blank",rel:"noopener noreferrer"},Qa=a("Mango"),Xa=a(" optan por "),Za={href:"https://github.com/blockworks-foundation/mango-ui/blob/b6abfc6c13b71fc17ebbe766f50b8215fa1ec54f/src/utils/send.tsx#L713",target:"_blank",rel:"noopener noreferrer"},$a=a("reenviar continuamente"),ne=a(" transacciones a un intervalo constante hasta que se agote el tiempo de espera."),ae=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),a(),n("span",{class:"token punctuation"},"{"),a(` +import{_ as d,r as o,o as p,c as u,a as n,b as e,w as t,F as h,d as a,e as c}from"./app.2fbb9e96.js";var _="/assets/tx-journey.dd6310be.png",m="/assets/tpu-jito-labs.8bb32fb6.png",b="/assets/dropped-via-rpc-pool.8d1ce9af.png",k="/assets/dropped-minority-fork-pre-process.555653e1.png",f="/assets/dropped-minority-fork-post-process.48c3c955.png";const g={},v=n("h1",{id:"reintentando-transacciones",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#reintentando-transacciones","aria-hidden":"true"},"#"),a(" Reintentando Transacciones")],-1),y=a("En algunas ocasiones, una transacci\xF3n aparentemente v\xE1lida puede descartarse antes de que se incluya en un bloque. Esto ocurre con mayor frecuencia durante los per\xEDodos de congesti\xF3n de la red, cuando un nodo RPC no puede retransmitir la transacci\xF3n al "),q={href:"https://docs.solana.com/terminology#leader",target:"_blank",rel:"noopener noreferrer"},w=a("l\xEDder"),P=a(". Para un usuario final, puede parecer que su transacci\xF3n desaparece por completo. Si bien los nodos RPC est\xE1n equipados con un algoritmo de retransmisi\xF3n gen\xE9rico, los desarrolladores de aplicaciones tambi\xE9n pueden desarrollar su propia l\xF3gica de retransmisi\xF3n personalizada."),C=c('

    Hechos

    Hoja de hechos

    • Los nodos RPC intentar\xE1n retransmitir transacciones usando un algoritmo gen\xE9rico
    • Los desarrolladores de aplicaciones pueden implementar su propia l\xF3gica de retransmisi\xF3n personalizada
    • Los desarrolladores deben aprovechar el par\xE1metro maxRetries en el m\xE9todo JSON-RPC sendTransaction
    • Los desarrolladores deben habilitar las comprobaciones previas para generar errores antes de que se env\xEDen las transacciones.
    • Antes de volver a firmar cualquier transacci\xF3n, es muy importante asegurarse de que el blockhash de la transacci\xF3n inicial haya expirado

    El viaje de una transacci\xF3n

    C\xF3mo los clientes env\xEDan transacciones

    En Solana no existe el concepto de mempool. Todas las transacciones, ya sea que se inicien mediante programaci\xF3n o por un usuario final, se enrutan de manera eficiente a los l\xEDderes para que puedan procesarse en un bloque. Hay dos formas principales en las que se puede enviar una transacci\xF3n a los l\xEDderes:

    ',5),x=a("Por proxy a trav\xE9s de un servidor RPC y el m\xE9todo JSON-RPC "),R={href:"https://docs.solana.com/developing/clients/jsonrpc-api#sendtransaction",target:"_blank",rel:"noopener noreferrer"},T=a("sendTransaction"),L=a("Directamente a los l\xEDderes a trav\xE9s de un "),S={href:"https://docs.rs/solana-client/1.7.3/solana_client/tpu_client/index.html",target:"_blank",rel:"noopener noreferrer"},j=a("Cliente TPU"),E=n("p",null,"La gran mayor\xEDa de los usuarios finales enviar\xE1n transacciones a trav\xE9s de un servidor RPC. Cuando un cliente env\xEDa una transacci\xF3n, el nodo RPC receptor intentar\xE1, a su vez, transmitir la transacci\xF3n a los l\xEDderes actuales y siguientes. Hasta que la transacci\xF3n sea procesada por un l\xEDder, no hay registro de la transacci\xF3n fuera de lo que conocen el cliente y los nodos RPC de retransmisi\xF3n. En el caso de un cliente de TPU, la retransmisi\xF3n y el reenv\xEDo de l\xEDder son manejados completamente por el software del cliente.",-1),B=n("p",null,[n("img",{src:_,alt:"Viaje de una transacci\xF3n"})],-1),z=n("h3",{id:"como-transmiten-las-transacciones-los-nodos-rpc",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#como-transmiten-las-transacciones-los-nodos-rpc","aria-hidden":"true"},"#"),a(" C\xF3mo transmiten las transacciones los nodos RPC")],-1),A=a("Despu\xE9s de que un nodo RPC recibe una transacci\xF3n a trav\xE9s de "),U=n("code",null,"sendTransaction",-1),V=a(", convertir\xE1 la transacci\xF3n en un paquete "),H={href:"https://en.wikipedia.org/wiki/User_Datagram_Protocol",target:"_blank",rel:"noopener noreferrer"},D=a("UDP"),K=a(" antes de reenviarlo a los l\xEDderes relevantes. UDP permite que los validadores se comuniquen r\xE1pidamente entre s\xED, pero no ofrece ninguna garant\xEDa con respecto a la entrega de transacciones."),N=a("Debido a que el cronograma de l\xEDderes de Solana se conoce antes de cada "),O={href:"https://docs.solana.com/terminology#epoch",target:"_blank",rel:"noopener noreferrer"},M=a("\xE9poca"),I=a(" (~2 d\xEDas), un nodo RPC transmitir\xE1 su transacci\xF3n directamente a los l\xEDderes actuales y siguientes. Esto contrasta con otros protocolos gossip como Ethereum que propagan transacciones de forma aleatoria y amplia en toda la red. De forma predeterminada, los nodos RPC intentar\xE1n reenviar transacciones a los l\xEDderes cada dos segundos hasta que finalice la transacci\xF3n o expire el blockhash de la transacci\xF3n (150 bloques o ~1 minuto 19 segundos al momento de escribir este art\xEDculo). Si el tama\xF1o de la cola de retransmisi\xF3n pendiente es superior a "),J={href:"https://github.com/solana-labs/solana/blob/bfbbc53dac93b3a5c6be9b4b65f679fdb13e41d9/send-transaction-service/src/send_transaction_service.rs#L20",target:"_blank",rel:"noopener noreferrer"},F=a("10 000 transacciones"),G=a(", las transacciones enviadas recientemente se descartar\xE1n. Hay "),W={href:"https://github.com/solana-labs/solana/blob/bfbbc53dac93b3a5c6be9b4b65f679fdb13e41d9/validator/src/main.rs#L1172",target:"_blank",rel:"noopener noreferrer"},Y=a("argumentos"),Q=a(" de l\xEDnea de comandos que los operadores de RPC pueden ajustar para cambiar el comportamiento predeterminado de este reintento l\xF3gica."),X=a("Cuando un nodo RPC transmite una transacci\xF3n, intentar\xE1 reenviar la transacci\xF3n a la "),Z={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/validator.rs#L867",target:"_blank",rel:"noopener noreferrer"},$=a("Unidad de procesamiento de transacciones (TPU)"),nn=a(". The TPU processes transactions in five distinct phases:"),an={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/fetch_stage.rs#L21",target:"_blank",rel:"noopener noreferrer"},en=a("Etapa de Fetch"),sn={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/tpu.rs#L91",target:"_blank",rel:"noopener noreferrer"},on=a("Etapa de SigVerify"),tn={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/banking_stage.rs#L249",target:"_blank",rel:"noopener noreferrer"},cn=a("Etapa de Banking"),rn={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/poh/src/poh_service.rs",target:"_blank",rel:"noopener noreferrer"},ln=a("Servicios Proof of History"),dn={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/tpu.rs#L136",target:"_blank",rel:"noopener noreferrer"},pn=a("Etapa de Broadcast"),un=n("p",null,[n("img",{src:m,alt:"TPU Overview"}),n("small",{style:{display:"block","text-align":"center"}},"Image Courtesy of Jito Labs")],-1),hn=n("p",null,"De estas cinco fases, la etapa Fetch es responsable de recibir transacciones. Dentro de la etapa de b\xFAsqueda, los validadores clasificar\xE1n las transacciones entrantes seg\xFAn tres puertos:",-1),_n={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/gossip/src/contact_info.rs#L27",target:"_blank",rel:"noopener noreferrer"},mn=a("tpu"),bn=a(" maneja transacciones regulares como transferencias de tokens, mint de NFT e instrucciones de programas"),kn={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/gossip/src/contact_info.rs#L31",target:"_blank",rel:"noopener noreferrer"},fn=a("tpu_vote"),gn=a(" se enfoca exclusivamente en transacciones de votaci\xF3n"),vn={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/gossip/src/contact_info.rs#L29",target:"_blank",rel:"noopener noreferrer"},yn=a("tpu_forwards"),qn=a(" reenv\xEDa paquetes sin procesar al siguiente l\xEDder si el l\xEDder actual no puede procesar todas las transacciones"),wn=a("Para obtener m\xE1s informaci\xF3n sobre la TPU, consulte "),Pn={href:"https://jito-labs.medium.com/solana-validator-101-transaction-processing-90bcdc271143",target:"_blank",rel:"noopener noreferrer"},Cn=a("este excelente art\xEDculo de Jito Labs"),xn=a("."),Rn=n("h2",{id:"como-se-caen-las-transacciones",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#como-se-caen-las-transacciones","aria-hidden":"true"},"#"),a(" C\xF3mo se caen las transacciones")],-1),Tn=n("p",null,"A lo largo del viaje de una transacci\xF3n, hay algunos escenarios en los que la transacci\xF3n puede eliminarse involuntariamente de la red.",-1),Ln=n("h3",{id:"antes-de-que-se-procese-una-transaccion",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#antes-de-que-se-procese-una-transaccion","aria-hidden":"true"},"#"),a(" Antes de que se procese una transacci\xF3n")],-1),Sn=a("Si la red descarta una transacci\xF3n, lo m\xE1s probable es que lo haga antes de que un l\xEDder procese la transacci\xF3n. La "),jn={href:"https://en.wikipedia.org/wiki/Packet_loss",target:"_blank",rel:"noopener noreferrer"},En=a("p\xE9rdida de paquetes"),Bn=a(" UDP es la raz\xF3n m\xE1s simple por la que esto puede ocurrir. En momentos de intensa carga de la red, tambi\xE9n es posible que los validadores se vean abrumados por la gran cantidad de transacciones necesarias para el procesamiento. Si bien los validadores est\xE1n equipados para reenviar transacciones excedentes a trav\xE9s de "),zn=n("code",null,"tpu_forwards",-1),An=a(", existe un l\xEDmite en la cantidad de datos que se pueden "),Un={href:"https://github.com/solana-labs/solana/blob/master/core/src/banking_stage.rs#L389",target:"_blank",rel:"noopener noreferrer"},Vn=a("reenviar"),Hn=a(". Adem\xE1s, cada reenv\xEDo est\xE1 limitado a un solo salto entre validadores. Es decir, las transacciones recibidas en el puerto "),Dn=n("code",null,"tpu_forwards",-1),Kn=a(" no se reenv\xEDan a otros validadores."),Nn=a("Tambi\xE9n hay dos razones menos conocidas por las que una transacci\xF3n puede descartarse antes de que se procese. El primer escenario implica transacciones que se env\xEDan a trav\xE9s de un grupo de RPC. Ocasionalmente, parte del grupo de RPC puede estar lo suficientemente por delante del resto del grupo. Esto puede causar problemas cuando se requiere que los nodos dentro del grupo trabajen juntos. En este ejemplo, el "),On={href:"https://docs.solana.com/developing/programming-model/transactions#recent-blockhash",target:"_blank",rel:"noopener noreferrer"},Mn=a("recentBlockhash"),In=a(" de la transacci\xF3n se consulta desde la parte avanzada del grupo (Backend A). Cuando la transacci\xF3n se env\xEDa a la parte rezagada del grupo (Backend B), los nodos no reconocer\xE1n el blockhash avanzado y descartar\xE1n la transacci\xF3n. Esto se puede detectar al enviar la transacci\xF3n si los desarrolladores habilitan las "),Jn={href:"https://docs.solana.com/developing/clients/jsonrpc-api#sendtransaction",target:"_blank",rel:"noopener noreferrer"},Fn=a("comprobaciones previas"),Gn=a(" en "),Wn=n("code",null,"sendTransaction",-1),Yn=a("."),Qn=c('

    Caidas via RPC Pool

    Las bifurcaciones de red temporales tambi\xE9n pueden resultar en transacciones descartadas. Si un validador tarda en reproducir sus bloques dentro de la etapa bancaria, puede terminar creando una bifurcaci\xF3n minoritaria. Cuando un cliente crea una transacci\xF3n, es posible que la transacci\xF3n haga referencia a un recentBlockhash que solo existe en la bifurcaci\xF3n minoritaria. Una vez que se env\xEDa la transacci\xF3n, el cl\xFAster puede cambiar su bifurcaci\xF3n minoritaria antes de que se procese la transacci\xF3n. En este escenario, la transacci\xF3n se descarta debido a que no se encuentra el blockhash.

    Ca\xEDdas debido a una Bifurcaci\xF3n Minoritaria (Antes de procesar)

    Despu\xE9s de que se procese una transacci\xF3n y antes de que finalice

    En el caso de que una transacci\xF3n haga referencia a un recentBlockhash de una bifurcaci\xF3n minoritaria, todav\xEDa es posible que se procese la transacci\xF3n. En este caso, sin embargo, ser\xEDa procesado por el l\xEDder en la bifurcaci\xF3n minoritaria. Cuando este l\xEDder intente compartir sus transacciones procesadas con el resto de la red, no lograr\xE1 llegar a un consenso con la mayor\xEDa de los validadores que no reconocen la bifurcaci\xF3n minoritaria. En este momento, la transacci\xF3n se cancelar\xEDa antes de que pudiera finalizarse.

    Ca\xEDdas debido a una Bifurcaci\xF3n Minoritaria (Antes de procesar)

    Manejo de transacciones descartadas

    Si bien los nodos RPC intentar\xE1n retransmitir las transacciones, el algoritmo que emplean es gen\xE9rico y, a menudo, inadecuado para las necesidades de aplicaciones espec\xEDficas. Para prepararse para tiempos de congesti\xF3n de la red, los desarrolladores de aplicaciones deben personalizar su propia l\xF3gica de retransmisi\xF3n.

    Una mirada en profundidad a sendTransaction

    Cuando se trata de enviar transacciones, el m\xE9todo RPC sendTransaction es la principal herramienta disponible para los desarrolladores. sendTransaction solo es responsable de transmitir una transacci\xF3n de un cliente a un nodo RPC. Si el nodo recibe la transacci\xF3n, sendTransaction devolver\xE1 la identificaci\xF3n de la transacci\xF3n que se puede usar para rastrear la transacci\xF3n. Una respuesta satisfactoria no indica si el cl\xFAster procesar\xE1 o finalizar\xE1 la transacci\xF3n.

    ',10),Xn={class:"custom-container tip"},Zn=n("p",{class:"custom-container-title"},"TIP",-1),$n=n("h4",{id:"parametros-de-la-solicitud",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#parametros-de-la-solicitud","aria-hidden":"true"},"#"),a(" Par\xE1metros de la solicitud")],-1),na=n("li",null,[n("code",null,"transaction"),a(": "),n("code",null,"string"),a(" - transacci\xF3n totalmente firmada, como cadena codificada")],-1),aa=a("(opcional) "),ea=n("code",null,"configuration object",-1),sa=a(": "),oa=n("code",null,"object",-1),ta=n("li",null,[n("code",null,"skipPreflight"),a(": "),n("code",null,"boolean"),a(" - si es verdadero, omita las verificaciones de transacciones previas al vuelo (predeterminado: falso)")],-1),ca=a("(opcional) "),ra=n("code",null,"preflightCommitment",-1),ia=a(": "),la=n("code",null,"string",-1),da=a(" - "),pa={href:"https://docs.solana.com/developing/clients/jsonrpc-api#configuring-state-commitment",target:"_blank",rel:"noopener noreferrer"},ua=a("Commitment"),ha=a(' nivel a usar para simulaciones de verificaci\xF3n previa contra la ranura del banco (predeterminado: "finalizado").'),_a=n("li",null,[a("(opcional) "),n("code",null,"encoding"),a(": "),n("code",null,"string"),a(' - Codificaci\xF3n utilizada para los datos de transacci\xF3n. O "base58" (lento) o "base64". (predeterminado: "base58").')],-1),ma=n("li",null,[a("(opcional) "),n("code",null,"maxRetries"),a(": "),n("code",null,"usize"),a(" - N\xFAmero m\xE1ximo de veces para que el nodo RPC vuelva a intentar enviar la transacci\xF3n al l\xEDder. Si no se proporciona este par\xE1metro, el nodo RPC volver\xE1 a intentar la transacci\xF3n hasta que finalice o hasta que caduque el blockhash.")],-1),ba=n("h4",{id:"respuesta",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#respuesta","aria-hidden":"true"},"#"),a(" Respuesta")],-1),ka=n("code",null,"transaction id",-1),fa=a(": "),ga=n("code",null,"string",-1),va=a(" - Primera firma de transacci\xF3n incrustada en la transacci\xF3n como cadena codificada en base 58. Este ID de transacci\xF3n se puede usar con "),ya={href:"https://docs.solana.com/developing/clients/jsonrpc-api#getsignaturestatuses",target:"_blank",rel:"noopener noreferrer"},qa=a("getSignatureStatuses"),wa=a(" para buscar actualizaciones de estado."),Pa=n("h2",{id:"personalizacion-de-la-logica-de-retransmision",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#personalizacion-de-la-logica-de-retransmision","aria-hidden":"true"},"#"),a(" Personalizaci\xF3n de la l\xF3gica de retransmisi\xF3n")],-1),Ca=a("Para desarrollar su propia l\xF3gica de retransmisi\xF3n, los desarrolladores deber\xEDan aprovechar el par\xE1metro "),xa=n("code",null,"maxRetries",-1),Ra=a(" de "),Ta=n("code",null,"sendTransaction",-1),La=a(". Si se proporciona, "),Sa=n("code",null,"maxRetries",-1),ja=a(" anular\xE1 la l\xF3gica de reintento predeterminada de un nodo RPC, lo que permitir\xE1 a los desarrolladores controlar manualmente el proceso de reintento "),Ea={href:"https://github.com/solana-labs/solana/blob/98707baec2385a4f7114d2167ef6dfb1406f954f/validator/src/principal.rs#L1258-L1274",target:"_blank",rel:"noopener noreferrer"},Ba=a("dentro de l\xEDmites razonables"),za=a("."),Aa=a("Un patr\xF3n com\xFAn para volver a intentar transacciones manualmente consiste en almacenar temporalmente "),Ua=n("code",null,"lastValidBlockHeight",-1),Va=a(" que proviene de "),Ha={href:"https://docs.solana.com/developing/clients/jsonrpc-api#getlatestblockhash",target:"_blank",rel:"noopener noreferrer"},Da=a("getLatestBlockhash"),Ka=a(". Una vez almacenada, una aplicaci\xF3n puede "),Na={href:"https://docs.solana.com/developing/clients/jsonrpc-api#getblockheight",target:"_blank",rel:"noopener noreferrer"},Oa=a("obtener la altura del bloque del cl\xFAster"),Ma=a(" y volver a intentar manualmente la transacci\xF3n en un intervalo apropiado. En tiempos de congesti\xF3n de la red, es ventajoso establecer "),Ia=n("code",null,"maxRetries",-1),Ja=a(" en 0 y retransmitir manualmente a trav\xE9s de un algoritmo personalizado. Si bien algunas aplicaciones pueden emplear un algoritmo de "),Fa={href:"https://en.wikipedia.org/wiki/Exponential_backoff",target:"_blank",rel:"noopener noreferrer"},Ga=a("retroceso exponencial"),Wa=a(", otras como "),Ya={href:"https://www.mango.markets/",target:"_blank",rel:"noopener noreferrer"},Qa=a("Mango"),Xa=a(" optan por "),Za={href:"https://github.com/blockworks-foundation/mango-ui/blob/b6abfc6c13b71fc17ebbe766f50b8215fa1ec54f/src/utils/send.tsx#L713",target:"_blank",rel:"noopener noreferrer"},$a=a("reenviar continuamente"),ne=a(" transacciones a un intervalo constante hasta que se agote el tiempo de espera."),ae=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),a(),n("span",{class:"token punctuation"},"{"),a(` Keypair`),n("span",{class:"token punctuation"},","),a(` Connection`),n("span",{class:"token punctuation"},","),a(` `),n("span",{class:"token constant"},"LAMPORTS_PER_SOL"),n("span",{class:"token punctuation"},","),a(` diff --git a/docs/.vuepress/dist/assets/retrying-transactions.html.a91ac37c.js b/docs/.vuepress/dist/assets/retrying-transactions.html.d5ed1e28.js similarity index 99% rename from docs/.vuepress/dist/assets/retrying-transactions.html.a91ac37c.js rename to docs/.vuepress/dist/assets/retrying-transactions.html.d5ed1e28.js index 4c9309d99..00016ce0d 100644 --- a/docs/.vuepress/dist/assets/retrying-transactions.html.a91ac37c.js +++ b/docs/.vuepress/dist/assets/retrying-transactions.html.d5ed1e28.js @@ -1,4 +1,4 @@ -import{_ as u,r as a,o as p,c as d,a as e,b as s,w as o,F as h,d as n,e as r}from"./app.cfdf84e7.js";var _="/assets/tx-journey.dd6310be.png",m="/assets/tpu-jito-labs.8bb32fb6.png",k="/assets/dropped-via-rpc-pool.8d1ce9af.png",b="/assets/dropped-minority-fork-pre-process.555653e1.png",f="/assets/dropped-minority-fork-post-process.48c3c955.png";const g={},v=e("h1",{id:"reessayer-des-transactions",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#reessayer-des-transactions","aria-hidden":"true"},"#"),n(" R\xE9essayer Des Transactions")],-1),q=n("Il arrive parfois qu'une transaction apparemment valide soit rejet\xE9e avant d'\xEAtre incluse dans un bloc. Cela se produit le plus souvent pendant les p\xE9riodes de congestion du r\xE9seau, lorsqu'un n\u0153ud RPC ne parvient pas \xE0 retransmettre la transaction au "),y={href:"https://docs.solana.com/terminology#leader",target:"_blank",rel:"noopener noreferrer"},x=n("leader"),w=n(". Pour l'utilisateur final, il peut avoir l'impression que sa transaction dispara\xEEt compl\xE8tement. Si les n\u0153uds RPC sont \xE9quip\xE9s d'un algorithme de retransmission g\xE9n\xE9rique, les d\xE9veloppeurs d'applications sont \xE9galement capables de d\xE9velopper leur propre logique de retransmission personnalis\xE9e."),P=r('

    Faits

    Fiche d'Information

    • Les n\u0153uds RPC tenteront de retransmettre les transactions en utilisant un algorithme g\xE9n\xE9rique
    • ALes d\xE9veloppeurs d'applications peuvent mettre en \u0153uvre leur propre logique de retransmission personnalis\xE9e
    • Les d\xE9veloppeurs devraient tirer parti du param\xE8tre maxRetries de la m\xE9thode JSON-RPC sendTransaction
    • Les d\xE9veloppeurs devraient activer des contr\xF4les en amont afin de d\xE9tecter les erreurs avant que les transactions ne soient soumises
    • Avant de re-signer une transaction, il est tr\xE8s important de s'assurer que le blockhash de la transaction initiale a expir\xE9

    Le Voyage d'une Transaction

    Comment Les Clients Soumettent Les Transactions

    Chez Solana, il n'y a pas de concept de mempool.Toutes les transactions, qu'elles soient initi\xE9es par un programme ou par un utilisateur final, sont achemin\xE9es efficacement vers les leaders afin d'\xEAtre trait\xE9es dans un bloc. Il existe deux mani\xE8res principales d'envoyer une transaction aux leaders :

    ',5),L=n("Par proxy via un serveur RPC et la m\xE9thode JSON-RPC "),T={href:"https://docs.solana.com/developing/clients/jsonrpc-api#sendtransaction",target:"_blank",rel:"noopener noreferrer"},C=n("sendTransaction"),R=n("Directement aux leaders via un "),j={href:"https://docs.rs/solana-client/1.7.3/solana_client/tpu_client/index.html",target:"_blank",rel:"noopener noreferrer"},S=n("Client TPU"),B=e("p",null,"La grande majorit\xE9 des utilisateurs finaux soumettront des transactions via un serveur RPC. Lorsqu'un client soumet une transaction, le n\u0153ud RPC r\xE9cepteur tente \xE0 son tour de transmettre la transaction aux leaders actuels et suivants. Tant que la transaction n'est pas trait\xE9e par un leader, il n'y a pas d'enregistrement de la transaction en dehors de ce dont le client et les n\u0153uds RPC relais ont connaissance. Dans le cas d'un client TPU, la retransmission et le transfert des leaders sont enti\xE8rement g\xE9r\xE9s par le logiciel client.",-1),D=e("p",null,[e("img",{src:_,alt:"Transaction Journey"})],-1),A=e("h3",{id:"comment-les-n\u0153uds-rpc-transmettent-les-transactions",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#comment-les-n\u0153uds-rpc-transmettent-les-transactions","aria-hidden":"true"},"#"),n(" Comment Les N\u0153uds RPC Transmettent Les Transactions")],-1),U=n("Lorsqu'un n\u0153ud RPC re\xE7oit une transaction via "),V=e("code",null,"sendTransaction",-1),E=n(", il la convertit en un paquet "),H={href:"https://en.wikipedia.org/wiki/User_Datagram_Protocol",target:"_blank",rel:"noopener noreferrer"},I=n("UDP"),N=n(" avant de la transmettre aux leaders concern\xE9s. UDP permet aux validateurs de communiquer rapidement entre eux, mais ne fournit aucune garantie quant \xE0 la livraison des transactions."),F=n("Comme le calendrier des leaders de Solana est connu \xE0 l'avance pour chaque "),K={href:"https://docs.solana.com/terminology#epoch",target:"_blank",rel:"noopener noreferrer"},O=n("epoque"),z=n(" (~2 jours), un noeud RPC diffusera sa transaction directement aux leaders actuels et suivants. Cela contraste avec d'autres protocoles de bavardage, comme Ethereum, qui propagent les transactions de mani\xE8re al\xE9atoire et \xE0 grande \xE9chelle sur l'ensemble du r\xE9seau. Par d\xE9faut, les n\u0153uds RPC essaient de transmettre les transactions aux leaders toutes les deux secondes jusqu'\xE0 ce que la transaction soit finalis\xE9e ou que le hash de blocs de la transaction expire (150 blocs ou ~1 minute 19 secondes au moment de la r\xE9daction de ce document). Si la taille de la file d'attente de retransmissions en attente est sup\xE9rieure \xE0 "),J={href:"https://github.com/solana-labs/solana/blob/bfbbc53dac93b3a5c6be9b4b65f679fdb13e41d9/send-transaction-service/src/send_transaction_service.rs#L20",target:"_blank",rel:"noopener noreferrer"},M=n("10,000 transactions"),G=n(" les nouvelles transactions soumises sont rejet\xE9es. Il existe des "),Q={href:"https://github.com/solana-labs/solana/blob/bfbbc53dac93b3a5c6be9b4b65f679fdb13e41d9/validator/src/main.rs#L1172",target:"_blank",rel:"noopener noreferrer"},W=n("arguments"),Y=n(" de ligne de commande que les op\xE9rateurs RPC peuvent ajuster pour modifier le comportement par d\xE9faut de cette logique de r\xE9essai."),X=n("Lorsqu'un n\u0153ud RPC transmet une transaction, il tente de la transmettre \xE0 l'"),Z={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/validator.rs#L867",target:"_blank",rel:"noopener noreferrer"},$=n("Unit\xE9 de Traitement des Transactions (Transaction Processing Unit ou TPU)"),ee=n(" d'un leader. Le TPU traite les transactions en cinq phases distinctes :"),ne={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/fetch_stage.rs#L21",target:"_blank",rel:"noopener noreferrer"},se=n("\xC9tape de R\xE9cup\xE9ration (Fetch Stage)"),te={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/tpu.rs#L91",target:"_blank",rel:"noopener noreferrer"},ae=n("\xC9tape de SigVerify (SigVerify Stage)"),oe={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/banking_stage.rs#L249",target:"_blank",rel:"noopener noreferrer"},re=n("\xC9tape de Banking (Banking Stage)"),ie={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/poh/src/poh_service.rs",target:"_blank",rel:"noopener noreferrer"},ce=n("Service Proof of History"),le={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/tpu.rs#L136",target:"_blank",rel:"noopener noreferrer"},ue=n("\xC9tape de Transmission (Broadcast Stage)"),pe=e("p",null,[e("img",{src:m,alt:"TPU Overview"}),e("small",{style:{display:"block","text-align":"center"}},"Avec l'Autorisation de Jito Labs")],-1),de=e("p",null,"Parmi ces cinq phases, l'\xE9tape Fetch est responsable de la r\xE9ception des transactions. Dans celle-ci, les validateurs classeront les transactions entrantes en fonction de trois ports :",-1),he={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/gossip/src/contact_info.rs#L27",target:"_blank",rel:"noopener noreferrer"},_e=n("tpu"),me=n(" g\xE8re les transactions r\xE9guli\xE8res telles que les transferts de jetons, les mints de NFT et les instructions de programme"),ke={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/gossip/src/contact_info.rs#L31",target:"_blank",rel:"noopener noreferrer"},be=n("tpu_vote"),fe=n(" se concentre exclusivement sur les transactions de vote"),ge={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/gossip/src/contact_info.rs#L29",target:"_blank",rel:"noopener noreferrer"},ve=n("tpu_forwards"),qe=n(" transmet les paquets non trait\xE9s au leader suivant si le leader actuel est incapable de traiter toutes les transactions."),ye=n("Pour plus d'informations sur le TPU, veuillez consulter "),xe={href:"https://jito-labs.medium.com/solana-validator-101-transaction-processing-90bcdc271143",target:"_blank",rel:"noopener noreferrer"},we=n("cet excellent article de Jito Labs"),Pe=n("."),Le=e("h2",{id:"comment-les-transactions-sont-rejetees",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#comment-les-transactions-sont-rejetees","aria-hidden":"true"},"#"),n(" Comment Les Transactions Sont Rejet\xE9es")],-1),Te=e("p",null,"Tout au long du voyage d'une transaction, il existe quelques sc\xE9narios dans lesquels la transaction peut \xEAtre involontairement rejet\xE9e du r\xE9seau.",-1),Ce=e("h3",{id:"avant-le-traitement-d-une-transaction",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#avant-le-traitement-d-une-transaction","aria-hidden":"true"},"#"),n(" Avant le traitement d'une transaction")],-1),Re=n("Si le r\xE9seau rejette une transaction, il le fera tr\xE8s probablement avant que la transaction ne soit trait\xE9e par un leader. La "),je={href:"https://en.wikipedia.org/wiki/Packet_loss",target:"_blank",rel:"noopener noreferrer"},Se=n("perte de paquets"),Be=n(" UDP est la raison la plus simple pour laquelle cela peut se produire. En p\xE9riode de charge intense du r\xE9seau, il est \xE9galement possible que les validateurs soient submerg\xE9s par le nombre de transactions \xE0 traiter. Bien que les validateurs soient \xE9quip\xE9s pour transmettre les transactions exc\xE9dentaires via "),De=e("code",null,"tpu_forwards",-1),Ae=n(", il y a une limite \xE0 la quantit\xE9 de donn\xE9es qui peuvent \xEAtre "),Ue={href:"https://github.com/solana-labs/solana/blob/master/core/src/banking_stage.rs#L389",target:"_blank",rel:"noopener noreferrer"},Ve=n("transmises"),Ee=n(". De plus, chaque transfert est limit\xE9 \xE0 un seul saut entre les validateurs. En d'autres termes, les transactions re\xE7ues sur le port "),He=e("code",null,"tpu_forwards",-1),Ie=n(" ne sont pas transmises \xE0 d'autres validateurs."),Ne=n("Il existe \xE9galement deux raisons moins connues pour lesquelles une transaction peut \xEAtre rejet\xE9e avant d'\xEAtre trait\xE9e. Le premier sc\xE9nario implique des transactions qui sont soumises via un pool RPC. Il arrive qu'une partie de la pool RPC soit suffisamment en avance sur le reste de la pool. Cela peut poser des probl\xE8mes lorsque les n\u0153uds de la pool doivent travailler ensemble. Dans cet exemple, le "),Fe={href:"https://docs.solana.com/developing/programming-model/transactions#recent-blockhash",target:"_blank",rel:"noopener noreferrer"},Ke=n("recentBlockhash"),Oe=n(" de la transaction est interrog\xE9 \xE0 partir de la partie avanc\xE9e de la pool (Backend A). Lorsque la transaction est soumise \xE0 la partie en retard de la pool (Backend B), les n\u0153uds ne reconna\xEEtront pas le blockhash avanc\xE9 et rejetteront la transaction. Cela peut \xEAtre d\xE9tect\xE9 lors de la soumission de la transaction si les d\xE9veloppeurs activent les "),ze={href:"https://docs.solana.com/developing/clients/jsonrpc-api#sendtransaction",target:"_blank",rel:"noopener noreferrer"},Je=n("contr\xF4les pr\xE9alables (preflight checks)"),Me=n(" de "),Ge=e("code",null,"sendTransaction",-1),Qe=n("."),We=r('

    Dropped via RPC Pool

    Les forks temporaires du r\xE9seau peuvent \xE9galement entra\xEEner le rejet de transactions. Si un validateur est lent \xE0 rejouer ses blocs pendant l'\xC9tape de Banking, il peut finir par cr\xE9er un fork minoritaire. Quand un client cr\xE9e une transaction, il est possible que la transaction fasse r\xE9f\xE9rence \xE0 un recentBlockhash qui n'existe que sur le fork minoritaire. Apr\xE8s la soumission de la transaction, le cluster peut alors se d\xE9tacher de son fork minoritaire avant que la transaction ne soit trait\xE9e. Dans ce sc\xE9nario, la transaction est rejet\xE9e parce que le blockhash n'a pas \xE9t\xE9 trouv\xE9.

    Dropped due to Minority Fork (Before Processed)

    Apr\xE8s le traitement d'une transaction et avant sa finalisation

    Dans le cas o\xF9 une transaction fait r\xE9f\xE9rence \xE0 un recentBlockhash d'un fork minoritaire, il est toujours possible que la transaction soit trait\xE9e. Dans ce cas, cependant, il serait trait\xE9 par le leader du fork minoritaire. Lorsque ce leader tente de partager ses transactions trait\xE9es avec le reste du r\xE9seau, il ne parvient pas \xE0 obtenir un consensus avec la majorit\xE9 des validateurs qui ne reconnaissent pas le fork minoritaire. A ce stade, la transaction serait rejet\xE9e avant d'\xEAtre finalis\xE9e.

    Dropped due to Minority Fork (After Processed)

    Traitement Des Transactions Rejet\xE9es

    Bien que les n\u0153uds RPC tentent de retransmettre les transactions, l'algorithme qu'ils utilisent est g\xE9n\xE9rique et souvent mal adapt\xE9 aux besoins des applications sp\xE9cifiques. Pour se pr\xE9parer aux p\xE9riodes de congestion du r\xE9seau, les d\xE9veloppeurs d'applications doivent personnaliser leur propre logique de retransmission.

    Un Examen Approfondi De sendTransaction

    Lorsqu'il s'agit de soumettre des transactions, la m\xE9thode RPC sendTransaction est le principal outil \xE0 la disposition des d\xE9veloppeurs. sendTransaction est seulement charg\xE9 de relayer une transaction d'un client vers un noeud RPC. Si le noeud re\xE7oit la transaction, sendTransaction retournera l'identifiant de la transaction qui peut \xEAtre utilis\xE9 pour suivre la transaction. Une r\xE9ponse positive n'indique pas si la transaction sera trait\xE9e ou finalis\xE9e par le cluster.

    ',10),Ye={class:"custom-container tip"},Xe=e("p",{class:"custom-container-title"},"TIP",-1),Ze=e("h4",{id:"parametres-de-la-requete",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#parametres-de-la-requete","aria-hidden":"true"},"#"),n(" Param\xE8tres De La Requ\xEAte")],-1),$e=e("li",null,[e("code",null,"transaction"),n(": "),e("code",null,"string"),n(" - Transaction enti\xE8rement sign\xE9e, sous forme de cha\xEEne de caract\xE8res cod\xE9e")],-1),en=n("(facultatif) "),nn=e("code",null,"configuration object",-1),sn=n(": "),tn=e("code",null,"object",-1),an=e("li",null,[e("code",null,"skipPreflight"),n(": "),e("code",null,"boolean"),n(" - si "),e("em",null,"true"),n(", ignore les contr\xF4les pr\xE9alables de la transaction (par d\xE9faut : "),e("em",null,"false"),n(")")],-1),on=n("(facultatif) "),rn=e("code",null,"preflightCommitment",-1),cn=n(": "),ln=e("code",null,"string",-1),un=n(" - "),pn={href:"https://docs.solana.com/developing/clients/jsonrpc-api#configuring-state-commitment",target:"_blank",rel:"noopener noreferrer"},dn=n("Commitment"),hn=n(" Niveau \xE0 utiliser pour les simulations pr\xE9alables par rapport au slot bank (par d\xE9faut : "),_n=e("em",null,'"finalized"',-1),mn=n(")."),kn=e("li",null,[n("(facultatif) "),e("code",null,"encoding"),n(": "),e("code",null,"string"),n(' - Encodage utilis\xE9 pour les donn\xE9es de la transaction. Soit "base58" (lent), soit "base64". (par d\xE9faut : "base58").')],-1),bn=e("li",null,[n("(facultatif) "),e("code",null,"maxRetries"),n(": "),e("code",null,"usize"),n(" - Nombre maximal de fois o\xF9 le n\u0153ud RPC doit r\xE9essayer d'envoyer la transaction au leader. Si ce param\xE8tre n'est pas fourni, le n\u0153ud RPC r\xE9essayera la transaction jusqu'\xE0 ce qu'elle soit finalis\xE9e ou jusqu'\xE0 ce que le blockhash expire.")],-1),fn=e("h4",{id:"reponse",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#reponse","aria-hidden":"true"},"#"),n(" R\xE9ponse")],-1),gn=e("code",null,"transaction id",-1),vn=n(": "),qn=e("code",null,"string",-1),yn=n(" - Premi\xE8re signature de transaction incorpor\xE9e dans la transaction, sous forme de cha\xEEne de caract\xE8res cod\xE9e en base-58. Cet identifiant de transaction peut \xEAtre utilis\xE9 avec "),xn={href:"https://docs.solana.com/developing/clients/jsonrpc-api#getsignaturestatuses",target:"_blank",rel:"noopener noreferrer"},wn=n("getSignatureStatuses"),Pn=n(" pour demander des mises \xE0 jour de statut."),Ln=e("h2",{id:"personnalisation-de-la-logique-de-retransmission",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#personnalisation-de-la-logique-de-retransmission","aria-hidden":"true"},"#"),n(" Personnalisation De La logique De Retransmission")],-1),Tn=n("Afin de d\xE9velopper leur propre logique de retransmission, les d\xE9veloppeurs doivent tirer parti du param\xE8tre "),Cn=e("code",null,"maxRetries",-1),Rn=n(" de "),jn=e("code",null,"sendTransaction",-1),Sn=n(". S'il est fourni, "),Bn=e("code",null,"maxRetries",-1),Dn=n(" remplacera la logique de r\xE9-essai par d\xE9faut d'un n\u0153ud RPC, permettant aux d\xE9veloppeurs de contr\xF4ler manuellement le processus de r\xE9-essai "),An={href:"https://github.com/solana-labs/solana/blob/98707baec2385a4f7114d2167ef6dfb1406f954f/validator/src/main.rs#L1258-L1274",target:"_blank",rel:"noopener noreferrer"},Un=n("dans des limites raisonnables"),Vn=n("."),En=n("Un sch\xE9ma courant pour r\xE9essayer manuellement les transactions implique le stockage temporaire de "),Hn=e("code",null,"lastValidBlockHeight",-1),In=n(" qui provient de "),Nn={href:"https://docs.solana.com/developing/clients/jsonrpc-api#getlatestblockhash",target:"_blank",rel:"noopener noreferrer"},Fn=n("getLatestBlockhash"),Kn=n(". Une fois stock\xE9e, une application peut alors "),On={href:"https://docs.solana.com/developing/clients/jsonrpc-api#getblockheight",target:"_blank",rel:"noopener noreferrer"},zn=n("interroger la hauteur de bloc du cluster (cluster\u2019s blockheight)"),Jn=n(" et r\xE9essayer manuellement la transaction \xE0 un moment appropri\xE9. En cas de congestion du r\xE9seau, il est avantageux de mettre "),Mn=e("code",null,"maxRetries",-1),Gn=n(" \xE0 0 et de retransmettre manuellement via un algorithme personnalis\xE9. Alors que certaines applications peuvent utiliser un algorithme de "),Qn={href:"https://en.wikipedia.org/wiki/Exponential_backoff",target:"_blank",rel:"noopener noreferrer"},Wn=n("backoff exponentiel"),Yn=n(", d'autres, comme [Mango],(https://www.mango.markets/) choisissent de "),Xn={href:"https://github.com/blockworks-foundation/mango-ui/blob/b6abfc6c13b71fc17ebbe766f50b8215fa1ec54f/src/utils/send.tsx#L713",target:"_blank",rel:"noopener noreferrer"},Zn=n("resoumettre continuellement"),$n=n(" les transactions \xE0 un intervalle constant jusqu'\xE0 ce qu'un certain d\xE9lai se soit \xE9coul\xE9."),es=e("div",{class:"language-typescript ext-ts line-numbers-mode"},[e("pre",{class:"language-typescript"},[e("code",null,[e("span",{class:"token keyword"},"import"),n(),e("span",{class:"token punctuation"},"{"),n(` +import{_ as u,r as a,o as p,c as d,a as e,b as s,w as o,F as h,d as n,e as r}from"./app.2fbb9e96.js";var _="/assets/tx-journey.dd6310be.png",m="/assets/tpu-jito-labs.8bb32fb6.png",k="/assets/dropped-via-rpc-pool.8d1ce9af.png",b="/assets/dropped-minority-fork-pre-process.555653e1.png",f="/assets/dropped-minority-fork-post-process.48c3c955.png";const g={},v=e("h1",{id:"reessayer-des-transactions",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#reessayer-des-transactions","aria-hidden":"true"},"#"),n(" R\xE9essayer Des Transactions")],-1),q=n("Il arrive parfois qu'une transaction apparemment valide soit rejet\xE9e avant d'\xEAtre incluse dans un bloc. Cela se produit le plus souvent pendant les p\xE9riodes de congestion du r\xE9seau, lorsqu'un n\u0153ud RPC ne parvient pas \xE0 retransmettre la transaction au "),y={href:"https://docs.solana.com/terminology#leader",target:"_blank",rel:"noopener noreferrer"},x=n("leader"),w=n(". Pour l'utilisateur final, il peut avoir l'impression que sa transaction dispara\xEEt compl\xE8tement. Si les n\u0153uds RPC sont \xE9quip\xE9s d'un algorithme de retransmission g\xE9n\xE9rique, les d\xE9veloppeurs d'applications sont \xE9galement capables de d\xE9velopper leur propre logique de retransmission personnalis\xE9e."),P=r('

    Faits

    Fiche d'Information

    • Les n\u0153uds RPC tenteront de retransmettre les transactions en utilisant un algorithme g\xE9n\xE9rique
    • ALes d\xE9veloppeurs d'applications peuvent mettre en \u0153uvre leur propre logique de retransmission personnalis\xE9e
    • Les d\xE9veloppeurs devraient tirer parti du param\xE8tre maxRetries de la m\xE9thode JSON-RPC sendTransaction
    • Les d\xE9veloppeurs devraient activer des contr\xF4les en amont afin de d\xE9tecter les erreurs avant que les transactions ne soient soumises
    • Avant de re-signer une transaction, il est tr\xE8s important de s'assurer que le blockhash de la transaction initiale a expir\xE9

    Le Voyage d'une Transaction

    Comment Les Clients Soumettent Les Transactions

    Chez Solana, il n'y a pas de concept de mempool.Toutes les transactions, qu'elles soient initi\xE9es par un programme ou par un utilisateur final, sont achemin\xE9es efficacement vers les leaders afin d'\xEAtre trait\xE9es dans un bloc. Il existe deux mani\xE8res principales d'envoyer une transaction aux leaders :

    ',5),L=n("Par proxy via un serveur RPC et la m\xE9thode JSON-RPC "),T={href:"https://docs.solana.com/developing/clients/jsonrpc-api#sendtransaction",target:"_blank",rel:"noopener noreferrer"},C=n("sendTransaction"),R=n("Directement aux leaders via un "),j={href:"https://docs.rs/solana-client/1.7.3/solana_client/tpu_client/index.html",target:"_blank",rel:"noopener noreferrer"},S=n("Client TPU"),B=e("p",null,"La grande majorit\xE9 des utilisateurs finaux soumettront des transactions via un serveur RPC. Lorsqu'un client soumet une transaction, le n\u0153ud RPC r\xE9cepteur tente \xE0 son tour de transmettre la transaction aux leaders actuels et suivants. Tant que la transaction n'est pas trait\xE9e par un leader, il n'y a pas d'enregistrement de la transaction en dehors de ce dont le client et les n\u0153uds RPC relais ont connaissance. Dans le cas d'un client TPU, la retransmission et le transfert des leaders sont enti\xE8rement g\xE9r\xE9s par le logiciel client.",-1),D=e("p",null,[e("img",{src:_,alt:"Transaction Journey"})],-1),A=e("h3",{id:"comment-les-n\u0153uds-rpc-transmettent-les-transactions",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#comment-les-n\u0153uds-rpc-transmettent-les-transactions","aria-hidden":"true"},"#"),n(" Comment Les N\u0153uds RPC Transmettent Les Transactions")],-1),U=n("Lorsqu'un n\u0153ud RPC re\xE7oit une transaction via "),V=e("code",null,"sendTransaction",-1),E=n(", il la convertit en un paquet "),H={href:"https://en.wikipedia.org/wiki/User_Datagram_Protocol",target:"_blank",rel:"noopener noreferrer"},I=n("UDP"),N=n(" avant de la transmettre aux leaders concern\xE9s. UDP permet aux validateurs de communiquer rapidement entre eux, mais ne fournit aucune garantie quant \xE0 la livraison des transactions."),F=n("Comme le calendrier des leaders de Solana est connu \xE0 l'avance pour chaque "),K={href:"https://docs.solana.com/terminology#epoch",target:"_blank",rel:"noopener noreferrer"},O=n("epoque"),z=n(" (~2 jours), un noeud RPC diffusera sa transaction directement aux leaders actuels et suivants. Cela contraste avec d'autres protocoles de bavardage, comme Ethereum, qui propagent les transactions de mani\xE8re al\xE9atoire et \xE0 grande \xE9chelle sur l'ensemble du r\xE9seau. Par d\xE9faut, les n\u0153uds RPC essaient de transmettre les transactions aux leaders toutes les deux secondes jusqu'\xE0 ce que la transaction soit finalis\xE9e ou que le hash de blocs de la transaction expire (150 blocs ou ~1 minute 19 secondes au moment de la r\xE9daction de ce document). Si la taille de la file d'attente de retransmissions en attente est sup\xE9rieure \xE0 "),J={href:"https://github.com/solana-labs/solana/blob/bfbbc53dac93b3a5c6be9b4b65f679fdb13e41d9/send-transaction-service/src/send_transaction_service.rs#L20",target:"_blank",rel:"noopener noreferrer"},M=n("10,000 transactions"),G=n(" les nouvelles transactions soumises sont rejet\xE9es. Il existe des "),Q={href:"https://github.com/solana-labs/solana/blob/bfbbc53dac93b3a5c6be9b4b65f679fdb13e41d9/validator/src/main.rs#L1172",target:"_blank",rel:"noopener noreferrer"},W=n("arguments"),Y=n(" de ligne de commande que les op\xE9rateurs RPC peuvent ajuster pour modifier le comportement par d\xE9faut de cette logique de r\xE9essai."),X=n("Lorsqu'un n\u0153ud RPC transmet une transaction, il tente de la transmettre \xE0 l'"),Z={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/validator.rs#L867",target:"_blank",rel:"noopener noreferrer"},$=n("Unit\xE9 de Traitement des Transactions (Transaction Processing Unit ou TPU)"),ee=n(" d'un leader. Le TPU traite les transactions en cinq phases distinctes :"),ne={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/fetch_stage.rs#L21",target:"_blank",rel:"noopener noreferrer"},se=n("\xC9tape de R\xE9cup\xE9ration (Fetch Stage)"),te={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/tpu.rs#L91",target:"_blank",rel:"noopener noreferrer"},ae=n("\xC9tape de SigVerify (SigVerify Stage)"),oe={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/banking_stage.rs#L249",target:"_blank",rel:"noopener noreferrer"},re=n("\xC9tape de Banking (Banking Stage)"),ie={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/poh/src/poh_service.rs",target:"_blank",rel:"noopener noreferrer"},ce=n("Service Proof of History"),le={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/tpu.rs#L136",target:"_blank",rel:"noopener noreferrer"},ue=n("\xC9tape de Transmission (Broadcast Stage)"),pe=e("p",null,[e("img",{src:m,alt:"TPU Overview"}),e("small",{style:{display:"block","text-align":"center"}},"Avec l'Autorisation de Jito Labs")],-1),de=e("p",null,"Parmi ces cinq phases, l'\xE9tape Fetch est responsable de la r\xE9ception des transactions. Dans celle-ci, les validateurs classeront les transactions entrantes en fonction de trois ports :",-1),he={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/gossip/src/contact_info.rs#L27",target:"_blank",rel:"noopener noreferrer"},_e=n("tpu"),me=n(" g\xE8re les transactions r\xE9guli\xE8res telles que les transferts de jetons, les mints de NFT et les instructions de programme"),ke={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/gossip/src/contact_info.rs#L31",target:"_blank",rel:"noopener noreferrer"},be=n("tpu_vote"),fe=n(" se concentre exclusivement sur les transactions de vote"),ge={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/gossip/src/contact_info.rs#L29",target:"_blank",rel:"noopener noreferrer"},ve=n("tpu_forwards"),qe=n(" transmet les paquets non trait\xE9s au leader suivant si le leader actuel est incapable de traiter toutes les transactions."),ye=n("Pour plus d'informations sur le TPU, veuillez consulter "),xe={href:"https://jito-labs.medium.com/solana-validator-101-transaction-processing-90bcdc271143",target:"_blank",rel:"noopener noreferrer"},we=n("cet excellent article de Jito Labs"),Pe=n("."),Le=e("h2",{id:"comment-les-transactions-sont-rejetees",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#comment-les-transactions-sont-rejetees","aria-hidden":"true"},"#"),n(" Comment Les Transactions Sont Rejet\xE9es")],-1),Te=e("p",null,"Tout au long du voyage d'une transaction, il existe quelques sc\xE9narios dans lesquels la transaction peut \xEAtre involontairement rejet\xE9e du r\xE9seau.",-1),Ce=e("h3",{id:"avant-le-traitement-d-une-transaction",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#avant-le-traitement-d-une-transaction","aria-hidden":"true"},"#"),n(" Avant le traitement d'une transaction")],-1),Re=n("Si le r\xE9seau rejette une transaction, il le fera tr\xE8s probablement avant que la transaction ne soit trait\xE9e par un leader. La "),je={href:"https://en.wikipedia.org/wiki/Packet_loss",target:"_blank",rel:"noopener noreferrer"},Se=n("perte de paquets"),Be=n(" UDP est la raison la plus simple pour laquelle cela peut se produire. En p\xE9riode de charge intense du r\xE9seau, il est \xE9galement possible que les validateurs soient submerg\xE9s par le nombre de transactions \xE0 traiter. Bien que les validateurs soient \xE9quip\xE9s pour transmettre les transactions exc\xE9dentaires via "),De=e("code",null,"tpu_forwards",-1),Ae=n(", il y a une limite \xE0 la quantit\xE9 de donn\xE9es qui peuvent \xEAtre "),Ue={href:"https://github.com/solana-labs/solana/blob/master/core/src/banking_stage.rs#L389",target:"_blank",rel:"noopener noreferrer"},Ve=n("transmises"),Ee=n(". De plus, chaque transfert est limit\xE9 \xE0 un seul saut entre les validateurs. En d'autres termes, les transactions re\xE7ues sur le port "),He=e("code",null,"tpu_forwards",-1),Ie=n(" ne sont pas transmises \xE0 d'autres validateurs."),Ne=n("Il existe \xE9galement deux raisons moins connues pour lesquelles une transaction peut \xEAtre rejet\xE9e avant d'\xEAtre trait\xE9e. Le premier sc\xE9nario implique des transactions qui sont soumises via un pool RPC. Il arrive qu'une partie de la pool RPC soit suffisamment en avance sur le reste de la pool. Cela peut poser des probl\xE8mes lorsque les n\u0153uds de la pool doivent travailler ensemble. Dans cet exemple, le "),Fe={href:"https://docs.solana.com/developing/programming-model/transactions#recent-blockhash",target:"_blank",rel:"noopener noreferrer"},Ke=n("recentBlockhash"),Oe=n(" de la transaction est interrog\xE9 \xE0 partir de la partie avanc\xE9e de la pool (Backend A). Lorsque la transaction est soumise \xE0 la partie en retard de la pool (Backend B), les n\u0153uds ne reconna\xEEtront pas le blockhash avanc\xE9 et rejetteront la transaction. Cela peut \xEAtre d\xE9tect\xE9 lors de la soumission de la transaction si les d\xE9veloppeurs activent les "),ze={href:"https://docs.solana.com/developing/clients/jsonrpc-api#sendtransaction",target:"_blank",rel:"noopener noreferrer"},Je=n("contr\xF4les pr\xE9alables (preflight checks)"),Me=n(" de "),Ge=e("code",null,"sendTransaction",-1),Qe=n("."),We=r('

    Dropped via RPC Pool

    Les forks temporaires du r\xE9seau peuvent \xE9galement entra\xEEner le rejet de transactions. Si un validateur est lent \xE0 rejouer ses blocs pendant l'\xC9tape de Banking, il peut finir par cr\xE9er un fork minoritaire. Quand un client cr\xE9e une transaction, il est possible que la transaction fasse r\xE9f\xE9rence \xE0 un recentBlockhash qui n'existe que sur le fork minoritaire. Apr\xE8s la soumission de la transaction, le cluster peut alors se d\xE9tacher de son fork minoritaire avant que la transaction ne soit trait\xE9e. Dans ce sc\xE9nario, la transaction est rejet\xE9e parce que le blockhash n'a pas \xE9t\xE9 trouv\xE9.

    Dropped due to Minority Fork (Before Processed)

    Apr\xE8s le traitement d'une transaction et avant sa finalisation

    Dans le cas o\xF9 une transaction fait r\xE9f\xE9rence \xE0 un recentBlockhash d'un fork minoritaire, il est toujours possible que la transaction soit trait\xE9e. Dans ce cas, cependant, il serait trait\xE9 par le leader du fork minoritaire. Lorsque ce leader tente de partager ses transactions trait\xE9es avec le reste du r\xE9seau, il ne parvient pas \xE0 obtenir un consensus avec la majorit\xE9 des validateurs qui ne reconnaissent pas le fork minoritaire. A ce stade, la transaction serait rejet\xE9e avant d'\xEAtre finalis\xE9e.

    Dropped due to Minority Fork (After Processed)

    Traitement Des Transactions Rejet\xE9es

    Bien que les n\u0153uds RPC tentent de retransmettre les transactions, l'algorithme qu'ils utilisent est g\xE9n\xE9rique et souvent mal adapt\xE9 aux besoins des applications sp\xE9cifiques. Pour se pr\xE9parer aux p\xE9riodes de congestion du r\xE9seau, les d\xE9veloppeurs d'applications doivent personnaliser leur propre logique de retransmission.

    Un Examen Approfondi De sendTransaction

    Lorsqu'il s'agit de soumettre des transactions, la m\xE9thode RPC sendTransaction est le principal outil \xE0 la disposition des d\xE9veloppeurs. sendTransaction est seulement charg\xE9 de relayer une transaction d'un client vers un noeud RPC. Si le noeud re\xE7oit la transaction, sendTransaction retournera l'identifiant de la transaction qui peut \xEAtre utilis\xE9 pour suivre la transaction. Une r\xE9ponse positive n'indique pas si la transaction sera trait\xE9e ou finalis\xE9e par le cluster.

    ',10),Ye={class:"custom-container tip"},Xe=e("p",{class:"custom-container-title"},"TIP",-1),Ze=e("h4",{id:"parametres-de-la-requete",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#parametres-de-la-requete","aria-hidden":"true"},"#"),n(" Param\xE8tres De La Requ\xEAte")],-1),$e=e("li",null,[e("code",null,"transaction"),n(": "),e("code",null,"string"),n(" - Transaction enti\xE8rement sign\xE9e, sous forme de cha\xEEne de caract\xE8res cod\xE9e")],-1),en=n("(facultatif) "),nn=e("code",null,"configuration object",-1),sn=n(": "),tn=e("code",null,"object",-1),an=e("li",null,[e("code",null,"skipPreflight"),n(": "),e("code",null,"boolean"),n(" - si "),e("em",null,"true"),n(", ignore les contr\xF4les pr\xE9alables de la transaction (par d\xE9faut : "),e("em",null,"false"),n(")")],-1),on=n("(facultatif) "),rn=e("code",null,"preflightCommitment",-1),cn=n(": "),ln=e("code",null,"string",-1),un=n(" - "),pn={href:"https://docs.solana.com/developing/clients/jsonrpc-api#configuring-state-commitment",target:"_blank",rel:"noopener noreferrer"},dn=n("Commitment"),hn=n(" Niveau \xE0 utiliser pour les simulations pr\xE9alables par rapport au slot bank (par d\xE9faut : "),_n=e("em",null,'"finalized"',-1),mn=n(")."),kn=e("li",null,[n("(facultatif) "),e("code",null,"encoding"),n(": "),e("code",null,"string"),n(' - Encodage utilis\xE9 pour les donn\xE9es de la transaction. Soit "base58" (lent), soit "base64". (par d\xE9faut : "base58").')],-1),bn=e("li",null,[n("(facultatif) "),e("code",null,"maxRetries"),n(": "),e("code",null,"usize"),n(" - Nombre maximal de fois o\xF9 le n\u0153ud RPC doit r\xE9essayer d'envoyer la transaction au leader. Si ce param\xE8tre n'est pas fourni, le n\u0153ud RPC r\xE9essayera la transaction jusqu'\xE0 ce qu'elle soit finalis\xE9e ou jusqu'\xE0 ce que le blockhash expire.")],-1),fn=e("h4",{id:"reponse",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#reponse","aria-hidden":"true"},"#"),n(" R\xE9ponse")],-1),gn=e("code",null,"transaction id",-1),vn=n(": "),qn=e("code",null,"string",-1),yn=n(" - Premi\xE8re signature de transaction incorpor\xE9e dans la transaction, sous forme de cha\xEEne de caract\xE8res cod\xE9e en base-58. Cet identifiant de transaction peut \xEAtre utilis\xE9 avec "),xn={href:"https://docs.solana.com/developing/clients/jsonrpc-api#getsignaturestatuses",target:"_blank",rel:"noopener noreferrer"},wn=n("getSignatureStatuses"),Pn=n(" pour demander des mises \xE0 jour de statut."),Ln=e("h2",{id:"personnalisation-de-la-logique-de-retransmission",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#personnalisation-de-la-logique-de-retransmission","aria-hidden":"true"},"#"),n(" Personnalisation De La logique De Retransmission")],-1),Tn=n("Afin de d\xE9velopper leur propre logique de retransmission, les d\xE9veloppeurs doivent tirer parti du param\xE8tre "),Cn=e("code",null,"maxRetries",-1),Rn=n(" de "),jn=e("code",null,"sendTransaction",-1),Sn=n(". S'il est fourni, "),Bn=e("code",null,"maxRetries",-1),Dn=n(" remplacera la logique de r\xE9-essai par d\xE9faut d'un n\u0153ud RPC, permettant aux d\xE9veloppeurs de contr\xF4ler manuellement le processus de r\xE9-essai "),An={href:"https://github.com/solana-labs/solana/blob/98707baec2385a4f7114d2167ef6dfb1406f954f/validator/src/main.rs#L1258-L1274",target:"_blank",rel:"noopener noreferrer"},Un=n("dans des limites raisonnables"),Vn=n("."),En=n("Un sch\xE9ma courant pour r\xE9essayer manuellement les transactions implique le stockage temporaire de "),Hn=e("code",null,"lastValidBlockHeight",-1),In=n(" qui provient de "),Nn={href:"https://docs.solana.com/developing/clients/jsonrpc-api#getlatestblockhash",target:"_blank",rel:"noopener noreferrer"},Fn=n("getLatestBlockhash"),Kn=n(". Une fois stock\xE9e, une application peut alors "),On={href:"https://docs.solana.com/developing/clients/jsonrpc-api#getblockheight",target:"_blank",rel:"noopener noreferrer"},zn=n("interroger la hauteur de bloc du cluster (cluster\u2019s blockheight)"),Jn=n(" et r\xE9essayer manuellement la transaction \xE0 un moment appropri\xE9. En cas de congestion du r\xE9seau, il est avantageux de mettre "),Mn=e("code",null,"maxRetries",-1),Gn=n(" \xE0 0 et de retransmettre manuellement via un algorithme personnalis\xE9. Alors que certaines applications peuvent utiliser un algorithme de "),Qn={href:"https://en.wikipedia.org/wiki/Exponential_backoff",target:"_blank",rel:"noopener noreferrer"},Wn=n("backoff exponentiel"),Yn=n(", d'autres, comme [Mango],(https://www.mango.markets/) choisissent de "),Xn={href:"https://github.com/blockworks-foundation/mango-ui/blob/b6abfc6c13b71fc17ebbe766f50b8215fa1ec54f/src/utils/send.tsx#L713",target:"_blank",rel:"noopener noreferrer"},Zn=n("resoumettre continuellement"),$n=n(" les transactions \xE0 un intervalle constant jusqu'\xE0 ce qu'un certain d\xE9lai se soit \xE9coul\xE9."),es=e("div",{class:"language-typescript ext-ts line-numbers-mode"},[e("pre",{class:"language-typescript"},[e("code",null,[e("span",{class:"token keyword"},"import"),n(),e("span",{class:"token punctuation"},"{"),n(` Keypair`),e("span",{class:"token punctuation"},","),n(` Connection`),e("span",{class:"token punctuation"},","),n(` `),e("span",{class:"token constant"},"LAMPORTS_PER_SOL"),e("span",{class:"token punctuation"},","),n(` diff --git a/docs/.vuepress/dist/assets/retrying-transactions.html.34486519.js b/docs/.vuepress/dist/assets/retrying-transactions.html.d6d95eab.js similarity index 99% rename from docs/.vuepress/dist/assets/retrying-transactions.html.34486519.js rename to docs/.vuepress/dist/assets/retrying-transactions.html.d6d95eab.js index 5b2632d0f..1df23d92a 100644 --- a/docs/.vuepress/dist/assets/retrying-transactions.html.34486519.js +++ b/docs/.vuepress/dist/assets/retrying-transactions.html.d6d95eab.js @@ -1,4 +1,4 @@ -import{_ as p,r as o,o as d,c as u,a as n,b as a,w as e,F as h,d as s,e as c}from"./app.cfdf84e7.js";var _="/assets/tx-journey.dd6310be.png",k="/assets/tpu-jito-labs.8bb32fb6.png",b="/assets/dropped-via-rpc-pool.8d1ce9af.png",f="/assets/dropped-minority-fork-pre-process.555653e1.png",m="/assets/dropped-minority-fork-post-process.48c3c955.png";const g={},T=n("h1",{id:"retrying-transactions",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#retrying-transactions","aria-hidden":"true"},"#"),s(" Retrying Transactions")],-1),w=s("\uBA87\uBA87 \uC0C1\uD669\uC5D0\uC11C \uC720\uD6A8\uD574 \uBCF4\uC774\uB294 Trasaction\uC774 block\uC5D0 \uD3EC\uD568\uB418\uAE30 \uC804\uC5D0 \uAC70\uC808\uB420\uC9C0\uB3C4 \uBAA8\uB985\uB2C8\uB2E4. RPC \uB178\uB4DC\uAC00 "),y={href:"https://docs.solana.com/terminology#leader",target:"_blank",rel:"noopener noreferrer"},P=s("leader"),v=s("\uC5D0\uAC8C \uADF8 Transaction\uC744 rebroadcast \uD558\uB294 \uAC83\uC744 \uC2E4\uD328\uD558\uB294 \uC0C1\uD669 \uAC19\uC740, \uB124\uD2B8\uC6CC\uD06C\uAC00 \uD63C\uC7A1\uD55C \uB3D9\uC548\uC5D0 \uC885\uC885 \uBC1C\uC0DD\uD569\uB2C8\uB2E4. \uC774\uAC83\uC740 end-user\uC5D0\uAC8C \uADF8\uB4E4\uC758 Transaction\uC774 \uC644\uC804\uD788 \uC0AC\uB77C\uC9C4 \uAC83\uCC98\uB7FC \uBCF4\uC77C\uC9C0\uB3C4 \uBAA8\uB985\uB2C8\uB2E4. RPC \uB178\uB4DC\uB4E4\uC740 generic rebroadcasting \uC54C\uACE0\uB9AC\uC998\uC744 \uAC16\uCD94\uACE0 \uC788\uC9C0\uB9CC, application \uAC1C\uBC1C\uC790\uB4E4\uC740 \uC790\uC2E0\uB9CC\uC758 cutom rebroadcasting logic\uC744 \uB9CC\uB4E4 \uC218\uB3C4 \uC788\uC2B5\uB2C8\uB2E4."),C=c('

    Facts

    Fact Sheet

    • RPC \uB178\uB4DC\uB4E4\uC740 Transaction\uC5D0 \uB300\uD55C generic \uC54C\uACE0\uB9AC\uC998\uC744 \uC0AC\uC6A9\uD574\uC11C rebroadcast\uB97C \uC2DC\uB3C4\uD560 \uAC83\uC785\uB2C8\uB2E4.
    • Application \uAC1C\uBC1C\uC790\uB4E4\uC740 \uC790\uC2E0\uB9CC\uC758 custom rebroadcasting logic\uC744 \uAD6C\uD604\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.
    • \uAC1C\uBC1C\uC790\uB4E4\uC740 sendTransaction JSON-RPC \uBA54\uC18C\uB4DC\uC5D0 \uC788\uB294 maxRetries \uD30C\uB77C\uBBF8\uD130\uC758 \uC774\uC810\uC744 \uD65C\uC6A9\uD574\uC57C \uD569\uB2C8\uB2E4.
    • \uAC1C\uBC1C\uC790\uB4E4\uC740 Transaction\uC774 \uBCF4\uB0B4\uC9C0\uAE30 \uC804\uC5D0 error\uB4E4\uC744 \uBC1C\uC0DD\uC2DC\uD0A4\uAE30 \uC704\uD55C \uC55E\uC120 check\uB4E4\uC744 \uAC00\uB2A5\uD558\uAC8C \uD574\uC57C\uD569\uB2C8\uB2E4.
    • \uC5B4\uB5A4 Transaction\uC5D0 \uB2E4\uC2DC \uC11C\uBA85\uD558\uAE30 \uC804\uC5D0, \uCCAB Transaction\uC758 Blockhash\uAC00 \uB9CC\uB8CC\uB410\uB294\uC9C0 \uD655\uC778\uD558\uB294 \uAC83\uC740 \uB9E4\uC6B0 \uC911\uC694\uD569\uB2C8\uB2E4.

    The Journey of a Transaction

    How Clients Submit Transactions

    Solana\uC5D0\uB294 mempool\uC5D0 \uB300\uD55C \uAC1C\uB150\uC774 \uC5C6\uC2B5\uB2C8\uB2E4. \uD504\uB85C\uADF8\uB7A8\uC774\uB098 end-user\uC5D0 \uC758\uD574 \uCD08\uAE30\uD654\uB41C \uBAA8\uB4E0 Transaction\uB4E4\uC740 block \uC548\uC73C\uB85C \uCC98\uB9AC\uB420 \uC218 \uC788\uAC8C \uD6A8\uC728\uC801\uC73C\uB85C leader\uB4E4\uC5D0\uAC8C \uB77C\uC6B0\uD305 \uB429\uB2C8\uB2E4. Transaction\uC774 leader\uB4E4\uC5D0\uAC8C \uBCF4\uB0B4\uC9C8 \uC218 \uC788\uB294 \uB450 \uAC00\uC9C0 \uC8FC\uB41C \uBC29\uBC95\uC774 \uC788\uC2B5\uB2C8\uB2E4:

    ',5),R=s("RPC \uC11C\uBC84\uB97C \uD1B5\uD55C Proxy \uADF8\uB9AC\uACE0 "),x={href:"https://docs.solana.com/developing/clients/jsonrpc-api#sendtransaction",target:"_blank",rel:"noopener noreferrer"},S=s("sendTransaction"),B=s(" JSON-RPC method\uC5D0 \uC758\uD574"),L={href:"https://docs.rs/solana-client/1.7.3/solana_client/tpu_client/index.html",target:"_blank",rel:"noopener noreferrer"},A=s("TPU Client"),j=s("\uB97C \uD1B5\uD574 leader\uB4E4\uC5D0\uAC8C \uC9C1\uC811"),H=n("p",null,"\uB300\uBD80\uBD84\uC758 end-user\uB4E4\uC740 RPC \uC11C\uBC84\uB97C \uD1B5\uD574 Transaction\uB4E4\uC744 \uBCF4\uB0BC \uAC83\uC785\uB2C8\uB2E4. Client\uAC00 Transaction\uC744 \uBCF4\uB0BC \uB54C, \uC218\uC2E0\uD55C RPC node\uB294 Transaction\uC744 \uD604\uC7AC\uC640 \uB2E4\uC74C leader\uB4E4\uC5D0\uAC8C \uCC28\uB840\uB85C broadcast \uD560 \uAC83\uC785\uB2C8\uB2E4. Transaction\uC774 leader\uC5D0 \uC758\uD574 \uCC98\uB9AC\uB420 \uB54C\uAE4C\uC9C0 Client\uC640 \uC804\uB2EC \uC911\uC778 RPC \uB178\uB4DC\uB4E4\uC774 \uC54C\uACE0 \uC788\uB294 \uAC83 \uC678\uBD80\uC5D0\uB294 \uADF8 Transaction\uC5D0 \uB300\uD55C \uAE30\uB85D\uC774 \uC874\uC7AC\uD558\uC9C0 \uC54A\uC744 \uAC83\uC785\uB2C8\uB2E4. TPC Client\uC758 \uACBD\uC6B0, rebroadcast\uC640 leader forwarding\uC740 \uC628\uC804\uD788 Client software\uC5D0 \uC758\uD574 \uB2E4\uB904\uC9D1\uB2C8\uB2E4.",-1),V=n("p",null,[n("img",{src:_,alt:"Transaction Journey"})],-1),z=n("h3",{id:"how-rpc-nodes-broadcast-transactions",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-rpc-nodes-broadcast-transactions","aria-hidden":"true"},"#"),s(" How RPC Nodes Broadcast Transactions")],-1),D=s("RPC\uB178\uB4DC\uB294 "),F=n("code",null,"sendTransaction",-1),U=s("\uC744 \uD1B5\uD574 Transaction\uC744 \uC218\uC2E0\uD55C \uD6C4\uC5D0, \uAD00\uB828\uB41C leader\uB4E4\uC5D0\uAC8C \uC804\uB2EC\uD558\uAE30 \uC804\uC5D0 Transaction\uC744 "),I={href:"https://en.wikipedia.org/wiki/User_Datagram_Protocol",target:"_blank",rel:"noopener noreferrer"},K=s("UDP"),N=s(" \uD328\uD0B7\uC73C\uB85C \uBCC0\uD658\uD560 \uAC83\uC785\uB2C8\uB2E4. UDP\uB294 validator\uB4E4\uC774 \uBE60\uB974\uAC8C \uC11C\uB85C \uD1B5\uC2E0\uD560 \uC218 \uC788\uAC8C \uD574\uC8FC\uC9C0\uB9CC, Transcation \uC804\uB2EC\uC744 \uBCF4\uC7A5\uD558\uC9C0\uB294 \uC54A\uC2B5\uB2C8\uB2E4."),E=s("Solana\uC758 leader \uC2A4\uCF00\uC904\uC740 \uB9E4 "),J={href:"https://docs.solana.com/terminology#epoch",target:"_blank",rel:"noopener noreferrer"},O=s("epoch"),M=s(" \uBCF4\uB2E4 \uC55E\uC120 \uAC83\uC73C\uB85C \uC54C\uB824\uC838 \uC788\uAE30 \uB54C\uBB38\uC5D0 (~2 days), RPC \uB178\uB4DC\uB294 Transaction\uC744 \uD604\uC7AC\uC640 \uB2E4\uC74C leader\uB4E4\uC5D0\uAC8C \uC989\uC2DC broadcast \uD560 \uAC83\uC785\uB2C8\uB2E4. \uC774\uAC83\uC740 Transaction\uB4E4\uC744 \uC804\uCCB4 \uB124\uD2B8\uC6CC\uD06C\uC5D0 \uB79C\uB364\uD558\uAC8C \uC804\uD30C\uD558\uB294 Ethereum\uACFC \uAC19\uC740 \uB2E4\uB978 \uD504\uB85C\uD1A0\uCF5C\uB4E4\uACFC \uB2E4\uB978 \uAC83\uC785\uB2C8\uB2E4. \uAE30\uBCF8\uC801\uC73C\uB85C, RPC \uB178\uB4DC\uB4E4\uC740 Transaction\uC774 \uC885\uACB0\uB418\uAC70\uB098 Transaction\uC758 Blockhash\uAC00 \uB9CC\uB8CC(150 blocks or ~1 \uBD84 19\uCD08, \uC774 \uAE00 \uC791\uC131 \uC2DC\uC810 \uAE30\uC900)\uB420 \uB54C\uAE4C\uC9C0 \uB9E4 2\uCD08 \uB9C8\uB2E4 Trnasaction\uB4E4\uC744 \uBCF4\uB0B4\uB294 \uC2DC\uB3C4\uB97C \uD560 \uAC83\uC785\uB2C8\uB2E4. \uB9CC\uC57D \uC544\uC9C1 \uCC98\uB9AC\uB418\uC9C0 \uC54A\uC740 rebroadcast\uC758 \uD050 \uC0AC\uC774\uC988\uAC00 "),G={href:"https://github.com/solana-labs/solana/blob/bfbbc53dac93b3a5c6be9b4b65f679fdb13e41d9/send-transaction-service/src/send_transaction_service.rs#L20",target:"_blank",rel:"noopener noreferrer"},q=s("10,000 transactions"),W=s(" \uBCF4\uB2E4 \uD06C\uB2E4\uBA74, \uC0C8\uB85C \uBCF4\uB0B4\uC9C0\uB294 Transaction\uB4E4\uC740 \uB4DC\uB78D\uB420 \uAC83\uC785\uB2C8\uB2E4. \uC774\uB7EC\uD55C \uC7AC\uC2DC\uB3C4 \uB85C\uC9C1\uC758 \uAE30\uBCF8 \uD589\uC704\uB97C \uBCC0\uACBD\uD558\uAE30 \uC704\uD574 RPC \uC6B4\uC601\uC790\uB4E4\uC774 \uC870\uC815\uD560 \uC218 \uC788\uB294 command-line "),Y={href:"https://github.com/solana-labs/solana/blob/bfbbc53dac93b3a5c6be9b4b65f679fdb13e41d9/validator/src/main.rs#L1172",target:"_blank",rel:"noopener noreferrer"},Q=s("arguments"),X=s("\uB4E4\uC774 \uC874\uC7AC\uD569\uB2C8\uB2E4."),Z=s("RPC \uB178\uB4DC\uAC00 Transaction\uC744 broadcast\uD560 \uB54C, \uB178\uB4DC\uB294 \uC774 Transaction\uC744 leader\uC758 "),$={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/validator.rs#L867",target:"_blank",rel:"noopener noreferrer"},nn=s("Transaction Processing Unit (TPU)"),sn=s("\uC5D0 \uBCF4\uB0B4\uB824\uACE0 \uD560 \uAC83\uC785\uB2C8\uB2E4. TPU\uB294 Transaction\uB4E4\uC744 \uB2E4\uC12F \uB2E8\uACC4\uB85C \uCC98\uB9AC\uD569\uB2C8\uB2E4:"),an={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/fetch_stage.rs#L21",target:"_blank",rel:"noopener noreferrer"},tn=s("Fetch Stage"),on={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/tpu.rs#L91",target:"_blank",rel:"noopener noreferrer"},en=s("SigVerify Stage"),cn={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/banking_stage.rs#L249",target:"_blank",rel:"noopener noreferrer"},rn=s("Banking Stage"),ln={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/poh/src/poh_service.rs",target:"_blank",rel:"noopener noreferrer"},pn=s("Proof of History Service"),dn={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/tpu.rs#L136",target:"_blank",rel:"noopener noreferrer"},un=s("Broadcast Stage"),hn=n("p",null,[n("img",{src:k,alt:"TPU Overview"}),n("small",{style:{display:"block","text-align":"center"}},"Image Courtesy of Jito Labs")],-1),_n=n("p",null,"\uC774 \uB2E4\uC12F \uB2E8\uACC4 \uC911 Fetch Stage\uB294 Transaction\uB4E4\uC744 \uC218\uC2E0\uD558\uB294 \uCC45\uC784\uC744 \uAC16\uC2B5\uB2C8\uB2E4. Fetch Stage\uC5D0\uC11C validator\uB4E4\uC740 \uB4E4\uC5B4\uC624\uB294 Transaction\uB4E4\uC744 3\uAC00\uC9C0 \uD3EC\uD2B8\uC5D0 \uB530\uB77C \uBD84\uB958\uD560 \uAC83\uC785\uB2C8\uB2E4.",-1),kn={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/gossip/src/contact_info.rs#L27",target:"_blank",rel:"noopener noreferrer"},bn=s("tpu"),fn=s("\uB294 token \uC804\uC1A1\uB4E4, NFT mint\uB4E4 \uADF8\uB9AC\uACE0 Program Instruction\uB4E4\uACFC \uAC19\uC740 \uC77C\uBC18\uC801\uC778 Transaction\uB4E4\uC744 \uB2E4\uB8F9\uB2C8\uB2E4."),mn={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/gossip/src/contact_info.rs#L31",target:"_blank",rel:"noopener noreferrer"},gn=s("tpu_vote"),Tn=s("\uB294 voting Transaction\uB4E4\uC744 \uC9D1\uC911\uC801\uC73C\uB85C \uB2E4\uB8F9\uB2C8\uB2E4."),wn={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/gossip/src/contact_info.rs#L29",target:"_blank",rel:"noopener noreferrer"},yn=s("tpu_forwards"),Pn=s("\uB294 \uB9CC\uC57D \uD604\uC7AC leader\uAC00 \uBAA8\uB4E0 Transaction\uB4E4\uC744 \uCC98\uB9AC\uD560 \uC218 \uC5C6\uB2E4\uBA74 \uAC00\uACF5\uB418\uC9C0 \uC54A\uC740 \uD328\uD0B7\uB4E4\uC744 \uB2E4\uC74C leader\uC5D0\uAC8C \uBCF4\uB0C5\uB2C8\uB2E4."),vn=s("TPU\uC5D0 \uB300\uD55C \uB354 \uB9CE\uC740 \uC815\uBCF4\uB294 \uB2E4\uC74C\uC744 \uCC38\uACE0\uD574\uC8FC\uC138\uC694. "),Cn={href:"https://jito-labs.medium.com/solana-validator-101-transaction-processing-90bcdc271143",target:"_blank",rel:"noopener noreferrer"},Rn=s("this excellent writeup by Jito Labs"),xn=s("."),Sn=n("h2",{id:"how-transactions-get-dropped",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-transactions-get-dropped","aria-hidden":"true"},"#"),s(" How Transactions Get Dropped")],-1),Bn=n("p",null,"Transaction\uC758 \uC5EC\uC815 \uB3D9\uC548\uC5D0 Transaction\uC774 \uC758\uB3C4\uCE58 \uC54A\uAC8C \uB124\uD2B8\uC6CC\uD06C\uB85C\uBD80\uD130 \uB4DC\uB78D\uB420 \uC218 \uC788\uB294 \uBA87 \uAC00\uC9C0 \uC2DC\uB098\uB9AC\uC624\uB4E4\uC774 \uC874\uC7AC\uD569\uB2C8\uB2E4.",-1),Ln=n("h3",{id:"before-a-transaction-is-processed",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#before-a-transaction-is-processed","aria-hidden":"true"},"#"),s(" Before a transaction is processed")],-1),An=s("\uB9CC\uC57D \uB124\uD2B8\uC6CC\uD06C\uAC00 Transaction\uC744 \uB4DC\uB78D\uD55C\uB2E4\uBA74, \uC774\uAC83\uC740 \uB300\uBD80\uBD84 Transaction\uC774 leader\uC5D0 \uC758\uD574 \uCC98\uB9AC\uB418\uAE30 \uC804 \uC77C \uAC83\uC785\uB2C8\uB2E4. UDP "),jn={href:"https://en.wikipedia.org/wiki/Packet_loss",target:"_blank",rel:"noopener noreferrer"},Hn=s("packet loss"),Vn=s("\uB294 \uC774\uAC83\uC774 \uBC1C\uC0DD\uD558\uB294 \uAC00\uC7A5 \uB2E8\uC21C\uD55C \uC774\uC720\uC785\uB2C8\uB2E4. \uB124\uD2B8\uC6CC\uD06C\uC5D0 \uC2EC\uD55C \uBD80\uD558\uAC00 \uAC78\uB9AC\uB294 \uB3D9\uC548, validator\uB4E4\uC740 \uCC98\uB9AC\uB97C \uC694\uCCAD\uBC1B\uC740 Transaction\uB4E4\uC758 \uC218\uC5D0 \uC758\uD574 \uC555\uB3C4\uB420 \uC218 \uC788\uC2B5\uB2C8\uB2E4. validator\uB4E4\uC740 \uACFC\uB3C4\uD55C Transaction\uB4E4\uC744 "),zn=n("code",null,"tpu_forwards",-1),Dn=s("\uB97C \uD1B5\uD574 \uBCF4\uB0BC \uC218\uB3C4 \uC788\uC9C0\uB9CC, "),Fn={href:"https://github.com/solana-labs/solana/blob/master/core/src/banking_stage.rs#L389",target:"_blank",rel:"noopener noreferrer"},Un=s("forwarded"),In=s(" \uC218 \uC788\uB294 \uB370\uC774\uD130 \uC591\uC5D0 \uB300\uD55C \uC81C\uD55C\uC774 \uC788\uC2B5\uB2C8\uB2E4. \uBFD0\uB9CC \uC544\uB2C8\uB77C, \uAC01 forward\uB294 validator\uB4E4 \uC0AC\uC774\uC5D0 \uB2E8\uC77C \uD649\uC73C\uB85C \uC81C\uD55C\uB418\uC5B4 \uC788\uC2B5\uB2C8\uB2E4. "),Kn=n("code",null,"tpu_forwards",-1),Nn=s(" \uD3EC\uD2B8\uB97C \uD1B5\uD574 \uC218\uC2E0\uB41C Transaction\uB4E4\uC774 \uB2E4\uB978 validator\uB4E4\uC5D0\uAC8C \uBCF4\uB0B4\uC9C0\uC9C0 \uC54A\uB294 \uC774\uC720\uC785\uB2C8\uB2E4."),En=s("Trnasaction\uC774 \uCC98\uB9AC\uB418\uAE30 \uC804 \uB4DC\uB78D\uB420 \uC218 \uC788\uB294 \uB35C \uC54C\uB824\uC9C4 \uB450 \uAC00\uC9C0 \uC774\uC720\uB3C4 \uC788\uC2B5\uB2C8\uB2E4. \uCCAB \uBC88\uC9F8 \uC2DC\uB098\uB9AC\uC624\uB294 RPC \uD480\uC744 \uD1B5\uD574 \uBCF4\uB0B4\uC9C4 Transaction\uB4E4\uC744 \uD638\uCD9C\uD569\uB2C8\uB2E4. \uAC00\uB054 RPC \uD480\uC758 \uD55C \uBD80\uBD84\uC774 \uD480\uC758 \uB098\uBA38\uC9C0 \uBD80\uBD84\uBCF4\uB2E4 \uC55E\uC11C \uC788\uC744 \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uC774\uAC83\uC740 \uD480 \uC548\uC5D0 \uC788\uB294 \uB178\uB4DC\uB4E4\uC774 \uD568\uAED8 \uB3D9\uC791\uD558\uB3C4\uB85D \uC694\uCCAD\uB420 \uB54C \uC774\uC288\uB97C \uC57C\uAE30\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uC774 \uC608\uC81C\uC5D0\uC11C, Transaction\uC758 "),Jn={href:"https://docs.solana.com/developing/programming-model/transactions#recent-blockhash",target:"_blank",rel:"noopener noreferrer"},On=s("recentBlockhash"),Mn=s("\uB294 \uD480\uC758 \uC55E\uC120 \uBD80\uBD84\uC73C\uB85C\uBD80\uD130 \uC9C8\uC758\uB97C \uBC1B\uC2B5\uB2C8\uB2E4 (Backend A). Transaction\uC774 \uD480\uC758 \uB4A4\uB5A8\uC5B4\uC9C4 \uBD80\uBD84\uC5D0 \uBCF4\uB0B4\uC9C8 \uB54C, \uB178\uB4DC\uB4E4\uC740 \uC55E\uC120 blockhash \uB77C\uB294 \uAC83\uC744 \uC54C\uC544\uCC28\uB9B4 \uAC83\uC774\uACE0 Transaction\uC744 \uB4DC\uB78D\uD560 \uAC83\uC785\uB2C8\uB2E4. \uB9CC\uC57D \uAC1C\uBC1C\uC790\uB4E4\uC774 "),Gn=n("code",null,"sendTransaction",-1),qn=s("\uC5D0 "),Wn={href:"https://docs.solana.com/developing/clients/jsonrpc-api#sendtransaction",target:"_blank",rel:"noopener noreferrer"},Yn=s("preflight checks"),Qn=s("\uB97C \uAC00\uB2A5\uD558\uAC8C \uD55C\uB2E4\uBA74 Transaction\uC774 \uBCF4\uB0B4\uC9C0\uAE30 \uC804\uC5D0 \uC774\uAC83\uC744 \uBC1C\uACAC\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4."),Xn=c('

    Dropped via RPC Pool

    \uC77C\uC2DC\uC801\uC778 \uB124\uD2B8\uC6CC\uD06C \uD3EC\uD06C \uB610\uD55C Transaction\uB4E4\uC744 \uB4DC\uB78D\uC2DC\uD0A4\uB294 \uACB0\uACFC\uB97C \uC57C\uAE30\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uB9CC\uC57D validator\uAC00 Banking Stage \uB0B4\uC5D0\uC11C block\uB4E4\uC744 \uB290\uB9AC\uAC8C \uC7AC\uC0DD\uD55C\uB2E4\uBA74, \uACB0\uAD6D minority fork\uB97C \uC0DD\uC131\uD574\uB0BC\uC9C0 \uBAA8\uB985\uB2C8\uB2E4. Client\uAC00 Transaction\uC744 \uB9CC\uB4E4 \uB54C, \uADF8 Transaction\uC774 \uC624\uC9C1 minority fork\uC5D0\uB9CC \uC874\uC7AC\uD558\uB294 recentBlockhash\uB97C \uCC38\uC870\uD558\uB3C4\uB85D \uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uADF8 Transaction\uC774 \uBCF4\uB0B4\uC9C0\uACE0 \uB098\uBA74, \uADF8 Transaction\uC774 \uCC98\uB9AC\uB418\uAE30 \uC804\uC5D0 cluster\uAC00 minority fork\uB97C \uBC14\uAFD4\uBC84\uB9B4 \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uC774 \uC2DC\uB098\uB9AC\uC624\uC5D0\uC11C, blockhash\uB294 \uBC1C\uACAC\uB420 \uC218 \uC5C6\uAE30 \uB54C\uBB38\uC5D0 \uADF8 Transaction\uC740 \uB4DC\uB78D\uB429\uB2C8\uB2E4.

    Dropped due to Minority Fork (Before Processed)

    After a transaction is processed and before it is finalized

    Transaction\uC774 minority fork\uB85C\uBD80\uD130 recentBlockhash\uB97C \uD638\uCD9C\uD55C \uACBD\uC6B0\uC5D0\uB3C4 Transaction\uC774 \uCC98\uB9AC\uB420 \uC218\uB3C4 \uC788\uC2B5\uB2C8\uB2E4. \uADF8\uB7EC\uB098, \uC774\uB7F0 \uACBD\uC6B0\uC5D0\uB294 minority fork\uC5D0 \uC788\uB294 leader\uC5D0 \uC758\uD574 \uCC98\uB9AC\uB420 \uAC83\uC785\uB2C8\uB2E4. \uC774 leader\uAC00 \uCC98\uB9AC\uD55C Transaction\uB4E4\uC744 \uB098\uBA38\uC9C0 \uB124\uD2B8\uC6CC\uD06C\uC640 \uACF5\uC720\uD558\uB824\uACE0 \uD560 \uB54C, minority fork\uB97C \uC778\uC815\uD558\uC9C0 \uC54A\uB294 majority of validator\uB4E4\uACFC\uC758 \uD569\uC758\uC5D0 \uC2E4\uD328\uD560 \uAC83\uC785\uB2C8\uB2E4. \uC774\uB54C, \uADF8 Transaction\uC740 \uC644\uB8CC\uB418\uAE30 \uC804\uC5D0 \uB4DC\uB78D\uB420 \uAC83\uC785\uB2C8\uB2E4.

    Dropped due to Minority Fork (After Processed)

    Handling Dropped Transactions

    RPC \uB178\uB4DC\uB4E4\uC774 Transaction\uB4E4\uC744 rebroadcast \uC2DC\uB3C4\uD560 \uB3D9\uC548, \uADF8\uB4E4\uC774 \uC4F0\uB294 \uC54C\uACE0\uB9AC\uC998\uC740 \uD3EC\uAD04\uC801\uC774\uACE0 \uD2B9\uC815 \uC571\uC758 \uC694\uAD6C\uC640\uB294 \uC885\uC885 \uC5B4\uC6B8\uB9AC\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. \uB124\uD2B8\uC6CC\uD06C \uD63C\uC7A1\uC5D0 \uB300\uBE44\uD558\uAE30 \uC704\uD574, application \uAC1C\uBC1C\uC790\uB4E4\uC740 \uADF8\uB4E4 \uC790\uC2E0\uC758 rebroadcasting logic\uC744 customize \uD574\uC57C \uD569\uB2C8\uB2E4.

    An In-Depth Look at sendTransaction

    Transaction\uB4E4\uC744 \uBCF4\uB0B4\uB294 \uAC83\uC5D0 \uB300\uD574\uC11C\uB294 sendTransaction RPC method\uAC00 \uAC1C\uBC1C\uC790\uB4E4\uC5D0\uAC8C \uAC00\uC7A5 \uC911\uC694\uD55C \uB3C4\uAD6C\uC785\uB2C8\uB2E4. sendTransaction\uC740 \uB2E8\uC9C0 Transaction\uC744 client\uC5D0\uC11C RPC node\uB85C \uBCF4\uB0B4\uB294 \uB370 \uCC45\uC784\uC774 \uC788\uC2B5\uB2C8\uB2E4. \uB9CC\uC57D node\uAC00 Transaction\uC744 \uC218\uC2E0\uD558\uBA74, sendTransaction\uC740 \uADF8 Transaction\uC744 \uCD94\uC801\uD558\uAE30 \uC704\uD574 \uC0AC\uC6A9\uB420 \uC218 \uC788\uB294 Transaction id\uB97C \uC751\uB2F5\uD560 \uAC83\uC785\uB2C8\uB2E4. \uC131\uACF5\uC801\uC778 \uC751\uB2F5\uC774 \uADF8 Transaction\uC774 cluster\uC5D0 \uC758\uD574 \uCC98\uB9AC\uB418\uAC70\uB098 \uC644\uB8CC\uB420 \uAC83\uC778\uC9C0\uB97C \uB098\uD0C0\uB0B4\uC9C0\uB294 \uC54A\uC2B5\uB2C8\uB2E4.

    ',10),Zn={class:"custom-container tip"},$n=n("p",{class:"custom-container-title"},"TIP",-1),ns=n("h4",{id:"request-parameters",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#request-parameters","aria-hidden":"true"},"#"),s(" Request Parameters")],-1),ss=n("li",null,[n("code",null,"transaction"),s(": "),n("code",null,"string"),s(" - \uC778\uCF54\uB529 \uB41C \uBB38\uC790\uC5F4\uB85C \uC644\uC804\uD558\uAC8C \uC11C\uBA85\uB41C Transaction")],-1),as=s("(optional) "),ts=n("code",null,"configuration object",-1),os=s(": "),es=n("code",null,"object",-1),cs=n("li",null,[n("code",null,"skipPreflight"),s(": "),n("code",null,"boolean"),s(" - true \uB77C\uBA74, \uBCF4\uB0B4\uAE30 \uC804 Transaction check\uB97C \uAC74\uB108\uB701\uB2C8\uB2E4. (default: false)")],-1),rs=s("(optional) "),is=n("code",null,"preflightCommitment",-1),ls=s(": "),ps=n("code",null,"string",-1),ds=s(" - bank slot\uACFC \uBC18\uB300\uB418\uB294 \uBCF4\uB0B4\uAE30 \uC804 \uC2DC\uBBAC\uB808\uC774\uC158\uC744 \uC704\uD574 \uC0AC\uC6A9\uD560 "),us={href:"https://docs.solana.com/developing/clients/jsonrpc-api#configuring-state-commitment",target:"_blank",rel:"noopener noreferrer"},hs=s("Commitment"),_s=s(' \uB808\uBCA8 (default: "finalized").'),ks=n("li",null,[s("(optional) "),n("code",null,"encoding"),s(": "),n("code",null,"string"),s(' - Transaction Data\uB97C \uC704\uD574 \uC0AC\uC6A9\uB418\uB294 \uC778\uCF54\uB529. "base58" (slow), \uB610\uB294 "base64". (default: "base58").')],-1),bs=n("li",null,[s("(optional) "),n("code",null,"maxRetries"),s(": "),n("code",null,"usize"),s(" - RPC node\uAC00 leader\uC5D0\uAC8C Transaction \uBCF4\uB0B4\uB294 \uAC83\uC744 \uC7AC\uC2DC\uB3C4\uD560 \uCD5C\uB300 \uD69F\uC218. \uB9CC\uC57D \uC774 \uD30C\uB77C\uBBF8\uD130\uAC00 \uAC12\uC774 \uC138\uD305\uB418\uC9C0 \uC54A\uB294\uB2E4\uBA74, RPC node\uB294 Transaction\uC774 \uC644\uB8CC\uB418\uAC70\uB098 blockhash\uAC00 \uB9CC\uB8CC\uB420 \uB54C\uAE4C\uC9C0 \uC7AC\uC2DC\uB3C4\uD560 \uAC83\uC785\uB2C8\uB2E4.")],-1),fs=n("h4",{id:"response",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#response","aria-hidden":"true"},"#"),s(" Response")],-1),ms=n("code",null,"transaction id",-1),gs=s(": "),Ts=n("code",null,"string",-1),ws=s(" - base-58\uB85C \uC778\uCF54\uB529\uB41C \uBB38\uC790\uC5F4\uB85C Transaction\uC5D0 \uB2F4\uAE34 \uCCAB \uBC88\uC9F8 Transaction \uC2DC\uADF8\uB2C8\uCC98. \uC774 Transaction id\uB294 \uC0C1\uD0DC updates\uB4E4\uC744 \uC870\uC0AC\uD558\uAE30 \uC704\uD574 "),ys={href:"https://docs.solana.com/developing/clients/jsonrpc-api#getsignaturestatuses",target:"_blank",rel:"noopener noreferrer"},Ps=s("getSignatureStatuses"),vs=s("\uC640 \uD568\uAED8 \uC0AC\uC6A9\uB420 \uC218 \uC788\uC2B5\uB2C8\uB2E4."),Cs=n("h2",{id:"customizing-rebroadcast-logic",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#customizing-rebroadcast-logic","aria-hidden":"true"},"#"),s(" Customizing Rebroadcast Logic")],-1),Rs=s("\uC790\uC2E0\uB9CC\uC758 rebroadcasting logic\uC744 \uAC1C\uBC1C\uD558\uAE30 \uC704\uD574\uC11C, \uAC1C\uBC1C\uC790\uB4E4\uC740 "),xs=n("code",null,"sendTransaction",-1),Ss=s("\uC758 "),Bs=n("code",null,"maxRetries",-1),Ls=s(" \uD30C\uB77C\uBBF8\uD130\uC758 \uC774\uC810\uC744 \uD65C\uC6A9\uD574\uC57C \uD569\uB2C8\uB2E4. \uB9CC\uC57D \uC801\uC6A9\uB41C\uB2E4\uBA74, \uAC1C\uBC1C\uC790\uB4E4\uC774 "),As={href:"https://github.com/solana-labs/solana/blob/98707baec2385a4f7114d2167ef6dfb1406f954f/validator/src/main.rs#L1258-L1274",target:"_blank",rel:"noopener noreferrer"},js=s("within reasonable bounds"),Hs=s(" \uC7AC\uC2DC\uB3C4 \uCC98\uB9AC\uB97C \uC218\uB3D9\uC73C\uB85C \uB2E4\uB8F0 \uC218 \uC788\uAC8C \uD574 \uC8FC\uBA70, "),Vs=n("code",null,"maxRetries",-1),zs=s("\uAC00 RPC \uB178\uB4DC\uC758 \uAE30\uBCF8 retry logic\uC744 \uB36E\uC5B4\uC4F8 \uAC83\uC785\uB2C8\uB2E4."),Ds=s("Transaction\uB4E4\uC744 \uC218\uB3D9\uC73C\uB85C \uC7AC\uC2DC\uB3C4\uD558\uB294 \uAC83\uC744 \uC704\uD55C \uD754\uD55C \uD328\uD134\uC740 \uC77C\uC2DC\uC801\uC73C\uB85C "),Fs={href:"https://docs.solana.com/developing/clients/jsonrpc-api#getlatestblockhash",target:"_blank",rel:"noopener noreferrer"},Us=s("getLatestBlockhash"),Is=s("\uC73C\uB85C\uBD80\uD130 \uC5BB\uC744 \uC218 \uC788\uB294 "),Ks=n("code",null,"lastValidBlockHeight",-1),Ns=s("\uB97C \uC800\uC7A5\uD558\uB3C4\uB85D \uD638\uCD9C\uD558\uB294 \uAC83\uC785\uB2C8\uB2E4. \uC77C\uB2E8 \uC800\uC7A5\uB418\uACE0 \uB098\uBA74, \uC774\uC81C Application\uC740 "),Es={href:"https://docs.solana.com/developing/clients/jsonrpc-api#getblockheight",target:"_blank",rel:"noopener noreferrer"},Js=s("poll the cluster\u2019s blockheight"),Os=s("\uD560 \uC218 \uC788\uACE0 \uC801\uC808\uD55C \uAC04\uACA9\uC73C\uB85C \uC218\uB3D9\uC73C\uB85C Transaction\uC744 \uC7AC\uC2DC\uB3C4\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uB124\uD2B8\uC6CC\uD06C\uAC00 \uD63C\uC7A1\uD560 \uB54C\uB294 "),Ms=n("code",null,"maxRetries",-1),Gs=s("\uB97C 0\uC73C\uB85C \uC138\uD305\uD558\uACE0 custom algorithm\uC744 \uD1B5\uD574 \uC218\uB3D9\uC73C\uB85C rebroadcast\uD558\uB294 \uAC83\uC774 \uC720\uB9AC\uD569\uB2C8\uB2E4. \uC5B4\uB5A4 Application\uB4E4\uC740 "),qs={href:"https://en.wikipedia.org/wiki/Exponential_backoff",target:"_blank",rel:"noopener noreferrer"},Ws=s("exponential backoff"),Ys=s(" algorithm\uC744 \uC0AC\uC6A9\uD560\uC218\uB3C4 \uC788\uACE0, \uB2E4\uB978 Application\uB4E4\uC740 \uD0C0\uC784\uC544\uC6C3\uC774 \uC77C\uC5B4\uB0A0 \uB54C\uAE4C\uC9C0 \uC77C\uC815\uD55C \uAC04\uACA9\uC73C\uB85C Transaction\uB4E4\uC744 "),Qs={href:"https://github.com/blockworks-foundation/mango-ui/blob/b6abfc6c13b71fc17ebbe766f50b8215fa1ec54f/src/utils/send.tsx#L713",target:"_blank",rel:"noopener noreferrer"},Xs=s("continuously resubmit"),Zs=s("\uD558\uAE30 \uC704\uD574 "),$s={href:"https://www.mango.markets/",target:"_blank",rel:"noopener noreferrer"},na=s("Mango"),sa=s(" opt\uB97C \uC0AC\uC6A9\uD560 \uC218\uB3C4 \uC788\uC2B5\uB2C8\uB2E4."),aa=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` +import{_ as p,r as o,o as d,c as u,a as n,b as a,w as e,F as h,d as s,e as c}from"./app.2fbb9e96.js";var _="/assets/tx-journey.dd6310be.png",k="/assets/tpu-jito-labs.8bb32fb6.png",b="/assets/dropped-via-rpc-pool.8d1ce9af.png",f="/assets/dropped-minority-fork-pre-process.555653e1.png",m="/assets/dropped-minority-fork-post-process.48c3c955.png";const g={},T=n("h1",{id:"retrying-transactions",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#retrying-transactions","aria-hidden":"true"},"#"),s(" Retrying Transactions")],-1),w=s("\uBA87\uBA87 \uC0C1\uD669\uC5D0\uC11C \uC720\uD6A8\uD574 \uBCF4\uC774\uB294 Trasaction\uC774 block\uC5D0 \uD3EC\uD568\uB418\uAE30 \uC804\uC5D0 \uAC70\uC808\uB420\uC9C0\uB3C4 \uBAA8\uB985\uB2C8\uB2E4. RPC \uB178\uB4DC\uAC00 "),y={href:"https://docs.solana.com/terminology#leader",target:"_blank",rel:"noopener noreferrer"},P=s("leader"),v=s("\uC5D0\uAC8C \uADF8 Transaction\uC744 rebroadcast \uD558\uB294 \uAC83\uC744 \uC2E4\uD328\uD558\uB294 \uC0C1\uD669 \uAC19\uC740, \uB124\uD2B8\uC6CC\uD06C\uAC00 \uD63C\uC7A1\uD55C \uB3D9\uC548\uC5D0 \uC885\uC885 \uBC1C\uC0DD\uD569\uB2C8\uB2E4. \uC774\uAC83\uC740 end-user\uC5D0\uAC8C \uADF8\uB4E4\uC758 Transaction\uC774 \uC644\uC804\uD788 \uC0AC\uB77C\uC9C4 \uAC83\uCC98\uB7FC \uBCF4\uC77C\uC9C0\uB3C4 \uBAA8\uB985\uB2C8\uB2E4. RPC \uB178\uB4DC\uB4E4\uC740 generic rebroadcasting \uC54C\uACE0\uB9AC\uC998\uC744 \uAC16\uCD94\uACE0 \uC788\uC9C0\uB9CC, application \uAC1C\uBC1C\uC790\uB4E4\uC740 \uC790\uC2E0\uB9CC\uC758 cutom rebroadcasting logic\uC744 \uB9CC\uB4E4 \uC218\uB3C4 \uC788\uC2B5\uB2C8\uB2E4."),C=c('

    Facts

    Fact Sheet

    • RPC \uB178\uB4DC\uB4E4\uC740 Transaction\uC5D0 \uB300\uD55C generic \uC54C\uACE0\uB9AC\uC998\uC744 \uC0AC\uC6A9\uD574\uC11C rebroadcast\uB97C \uC2DC\uB3C4\uD560 \uAC83\uC785\uB2C8\uB2E4.
    • Application \uAC1C\uBC1C\uC790\uB4E4\uC740 \uC790\uC2E0\uB9CC\uC758 custom rebroadcasting logic\uC744 \uAD6C\uD604\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.
    • \uAC1C\uBC1C\uC790\uB4E4\uC740 sendTransaction JSON-RPC \uBA54\uC18C\uB4DC\uC5D0 \uC788\uB294 maxRetries \uD30C\uB77C\uBBF8\uD130\uC758 \uC774\uC810\uC744 \uD65C\uC6A9\uD574\uC57C \uD569\uB2C8\uB2E4.
    • \uAC1C\uBC1C\uC790\uB4E4\uC740 Transaction\uC774 \uBCF4\uB0B4\uC9C0\uAE30 \uC804\uC5D0 error\uB4E4\uC744 \uBC1C\uC0DD\uC2DC\uD0A4\uAE30 \uC704\uD55C \uC55E\uC120 check\uB4E4\uC744 \uAC00\uB2A5\uD558\uAC8C \uD574\uC57C\uD569\uB2C8\uB2E4.
    • \uC5B4\uB5A4 Transaction\uC5D0 \uB2E4\uC2DC \uC11C\uBA85\uD558\uAE30 \uC804\uC5D0, \uCCAB Transaction\uC758 Blockhash\uAC00 \uB9CC\uB8CC\uB410\uB294\uC9C0 \uD655\uC778\uD558\uB294 \uAC83\uC740 \uB9E4\uC6B0 \uC911\uC694\uD569\uB2C8\uB2E4.

    The Journey of a Transaction

    How Clients Submit Transactions

    Solana\uC5D0\uB294 mempool\uC5D0 \uB300\uD55C \uAC1C\uB150\uC774 \uC5C6\uC2B5\uB2C8\uB2E4. \uD504\uB85C\uADF8\uB7A8\uC774\uB098 end-user\uC5D0 \uC758\uD574 \uCD08\uAE30\uD654\uB41C \uBAA8\uB4E0 Transaction\uB4E4\uC740 block \uC548\uC73C\uB85C \uCC98\uB9AC\uB420 \uC218 \uC788\uAC8C \uD6A8\uC728\uC801\uC73C\uB85C leader\uB4E4\uC5D0\uAC8C \uB77C\uC6B0\uD305 \uB429\uB2C8\uB2E4. Transaction\uC774 leader\uB4E4\uC5D0\uAC8C \uBCF4\uB0B4\uC9C8 \uC218 \uC788\uB294 \uB450 \uAC00\uC9C0 \uC8FC\uB41C \uBC29\uBC95\uC774 \uC788\uC2B5\uB2C8\uB2E4:

    ',5),R=s("RPC \uC11C\uBC84\uB97C \uD1B5\uD55C Proxy \uADF8\uB9AC\uACE0 "),x={href:"https://docs.solana.com/developing/clients/jsonrpc-api#sendtransaction",target:"_blank",rel:"noopener noreferrer"},S=s("sendTransaction"),B=s(" JSON-RPC method\uC5D0 \uC758\uD574"),L={href:"https://docs.rs/solana-client/1.7.3/solana_client/tpu_client/index.html",target:"_blank",rel:"noopener noreferrer"},A=s("TPU Client"),j=s("\uB97C \uD1B5\uD574 leader\uB4E4\uC5D0\uAC8C \uC9C1\uC811"),H=n("p",null,"\uB300\uBD80\uBD84\uC758 end-user\uB4E4\uC740 RPC \uC11C\uBC84\uB97C \uD1B5\uD574 Transaction\uB4E4\uC744 \uBCF4\uB0BC \uAC83\uC785\uB2C8\uB2E4. Client\uAC00 Transaction\uC744 \uBCF4\uB0BC \uB54C, \uC218\uC2E0\uD55C RPC node\uB294 Transaction\uC744 \uD604\uC7AC\uC640 \uB2E4\uC74C leader\uB4E4\uC5D0\uAC8C \uCC28\uB840\uB85C broadcast \uD560 \uAC83\uC785\uB2C8\uB2E4. Transaction\uC774 leader\uC5D0 \uC758\uD574 \uCC98\uB9AC\uB420 \uB54C\uAE4C\uC9C0 Client\uC640 \uC804\uB2EC \uC911\uC778 RPC \uB178\uB4DC\uB4E4\uC774 \uC54C\uACE0 \uC788\uB294 \uAC83 \uC678\uBD80\uC5D0\uB294 \uADF8 Transaction\uC5D0 \uB300\uD55C \uAE30\uB85D\uC774 \uC874\uC7AC\uD558\uC9C0 \uC54A\uC744 \uAC83\uC785\uB2C8\uB2E4. TPC Client\uC758 \uACBD\uC6B0, rebroadcast\uC640 leader forwarding\uC740 \uC628\uC804\uD788 Client software\uC5D0 \uC758\uD574 \uB2E4\uB904\uC9D1\uB2C8\uB2E4.",-1),V=n("p",null,[n("img",{src:_,alt:"Transaction Journey"})],-1),z=n("h3",{id:"how-rpc-nodes-broadcast-transactions",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-rpc-nodes-broadcast-transactions","aria-hidden":"true"},"#"),s(" How RPC Nodes Broadcast Transactions")],-1),D=s("RPC\uB178\uB4DC\uB294 "),F=n("code",null,"sendTransaction",-1),U=s("\uC744 \uD1B5\uD574 Transaction\uC744 \uC218\uC2E0\uD55C \uD6C4\uC5D0, \uAD00\uB828\uB41C leader\uB4E4\uC5D0\uAC8C \uC804\uB2EC\uD558\uAE30 \uC804\uC5D0 Transaction\uC744 "),I={href:"https://en.wikipedia.org/wiki/User_Datagram_Protocol",target:"_blank",rel:"noopener noreferrer"},K=s("UDP"),N=s(" \uD328\uD0B7\uC73C\uB85C \uBCC0\uD658\uD560 \uAC83\uC785\uB2C8\uB2E4. UDP\uB294 validator\uB4E4\uC774 \uBE60\uB974\uAC8C \uC11C\uB85C \uD1B5\uC2E0\uD560 \uC218 \uC788\uAC8C \uD574\uC8FC\uC9C0\uB9CC, Transcation \uC804\uB2EC\uC744 \uBCF4\uC7A5\uD558\uC9C0\uB294 \uC54A\uC2B5\uB2C8\uB2E4."),E=s("Solana\uC758 leader \uC2A4\uCF00\uC904\uC740 \uB9E4 "),J={href:"https://docs.solana.com/terminology#epoch",target:"_blank",rel:"noopener noreferrer"},O=s("epoch"),M=s(" \uBCF4\uB2E4 \uC55E\uC120 \uAC83\uC73C\uB85C \uC54C\uB824\uC838 \uC788\uAE30 \uB54C\uBB38\uC5D0 (~2 days), RPC \uB178\uB4DC\uB294 Transaction\uC744 \uD604\uC7AC\uC640 \uB2E4\uC74C leader\uB4E4\uC5D0\uAC8C \uC989\uC2DC broadcast \uD560 \uAC83\uC785\uB2C8\uB2E4. \uC774\uAC83\uC740 Transaction\uB4E4\uC744 \uC804\uCCB4 \uB124\uD2B8\uC6CC\uD06C\uC5D0 \uB79C\uB364\uD558\uAC8C \uC804\uD30C\uD558\uB294 Ethereum\uACFC \uAC19\uC740 \uB2E4\uB978 \uD504\uB85C\uD1A0\uCF5C\uB4E4\uACFC \uB2E4\uB978 \uAC83\uC785\uB2C8\uB2E4. \uAE30\uBCF8\uC801\uC73C\uB85C, RPC \uB178\uB4DC\uB4E4\uC740 Transaction\uC774 \uC885\uACB0\uB418\uAC70\uB098 Transaction\uC758 Blockhash\uAC00 \uB9CC\uB8CC(150 blocks or ~1 \uBD84 19\uCD08, \uC774 \uAE00 \uC791\uC131 \uC2DC\uC810 \uAE30\uC900)\uB420 \uB54C\uAE4C\uC9C0 \uB9E4 2\uCD08 \uB9C8\uB2E4 Trnasaction\uB4E4\uC744 \uBCF4\uB0B4\uB294 \uC2DC\uB3C4\uB97C \uD560 \uAC83\uC785\uB2C8\uB2E4. \uB9CC\uC57D \uC544\uC9C1 \uCC98\uB9AC\uB418\uC9C0 \uC54A\uC740 rebroadcast\uC758 \uD050 \uC0AC\uC774\uC988\uAC00 "),G={href:"https://github.com/solana-labs/solana/blob/bfbbc53dac93b3a5c6be9b4b65f679fdb13e41d9/send-transaction-service/src/send_transaction_service.rs#L20",target:"_blank",rel:"noopener noreferrer"},q=s("10,000 transactions"),W=s(" \uBCF4\uB2E4 \uD06C\uB2E4\uBA74, \uC0C8\uB85C \uBCF4\uB0B4\uC9C0\uB294 Transaction\uB4E4\uC740 \uB4DC\uB78D\uB420 \uAC83\uC785\uB2C8\uB2E4. \uC774\uB7EC\uD55C \uC7AC\uC2DC\uB3C4 \uB85C\uC9C1\uC758 \uAE30\uBCF8 \uD589\uC704\uB97C \uBCC0\uACBD\uD558\uAE30 \uC704\uD574 RPC \uC6B4\uC601\uC790\uB4E4\uC774 \uC870\uC815\uD560 \uC218 \uC788\uB294 command-line "),Y={href:"https://github.com/solana-labs/solana/blob/bfbbc53dac93b3a5c6be9b4b65f679fdb13e41d9/validator/src/main.rs#L1172",target:"_blank",rel:"noopener noreferrer"},Q=s("arguments"),X=s("\uB4E4\uC774 \uC874\uC7AC\uD569\uB2C8\uB2E4."),Z=s("RPC \uB178\uB4DC\uAC00 Transaction\uC744 broadcast\uD560 \uB54C, \uB178\uB4DC\uB294 \uC774 Transaction\uC744 leader\uC758 "),$={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/validator.rs#L867",target:"_blank",rel:"noopener noreferrer"},nn=s("Transaction Processing Unit (TPU)"),sn=s("\uC5D0 \uBCF4\uB0B4\uB824\uACE0 \uD560 \uAC83\uC785\uB2C8\uB2E4. TPU\uB294 Transaction\uB4E4\uC744 \uB2E4\uC12F \uB2E8\uACC4\uB85C \uCC98\uB9AC\uD569\uB2C8\uB2E4:"),an={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/fetch_stage.rs#L21",target:"_blank",rel:"noopener noreferrer"},tn=s("Fetch Stage"),on={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/tpu.rs#L91",target:"_blank",rel:"noopener noreferrer"},en=s("SigVerify Stage"),cn={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/banking_stage.rs#L249",target:"_blank",rel:"noopener noreferrer"},rn=s("Banking Stage"),ln={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/poh/src/poh_service.rs",target:"_blank",rel:"noopener noreferrer"},pn=s("Proof of History Service"),dn={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/core/src/tpu.rs#L136",target:"_blank",rel:"noopener noreferrer"},un=s("Broadcast Stage"),hn=n("p",null,[n("img",{src:k,alt:"TPU Overview"}),n("small",{style:{display:"block","text-align":"center"}},"Image Courtesy of Jito Labs")],-1),_n=n("p",null,"\uC774 \uB2E4\uC12F \uB2E8\uACC4 \uC911 Fetch Stage\uB294 Transaction\uB4E4\uC744 \uC218\uC2E0\uD558\uB294 \uCC45\uC784\uC744 \uAC16\uC2B5\uB2C8\uB2E4. Fetch Stage\uC5D0\uC11C validator\uB4E4\uC740 \uB4E4\uC5B4\uC624\uB294 Transaction\uB4E4\uC744 3\uAC00\uC9C0 \uD3EC\uD2B8\uC5D0 \uB530\uB77C \uBD84\uB958\uD560 \uAC83\uC785\uB2C8\uB2E4.",-1),kn={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/gossip/src/contact_info.rs#L27",target:"_blank",rel:"noopener noreferrer"},bn=s("tpu"),fn=s("\uB294 token \uC804\uC1A1\uB4E4, NFT mint\uB4E4 \uADF8\uB9AC\uACE0 Program Instruction\uB4E4\uACFC \uAC19\uC740 \uC77C\uBC18\uC801\uC778 Transaction\uB4E4\uC744 \uB2E4\uB8F9\uB2C8\uB2E4."),mn={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/gossip/src/contact_info.rs#L31",target:"_blank",rel:"noopener noreferrer"},gn=s("tpu_vote"),Tn=s("\uB294 voting Transaction\uB4E4\uC744 \uC9D1\uC911\uC801\uC73C\uB85C \uB2E4\uB8F9\uB2C8\uB2E4."),wn={href:"https://github.com/solana-labs/solana/blob/cd6f931223181d5a1d47cba64e857785a175a760/gossip/src/contact_info.rs#L29",target:"_blank",rel:"noopener noreferrer"},yn=s("tpu_forwards"),Pn=s("\uB294 \uB9CC\uC57D \uD604\uC7AC leader\uAC00 \uBAA8\uB4E0 Transaction\uB4E4\uC744 \uCC98\uB9AC\uD560 \uC218 \uC5C6\uB2E4\uBA74 \uAC00\uACF5\uB418\uC9C0 \uC54A\uC740 \uD328\uD0B7\uB4E4\uC744 \uB2E4\uC74C leader\uC5D0\uAC8C \uBCF4\uB0C5\uB2C8\uB2E4."),vn=s("TPU\uC5D0 \uB300\uD55C \uB354 \uB9CE\uC740 \uC815\uBCF4\uB294 \uB2E4\uC74C\uC744 \uCC38\uACE0\uD574\uC8FC\uC138\uC694. "),Cn={href:"https://jito-labs.medium.com/solana-validator-101-transaction-processing-90bcdc271143",target:"_blank",rel:"noopener noreferrer"},Rn=s("this excellent writeup by Jito Labs"),xn=s("."),Sn=n("h2",{id:"how-transactions-get-dropped",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-transactions-get-dropped","aria-hidden":"true"},"#"),s(" How Transactions Get Dropped")],-1),Bn=n("p",null,"Transaction\uC758 \uC5EC\uC815 \uB3D9\uC548\uC5D0 Transaction\uC774 \uC758\uB3C4\uCE58 \uC54A\uAC8C \uB124\uD2B8\uC6CC\uD06C\uB85C\uBD80\uD130 \uB4DC\uB78D\uB420 \uC218 \uC788\uB294 \uBA87 \uAC00\uC9C0 \uC2DC\uB098\uB9AC\uC624\uB4E4\uC774 \uC874\uC7AC\uD569\uB2C8\uB2E4.",-1),Ln=n("h3",{id:"before-a-transaction-is-processed",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#before-a-transaction-is-processed","aria-hidden":"true"},"#"),s(" Before a transaction is processed")],-1),An=s("\uB9CC\uC57D \uB124\uD2B8\uC6CC\uD06C\uAC00 Transaction\uC744 \uB4DC\uB78D\uD55C\uB2E4\uBA74, \uC774\uAC83\uC740 \uB300\uBD80\uBD84 Transaction\uC774 leader\uC5D0 \uC758\uD574 \uCC98\uB9AC\uB418\uAE30 \uC804 \uC77C \uAC83\uC785\uB2C8\uB2E4. UDP "),jn={href:"https://en.wikipedia.org/wiki/Packet_loss",target:"_blank",rel:"noopener noreferrer"},Hn=s("packet loss"),Vn=s("\uB294 \uC774\uAC83\uC774 \uBC1C\uC0DD\uD558\uB294 \uAC00\uC7A5 \uB2E8\uC21C\uD55C \uC774\uC720\uC785\uB2C8\uB2E4. \uB124\uD2B8\uC6CC\uD06C\uC5D0 \uC2EC\uD55C \uBD80\uD558\uAC00 \uAC78\uB9AC\uB294 \uB3D9\uC548, validator\uB4E4\uC740 \uCC98\uB9AC\uB97C \uC694\uCCAD\uBC1B\uC740 Transaction\uB4E4\uC758 \uC218\uC5D0 \uC758\uD574 \uC555\uB3C4\uB420 \uC218 \uC788\uC2B5\uB2C8\uB2E4. validator\uB4E4\uC740 \uACFC\uB3C4\uD55C Transaction\uB4E4\uC744 "),zn=n("code",null,"tpu_forwards",-1),Dn=s("\uB97C \uD1B5\uD574 \uBCF4\uB0BC \uC218\uB3C4 \uC788\uC9C0\uB9CC, "),Fn={href:"https://github.com/solana-labs/solana/blob/master/core/src/banking_stage.rs#L389",target:"_blank",rel:"noopener noreferrer"},Un=s("forwarded"),In=s(" \uC218 \uC788\uB294 \uB370\uC774\uD130 \uC591\uC5D0 \uB300\uD55C \uC81C\uD55C\uC774 \uC788\uC2B5\uB2C8\uB2E4. \uBFD0\uB9CC \uC544\uB2C8\uB77C, \uAC01 forward\uB294 validator\uB4E4 \uC0AC\uC774\uC5D0 \uB2E8\uC77C \uD649\uC73C\uB85C \uC81C\uD55C\uB418\uC5B4 \uC788\uC2B5\uB2C8\uB2E4. "),Kn=n("code",null,"tpu_forwards",-1),Nn=s(" \uD3EC\uD2B8\uB97C \uD1B5\uD574 \uC218\uC2E0\uB41C Transaction\uB4E4\uC774 \uB2E4\uB978 validator\uB4E4\uC5D0\uAC8C \uBCF4\uB0B4\uC9C0\uC9C0 \uC54A\uB294 \uC774\uC720\uC785\uB2C8\uB2E4."),En=s("Trnasaction\uC774 \uCC98\uB9AC\uB418\uAE30 \uC804 \uB4DC\uB78D\uB420 \uC218 \uC788\uB294 \uB35C \uC54C\uB824\uC9C4 \uB450 \uAC00\uC9C0 \uC774\uC720\uB3C4 \uC788\uC2B5\uB2C8\uB2E4. \uCCAB \uBC88\uC9F8 \uC2DC\uB098\uB9AC\uC624\uB294 RPC \uD480\uC744 \uD1B5\uD574 \uBCF4\uB0B4\uC9C4 Transaction\uB4E4\uC744 \uD638\uCD9C\uD569\uB2C8\uB2E4. \uAC00\uB054 RPC \uD480\uC758 \uD55C \uBD80\uBD84\uC774 \uD480\uC758 \uB098\uBA38\uC9C0 \uBD80\uBD84\uBCF4\uB2E4 \uC55E\uC11C \uC788\uC744 \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uC774\uAC83\uC740 \uD480 \uC548\uC5D0 \uC788\uB294 \uB178\uB4DC\uB4E4\uC774 \uD568\uAED8 \uB3D9\uC791\uD558\uB3C4\uB85D \uC694\uCCAD\uB420 \uB54C \uC774\uC288\uB97C \uC57C\uAE30\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uC774 \uC608\uC81C\uC5D0\uC11C, Transaction\uC758 "),Jn={href:"https://docs.solana.com/developing/programming-model/transactions#recent-blockhash",target:"_blank",rel:"noopener noreferrer"},On=s("recentBlockhash"),Mn=s("\uB294 \uD480\uC758 \uC55E\uC120 \uBD80\uBD84\uC73C\uB85C\uBD80\uD130 \uC9C8\uC758\uB97C \uBC1B\uC2B5\uB2C8\uB2E4 (Backend A). Transaction\uC774 \uD480\uC758 \uB4A4\uB5A8\uC5B4\uC9C4 \uBD80\uBD84\uC5D0 \uBCF4\uB0B4\uC9C8 \uB54C, \uB178\uB4DC\uB4E4\uC740 \uC55E\uC120 blockhash \uB77C\uB294 \uAC83\uC744 \uC54C\uC544\uCC28\uB9B4 \uAC83\uC774\uACE0 Transaction\uC744 \uB4DC\uB78D\uD560 \uAC83\uC785\uB2C8\uB2E4. \uB9CC\uC57D \uAC1C\uBC1C\uC790\uB4E4\uC774 "),Gn=n("code",null,"sendTransaction",-1),qn=s("\uC5D0 "),Wn={href:"https://docs.solana.com/developing/clients/jsonrpc-api#sendtransaction",target:"_blank",rel:"noopener noreferrer"},Yn=s("preflight checks"),Qn=s("\uB97C \uAC00\uB2A5\uD558\uAC8C \uD55C\uB2E4\uBA74 Transaction\uC774 \uBCF4\uB0B4\uC9C0\uAE30 \uC804\uC5D0 \uC774\uAC83\uC744 \uBC1C\uACAC\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4."),Xn=c('

    Dropped via RPC Pool

    \uC77C\uC2DC\uC801\uC778 \uB124\uD2B8\uC6CC\uD06C \uD3EC\uD06C \uB610\uD55C Transaction\uB4E4\uC744 \uB4DC\uB78D\uC2DC\uD0A4\uB294 \uACB0\uACFC\uB97C \uC57C\uAE30\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uB9CC\uC57D validator\uAC00 Banking Stage \uB0B4\uC5D0\uC11C block\uB4E4\uC744 \uB290\uB9AC\uAC8C \uC7AC\uC0DD\uD55C\uB2E4\uBA74, \uACB0\uAD6D minority fork\uB97C \uC0DD\uC131\uD574\uB0BC\uC9C0 \uBAA8\uB985\uB2C8\uB2E4. Client\uAC00 Transaction\uC744 \uB9CC\uB4E4 \uB54C, \uADF8 Transaction\uC774 \uC624\uC9C1 minority fork\uC5D0\uB9CC \uC874\uC7AC\uD558\uB294 recentBlockhash\uB97C \uCC38\uC870\uD558\uB3C4\uB85D \uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uADF8 Transaction\uC774 \uBCF4\uB0B4\uC9C0\uACE0 \uB098\uBA74, \uADF8 Transaction\uC774 \uCC98\uB9AC\uB418\uAE30 \uC804\uC5D0 cluster\uAC00 minority fork\uB97C \uBC14\uAFD4\uBC84\uB9B4 \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uC774 \uC2DC\uB098\uB9AC\uC624\uC5D0\uC11C, blockhash\uB294 \uBC1C\uACAC\uB420 \uC218 \uC5C6\uAE30 \uB54C\uBB38\uC5D0 \uADF8 Transaction\uC740 \uB4DC\uB78D\uB429\uB2C8\uB2E4.

    Dropped due to Minority Fork (Before Processed)

    After a transaction is processed and before it is finalized

    Transaction\uC774 minority fork\uB85C\uBD80\uD130 recentBlockhash\uB97C \uD638\uCD9C\uD55C \uACBD\uC6B0\uC5D0\uB3C4 Transaction\uC774 \uCC98\uB9AC\uB420 \uC218\uB3C4 \uC788\uC2B5\uB2C8\uB2E4. \uADF8\uB7EC\uB098, \uC774\uB7F0 \uACBD\uC6B0\uC5D0\uB294 minority fork\uC5D0 \uC788\uB294 leader\uC5D0 \uC758\uD574 \uCC98\uB9AC\uB420 \uAC83\uC785\uB2C8\uB2E4. \uC774 leader\uAC00 \uCC98\uB9AC\uD55C Transaction\uB4E4\uC744 \uB098\uBA38\uC9C0 \uB124\uD2B8\uC6CC\uD06C\uC640 \uACF5\uC720\uD558\uB824\uACE0 \uD560 \uB54C, minority fork\uB97C \uC778\uC815\uD558\uC9C0 \uC54A\uB294 majority of validator\uB4E4\uACFC\uC758 \uD569\uC758\uC5D0 \uC2E4\uD328\uD560 \uAC83\uC785\uB2C8\uB2E4. \uC774\uB54C, \uADF8 Transaction\uC740 \uC644\uB8CC\uB418\uAE30 \uC804\uC5D0 \uB4DC\uB78D\uB420 \uAC83\uC785\uB2C8\uB2E4.

    Dropped due to Minority Fork (After Processed)

    Handling Dropped Transactions

    RPC \uB178\uB4DC\uB4E4\uC774 Transaction\uB4E4\uC744 rebroadcast \uC2DC\uB3C4\uD560 \uB3D9\uC548, \uADF8\uB4E4\uC774 \uC4F0\uB294 \uC54C\uACE0\uB9AC\uC998\uC740 \uD3EC\uAD04\uC801\uC774\uACE0 \uD2B9\uC815 \uC571\uC758 \uC694\uAD6C\uC640\uB294 \uC885\uC885 \uC5B4\uC6B8\uB9AC\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. \uB124\uD2B8\uC6CC\uD06C \uD63C\uC7A1\uC5D0 \uB300\uBE44\uD558\uAE30 \uC704\uD574, application \uAC1C\uBC1C\uC790\uB4E4\uC740 \uADF8\uB4E4 \uC790\uC2E0\uC758 rebroadcasting logic\uC744 customize \uD574\uC57C \uD569\uB2C8\uB2E4.

    An In-Depth Look at sendTransaction

    Transaction\uB4E4\uC744 \uBCF4\uB0B4\uB294 \uAC83\uC5D0 \uB300\uD574\uC11C\uB294 sendTransaction RPC method\uAC00 \uAC1C\uBC1C\uC790\uB4E4\uC5D0\uAC8C \uAC00\uC7A5 \uC911\uC694\uD55C \uB3C4\uAD6C\uC785\uB2C8\uB2E4. sendTransaction\uC740 \uB2E8\uC9C0 Transaction\uC744 client\uC5D0\uC11C RPC node\uB85C \uBCF4\uB0B4\uB294 \uB370 \uCC45\uC784\uC774 \uC788\uC2B5\uB2C8\uB2E4. \uB9CC\uC57D node\uAC00 Transaction\uC744 \uC218\uC2E0\uD558\uBA74, sendTransaction\uC740 \uADF8 Transaction\uC744 \uCD94\uC801\uD558\uAE30 \uC704\uD574 \uC0AC\uC6A9\uB420 \uC218 \uC788\uB294 Transaction id\uB97C \uC751\uB2F5\uD560 \uAC83\uC785\uB2C8\uB2E4. \uC131\uACF5\uC801\uC778 \uC751\uB2F5\uC774 \uADF8 Transaction\uC774 cluster\uC5D0 \uC758\uD574 \uCC98\uB9AC\uB418\uAC70\uB098 \uC644\uB8CC\uB420 \uAC83\uC778\uC9C0\uB97C \uB098\uD0C0\uB0B4\uC9C0\uB294 \uC54A\uC2B5\uB2C8\uB2E4.

    ',10),Zn={class:"custom-container tip"},$n=n("p",{class:"custom-container-title"},"TIP",-1),ns=n("h4",{id:"request-parameters",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#request-parameters","aria-hidden":"true"},"#"),s(" Request Parameters")],-1),ss=n("li",null,[n("code",null,"transaction"),s(": "),n("code",null,"string"),s(" - \uC778\uCF54\uB529 \uB41C \uBB38\uC790\uC5F4\uB85C \uC644\uC804\uD558\uAC8C \uC11C\uBA85\uB41C Transaction")],-1),as=s("(optional) "),ts=n("code",null,"configuration object",-1),os=s(": "),es=n("code",null,"object",-1),cs=n("li",null,[n("code",null,"skipPreflight"),s(": "),n("code",null,"boolean"),s(" - true \uB77C\uBA74, \uBCF4\uB0B4\uAE30 \uC804 Transaction check\uB97C \uAC74\uB108\uB701\uB2C8\uB2E4. (default: false)")],-1),rs=s("(optional) "),is=n("code",null,"preflightCommitment",-1),ls=s(": "),ps=n("code",null,"string",-1),ds=s(" - bank slot\uACFC \uBC18\uB300\uB418\uB294 \uBCF4\uB0B4\uAE30 \uC804 \uC2DC\uBBAC\uB808\uC774\uC158\uC744 \uC704\uD574 \uC0AC\uC6A9\uD560 "),us={href:"https://docs.solana.com/developing/clients/jsonrpc-api#configuring-state-commitment",target:"_blank",rel:"noopener noreferrer"},hs=s("Commitment"),_s=s(' \uB808\uBCA8 (default: "finalized").'),ks=n("li",null,[s("(optional) "),n("code",null,"encoding"),s(": "),n("code",null,"string"),s(' - Transaction Data\uB97C \uC704\uD574 \uC0AC\uC6A9\uB418\uB294 \uC778\uCF54\uB529. "base58" (slow), \uB610\uB294 "base64". (default: "base58").')],-1),bs=n("li",null,[s("(optional) "),n("code",null,"maxRetries"),s(": "),n("code",null,"usize"),s(" - RPC node\uAC00 leader\uC5D0\uAC8C Transaction \uBCF4\uB0B4\uB294 \uAC83\uC744 \uC7AC\uC2DC\uB3C4\uD560 \uCD5C\uB300 \uD69F\uC218. \uB9CC\uC57D \uC774 \uD30C\uB77C\uBBF8\uD130\uAC00 \uAC12\uC774 \uC138\uD305\uB418\uC9C0 \uC54A\uB294\uB2E4\uBA74, RPC node\uB294 Transaction\uC774 \uC644\uB8CC\uB418\uAC70\uB098 blockhash\uAC00 \uB9CC\uB8CC\uB420 \uB54C\uAE4C\uC9C0 \uC7AC\uC2DC\uB3C4\uD560 \uAC83\uC785\uB2C8\uB2E4.")],-1),fs=n("h4",{id:"response",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#response","aria-hidden":"true"},"#"),s(" Response")],-1),ms=n("code",null,"transaction id",-1),gs=s(": "),Ts=n("code",null,"string",-1),ws=s(" - base-58\uB85C \uC778\uCF54\uB529\uB41C \uBB38\uC790\uC5F4\uB85C Transaction\uC5D0 \uB2F4\uAE34 \uCCAB \uBC88\uC9F8 Transaction \uC2DC\uADF8\uB2C8\uCC98. \uC774 Transaction id\uB294 \uC0C1\uD0DC updates\uB4E4\uC744 \uC870\uC0AC\uD558\uAE30 \uC704\uD574 "),ys={href:"https://docs.solana.com/developing/clients/jsonrpc-api#getsignaturestatuses",target:"_blank",rel:"noopener noreferrer"},Ps=s("getSignatureStatuses"),vs=s("\uC640 \uD568\uAED8 \uC0AC\uC6A9\uB420 \uC218 \uC788\uC2B5\uB2C8\uB2E4."),Cs=n("h2",{id:"customizing-rebroadcast-logic",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#customizing-rebroadcast-logic","aria-hidden":"true"},"#"),s(" Customizing Rebroadcast Logic")],-1),Rs=s("\uC790\uC2E0\uB9CC\uC758 rebroadcasting logic\uC744 \uAC1C\uBC1C\uD558\uAE30 \uC704\uD574\uC11C, \uAC1C\uBC1C\uC790\uB4E4\uC740 "),xs=n("code",null,"sendTransaction",-1),Ss=s("\uC758 "),Bs=n("code",null,"maxRetries",-1),Ls=s(" \uD30C\uB77C\uBBF8\uD130\uC758 \uC774\uC810\uC744 \uD65C\uC6A9\uD574\uC57C \uD569\uB2C8\uB2E4. \uB9CC\uC57D \uC801\uC6A9\uB41C\uB2E4\uBA74, \uAC1C\uBC1C\uC790\uB4E4\uC774 "),As={href:"https://github.com/solana-labs/solana/blob/98707baec2385a4f7114d2167ef6dfb1406f954f/validator/src/main.rs#L1258-L1274",target:"_blank",rel:"noopener noreferrer"},js=s("within reasonable bounds"),Hs=s(" \uC7AC\uC2DC\uB3C4 \uCC98\uB9AC\uB97C \uC218\uB3D9\uC73C\uB85C \uB2E4\uB8F0 \uC218 \uC788\uAC8C \uD574 \uC8FC\uBA70, "),Vs=n("code",null,"maxRetries",-1),zs=s("\uAC00 RPC \uB178\uB4DC\uC758 \uAE30\uBCF8 retry logic\uC744 \uB36E\uC5B4\uC4F8 \uAC83\uC785\uB2C8\uB2E4."),Ds=s("Transaction\uB4E4\uC744 \uC218\uB3D9\uC73C\uB85C \uC7AC\uC2DC\uB3C4\uD558\uB294 \uAC83\uC744 \uC704\uD55C \uD754\uD55C \uD328\uD134\uC740 \uC77C\uC2DC\uC801\uC73C\uB85C "),Fs={href:"https://docs.solana.com/developing/clients/jsonrpc-api#getlatestblockhash",target:"_blank",rel:"noopener noreferrer"},Us=s("getLatestBlockhash"),Is=s("\uC73C\uB85C\uBD80\uD130 \uC5BB\uC744 \uC218 \uC788\uB294 "),Ks=n("code",null,"lastValidBlockHeight",-1),Ns=s("\uB97C \uC800\uC7A5\uD558\uB3C4\uB85D \uD638\uCD9C\uD558\uB294 \uAC83\uC785\uB2C8\uB2E4. \uC77C\uB2E8 \uC800\uC7A5\uB418\uACE0 \uB098\uBA74, \uC774\uC81C Application\uC740 "),Es={href:"https://docs.solana.com/developing/clients/jsonrpc-api#getblockheight",target:"_blank",rel:"noopener noreferrer"},Js=s("poll the cluster\u2019s blockheight"),Os=s("\uD560 \uC218 \uC788\uACE0 \uC801\uC808\uD55C \uAC04\uACA9\uC73C\uB85C \uC218\uB3D9\uC73C\uB85C Transaction\uC744 \uC7AC\uC2DC\uB3C4\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uB124\uD2B8\uC6CC\uD06C\uAC00 \uD63C\uC7A1\uD560 \uB54C\uB294 "),Ms=n("code",null,"maxRetries",-1),Gs=s("\uB97C 0\uC73C\uB85C \uC138\uD305\uD558\uACE0 custom algorithm\uC744 \uD1B5\uD574 \uC218\uB3D9\uC73C\uB85C rebroadcast\uD558\uB294 \uAC83\uC774 \uC720\uB9AC\uD569\uB2C8\uB2E4. \uC5B4\uB5A4 Application\uB4E4\uC740 "),qs={href:"https://en.wikipedia.org/wiki/Exponential_backoff",target:"_blank",rel:"noopener noreferrer"},Ws=s("exponential backoff"),Ys=s(" algorithm\uC744 \uC0AC\uC6A9\uD560\uC218\uB3C4 \uC788\uACE0, \uB2E4\uB978 Application\uB4E4\uC740 \uD0C0\uC784\uC544\uC6C3\uC774 \uC77C\uC5B4\uB0A0 \uB54C\uAE4C\uC9C0 \uC77C\uC815\uD55C \uAC04\uACA9\uC73C\uB85C Transaction\uB4E4\uC744 "),Qs={href:"https://github.com/blockworks-foundation/mango-ui/blob/b6abfc6c13b71fc17ebbe766f50b8215fa1ec54f/src/utils/send.tsx#L713",target:"_blank",rel:"noopener noreferrer"},Xs=s("continuously resubmit"),Zs=s("\uD558\uAE30 \uC704\uD574 "),$s={href:"https://www.mango.markets/",target:"_blank",rel:"noopener noreferrer"},na=s("Mango"),sa=s(" opt\uB97C \uC0AC\uC6A9\uD560 \uC218\uB3C4 \uC788\uC2B5\uB2C8\uB2E4."),aa=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` Keypair`),n("span",{class:"token punctuation"},","),s(` Connection`),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token constant"},"LAMPORTS_PER_SOL"),n("span",{class:"token punctuation"},","),s(` diff --git a/docs/.vuepress/dist/assets/serialization.html.c97fc14e.js b/docs/.vuepress/dist/assets/serialization.html.46c2b34d.js similarity index 97% rename from docs/.vuepress/dist/assets/serialization.html.c97fc14e.js rename to docs/.vuepress/dist/assets/serialization.html.46c2b34d.js index 8939a531d..15cb03d40 100644 --- a/docs/.vuepress/dist/assets/serialization.html.c97fc14e.js +++ b/docs/.vuepress/dist/assets/serialization.html.46c2b34d.js @@ -1,4 +1,4 @@ -import{_ as u,r as l,o as r,c as i,b as a,w as t,a as n,F as k,e as p,d as s}from"./app.cfdf84e7.js";var b="/assets/ser1.ceec0bad.png",m="/assets/ser2.38d4ca5b.png",d="/assets/ser3.7cdd43c8.png";const y={},g=p('

    Serializing Data

    \uC5EC\uAE30\uC11C Serialization\uC5D0 \uB300\uD574 \uC598\uAE30\uD560 \uB54C, Data\uB97C serializing \uD558\uB294 \uAC83\uACFC deserializing \uD558\uB294 \uAC83 \uBAA8\uB450\uB97C \uC758\uBBF8\uD569\uB2C8\uB2E4.

    Solana Program\uACFC Program Account\uB4E4\uC758 \uC0DD\uBA85 \uC8FC\uAE30\uB97C \uB530\uB77C\uC11C Serialization\uC774 \uB3D9\uC791\uD558\uB294 \uBA87 \uAC00\uC9C0 \uD3EC\uC778\uD2B8\uB4E4\uC774 \uC788\uC2B5\uB2C8\uB2E4:

    1. Client\uC5D0\uC11C Instruction Data\uB97C Serializing \uD558\uB294 \uAC83
    2. Program\uC5D0\uC11C Instruction Data\uB97C Deserializing \uD558\uB294 \uAC83
    3. Program\uC5D0\uC11C Account Data\uB97C Serializing \uD558\uB294 \uAC83
    4. Client\uC5D0\uC11C Account Data\uB97C Deserializing \uD558\uB294 \uAC83

    \uC704\uC758 \uD589\uC704\uB4E4\uC740 \uBAA8\uB450 \uAC19\uC740 Serialization \uC811\uADFC\uC5D0 \uC758\uD574 \uC9C0\uC6D0\uB41C\uB2E4\uB294 \uAC83\uC774 \uC911\uC694\uD569\uB2C8\uB2E4. \uD3EC\uD568\uB41C Snippet\uB4E4\uC774 Borsh\uB97C \uC0AC\uC6A9\uD558\uB294 Serialization\uC744 \uBCF4\uC5EC\uC8FC\uACE0 \uC788\uC2B5\uB2C8\uB2E4.

    \uC774 \uBB38\uC11C\uC758 \uB098\uBA38\uC9C0 \uC608\uC81C\uB4E4\uC740 Solana CLI Program Template\uC73C\uB85C\uBD80\uD130 \uAC00\uC838\uC628 \uAC83\uB4E4\uC785\uB2C8\uB2E4.

    Setting up for Borsh Serialization

    Rust Program, Rust Client, Node \uADF8\uB9AC\uACE0/\uB610\uB294 Python Client\uC5D0 Borsh \uB77C\uC774\uBE0C\uB7EC\uB9AC\uAC00 \uC124\uCE58\uB418\uC5B4\uC57C \uD569\uB2C8\uB2E4.

    ',8),f=n("div",{class:"language-toml ext-toml line-numbers-mode"},[n("pre",{class:"language-toml"},[n("code",null,[n("span",{class:"token punctuation"},"["),n("span",{class:"token table class-name"},"package"),n("span",{class:"token punctuation"},"]"),s(` +import{_ as u,r as l,o as r,c as i,b as a,w as t,a as n,F as k,e as p,d as s}from"./app.2fbb9e96.js";var b="/assets/ser1.ceec0bad.png",m="/assets/ser2.38d4ca5b.png",d="/assets/ser3.7cdd43c8.png";const y={},g=p('

    Serializing Data

    \uC5EC\uAE30\uC11C Serialization\uC5D0 \uB300\uD574 \uC598\uAE30\uD560 \uB54C, Data\uB97C serializing \uD558\uB294 \uAC83\uACFC deserializing \uD558\uB294 \uAC83 \uBAA8\uB450\uB97C \uC758\uBBF8\uD569\uB2C8\uB2E4.

    Solana Program\uACFC Program Account\uB4E4\uC758 \uC0DD\uBA85 \uC8FC\uAE30\uB97C \uB530\uB77C\uC11C Serialization\uC774 \uB3D9\uC791\uD558\uB294 \uBA87 \uAC00\uC9C0 \uD3EC\uC778\uD2B8\uB4E4\uC774 \uC788\uC2B5\uB2C8\uB2E4:

    1. Client\uC5D0\uC11C Instruction Data\uB97C Serializing \uD558\uB294 \uAC83
    2. Program\uC5D0\uC11C Instruction Data\uB97C Deserializing \uD558\uB294 \uAC83
    3. Program\uC5D0\uC11C Account Data\uB97C Serializing \uD558\uB294 \uAC83
    4. Client\uC5D0\uC11C Account Data\uB97C Deserializing \uD558\uB294 \uAC83

    \uC704\uC758 \uD589\uC704\uB4E4\uC740 \uBAA8\uB450 \uAC19\uC740 Serialization \uC811\uADFC\uC5D0 \uC758\uD574 \uC9C0\uC6D0\uB41C\uB2E4\uB294 \uAC83\uC774 \uC911\uC694\uD569\uB2C8\uB2E4. \uD3EC\uD568\uB41C Snippet\uB4E4\uC774 Borsh\uB97C \uC0AC\uC6A9\uD558\uB294 Serialization\uC744 \uBCF4\uC5EC\uC8FC\uACE0 \uC788\uC2B5\uB2C8\uB2E4.

    \uC774 \uBB38\uC11C\uC758 \uB098\uBA38\uC9C0 \uC608\uC81C\uB4E4\uC740 Solana CLI Program Template\uC73C\uB85C\uBD80\uD130 \uAC00\uC838\uC628 \uAC83\uB4E4\uC785\uB2C8\uB2E4.

    Setting up for Borsh Serialization

    Rust Program, Rust Client, Node \uADF8\uB9AC\uACE0/\uB610\uB294 Python Client\uC5D0 Borsh \uB77C\uC774\uBE0C\uB7EC\uB9AC\uAC00 \uC124\uCE58\uB418\uC5B4\uC57C \uD569\uB2C8\uB2E4.

    ',8),f=n("div",{class:"language-toml ext-toml line-numbers-mode"},[n("pre",{class:"language-toml"},[n("code",null,[n("span",{class:"token punctuation"},"["),n("span",{class:"token table class-name"},"package"),n("span",{class:"token punctuation"},"]"),s(` `),n("span",{class:"token key property"},"name"),s(),n("span",{class:"token punctuation"},"="),s(),n("span",{class:"token string"},'"solana-cli-template-program-bpf"'),s(` `),n("span",{class:"token key property"},"version"),s(),n("span",{class:"token punctuation"},"="),s(),n("span",{class:"token string"},'"0.1.0"'),s(` `),n("span",{class:"token key property"},"edition"),s(),n("span",{class:"token punctuation"},"="),s(),n("span",{class:"token string"},'"2018"'),s(` @@ -224,10 +224,11 @@ solana==0.20.0 `),n("span",{class:"token punctuation"},"}"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br"),n("span",{class:"line-number"},"69"),n("br"),n("span",{class:"line-number"},"70"),n("br"),n("span",{class:"line-number"},"71"),n("br"),n("span",{class:"line-number"},"72"),n("br"),n("span",{class:"line-number"},"73"),n("br"),n("span",{class:"line-number"},"74"),n("br"),n("span",{class:"line-number"},"75"),n("br"),n("span",{class:"line-number"},"76"),n("br"),n("span",{class:"line-number"},"77"),n("br"),n("span",{class:"line-number"},"78"),n("br"),n("span",{class:"line-number"},"79"),n("br"),n("span",{class:"line-number"},"80"),n("br"),n("span",{class:"line-number"},"81"),n("br"),n("span",{class:"line-number"},"82"),n("br"),n("span",{class:"line-number"},"83"),n("br"),n("span",{class:"line-number"},"84"),n("br"),n("span",{class:"line-number"},"85"),n("br"),n("span",{class:"line-number"},"86"),n("br"),n("span",{class:"line-number"},"87"),n("br"),n("span",{class:"line-number"},"88"),n("br"),n("span",{class:"line-number"},"89"),n("br"),n("span",{class:"line-number"},"90"),n("br"),n("span",{class:"line-number"},"91"),n("br"),n("span",{class:"line-number"},"92"),n("br"),n("span",{class:"line-number"},"93"),n("br"),n("span",{class:"line-number"},"94"),n("br"),n("span",{class:"line-number"},"95"),n("br"),n("span",{class:"line-number"},"96"),n("br"),n("span",{class:"line-number"},"97"),n("br"),n("span",{class:"line-number"},"98"),n("br"),n("span",{class:"line-number"},"99"),n("br"),n("span",{class:"line-number"},"100"),n("br"),n("span",{class:"line-number"},"101"),n("br"),n("span",{class:"line-number"},"102"),n("br"),n("span",{class:"line-number"},"103"),n("br"),n("span",{class:"line-number"},"104"),n("br"),n("span",{class:"line-number"},"105"),n("br"),n("span",{class:"line-number"},"106"),n("br"),n("span",{class:"line-number"},"107"),n("br"),n("span",{class:"line-number"},"108"),n("br")])],-1),v=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" borsh_construct "),n("span",{class:"token keyword"},"import"),s(" String"),n("span",{class:"token punctuation"},","),s(" CStruct"),n("span",{class:"token punctuation"},","),s(` U8 `),n("span",{class:"token keyword"},"from"),s(" enum "),n("span",{class:"token keyword"},"import"),s(` IntEnum -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("types "),n("span",{class:"token keyword"},"import"),s(` RPCResponse -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("transaction "),n("span",{class:"token keyword"},"import"),s(" Transaction"),n("span",{class:"token punctuation"},","),s(" TransactionInstruction"),n("span",{class:"token punctuation"},","),s(` AccountMeta -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("publickey "),n("span",{class:"token keyword"},"import"),s(` PublicKey -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("transaction "),n("span",{class:"token keyword"},"import"),s(` Transaction +`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("pubkey "),n("span",{class:"token keyword"},"import"),s(` Pubkey +`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("instruction "),n("span",{class:"token keyword"},"import"),s(" Instruction"),n("span",{class:"token punctuation"},","),s(` AccountMeta +`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("responses "),n("span",{class:"token keyword"},"import"),s(` SendTransactionResp `),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("api "),n("span",{class:"token keyword"},"import"),s(` Client @@ -250,12 +251,12 @@ payload_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token keyword"},"def"),s(),n("span",{class:"token function"},"mint_kv"),n("span",{class:"token punctuation"},"("),s(` client`),n("span",{class:"token punctuation"},":"),s(" Client"),n("span",{class:"token punctuation"},","),s(` - program_pk`),n("span",{class:"token punctuation"},":"),s(" PublicKey"),n("span",{class:"token punctuation"},","),s(` - account_pk`),n("span",{class:"token punctuation"},":"),s(" PublicKey"),n("span",{class:"token punctuation"},","),s(` + program_pk`),n("span",{class:"token punctuation"},":"),s(" Pubkey"),n("span",{class:"token punctuation"},","),s(` + account_pk`),n("span",{class:"token punctuation"},":"),s(" Pubkey"),n("span",{class:"token punctuation"},","),s(` wallet_kp`),n("span",{class:"token punctuation"},":"),s(" Keypair"),n("span",{class:"token punctuation"},","),s(` mint_key`),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token builtin"},"str"),n("span",{class:"token punctuation"},","),s(` mint_value`),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token builtin"},"str"),n("span",{class:"token punctuation"},","),s(` -`),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"-"),n("span",{class:"token operator"},">"),s(" RPCResponse"),n("span",{class:"token punctuation"},":"),s(` +`),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"-"),n("span",{class:"token operator"},">"),s(" SendTransactionResp"),n("span",{class:"token punctuation"},":"),s(` `),n("span",{class:"token triple-quoted-string string"},'"""Mint with a key/value pair to an account"""'),s(` `),n("span",{class:"token comment"},"# Construct the program payload for Mint invariant"),s(` payload_ser `),n("span",{class:"token operator"},"="),s(" construct_payload"),n("span",{class:"token punctuation"},"("),s("InstructionVariant"),n("span",{class:"token punctuation"},"."),s("MINT"),n("span",{class:"token punctuation"},","),s(" mint_key"),n("span",{class:"token punctuation"},","),s(" mint_value"),n("span",{class:"token punctuation"},")"),s(` @@ -271,13 +272,13 @@ payload_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token comment"},"# Construct the transaction with instructionVariant"),s(` txn `),n("span",{class:"token operator"},"="),s(" Transaction"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),s("add"),n("span",{class:"token punctuation"},"("),s(` - TransactionInstruction`),n("span",{class:"token punctuation"},"("),s(` - `),n("span",{class:"token punctuation"},"["),s("AccountMeta"),n("span",{class:"token punctuation"},"("),s("account_pk"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token boolean"},"False"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token boolean"},"True"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},","),s(" program_pk"),n("span",{class:"token punctuation"},","),s(` payload_ser + Instruction`),n("span",{class:"token punctuation"},"("),s(` + accounts`),n("span",{class:"token operator"},"="),n("span",{class:"token punctuation"},"["),s("AccountMeta"),n("span",{class:"token punctuation"},"("),s("account_pk"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token boolean"},"False"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token boolean"},"True"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},","),s(" program_id"),n("span",{class:"token operator"},"="),s("program_pk"),n("span",{class:"token punctuation"},","),s(" data"),n("span",{class:"token operator"},"="),s(`payload_ser `),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token keyword"},"return"),s(" client"),n("span",{class:"token punctuation"},"."),s("send_transaction"),n("span",{class:"token punctuation"},"("),s("txn"),n("span",{class:"token punctuation"},","),s(" wallet_kp"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"# => {'jsonrpc': '2.0', 'result': '4ZdpWNdovdVaLextWSiqEBWp67k9rNTTUaX3qviHDXWY9c98bVtaRt5sasPhYzMVXHqhex78gzNKytcBnVH5CSTZ', 'id': 2}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br")])],-1),T=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br")])],-1),T=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[s(` `),n("span",{class:"token comment"},"/// Instruction payload gets serialized"),s(` `),n("span",{class:"token attribute attr-name"},"#[derive(BorshSerialize)]"),s(` `),n("span",{class:"token keyword"},"pub"),s(),n("span",{class:"token keyword"},"struct"),s(),n("span",{class:"token type-definition class-name"},"Payload"),n("span",{class:"token operator"},"<"),n("span",{class:"token lifetime-annotation symbol"},"'a"),n("span",{class:"token operator"},">"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -603,10 +604,9 @@ payload_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token keyword"},"let"),s(" nameAccount "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"getAccountInfo"),n("span",{class:"token punctuation"},"("),s("account"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token string"},'"processed"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"return"),s(),n("span",{class:"token function"},"deserializeUnchecked"),n("span",{class:"token punctuation"},"("),s("dataSchema"),n("span",{class:"token punctuation"},","),s(" AccoundData"),n("span",{class:"token punctuation"},","),s(" nameAccount"),n("span",{class:"token punctuation"},"."),s("data"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br")])],-1),q=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(` base64 -`),n("span",{class:"token keyword"},"from"),s(" borsh_construct "),n("span",{class:"token keyword"},"import"),s(" CStruct"),n("span",{class:"token punctuation"},","),s(" U8"),n("span",{class:"token punctuation"},","),s(" U32"),n("span",{class:"token punctuation"},","),s(" HashMap"),n("span",{class:"token punctuation"},","),s(` String +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br")])],-1),q=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" borsh_construct "),n("span",{class:"token keyword"},"import"),s(" CStruct"),n("span",{class:"token punctuation"},","),s(" U8"),n("span",{class:"token punctuation"},","),s(" U32"),n("span",{class:"token punctuation"},","),s(" HashMap"),n("span",{class:"token punctuation"},","),s(` String `),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("commitment "),n("span",{class:"token keyword"},"import"),s(` Confirmed -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("publickey "),n("span",{class:"token keyword"},"import"),s(` PublicKey +`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("pubkey "),n("span",{class:"token keyword"},"import"),s(` Pubkey `),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("api "),n("span",{class:"token keyword"},"import"),s(` Client @@ -618,14 +618,10 @@ account_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"def"),s(),n("span",{class:"token function"},"get_account_info"),n("span",{class:"token punctuation"},"("),s("client"),n("span",{class:"token punctuation"},":"),s(" Client"),n("span",{class:"token punctuation"},","),s(" account_pk"),n("span",{class:"token punctuation"},":"),s(" PublicKey"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},":"),s(` +`),n("span",{class:"token keyword"},"def"),s(),n("span",{class:"token function"},"get_account_info"),n("span",{class:"token punctuation"},"("),s("client"),n("span",{class:"token punctuation"},":"),s(" Client"),n("span",{class:"token punctuation"},","),s(" account_pk"),n("span",{class:"token punctuation"},":"),s(" Pubkey"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},":"),s(` `),n("span",{class:"token triple-quoted-string string"},'"""Fetch account information from RPC, parse out the data and deserialize"""'),s(` res `),n("span",{class:"token operator"},"="),s(" client"),n("span",{class:"token punctuation"},"."),s("get_account_info"),n("span",{class:"token punctuation"},"("),s("account_pk"),n("span",{class:"token punctuation"},","),s(" Confirmed"),n("span",{class:"token punctuation"},","),s(" encoding"),n("span",{class:"token operator"},"="),n("span",{class:"token string"},"'base64'"),n("span",{class:"token punctuation"},")"),s(` - data `),n("span",{class:"token operator"},"="),s(" res"),n("span",{class:"token punctuation"},"["),n("span",{class:"token string"},"'result'"),n("span",{class:"token punctuation"},"]"),s(` - `),n("span",{class:"token keyword"},"if"),s(),n("span",{class:"token builtin"},"isinstance"),n("span",{class:"token punctuation"},"("),s("data"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token builtin"},"dict"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},":"),s(` - `),n("span",{class:"token keyword"},"return"),s(" account_schema"),n("span",{class:"token punctuation"},"."),s("parse"),n("span",{class:"token punctuation"},"("),s("base64"),n("span",{class:"token punctuation"},"."),s("urlsafe_b64decode"),n("span",{class:"token punctuation"},"("),s("data"),n("span",{class:"token punctuation"},"["),n("span",{class:"token string"},"'value'"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},"["),n("span",{class:"token string"},"'data'"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},"["),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` - `),n("span",{class:"token keyword"},"else"),n("span",{class:"token punctuation"},":"),s(` - `),n("span",{class:"token keyword"},"raise"),s(" AttributeError"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string-interpolation"},[n("span",{class:"token string"},"f'Unknown RPC result "),n("span",{class:"token interpolation"},[n("span",{class:"token punctuation"},"{"),s("data"),n("span",{class:"token punctuation"},"}")]),n("span",{class:"token string"},"'")]),n("span",{class:"token punctuation"},")"),s(` + `),n("span",{class:"token keyword"},"return"),s(" account_schema"),n("span",{class:"token punctuation"},"."),s("parse"),n("span",{class:"token punctuation"},"("),s("res"),n("span",{class:"token punctuation"},"."),s("value"),n("span",{class:"token punctuation"},"."),s("data"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"# Results in or similar"),s(` `),n("span",{class:"token comment"},"# => Container:"),s(` @@ -633,7 +629,7 @@ account_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token comment"},"# => map_length = 109"),s(` `),n("span",{class:"token comment"},"# => map = {'Happy': 'New Year!', 'newKey': 'A new value',"),s(` `),n("span",{class:"token comment"},"# => 'python key': 'python value', 'ts key': 'ts first value'}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br")])],-1),W=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token punctuation"},"{"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br")])],-1),W=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token namespace"},[s("arrayref"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token operator"},"*"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token namespace"},[s("borsh"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"BorshDeserialize"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"BorshSerialize"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token namespace"},[s("std"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token namespace"},[s("collections"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"BTreeMap"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token namespace"},[s("error"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"Error"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},","),s(` @@ -737,8 +733,7 @@ account_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token function"},"entry"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br"),n("span",{class:"line-number"},"69"),n("br"),n("span",{class:"line-number"},"70"),n("br"),n("span",{class:"line-number"},"71"),n("br")])],-1),nn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(` base64 -`),n("span",{class:"token keyword"},"from"),s(" borsh_construct "),n("span",{class:"token keyword"},"import"),s(" U8"),n("span",{class:"token punctuation"},","),s(" U16"),n("span",{class:"token punctuation"},","),s(" U32"),n("span",{class:"token punctuation"},","),s(" String"),n("span",{class:"token punctuation"},","),s(` HashMap +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br"),n("span",{class:"line-number"},"69"),n("br"),n("span",{class:"line-number"},"70"),n("br"),n("span",{class:"line-number"},"71"),n("br")])],-1),nn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" borsh_construct "),n("span",{class:"token keyword"},"import"),s(" U8"),n("span",{class:"token punctuation"},","),s(" U16"),n("span",{class:"token punctuation"},","),s(" U32"),n("span",{class:"token punctuation"},","),s(" String"),n("span",{class:"token punctuation"},","),s(` HashMap `),n("span",{class:"token comment"},"# Schema to deserialize various types"),s(` primitive_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span",{class:"token punctuation"},"("),s(` @@ -782,7 +777,7 @@ primitive_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span `),n("span",{class:"token comment"},"# => 4"),s(` `),n("span",{class:"token comment"},"# => 5"),s(` `),n("span",{class:"token comment"},"# => MAP_STRING_STRING = {'cookbook': 'recipe', 'recipe': 'ingredient'}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br")])],-1),sn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br")])],-1),sn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token attribute attr-name"},"#[cfg(test)]"),s(` `),n("span",{class:"token keyword"},"mod"),s(),n("span",{class:"token module-declaration namespace"},"tests"),s(),n("span",{class:"token punctuation"},"{"),s(` diff --git a/docs/.vuepress/dist/assets/serialization.html.c8c0bb87.js b/docs/.vuepress/dist/assets/serialization.html.62d319fc.js similarity index 97% rename from docs/.vuepress/dist/assets/serialization.html.c8c0bb87.js rename to docs/.vuepress/dist/assets/serialization.html.62d319fc.js index 12adbc0c4..7b9a8e0c5 100644 --- a/docs/.vuepress/dist/assets/serialization.html.c8c0bb87.js +++ b/docs/.vuepress/dist/assets/serialization.html.62d319fc.js @@ -1,4 +1,4 @@ -import{_ as u,r as l,o as i,c as r,b as a,w as t,a as n,F as k,e as p,d as s}from"./app.cfdf84e7.js";var b="/assets/ser1.ceec0bad.png",m="/assets/ser2.38d4ca5b.png",d="/assets/ser3.7cdd43c8.png";const y={},g=p('

    Serialisasi Data

    Ketika kita berbicara tentang serialisasi, yang kita maksud adalah serialisasi data dan juga deserialisasi data.

    Serialisasi berperan di beberapa titik sepanjang lifecycle akun program dan program Solana:

    1. Serialisasi data instruksi ke klien
    2. Deserialisasi data instruksi pada program
    3. Serialisasi data Akun pada program
    4. Deserialisasi Data Akun pada klien

    Penting bahwa semua tindakan di atas didukung oleh pendekatan serialisasi yang sama. Snippet yang dimasukkan disini mendemonstrasikan serialisasi menggunakan Borsh.

    Contoh dalam sisa dokumen ini adalah kutipan yang diambil dari Template Program CLI Solana

    Persiapan untuk Borsh Serialization

    Library untuk Borsh harus disiapkan dalam program Rust, klien Rust, Node dan/atau klien Python.

    ',8),f=n("div",{class:"language-toml ext-toml line-numbers-mode"},[n("pre",{class:"language-toml"},[n("code",null,[n("span",{class:"token punctuation"},"["),n("span",{class:"token table class-name"},"package"),n("span",{class:"token punctuation"},"]"),s(` +import{_ as u,r as l,o as r,c as i,b as a,w as t,a as n,F as k,e as p,d as s}from"./app.2fbb9e96.js";var b="/assets/ser1.ceec0bad.png",m="/assets/ser2.38d4ca5b.png",d="/assets/ser3.7cdd43c8.png";const y={},g=p('

    Serialisasi Data

    Ketika kita berbicara tentang serialisasi, yang kita maksud adalah serialisasi data dan juga deserialisasi data.

    Serialisasi berperan di beberapa titik sepanjang lifecycle akun program dan program Solana:

    1. Serialisasi data instruksi ke klien
    2. Deserialisasi data instruksi pada program
    3. Serialisasi data Akun pada program
    4. Deserialisasi Data Akun pada klien

    Penting bahwa semua tindakan di atas didukung oleh pendekatan serialisasi yang sama. Snippet yang dimasukkan disini mendemonstrasikan serialisasi menggunakan Borsh.

    Contoh dalam sisa dokumen ini adalah kutipan yang diambil dari Template Program CLI Solana

    Persiapan untuk Borsh Serialization

    Library untuk Borsh harus disiapkan dalam program Rust, klien Rust, Node dan/atau klien Python.

    ',8),f=n("div",{class:"language-toml ext-toml line-numbers-mode"},[n("pre",{class:"language-toml"},[n("code",null,[n("span",{class:"token punctuation"},"["),n("span",{class:"token table class-name"},"package"),n("span",{class:"token punctuation"},"]"),s(` `),n("span",{class:"token key property"},"name"),s(),n("span",{class:"token punctuation"},"="),s(),n("span",{class:"token string"},'"solana-cli-template-program-bpf"'),s(` `),n("span",{class:"token key property"},"version"),s(),n("span",{class:"token punctuation"},"="),s(),n("span",{class:"token string"},'"0.1.0"'),s(` `),n("span",{class:"token key property"},"edition"),s(),n("span",{class:"token punctuation"},"="),s(),n("span",{class:"token string"},'"2018"'),s(` @@ -57,7 +57,7 @@ import{_ as u,r as l,o as i,c as r,b as a,w as t,a as n,F as k,e as p,d as s}fro `),n("span",{class:"token key property"},"lazy_static"),s(),n("span",{class:"token punctuation"},"="),s(),n("span",{class:"token string"},'"1.4.0"'),s(` `),n("span",{class:"token key property"},"solana-validator"),s(),n("span",{class:"token punctuation"},"="),s(),n("span",{class:"token string"},'"1.8.2"'),s(` `),n("span",{class:"token key property"},"solana-streamer"),s(),n("span",{class:"token punctuation"},"="),s(),n("span",{class:"token string"},'"1.8.2"'),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br")])],-1),w=n("div",{class:"language-json ext-json line-numbers-mode"},[n("pre",{class:"language-json"},[n("code",null,[n("span",{class:"token punctuation"},"{"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br")])],-1),h=n("div",{class:"language-json ext-json line-numbers-mode"},[n("pre",{class:"language-json"},[n("code",null,[n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token property"},'"name"'),n("span",{class:"token operator"},":"),s(),n("span",{class:"token string"},'"ts-program-template"'),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token property"},'"version"'),n("span",{class:"token operator"},":"),s(),n("span",{class:"token string"},'"0.1.0"'),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token property"},'"description"'),n("span",{class:"token operator"},":"),s(),n("span",{class:"token string"},'"Sample TS App"'),n("span",{class:"token punctuation"},","),s(` @@ -112,7 +112,7 @@ import{_ as u,r as l,o as i,c as r,b as a,w as t,a as n,F as k,e as p,d as s}fro `),n("span",{class:"token property"},'"update"'),n("span",{class:"token operator"},":"),s(),n("span",{class:"token string"},'"^0.4.2"'),s(` `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br")])],-1),h=n("div",{class:"language-txt ext-txt line-numbers-mode"},[n("pre",{class:"language-txt"},[n("code",null,`borsh-construct==0.1.0 +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br")])],-1),w=n("div",{class:"language-txt ext-txt line-numbers-mode"},[n("pre",{class:"language-txt"},[n("code",null,`borsh-construct==0.1.0 solana==0.20.0 `)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br")])],-1),S=p('

    Cara serialize data instruksi pada klien

    Serialize Data Instruksi

    Jika Anda membuat serialisasi data instruksi yang keluar untuk dikirim ke suatu program, itu harus mencerminkan bagaimana program melakukan deserialisasi data instruksi yang masuk.

    Dalam template ini, blok data instruksi adalah array serial yang berisi, dengan contoh:

    Instruksi (Variant index)Serialized KeySerialized Value
    Initialize (0)tidak berlaku untuk instruksitidak berlaku untuk instruksi
    Mint (1)"foo""bar"
    Transfer (2)"foo"tidak berlaku untuk instruksi
    Burn (2)"foo"tidak berlaku untuk instruksi

    Dalam contoh berikut, kita menganggap akun milik program telah diinisialisasi

    ',6),v=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token comment"},"// Include borsh functionality"),s(` @@ -224,10 +224,11 @@ solana==0.20.0 `),n("span",{class:"token punctuation"},"}"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br"),n("span",{class:"line-number"},"69"),n("br"),n("span",{class:"line-number"},"70"),n("br"),n("span",{class:"line-number"},"71"),n("br"),n("span",{class:"line-number"},"72"),n("br"),n("span",{class:"line-number"},"73"),n("br"),n("span",{class:"line-number"},"74"),n("br"),n("span",{class:"line-number"},"75"),n("br"),n("span",{class:"line-number"},"76"),n("br"),n("span",{class:"line-number"},"77"),n("br"),n("span",{class:"line-number"},"78"),n("br"),n("span",{class:"line-number"},"79"),n("br"),n("span",{class:"line-number"},"80"),n("br"),n("span",{class:"line-number"},"81"),n("br"),n("span",{class:"line-number"},"82"),n("br"),n("span",{class:"line-number"},"83"),n("br"),n("span",{class:"line-number"},"84"),n("br"),n("span",{class:"line-number"},"85"),n("br"),n("span",{class:"line-number"},"86"),n("br"),n("span",{class:"line-number"},"87"),n("br"),n("span",{class:"line-number"},"88"),n("br"),n("span",{class:"line-number"},"89"),n("br"),n("span",{class:"line-number"},"90"),n("br"),n("span",{class:"line-number"},"91"),n("br"),n("span",{class:"line-number"},"92"),n("br"),n("span",{class:"line-number"},"93"),n("br"),n("span",{class:"line-number"},"94"),n("br"),n("span",{class:"line-number"},"95"),n("br"),n("span",{class:"line-number"},"96"),n("br"),n("span",{class:"line-number"},"97"),n("br"),n("span",{class:"line-number"},"98"),n("br"),n("span",{class:"line-number"},"99"),n("br"),n("span",{class:"line-number"},"100"),n("br"),n("span",{class:"line-number"},"101"),n("br"),n("span",{class:"line-number"},"102"),n("br"),n("span",{class:"line-number"},"103"),n("br"),n("span",{class:"line-number"},"104"),n("br"),n("span",{class:"line-number"},"105"),n("br"),n("span",{class:"line-number"},"106"),n("br"),n("span",{class:"line-number"},"107"),n("br"),n("span",{class:"line-number"},"108"),n("br")])],-1),T=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" borsh_construct "),n("span",{class:"token keyword"},"import"),s(" String"),n("span",{class:"token punctuation"},","),s(" CStruct"),n("span",{class:"token punctuation"},","),s(` U8 `),n("span",{class:"token keyword"},"from"),s(" enum "),n("span",{class:"token keyword"},"import"),s(` IntEnum -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("types "),n("span",{class:"token keyword"},"import"),s(` RPCResponse -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("transaction "),n("span",{class:"token keyword"},"import"),s(" Transaction"),n("span",{class:"token punctuation"},","),s(" TransactionInstruction"),n("span",{class:"token punctuation"},","),s(` AccountMeta -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("publickey "),n("span",{class:"token keyword"},"import"),s(` PublicKey -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("transaction "),n("span",{class:"token keyword"},"import"),s(` Transaction +`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("pubkey "),n("span",{class:"token keyword"},"import"),s(` Pubkey +`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("instruction "),n("span",{class:"token keyword"},"import"),s(" Instruction"),n("span",{class:"token punctuation"},","),s(` AccountMeta +`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("responses "),n("span",{class:"token keyword"},"import"),s(` SendTransactionResp `),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("api "),n("span",{class:"token keyword"},"import"),s(` Client @@ -250,12 +251,12 @@ payload_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token keyword"},"def"),s(),n("span",{class:"token function"},"mint_kv"),n("span",{class:"token punctuation"},"("),s(` client`),n("span",{class:"token punctuation"},":"),s(" Client"),n("span",{class:"token punctuation"},","),s(` - program_pk`),n("span",{class:"token punctuation"},":"),s(" PublicKey"),n("span",{class:"token punctuation"},","),s(` - account_pk`),n("span",{class:"token punctuation"},":"),s(" PublicKey"),n("span",{class:"token punctuation"},","),s(` + program_pk`),n("span",{class:"token punctuation"},":"),s(" Pubkey"),n("span",{class:"token punctuation"},","),s(` + account_pk`),n("span",{class:"token punctuation"},":"),s(" Pubkey"),n("span",{class:"token punctuation"},","),s(` wallet_kp`),n("span",{class:"token punctuation"},":"),s(" Keypair"),n("span",{class:"token punctuation"},","),s(` mint_key`),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token builtin"},"str"),n("span",{class:"token punctuation"},","),s(` mint_value`),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token builtin"},"str"),n("span",{class:"token punctuation"},","),s(` -`),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"-"),n("span",{class:"token operator"},">"),s(" RPCResponse"),n("span",{class:"token punctuation"},":"),s(` +`),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"-"),n("span",{class:"token operator"},">"),s(" SendTransactionResp"),n("span",{class:"token punctuation"},":"),s(` `),n("span",{class:"token triple-quoted-string string"},'"""Mint with a key/value pair to an account"""'),s(` `),n("span",{class:"token comment"},"# Construct the program payload for Mint invariant"),s(` payload_ser `),n("span",{class:"token operator"},"="),s(" construct_payload"),n("span",{class:"token punctuation"},"("),s("InstructionVariant"),n("span",{class:"token punctuation"},"."),s("MINT"),n("span",{class:"token punctuation"},","),s(" mint_key"),n("span",{class:"token punctuation"},","),s(" mint_value"),n("span",{class:"token punctuation"},")"),s(` @@ -271,13 +272,13 @@ payload_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token comment"},"# Construct the transaction with instructionVariant"),s(` txn `),n("span",{class:"token operator"},"="),s(" Transaction"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),s("add"),n("span",{class:"token punctuation"},"("),s(` - TransactionInstruction`),n("span",{class:"token punctuation"},"("),s(` - `),n("span",{class:"token punctuation"},"["),s("AccountMeta"),n("span",{class:"token punctuation"},"("),s("account_pk"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token boolean"},"False"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token boolean"},"True"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},","),s(" program_pk"),n("span",{class:"token punctuation"},","),s(` payload_ser + Instruction`),n("span",{class:"token punctuation"},"("),s(` + accounts`),n("span",{class:"token operator"},"="),n("span",{class:"token punctuation"},"["),s("AccountMeta"),n("span",{class:"token punctuation"},"("),s("account_pk"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token boolean"},"False"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token boolean"},"True"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},","),s(" program_id"),n("span",{class:"token operator"},"="),s("program_pk"),n("span",{class:"token punctuation"},","),s(" data"),n("span",{class:"token operator"},"="),s(`payload_ser `),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token keyword"},"return"),s(" client"),n("span",{class:"token punctuation"},"."),s("send_transaction"),n("span",{class:"token punctuation"},"("),s("txn"),n("span",{class:"token punctuation"},","),s(" wallet_kp"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"# => {'jsonrpc': '2.0', 'result': '4ZdpWNdovdVaLextWSiqEBWp67k9rNTTUaX3qviHDXWY9c98bVtaRt5sasPhYzMVXHqhex78gzNKytcBnVH5CSTZ', 'id': 2}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br")])],-1),z=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br")])],-1),z=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[s(` `),n("span",{class:"token comment"},"/// Instruction payload gets serialized"),s(` `),n("span",{class:"token attribute attr-name"},"#[derive(BorshSerialize)]"),s(` `),n("span",{class:"token keyword"},"pub"),s(),n("span",{class:"token keyword"},"struct"),s(),n("span",{class:"token type-definition class-name"},"Payload"),n("span",{class:"token operator"},"<"),n("span",{class:"token lifetime-annotation symbol"},"'a"),n("span",{class:"token operator"},">"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -377,7 +378,7 @@ payload_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br")])],-1),E=p('

    Cara serialisasi data akun pada program

    Account Data Serialization

    Blok data akun program (dari contoh repo) ditata sebagai

    Byte 0Byte 1-4Sisa Byte hingga 1019
    Initlialized flagpanjang dari BTreeMap yang telah di serializeBTreeMap (tempat key value pair disimpan)

    Pack

    ',5),x=s("Sepatah kata tentang sifat "),B={href:"https://github.com/solana-labs/solana/blob/22a18a68e3ee68ae013d647e62e12128433d7230/sdk/program/src/program_pack.rs",target:"_blank",rel:"noopener noreferrer"},I=s("Pack"),R=p("

    Sifat dari Pack memudahkan untuk menyembunyikan detail akan serialisasi/deserialisasi data akun dari pemrosesan instruksi Program inti Anda. Jadi daripada meletakkan semua serialisasi/deserialisasi masuk ke kode pemrosesan program, Pack melakukan encapsulate detilnya di dalam (3) fungsi:

    1. unpack_unchecked - Memungkinkan Anda untuk deserialize akun tanpa memeriksa apakah akun telah diinisialisasi. Ini berguna ketika Anda sedang memproses Initialization Function (indeks varian 0)
    2. unpack - Memanggil implementasi Pack Anda yaitu unpack_from_slice dan memeriksa apakah akun telah diinisialisasi.
    3. pack - Memanggil implementasi Pack Anda yaitu pack_into_slice

    Berikut adalah implementasi sifat Pack untuk program sampel kita. Ini diikuti dengan yang pengolahan data akun yang sebenarnya menggunakan borsh.

    ",3),O=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"//! @brief account_state manages account data"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br")])],-1),x=p('

    Cara serialisasi data akun pada program

    Account Data Serialization

    Blok data akun program (dari contoh repo) ditata sebagai

    Byte 0Byte 1-4Sisa Byte hingga 1019
    Initlialized flagpanjang dari BTreeMap yang telah di serializeBTreeMap (tempat key value pair disimpan)

    Pack

    ',5),E=s("Sepatah kata tentang sifat "),B={href:"https://github.com/solana-labs/solana/blob/22a18a68e3ee68ae013d647e62e12128433d7230/sdk/program/src/program_pack.rs",target:"_blank",rel:"noopener noreferrer"},I=s("Pack"),R=p("

    Sifat dari Pack memudahkan untuk menyembunyikan detail akan serialisasi/deserialisasi data akun dari pemrosesan instruksi Program inti Anda. Jadi daripada meletakkan semua serialisasi/deserialisasi masuk ke kode pemrosesan program, Pack melakukan encapsulate detilnya di dalam (3) fungsi:

    1. unpack_unchecked - Memungkinkan Anda untuk deserialize akun tanpa memeriksa apakah akun telah diinisialisasi. Ini berguna ketika Anda sedang memproses Initialization Function (indeks varian 0)
    2. unpack - Memanggil implementasi Pack Anda yaitu unpack_from_slice dan memeriksa apakah akun telah diinisialisasi.
    3. pack - Memanggil implementasi Pack Anda yaitu pack_into_slice

    Berikut adalah implementasi sifat Pack untuk program sampel kita. Ini diikuti dengan yang pengolahan data akun yang sebenarnya menggunakan borsh.

    ",3),O=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"//! @brief account_state manages account data"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token keyword"},"crate"),n("span",{class:"token module-declaration namespace"},[n("span",{class:"token punctuation"},"::"),s("error"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"SampleError"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("sol_template_shared"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token constant"},"ACCOUNT_STATE_SPACE"),n("span",{class:"token punctuation"},";"),s(` @@ -516,7 +517,7 @@ payload_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token class-name"},"Ok"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"("),s("is_initialized"),n("span",{class:"token punctuation"},","),s(" data_dser"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br")])],-1),K=n("h3",{id:"penggunaan",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#penggunaan","aria-hidden":"true"},"#"),s(" Penggunaan")],-1),D=n("p",null,[s("Contoh berikut menggabungkan semuanya dan menunjukkan bagaimana program berinteraksi dengan "),n("code",null,"ProgramAccountState"),s(" yang merangkum initialization flag serta "),n("code",null,"BTreeMap"),s(" yang menjadi dasar untuk key/value pair kita.")],-1),U=n("p",null,"Pertama ketika kita ingin menginisialisasi akun baru:",-1),G=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"/// Initialize a new program account, which is the first in AccountInfo array"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br")])],-1),D=n("h3",{id:"penggunaan",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#penggunaan","aria-hidden":"true"},"#"),s(" Penggunaan")],-1),U=n("p",null,[s("Contoh berikut menggabungkan semuanya dan menunjukkan bagaimana program berinteraksi dengan "),n("code",null,"ProgramAccountState"),s(" yang merangkum initialization flag serta "),n("code",null,"BTreeMap"),s(" yang menjadi dasar untuk key/value pair kita.")],-1),K=n("p",null,"Pertama ketika kita ingin menginisialisasi akun baru:",-1),G=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"/// Initialize a new program account, which is the first in AccountInfo array"),s(` `),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"initialize_account"),n("span",{class:"token punctuation"},"("),s("accounts"),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token operator"},"&"),n("span",{class:"token punctuation"},"["),n("span",{class:"token class-name"},"AccountInfo"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"->"),s(),n("span",{class:"token class-name"},"ProgramResult"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token macro property"},"msg!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Initialize account"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"let"),s(" account_info_iter "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token operator"},"&"),n("span",{class:"token keyword"},"mut"),s(" accounts"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"iter"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` @@ -603,10 +604,9 @@ payload_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token keyword"},"let"),s(" nameAccount "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"getAccountInfo"),n("span",{class:"token punctuation"},"("),s("account"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token string"},'"processed"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"return"),s(),n("span",{class:"token function"},"deserializeUnchecked"),n("span",{class:"token punctuation"},"("),s("dataSchema"),n("span",{class:"token punctuation"},","),s(" AccoundData"),n("span",{class:"token punctuation"},","),s(" nameAccount"),n("span",{class:"token punctuation"},"."),s("data"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br")])],-1),q=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(` base64 -`),n("span",{class:"token keyword"},"from"),s(" borsh_construct "),n("span",{class:"token keyword"},"import"),s(" CStruct"),n("span",{class:"token punctuation"},","),s(" U8"),n("span",{class:"token punctuation"},","),s(" U32"),n("span",{class:"token punctuation"},","),s(" HashMap"),n("span",{class:"token punctuation"},","),s(` String +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br")])],-1),q=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" borsh_construct "),n("span",{class:"token keyword"},"import"),s(" CStruct"),n("span",{class:"token punctuation"},","),s(" U8"),n("span",{class:"token punctuation"},","),s(" U32"),n("span",{class:"token punctuation"},","),s(" HashMap"),n("span",{class:"token punctuation"},","),s(` String `),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("commitment "),n("span",{class:"token keyword"},"import"),s(` Confirmed -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("publickey "),n("span",{class:"token keyword"},"import"),s(` PublicKey +`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("pubkey "),n("span",{class:"token keyword"},"import"),s(` Pubkey `),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("api "),n("span",{class:"token keyword"},"import"),s(` Client @@ -618,14 +618,10 @@ account_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"def"),s(),n("span",{class:"token function"},"get_account_info"),n("span",{class:"token punctuation"},"("),s("client"),n("span",{class:"token punctuation"},":"),s(" Client"),n("span",{class:"token punctuation"},","),s(" account_pk"),n("span",{class:"token punctuation"},":"),s(" PublicKey"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},":"),s(` +`),n("span",{class:"token keyword"},"def"),s(),n("span",{class:"token function"},"get_account_info"),n("span",{class:"token punctuation"},"("),s("client"),n("span",{class:"token punctuation"},":"),s(" Client"),n("span",{class:"token punctuation"},","),s(" account_pk"),n("span",{class:"token punctuation"},":"),s(" Pubkey"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},":"),s(` `),n("span",{class:"token triple-quoted-string string"},'"""Fetch account information from RPC, parse out the data and deserialize"""'),s(` res `),n("span",{class:"token operator"},"="),s(" client"),n("span",{class:"token punctuation"},"."),s("get_account_info"),n("span",{class:"token punctuation"},"("),s("account_pk"),n("span",{class:"token punctuation"},","),s(" Confirmed"),n("span",{class:"token punctuation"},","),s(" encoding"),n("span",{class:"token operator"},"="),n("span",{class:"token string"},"'base64'"),n("span",{class:"token punctuation"},")"),s(` - data `),n("span",{class:"token operator"},"="),s(" res"),n("span",{class:"token punctuation"},"["),n("span",{class:"token string"},"'result'"),n("span",{class:"token punctuation"},"]"),s(` - `),n("span",{class:"token keyword"},"if"),s(),n("span",{class:"token builtin"},"isinstance"),n("span",{class:"token punctuation"},"("),s("data"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token builtin"},"dict"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},":"),s(` - `),n("span",{class:"token keyword"},"return"),s(" account_schema"),n("span",{class:"token punctuation"},"."),s("parse"),n("span",{class:"token punctuation"},"("),s("base64"),n("span",{class:"token punctuation"},"."),s("urlsafe_b64decode"),n("span",{class:"token punctuation"},"("),s("data"),n("span",{class:"token punctuation"},"["),n("span",{class:"token string"},"'value'"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},"["),n("span",{class:"token string"},"'data'"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},"["),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` - `),n("span",{class:"token keyword"},"else"),n("span",{class:"token punctuation"},":"),s(` - `),n("span",{class:"token keyword"},"raise"),s(" AttributeError"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string-interpolation"},[n("span",{class:"token string"},"f'Unknown RPC result "),n("span",{class:"token interpolation"},[n("span",{class:"token punctuation"},"{"),s("data"),n("span",{class:"token punctuation"},"}")]),n("span",{class:"token string"},"'")]),n("span",{class:"token punctuation"},")"),s(` + `),n("span",{class:"token keyword"},"return"),s(" account_schema"),n("span",{class:"token punctuation"},"."),s("parse"),n("span",{class:"token punctuation"},"("),s("res"),n("span",{class:"token punctuation"},"."),s("value"),n("span",{class:"token punctuation"},"."),s("data"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"# Results in or similar"),s(` `),n("span",{class:"token comment"},"# => Container:"),s(` @@ -633,7 +629,7 @@ account_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token comment"},"# => map_length = 109"),s(` `),n("span",{class:"token comment"},"# => map = {'Happy': 'New Year!', 'newKey': 'A new value',"),s(` `),n("span",{class:"token comment"},"# => 'python key': 'python value', 'ts key': 'ts first value'}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br")])],-1),W=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token punctuation"},"{"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br")])],-1),W=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token namespace"},[s("arrayref"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token operator"},"*"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token namespace"},[s("borsh"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"BorshDeserialize"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"BorshSerialize"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token namespace"},[s("std"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token namespace"},[s("collections"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"BTreeMap"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token namespace"},[s("error"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"Error"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},","),s(` @@ -737,8 +733,7 @@ account_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token function"},"entry"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br"),n("span",{class:"line-number"},"69"),n("br"),n("span",{class:"line-number"},"70"),n("br"),n("span",{class:"line-number"},"71"),n("br")])],-1),nn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(` base64 -`),n("span",{class:"token keyword"},"from"),s(" borsh_construct "),n("span",{class:"token keyword"},"import"),s(" U8"),n("span",{class:"token punctuation"},","),s(" U16"),n("span",{class:"token punctuation"},","),s(" U32"),n("span",{class:"token punctuation"},","),s(" String"),n("span",{class:"token punctuation"},","),s(` HashMap +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br"),n("span",{class:"line-number"},"69"),n("br"),n("span",{class:"line-number"},"70"),n("br"),n("span",{class:"line-number"},"71"),n("br")])],-1),nn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" borsh_construct "),n("span",{class:"token keyword"},"import"),s(" U8"),n("span",{class:"token punctuation"},","),s(" U16"),n("span",{class:"token punctuation"},","),s(" U32"),n("span",{class:"token punctuation"},","),s(" String"),n("span",{class:"token punctuation"},","),s(` HashMap `),n("span",{class:"token comment"},"# Schema to deserialize various types"),s(` primitive_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span",{class:"token punctuation"},"("),s(` @@ -782,7 +777,7 @@ primitive_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span `),n("span",{class:"token comment"},"# => 4"),s(` `),n("span",{class:"token comment"},"# => 5"),s(` `),n("span",{class:"token comment"},"# => MAP_STRING_STRING = {'cookbook': 'recipe', 'recipe': 'ingredient'}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br")])],-1),sn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br")])],-1),sn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token attribute attr-name"},"#[cfg(test)]"),s(` `),n("span",{class:"token keyword"},"mod"),s(),n("span",{class:"token module-declaration namespace"},"tests"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -991,4 +986,4 @@ primitive_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span `),n("span",{class:"token macro property"},"println!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Some = {:?} Pubkey = {:?}"'),n("span",{class:"token punctuation"},","),s(" toption"),n("span",{class:"token number"},".0"),n("span",{class:"token punctuation"},","),s(" pkey"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br")])],-1),pn=n("h2",{id:"resource",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#resource","aria-hidden":"true"},"#"),s(" Resource")],-1),ln={href:"https://borsh.io/",target:"_blank",rel:"noopener noreferrer"},un=s("Spesifikasi Borsh"),rn={href:"https://github.com/near/borsh-rs",target:"_blank",rel:"noopener noreferrer"},kn=s("Rust Borsh"),bn={href:"https://github.com/near/borsh-js",target:"_blank",rel:"noopener noreferrer"},mn=s("TS/JS Borsh"),dn={href:"https://github.com/near/borsh-construct-py",target:"_blank",rel:"noopener noreferrer"},yn=s("Python Borsh"),gn={href:"https://near.github.io/borsh-construct-py/",target:"_blank",rel:"noopener noreferrer"},fn=s("Dokumentasi Python Borsh"),_n={href:"https://github.com/hashblock/solana-cli-program-template",target:"_blank",rel:"noopener noreferrer"},wn=s("Template Program CLI Solana");function hn(Sn,vn){const e=l("CodeGroupItem"),o=l("CodeGroup"),c=l("ExternalLinkIcon");return i(),r(k,null,[g,a(o,null,{default:t(()=>[a(e,{title:"Program"},{default:t(()=>[f]),_:1}),a(e,{title:"Rust Client",active:""},{default:t(()=>[_]),_:1}),a(e,{title:"Node Client",active:""},{default:t(()=>[w]),_:1}),a(e,{title:"Python Client",active:""},{default:t(()=>[h]),_:1})]),_:1}),S,a(o,null,{default:t(()=>[a(e,{title:"TS Client",active:""},{default:t(()=>[v]),_:1}),a(e,{title:"Python Client",active:""},{default:t(()=>[T]),_:1}),a(e,{title:"Rust Client"},{default:t(()=>[z]),_:1})]),_:1}),P,A,a(o,null,{default:t(()=>[a(e,{title:"Rust Program"},{default:t(()=>[C]),_:1})]),_:1}),E,n("p",null,[x,n("a",B,[I,a(c)])]),R,a(o,null,{default:t(()=>[a(e,{title:"Rust Program"},{default:t(()=>[O]),_:1})]),_:1}),M,a(o,null,{default:t(()=>[a(e,{title:"Rust Program"},{default:t(()=>[N]),_:1})]),_:1}),K,D,U,a(o,null,{default:t(()=>[a(e,{title:"Rust"},{default:t(()=>[G]),_:1})]),_:1}),j,a(o,null,{default:t(()=>[a(e,{title:"Rust"},{default:t(()=>[F]),_:1})]),_:1}),V,L,H,a(o,null,{default:t(()=>[a(e,{title:"TS",active:""},{default:t(()=>[Y]),_:1}),a(e,{title:"Python",active:""},{default:t(()=>[q]),_:1}),a(e,{title:"Rust"},{default:t(()=>[W]),_:1})]),_:1}),X,J,Z,Q,a(o,null,{default:t(()=>[a(e,{title:"TS",active:""},{default:t(()=>[$]),_:1}),a(e,{title:"Python",active:""},{default:t(()=>[nn]),_:1}),a(e,{title:"Rust"},{default:t(()=>[sn]),_:1})]),_:1}),an,tn,en,a(o,null,{default:t(()=>[a(e,{title:"TS",active:""},{default:t(()=>[on]),_:1}),a(e,{title:"Rust"},{default:t(()=>[cn]),_:1})]),_:1}),pn,n("ul",null,[n("li",null,[n("a",ln,[un,a(c)])]),n("li",null,[n("a",rn,[kn,a(c)])]),n("li",null,[n("a",bn,[mn,a(c)])]),n("li",null,[n("a",dn,[yn,a(c)])]),n("li",null,[n("a",gn,[fn,a(c)])]),n("li",null,[n("a",_n,[wn,a(c)])])])],64)}var zn=u(y,[["render",hn]]);export{zn as default}; +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br")])],-1),pn=n("h2",{id:"resource",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#resource","aria-hidden":"true"},"#"),s(" Resource")],-1),ln={href:"https://borsh.io/",target:"_blank",rel:"noopener noreferrer"},un=s("Spesifikasi Borsh"),rn={href:"https://github.com/near/borsh-rs",target:"_blank",rel:"noopener noreferrer"},kn=s("Rust Borsh"),bn={href:"https://github.com/near/borsh-js",target:"_blank",rel:"noopener noreferrer"},mn=s("TS/JS Borsh"),dn={href:"https://github.com/near/borsh-construct-py",target:"_blank",rel:"noopener noreferrer"},yn=s("Python Borsh"),gn={href:"https://near.github.io/borsh-construct-py/",target:"_blank",rel:"noopener noreferrer"},fn=s("Dokumentasi Python Borsh"),_n={href:"https://github.com/hashblock/solana-cli-program-template",target:"_blank",rel:"noopener noreferrer"},hn=s("Template Program CLI Solana");function wn(Sn,vn){const e=l("CodeGroupItem"),o=l("CodeGroup"),c=l("ExternalLinkIcon");return r(),i(k,null,[g,a(o,null,{default:t(()=>[a(e,{title:"Program"},{default:t(()=>[f]),_:1}),a(e,{title:"Rust Client",active:""},{default:t(()=>[_]),_:1}),a(e,{title:"Node Client",active:""},{default:t(()=>[h]),_:1}),a(e,{title:"Python Client",active:""},{default:t(()=>[w]),_:1})]),_:1}),S,a(o,null,{default:t(()=>[a(e,{title:"TS Client",active:""},{default:t(()=>[v]),_:1}),a(e,{title:"Python Client",active:""},{default:t(()=>[T]),_:1}),a(e,{title:"Rust Client"},{default:t(()=>[z]),_:1})]),_:1}),P,A,a(o,null,{default:t(()=>[a(e,{title:"Rust Program"},{default:t(()=>[C]),_:1})]),_:1}),x,n("p",null,[E,n("a",B,[I,a(c)])]),R,a(o,null,{default:t(()=>[a(e,{title:"Rust Program"},{default:t(()=>[O]),_:1})]),_:1}),M,a(o,null,{default:t(()=>[a(e,{title:"Rust Program"},{default:t(()=>[N]),_:1})]),_:1}),D,U,K,a(o,null,{default:t(()=>[a(e,{title:"Rust"},{default:t(()=>[G]),_:1})]),_:1}),j,a(o,null,{default:t(()=>[a(e,{title:"Rust"},{default:t(()=>[F]),_:1})]),_:1}),V,L,H,a(o,null,{default:t(()=>[a(e,{title:"TS",active:""},{default:t(()=>[Y]),_:1}),a(e,{title:"Python",active:""},{default:t(()=>[q]),_:1}),a(e,{title:"Rust"},{default:t(()=>[W]),_:1})]),_:1}),X,J,Z,Q,a(o,null,{default:t(()=>[a(e,{title:"TS",active:""},{default:t(()=>[$]),_:1}),a(e,{title:"Python",active:""},{default:t(()=>[nn]),_:1}),a(e,{title:"Rust"},{default:t(()=>[sn]),_:1})]),_:1}),an,tn,en,a(o,null,{default:t(()=>[a(e,{title:"TS",active:""},{default:t(()=>[on]),_:1}),a(e,{title:"Rust"},{default:t(()=>[cn]),_:1})]),_:1}),pn,n("ul",null,[n("li",null,[n("a",ln,[un,a(c)])]),n("li",null,[n("a",rn,[kn,a(c)])]),n("li",null,[n("a",bn,[mn,a(c)])]),n("li",null,[n("a",dn,[yn,a(c)])]),n("li",null,[n("a",gn,[fn,a(c)])]),n("li",null,[n("a",_n,[hn,a(c)])])])],64)}var zn=u(y,[["render",wn]]);export{zn as default}; diff --git a/docs/.vuepress/dist/assets/serialization.html.e845cfb4.js b/docs/.vuepress/dist/assets/serialization.html.817640af.js similarity index 97% rename from docs/.vuepress/dist/assets/serialization.html.e845cfb4.js rename to docs/.vuepress/dist/assets/serialization.html.817640af.js index 536989373..106517a0c 100644 --- a/docs/.vuepress/dist/assets/serialization.html.e845cfb4.js +++ b/docs/.vuepress/dist/assets/serialization.html.817640af.js @@ -1 +1 @@ -const t={key:"v-2b8d2a1e",path:"/vi/guides/serialization.html",title:"Tu\u1EA7n t\u1EF1 ho\xE1 d\u1EEF li\u1EC7u",lang:"vi-VN",frontmatter:{title:"Tu\u1EA7n t\u1EF1 ho\xE1 d\u1EEF li\u1EC7u",head:[["meta",{name:"title",content:"To\xE0n t\u1EADp Solana | Tu\u1EA7n t\u1EF1 ho\xE1 d\u1EEF li\u1EC7u"}],["meta",{name:"og:title",content:"To\xE0n t\u1EADp Solana | Tu\u1EA7n t\u1EF1 ho\xE1 d\u1EEF li\u1EC7u"}],["meta",{name:"description",content:"T\xECm hi\u1EC3u v\u1EC1 tu\u1EA7n t\u1EF1 ho\xE1 v\xE0 phi tu\u1EA7n t\u1EF1 ho\xE1 tr\xEAn Solana"}],["meta",{name:"og:description",content:"T\xECm hi\u1EC3u v\u1EC1 tu\u1EA7n t\u1EF1 ho\xE1 v\xE0 phi tu\u1EA7n t\u1EF1 ho\xE1 tr\xEAn Solana"}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"C\xE0i \u0111\u1EB7t Tu\u1EA7n t\u1EF1 ho\xE1 Borsh",slug:"cai-\u0111at-tuan-tu-hoa-borsh",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 tu\u1EA7n t\u1EF1 ho\xE1 d\u1EEF li\u1EC7u c\u1EE7a c\xE1c ch\u1EC9 th\u1ECB t\u1EEB ph\xEDa ng\u01B0\u1EDDi d\xF9ng",slug:"lam-the-nao-\u0111e-tuan-tu-hoa-du-lieu-cua-cac-chi-thi-tu-phia-nguoi-dung",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 phi tu\u1EA7n t\u1EF1 ho\xE1 d\u1EEF li\u1EC7u c\u1EE7a c\xE1c ch\u1EC9 th\u1ECB tr\xEAn Program",slug:"lam-the-nao-\u0111e-phi-tuan-tu-hoa-du-lieu-cua-cac-chi-thi-tren-program",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 tu\u1EA7n t\u1EF1 ho\xE1 d\u1EEF li\u1EC7u Account tr\xEAn Program",slug:"lam-the-nao-\u0111e-tuan-tu-hoa-du-lieu-account-tren-program",children:[{level:3,title:"Pack (\u0110\xF3ng g\xF3i)",slug:"pack-\u0111ong-goi",children:[]},{level:3,title:"Tu\u1EA7n t\u1EF1 ho\xE1 v\xE0 Phi tu\u1EA7n t\u1EF1 ho\xE1",slug:"tuan-tu-hoa-va-phi-tuan-tu-hoa",children:[]},{level:3,title:"C\xE1ch d\xF9ng",slug:"cach-dung",children:[]}]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 tu\u1EA7n ho\xE1 d\u1EEF li\u1EC7u Account \u1EDF ph\xEDa ng\u01B0\u1EDDi d\xF9ng",slug:"lam-the-nao-\u0111e-tuan-hoa-du-lieu-account-o-phia-nguoi-dung",children:[]},{level:2,title:"Mapping c\u01A1 b\u1EA3n b\u1EB1ng TS/JS cho Solana",slug:"mapping-co-ban-bang-ts-js-cho-solana",children:[]},{level:2,title:"Ki\u1EC3u d\u1EEF li\u1EC7u n\xE2ng cao",slug:"kieu-du-lieu-nang-cao",children:[{level:3,title:"COption",slug:"coption",children:[]}]},{level:2,title:"C\xE1c ngu\u1ED3n t\xE0i li\u1EC7u kh\xE1c",slug:"cac-nguon-tai-lieu-khac",children:[]}],git:{updatedTime:1658783638e3},filePathRelative:"vi/guides/serialization.md"};export{t as data}; +const t={key:"v-2b8d2a1e",path:"/vi/guides/serialization.html",title:"Tu\u1EA7n t\u1EF1 ho\xE1 d\u1EEF li\u1EC7u",lang:"vi-VN",frontmatter:{title:"Tu\u1EA7n t\u1EF1 ho\xE1 d\u1EEF li\u1EC7u",head:[["meta",{name:"title",content:"To\xE0n t\u1EADp Solana | Tu\u1EA7n t\u1EF1 ho\xE1 d\u1EEF li\u1EC7u"}],["meta",{name:"og:title",content:"To\xE0n t\u1EADp Solana | Tu\u1EA7n t\u1EF1 ho\xE1 d\u1EEF li\u1EC7u"}],["meta",{name:"description",content:"T\xECm hi\u1EC3u v\u1EC1 tu\u1EA7n t\u1EF1 ho\xE1 v\xE0 phi tu\u1EA7n t\u1EF1 ho\xE1 tr\xEAn Solana"}],["meta",{name:"og:description",content:"T\xECm hi\u1EC3u v\u1EC1 tu\u1EA7n t\u1EF1 ho\xE1 v\xE0 phi tu\u1EA7n t\u1EF1 ho\xE1 tr\xEAn Solana"}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"C\xE0i \u0111\u1EB7t Tu\u1EA7n t\u1EF1 ho\xE1 Borsh",slug:"cai-\u0111at-tuan-tu-hoa-borsh",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 tu\u1EA7n t\u1EF1 ho\xE1 d\u1EEF li\u1EC7u c\u1EE7a c\xE1c ch\u1EC9 th\u1ECB t\u1EEB ph\xEDa ng\u01B0\u1EDDi d\xF9ng",slug:"lam-the-nao-\u0111e-tuan-tu-hoa-du-lieu-cua-cac-chi-thi-tu-phia-nguoi-dung",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 phi tu\u1EA7n t\u1EF1 ho\xE1 d\u1EEF li\u1EC7u c\u1EE7a c\xE1c ch\u1EC9 th\u1ECB tr\xEAn Program",slug:"lam-the-nao-\u0111e-phi-tuan-tu-hoa-du-lieu-cua-cac-chi-thi-tren-program",children:[]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 tu\u1EA7n t\u1EF1 ho\xE1 d\u1EEF li\u1EC7u Account tr\xEAn Program",slug:"lam-the-nao-\u0111e-tuan-tu-hoa-du-lieu-account-tren-program",children:[{level:3,title:"Pack (\u0110\xF3ng g\xF3i)",slug:"pack-\u0111ong-goi",children:[]},{level:3,title:"Tu\u1EA7n t\u1EF1 ho\xE1 v\xE0 Phi tu\u1EA7n t\u1EF1 ho\xE1",slug:"tuan-tu-hoa-va-phi-tuan-tu-hoa",children:[]},{level:3,title:"C\xE1ch d\xF9ng",slug:"cach-dung",children:[]}]},{level:2,title:"L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 tu\u1EA7n ho\xE1 d\u1EEF li\u1EC7u Account \u1EDF ph\xEDa ng\u01B0\u1EDDi d\xF9ng",slug:"lam-the-nao-\u0111e-tuan-hoa-du-lieu-account-o-phia-nguoi-dung",children:[]},{level:2,title:"Mapping c\u01A1 b\u1EA3n b\u1EB1ng TS/JS cho Solana",slug:"mapping-co-ban-bang-ts-js-cho-solana",children:[]},{level:2,title:"Ki\u1EC3u d\u1EEF li\u1EC7u n\xE2ng cao",slug:"kieu-du-lieu-nang-cao",children:[{level:3,title:"COption",slug:"coption",children:[]}]},{level:2,title:"C\xE1c ngu\u1ED3n t\xE0i li\u1EC7u kh\xE1c",slug:"cac-nguon-tai-lieu-khac",children:[]}],git:{updatedTime:1677551527e3},filePathRelative:"vi/guides/serialization.md"};export{t as data}; diff --git a/docs/.vuepress/dist/assets/serialization.html.036935e3.js b/docs/.vuepress/dist/assets/serialization.html.af19876b.js similarity index 97% rename from docs/.vuepress/dist/assets/serialization.html.036935e3.js rename to docs/.vuepress/dist/assets/serialization.html.af19876b.js index afbc016f5..d65d0b988 100644 --- a/docs/.vuepress/dist/assets/serialization.html.036935e3.js +++ b/docs/.vuepress/dist/assets/serialization.html.af19876b.js @@ -1,4 +1,4 @@ -import{_ as u,r as l,o as r,c as i,b as a,w as t,a as n,F as k,e as p,d as s}from"./app.cfdf84e7.js";var b="/assets/ser1.ceec0bad.png",m="/assets/ser2.38d4ca5b.png",d="/assets/ser3.7cdd43c8.png";const y={},h=p('

    Tu\u1EA7n t\u1EF1 ho\xE1 d\u1EEF li\u1EC7u

    Khi n\xF3i \u0111\u1EBFn tu\u1EA7n t\u1EF1 ho\xE1 ngh\u0129a l\xE0 t\xE1c gi\u1EA3 \u0111ang mu\u1ED1n \u0111\u1EC1 c\u1EADp \u0111\u1EBFn c\u1EA3 tu\u1EA7n t\u1EF1 v\xE0 phi tu\u1EA7n t\u1EF1 ho\xE1 d\u1EEF li\u1EC7u.

    Tu\u1EA7n t\u1EF1 ho\xE1 tham gia v\xE0o m\u1ED9t v\xE0i \u0111i\u1EC3m trong v\xF2ng \u0111\u1EDDi c\u1EE7a Solana Program v\xE0 Program Account:

    1. Tu\u1EA7n t\u1EF1 ho\xE1 d\u1EEF li\u1EC7u c\xE2u ch\u1EC9 th\u1ECB \u0111\u01B0\u1EE3c g\u1EEDi t\u1EEB ng\u01B0\u1EDDi d\xF9ng
    2. Phi tu\u1EA7n t\u1EF1 ho\xE1 d\u1EEF li\u1EC7u ch\u1EC9 th\u1ECB trong Program
    3. Tu\u1EA7n t\u1EF1 ho\xE1 d\u1EEF li\u1EC7u Account trong Program
    4. Phi tu\u1EA7n t\u1EF1 ho\xE1 d\u1EEF li\u1EC7u Account \u1EDF ph\xEDa ng\u01B0\u1EDDi d\xF9ng

    M\u1ED9t \u0111i\u1EC1u quan tr\u1ECDng l\xE0 t\u1EA5t c\u1EA3 c\xE1c qu\xE1 tr\xECnh b\xEAn tr\xEAn \u0111\u1EC1u \u0111\u01B0\u1EE3c h\u1ED7 tr\u1EE3 b\u1EDFi duy nh\u1EA5t m\u1ED9t ph\u01B0\u01A1ng ph\xE1p tu\u1EA7n t\u1EF1 ho\xE1. M\u1ED9t v\xE0i \u0111o\u1EA1n code m\u1EABu trong b\xE0i s\u1EBD s\u1EED d\u1EE5ng Borsh \u0111\u1EC3 l\xE0m v\xED d\u1EE5.

    Ph\u1EA7n c\xF2n l\u1EA1i s\u1EBD \u0111\u01B0\u1EE3c tr\xEDch d\u1EABn h\u1EA7u h\u1EBFt t\u1EEB Solana CLI Program Template.

    C\xE0i \u0111\u1EB7t Tu\u1EA7n t\u1EF1 ho\xE1 Borsh

    Nh\u1EEFng th\u01B0 vi\u1EC7n l\u1EADp tr\xECnh cho Borsh ph\u1EA3i \u0111\u01B0\u1EE3c c\xE0i \u0111\u1EB7t t\u01B0\u01A1ng th\xEDch v\u1EDBi ch\u01B0\u01A1ng tr\xECnh Rust, Node, v\xE0/ho\u1EB7c Python.

    ',8),g=n("div",{class:"language-toml ext-toml line-numbers-mode"},[n("pre",{class:"language-toml"},[n("code",null,[n("span",{class:"token punctuation"},"["),n("span",{class:"token table class-name"},"package"),n("span",{class:"token punctuation"},"]"),s(` +import{_ as u,r as l,o as r,c as i,b as a,w as t,a as n,F as k,e as p,d as s}from"./app.2fbb9e96.js";var b="/assets/ser1.ceec0bad.png",m="/assets/ser2.38d4ca5b.png",d="/assets/ser3.7cdd43c8.png";const y={},h=p('

    Tu\u1EA7n t\u1EF1 ho\xE1 d\u1EEF li\u1EC7u

    Khi n\xF3i \u0111\u1EBFn tu\u1EA7n t\u1EF1 ho\xE1 ngh\u0129a l\xE0 t\xE1c gi\u1EA3 \u0111ang mu\u1ED1n \u0111\u1EC1 c\u1EADp \u0111\u1EBFn c\u1EA3 tu\u1EA7n t\u1EF1 v\xE0 phi tu\u1EA7n t\u1EF1 ho\xE1 d\u1EEF li\u1EC7u.

    Tu\u1EA7n t\u1EF1 ho\xE1 tham gia v\xE0o m\u1ED9t v\xE0i \u0111i\u1EC3m trong v\xF2ng \u0111\u1EDDi c\u1EE7a Solana Program v\xE0 Program Account:

    1. Tu\u1EA7n t\u1EF1 ho\xE1 d\u1EEF li\u1EC7u c\xE2u ch\u1EC9 th\u1ECB \u0111\u01B0\u1EE3c g\u1EEDi t\u1EEB ng\u01B0\u1EDDi d\xF9ng
    2. Phi tu\u1EA7n t\u1EF1 ho\xE1 d\u1EEF li\u1EC7u ch\u1EC9 th\u1ECB trong Program
    3. Tu\u1EA7n t\u1EF1 ho\xE1 d\u1EEF li\u1EC7u Account trong Program
    4. Phi tu\u1EA7n t\u1EF1 ho\xE1 d\u1EEF li\u1EC7u Account \u1EDF ph\xEDa ng\u01B0\u1EDDi d\xF9ng

    M\u1ED9t \u0111i\u1EC1u quan tr\u1ECDng l\xE0 t\u1EA5t c\u1EA3 c\xE1c qu\xE1 tr\xECnh b\xEAn tr\xEAn \u0111\u1EC1u \u0111\u01B0\u1EE3c h\u1ED7 tr\u1EE3 b\u1EDFi duy nh\u1EA5t m\u1ED9t ph\u01B0\u01A1ng ph\xE1p tu\u1EA7n t\u1EF1 ho\xE1. M\u1ED9t v\xE0i \u0111o\u1EA1n code m\u1EABu trong b\xE0i s\u1EBD s\u1EED d\u1EE5ng Borsh \u0111\u1EC3 l\xE0m v\xED d\u1EE5.

    Ph\u1EA7n c\xF2n l\u1EA1i s\u1EBD \u0111\u01B0\u1EE3c tr\xEDch d\u1EABn h\u1EA7u h\u1EBFt t\u1EEB Solana CLI Program Template.

    C\xE0i \u0111\u1EB7t Tu\u1EA7n t\u1EF1 ho\xE1 Borsh

    Nh\u1EEFng th\u01B0 vi\u1EC7n l\u1EADp tr\xECnh cho Borsh ph\u1EA3i \u0111\u01B0\u1EE3c c\xE0i \u0111\u1EB7t t\u01B0\u01A1ng th\xEDch v\u1EDBi ch\u01B0\u01A1ng tr\xECnh Rust, Node, v\xE0/ho\u1EB7c Python.

    ',8),g=n("div",{class:"language-toml ext-toml line-numbers-mode"},[n("pre",{class:"language-toml"},[n("code",null,[n("span",{class:"token punctuation"},"["),n("span",{class:"token table class-name"},"package"),n("span",{class:"token punctuation"},"]"),s(` `),n("span",{class:"token key property"},"name"),s(),n("span",{class:"token punctuation"},"="),s(),n("span",{class:"token string"},'"solana-cli-template-program-bpf"'),s(` `),n("span",{class:"token key property"},"version"),s(),n("span",{class:"token punctuation"},"="),s(),n("span",{class:"token string"},'"0.1.0"'),s(` `),n("span",{class:"token key property"},"edition"),s(),n("span",{class:"token punctuation"},"="),s(),n("span",{class:"token string"},'"2018"'),s(` @@ -224,10 +224,11 @@ solana==0.20.0 `),n("span",{class:"token punctuation"},"}"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br"),n("span",{class:"line-number"},"69"),n("br"),n("span",{class:"line-number"},"70"),n("br"),n("span",{class:"line-number"},"71"),n("br"),n("span",{class:"line-number"},"72"),n("br"),n("span",{class:"line-number"},"73"),n("br"),n("span",{class:"line-number"},"74"),n("br"),n("span",{class:"line-number"},"75"),n("br"),n("span",{class:"line-number"},"76"),n("br"),n("span",{class:"line-number"},"77"),n("br"),n("span",{class:"line-number"},"78"),n("br"),n("span",{class:"line-number"},"79"),n("br"),n("span",{class:"line-number"},"80"),n("br"),n("span",{class:"line-number"},"81"),n("br"),n("span",{class:"line-number"},"82"),n("br"),n("span",{class:"line-number"},"83"),n("br"),n("span",{class:"line-number"},"84"),n("br"),n("span",{class:"line-number"},"85"),n("br"),n("span",{class:"line-number"},"86"),n("br"),n("span",{class:"line-number"},"87"),n("br"),n("span",{class:"line-number"},"88"),n("br"),n("span",{class:"line-number"},"89"),n("br"),n("span",{class:"line-number"},"90"),n("br"),n("span",{class:"line-number"},"91"),n("br"),n("span",{class:"line-number"},"92"),n("br"),n("span",{class:"line-number"},"93"),n("br"),n("span",{class:"line-number"},"94"),n("br"),n("span",{class:"line-number"},"95"),n("br"),n("span",{class:"line-number"},"96"),n("br"),n("span",{class:"line-number"},"97"),n("br"),n("span",{class:"line-number"},"98"),n("br"),n("span",{class:"line-number"},"99"),n("br"),n("span",{class:"line-number"},"100"),n("br"),n("span",{class:"line-number"},"101"),n("br"),n("span",{class:"line-number"},"102"),n("br"),n("span",{class:"line-number"},"103"),n("br"),n("span",{class:"line-number"},"104"),n("br"),n("span",{class:"line-number"},"105"),n("br"),n("span",{class:"line-number"},"106"),n("br"),n("span",{class:"line-number"},"107"),n("br"),n("span",{class:"line-number"},"108"),n("br")])],-1),T=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" borsh_construct "),n("span",{class:"token keyword"},"import"),s(" String"),n("span",{class:"token punctuation"},","),s(" CStruct"),n("span",{class:"token punctuation"},","),s(` U8 `),n("span",{class:"token keyword"},"from"),s(" enum "),n("span",{class:"token keyword"},"import"),s(` IntEnum -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("types "),n("span",{class:"token keyword"},"import"),s(` RPCResponse -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("transaction "),n("span",{class:"token keyword"},"import"),s(" Transaction"),n("span",{class:"token punctuation"},","),s(" TransactionInstruction"),n("span",{class:"token punctuation"},","),s(` AccountMeta -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("publickey "),n("span",{class:"token keyword"},"import"),s(` PublicKey -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("transaction "),n("span",{class:"token keyword"},"import"),s(` Transaction +`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("pubkey "),n("span",{class:"token keyword"},"import"),s(` Pubkey +`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("instruction "),n("span",{class:"token keyword"},"import"),s(" Instruction"),n("span",{class:"token punctuation"},","),s(` AccountMeta +`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("responses "),n("span",{class:"token keyword"},"import"),s(` SendTransactionResp `),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("api "),n("span",{class:"token keyword"},"import"),s(` Client @@ -250,12 +251,12 @@ payload_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token keyword"},"def"),s(),n("span",{class:"token function"},"mint_kv"),n("span",{class:"token punctuation"},"("),s(` client`),n("span",{class:"token punctuation"},":"),s(" Client"),n("span",{class:"token punctuation"},","),s(` - program_pk`),n("span",{class:"token punctuation"},":"),s(" PublicKey"),n("span",{class:"token punctuation"},","),s(` - account_pk`),n("span",{class:"token punctuation"},":"),s(" PublicKey"),n("span",{class:"token punctuation"},","),s(` + program_pk`),n("span",{class:"token punctuation"},":"),s(" Pubkey"),n("span",{class:"token punctuation"},","),s(` + account_pk`),n("span",{class:"token punctuation"},":"),s(" Pubkey"),n("span",{class:"token punctuation"},","),s(` wallet_kp`),n("span",{class:"token punctuation"},":"),s(" Keypair"),n("span",{class:"token punctuation"},","),s(` mint_key`),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token builtin"},"str"),n("span",{class:"token punctuation"},","),s(` mint_value`),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token builtin"},"str"),n("span",{class:"token punctuation"},","),s(` -`),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"-"),n("span",{class:"token operator"},">"),s(" RPCResponse"),n("span",{class:"token punctuation"},":"),s(` +`),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"-"),n("span",{class:"token operator"},">"),s(" SendTransactionResp"),n("span",{class:"token punctuation"},":"),s(` `),n("span",{class:"token triple-quoted-string string"},'"""Mint with a key/value pair to an account"""'),s(` `),n("span",{class:"token comment"},"# Construct the program payload for Mint invariant"),s(` payload_ser `),n("span",{class:"token operator"},"="),s(" construct_payload"),n("span",{class:"token punctuation"},"("),s("InstructionVariant"),n("span",{class:"token punctuation"},"."),s("MINT"),n("span",{class:"token punctuation"},","),s(" mint_key"),n("span",{class:"token punctuation"},","),s(" mint_value"),n("span",{class:"token punctuation"},")"),s(` @@ -271,13 +272,13 @@ payload_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token comment"},"# Construct the transaction with instructionVariant"),s(` txn `),n("span",{class:"token operator"},"="),s(" Transaction"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),s("add"),n("span",{class:"token punctuation"},"("),s(` - TransactionInstruction`),n("span",{class:"token punctuation"},"("),s(` - `),n("span",{class:"token punctuation"},"["),s("AccountMeta"),n("span",{class:"token punctuation"},"("),s("account_pk"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token boolean"},"False"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token boolean"},"True"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},","),s(" program_pk"),n("span",{class:"token punctuation"},","),s(` payload_ser + Instruction`),n("span",{class:"token punctuation"},"("),s(` + accounts`),n("span",{class:"token operator"},"="),n("span",{class:"token punctuation"},"["),s("AccountMeta"),n("span",{class:"token punctuation"},"("),s("account_pk"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token boolean"},"False"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token boolean"},"True"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},","),s(" program_id"),n("span",{class:"token operator"},"="),s("program_pk"),n("span",{class:"token punctuation"},","),s(" data"),n("span",{class:"token operator"},"="),s(`payload_ser `),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token keyword"},"return"),s(" client"),n("span",{class:"token punctuation"},"."),s("send_transaction"),n("span",{class:"token punctuation"},"("),s("txn"),n("span",{class:"token punctuation"},","),s(" wallet_kp"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"# => {'jsonrpc': '2.0', 'result': '4ZdpWNdovdVaLextWSiqEBWp67k9rNTTUaX3qviHDXWY9c98bVtaRt5sasPhYzMVXHqhex78gzNKytcBnVH5CSTZ', 'id': 2}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br")])],-1),P=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br")])],-1),P=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[s(` `),n("span",{class:"token comment"},"/// Instruction payload gets serialized"),s(` `),n("span",{class:"token attribute attr-name"},"#[derive(BorshSerialize)]"),s(` `),n("span",{class:"token keyword"},"pub"),s(),n("span",{class:"token keyword"},"struct"),s(),n("span",{class:"token type-definition class-name"},"Payload"),n("span",{class:"token operator"},"<"),n("span",{class:"token lifetime-annotation symbol"},"'a"),n("span",{class:"token operator"},">"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -328,7 +329,7 @@ payload_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"map_err"),n("span",{class:"token punctuation"},"("),n("span",{class:"token closure-params"},[n("span",{class:"token closure-punctuation punctuation"},"|"),s("err"),n("span",{class:"token closure-punctuation punctuation"},"|")]),s(),n("span",{class:"token macro property"},"format!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"error: send transaction: {}"'),n("span",{class:"token punctuation"},","),s(" err"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token class-name"},"Ok"),n("span",{class:"token punctuation"},"("),s("signature"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br")])],-1),A=n("h2",{id:"lam-the-nao-\u0111e-phi-tuan-tu-hoa-du-lieu-cua-cac-chi-thi-tren-program",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#lam-the-nao-\u0111e-phi-tuan-tu-hoa-du-lieu-cua-cac-chi-thi-tren-program","aria-hidden":"true"},"#"),s(" L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 phi tu\u1EA7n t\u1EF1 ho\xE1 d\u1EEF li\u1EC7u c\u1EE7a c\xE1c ch\u1EC9 th\u1ECB tr\xEAn Program")],-1),C=n("img",{src:m,alt:"Deserialize Instruction Data"},null,-1),x=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"//! instruction Contains the main ProgramInstruction enum"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br")])],-1),A=n("h2",{id:"lam-the-nao-\u0111e-phi-tuan-tu-hoa-du-lieu-cua-cac-chi-thi-tren-program",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#lam-the-nao-\u0111e-phi-tuan-tu-hoa-du-lieu-cua-cac-chi-thi-tren-program","aria-hidden":"true"},"#"),s(" L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 phi tu\u1EA7n t\u1EF1 ho\xE1 d\u1EEF li\u1EC7u c\u1EE7a c\xE1c ch\u1EC9 th\u1ECB tr\xEAn Program")],-1),x=n("img",{src:m,alt:"Deserialize Instruction Data"},null,-1),z=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"//! instruction Contains the main ProgramInstruction enum"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"crate"),n("span",{class:"token module-declaration namespace"},[n("span",{class:"token punctuation"},"::"),s("error"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"SampleError"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token namespace"},[s("borsh"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"BorshDeserialize"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token namespace"},[s("solana_program"),n("span",{class:"token punctuation"},"::"),s("program_error"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"ProgramError"),n("span",{class:"token punctuation"},","),s(` @@ -377,7 +378,7 @@ payload_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br")])],-1),z=p('

    L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 tu\u1EA7n t\u1EF1 ho\xE1 d\u1EEF li\u1EC7u Account tr\xEAn Program

    Account Data Serialization

    M\u1ED9t kh\u1ED1i d\u1EEF li\u1EC7u Account c\u1EE7a Program (t\u1EEB repo m\u1EABu) \u0111\u01B0\u1EE3c s\u1EAFp x\u1EBFp nh\u01B0 sau:

    Byte 0Bytes 1-4Bytes c\xF2n l\u1EA1i (l\xEAn \u0111\u1EBFn 1019)
    C\u1EDD kh\u1EDFi t\u1EA1o\u0110\u1ED9 d\xE0i c\u1EE7a BTreeMap \u0111\xE3 \u0111\u01B0\u1EE3c tu\u1EA7n t\u1EF1 ho\xE1BTreeMap (n\u01A1i l\u01B0u tr\u1EEF c\xE1c c\u1EB7p key-value)

    Pack (\u0110\xF3ng g\xF3i)

    ',5),E=s("T\u1EEB "),B={href:"https://github.com/solana-labs/solana/blob/22a18a68e3ee68ae013d647e62e12128433d7230/sdk/program/src/program_pack.rs",target:"_blank",rel:"noopener noreferrer"},I=s("Pack"),R=s(" \u1EDF \u0111\xE2y c\xF3 ngh\u0129a l\xE0 m\u1ED9t Trait (\u0110\u1EB7c \u0111i\u1EC3m) trong Rust."),O=p("

    Pack gi\xFAp qu\xE1 tr\xECnh tu\u1EA7n t\u1EF1 v\xE0 phi tu\u1EA7n ho\xE1 \u1EA9n \u0111i nh\u1EEFng chi ti\u1EBFt ph\u1EE9c t\u1EA1p b\xEAn d\u01B0\u1EDBi, \u0111\u1ED3ng th\u1EDDi cung c\u1EA5p t\xEDnh d\u1EC5 \u0111\u1ECDc cho qu\xE1 tr\xECnh x\u1EED l\xFD c\xE1c ch\u1EC9 th\u1ECB trong Program. Thay v\xEC \u0111\u1EB7t t\u1EA5t c\u1EA3 c\xE1c \u0111o\u1EA1n m\xE3 tu\u1EA7n t\u1EF1 v\xE0 phi tu\u1EA7n t\u1EF1 ho\xE1 tr\u1EF1c ti\u1EBFp trong qu\xE1 tr\xECnh x\u1EED l\xFD c\u1EE7a Program, ch\xFAng n\xEAn \u0111\u01B0\u1EE3c tr\u1EEBu t\u01B0\u1EE3ng ho\xE1 v\xE0 \u0111\xF3ng g\xF3i l\u1EA1i th\xE0nh nh\u1EEFng h\xE0m ch\u1EE9c n\u0103ng (3):

    1. unpack_unchecked - Cho ph\xE9p b\u1EA1n phi tu\u1EA7n t\u1EF1 ho\xE1 d\u1EEF li\u1EC7u Account m\xE0 kh\xF4ng quan t\u1EA5m Account \u0111\xE3 kh\u1EDFi t\u1EA1o hay ch\u1EE9a. N\xF3 kh\xE1 h\u1EEFu \xEDch khi b\u1EA1n c\u1EA7n x\u1EED l\xFD h\xE0m Initialization (ch\u1EC9 m\u1EE5c 0).
    2. unpack - G\u1ECDi unpack_from_slice trong hi\u1EC7n th\u1EF1c Pack c\u1EE7a b\u1EA1n v\xE0 ki\u1EC3m tra xem Account \u0111\xE3 \u0111\u01B0\u1EE3c kh\u1EDFi t\u1EA1o hay ch\u01B0a.
    3. pack - G\u1ECDi pack_into_slice trong hi\u1EC7n th\u1EF1c Pack c\u1EE7a b\u1EA1n.

    D\u01B0\u1EDBi \u0111\xE2y l\xE0 m\u1ED9t hi\u1EC7n th\u1EF1c Pack cho ch\u01B0\u01A1ng t\xECnh m\u1EABu c\u1EE7a ch\xFAng ta. Theo sau \u0111\xF3 l\xE0 \u0111o\u1EA1n code m\u1EABu x\u1EED l\xFD d\u1EEF li\u1EC7u Account th\u1EF1c b\u1EB1ng Borsh.

    ",3),M=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"//! @brief account_state manages account data"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br")])],-1),C=p('

    L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 tu\u1EA7n t\u1EF1 ho\xE1 d\u1EEF li\u1EC7u Account tr\xEAn Program

    Account Data Serialization

    M\u1ED9t kh\u1ED1i d\u1EEF li\u1EC7u Account c\u1EE7a Program (t\u1EEB repo m\u1EABu) \u0111\u01B0\u1EE3c s\u1EAFp x\u1EBFp nh\u01B0 sau:

    Byte 0Bytes 1-4Bytes c\xF2n l\u1EA1i (l\xEAn \u0111\u1EBFn 1019)
    C\u1EDD kh\u1EDFi t\u1EA1o\u0110\u1ED9 d\xE0i c\u1EE7a BTreeMap \u0111\xE3 \u0111\u01B0\u1EE3c tu\u1EA7n t\u1EF1 ho\xE1BTreeMap (n\u01A1i l\u01B0u tr\u1EEF c\xE1c c\u1EB7p key-value)

    Pack (\u0110\xF3ng g\xF3i)

    ',5),E=s("T\u1EEB "),B={href:"https://github.com/solana-labs/solana/blob/22a18a68e3ee68ae013d647e62e12128433d7230/sdk/program/src/program_pack.rs",target:"_blank",rel:"noopener noreferrer"},I=s("Pack"),R=s(" \u1EDF \u0111\xE2y c\xF3 ngh\u0129a l\xE0 m\u1ED9t Trait (\u0110\u1EB7c \u0111i\u1EC3m) trong Rust."),O=p("

    Pack gi\xFAp qu\xE1 tr\xECnh tu\u1EA7n t\u1EF1 v\xE0 phi tu\u1EA7n ho\xE1 \u1EA9n \u0111i nh\u1EEFng chi ti\u1EBFt ph\u1EE9c t\u1EA1p b\xEAn d\u01B0\u1EDBi, \u0111\u1ED3ng th\u1EDDi cung c\u1EA5p t\xEDnh d\u1EC5 \u0111\u1ECDc cho qu\xE1 tr\xECnh x\u1EED l\xFD c\xE1c ch\u1EC9 th\u1ECB trong Program. Thay v\xEC \u0111\u1EB7t t\u1EA5t c\u1EA3 c\xE1c \u0111o\u1EA1n m\xE3 tu\u1EA7n t\u1EF1 v\xE0 phi tu\u1EA7n t\u1EF1 ho\xE1 tr\u1EF1c ti\u1EBFp trong qu\xE1 tr\xECnh x\u1EED l\xFD c\u1EE7a Program, ch\xFAng n\xEAn \u0111\u01B0\u1EE3c tr\u1EEBu t\u01B0\u1EE3ng ho\xE1 v\xE0 \u0111\xF3ng g\xF3i l\u1EA1i th\xE0nh nh\u1EEFng h\xE0m ch\u1EE9c n\u0103ng (3):

    1. unpack_unchecked - Cho ph\xE9p b\u1EA1n phi tu\u1EA7n t\u1EF1 ho\xE1 d\u1EEF li\u1EC7u Account m\xE0 kh\xF4ng quan t\u1EA5m Account \u0111\xE3 kh\u1EDFi t\u1EA1o hay ch\u1EE9a. N\xF3 kh\xE1 h\u1EEFu \xEDch khi b\u1EA1n c\u1EA7n x\u1EED l\xFD h\xE0m Initialization (ch\u1EC9 m\u1EE5c 0).
    2. unpack - G\u1ECDi unpack_from_slice trong hi\u1EC7n th\u1EF1c Pack c\u1EE7a b\u1EA1n v\xE0 ki\u1EC3m tra xem Account \u0111\xE3 \u0111\u01B0\u1EE3c kh\u1EDFi t\u1EA1o hay ch\u01B0a.
    3. pack - G\u1ECDi pack_into_slice trong hi\u1EC7n th\u1EF1c Pack c\u1EE7a b\u1EA1n.

    D\u01B0\u1EDBi \u0111\xE2y l\xE0 m\u1ED9t hi\u1EC7n th\u1EF1c Pack cho ch\u01B0\u01A1ng t\xECnh m\u1EABu c\u1EE7a ch\xFAng ta. Theo sau \u0111\xF3 l\xE0 \u0111o\u1EA1n code m\u1EABu x\u1EED l\xFD d\u1EEF li\u1EC7u Account th\u1EF1c b\u1EB1ng Borsh.

    ",3),M=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"//! @brief account_state manages account data"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token keyword"},"crate"),n("span",{class:"token module-declaration namespace"},[n("span",{class:"token punctuation"},"::"),s("error"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"SampleError"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("sol_template_shared"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token constant"},"ACCOUNT_STATE_SPACE"),n("span",{class:"token punctuation"},";"),s(` @@ -448,7 +449,7 @@ payload_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br"),n("span",{class:"line-number"},"69"),n("br"),n("span",{class:"line-number"},"70"),n("br"),n("span",{class:"line-number"},"71"),n("br")])],-1),N=p('

    Tu\u1EA7n t\u1EF1 ho\xE1 v\xE0 Phi tu\u1EA7n t\u1EF1 ho\xE1

    \u0110\u1EC3 ho\xE0n th\xE0nh c\xE1c h\xE0m tu\u1EA7n t\u1EF1 v\xE0 phi tu\u1EA7n t\u1EF1 ho\xE1 c\u01A1 s\u1EDF:

    1. sol_template_shared::pack_into_slice - \u0110i\u1EC3m th\u1EF1c s\u1EF1 di\u1EC5n ra qu\xE1 tr\xECnh tu\u1EA7n t\u1EF1 ho\xE1
    2. sol_template_shared::unpack_from_slice - \u0110i\u1EC3m th\u1EF1c s\u1EF1 di\u1EC5n ra qu\xE1 tr\xECnh phi tu\u1EA7n t\u1EF1 ho\xE1

    L\u01B0u \xFD r\u1EB1ng trong code m\u1EABu b\xEAn d\u01B0\u1EDBi, ch\xFAng ta c\xF3 m\u1ED9t v\xF9ng nh\u1EDB 4 bytes cho u32 d\xE0nh cho BTREE_LENGTH ngay tr\u01B0\u1EDBc BTREE_STORAGE. Vi\u1EC7c n\xE0y gi\xFAp Borsh, trong qu\xE1 tr\xECnh phi tu\u1EA7n t\u1EF1 ho\xE1, c\xF3 th\u1EC3 ki\u1EC3m tra \u0111\u1ED9 l\u1EDBn c\u1EE7a v\xF9ng nh\u1EDB m\xE0 n\xF3 c\u1EA7n ph\u1EA3i tr\xEDch xu\u1EA5t \u0111\u1EC3 x\u1EED l\xFD, c\u0169ng nh\u01B0 t\xE1i t\u1EA1o l\u1EA1i \u0111\u1ED1i t\u01B0\u1EE3ng \u0111\xE3 \u0111\u01B0\u1EE3c tu\u1EA7n t\u1EF1 ho\xE1 tr\u01B0\u1EDBc \u0111\xE2y. Ph\u01B0\u01A1ng ph\xE1p n\xE0y \u0111\u01B0\u1EE3c minh ho\u1EA1 b\xEAn d\u01B0\u1EDBi khi m\xE0 BTREE_LENGTH \u0111\u01B0\u1EE3c \u0111\u1ECDc tr\u01B0\u1EDBc ti\xEAn nh\u1EAFm l\u1EA5y \u0111\u01B0\u1EE3c k\xEDch th\u01B0\u1EDBc c\u1EE7a slice ra kh\u1ECFi con tr\u1ECF BTREE_STROAGE.

    ',4),K=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token punctuation"},"{"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br"),n("span",{class:"line-number"},"69"),n("br"),n("span",{class:"line-number"},"70"),n("br"),n("span",{class:"line-number"},"71"),n("br")])],-1),N=p('

    Tu\u1EA7n t\u1EF1 ho\xE1 v\xE0 Phi tu\u1EA7n t\u1EF1 ho\xE1

    \u0110\u1EC3 ho\xE0n th\xE0nh c\xE1c h\xE0m tu\u1EA7n t\u1EF1 v\xE0 phi tu\u1EA7n t\u1EF1 ho\xE1 c\u01A1 s\u1EDF:

    1. sol_template_shared::pack_into_slice - \u0110i\u1EC3m th\u1EF1c s\u1EF1 di\u1EC5n ra qu\xE1 tr\xECnh tu\u1EA7n t\u1EF1 ho\xE1
    2. sol_template_shared::unpack_from_slice - \u0110i\u1EC3m th\u1EF1c s\u1EF1 di\u1EC5n ra qu\xE1 tr\xECnh phi tu\u1EA7n t\u1EF1 ho\xE1

    L\u01B0u \xFD r\u1EB1ng trong code m\u1EABu b\xEAn d\u01B0\u1EDBi, ch\xFAng ta c\xF3 m\u1ED9t v\xF9ng nh\u1EDB 4 bytes cho u32 d\xE0nh cho BTREE_LENGTH ngay tr\u01B0\u1EDBc BTREE_STORAGE. Vi\u1EC7c n\xE0y gi\xFAp Borsh, trong qu\xE1 tr\xECnh phi tu\u1EA7n t\u1EF1 ho\xE1, c\xF3 th\u1EC3 ki\u1EC3m tra \u0111\u1ED9 l\u1EDBn c\u1EE7a v\xF9ng nh\u1EDB m\xE0 n\xF3 c\u1EA7n ph\u1EA3i tr\xEDch xu\u1EA5t \u0111\u1EC3 x\u1EED l\xFD, c\u0169ng nh\u01B0 t\xE1i t\u1EA1o l\u1EA1i \u0111\u1ED1i t\u01B0\u1EE3ng \u0111\xE3 \u0111\u01B0\u1EE3c tu\u1EA7n t\u1EF1 ho\xE1 tr\u01B0\u1EDBc \u0111\xE2y. Ph\u01B0\u01A1ng ph\xE1p n\xE0y \u0111\u01B0\u1EE3c minh ho\u1EA1 b\xEAn d\u01B0\u1EDBi khi m\xE0 BTREE_LENGTH \u0111\u01B0\u1EE3c \u0111\u1ECDc tr\u01B0\u1EDBc ti\xEAn nh\u1EB1m l\u1EA5y \u0111\u01B0\u1EE3c k\xEDch th\u01B0\u1EDBc c\u1EE7a slice ra kh\u1ECFi con tr\u1ECF BTREE_STROAGE.

    ',4),U=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token namespace"},[s("arrayref"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token operator"},"*"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token namespace"},[s("borsh"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"BorshDeserialize"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"BorshSerialize"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token namespace"},[s("solana_program"),n("span",{class:"token punctuation"},"::"),s("program_memory"),n("span",{class:"token punctuation"},"::")]),s("sol_memcpy"),n("span",{class:"token punctuation"},","),s(` @@ -516,7 +517,7 @@ payload_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token class-name"},"Ok"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"("),s("is_initialized"),n("span",{class:"token punctuation"},","),s(" data_dser"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br")])],-1),U=n("h3",{id:"cach-dung",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#cach-dung","aria-hidden":"true"},"#"),s(" C\xE1ch d\xF9ng")],-1),G=n("p",null,[s("Sau \u0111\xE2y, ch\xFAng ta s\u1EBD t\u1ED5ng h\u1EE3p l\u1EA1i t\u1EA5t c\u1EA3 c\xE1c \u0111o\u1EA1n code m\u1EABu b\xEAn tr\xEAn v\xE0 gi\u1EA3i th\xEDch c\xE1ch m\xE0 Program t\u01B0\u01A1ng t\xE1c v\u1EDBi "),n("code",null,"ProgramAccountState"),s(". Trong \u0111\xF3, "),n("code",null,"ProgramAccountState"),s(" l\xE0 \u0111\xF3ng g\xF3i c\u1EE7a tr\u1EA1ng th\xE1i kh\u1EDFi t\u1EA1o c\u1EE7a Account c\u0169ng nh\u01B0 "),n("code",null,"BTreeMap"),s(" cho c\xE1c c\u1EB7p key-value.")],-1),D=n("p",null,"\u0110\u1EA7u ti\xEAn, \u0111\u1EC3 kh\u1EDFi t\u1EA1o m\u1ED9t Account m\u1EDBi ho\xE0n to\xE0n:",-1),F=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"/// Initialize a new program account, which is the first in AccountInfo array"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br")])],-1),K=n("h3",{id:"cach-dung",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#cach-dung","aria-hidden":"true"},"#"),s(" C\xE1ch d\xF9ng")],-1),G=n("p",null,[s("Sau \u0111\xE2y, ch\xFAng ta s\u1EBD t\u1ED5ng h\u1EE3p l\u1EA1i t\u1EA5t c\u1EA3 c\xE1c \u0111o\u1EA1n code m\u1EABu b\xEAn tr\xEAn v\xE0 gi\u1EA3i th\xEDch c\xE1ch m\xE0 Program t\u01B0\u01A1ng t\xE1c v\u1EDBi "),n("code",null,"ProgramAccountState"),s(". Trong \u0111\xF3, "),n("code",null,"ProgramAccountState"),s(" l\xE0 \u0111\xF3ng g\xF3i c\u1EE7a tr\u1EA1ng th\xE1i kh\u1EDFi t\u1EA1o c\u1EE7a Account c\u0169ng nh\u01B0 "),n("code",null,"BTreeMap"),s(" cho c\xE1c c\u1EB7p key-value.")],-1),D=n("p",null,"\u0110\u1EA7u ti\xEAn, \u0111\u1EC3 kh\u1EDFi t\u1EA1o m\u1ED9t Account m\u1EDBi ho\xE0n to\xE0n:",-1),F=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"/// Initialize a new program account, which is the first in AccountInfo array"),s(` `),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"initialize_account"),n("span",{class:"token punctuation"},"("),s("accounts"),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token operator"},"&"),n("span",{class:"token punctuation"},"["),n("span",{class:"token class-name"},"AccountInfo"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"->"),s(),n("span",{class:"token class-name"},"ProgramResult"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token macro property"},"msg!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Initialize account"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"let"),s(" account_info_iter "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token operator"},"&"),n("span",{class:"token keyword"},"mut"),s(" accounts"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"iter"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` @@ -603,10 +604,9 @@ payload_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token keyword"},"let"),s(" nameAccount "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"getAccountInfo"),n("span",{class:"token punctuation"},"("),s("account"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token string"},'"processed"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"return"),s(),n("span",{class:"token function"},"deserializeUnchecked"),n("span",{class:"token punctuation"},"("),s("dataSchema"),n("span",{class:"token punctuation"},","),s(" AccoundData"),n("span",{class:"token punctuation"},","),s(" nameAccount"),n("span",{class:"token punctuation"},"."),s("data"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br")])],-1),W=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(` base64 -`),n("span",{class:"token keyword"},"from"),s(" borsh_construct "),n("span",{class:"token keyword"},"import"),s(" CStruct"),n("span",{class:"token punctuation"},","),s(" U8"),n("span",{class:"token punctuation"},","),s(" U32"),n("span",{class:"token punctuation"},","),s(" HashMap"),n("span",{class:"token punctuation"},","),s(` String +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br")])],-1),W=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" borsh_construct "),n("span",{class:"token keyword"},"import"),s(" CStruct"),n("span",{class:"token punctuation"},","),s(" U8"),n("span",{class:"token punctuation"},","),s(" U32"),n("span",{class:"token punctuation"},","),s(" HashMap"),n("span",{class:"token punctuation"},","),s(` String `),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("commitment "),n("span",{class:"token keyword"},"import"),s(` Confirmed -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("publickey "),n("span",{class:"token keyword"},"import"),s(` PublicKey +`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("pubkey "),n("span",{class:"token keyword"},"import"),s(` Pubkey `),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("api "),n("span",{class:"token keyword"},"import"),s(` Client @@ -618,14 +618,10 @@ account_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"def"),s(),n("span",{class:"token function"},"get_account_info"),n("span",{class:"token punctuation"},"("),s("client"),n("span",{class:"token punctuation"},":"),s(" Client"),n("span",{class:"token punctuation"},","),s(" account_pk"),n("span",{class:"token punctuation"},":"),s(" PublicKey"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},":"),s(` +`),n("span",{class:"token keyword"},"def"),s(),n("span",{class:"token function"},"get_account_info"),n("span",{class:"token punctuation"},"("),s("client"),n("span",{class:"token punctuation"},":"),s(" Client"),n("span",{class:"token punctuation"},","),s(" account_pk"),n("span",{class:"token punctuation"},":"),s(" Pubkey"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},":"),s(` `),n("span",{class:"token triple-quoted-string string"},'"""Fetch account information from RPC, parse out the data and deserialize"""'),s(` res `),n("span",{class:"token operator"},"="),s(" client"),n("span",{class:"token punctuation"},"."),s("get_account_info"),n("span",{class:"token punctuation"},"("),s("account_pk"),n("span",{class:"token punctuation"},","),s(" Confirmed"),n("span",{class:"token punctuation"},","),s(" encoding"),n("span",{class:"token operator"},"="),n("span",{class:"token string"},"'base64'"),n("span",{class:"token punctuation"},")"),s(` - data `),n("span",{class:"token operator"},"="),s(" res"),n("span",{class:"token punctuation"},"["),n("span",{class:"token string"},"'result'"),n("span",{class:"token punctuation"},"]"),s(` - `),n("span",{class:"token keyword"},"if"),s(),n("span",{class:"token builtin"},"isinstance"),n("span",{class:"token punctuation"},"("),s("data"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token builtin"},"dict"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},":"),s(` - `),n("span",{class:"token keyword"},"return"),s(" account_schema"),n("span",{class:"token punctuation"},"."),s("parse"),n("span",{class:"token punctuation"},"("),s("base64"),n("span",{class:"token punctuation"},"."),s("urlsafe_b64decode"),n("span",{class:"token punctuation"},"("),s("data"),n("span",{class:"token punctuation"},"["),n("span",{class:"token string"},"'value'"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},"["),n("span",{class:"token string"},"'data'"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},"["),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` - `),n("span",{class:"token keyword"},"else"),n("span",{class:"token punctuation"},":"),s(` - `),n("span",{class:"token keyword"},"raise"),s(" AttributeError"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string-interpolation"},[n("span",{class:"token string"},"f'Unknown RPC result "),n("span",{class:"token interpolation"},[n("span",{class:"token punctuation"},"{"),s("data"),n("span",{class:"token punctuation"},"}")]),n("span",{class:"token string"},"'")]),n("span",{class:"token punctuation"},")"),s(` + `),n("span",{class:"token keyword"},"return"),s(" account_schema"),n("span",{class:"token punctuation"},"."),s("parse"),n("span",{class:"token punctuation"},"("),s("res"),n("span",{class:"token punctuation"},"."),s("value"),n("span",{class:"token punctuation"},"."),s("data"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"# Results in or similar"),s(` `),n("span",{class:"token comment"},"# => Container:"),s(` @@ -633,7 +629,7 @@ account_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token comment"},"# => map_length = 109"),s(` `),n("span",{class:"token comment"},"# => map = {'Happy': 'New Year!', 'newKey': 'A new value',"),s(` `),n("span",{class:"token comment"},"# => 'python key': 'python value', 'ts key': 'ts first value'}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br")])],-1),X=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token punctuation"},"{"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br")])],-1),X=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token namespace"},[s("arrayref"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token operator"},"*"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token namespace"},[s("borsh"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"BorshDeserialize"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"BorshSerialize"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token namespace"},[s("std"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token namespace"},[s("collections"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"BTreeMap"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token namespace"},[s("error"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"Error"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},","),s(` @@ -737,8 +733,7 @@ account_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token function"},"entry"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br"),n("span",{class:"line-number"},"69"),n("br"),n("span",{class:"line-number"},"70"),n("br"),n("span",{class:"line-number"},"71"),n("br")])],-1),Q=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(` base64 -`),n("span",{class:"token keyword"},"from"),s(" borsh_construct "),n("span",{class:"token keyword"},"import"),s(" U8"),n("span",{class:"token punctuation"},","),s(" U16"),n("span",{class:"token punctuation"},","),s(" U32"),n("span",{class:"token punctuation"},","),s(" String"),n("span",{class:"token punctuation"},","),s(` HashMap +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br"),n("span",{class:"line-number"},"69"),n("br"),n("span",{class:"line-number"},"70"),n("br"),n("span",{class:"line-number"},"71"),n("br")])],-1),Q=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" borsh_construct "),n("span",{class:"token keyword"},"import"),s(" U8"),n("span",{class:"token punctuation"},","),s(" U16"),n("span",{class:"token punctuation"},","),s(" U32"),n("span",{class:"token punctuation"},","),s(" String"),n("span",{class:"token punctuation"},","),s(` HashMap `),n("span",{class:"token comment"},"# Schema to deserialize various types"),s(` primitive_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span",{class:"token punctuation"},"("),s(` @@ -782,7 +777,7 @@ primitive_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span `),n("span",{class:"token comment"},"# => 4"),s(` `),n("span",{class:"token comment"},"# => 5"),s(` `),n("span",{class:"token comment"},"# => MAP_STRING_STRING = {'cookbook': 'recipe', 'recipe': 'ingredient'}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br")])],-1),$=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br")])],-1),$=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token attribute attr-name"},"#[cfg(test)]"),s(` `),n("span",{class:"token keyword"},"mod"),s(),n("span",{class:"token module-declaration namespace"},"tests"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -811,7 +806,7 @@ primitive_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span `),n("span",{class:"token macro property"},"println!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"{:?}"'),n("span",{class:"token punctuation"},","),s(" x"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br")])],-1),nn=n("h2",{id:"kieu-du-lieu-nang-cao",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#kieu-du-lieu-nang-cao","aria-hidden":"true"},"#"),s(" Ki\u1EC3u d\u1EEF li\u1EC7u n\xE2ng cao")],-1),sn=n("p",null,"Ch\xFAng ta \u0111\xE3 \u0111i qua n\u1ED9i dung c\u01A1 b\u1EA3n \u1EDF c\xE1c v\xED d\u1EE5 tr\u01B0\u1EDBc. Nh\u01B0ng ngo\xE0i ra, Solana c\xF2n c\xF3 m\u1ED9t v\xE0i ki\u1EC3u d\u1EF1 li\u1EC7u t\u1EF1 \u0111\u1ECBnh ngh\u0129a kh\xE1c. Trong ph\u1EA7n n\xE0y, ch\xFAng ta t\xECm hi\u1EC3u qua c\xE1c x\u1EED l\xFD ch\xFAng b\u1EB1ng TS/JS v\xE0 Rust.",-1),an=n("h3",{id:"coption",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#coption","aria-hidden":"true"},"#"),s(" COption")],-1),tn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token hashbang comment"},"#!/usr/bin/env node"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br")])],-1),nn=n("h2",{id:"kieu-du-lieu-nang-cao",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#kieu-du-lieu-nang-cao","aria-hidden":"true"},"#"),s(" Ki\u1EC3u d\u1EEF li\u1EC7u n\xE2ng cao")],-1),sn=n("p",null,"Ch\xFAng ta \u0111\xE3 \u0111i qua n\u1ED9i dung c\u01A1 b\u1EA3n \u1EDF c\xE1c v\xED d\u1EE5 tr\u01B0\u1EDBc. Nh\u01B0ng ngo\xE0i ra, Solana c\xF2n c\xF3 m\u1ED9t v\xE0i ki\u1EC3u d\u1EEF li\u1EC7u t\u1EF1 \u0111\u1ECBnh ngh\u0129a kh\xE1c. Trong ph\u1EA7n n\xE0y, ch\xFAng ta t\xECm hi\u1EC3u qua c\xE1c x\u1EED l\xFD ch\xFAng b\u1EB1ng TS/JS v\xE0 Rust.",-1),an=n("h3",{id:"coption",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#coption","aria-hidden":"true"},"#"),s(" COption")],-1),tn=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token hashbang comment"},"#!/usr/bin/env node"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" serialize"),n("span",{class:"token punctuation"},","),s(" deserialize"),n("span",{class:"token punctuation"},","),s(" deserializeUnchecked "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"borsh"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Buffer "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"buffer"'),n("span",{class:"token punctuation"},";"),s(` @@ -991,4 +986,4 @@ primitive_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span `),n("span",{class:"token macro property"},"println!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Some = {:?} Pubkey = {:?}"'),n("span",{class:"token punctuation"},","),s(" toption"),n("span",{class:"token number"},".0"),n("span",{class:"token punctuation"},","),s(" pkey"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br")])],-1),on=n("h2",{id:"cac-nguon-tai-lieu-khac",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#cac-nguon-tai-lieu-khac","aria-hidden":"true"},"#"),s(),n("a",{name:"resources"}),s(" C\xE1c ngu\u1ED3n t\xE0i li\u1EC7u kh\xE1c")],-1),cn={href:"https://borsh.io/",target:"_blank",rel:"noopener noreferrer"},pn=s("Borsh Specification"),ln={href:"https://github.com/near/borsh-rs",target:"_blank",rel:"noopener noreferrer"},un=s("Rust Borsh"),rn={href:"https://github.com/near/borsh-js",target:"_blank",rel:"noopener noreferrer"},kn=s("TS/JS Borsh"),bn={href:"https://github.com/near/borsh-construct-py",target:"_blank",rel:"noopener noreferrer"},mn=s("Python Borsh"),dn={href:"https://near.github.io/borsh-construct-py/",target:"_blank",rel:"noopener noreferrer"},yn=s("Python Borsh Documentation"),hn={href:"https://github.com/hashblock/solana-cli-program-template",target:"_blank",rel:"noopener noreferrer"},gn=s("Solana CLI Program Template2");function fn(_n,wn){const e=l("CodeGroupItem"),o=l("CodeGroup"),c=l("ExternalLinkIcon");return r(),i(k,null,[h,a(o,null,{default:t(()=>[a(e,{title:"Program"},{default:t(()=>[g]),_:1}),a(e,{title:"Rust Client",active:""},{default:t(()=>[f]),_:1}),a(e,{title:"Node Client",active:""},{default:t(()=>[_]),_:1}),a(e,{title:"Python Client",active:""},{default:t(()=>[w]),_:1})]),_:1}),S,a(o,null,{default:t(()=>[a(e,{title:"TS Client",active:""},{default:t(()=>[v]),_:1}),a(e,{title:"Python Client",active:""},{default:t(()=>[T]),_:1}),a(e,{title:"Rust Client"},{default:t(()=>[P]),_:1})]),_:1}),A,C,a(o,null,{default:t(()=>[a(e,{title:"Rust Program"},{default:t(()=>[x]),_:1})]),_:1}),z,n("p",null,[E,n("a",B,[I,a(c)]),R]),O,a(o,null,{default:t(()=>[a(e,{title:"Rust Program"},{default:t(()=>[M]),_:1})]),_:1}),N,a(o,null,{default:t(()=>[a(e,{title:"Rust Program"},{default:t(()=>[K]),_:1})]),_:1}),U,G,D,a(o,null,{default:t(()=>[a(e,{title:"Rust"},{default:t(()=>[F]),_:1})]),_:1}),L,a(o,null,{default:t(()=>[a(e,{title:"Rust"},{default:t(()=>[V]),_:1})]),_:1}),q,j,H,a(o,null,{default:t(()=>[a(e,{title:"TS",active:""},{default:t(()=>[Y]),_:1}),a(e,{title:"Python",active:""},{default:t(()=>[W]),_:1}),a(e,{title:"Rust"},{default:t(()=>[X]),_:1})]),_:1}),Z,a(o,null,{default:t(()=>[a(e,{title:"TS",active:""},{default:t(()=>[J]),_:1}),a(e,{title:"Python",active:""},{default:t(()=>[Q]),_:1}),a(e,{title:"Rust"},{default:t(()=>[$]),_:1})]),_:1}),nn,sn,an,a(o,null,{default:t(()=>[a(e,{title:"TS",active:""},{default:t(()=>[tn]),_:1}),a(e,{title:"Rust"},{default:t(()=>[en]),_:1})]),_:1}),on,n("ul",null,[n("li",null,[n("a",cn,[pn,a(c)])]),n("li",null,[n("a",ln,[un,a(c)])]),n("li",null,[n("a",rn,[kn,a(c)])]),n("li",null,[n("a",bn,[mn,a(c)])]),n("li",null,[n("a",dn,[yn,a(c)])]),n("li",null,[n("a",hn,[gn,a(c)])])])],64)}var vn=u(y,[["render",fn]]);export{vn as default}; +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br")])],-1),on=n("h2",{id:"cac-nguon-tai-lieu-khac",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#cac-nguon-tai-lieu-khac","aria-hidden":"true"},"#"),s(),n("a",{name:"resources"}),s(" C\xE1c ngu\u1ED3n t\xE0i li\u1EC7u kh\xE1c")],-1),cn={href:"https://borsh.io/",target:"_blank",rel:"noopener noreferrer"},pn=s("Borsh Specification"),ln={href:"https://github.com/near/borsh-rs",target:"_blank",rel:"noopener noreferrer"},un=s("Rust Borsh"),rn={href:"https://github.com/near/borsh-js",target:"_blank",rel:"noopener noreferrer"},kn=s("TS/JS Borsh"),bn={href:"https://github.com/near/borsh-construct-py",target:"_blank",rel:"noopener noreferrer"},mn=s("Python Borsh"),dn={href:"https://near.github.io/borsh-construct-py/",target:"_blank",rel:"noopener noreferrer"},yn=s("Python Borsh Documentation"),hn={href:"https://github.com/hashblock/solana-cli-program-template",target:"_blank",rel:"noopener noreferrer"},gn=s("Solana CLI Program Template2");function fn(_n,wn){const e=l("CodeGroupItem"),o=l("CodeGroup"),c=l("ExternalLinkIcon");return r(),i(k,null,[h,a(o,null,{default:t(()=>[a(e,{title:"Program"},{default:t(()=>[g]),_:1}),a(e,{title:"Rust Client",active:""},{default:t(()=>[f]),_:1}),a(e,{title:"Node Client",active:""},{default:t(()=>[_]),_:1}),a(e,{title:"Python Client",active:""},{default:t(()=>[w]),_:1})]),_:1}),S,a(o,null,{default:t(()=>[a(e,{title:"TS Client",active:""},{default:t(()=>[v]),_:1}),a(e,{title:"Python Client",active:""},{default:t(()=>[T]),_:1}),a(e,{title:"Rust Client"},{default:t(()=>[P]),_:1})]),_:1}),A,x,a(o,null,{default:t(()=>[a(e,{title:"Rust Program"},{default:t(()=>[z]),_:1})]),_:1}),C,n("p",null,[E,n("a",B,[I,a(c)]),R]),O,a(o,null,{default:t(()=>[a(e,{title:"Rust Program"},{default:t(()=>[M]),_:1})]),_:1}),N,a(o,null,{default:t(()=>[a(e,{title:"Rust Program"},{default:t(()=>[U]),_:1})]),_:1}),K,G,D,a(o,null,{default:t(()=>[a(e,{title:"Rust"},{default:t(()=>[F]),_:1})]),_:1}),L,a(o,null,{default:t(()=>[a(e,{title:"Rust"},{default:t(()=>[V]),_:1})]),_:1}),q,j,H,a(o,null,{default:t(()=>[a(e,{title:"TS",active:""},{default:t(()=>[Y]),_:1}),a(e,{title:"Python",active:""},{default:t(()=>[W]),_:1}),a(e,{title:"Rust"},{default:t(()=>[X]),_:1})]),_:1}),Z,a(o,null,{default:t(()=>[a(e,{title:"TS",active:""},{default:t(()=>[J]),_:1}),a(e,{title:"Python",active:""},{default:t(()=>[Q]),_:1}),a(e,{title:"Rust"},{default:t(()=>[$]),_:1})]),_:1}),nn,sn,an,a(o,null,{default:t(()=>[a(e,{title:"TS",active:""},{default:t(()=>[tn]),_:1}),a(e,{title:"Rust"},{default:t(()=>[en]),_:1})]),_:1}),on,n("ul",null,[n("li",null,[n("a",cn,[pn,a(c)])]),n("li",null,[n("a",ln,[un,a(c)])]),n("li",null,[n("a",rn,[kn,a(c)])]),n("li",null,[n("a",bn,[mn,a(c)])]),n("li",null,[n("a",dn,[yn,a(c)])]),n("li",null,[n("a",hn,[gn,a(c)])])])],64)}var vn=u(y,[["render",fn]]);export{vn as default}; diff --git a/docs/.vuepress/dist/assets/serialization.html.0dcb6ac4.js b/docs/.vuepress/dist/assets/serialization.html.b37aa233.js similarity index 97% rename from docs/.vuepress/dist/assets/serialization.html.0dcb6ac4.js rename to docs/.vuepress/dist/assets/serialization.html.b37aa233.js index 3edbe29c1..068dc7714 100644 --- a/docs/.vuepress/dist/assets/serialization.html.0dcb6ac4.js +++ b/docs/.vuepress/dist/assets/serialization.html.b37aa233.js @@ -1,4 +1,4 @@ -import{_ as u,r as l,o as r,c as i,b as a,w as t,a as n,F as k,e as p,d as s}from"./app.cfdf84e7.js";var b="/assets/ser1.ceec0bad.png",m="/assets/ser2.38d4ca5b.png",d="/assets/ser3.7cdd43c8.png";const y={},g=p('

    Serializing Data

    \u0E40\u0E27\u0E25\u0E32\u0E17\u0E35\u0E48\u0E40\u0E23\u0E32\u0E08\u0E30\u0E17\u0E33 serialization \u0E40\u0E23\u0E32\u0E08\u0E30\u0E2B\u0E21\u0E32\u0E22\u0E16\u0E36\u0E07\u0E17\u0E31\u0E49\u0E07\u0E01\u0E32\u0E23 serialize data \u0E41\u0E25\u0E30\u0E01\u0E32\u0E23 deserialize data.

    Serialization \u0E40\u0E02\u0E49\u0E32\u0E21\u0E32\u0E21\u0E35\u0E2A\u0E48\u0E27\u0E19\u0E17\u0E31\u0E49\u0E07\u0E43\u0E19 Solana program \u0E41\u0E25\u0E30\u0E43\u0E19 program accounts:

    1. Serializing instruction data \u0E17\u0E35\u0E48 client
    2. Deserializing instruction data \u0E43\u0E19 program
    3. Serializing Account data \u0E43\u0E19 program
    4. Deserializing Account Data \u0E17\u0E35\u0E48 client

    \u0E01\u0E32\u0E23 serialization \u0E43\u0E19\u0E41\u0E15\u0E48\u0E25\u0E30\u0E17\u0E35\u0E48\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E17\u0E33\u0E44\u0E14\u0E49\u0E40\u0E2B\u0E21\u0E37\u0E2D\u0E19\u0E46 \u0E01\u0E31\u0E19 \u0E42\u0E14\u0E22 code \u0E2A\u0E31\u0E49\u0E19\u0E46 (snippets) \u0E08\u0E30\u0E41\u0E2A\u0E14\u0E07\u0E43\u0E2B\u0E49\u0E40\u0E2B\u0E47\u0E19\u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E02\u0E2D\u0E07\u0E01\u0E32\u0E23 serialization \u0E42\u0E14\u0E22\u0E43\u0E0A\u0E49 Borsh.

    \u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E43\u0E19 document \u0E19\u0E33\u0E21\u0E32\u0E08\u0E32\u0E01 Solana CLI Program Template

    \u0E01\u0E32\u0E23\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A Borsh Serialization

    Libraries \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A Borsh \u0E17\u0E35\u0E48\u0E15\u0E49\u0E2D\u0E07\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A Rust program, Rust client, Node and/or Python client.

    ',8),f=n("div",{class:"language-toml ext-toml line-numbers-mode"},[n("pre",{class:"language-toml"},[n("code",null,[n("span",{class:"token punctuation"},"["),n("span",{class:"token table class-name"},"package"),n("span",{class:"token punctuation"},"]"),s(` +import{_ as u,r as l,o as r,c as i,b as a,w as t,a as n,F as k,e as p,d as s}from"./app.2fbb9e96.js";var b="/assets/ser1.ceec0bad.png",m="/assets/ser2.38d4ca5b.png",d="/assets/ser3.7cdd43c8.png";const y={},g=p('

    Serializing Data

    \u0E40\u0E27\u0E25\u0E32\u0E17\u0E35\u0E48\u0E40\u0E23\u0E32\u0E08\u0E30\u0E17\u0E33 serialization \u0E40\u0E23\u0E32\u0E08\u0E30\u0E2B\u0E21\u0E32\u0E22\u0E16\u0E36\u0E07\u0E17\u0E31\u0E49\u0E07\u0E01\u0E32\u0E23 serialize data \u0E41\u0E25\u0E30\u0E01\u0E32\u0E23 deserialize data.

    Serialization \u0E40\u0E02\u0E49\u0E32\u0E21\u0E32\u0E21\u0E35\u0E2A\u0E48\u0E27\u0E19\u0E17\u0E31\u0E49\u0E07\u0E43\u0E19 Solana program \u0E41\u0E25\u0E30\u0E43\u0E19 program accounts:

    1. Serializing instruction data \u0E17\u0E35\u0E48 client
    2. Deserializing instruction data \u0E43\u0E19 program
    3. Serializing Account data \u0E43\u0E19 program
    4. Deserializing Account Data \u0E17\u0E35\u0E48 client

    \u0E01\u0E32\u0E23 serialization \u0E43\u0E19\u0E41\u0E15\u0E48\u0E25\u0E30\u0E17\u0E35\u0E48\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E17\u0E33\u0E44\u0E14\u0E49\u0E40\u0E2B\u0E21\u0E37\u0E2D\u0E19\u0E46 \u0E01\u0E31\u0E19 \u0E42\u0E14\u0E22 code \u0E2A\u0E31\u0E49\u0E19\u0E46 (snippets) \u0E08\u0E30\u0E41\u0E2A\u0E14\u0E07\u0E43\u0E2B\u0E49\u0E40\u0E2B\u0E47\u0E19\u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E02\u0E2D\u0E07\u0E01\u0E32\u0E23 serialization \u0E42\u0E14\u0E22\u0E43\u0E0A\u0E49 Borsh.

    \u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E43\u0E19 document \u0E19\u0E33\u0E21\u0E32\u0E08\u0E32\u0E01 Solana CLI Program Template

    \u0E01\u0E32\u0E23\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A Borsh Serialization

    Libraries \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A Borsh \u0E17\u0E35\u0E48\u0E15\u0E49\u0E2D\u0E07\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A Rust program, Rust client, Node and/or Python client.

    ',8),f=n("div",{class:"language-toml ext-toml line-numbers-mode"},[n("pre",{class:"language-toml"},[n("code",null,[n("span",{class:"token punctuation"},"["),n("span",{class:"token table class-name"},"package"),n("span",{class:"token punctuation"},"]"),s(` `),n("span",{class:"token key property"},"name"),s(),n("span",{class:"token punctuation"},"="),s(),n("span",{class:"token string"},'"solana-cli-template-program-bpf"'),s(` `),n("span",{class:"token key property"},"version"),s(),n("span",{class:"token punctuation"},"="),s(),n("span",{class:"token string"},'"0.1.0"'),s(` `),n("span",{class:"token key property"},"edition"),s(),n("span",{class:"token punctuation"},"="),s(),n("span",{class:"token string"},'"2018"'),s(` @@ -224,10 +224,11 @@ solana==0.20.0 `),n("span",{class:"token punctuation"},"}"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br"),n("span",{class:"line-number"},"69"),n("br"),n("span",{class:"line-number"},"70"),n("br"),n("span",{class:"line-number"},"71"),n("br"),n("span",{class:"line-number"},"72"),n("br"),n("span",{class:"line-number"},"73"),n("br"),n("span",{class:"line-number"},"74"),n("br"),n("span",{class:"line-number"},"75"),n("br"),n("span",{class:"line-number"},"76"),n("br"),n("span",{class:"line-number"},"77"),n("br"),n("span",{class:"line-number"},"78"),n("br"),n("span",{class:"line-number"},"79"),n("br"),n("span",{class:"line-number"},"80"),n("br"),n("span",{class:"line-number"},"81"),n("br"),n("span",{class:"line-number"},"82"),n("br"),n("span",{class:"line-number"},"83"),n("br"),n("span",{class:"line-number"},"84"),n("br"),n("span",{class:"line-number"},"85"),n("br"),n("span",{class:"line-number"},"86"),n("br"),n("span",{class:"line-number"},"87"),n("br"),n("span",{class:"line-number"},"88"),n("br"),n("span",{class:"line-number"},"89"),n("br"),n("span",{class:"line-number"},"90"),n("br"),n("span",{class:"line-number"},"91"),n("br"),n("span",{class:"line-number"},"92"),n("br"),n("span",{class:"line-number"},"93"),n("br"),n("span",{class:"line-number"},"94"),n("br"),n("span",{class:"line-number"},"95"),n("br"),n("span",{class:"line-number"},"96"),n("br"),n("span",{class:"line-number"},"97"),n("br"),n("span",{class:"line-number"},"98"),n("br"),n("span",{class:"line-number"},"99"),n("br"),n("span",{class:"line-number"},"100"),n("br"),n("span",{class:"line-number"},"101"),n("br"),n("span",{class:"line-number"},"102"),n("br"),n("span",{class:"line-number"},"103"),n("br"),n("span",{class:"line-number"},"104"),n("br"),n("span",{class:"line-number"},"105"),n("br"),n("span",{class:"line-number"},"106"),n("br"),n("span",{class:"line-number"},"107"),n("br"),n("span",{class:"line-number"},"108"),n("br")])],-1),v=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" borsh_construct "),n("span",{class:"token keyword"},"import"),s(" String"),n("span",{class:"token punctuation"},","),s(" CStruct"),n("span",{class:"token punctuation"},","),s(` U8 `),n("span",{class:"token keyword"},"from"),s(" enum "),n("span",{class:"token keyword"},"import"),s(` IntEnum -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("types "),n("span",{class:"token keyword"},"import"),s(` RPCResponse -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("transaction "),n("span",{class:"token keyword"},"import"),s(" Transaction"),n("span",{class:"token punctuation"},","),s(" TransactionInstruction"),n("span",{class:"token punctuation"},","),s(` AccountMeta -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("publickey "),n("span",{class:"token keyword"},"import"),s(` PublicKey -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("transaction "),n("span",{class:"token keyword"},"import"),s(` Transaction +`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("pubkey "),n("span",{class:"token keyword"},"import"),s(` Pubkey +`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("instruction "),n("span",{class:"token keyword"},"import"),s(" Instruction"),n("span",{class:"token punctuation"},","),s(` AccountMeta +`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("responses "),n("span",{class:"token keyword"},"import"),s(` SendTransactionResp `),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("api "),n("span",{class:"token keyword"},"import"),s(` Client @@ -250,12 +251,12 @@ payload_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token keyword"},"def"),s(),n("span",{class:"token function"},"mint_kv"),n("span",{class:"token punctuation"},"("),s(` client`),n("span",{class:"token punctuation"},":"),s(" Client"),n("span",{class:"token punctuation"},","),s(` - program_pk`),n("span",{class:"token punctuation"},":"),s(" PublicKey"),n("span",{class:"token punctuation"},","),s(` - account_pk`),n("span",{class:"token punctuation"},":"),s(" PublicKey"),n("span",{class:"token punctuation"},","),s(` + program_pk`),n("span",{class:"token punctuation"},":"),s(" Pubkey"),n("span",{class:"token punctuation"},","),s(` + account_pk`),n("span",{class:"token punctuation"},":"),s(" Pubkey"),n("span",{class:"token punctuation"},","),s(` wallet_kp`),n("span",{class:"token punctuation"},":"),s(" Keypair"),n("span",{class:"token punctuation"},","),s(` mint_key`),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token builtin"},"str"),n("span",{class:"token punctuation"},","),s(` mint_value`),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token builtin"},"str"),n("span",{class:"token punctuation"},","),s(` -`),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"-"),n("span",{class:"token operator"},">"),s(" RPCResponse"),n("span",{class:"token punctuation"},":"),s(` +`),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"-"),n("span",{class:"token operator"},">"),s(" SendTransactionResp"),n("span",{class:"token punctuation"},":"),s(` `),n("span",{class:"token triple-quoted-string string"},'"""Mint with a key/value pair to an account"""'),s(` `),n("span",{class:"token comment"},"# Construct the program payload for Mint invariant"),s(` payload_ser `),n("span",{class:"token operator"},"="),s(" construct_payload"),n("span",{class:"token punctuation"},"("),s("InstructionVariant"),n("span",{class:"token punctuation"},"."),s("MINT"),n("span",{class:"token punctuation"},","),s(" mint_key"),n("span",{class:"token punctuation"},","),s(" mint_value"),n("span",{class:"token punctuation"},")"),s(` @@ -271,13 +272,13 @@ payload_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token comment"},"# Construct the transaction with instructionVariant"),s(` txn `),n("span",{class:"token operator"},"="),s(" Transaction"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),s("add"),n("span",{class:"token punctuation"},"("),s(` - TransactionInstruction`),n("span",{class:"token punctuation"},"("),s(` - `),n("span",{class:"token punctuation"},"["),s("AccountMeta"),n("span",{class:"token punctuation"},"("),s("account_pk"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token boolean"},"False"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token boolean"},"True"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},","),s(" program_pk"),n("span",{class:"token punctuation"},","),s(` payload_ser + Instruction`),n("span",{class:"token punctuation"},"("),s(` + accounts`),n("span",{class:"token operator"},"="),n("span",{class:"token punctuation"},"["),s("AccountMeta"),n("span",{class:"token punctuation"},"("),s("account_pk"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token boolean"},"False"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token boolean"},"True"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},","),s(" program_id"),n("span",{class:"token operator"},"="),s("program_pk"),n("span",{class:"token punctuation"},","),s(" data"),n("span",{class:"token operator"},"="),s(`payload_ser `),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token keyword"},"return"),s(" client"),n("span",{class:"token punctuation"},"."),s("send_transaction"),n("span",{class:"token punctuation"},"("),s("txn"),n("span",{class:"token punctuation"},","),s(" wallet_kp"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"# => {'jsonrpc': '2.0', 'result': '4ZdpWNdovdVaLextWSiqEBWp67k9rNTTUaX3qviHDXWY9c98bVtaRt5sasPhYzMVXHqhex78gzNKytcBnVH5CSTZ', 'id': 2}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br")])],-1),T=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br")])],-1),T=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[s(` `),n("span",{class:"token comment"},"/// Instruction payload gets serialized"),s(` `),n("span",{class:"token attribute attr-name"},"#[derive(BorshSerialize)]"),s(` `),n("span",{class:"token keyword"},"pub"),s(),n("span",{class:"token keyword"},"struct"),s(),n("span",{class:"token type-definition class-name"},"Payload"),n("span",{class:"token operator"},"<"),n("span",{class:"token lifetime-annotation symbol"},"'a"),n("span",{class:"token operator"},">"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -328,7 +329,7 @@ payload_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"map_err"),n("span",{class:"token punctuation"},"("),n("span",{class:"token closure-params"},[n("span",{class:"token closure-punctuation punctuation"},"|"),s("err"),n("span",{class:"token closure-punctuation punctuation"},"|")]),s(),n("span",{class:"token macro property"},"format!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"error: send transaction: {}"'),n("span",{class:"token punctuation"},","),s(" err"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token class-name"},"Ok"),n("span",{class:"token punctuation"},"("),s("signature"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br")])],-1),P=n("h2",{id:"\u0E27\u0E34\u0E18\u0E35-deserialize-instruction-data-\u0E43\u0E19-program",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E27\u0E34\u0E18\u0E35-deserialize-instruction-data-\u0E43\u0E19-program","aria-hidden":"true"},"#"),s(" \u0E27\u0E34\u0E18\u0E35 deserialize instruction data \u0E43\u0E19 program")],-1),A=n("img",{src:m,alt:"Deserialize Instruction Data"},null,-1),C=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"//! instruction Contains the main ProgramInstruction enum"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br")])],-1),P=n("h2",{id:"\u0E27\u0E34\u0E18\u0E35-deserialize-instruction-data-\u0E43\u0E19-program",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E27\u0E34\u0E18\u0E35-deserialize-instruction-data-\u0E43\u0E19-program","aria-hidden":"true"},"#"),s(" \u0E27\u0E34\u0E18\u0E35 deserialize instruction data \u0E43\u0E19 program")],-1),A=n("img",{src:m,alt:"Deserialize Instruction Data"},null,-1),x=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"//! instruction Contains the main ProgramInstruction enum"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"crate"),n("span",{class:"token module-declaration namespace"},[n("span",{class:"token punctuation"},"::"),s("error"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"SampleError"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token namespace"},[s("borsh"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"BorshDeserialize"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token namespace"},[s("solana_program"),n("span",{class:"token punctuation"},"::"),s("program_error"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"ProgramError"),n("span",{class:"token punctuation"},","),s(` @@ -377,7 +378,7 @@ payload_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br")])],-1),x=p('

    \u0E27\u0E34\u0E18\u0E35 serialize account data \u0E43\u0E19 program

    Account Data Serialization

    program account data block (\u0E08\u0E32\u0E01 repo \u0E40\u0E14\u0E35\u0E22\u0E27\u0E01\u0E31\u0E19) \u0E21\u0E35\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E14\u0E31\u0E07\u0E19\u0E35\u0E49

    Byte 0Bytes 1-4\u0E40\u0E2B\u0E25\u0E37\u0E2D 1019 Bytes
    Initialized flag\u0E04\u0E27\u0E32\u0E21\u0E22\u0E32\u0E27\u0E02\u0E2D\u0E07 serialized BTreeMapBTreeMap (\u0E17\u0E35\u0E48\u0E40\u0E01\u0E47\u0E1A key value pairs)

    Pack

    ',5),E=s("\u0E40\u0E01\u0E35\u0E48\u0E22\u0E27\u0E01\u0E31\u0E1A "),B={href:"https://github.com/solana-labs/solana/blob/22a18a68e3ee68ae013d647e62e12128433d7230/sdk/program/src/program_pack.rs",target:"_blank",rel:"noopener noreferrer"},I=s("Pack"),R=s(" trait"),O=p("

    Pack trait \u0E08\u0E30\u0E0B\u0E48\u0E2D\u0E19\u0E23\u0E32\u0E22\u0E25\u0E30\u0E40\u0E2D\u0E35\u0E22\u0E14\u0E43\u0E19\u0E01\u0E32\u0E23 serialization/deserialization account data \u0E08\u0E32\u0E01\u0E01\u0E32\u0E23 process Program instruction \u0E14\u0E31\u0E07\u0E19\u0E31\u0E49\u0E19\u0E41\u0E17\u0E19\u0E17\u0E35\u0E48\u0E08\u0E30\u0E43\u0E2A\u0E48 serialize/deserialize log \u0E43\u0E19 program processing code \u0E21\u0E31\u0E19\u0E08\u0E30\u0E0B\u0E48\u0E2D\u0E19\u0E23\u0E32\u0E22\u0E25\u0E30\u0E40\u0E2D\u0E35\u0E22\u0E14\u0E2D\u0E22\u0E38\u0E48\u0E43\u0E19 (3) functions:

    1. unpack_unchecked - \u0E17\u0E33\u0E43\u0E2B\u0E49\u0E40\u0E23\u0E32 deserialize account \u0E42\u0E14\u0E22\u0E44\u0E21\u0E48\u0E15\u0E23\u0E27\u0E08\u0E27\u0E48\u0E32\u0E21\u0E31\u0E19\u0E16\u0E39\u0E01 initialized \u0E44\u0E1B\u0E23\u0E36\u0E22\u0E31\u0E07 \u0E21\u0E31\u0E19\u0E08\u0E30\u0E21\u0E35\u0E1B\u0E23\u0E30\u0E42\u0E22\u0E0A\u0E19\u0E4C\u0E15\u0E2D\u0E19\u0E17\u0E35\u0E48\u0E40\u0E23\u0E32 process Initialization function (variant index 0)
    2. unpack - \u0E40\u0E23\u0E35\u0E22\u0E01\u0E43\u0E0A\u0E49 unpack_from_slice \u0E43\u0E19 Pack \u0E41\u0E25\u0E30\u0E15\u0E23\u0E27\u0E08\u0E2A\u0E2D\u0E1A\u0E27\u0E48\u0E32 account \u0E16\u0E39\u0E01 initialized \u0E41\u0E25\u0E49\u0E27.
    3. pack - \u0E40\u0E23\u0E35\u0E22\u0E01\u0E43\u0E0A\u0E49 pack_into_slice \u0E43\u0E19 Pack

    \u0E19\u0E35\u0E48\u0E04\u0E37\u0E2D\u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07 program \u0E02\u0E2D\u0E07\u0E40\u0E23\u0E32\u0E17\u0E35\u0E48\u0E21\u0E35\u0E01\u0E32\u0E23 implementation \u0E02\u0E2D\u0E07 Pack trait \u0E41\u0E25\u0E30\u0E15\u0E48\u0E2D\u0E14\u0E49\u0E27\u0E22\u0E01\u0E32\u0E23 process account data \u0E42\u0E14\u0E22\u0E43\u0E0A\u0E49 borsh.

    ",3),N=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"//! @brief account_state manages account data"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br")])],-1),C=p('

    \u0E27\u0E34\u0E18\u0E35 serialize account data \u0E43\u0E19 program

    Account Data Serialization

    program account data block (\u0E08\u0E32\u0E01 repo \u0E40\u0E14\u0E35\u0E22\u0E27\u0E01\u0E31\u0E19) \u0E21\u0E35\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E14\u0E31\u0E07\u0E19\u0E35\u0E49

    Byte 0Bytes 1-4\u0E40\u0E2B\u0E25\u0E37\u0E2D 1019 Bytes
    Initialized flag\u0E04\u0E27\u0E32\u0E21\u0E22\u0E32\u0E27\u0E02\u0E2D\u0E07 serialized BTreeMapBTreeMap (\u0E17\u0E35\u0E48\u0E40\u0E01\u0E47\u0E1A key value pairs)

    Pack

    ',5),E=s("\u0E40\u0E01\u0E35\u0E48\u0E22\u0E27\u0E01\u0E31\u0E1A "),B={href:"https://github.com/solana-labs/solana/blob/22a18a68e3ee68ae013d647e62e12128433d7230/sdk/program/src/program_pack.rs",target:"_blank",rel:"noopener noreferrer"},I=s("Pack"),R=s(" trait"),O=p("

    Pack trait \u0E08\u0E30\u0E0B\u0E48\u0E2D\u0E19\u0E23\u0E32\u0E22\u0E25\u0E30\u0E40\u0E2D\u0E35\u0E22\u0E14\u0E43\u0E19\u0E01\u0E32\u0E23 serialization/deserialization account data \u0E08\u0E32\u0E01\u0E01\u0E32\u0E23 process Program instruction \u0E14\u0E31\u0E07\u0E19\u0E31\u0E49\u0E19\u0E41\u0E17\u0E19\u0E17\u0E35\u0E48\u0E08\u0E30\u0E43\u0E2A\u0E48 serialize/deserialize log \u0E43\u0E19 program processing code \u0E21\u0E31\u0E19\u0E08\u0E30\u0E0B\u0E48\u0E2D\u0E19\u0E23\u0E32\u0E22\u0E25\u0E30\u0E40\u0E2D\u0E35\u0E22\u0E14\u0E2D\u0E22\u0E38\u0E48\u0E43\u0E19 (3) functions:

    1. unpack_unchecked - \u0E17\u0E33\u0E43\u0E2B\u0E49\u0E40\u0E23\u0E32 deserialize account \u0E42\u0E14\u0E22\u0E44\u0E21\u0E48\u0E15\u0E23\u0E27\u0E08\u0E27\u0E48\u0E32\u0E21\u0E31\u0E19\u0E16\u0E39\u0E01 initialized \u0E44\u0E1B\u0E23\u0E36\u0E22\u0E31\u0E07 \u0E21\u0E31\u0E19\u0E08\u0E30\u0E21\u0E35\u0E1B\u0E23\u0E30\u0E42\u0E22\u0E0A\u0E19\u0E4C\u0E15\u0E2D\u0E19\u0E17\u0E35\u0E48\u0E40\u0E23\u0E32 process Initialization function (variant index 0)
    2. unpack - \u0E40\u0E23\u0E35\u0E22\u0E01\u0E43\u0E0A\u0E49 unpack_from_slice \u0E43\u0E19 Pack \u0E41\u0E25\u0E30\u0E15\u0E23\u0E27\u0E08\u0E2A\u0E2D\u0E1A\u0E27\u0E48\u0E32 account \u0E16\u0E39\u0E01 initialized \u0E41\u0E25\u0E49\u0E27.
    3. pack - \u0E40\u0E23\u0E35\u0E22\u0E01\u0E43\u0E0A\u0E49 pack_into_slice \u0E43\u0E19 Pack

    \u0E19\u0E35\u0E48\u0E04\u0E37\u0E2D\u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07 program \u0E02\u0E2D\u0E07\u0E40\u0E23\u0E32\u0E17\u0E35\u0E48\u0E21\u0E35\u0E01\u0E32\u0E23 implementation \u0E02\u0E2D\u0E07 Pack trait \u0E41\u0E25\u0E30\u0E15\u0E48\u0E2D\u0E14\u0E49\u0E27\u0E22\u0E01\u0E32\u0E23 process account data \u0E42\u0E14\u0E22\u0E43\u0E0A\u0E49 borsh.

    ",3),N=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"//! @brief account_state manages account data"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token keyword"},"crate"),n("span",{class:"token module-declaration namespace"},[n("span",{class:"token punctuation"},"::"),s("error"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"SampleError"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("sol_template_shared"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token constant"},"ACCOUNT_STATE_SPACE"),n("span",{class:"token punctuation"},";"),s(` @@ -516,7 +517,7 @@ payload_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token class-name"},"Ok"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"("),s("is_initialized"),n("span",{class:"token punctuation"},","),s(" data_dser"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br")])],-1),K=n("h3",{id:"\u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19","aria-hidden":"true"},"#"),s(" \u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19")],-1),D=n("p",null,[s("\u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E15\u0E48\u0E2D\u0E44\u0E1B\u0E40\u0E23\u0E32\u0E08\u0E30\u0E1B\u0E23\u0E30\u0E01\u0E2D\u0E1A\u0E17\u0E38\u0E01\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E40\u0E02\u0E49\u0E32\u0E14\u0E49\u0E27\u0E22\u0E01\u0E31\u0E19 \u0E41\u0E25\u0E30\u0E08\u0E30\u0E41\u0E2A\u0E14\u0E07\u0E27\u0E34\u0E18\u0E35\u0E17\u0E35\u0E48 program \u0E17\u0E33\u0E07\u0E32\u0E19\u0E23\u0E48\u0E27\u0E21\u0E01\u0E31\u0E1A "),n("code",null,"ProgramAccountState"),s(" \u0E0B\u0E36\u0E48\u0E07\u0E21\u0E35 initialization flag \u0E41\u0E25\u0E30 "),n("code",null,"BTreeMap"),s(" \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A key/value pairs \u0E40\u0E01\u0E47\u0E1A\u0E44\u0E27\u0E49\u0E2D\u0E22\u0E39\u0E48\u0E43\u0E19\u0E19\u0E31\u0E49\u0E19")],-1),G=n("p",null,"\u0E2D\u0E31\u0E19\u0E14\u0E31\u0E1A\u0E41\u0E23\u0E01 \u0E40\u0E21\u0E37\u0E48\u0E2D\u0E40\u0E23\u0E32\u0E15\u0E49\u0E2D\u0E07\u0E01\u0E32\u0E23\u0E40\u0E23\u0E34\u0E48\u0E21\u0E15\u0E49\u0E19\u0E1A\u0E31\u0E0D\u0E0A\u0E35\u0E43\u0E2B\u0E21\u0E48:",-1),F=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"/// Initialize a new program account, which is the first in AccountInfo array"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br")])],-1),D=n("h3",{id:"\u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19","aria-hidden":"true"},"#"),s(" \u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19")],-1),K=n("p",null,[s("\u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E15\u0E48\u0E2D\u0E44\u0E1B\u0E40\u0E23\u0E32\u0E08\u0E30\u0E1B\u0E23\u0E30\u0E01\u0E2D\u0E1A\u0E17\u0E38\u0E01\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E40\u0E02\u0E49\u0E32\u0E14\u0E49\u0E27\u0E22\u0E01\u0E31\u0E19 \u0E41\u0E25\u0E30\u0E08\u0E30\u0E41\u0E2A\u0E14\u0E07\u0E27\u0E34\u0E18\u0E35\u0E17\u0E35\u0E48 program \u0E17\u0E33\u0E07\u0E32\u0E19\u0E23\u0E48\u0E27\u0E21\u0E01\u0E31\u0E1A "),n("code",null,"ProgramAccountState"),s(" \u0E0B\u0E36\u0E48\u0E07\u0E21\u0E35 initialization flag \u0E41\u0E25\u0E30 "),n("code",null,"BTreeMap"),s(" \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A key/value pairs \u0E40\u0E01\u0E47\u0E1A\u0E44\u0E27\u0E49\u0E2D\u0E22\u0E39\u0E48\u0E43\u0E19\u0E19\u0E31\u0E49\u0E19")],-1),G=n("p",null,"\u0E2D\u0E31\u0E19\u0E14\u0E31\u0E1A\u0E41\u0E23\u0E01 \u0E40\u0E21\u0E37\u0E48\u0E2D\u0E40\u0E23\u0E32\u0E15\u0E49\u0E2D\u0E07\u0E01\u0E32\u0E23\u0E40\u0E23\u0E34\u0E48\u0E21\u0E15\u0E49\u0E19\u0E1A\u0E31\u0E0D\u0E0A\u0E35\u0E43\u0E2B\u0E21\u0E48:",-1),F=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"/// Initialize a new program account, which is the first in AccountInfo array"),s(` `),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"initialize_account"),n("span",{class:"token punctuation"},"("),s("accounts"),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token operator"},"&"),n("span",{class:"token punctuation"},"["),n("span",{class:"token class-name"},"AccountInfo"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"->"),s(),n("span",{class:"token class-name"},"ProgramResult"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token macro property"},"msg!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Initialize account"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"let"),s(" account_info_iter "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token operator"},"&"),n("span",{class:"token keyword"},"mut"),s(" accounts"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"iter"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` @@ -603,10 +604,9 @@ payload_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token keyword"},"let"),s(" nameAccount "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"getAccountInfo"),n("span",{class:"token punctuation"},"("),s("account"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token string"},'"processed"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"return"),s(),n("span",{class:"token function"},"deserializeUnchecked"),n("span",{class:"token punctuation"},"("),s("dataSchema"),n("span",{class:"token punctuation"},","),s(" AccoundData"),n("span",{class:"token punctuation"},","),s(" nameAccount"),n("span",{class:"token punctuation"},"."),s("data"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br")])],-1),W=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(` base64 -`),n("span",{class:"token keyword"},"from"),s(" borsh_construct "),n("span",{class:"token keyword"},"import"),s(" CStruct"),n("span",{class:"token punctuation"},","),s(" U8"),n("span",{class:"token punctuation"},","),s(" U32"),n("span",{class:"token punctuation"},","),s(" HashMap"),n("span",{class:"token punctuation"},","),s(` String +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br")])],-1),W=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" borsh_construct "),n("span",{class:"token keyword"},"import"),s(" CStruct"),n("span",{class:"token punctuation"},","),s(" U8"),n("span",{class:"token punctuation"},","),s(" U32"),n("span",{class:"token punctuation"},","),s(" HashMap"),n("span",{class:"token punctuation"},","),s(` String `),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("commitment "),n("span",{class:"token keyword"},"import"),s(` Confirmed -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("publickey "),n("span",{class:"token keyword"},"import"),s(` PublicKey +`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("pubkey "),n("span",{class:"token keyword"},"import"),s(` Pubkey `),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("api "),n("span",{class:"token keyword"},"import"),s(` Client @@ -618,14 +618,10 @@ account_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"def"),s(),n("span",{class:"token function"},"get_account_info"),n("span",{class:"token punctuation"},"("),s("client"),n("span",{class:"token punctuation"},":"),s(" Client"),n("span",{class:"token punctuation"},","),s(" account_pk"),n("span",{class:"token punctuation"},":"),s(" PublicKey"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},":"),s(` +`),n("span",{class:"token keyword"},"def"),s(),n("span",{class:"token function"},"get_account_info"),n("span",{class:"token punctuation"},"("),s("client"),n("span",{class:"token punctuation"},":"),s(" Client"),n("span",{class:"token punctuation"},","),s(" account_pk"),n("span",{class:"token punctuation"},":"),s(" Pubkey"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},":"),s(` `),n("span",{class:"token triple-quoted-string string"},'"""Fetch account information from RPC, parse out the data and deserialize"""'),s(` res `),n("span",{class:"token operator"},"="),s(" client"),n("span",{class:"token punctuation"},"."),s("get_account_info"),n("span",{class:"token punctuation"},"("),s("account_pk"),n("span",{class:"token punctuation"},","),s(" Confirmed"),n("span",{class:"token punctuation"},","),s(" encoding"),n("span",{class:"token operator"},"="),n("span",{class:"token string"},"'base64'"),n("span",{class:"token punctuation"},")"),s(` - data `),n("span",{class:"token operator"},"="),s(" res"),n("span",{class:"token punctuation"},"["),n("span",{class:"token string"},"'result'"),n("span",{class:"token punctuation"},"]"),s(` - `),n("span",{class:"token keyword"},"if"),s(),n("span",{class:"token builtin"},"isinstance"),n("span",{class:"token punctuation"},"("),s("data"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token builtin"},"dict"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},":"),s(` - `),n("span",{class:"token keyword"},"return"),s(" account_schema"),n("span",{class:"token punctuation"},"."),s("parse"),n("span",{class:"token punctuation"},"("),s("base64"),n("span",{class:"token punctuation"},"."),s("urlsafe_b64decode"),n("span",{class:"token punctuation"},"("),s("data"),n("span",{class:"token punctuation"},"["),n("span",{class:"token string"},"'value'"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},"["),n("span",{class:"token string"},"'data'"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},"["),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` - `),n("span",{class:"token keyword"},"else"),n("span",{class:"token punctuation"},":"),s(` - `),n("span",{class:"token keyword"},"raise"),s(" AttributeError"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string-interpolation"},[n("span",{class:"token string"},"f'Unknown RPC result "),n("span",{class:"token interpolation"},[n("span",{class:"token punctuation"},"{"),s("data"),n("span",{class:"token punctuation"},"}")]),n("span",{class:"token string"},"'")]),n("span",{class:"token punctuation"},")"),s(` + `),n("span",{class:"token keyword"},"return"),s(" account_schema"),n("span",{class:"token punctuation"},"."),s("parse"),n("span",{class:"token punctuation"},"("),s("res"),n("span",{class:"token punctuation"},"."),s("value"),n("span",{class:"token punctuation"},"."),s("data"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"# Results in or similar"),s(` `),n("span",{class:"token comment"},"# => Container:"),s(` @@ -633,7 +629,7 @@ account_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token comment"},"# => map_length = 109"),s(` `),n("span",{class:"token comment"},"# => map = {'Happy': 'New Year!', 'newKey': 'A new value',"),s(` `),n("span",{class:"token comment"},"# => 'python key': 'python value', 'ts key': 'ts first value'}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br")])],-1),X=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token punctuation"},"{"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br")])],-1),X=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token namespace"},[s("arrayref"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token operator"},"*"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token namespace"},[s("borsh"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"BorshDeserialize"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"BorshSerialize"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token namespace"},[s("std"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token namespace"},[s("collections"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"BTreeMap"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token namespace"},[s("error"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"Error"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},","),s(` @@ -737,8 +733,7 @@ account_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token function"},"entry"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br"),n("span",{class:"line-number"},"69"),n("br"),n("span",{class:"line-number"},"70"),n("br"),n("span",{class:"line-number"},"71"),n("br")])],-1),sn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(` base64 -`),n("span",{class:"token keyword"},"from"),s(" borsh_construct "),n("span",{class:"token keyword"},"import"),s(" U8"),n("span",{class:"token punctuation"},","),s(" U16"),n("span",{class:"token punctuation"},","),s(" U32"),n("span",{class:"token punctuation"},","),s(" String"),n("span",{class:"token punctuation"},","),s(` HashMap +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br"),n("span",{class:"line-number"},"69"),n("br"),n("span",{class:"line-number"},"70"),n("br"),n("span",{class:"line-number"},"71"),n("br")])],-1),sn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" borsh_construct "),n("span",{class:"token keyword"},"import"),s(" U8"),n("span",{class:"token punctuation"},","),s(" U16"),n("span",{class:"token punctuation"},","),s(" U32"),n("span",{class:"token punctuation"},","),s(" String"),n("span",{class:"token punctuation"},","),s(` HashMap `),n("span",{class:"token comment"},"# Schema to deserialize various types"),s(` primitive_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span",{class:"token punctuation"},"("),s(` @@ -782,7 +777,7 @@ primitive_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span `),n("span",{class:"token comment"},"# => 4"),s(` `),n("span",{class:"token comment"},"# => 5"),s(` `),n("span",{class:"token comment"},"# => MAP_STRING_STRING = {'cookbook': 'recipe', 'recipe': 'ingredient'}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br")])],-1),an=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br")])],-1),an=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token attribute attr-name"},"#[cfg(test)]"),s(` `),n("span",{class:"token keyword"},"mod"),s(),n("span",{class:"token module-declaration namespace"},"tests"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -991,4 +986,4 @@ primitive_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span `),n("span",{class:"token macro property"},"println!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Some = {:?} Pubkey = {:?}"'),n("span",{class:"token punctuation"},","),s(" toption"),n("span",{class:"token number"},".0"),n("span",{class:"token punctuation"},","),s(" pkey"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br")])],-1),ln=n("h2",{id:"resources",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#resources","aria-hidden":"true"},"#"),s(" Resources")],-1),un={href:"https://borsh.io/",target:"_blank",rel:"noopener noreferrer"},rn=s("Borsh Specification"),kn={href:"https://github.com/near/borsh-rs",target:"_blank",rel:"noopener noreferrer"},bn=s("Rust Borsh"),mn={href:"https://github.com/near/borsh-js",target:"_blank",rel:"noopener noreferrer"},dn=s("TS/JS Borsh"),yn={href:"https://github.com/near/borsh-construct-py",target:"_blank",rel:"noopener noreferrer"},gn=s("Python Borsh"),fn={href:"https://near.github.io/borsh-construct-py/",target:"_blank",rel:"noopener noreferrer"},_n=s("Python Borsh Documentation"),wn={href:"https://github.com/hashblock/solana-cli-program-template",target:"_blank",rel:"noopener noreferrer"},hn=s("Solana CLI Program Template2");function Sn(zn,vn){const e=l("CodeGroupItem"),o=l("CodeGroup"),c=l("ExternalLinkIcon");return r(),i(k,null,[g,a(o,null,{default:t(()=>[a(e,{title:"Program"},{default:t(()=>[f]),_:1}),a(e,{title:"Rust Client",active:""},{default:t(()=>[_]),_:1}),a(e,{title:"Node Client",active:""},{default:t(()=>[w]),_:1}),a(e,{title:"Python Client",active:""},{default:t(()=>[h]),_:1})]),_:1}),S,a(o,null,{default:t(()=>[a(e,{title:"TS Client",active:""},{default:t(()=>[z]),_:1}),a(e,{title:"Python Client",active:""},{default:t(()=>[v]),_:1}),a(e,{title:"Rust Client"},{default:t(()=>[T]),_:1})]),_:1}),P,A,a(o,null,{default:t(()=>[a(e,{title:"Rust Program"},{default:t(()=>[C]),_:1})]),_:1}),x,n("p",null,[E,n("a",B,[I,a(c)]),R]),O,a(o,null,{default:t(()=>[a(e,{title:"Rust Program"},{default:t(()=>[N]),_:1})]),_:1}),M,a(o,null,{default:t(()=>[a(e,{title:"Rust Program"},{default:t(()=>[U]),_:1})]),_:1}),K,D,G,a(o,null,{default:t(()=>[a(e,{title:"Rust"},{default:t(()=>[F]),_:1})]),_:1}),V,a(o,null,{default:t(()=>[a(e,{title:"Rust"},{default:t(()=>[L]),_:1})]),_:1}),j,H,Y,a(o,null,{default:t(()=>[a(e,{title:"TS",active:""},{default:t(()=>[q]),_:1}),a(e,{title:"Python",active:""},{default:t(()=>[W]),_:1}),a(e,{title:"Rust"},{default:t(()=>[X]),_:1})]),_:1}),Z,J,Q,$,a(o,null,{default:t(()=>[a(e,{title:"TS",active:""},{default:t(()=>[nn]),_:1}),a(e,{title:"Python",active:""},{default:t(()=>[sn]),_:1}),a(e,{title:"Rust"},{default:t(()=>[an]),_:1})]),_:1}),tn,en,on,a(o,null,{default:t(()=>[a(e,{title:"TS",active:""},{default:t(()=>[cn]),_:1}),a(e,{title:"Rust"},{default:t(()=>[pn]),_:1})]),_:1}),ln,n("ul",null,[n("li",null,[n("a",un,[rn,a(c)])]),n("li",null,[n("a",kn,[bn,a(c)])]),n("li",null,[n("a",mn,[dn,a(c)])]),n("li",null,[n("a",yn,[gn,a(c)])]),n("li",null,[n("a",fn,[_n,a(c)])]),n("li",null,[n("a",wn,[hn,a(c)])])])],64)}var Pn=u(y,[["render",Sn]]);export{Pn as default}; +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br")])],-1),ln=n("h2",{id:"resources",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#resources","aria-hidden":"true"},"#"),s(" Resources")],-1),un={href:"https://borsh.io/",target:"_blank",rel:"noopener noreferrer"},rn=s("Borsh Specification"),kn={href:"https://github.com/near/borsh-rs",target:"_blank",rel:"noopener noreferrer"},bn=s("Rust Borsh"),mn={href:"https://github.com/near/borsh-js",target:"_blank",rel:"noopener noreferrer"},dn=s("TS/JS Borsh"),yn={href:"https://github.com/near/borsh-construct-py",target:"_blank",rel:"noopener noreferrer"},gn=s("Python Borsh"),fn={href:"https://near.github.io/borsh-construct-py/",target:"_blank",rel:"noopener noreferrer"},_n=s("Python Borsh Documentation"),wn={href:"https://github.com/hashblock/solana-cli-program-template",target:"_blank",rel:"noopener noreferrer"},hn=s("Solana CLI Program Template2");function Sn(zn,vn){const e=l("CodeGroupItem"),o=l("CodeGroup"),c=l("ExternalLinkIcon");return r(),i(k,null,[g,a(o,null,{default:t(()=>[a(e,{title:"Program"},{default:t(()=>[f]),_:1}),a(e,{title:"Rust Client",active:""},{default:t(()=>[_]),_:1}),a(e,{title:"Node Client",active:""},{default:t(()=>[w]),_:1}),a(e,{title:"Python Client",active:""},{default:t(()=>[h]),_:1})]),_:1}),S,a(o,null,{default:t(()=>[a(e,{title:"TS Client",active:""},{default:t(()=>[z]),_:1}),a(e,{title:"Python Client",active:""},{default:t(()=>[v]),_:1}),a(e,{title:"Rust Client"},{default:t(()=>[T]),_:1})]),_:1}),P,A,a(o,null,{default:t(()=>[a(e,{title:"Rust Program"},{default:t(()=>[x]),_:1})]),_:1}),C,n("p",null,[E,n("a",B,[I,a(c)]),R]),O,a(o,null,{default:t(()=>[a(e,{title:"Rust Program"},{default:t(()=>[N]),_:1})]),_:1}),M,a(o,null,{default:t(()=>[a(e,{title:"Rust Program"},{default:t(()=>[U]),_:1})]),_:1}),D,K,G,a(o,null,{default:t(()=>[a(e,{title:"Rust"},{default:t(()=>[F]),_:1})]),_:1}),V,a(o,null,{default:t(()=>[a(e,{title:"Rust"},{default:t(()=>[L]),_:1})]),_:1}),j,H,Y,a(o,null,{default:t(()=>[a(e,{title:"TS",active:""},{default:t(()=>[q]),_:1}),a(e,{title:"Python",active:""},{default:t(()=>[W]),_:1}),a(e,{title:"Rust"},{default:t(()=>[X]),_:1})]),_:1}),Z,J,Q,$,a(o,null,{default:t(()=>[a(e,{title:"TS",active:""},{default:t(()=>[nn]),_:1}),a(e,{title:"Python",active:""},{default:t(()=>[sn]),_:1}),a(e,{title:"Rust"},{default:t(()=>[an]),_:1})]),_:1}),tn,en,on,a(o,null,{default:t(()=>[a(e,{title:"TS",active:""},{default:t(()=>[cn]),_:1}),a(e,{title:"Rust"},{default:t(()=>[pn]),_:1})]),_:1}),ln,n("ul",null,[n("li",null,[n("a",un,[rn,a(c)])]),n("li",null,[n("a",kn,[bn,a(c)])]),n("li",null,[n("a",mn,[dn,a(c)])]),n("li",null,[n("a",yn,[gn,a(c)])]),n("li",null,[n("a",fn,[_n,a(c)])]),n("li",null,[n("a",wn,[hn,a(c)])])])],64)}var Pn=u(y,[["render",Sn]]);export{Pn as default}; diff --git a/docs/.vuepress/dist/assets/serialization.html.683418b8.js b/docs/.vuepress/dist/assets/serialization.html.bc0f886a.js similarity index 97% rename from docs/.vuepress/dist/assets/serialization.html.683418b8.js rename to docs/.vuepress/dist/assets/serialization.html.bc0f886a.js index a39c882d7..848c4e69d 100644 --- a/docs/.vuepress/dist/assets/serialization.html.683418b8.js +++ b/docs/.vuepress/dist/assets/serialization.html.bc0f886a.js @@ -1,4 +1,4 @@ -import{_ as u,r as l,o as r,c as i,b as a,w as t,a as n,F as k,e as p,d as s}from"./app.cfdf84e7.js";var b="/assets/ser1.ceec0bad.png",m="/assets/ser2.38d4ca5b.png",d="/assets/ser3.7cdd43c8.png";const y={},g=p('

    Serialisieren von Daten

    Wenn wir von Serialisierung sprechen, meinen wir sowohl die Serialisierung von Daten als auch die Deserialisierung von Daten.

    Die Serialisierung kommt an einigen Stellen im Lebenszyklus des Solana-Programms und der Programmkonten ins Spiel:

    1. Serialisieren von Befehlsdaten an den Client
    2. Deserialisieren von Befehlsdaten im Programm
    3. Serialisieren von Kontodaten im Programm
    4. Kontodaten auf dem Client deserialisieren

    Es ist wichtig, dass die oben genannten Aktionen alle durch denselben Serialisierungsansatz unterst\xFCtzt werden. Das enthaltene Snippets demonstrieren die Serialisierung mit Borsh.

    Die Beispiele im Rest dieses Dokuments sind Ausz\xFCge aus der Solana CLI Program Template

    Einrichten der Borsh-Serialisierung

    Bibliotheken f\xFCr Borsh m\xFCssen f\xFCr das Rust-Programm, den Rust-Client, den Node- und/oder den Python-Client eingerichtet werden.

    ',8),f=n("div",{class:"language-toml ext-toml line-numbers-mode"},[n("pre",{class:"language-toml"},[n("code",null,[n("span",{class:"token punctuation"},"["),n("span",{class:"token table class-name"},"package"),n("span",{class:"token punctuation"},"]"),s(` +import{_ as u,r as l,o as r,c as i,b as a,w as t,a as n,F as k,e as p,d as s}from"./app.2fbb9e96.js";var b="/assets/ser1.ceec0bad.png",m="/assets/ser2.38d4ca5b.png",d="/assets/ser3.7cdd43c8.png";const y={},g=p('

    Serialisieren von Daten

    Wenn wir von Serialisierung sprechen, meinen wir sowohl die Serialisierung von Daten als auch die Deserialisierung von Daten.

    Die Serialisierung kommt an einigen Stellen im Lebenszyklus des Solana-Programms und der Programmkonten ins Spiel:

    1. Serialisieren von Befehlsdaten an den Client
    2. Deserialisieren von Befehlsdaten im Programm
    3. Serialisieren von Kontodaten im Programm
    4. Kontodaten auf dem Client deserialisieren

    Es ist wichtig, dass die oben genannten Aktionen alle durch denselben Serialisierungsansatz unterst\xFCtzt werden. Das enthaltene Snippets demonstrieren die Serialisierung mit Borsh.

    Die Beispiele im Rest dieses Dokuments sind Ausz\xFCge aus der Solana CLI Program Template

    Einrichten der Borsh-Serialisierung

    Bibliotheken f\xFCr Borsh m\xFCssen f\xFCr das Rust-Programm, den Rust-Client, den Node- und/oder den Python-Client eingerichtet werden.

    ',8),f=n("div",{class:"language-toml ext-toml line-numbers-mode"},[n("pre",{class:"language-toml"},[n("code",null,[n("span",{class:"token punctuation"},"["),n("span",{class:"token table class-name"},"package"),n("span",{class:"token punctuation"},"]"),s(` `),n("span",{class:"token key property"},"name"),s(),n("span",{class:"token punctuation"},"="),s(),n("span",{class:"token string"},'"solana-cli-template-program-bpf"'),s(` `),n("span",{class:"token key property"},"version"),s(),n("span",{class:"token punctuation"},"="),s(),n("span",{class:"token string"},'"0.1.0"'),s(` `),n("span",{class:"token key property"},"edition"),s(),n("span",{class:"token punctuation"},"="),s(),n("span",{class:"token string"},'"2018"'),s(` @@ -224,10 +224,11 @@ solana==0.20.0 `),n("span",{class:"token punctuation"},"}"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br"),n("span",{class:"line-number"},"69"),n("br"),n("span",{class:"line-number"},"70"),n("br"),n("span",{class:"line-number"},"71"),n("br"),n("span",{class:"line-number"},"72"),n("br"),n("span",{class:"line-number"},"73"),n("br"),n("span",{class:"line-number"},"74"),n("br"),n("span",{class:"line-number"},"75"),n("br"),n("span",{class:"line-number"},"76"),n("br"),n("span",{class:"line-number"},"77"),n("br"),n("span",{class:"line-number"},"78"),n("br"),n("span",{class:"line-number"},"79"),n("br"),n("span",{class:"line-number"},"80"),n("br"),n("span",{class:"line-number"},"81"),n("br"),n("span",{class:"line-number"},"82"),n("br"),n("span",{class:"line-number"},"83"),n("br"),n("span",{class:"line-number"},"84"),n("br"),n("span",{class:"line-number"},"85"),n("br"),n("span",{class:"line-number"},"86"),n("br"),n("span",{class:"line-number"},"87"),n("br"),n("span",{class:"line-number"},"88"),n("br"),n("span",{class:"line-number"},"89"),n("br"),n("span",{class:"line-number"},"90"),n("br"),n("span",{class:"line-number"},"91"),n("br"),n("span",{class:"line-number"},"92"),n("br"),n("span",{class:"line-number"},"93"),n("br"),n("span",{class:"line-number"},"94"),n("br"),n("span",{class:"line-number"},"95"),n("br"),n("span",{class:"line-number"},"96"),n("br"),n("span",{class:"line-number"},"97"),n("br"),n("span",{class:"line-number"},"98"),n("br"),n("span",{class:"line-number"},"99"),n("br"),n("span",{class:"line-number"},"100"),n("br"),n("span",{class:"line-number"},"101"),n("br"),n("span",{class:"line-number"},"102"),n("br"),n("span",{class:"line-number"},"103"),n("br"),n("span",{class:"line-number"},"104"),n("br"),n("span",{class:"line-number"},"105"),n("br"),n("span",{class:"line-number"},"106"),n("br"),n("span",{class:"line-number"},"107"),n("br"),n("span",{class:"line-number"},"108"),n("br")])],-1),z=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" borsh_construct "),n("span",{class:"token keyword"},"import"),s(" String"),n("span",{class:"token punctuation"},","),s(" CStruct"),n("span",{class:"token punctuation"},","),s(` U8 `),n("span",{class:"token keyword"},"from"),s(" enum "),n("span",{class:"token keyword"},"import"),s(` IntEnum -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("types "),n("span",{class:"token keyword"},"import"),s(` RPCResponse -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("transaction "),n("span",{class:"token keyword"},"import"),s(" Transaction"),n("span",{class:"token punctuation"},","),s(" TransactionInstruction"),n("span",{class:"token punctuation"},","),s(` AccountMeta -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("publickey "),n("span",{class:"token keyword"},"import"),s(` PublicKey -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("transaction "),n("span",{class:"token keyword"},"import"),s(` Transaction +`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("pubkey "),n("span",{class:"token keyword"},"import"),s(` Pubkey +`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("instruction "),n("span",{class:"token keyword"},"import"),s(" Instruction"),n("span",{class:"token punctuation"},","),s(` AccountMeta +`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("responses "),n("span",{class:"token keyword"},"import"),s(` SendTransactionResp `),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("api "),n("span",{class:"token keyword"},"import"),s(` Client @@ -250,12 +251,12 @@ payload_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token keyword"},"def"),s(),n("span",{class:"token function"},"mint_kv"),n("span",{class:"token punctuation"},"("),s(` client`),n("span",{class:"token punctuation"},":"),s(" Client"),n("span",{class:"token punctuation"},","),s(` - program_pk`),n("span",{class:"token punctuation"},":"),s(" PublicKey"),n("span",{class:"token punctuation"},","),s(` - account_pk`),n("span",{class:"token punctuation"},":"),s(" PublicKey"),n("span",{class:"token punctuation"},","),s(` + program_pk`),n("span",{class:"token punctuation"},":"),s(" Pubkey"),n("span",{class:"token punctuation"},","),s(` + account_pk`),n("span",{class:"token punctuation"},":"),s(" Pubkey"),n("span",{class:"token punctuation"},","),s(` wallet_kp`),n("span",{class:"token punctuation"},":"),s(" Keypair"),n("span",{class:"token punctuation"},","),s(` mint_key`),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token builtin"},"str"),n("span",{class:"token punctuation"},","),s(` mint_value`),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token builtin"},"str"),n("span",{class:"token punctuation"},","),s(` -`),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"-"),n("span",{class:"token operator"},">"),s(" RPCResponse"),n("span",{class:"token punctuation"},":"),s(` +`),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"-"),n("span",{class:"token operator"},">"),s(" SendTransactionResp"),n("span",{class:"token punctuation"},":"),s(` `),n("span",{class:"token triple-quoted-string string"},'"""Mint with a key/value pair to an account"""'),s(` `),n("span",{class:"token comment"},"# Construct the program payload for Mint invariant"),s(` payload_ser `),n("span",{class:"token operator"},"="),s(" construct_payload"),n("span",{class:"token punctuation"},"("),s("InstructionVariant"),n("span",{class:"token punctuation"},"."),s("MINT"),n("span",{class:"token punctuation"},","),s(" mint_key"),n("span",{class:"token punctuation"},","),s(" mint_value"),n("span",{class:"token punctuation"},")"),s(` @@ -271,13 +272,13 @@ payload_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token comment"},"# Construct the transaction with instructionVariant"),s(` txn `),n("span",{class:"token operator"},"="),s(" Transaction"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),s("add"),n("span",{class:"token punctuation"},"("),s(` - TransactionInstruction`),n("span",{class:"token punctuation"},"("),s(` - `),n("span",{class:"token punctuation"},"["),s("AccountMeta"),n("span",{class:"token punctuation"},"("),s("account_pk"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token boolean"},"False"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token boolean"},"True"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},","),s(" program_pk"),n("span",{class:"token punctuation"},","),s(` payload_ser + Instruction`),n("span",{class:"token punctuation"},"("),s(` + accounts`),n("span",{class:"token operator"},"="),n("span",{class:"token punctuation"},"["),s("AccountMeta"),n("span",{class:"token punctuation"},"("),s("account_pk"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token boolean"},"False"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token boolean"},"True"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},","),s(" program_id"),n("span",{class:"token operator"},"="),s("program_pk"),n("span",{class:"token punctuation"},","),s(" data"),n("span",{class:"token operator"},"="),s(`payload_ser `),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token keyword"},"return"),s(" client"),n("span",{class:"token punctuation"},"."),s("send_transaction"),n("span",{class:"token punctuation"},"("),s("txn"),n("span",{class:"token punctuation"},","),s(" wallet_kp"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"# => {'jsonrpc': '2.0', 'result': '4ZdpWNdovdVaLextWSiqEBWp67k9rNTTUaX3qviHDXWY9c98bVtaRt5sasPhYzMVXHqhex78gzNKytcBnVH5CSTZ', 'id': 2}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br")])],-1),T=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br")])],-1),T=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[s(` `),n("span",{class:"token comment"},"/// Instruction payload gets serialized"),s(` `),n("span",{class:"token attribute attr-name"},"#[derive(BorshSerialize)]"),s(` `),n("span",{class:"token keyword"},"pub"),s(),n("span",{class:"token keyword"},"struct"),s(),n("span",{class:"token type-definition class-name"},"Payload"),n("span",{class:"token operator"},"<"),n("span",{class:"token lifetime-annotation symbol"},"'a"),n("span",{class:"token operator"},">"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -328,7 +329,7 @@ payload_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"map_err"),n("span",{class:"token punctuation"},"("),n("span",{class:"token closure-params"},[n("span",{class:"token closure-punctuation punctuation"},"|"),s("err"),n("span",{class:"token closure-punctuation punctuation"},"|")]),s(),n("span",{class:"token macro property"},"format!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"error: send transaction: {}"'),n("span",{class:"token punctuation"},","),s(" err"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token class-name"},"Ok"),n("span",{class:"token punctuation"},"("),s("signature"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br")])],-1),P=n("h2",{id:"so-deserialisieren-sie-befehlsdaten-im-programm",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#so-deserialisieren-sie-befehlsdaten-im-programm","aria-hidden":"true"},"#"),s(" So deserialisieren Sie Befehlsdaten im Programm")],-1),A=n("img",{src:m,alt:"Deserialize Instruction Data"},null,-1),C=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"//! instruction Contains the main ProgramInstruction enum"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br")])],-1),P=n("h2",{id:"so-deserialisieren-sie-befehlsdaten-im-programm",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#so-deserialisieren-sie-befehlsdaten-im-programm","aria-hidden":"true"},"#"),s(" So deserialisieren Sie Befehlsdaten im Programm")],-1),A=n("img",{src:m,alt:"Deserialize Instruction Data"},null,-1),E=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"//! instruction Contains the main ProgramInstruction enum"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"crate"),n("span",{class:"token module-declaration namespace"},[n("span",{class:"token punctuation"},"::"),s("error"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"SampleError"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token namespace"},[s("borsh"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"BorshDeserialize"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token namespace"},[s("solana_program"),n("span",{class:"token punctuation"},"::"),s("program_error"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"ProgramError"),n("span",{class:"token punctuation"},","),s(` @@ -377,7 +378,7 @@ payload_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br")])],-1),E=p('

    So serialisieren Sie Kontodaten im Programm

    Account Data Serialization

    Der Datenblock des Programmkontos (aus dem Beispielrepo) ist wie folgt aufgebaut

    Byte 0Bytes 1-4Restbyte bis 1019
    Initialisiertes FlagL\xE4nge der serialisierten BTreeMapBTreeMap (wo Schl\xFCsselwertpaare gespeichert werden)

    Pack

    ',5),B=s("Ein Wort zur Eigenschaft "),x={href:"https://github.com/solana-labs/solana/blob/22a18a68e3ee68ae013d647e62e12128433d7230/sdk/program/src/program_pack.rs",target:"_blank",rel:"noopener noreferrer"},I=s("Pack"),R=s("."),O=p("

    Die Pack-Eigenschaft erleichtert das Ausblenden der Details der Kontodatenserialisierung/-deserialisierung von Ihrer Kernprogramm-Anweisungsverarbeitung. Anstatt also alles zu serialisieren/deserialisieren Melden Sie sich im Programmverarbeitungscode an, und kapselt die Details hinter (3) Funktionen:

    1. unpack_unchecked - Erm\xF6glicht Ihnen, ein Konto zu deserialisieren, ohne zu pr\xFCfen, ob es initialisiert wurde. Dies ist n\xFCtzlich, wenn Sie die Initialisierungsfunktion tats\xE4chlich bearbeiten (Variantenindex 0)
    2. unpack \u2013 Ruft Ihre Pack-Implementierung von unpack_from_slice auf und pr\xFCft, ob das Konto initialisiert wurde.
    3. pack \u2013 Ruft Ihre Pack-Implementierung von pack_into_slice auf

    Hier ist die Implementierung der Pack-Eigenschaft f\xFCr unser Beispielprogramm. Darauf folgt das eigentliche Verarbeitung der Kontodaten mit Borsh.

    ",3),D=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"//! @brief account_state manages account data"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br")])],-1),C=p('

    So serialisieren Sie Kontodaten im Programm

    Account Data Serialization

    Der Datenblock des Programmkontos (aus dem Beispielrepo) ist wie folgt aufgebaut

    Byte 0Bytes 1-4Restbyte bis 1019
    Initialisiertes FlagL\xE4nge der serialisierten BTreeMapBTreeMap (wo Schl\xFCsselwertpaare gespeichert werden)

    Pack

    ',5),B=s("Ein Wort zur Eigenschaft "),x={href:"https://github.com/solana-labs/solana/blob/22a18a68e3ee68ae013d647e62e12128433d7230/sdk/program/src/program_pack.rs",target:"_blank",rel:"noopener noreferrer"},I=s("Pack"),R=s("."),O=p("

    Die Pack-Eigenschaft erleichtert das Ausblenden der Details der Kontodatenserialisierung/-deserialisierung von Ihrer Kernprogramm-Anweisungsverarbeitung. Anstatt also alles zu serialisieren/deserialisieren Melden Sie sich im Programmverarbeitungscode an, und kapselt die Details hinter (3) Funktionen:

    1. unpack_unchecked - Erm\xF6glicht Ihnen, ein Konto zu deserialisieren, ohne zu pr\xFCfen, ob es initialisiert wurde. Dies ist n\xFCtzlich, wenn Sie die Initialisierungsfunktion tats\xE4chlich bearbeiten (Variantenindex 0)
    2. unpack \u2013 Ruft Ihre Pack-Implementierung von unpack_from_slice auf und pr\xFCft, ob das Konto initialisiert wurde.
    3. pack \u2013 Ruft Ihre Pack-Implementierung von pack_into_slice auf

    Hier ist die Implementierung der Pack-Eigenschaft f\xFCr unser Beispielprogramm. Darauf folgt das eigentliche Verarbeitung der Kontodaten mit Borsh.

    ",3),D=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"//! @brief account_state manages account data"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token keyword"},"crate"),n("span",{class:"token module-declaration namespace"},[n("span",{class:"token punctuation"},"::"),s("error"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"SampleError"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("sol_template_shared"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token constant"},"ACCOUNT_STATE_SPACE"),n("span",{class:"token punctuation"},";"),s(` @@ -448,7 +449,7 @@ payload_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br"),n("span",{class:"line-number"},"69"),n("br"),n("span",{class:"line-number"},"70"),n("br"),n("span",{class:"line-number"},"71"),n("br")])],-1),K=p('

    Serialisierung/Deserialisierung

    So schlie\xDFen Sie die zugrunde liegende Serialisierung und Deserialisierung ab:

    1. sol_template_shared::pack_into_slice \u2013 Wo die eigentliche Serialisierung stattfindet
    2. sol_template_shared::unpack_from_slice \u2013 Wo die eigentliche Deserialisierung stattfindet

    Beachten Sie, dass wir im Folgenden eine u32 (4 Bytes) Partition im Datenlayout f\xFCr BTREE_LENGTH vor BTREE_STORAGE haben. Dies liegt daran, dass Borsh w\xE4hrend der Deserialisierung \xFCberpr\xFCft, ob die L\xE4nge des Slice, das Sie deserialisieren, mit der Menge von Daten \xFCbereinstimmt , die es vor der tats\xE4chlichen Rekombination des empfangenden Objekts liest. Die Vorgehensweise unten demonstriert liest zuerst die BTREE_LENGTH, um die Gr\xF6\xDFe zu erhalten, aus der slice wird BTREE_STORAGE-Zeiger.

    ',4),M=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token punctuation"},"{"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br"),n("span",{class:"line-number"},"69"),n("br"),n("span",{class:"line-number"},"70"),n("br"),n("span",{class:"line-number"},"71"),n("br")])],-1),M=p('

    Serialisierung/Deserialisierung

    So schlie\xDFen Sie die zugrunde liegende Serialisierung und Deserialisierung ab:

    1. sol_template_shared::pack_into_slice \u2013 Wo die eigentliche Serialisierung stattfindet
    2. sol_template_shared::unpack_from_slice \u2013 Wo die eigentliche Deserialisierung stattfindet

    Beachten Sie, dass wir im Folgenden eine u32 (4 Bytes) Partition im Datenlayout f\xFCr BTREE_LENGTH vor BTREE_STORAGE haben. Dies liegt daran, dass Borsh w\xE4hrend der Deserialisierung \xFCberpr\xFCft, ob die L\xE4nge des Slice, das Sie deserialisieren, mit der Menge von Daten \xFCbereinstimmt , die es vor der tats\xE4chlichen Rekombination des empfangenden Objekts liest. Die Vorgehensweise unten demonstriert liest zuerst die BTREE_LENGTH, um die Gr\xF6\xDFe zu erhalten, aus der slice wird BTREE_STORAGE-Zeiger.

    ',4),N=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token namespace"},[s("arrayref"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token operator"},"*"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token namespace"},[s("borsh"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"BorshDeserialize"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"BorshSerialize"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token namespace"},[s("solana_program"),n("span",{class:"token punctuation"},"::"),s("program_memory"),n("span",{class:"token punctuation"},"::")]),s("sol_memcpy"),n("span",{class:"token punctuation"},","),s(` @@ -516,7 +517,7 @@ payload_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token class-name"},"Ok"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"("),s("is_initialized"),n("span",{class:"token punctuation"},","),s(" data_dser"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br")])],-1),N=n("h3",{id:"usage",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#usage","aria-hidden":"true"},"#"),s(" Usage")],-1),U=n("p",null,[s("Das Folgende fasst alles zusammen und zeigt, wie das Programm mit dem "),n("code",null,"ProgramAccountState"),s(" interagiert die das Initialisierungsflag sowie die zugrunde liegende "),n("code",null,"BTreeMap"),s(" f\xFCr unsere Schl\xFCssel/Wert-Paare kapselt.")],-1),G=n("p",null,"Zuerst, wenn wir ein brandneues Konto initialisieren m\xF6chten:",-1),F=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"/// Initialize a new program account, which is the first in AccountInfo array"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br")])],-1),K=n("h3",{id:"usage",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#usage","aria-hidden":"true"},"#"),s(" Usage")],-1),U=n("p",null,[s("Das Folgende fasst alles zusammen und zeigt, wie das Programm mit dem "),n("code",null,"ProgramAccountState"),s(" interagiert die das Initialisierungsflag sowie die zugrunde liegende "),n("code",null,"BTreeMap"),s(" f\xFCr unsere Schl\xFCssel/Wert-Paare kapselt.")],-1),G=n("p",null,"Zuerst, wenn wir ein brandneues Konto initialisieren m\xF6chten:",-1),F=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"/// Initialize a new program account, which is the first in AccountInfo array"),s(` `),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"initialize_account"),n("span",{class:"token punctuation"},"("),s("accounts"),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token operator"},"&"),n("span",{class:"token punctuation"},"["),n("span",{class:"token class-name"},"AccountInfo"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"->"),s(),n("span",{class:"token class-name"},"ProgramResult"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token macro property"},"msg!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Initialize account"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"let"),s(" account_info_iter "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token operator"},"&"),n("span",{class:"token keyword"},"mut"),s(" accounts"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"iter"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` @@ -603,10 +604,9 @@ payload_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token keyword"},"let"),s(" nameAccount "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"getAccountInfo"),n("span",{class:"token punctuation"},"("),s("account"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token string"},'"processed"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"return"),s(),n("span",{class:"token function"},"deserializeUnchecked"),n("span",{class:"token punctuation"},"("),s("dataSchema"),n("span",{class:"token punctuation"},","),s(" AccoundData"),n("span",{class:"token punctuation"},","),s(" nameAccount"),n("span",{class:"token punctuation"},"."),s("data"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br")])],-1),Y=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(` base64 -`),n("span",{class:"token keyword"},"from"),s(" borsh_construct "),n("span",{class:"token keyword"},"import"),s(" CStruct"),n("span",{class:"token punctuation"},","),s(" U8"),n("span",{class:"token punctuation"},","),s(" U32"),n("span",{class:"token punctuation"},","),s(" HashMap"),n("span",{class:"token punctuation"},","),s(` String +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br")])],-1),Y=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" borsh_construct "),n("span",{class:"token keyword"},"import"),s(" CStruct"),n("span",{class:"token punctuation"},","),s(" U8"),n("span",{class:"token punctuation"},","),s(" U32"),n("span",{class:"token punctuation"},","),s(" HashMap"),n("span",{class:"token punctuation"},","),s(` String `),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("commitment "),n("span",{class:"token keyword"},"import"),s(` Confirmed -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("publickey "),n("span",{class:"token keyword"},"import"),s(` PublicKey +`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("pubkey "),n("span",{class:"token keyword"},"import"),s(` Pubkey `),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("api "),n("span",{class:"token keyword"},"import"),s(` Client @@ -618,14 +618,10 @@ account_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"def"),s(),n("span",{class:"token function"},"get_account_info"),n("span",{class:"token punctuation"},"("),s("client"),n("span",{class:"token punctuation"},":"),s(" Client"),n("span",{class:"token punctuation"},","),s(" account_pk"),n("span",{class:"token punctuation"},":"),s(" PublicKey"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},":"),s(` +`),n("span",{class:"token keyword"},"def"),s(),n("span",{class:"token function"},"get_account_info"),n("span",{class:"token punctuation"},"("),s("client"),n("span",{class:"token punctuation"},":"),s(" Client"),n("span",{class:"token punctuation"},","),s(" account_pk"),n("span",{class:"token punctuation"},":"),s(" Pubkey"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},":"),s(` `),n("span",{class:"token triple-quoted-string string"},'"""Fetch account information from RPC, parse out the data and deserialize"""'),s(` res `),n("span",{class:"token operator"},"="),s(" client"),n("span",{class:"token punctuation"},"."),s("get_account_info"),n("span",{class:"token punctuation"},"("),s("account_pk"),n("span",{class:"token punctuation"},","),s(" Confirmed"),n("span",{class:"token punctuation"},","),s(" encoding"),n("span",{class:"token operator"},"="),n("span",{class:"token string"},"'base64'"),n("span",{class:"token punctuation"},")"),s(` - data `),n("span",{class:"token operator"},"="),s(" res"),n("span",{class:"token punctuation"},"["),n("span",{class:"token string"},"'result'"),n("span",{class:"token punctuation"},"]"),s(` - `),n("span",{class:"token keyword"},"if"),s(),n("span",{class:"token builtin"},"isinstance"),n("span",{class:"token punctuation"},"("),s("data"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token builtin"},"dict"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},":"),s(` - `),n("span",{class:"token keyword"},"return"),s(" account_schema"),n("span",{class:"token punctuation"},"."),s("parse"),n("span",{class:"token punctuation"},"("),s("base64"),n("span",{class:"token punctuation"},"."),s("urlsafe_b64decode"),n("span",{class:"token punctuation"},"("),s("data"),n("span",{class:"token punctuation"},"["),n("span",{class:"token string"},"'value'"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},"["),n("span",{class:"token string"},"'data'"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},"["),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` - `),n("span",{class:"token keyword"},"else"),n("span",{class:"token punctuation"},":"),s(` - `),n("span",{class:"token keyword"},"raise"),s(" AttributeError"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string-interpolation"},[n("span",{class:"token string"},"f'Unknown RPC result "),n("span",{class:"token interpolation"},[n("span",{class:"token punctuation"},"{"),s("data"),n("span",{class:"token punctuation"},"}")]),n("span",{class:"token string"},"'")]),n("span",{class:"token punctuation"},")"),s(` + `),n("span",{class:"token keyword"},"return"),s(" account_schema"),n("span",{class:"token punctuation"},"."),s("parse"),n("span",{class:"token punctuation"},"("),s("res"),n("span",{class:"token punctuation"},"."),s("value"),n("span",{class:"token punctuation"},"."),s("data"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"# Results in or similar"),s(` `),n("span",{class:"token comment"},"# => Container:"),s(` @@ -633,7 +629,7 @@ account_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token comment"},"# => map_length = 109"),s(` `),n("span",{class:"token comment"},"# => map = {'Happy': 'New Year!', 'newKey': 'A new value',"),s(` `),n("span",{class:"token comment"},"# => 'python key': 'python value', 'ts key': 'ts first value'}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br")])],-1),X=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token punctuation"},"{"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br")])],-1),X=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token namespace"},[s("arrayref"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token operator"},"*"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token namespace"},[s("borsh"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"BorshDeserialize"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"BorshSerialize"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token namespace"},[s("std"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token namespace"},[s("collections"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"BTreeMap"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token namespace"},[s("error"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"Error"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},","),s(` @@ -737,8 +733,7 @@ account_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token function"},"entry"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br"),n("span",{class:"line-number"},"69"),n("br"),n("span",{class:"line-number"},"70"),n("br"),n("span",{class:"line-number"},"71"),n("br")])],-1),sn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(` base64 -`),n("span",{class:"token keyword"},"from"),s(" borsh_construct "),n("span",{class:"token keyword"},"import"),s(" U8"),n("span",{class:"token punctuation"},","),s(" U16"),n("span",{class:"token punctuation"},","),s(" U32"),n("span",{class:"token punctuation"},","),s(" String"),n("span",{class:"token punctuation"},","),s(` HashMap +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br"),n("span",{class:"line-number"},"69"),n("br"),n("span",{class:"line-number"},"70"),n("br"),n("span",{class:"line-number"},"71"),n("br")])],-1),sn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" borsh_construct "),n("span",{class:"token keyword"},"import"),s(" U8"),n("span",{class:"token punctuation"},","),s(" U16"),n("span",{class:"token punctuation"},","),s(" U32"),n("span",{class:"token punctuation"},","),s(" String"),n("span",{class:"token punctuation"},","),s(` HashMap `),n("span",{class:"token comment"},"# Schema to deserialize various types"),s(` primitive_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span",{class:"token punctuation"},"("),s(` @@ -782,7 +777,7 @@ primitive_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span `),n("span",{class:"token comment"},"# => 4"),s(` `),n("span",{class:"token comment"},"# => 5"),s(` `),n("span",{class:"token comment"},"# => MAP_STRING_STRING = {'cookbook': 'recipe', 'recipe': 'ingredient'}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br")])],-1),an=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br")])],-1),an=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token attribute attr-name"},"#[cfg(test)]"),s(` `),n("span",{class:"token keyword"},"mod"),s(),n("span",{class:"token module-declaration namespace"},"tests"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -991,4 +986,4 @@ primitive_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span `),n("span",{class:"token macro property"},"println!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Some = {:?} Pubkey = {:?}"'),n("span",{class:"token punctuation"},","),s(" toption"),n("span",{class:"token number"},".0"),n("span",{class:"token punctuation"},","),s(" pkey"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br")])],-1),ln=n("h2",{id:"ressourcen",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#ressourcen","aria-hidden":"true"},"#"),s(" Ressourcen")],-1),un={href:"https://borsh.io/",target:"_blank",rel:"noopener noreferrer"},rn=s("Borsh Specification"),kn={href:"https://github.com/near/borsh-rs",target:"_blank",rel:"noopener noreferrer"},bn=s("Rust Borsh"),mn={href:"https://github.com/near/borsh-js",target:"_blank",rel:"noopener noreferrer"},dn=s("TS/JS Borsh"),yn={href:"https://github.com/near/borsh-construct-py",target:"_blank",rel:"noopener noreferrer"},gn=s("Python Borsh"),fn={href:"https://near.github.io/borsh-construct-py/",target:"_blank",rel:"noopener noreferrer"},_n=s("Python Borsh Documentation"),hn={href:"https://github.com/hashblock/solana-cli-program-template",target:"_blank",rel:"noopener noreferrer"},wn=s("Solana CLI Program Template2");function Sn(vn,zn){const e=l("CodeGroupItem"),o=l("CodeGroup"),c=l("ExternalLinkIcon");return r(),i(k,null,[g,a(o,null,{default:t(()=>[a(e,{title:"Program"},{default:t(()=>[f]),_:1}),a(e,{title:"Rust Client",active:""},{default:t(()=>[_]),_:1}),a(e,{title:"Node Client",active:""},{default:t(()=>[h]),_:1}),a(e,{title:"Python Client",active:""},{default:t(()=>[w]),_:1})]),_:1}),S,a(o,null,{default:t(()=>[a(e,{title:"TS Client",active:""},{default:t(()=>[v]),_:1}),a(e,{title:"Python Client",active:""},{default:t(()=>[z]),_:1}),a(e,{title:"Rust Client"},{default:t(()=>[T]),_:1})]),_:1}),P,A,a(o,null,{default:t(()=>[a(e,{title:"Rust Program"},{default:t(()=>[C]),_:1})]),_:1}),E,n("p",null,[B,n("a",x,[I,a(c)]),R]),O,a(o,null,{default:t(()=>[a(e,{title:"Rust Program"},{default:t(()=>[D]),_:1})]),_:1}),K,a(o,null,{default:t(()=>[a(e,{title:"Rust Program"},{default:t(()=>[M]),_:1})]),_:1}),N,U,G,a(o,null,{default:t(()=>[a(e,{title:"Rust"},{default:t(()=>[F]),_:1})]),_:1}),V,a(o,null,{default:t(()=>[a(e,{title:"Rust"},{default:t(()=>[L]),_:1})]),_:1}),W,j,H,a(o,null,{default:t(()=>[a(e,{title:"TS",active:""},{default:t(()=>[q]),_:1}),a(e,{title:"Python",active:""},{default:t(()=>[Y]),_:1}),a(e,{title:"Rust"},{default:t(()=>[X]),_:1})]),_:1}),Z,J,Q,$,a(o,null,{default:t(()=>[a(e,{title:"TS",active:""},{default:t(()=>[nn]),_:1}),a(e,{title:"Python",active:""},{default:t(()=>[sn]),_:1}),a(e,{title:"Rust"},{default:t(()=>[an]),_:1})]),_:1}),tn,en,on,a(o,null,{default:t(()=>[a(e,{title:"TS",active:""},{default:t(()=>[cn]),_:1}),a(e,{title:"Rust"},{default:t(()=>[pn]),_:1})]),_:1}),ln,n("ul",null,[n("li",null,[n("a",un,[rn,a(c)])]),n("li",null,[n("a",kn,[bn,a(c)])]),n("li",null,[n("a",mn,[dn,a(c)])]),n("li",null,[n("a",yn,[gn,a(c)])]),n("li",null,[n("a",fn,[_n,a(c)])]),n("li",null,[n("a",hn,[wn,a(c)])])])],64)}var Pn=u(y,[["render",Sn]]);export{Pn as default}; +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br")])],-1),ln=n("h2",{id:"ressourcen",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#ressourcen","aria-hidden":"true"},"#"),s(" Ressourcen")],-1),un={href:"https://borsh.io/",target:"_blank",rel:"noopener noreferrer"},rn=s("Borsh Specification"),kn={href:"https://github.com/near/borsh-rs",target:"_blank",rel:"noopener noreferrer"},bn=s("Rust Borsh"),mn={href:"https://github.com/near/borsh-js",target:"_blank",rel:"noopener noreferrer"},dn=s("TS/JS Borsh"),yn={href:"https://github.com/near/borsh-construct-py",target:"_blank",rel:"noopener noreferrer"},gn=s("Python Borsh"),fn={href:"https://near.github.io/borsh-construct-py/",target:"_blank",rel:"noopener noreferrer"},_n=s("Python Borsh Documentation"),hn={href:"https://github.com/hashblock/solana-cli-program-template",target:"_blank",rel:"noopener noreferrer"},wn=s("Solana CLI Program Template2");function Sn(vn,zn){const e=l("CodeGroupItem"),o=l("CodeGroup"),c=l("ExternalLinkIcon");return r(),i(k,null,[g,a(o,null,{default:t(()=>[a(e,{title:"Program"},{default:t(()=>[f]),_:1}),a(e,{title:"Rust Client",active:""},{default:t(()=>[_]),_:1}),a(e,{title:"Node Client",active:""},{default:t(()=>[h]),_:1}),a(e,{title:"Python Client",active:""},{default:t(()=>[w]),_:1})]),_:1}),S,a(o,null,{default:t(()=>[a(e,{title:"TS Client",active:""},{default:t(()=>[v]),_:1}),a(e,{title:"Python Client",active:""},{default:t(()=>[z]),_:1}),a(e,{title:"Rust Client"},{default:t(()=>[T]),_:1})]),_:1}),P,A,a(o,null,{default:t(()=>[a(e,{title:"Rust Program"},{default:t(()=>[E]),_:1})]),_:1}),C,n("p",null,[B,n("a",x,[I,a(c)]),R]),O,a(o,null,{default:t(()=>[a(e,{title:"Rust Program"},{default:t(()=>[D]),_:1})]),_:1}),M,a(o,null,{default:t(()=>[a(e,{title:"Rust Program"},{default:t(()=>[N]),_:1})]),_:1}),K,U,G,a(o,null,{default:t(()=>[a(e,{title:"Rust"},{default:t(()=>[F]),_:1})]),_:1}),V,a(o,null,{default:t(()=>[a(e,{title:"Rust"},{default:t(()=>[L]),_:1})]),_:1}),W,j,H,a(o,null,{default:t(()=>[a(e,{title:"TS",active:""},{default:t(()=>[q]),_:1}),a(e,{title:"Python",active:""},{default:t(()=>[Y]),_:1}),a(e,{title:"Rust"},{default:t(()=>[X]),_:1})]),_:1}),Z,J,Q,$,a(o,null,{default:t(()=>[a(e,{title:"TS",active:""},{default:t(()=>[nn]),_:1}),a(e,{title:"Python",active:""},{default:t(()=>[sn]),_:1}),a(e,{title:"Rust"},{default:t(()=>[an]),_:1})]),_:1}),tn,en,on,a(o,null,{default:t(()=>[a(e,{title:"TS",active:""},{default:t(()=>[cn]),_:1}),a(e,{title:"Rust"},{default:t(()=>[pn]),_:1})]),_:1}),ln,n("ul",null,[n("li",null,[n("a",un,[rn,a(c)])]),n("li",null,[n("a",kn,[bn,a(c)])]),n("li",null,[n("a",mn,[dn,a(c)])]),n("li",null,[n("a",yn,[gn,a(c)])]),n("li",null,[n("a",fn,[_n,a(c)])]),n("li",null,[n("a",hn,[wn,a(c)])])])],64)}var Pn=u(y,[["render",Sn]]);export{Pn as default}; diff --git a/docs/.vuepress/dist/assets/serialization.html.1cfbc21e.js b/docs/.vuepress/dist/assets/serialization.html.bc53729c.js similarity index 99% rename from docs/.vuepress/dist/assets/serialization.html.1cfbc21e.js rename to docs/.vuepress/dist/assets/serialization.html.bc53729c.js index c8423755b..56f9051df 100644 --- a/docs/.vuepress/dist/assets/serialization.html.1cfbc21e.js +++ b/docs/.vuepress/dist/assets/serialization.html.bc53729c.js @@ -1,4 +1,4 @@ -import{_ as e,r as o,o as c,c as l,a as n,b as p,F as u,e as t,d as s}from"./app.cfdf84e7.js";var i="/assets/ser1.ceec0bad.png",r="/assets/ser3.7cdd43c8.png";const k={},b=t(`

    Serializing Data (Serile\u015Ftirme)

    Serialization(serile\u015Ftirme) hakk\u0131nda konu\u015Ftu\u011Fumuzda, hem serializing data (verilerin serile\u015Ftirilmesini) hem de deserialization of data (verilerin seri durumdan \xE7\u0131kar\u0131lmas\u0131n\u0131) kastediyoruz.

    Serialization, Solana program\u0131 ve program Account\u2019lar\u0131 ya\u015Fam d\xF6ng\xFCs\xFC boyunca birka\xE7 noktada devreye girer:

    1. Client\u2019ta instruction data\u2019n\u0131n serialize edilmesi
    2. Programdaki instruction data\u2019n\u0131n seri deserialize edilmesi
    3. Programdaki Account data\u2019n\u0131n serialize edilmesi
    4. Client\u2019ta Account data\u2019n\u0131n deserialize edilmesi

    Yukar\u0131daki eylemlerin hepsinin ayn\u0131 serialization yakla\u015F\u0131m\u0131yla desteklenmesi \xF6nemlidir. Dahil edilen snippet'ler, Borsh kullan\u0131larak serialization yapmay\u0131 g\xF6steriyor.

    Bu belgenin geri kalan\u0131ndaki \xF6rnekler, Solana CLI Program Template Program \u015Eablonundan al\u0131nan al\u0131nt\u0131lard\u0131r.

    Setting up for Borsh Serialization (Borsh Serialization i\xE7in Kurulum)

    Rust program, Rust client, Node ve/veya Python client i\xE7in Borsh k\xFCt\xFCphaneleri kurulmal\u0131d\u0131r.

    [package]
    +import{_ as e,r as o,o as c,c as l,a as n,b as p,F as u,e as t,d as s}from"./app.2fbb9e96.js";var i="/assets/ser1.ceec0bad.png",r="/assets/ser3.7cdd43c8.png";const k={},b=t(`

    Serializing Data (Serile\u015Ftirme)

    Serialization(serile\u015Ftirme) hakk\u0131nda konu\u015Ftu\u011Fumuzda, hem serializing data (verilerin serile\u015Ftirilmesini) hem de deserialization of data (verilerin seri durumdan \xE7\u0131kar\u0131lmas\u0131n\u0131) kastediyoruz.

    Serialization, Solana program\u0131 ve program Account\u2019lar\u0131 ya\u015Fam d\xF6ng\xFCs\xFC boyunca birka\xE7 noktada devreye girer:

    1. Client\u2019ta instruction data\u2019n\u0131n serialize edilmesi
    2. Programdaki instruction data\u2019n\u0131n seri deserialize edilmesi
    3. Programdaki Account data\u2019n\u0131n serialize edilmesi
    4. Client\u2019ta Account data\u2019n\u0131n deserialize edilmesi

    Yukar\u0131daki eylemlerin hepsinin ayn\u0131 serialization yakla\u015F\u0131m\u0131yla desteklenmesi \xF6nemlidir. Dahil edilen snippet'ler, Borsh kullan\u0131larak serialization yapmay\u0131 g\xF6steriyor.

    Bu belgenin geri kalan\u0131ndaki \xF6rnekler, Solana CLI Program Template Program \u015Eablonundan al\u0131nan al\u0131nt\u0131lard\u0131r.

    Setting up for Borsh Serialization (Borsh Serialization i\xE7in Kurulum)

    Rust program, Rust client, Node ve/veya Python client i\xE7in Borsh k\xFCt\xFCphaneleri kurulmal\u0131d\u0131r.

    [package]
     name = "cli-program-template"
     version = "0.1.5"
     edition = "2018"
    diff --git a/docs/.vuepress/dist/assets/serialization.html.0c2dd08b.js b/docs/.vuepress/dist/assets/serialization.html.c79b151c.js
    similarity index 97%
    rename from docs/.vuepress/dist/assets/serialization.html.0c2dd08b.js
    rename to docs/.vuepress/dist/assets/serialization.html.c79b151c.js
    index f9826c4ce..f5208b63a 100644
    --- a/docs/.vuepress/dist/assets/serialization.html.0c2dd08b.js
    +++ b/docs/.vuepress/dist/assets/serialization.html.c79b151c.js
    @@ -1,4 +1,4 @@
    -import{_ as u,r as l,o as r,c as i,b as a,w as t,a as n,F as k,e as p,d as s}from"./app.cfdf84e7.js";var b="/assets/ser1.ceec0bad.png",m="/assets/ser2.38d4ca5b.png",d="/assets/ser3.7cdd43c8.png";const y={},f=p('

    S\xE9rialisation des donn\xE9es

    Lorsque nous parlons de s\xE9rialisation, nous parlons aussi bien de la s\xE9rialisation des donn\xE9es que de leur d\xE9s\xE9rialisation.

    La s\xE9rialisation entre en jeu \xE0 certains moments du cycle de vie des comptes de programmes et du programme de Solana :

    1. S\xE9rialisation des donn\xE9es d'instruction c\xF4t\xE9 client
    2. D\xE9s\xE9rialiser des donn\xE9es d'instruction dans le programme
    3. S\xE9rialisation des donn\xE9es du compte dans le programme
    4. D\xE9s\xE9rialisation des donn\xE9es du compte c\xF4t\xE9 client

    Il est important que les actions ci-dessus soient toutes prises en charge par la m\xEAme approche de s\xE9rialisation. Les snippets inclus montrent la s\xE9rialisation en utilisant Borsh.

    Les exemples figurant dans la suite de ce document sont des extraits du mod\xE8le de programme CLI de Solana

    Configuration pour la s\xE9rialisation avec Borsh

    Les biblioth\xE8ques pour Borsh doivent \xEAtre configur\xE9es pour le programme Rust, le client Rust, Node et/ou le client Python.

    ',8),g=n("div",{class:"language-toml ext-toml line-numbers-mode"},[n("pre",{class:"language-toml"},[n("code",null,[n("span",{class:"token punctuation"},"["),n("span",{class:"token table class-name"},"package"),n("span",{class:"token punctuation"},"]"),s(` +import{_ as u,r as l,o as r,c as i,b as a,w as t,a as n,F as k,e as p,d as s}from"./app.2fbb9e96.js";var b="/assets/ser1.ceec0bad.png",m="/assets/ser2.38d4ca5b.png",d="/assets/ser3.7cdd43c8.png";const y={},f=p('

    S\xE9rialisation des donn\xE9es

    Lorsque nous parlons de s\xE9rialisation, nous parlons aussi bien de la s\xE9rialisation des donn\xE9es que de leur d\xE9s\xE9rialisation.

    La s\xE9rialisation entre en jeu \xE0 certains moments du cycle de vie des comptes de programmes et du programme de Solana :

    1. S\xE9rialisation des donn\xE9es d'instruction c\xF4t\xE9 client
    2. D\xE9s\xE9rialiser des donn\xE9es d'instruction dans le programme
    3. S\xE9rialisation des donn\xE9es du compte dans le programme
    4. D\xE9s\xE9rialisation des donn\xE9es du compte c\xF4t\xE9 client

    Il est important que les actions ci-dessus soient toutes prises en charge par la m\xEAme approche de s\xE9rialisation. Les snippets inclus montrent la s\xE9rialisation en utilisant Borsh.

    Les exemples figurant dans la suite de ce document sont des extraits du mod\xE8le de programme CLI de Solana

    Configuration pour la s\xE9rialisation avec Borsh

    Les biblioth\xE8ques pour Borsh doivent \xEAtre configur\xE9es pour le programme Rust, le client Rust, Node et/ou le client Python.

    ',8),g=n("div",{class:"language-toml ext-toml line-numbers-mode"},[n("pre",{class:"language-toml"},[n("code",null,[n("span",{class:"token punctuation"},"["),n("span",{class:"token table class-name"},"package"),n("span",{class:"token punctuation"},"]"),s(` `),n("span",{class:"token key property"},"name"),s(),n("span",{class:"token punctuation"},"="),s(),n("span",{class:"token string"},'"solana-cli-template-program-bpf"'),s(` `),n("span",{class:"token key property"},"version"),s(),n("span",{class:"token punctuation"},"="),s(),n("span",{class:"token string"},'"0.1.0"'),s(` `),n("span",{class:"token key property"},"edition"),s(),n("span",{class:"token punctuation"},"="),s(),n("span",{class:"token string"},'"2018"'),s(` @@ -224,10 +224,11 @@ solana==0.20.0 `),n("span",{class:"token punctuation"},"}"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br"),n("span",{class:"line-number"},"69"),n("br"),n("span",{class:"line-number"},"70"),n("br"),n("span",{class:"line-number"},"71"),n("br"),n("span",{class:"line-number"},"72"),n("br"),n("span",{class:"line-number"},"73"),n("br"),n("span",{class:"line-number"},"74"),n("br"),n("span",{class:"line-number"},"75"),n("br"),n("span",{class:"line-number"},"76"),n("br"),n("span",{class:"line-number"},"77"),n("br"),n("span",{class:"line-number"},"78"),n("br"),n("span",{class:"line-number"},"79"),n("br"),n("span",{class:"line-number"},"80"),n("br"),n("span",{class:"line-number"},"81"),n("br"),n("span",{class:"line-number"},"82"),n("br"),n("span",{class:"line-number"},"83"),n("br"),n("span",{class:"line-number"},"84"),n("br"),n("span",{class:"line-number"},"85"),n("br"),n("span",{class:"line-number"},"86"),n("br"),n("span",{class:"line-number"},"87"),n("br"),n("span",{class:"line-number"},"88"),n("br"),n("span",{class:"line-number"},"89"),n("br"),n("span",{class:"line-number"},"90"),n("br"),n("span",{class:"line-number"},"91"),n("br"),n("span",{class:"line-number"},"92"),n("br"),n("span",{class:"line-number"},"93"),n("br"),n("span",{class:"line-number"},"94"),n("br"),n("span",{class:"line-number"},"95"),n("br"),n("span",{class:"line-number"},"96"),n("br"),n("span",{class:"line-number"},"97"),n("br"),n("span",{class:"line-number"},"98"),n("br"),n("span",{class:"line-number"},"99"),n("br"),n("span",{class:"line-number"},"100"),n("br"),n("span",{class:"line-number"},"101"),n("br"),n("span",{class:"line-number"},"102"),n("br"),n("span",{class:"line-number"},"103"),n("br"),n("span",{class:"line-number"},"104"),n("br"),n("span",{class:"line-number"},"105"),n("br"),n("span",{class:"line-number"},"106"),n("br"),n("span",{class:"line-number"},"107"),n("br"),n("span",{class:"line-number"},"108"),n("br")])],-1),T=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" borsh_construct "),n("span",{class:"token keyword"},"import"),s(" String"),n("span",{class:"token punctuation"},","),s(" CStruct"),n("span",{class:"token punctuation"},","),s(` U8 `),n("span",{class:"token keyword"},"from"),s(" enum "),n("span",{class:"token keyword"},"import"),s(` IntEnum -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("types "),n("span",{class:"token keyword"},"import"),s(` RPCResponse -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("transaction "),n("span",{class:"token keyword"},"import"),s(" Transaction"),n("span",{class:"token punctuation"},","),s(" TransactionInstruction"),n("span",{class:"token punctuation"},","),s(` AccountMeta -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("publickey "),n("span",{class:"token keyword"},"import"),s(` PublicKey -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("transaction "),n("span",{class:"token keyword"},"import"),s(` Transaction +`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("pubkey "),n("span",{class:"token keyword"},"import"),s(` Pubkey +`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("instruction "),n("span",{class:"token keyword"},"import"),s(" Instruction"),n("span",{class:"token punctuation"},","),s(` AccountMeta +`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("responses "),n("span",{class:"token keyword"},"import"),s(` SendTransactionResp `),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("api "),n("span",{class:"token keyword"},"import"),s(` Client @@ -250,12 +251,12 @@ payload_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token keyword"},"def"),s(),n("span",{class:"token function"},"mint_kv"),n("span",{class:"token punctuation"},"("),s(` client`),n("span",{class:"token punctuation"},":"),s(" Client"),n("span",{class:"token punctuation"},","),s(` - program_pk`),n("span",{class:"token punctuation"},":"),s(" PublicKey"),n("span",{class:"token punctuation"},","),s(` - account_pk`),n("span",{class:"token punctuation"},":"),s(" PublicKey"),n("span",{class:"token punctuation"},","),s(` + program_pk`),n("span",{class:"token punctuation"},":"),s(" Pubkey"),n("span",{class:"token punctuation"},","),s(` + account_pk`),n("span",{class:"token punctuation"},":"),s(" Pubkey"),n("span",{class:"token punctuation"},","),s(` wallet_kp`),n("span",{class:"token punctuation"},":"),s(" Keypair"),n("span",{class:"token punctuation"},","),s(` mint_key`),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token builtin"},"str"),n("span",{class:"token punctuation"},","),s(` mint_value`),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token builtin"},"str"),n("span",{class:"token punctuation"},","),s(` -`),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"-"),n("span",{class:"token operator"},">"),s(" RPCResponse"),n("span",{class:"token punctuation"},":"),s(` +`),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"-"),n("span",{class:"token operator"},">"),s(" SendTransactionResp"),n("span",{class:"token punctuation"},":"),s(` `),n("span",{class:"token triple-quoted-string string"},'"""Mint with a key/value pair to an account"""'),s(` `),n("span",{class:"token comment"},"# Construct the program payload for Mint invariant"),s(` payload_ser `),n("span",{class:"token operator"},"="),s(" construct_payload"),n("span",{class:"token punctuation"},"("),s("InstructionVariant"),n("span",{class:"token punctuation"},"."),s("MINT"),n("span",{class:"token punctuation"},","),s(" mint_key"),n("span",{class:"token punctuation"},","),s(" mint_value"),n("span",{class:"token punctuation"},")"),s(` @@ -271,13 +272,13 @@ payload_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token comment"},"# Construct the transaction with instructionVariant"),s(` txn `),n("span",{class:"token operator"},"="),s(" Transaction"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),s("add"),n("span",{class:"token punctuation"},"("),s(` - TransactionInstruction`),n("span",{class:"token punctuation"},"("),s(` - `),n("span",{class:"token punctuation"},"["),s("AccountMeta"),n("span",{class:"token punctuation"},"("),s("account_pk"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token boolean"},"False"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token boolean"},"True"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},","),s(" program_pk"),n("span",{class:"token punctuation"},","),s(` payload_ser + Instruction`),n("span",{class:"token punctuation"},"("),s(` + accounts`),n("span",{class:"token operator"},"="),n("span",{class:"token punctuation"},"["),s("AccountMeta"),n("span",{class:"token punctuation"},"("),s("account_pk"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token boolean"},"False"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token boolean"},"True"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},","),s(" program_id"),n("span",{class:"token operator"},"="),s("program_pk"),n("span",{class:"token punctuation"},","),s(" data"),n("span",{class:"token operator"},"="),s(`payload_ser `),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token keyword"},"return"),s(" client"),n("span",{class:"token punctuation"},"."),s("send_transaction"),n("span",{class:"token punctuation"},"("),s("txn"),n("span",{class:"token punctuation"},","),s(" wallet_kp"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"# => {'jsonrpc': '2.0', 'result': '4ZdpWNdovdVaLextWSiqEBWp67k9rNTTUaX3qviHDXWY9c98bVtaRt5sasPhYzMVXHqhex78gzNKytcBnVH5CSTZ', 'id': 2}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br")])],-1),C=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br")])],-1),z=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[s(` `),n("span",{class:"token comment"},"/// Instruction payload gets serialized"),s(` `),n("span",{class:"token attribute attr-name"},"#[derive(BorshSerialize)]"),s(` `),n("span",{class:"token keyword"},"pub"),s(),n("span",{class:"token keyword"},"struct"),s(),n("span",{class:"token type-definition class-name"},"Payload"),n("span",{class:"token operator"},"<"),n("span",{class:"token lifetime-annotation symbol"},"'a"),n("span",{class:"token operator"},">"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -328,7 +329,7 @@ payload_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"map_err"),n("span",{class:"token punctuation"},"("),n("span",{class:"token closure-params"},[n("span",{class:"token closure-punctuation punctuation"},"|"),s("err"),n("span",{class:"token closure-punctuation punctuation"},"|")]),s(),n("span",{class:"token macro property"},"format!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"error: send transaction: {}"'),n("span",{class:"token punctuation"},","),s(" err"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token class-name"},"Ok"),n("span",{class:"token punctuation"},"("),s("signature"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br")])],-1),z=n("h2",{id:"comment-deserialiser-les-donnees-d-instruction-dans-le-programme",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#comment-deserialiser-les-donnees-d-instruction-dans-le-programme","aria-hidden":"true"},"#"),s(" Comment d\xE9s\xE9rialiser les donn\xE9es d'instruction dans le programme")],-1),x=n("img",{src:m,alt:"Deserialize Instruction Data"},null,-1),A=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"//! instruction Contains the main ProgramInstruction enum"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br")])],-1),C=n("h2",{id:"comment-deserialiser-les-donnees-d-instruction-dans-le-programme",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#comment-deserialiser-les-donnees-d-instruction-dans-le-programme","aria-hidden":"true"},"#"),s(" Comment d\xE9s\xE9rialiser les donn\xE9es d'instruction dans le programme")],-1),x=n("img",{src:m,alt:"Deserialize Instruction Data"},null,-1),A=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"//! instruction Contains the main ProgramInstruction enum"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"crate"),n("span",{class:"token module-declaration namespace"},[n("span",{class:"token punctuation"},"::"),s("error"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"SampleError"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token namespace"},[s("borsh"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"BorshDeserialize"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token namespace"},[s("solana_program"),n("span",{class:"token punctuation"},"::"),s("program_error"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"ProgramError"),n("span",{class:"token punctuation"},","),s(` @@ -516,7 +517,7 @@ payload_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token class-name"},"Ok"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"("),s("is_initialized"),n("span",{class:"token punctuation"},","),s(" data_dser"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br")])],-1),U=n("h3",{id:"utilisation",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#utilisation","aria-hidden":"true"},"#"),s(" Utilisation")],-1),K=n("p",null,[s("Ce qui suit regroupe tout cela et montre comment le programme interagit avec le "),n("code",null,"ProgramAccountState"),s(" qui encapsule le drapeau d'initialisation ainsi que le "),n("code",null,"BTreeMap"),s(" correspondant \xE0 nos paires cl\xE9/valeur.")],-1),D=n("p",null,"D'abord quand nous voulons initialiser un tout nouveau compte :",-1),G=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"/// Initialize a new program account, which is the first in AccountInfo array"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br")])],-1),U=n("h3",{id:"utilisation",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#utilisation","aria-hidden":"true"},"#"),s(" Utilisation")],-1),D=n("p",null,[s("Ce qui suit regroupe tout cela et montre comment le programme interagit avec le "),n("code",null,"ProgramAccountState"),s(" qui encapsule le drapeau d'initialisation ainsi que le "),n("code",null,"BTreeMap"),s(" correspondant \xE0 nos paires cl\xE9/valeur.")],-1),K=n("p",null,"D'abord quand nous voulons initialiser un tout nouveau compte :",-1),G=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"/// Initialize a new program account, which is the first in AccountInfo array"),s(` `),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"initialize_account"),n("span",{class:"token punctuation"},"("),s("accounts"),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token operator"},"&"),n("span",{class:"token punctuation"},"["),n("span",{class:"token class-name"},"AccountInfo"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"->"),s(),n("span",{class:"token class-name"},"ProgramResult"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token macro property"},"msg!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Initialize account"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"let"),s(" account_info_iter "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token operator"},"&"),n("span",{class:"token keyword"},"mut"),s(" accounts"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"iter"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` @@ -603,10 +604,9 @@ payload_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token keyword"},"let"),s(" nameAccount "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"getAccountInfo"),n("span",{class:"token punctuation"},"("),s("account"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token string"},'"processed"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"return"),s(),n("span",{class:"token function"},"deserializeUnchecked"),n("span",{class:"token punctuation"},"("),s("dataSchema"),n("span",{class:"token punctuation"},","),s(" AccoundData"),n("span",{class:"token punctuation"},","),s(" nameAccount"),n("span",{class:"token punctuation"},"."),s("data"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br")])],-1),Y=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(` base64 -`),n("span",{class:"token keyword"},"from"),s(" borsh_construct "),n("span",{class:"token keyword"},"import"),s(" CStruct"),n("span",{class:"token punctuation"},","),s(" U8"),n("span",{class:"token punctuation"},","),s(" U32"),n("span",{class:"token punctuation"},","),s(" HashMap"),n("span",{class:"token punctuation"},","),s(` String +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br")])],-1),Y=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" borsh_construct "),n("span",{class:"token keyword"},"import"),s(" CStruct"),n("span",{class:"token punctuation"},","),s(" U8"),n("span",{class:"token punctuation"},","),s(" U32"),n("span",{class:"token punctuation"},","),s(" HashMap"),n("span",{class:"token punctuation"},","),s(` String `),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("commitment "),n("span",{class:"token keyword"},"import"),s(` Confirmed -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("publickey "),n("span",{class:"token keyword"},"import"),s(` PublicKey +`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("pubkey "),n("span",{class:"token keyword"},"import"),s(` Pubkey `),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("api "),n("span",{class:"token keyword"},"import"),s(` Client @@ -618,14 +618,10 @@ account_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"def"),s(),n("span",{class:"token function"},"get_account_info"),n("span",{class:"token punctuation"},"("),s("client"),n("span",{class:"token punctuation"},":"),s(" Client"),n("span",{class:"token punctuation"},","),s(" account_pk"),n("span",{class:"token punctuation"},":"),s(" PublicKey"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},":"),s(` +`),n("span",{class:"token keyword"},"def"),s(),n("span",{class:"token function"},"get_account_info"),n("span",{class:"token punctuation"},"("),s("client"),n("span",{class:"token punctuation"},":"),s(" Client"),n("span",{class:"token punctuation"},","),s(" account_pk"),n("span",{class:"token punctuation"},":"),s(" Pubkey"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},":"),s(` `),n("span",{class:"token triple-quoted-string string"},'"""Fetch account information from RPC, parse out the data and deserialize"""'),s(` res `),n("span",{class:"token operator"},"="),s(" client"),n("span",{class:"token punctuation"},"."),s("get_account_info"),n("span",{class:"token punctuation"},"("),s("account_pk"),n("span",{class:"token punctuation"},","),s(" Confirmed"),n("span",{class:"token punctuation"},","),s(" encoding"),n("span",{class:"token operator"},"="),n("span",{class:"token string"},"'base64'"),n("span",{class:"token punctuation"},")"),s(` - data `),n("span",{class:"token operator"},"="),s(" res"),n("span",{class:"token punctuation"},"["),n("span",{class:"token string"},"'result'"),n("span",{class:"token punctuation"},"]"),s(` - `),n("span",{class:"token keyword"},"if"),s(),n("span",{class:"token builtin"},"isinstance"),n("span",{class:"token punctuation"},"("),s("data"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token builtin"},"dict"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},":"),s(` - `),n("span",{class:"token keyword"},"return"),s(" account_schema"),n("span",{class:"token punctuation"},"."),s("parse"),n("span",{class:"token punctuation"},"("),s("base64"),n("span",{class:"token punctuation"},"."),s("urlsafe_b64decode"),n("span",{class:"token punctuation"},"("),s("data"),n("span",{class:"token punctuation"},"["),n("span",{class:"token string"},"'value'"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},"["),n("span",{class:"token string"},"'data'"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},"["),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` - `),n("span",{class:"token keyword"},"else"),n("span",{class:"token punctuation"},":"),s(` - `),n("span",{class:"token keyword"},"raise"),s(" AttributeError"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string-interpolation"},[n("span",{class:"token string"},"f'Unknown RPC result "),n("span",{class:"token interpolation"},[n("span",{class:"token punctuation"},"{"),s("data"),n("span",{class:"token punctuation"},"}")]),n("span",{class:"token string"},"'")]),n("span",{class:"token punctuation"},")"),s(` + `),n("span",{class:"token keyword"},"return"),s(" account_schema"),n("span",{class:"token punctuation"},"."),s("parse"),n("span",{class:"token punctuation"},"("),s("res"),n("span",{class:"token punctuation"},"."),s("value"),n("span",{class:"token punctuation"},"."),s("data"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"# Results in or similar"),s(` `),n("span",{class:"token comment"},"# => Container:"),s(` @@ -633,7 +629,7 @@ account_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token comment"},"# => map_length = 109"),s(` `),n("span",{class:"token comment"},"# => map = {'Happy': 'New Year!', 'newKey': 'A new value',"),s(` `),n("span",{class:"token comment"},"# => 'python key': 'python value', 'ts key': 'ts first value'}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br")])],-1),W=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token punctuation"},"{"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br")])],-1),W=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token namespace"},[s("arrayref"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token operator"},"*"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token namespace"},[s("borsh"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"BorshDeserialize"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"BorshSerialize"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token namespace"},[s("std"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token namespace"},[s("collections"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"BTreeMap"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token namespace"},[s("error"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"Error"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},","),s(` @@ -737,8 +733,7 @@ account_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token function"},"entry"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br"),n("span",{class:"line-number"},"69"),n("br"),n("span",{class:"line-number"},"70"),n("br"),n("span",{class:"line-number"},"71"),n("br")])],-1),nn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(` base64 -`),n("span",{class:"token keyword"},"from"),s(" borsh_construct "),n("span",{class:"token keyword"},"import"),s(" U8"),n("span",{class:"token punctuation"},","),s(" U16"),n("span",{class:"token punctuation"},","),s(" U32"),n("span",{class:"token punctuation"},","),s(" String"),n("span",{class:"token punctuation"},","),s(` HashMap +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br"),n("span",{class:"line-number"},"69"),n("br"),n("span",{class:"line-number"},"70"),n("br"),n("span",{class:"line-number"},"71"),n("br")])],-1),nn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" borsh_construct "),n("span",{class:"token keyword"},"import"),s(" U8"),n("span",{class:"token punctuation"},","),s(" U16"),n("span",{class:"token punctuation"},","),s(" U32"),n("span",{class:"token punctuation"},","),s(" String"),n("span",{class:"token punctuation"},","),s(` HashMap `),n("span",{class:"token comment"},"# Schema to deserialize various types"),s(` primitive_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span",{class:"token punctuation"},"("),s(` @@ -782,7 +777,7 @@ primitive_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span `),n("span",{class:"token comment"},"# => 4"),s(` `),n("span",{class:"token comment"},"# => 5"),s(` `),n("span",{class:"token comment"},"# => MAP_STRING_STRING = {'cookbook': 'recipe', 'recipe': 'ingredient'}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br")])],-1),sn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br")])],-1),sn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token attribute attr-name"},"#[cfg(test)]"),s(` `),n("span",{class:"token keyword"},"mod"),s(),n("span",{class:"token module-declaration namespace"},"tests"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -991,4 +986,4 @@ primitive_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span `),n("span",{class:"token macro property"},"println!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Some = {:?} Pubkey = {:?}"'),n("span",{class:"token punctuation"},","),s(" toption"),n("span",{class:"token number"},".0"),n("span",{class:"token punctuation"},","),s(" pkey"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br")])],-1),pn=n("h2",{id:"ressources",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#ressources","aria-hidden":"true"},"#"),s(" Ressources")],-1),ln={href:"https://borsh.io/",target:"_blank",rel:"noopener noreferrer"},un=s("Sp\xE9cification de Borsh"),rn={href:"https://github.com/near/borsh-rs",target:"_blank",rel:"noopener noreferrer"},kn=s("Rust Borsh"),bn={href:"https://github.com/near/borsh-js",target:"_blank",rel:"noopener noreferrer"},mn=s("TS/JS Borsh"),dn={href:"https://github.com/near/borsh-construct-py",target:"_blank",rel:"noopener noreferrer"},yn=s("Python Borsh"),fn={href:"https://near.github.io/borsh-construct-py/",target:"_blank",rel:"noopener noreferrer"},gn=s("Documentation de Python Borsh"),_n={href:"https://github.com/hashblock/solana-cli-program-template",target:"_blank",rel:"noopener noreferrer"},wn=s("Mod\xE8le de programme CLI de Solana");function hn(Sn,vn){const e=l("CodeGroupItem"),o=l("CodeGroup"),c=l("ExternalLinkIcon");return r(),i(k,null,[f,a(o,null,{default:t(()=>[a(e,{title:"Program"},{default:t(()=>[g]),_:1}),a(e,{title:"Rust Client",active:""},{default:t(()=>[_]),_:1}),a(e,{title:"Node Client",active:""},{default:t(()=>[w]),_:1}),a(e,{title:"Python Client",active:""},{default:t(()=>[h]),_:1})]),_:1}),S,a(o,null,{default:t(()=>[a(e,{title:"TS Client",active:""},{default:t(()=>[v]),_:1}),a(e,{title:"Python Client",active:""},{default:t(()=>[T]),_:1}),a(e,{title:"Rust Client"},{default:t(()=>[C]),_:1})]),_:1}),z,x,a(o,null,{default:t(()=>[a(e,{title:"Rust Program"},{default:t(()=>[A]),_:1})]),_:1}),P,n("p",null,[E,n("a",B,[I,a(c)])]),R,a(o,null,{default:t(()=>[a(e,{title:"Rust Program"},{default:t(()=>[O]),_:1})]),_:1}),N,a(o,null,{default:t(()=>[a(e,{title:"Rust Program"},{default:t(()=>[M]),_:1})]),_:1}),U,K,D,a(o,null,{default:t(()=>[a(e,{title:"Rust"},{default:t(()=>[G]),_:1})]),_:1}),q,a(o,null,{default:t(()=>[a(e,{title:"Rust"},{default:t(()=>[L]),_:1})]),_:1}),F,V,j,a(o,null,{default:t(()=>[a(e,{title:"TS",active:""},{default:t(()=>[H]),_:1}),a(e,{title:"Python",active:""},{default:t(()=>[Y]),_:1}),a(e,{title:"Rust"},{default:t(()=>[W]),_:1})]),_:1}),X,Z,J,Q,a(o,null,{default:t(()=>[a(e,{title:"TS",active:""},{default:t(()=>[$]),_:1}),a(e,{title:"Python",active:""},{default:t(()=>[nn]),_:1}),a(e,{title:"Rust"},{default:t(()=>[sn]),_:1})]),_:1}),an,tn,en,a(o,null,{default:t(()=>[a(e,{title:"TS",active:""},{default:t(()=>[on]),_:1}),a(e,{title:"Rust"},{default:t(()=>[cn]),_:1})]),_:1}),pn,n("ul",null,[n("li",null,[n("a",ln,[un,a(c)])]),n("li",null,[n("a",rn,[kn,a(c)])]),n("li",null,[n("a",bn,[mn,a(c)])]),n("li",null,[n("a",dn,[yn,a(c)])]),n("li",null,[n("a",fn,[gn,a(c)])]),n("li",null,[n("a",_n,[wn,a(c)])])])],64)}var Cn=u(y,[["render",hn]]);export{Cn as default}; +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br")])],-1),pn=n("h2",{id:"ressources",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#ressources","aria-hidden":"true"},"#"),s(" Ressources")],-1),ln={href:"https://borsh.io/",target:"_blank",rel:"noopener noreferrer"},un=s("Sp\xE9cification de Borsh"),rn={href:"https://github.com/near/borsh-rs",target:"_blank",rel:"noopener noreferrer"},kn=s("Rust Borsh"),bn={href:"https://github.com/near/borsh-js",target:"_blank",rel:"noopener noreferrer"},mn=s("TS/JS Borsh"),dn={href:"https://github.com/near/borsh-construct-py",target:"_blank",rel:"noopener noreferrer"},yn=s("Python Borsh"),fn={href:"https://near.github.io/borsh-construct-py/",target:"_blank",rel:"noopener noreferrer"},gn=s("Documentation de Python Borsh"),_n={href:"https://github.com/hashblock/solana-cli-program-template",target:"_blank",rel:"noopener noreferrer"},wn=s("Mod\xE8le de programme CLI de Solana");function hn(Sn,vn){const e=l("CodeGroupItem"),o=l("CodeGroup"),c=l("ExternalLinkIcon");return r(),i(k,null,[f,a(o,null,{default:t(()=>[a(e,{title:"Program"},{default:t(()=>[g]),_:1}),a(e,{title:"Rust Client",active:""},{default:t(()=>[_]),_:1}),a(e,{title:"Node Client",active:""},{default:t(()=>[w]),_:1}),a(e,{title:"Python Client",active:""},{default:t(()=>[h]),_:1})]),_:1}),S,a(o,null,{default:t(()=>[a(e,{title:"TS Client",active:""},{default:t(()=>[v]),_:1}),a(e,{title:"Python Client",active:""},{default:t(()=>[T]),_:1}),a(e,{title:"Rust Client"},{default:t(()=>[z]),_:1})]),_:1}),C,x,a(o,null,{default:t(()=>[a(e,{title:"Rust Program"},{default:t(()=>[A]),_:1})]),_:1}),P,n("p",null,[E,n("a",B,[I,a(c)])]),R,a(o,null,{default:t(()=>[a(e,{title:"Rust Program"},{default:t(()=>[O]),_:1})]),_:1}),N,a(o,null,{default:t(()=>[a(e,{title:"Rust Program"},{default:t(()=>[M]),_:1})]),_:1}),U,D,K,a(o,null,{default:t(()=>[a(e,{title:"Rust"},{default:t(()=>[G]),_:1})]),_:1}),q,a(o,null,{default:t(()=>[a(e,{title:"Rust"},{default:t(()=>[L]),_:1})]),_:1}),F,V,j,a(o,null,{default:t(()=>[a(e,{title:"TS",active:""},{default:t(()=>[H]),_:1}),a(e,{title:"Python",active:""},{default:t(()=>[Y]),_:1}),a(e,{title:"Rust"},{default:t(()=>[W]),_:1})]),_:1}),X,Z,J,Q,a(o,null,{default:t(()=>[a(e,{title:"TS",active:""},{default:t(()=>[$]),_:1}),a(e,{title:"Python",active:""},{default:t(()=>[nn]),_:1}),a(e,{title:"Rust"},{default:t(()=>[sn]),_:1})]),_:1}),an,tn,en,a(o,null,{default:t(()=>[a(e,{title:"TS",active:""},{default:t(()=>[on]),_:1}),a(e,{title:"Rust"},{default:t(()=>[cn]),_:1})]),_:1}),pn,n("ul",null,[n("li",null,[n("a",ln,[un,a(c)])]),n("li",null,[n("a",rn,[kn,a(c)])]),n("li",null,[n("a",bn,[mn,a(c)])]),n("li",null,[n("a",dn,[yn,a(c)])]),n("li",null,[n("a",fn,[gn,a(c)])]),n("li",null,[n("a",_n,[wn,a(c)])])])],64)}var zn=u(y,[["render",hn]]);export{zn as default}; diff --git a/docs/.vuepress/dist/assets/serialization.html.514ce1b1.js b/docs/.vuepress/dist/assets/serialization.html.cbd7ad5f.js similarity index 97% rename from docs/.vuepress/dist/assets/serialization.html.514ce1b1.js rename to docs/.vuepress/dist/assets/serialization.html.cbd7ad5f.js index 61925e9ec..c42644781 100644 --- a/docs/.vuepress/dist/assets/serialization.html.514ce1b1.js +++ b/docs/.vuepress/dist/assets/serialization.html.cbd7ad5f.js @@ -1,4 +1,4 @@ -import{_ as u,r as l,o as r,c as i,b as a,w as t,a as n,F as k,e as p,d as s}from"./app.cfdf84e7.js";var b="/assets/ser1.ceec0bad.png",m="/assets/ser2.38d4ca5b.png",d="/assets/ser3.7cdd43c8.png";const y={},g=p('

    Serializing Data

    When we talk about serialization we mean both serializing data as well as deserialization of data.

    Serialization comes into play at a few points along Solana program and program accounts lifecycle:

    1. Serializing instruction data on to client
    2. Deserializing instruction data on the program
    3. Serializing Account data on the program
    4. Deserializing Account Data on the client

    It is important that the above actions are all supported by the same serialization approach. The included snippets are demonstrating serialization using Borsh.

    The samples in the remainder of this document are excerpts as taken from the Solana CLI Program Template

    Setting up for Borsh Serialization

    Libraries for Borsh must be setup for the Rust program, Rust client, Node and/or Python client.

    ',8),f=n("div",{class:"language-toml ext-toml line-numbers-mode"},[n("pre",{class:"language-toml"},[n("code",null,[n("span",{class:"token punctuation"},"["),n("span",{class:"token table class-name"},"package"),n("span",{class:"token punctuation"},"]"),s(` +import{_ as u,r as l,o as r,c as i,b as a,w as t,a as n,F as k,e as p,d as s}from"./app.2fbb9e96.js";var b="/assets/ser1.ceec0bad.png",m="/assets/ser2.38d4ca5b.png",d="/assets/ser3.7cdd43c8.png";const y={},g=p('

    Serializing Data

    When we talk about serialization we mean both serializing data as well as deserialization of data.

    Serialization comes into play at a few points along Solana program and program accounts lifecycle:

    1. Serializing instruction data on to client
    2. Deserializing instruction data on the program
    3. Serializing Account data on the program
    4. Deserializing Account Data on the client

    It is important that the above actions are all supported by the same serialization approach. The included snippets are demonstrating serialization using Borsh.

    The samples in the remainder of this document are excerpts as taken from the Solana CLI Program Template

    Setting up for Borsh Serialization

    Libraries for Borsh must be setup for the Rust program, Rust client, Node and/or Python client.

    ',8),f=n("div",{class:"language-toml ext-toml line-numbers-mode"},[n("pre",{class:"language-toml"},[n("code",null,[n("span",{class:"token punctuation"},"["),n("span",{class:"token table class-name"},"package"),n("span",{class:"token punctuation"},"]"),s(` `),n("span",{class:"token key property"},"name"),s(),n("span",{class:"token punctuation"},"="),s(),n("span",{class:"token string"},'"solana-cli-template-program-bpf"'),s(` `),n("span",{class:"token key property"},"version"),s(),n("span",{class:"token punctuation"},"="),s(),n("span",{class:"token string"},'"0.1.0"'),s(` `),n("span",{class:"token key property"},"edition"),s(),n("span",{class:"token punctuation"},"="),s(),n("span",{class:"token string"},'"2018"'),s(` @@ -224,10 +224,11 @@ solana==0.20.0 `),n("span",{class:"token punctuation"},"}"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br"),n("span",{class:"line-number"},"69"),n("br"),n("span",{class:"line-number"},"70"),n("br"),n("span",{class:"line-number"},"71"),n("br"),n("span",{class:"line-number"},"72"),n("br"),n("span",{class:"line-number"},"73"),n("br"),n("span",{class:"line-number"},"74"),n("br"),n("span",{class:"line-number"},"75"),n("br"),n("span",{class:"line-number"},"76"),n("br"),n("span",{class:"line-number"},"77"),n("br"),n("span",{class:"line-number"},"78"),n("br"),n("span",{class:"line-number"},"79"),n("br"),n("span",{class:"line-number"},"80"),n("br"),n("span",{class:"line-number"},"81"),n("br"),n("span",{class:"line-number"},"82"),n("br"),n("span",{class:"line-number"},"83"),n("br"),n("span",{class:"line-number"},"84"),n("br"),n("span",{class:"line-number"},"85"),n("br"),n("span",{class:"line-number"},"86"),n("br"),n("span",{class:"line-number"},"87"),n("br"),n("span",{class:"line-number"},"88"),n("br"),n("span",{class:"line-number"},"89"),n("br"),n("span",{class:"line-number"},"90"),n("br"),n("span",{class:"line-number"},"91"),n("br"),n("span",{class:"line-number"},"92"),n("br"),n("span",{class:"line-number"},"93"),n("br"),n("span",{class:"line-number"},"94"),n("br"),n("span",{class:"line-number"},"95"),n("br"),n("span",{class:"line-number"},"96"),n("br"),n("span",{class:"line-number"},"97"),n("br"),n("span",{class:"line-number"},"98"),n("br"),n("span",{class:"line-number"},"99"),n("br"),n("span",{class:"line-number"},"100"),n("br"),n("span",{class:"line-number"},"101"),n("br"),n("span",{class:"line-number"},"102"),n("br"),n("span",{class:"line-number"},"103"),n("br"),n("span",{class:"line-number"},"104"),n("br"),n("span",{class:"line-number"},"105"),n("br"),n("span",{class:"line-number"},"106"),n("br"),n("span",{class:"line-number"},"107"),n("br"),n("span",{class:"line-number"},"108"),n("br")])],-1),v=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" borsh_construct "),n("span",{class:"token keyword"},"import"),s(" String"),n("span",{class:"token punctuation"},","),s(" CStruct"),n("span",{class:"token punctuation"},","),s(` U8 `),n("span",{class:"token keyword"},"from"),s(" enum "),n("span",{class:"token keyword"},"import"),s(` IntEnum -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("types "),n("span",{class:"token keyword"},"import"),s(` RPCResponse -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("transaction "),n("span",{class:"token keyword"},"import"),s(" Transaction"),n("span",{class:"token punctuation"},","),s(" TransactionInstruction"),n("span",{class:"token punctuation"},","),s(` AccountMeta -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("publickey "),n("span",{class:"token keyword"},"import"),s(` PublicKey -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("transaction "),n("span",{class:"token keyword"},"import"),s(` Transaction +`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("pubkey "),n("span",{class:"token keyword"},"import"),s(` Pubkey +`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("instruction "),n("span",{class:"token keyword"},"import"),s(" Instruction"),n("span",{class:"token punctuation"},","),s(` AccountMeta +`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("responses "),n("span",{class:"token keyword"},"import"),s(` SendTransactionResp `),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("api "),n("span",{class:"token keyword"},"import"),s(` Client @@ -250,12 +251,12 @@ payload_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token keyword"},"def"),s(),n("span",{class:"token function"},"mint_kv"),n("span",{class:"token punctuation"},"("),s(` client`),n("span",{class:"token punctuation"},":"),s(" Client"),n("span",{class:"token punctuation"},","),s(` - program_pk`),n("span",{class:"token punctuation"},":"),s(" PublicKey"),n("span",{class:"token punctuation"},","),s(` - account_pk`),n("span",{class:"token punctuation"},":"),s(" PublicKey"),n("span",{class:"token punctuation"},","),s(` + program_pk`),n("span",{class:"token punctuation"},":"),s(" Pubkey"),n("span",{class:"token punctuation"},","),s(` + account_pk`),n("span",{class:"token punctuation"},":"),s(" Pubkey"),n("span",{class:"token punctuation"},","),s(` wallet_kp`),n("span",{class:"token punctuation"},":"),s(" Keypair"),n("span",{class:"token punctuation"},","),s(` mint_key`),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token builtin"},"str"),n("span",{class:"token punctuation"},","),s(` mint_value`),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token builtin"},"str"),n("span",{class:"token punctuation"},","),s(` -`),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"-"),n("span",{class:"token operator"},">"),s(" RPCResponse"),n("span",{class:"token punctuation"},":"),s(` +`),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"-"),n("span",{class:"token operator"},">"),s(" SendTransactionResp"),n("span",{class:"token punctuation"},":"),s(` `),n("span",{class:"token triple-quoted-string string"},'"""Mint with a key/value pair to an account"""'),s(` `),n("span",{class:"token comment"},"# Construct the program payload for Mint invariant"),s(` payload_ser `),n("span",{class:"token operator"},"="),s(" construct_payload"),n("span",{class:"token punctuation"},"("),s("InstructionVariant"),n("span",{class:"token punctuation"},"."),s("MINT"),n("span",{class:"token punctuation"},","),s(" mint_key"),n("span",{class:"token punctuation"},","),s(" mint_value"),n("span",{class:"token punctuation"},")"),s(` @@ -271,13 +272,13 @@ payload_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token comment"},"# Construct the transaction with instructionVariant"),s(` txn `),n("span",{class:"token operator"},"="),s(" Transaction"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),s("add"),n("span",{class:"token punctuation"},"("),s(` - TransactionInstruction`),n("span",{class:"token punctuation"},"("),s(` - `),n("span",{class:"token punctuation"},"["),s("AccountMeta"),n("span",{class:"token punctuation"},"("),s("account_pk"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token boolean"},"False"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token boolean"},"True"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},","),s(" program_pk"),n("span",{class:"token punctuation"},","),s(` payload_ser + Instruction`),n("span",{class:"token punctuation"},"("),s(` + accounts`),n("span",{class:"token operator"},"="),n("span",{class:"token punctuation"},"["),s("AccountMeta"),n("span",{class:"token punctuation"},"("),s("account_pk"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token boolean"},"False"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token boolean"},"True"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},","),s(" program_id"),n("span",{class:"token operator"},"="),s("program_pk"),n("span",{class:"token punctuation"},","),s(" data"),n("span",{class:"token operator"},"="),s(`payload_ser `),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token keyword"},"return"),s(" client"),n("span",{class:"token punctuation"},"."),s("send_transaction"),n("span",{class:"token punctuation"},"("),s("txn"),n("span",{class:"token punctuation"},","),s(" wallet_kp"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"# => {'jsonrpc': '2.0', 'result': '4ZdpWNdovdVaLextWSiqEBWp67k9rNTTUaX3qviHDXWY9c98bVtaRt5sasPhYzMVXHqhex78gzNKytcBnVH5CSTZ', 'id': 2}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br")])],-1),T=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br")])],-1),T=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[s(` `),n("span",{class:"token comment"},"/// Instruction payload gets serialized"),s(` `),n("span",{class:"token attribute attr-name"},"#[derive(BorshSerialize)]"),s(` `),n("span",{class:"token keyword"},"pub"),s(),n("span",{class:"token keyword"},"struct"),s(),n("span",{class:"token type-definition class-name"},"Payload"),n("span",{class:"token operator"},"<"),n("span",{class:"token lifetime-annotation symbol"},"'a"),n("span",{class:"token operator"},">"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -328,7 +329,7 @@ payload_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"map_err"),n("span",{class:"token punctuation"},"("),n("span",{class:"token closure-params"},[n("span",{class:"token closure-punctuation punctuation"},"|"),s("err"),n("span",{class:"token closure-punctuation punctuation"},"|")]),s(),n("span",{class:"token macro property"},"format!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"error: send transaction: {}"'),n("span",{class:"token punctuation"},","),s(" err"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token class-name"},"Ok"),n("span",{class:"token punctuation"},"("),s("signature"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br")])],-1),P=n("h2",{id:"how-to-deserialize-instruction-data-on-the-program",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-deserialize-instruction-data-on-the-program","aria-hidden":"true"},"#"),s(" How to deserialize instruction data on the program")],-1),A=n("img",{src:m,alt:"Deserialize Instruction Data"},null,-1),C=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"//! instruction Contains the main ProgramInstruction enum"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br")])],-1),P=n("h2",{id:"how-to-deserialize-instruction-data-on-the-program",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-deserialize-instruction-data-on-the-program","aria-hidden":"true"},"#"),s(" How to deserialize instruction data on the program")],-1),A=n("img",{src:m,alt:"Deserialize Instruction Data"},null,-1),x=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"//! instruction Contains the main ProgramInstruction enum"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"crate"),n("span",{class:"token module-declaration namespace"},[n("span",{class:"token punctuation"},"::"),s("error"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"SampleError"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token namespace"},[s("borsh"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"BorshDeserialize"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token namespace"},[s("solana_program"),n("span",{class:"token punctuation"},"::"),s("program_error"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"ProgramError"),n("span",{class:"token punctuation"},","),s(` @@ -377,7 +378,7 @@ payload_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br")])],-1),x=p('

    How to serialize account data on the program

    Account Data Serialization

    The program account data block (from the sample repo) is layed out as

    Byte 0Bytes 1-4Remaining Byte up to 1019
    Initialized flaglength of serialized BTreeMapBTreeMap (where key value pairs are stored)

    Pack

    ',5),E=s("A word about the "),I={href:"https://github.com/solana-labs/solana/blob/22a18a68e3ee68ae013d647e62e12128433d7230/sdk/program/src/program_pack.rs",target:"_blank",rel:"noopener noreferrer"},B=s("Pack"),R=s(" trait"),O=p("

    The Pack trait makes it easier to hide the details of account data serialization/deserialization from your core Program instruction processing. So instead of putting all the serialize/deserialize log in the program processing code, it encapsulates the details behind (3) functions:

    1. unpack_unchecked - Allows you to deserialize an account without checking if it has been initialized. This is useful when you are actually processing the Initialization function (variant index 0)
    2. unpack - Calls your Pack implementation of unpack_from_slice and checks if account has been initialized.
    3. pack - Calls your Pack implementation of pack_into_slice

    Here is the implementation of the Pack trait for our sample program. This is followed with the actual processing of the account data using borsh.

    ",3),N=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"//! @brief account_state manages account data"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br")])],-1),C=p('

    How to serialize account data on the program

    Account Data Serialization

    The program account data block (from the sample repo) is layed out as

    Byte 0Bytes 1-4Remaining Byte up to 1019
    Initialized flaglength of serialized BTreeMapBTreeMap (where key value pairs are stored)

    Pack

    ',5),E=s("A word about the "),I={href:"https://github.com/solana-labs/solana/blob/22a18a68e3ee68ae013d647e62e12128433d7230/sdk/program/src/program_pack.rs",target:"_blank",rel:"noopener noreferrer"},B=s("Pack"),R=s(" trait"),O=p("

    The Pack trait makes it easier to hide the details of account data serialization/deserialization from your core Program instruction processing. So instead of putting all the serialize/deserialize log in the program processing code, it encapsulates the details behind (3) functions:

    1. unpack_unchecked - Allows you to deserialize an account without checking if it has been initialized. This is useful when you are actually processing the Initialization function (variant index 0)
    2. unpack - Calls your Pack implementation of unpack_from_slice and checks if account has been initialized.
    3. pack - Calls your Pack implementation of pack_into_slice

    Here is the implementation of the Pack trait for our sample program. This is followed with the actual processing of the account data using borsh.

    ",3),N=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"//! @brief account_state manages account data"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token keyword"},"crate"),n("span",{class:"token module-declaration namespace"},[n("span",{class:"token punctuation"},"::"),s("error"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"SampleError"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("sol_template_shared"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token constant"},"ACCOUNT_STATE_SPACE"),n("span",{class:"token punctuation"},";"),s(` @@ -516,7 +517,7 @@ payload_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token class-name"},"Ok"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"("),s("is_initialized"),n("span",{class:"token punctuation"},","),s(" data_dser"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br")])],-1),K=n("h3",{id:"usage",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#usage","aria-hidden":"true"},"#"),s(" Usage")],-1),D=n("p",null,[s("The following pulls it all together and demonstrates how the program interacts with the "),n("code",null,"ProgramAccountState"),s(" which encapsulates the initialization flag as well as the underlying "),n("code",null,"BTreeMap"),s(" for our key/value pairs.")],-1),G=n("p",null,"First when we want to initialize a brand new account:",-1),F=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"/// Initialize a new program account, which is the first in AccountInfo array"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br")])],-1),D=n("h3",{id:"usage",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#usage","aria-hidden":"true"},"#"),s(" Usage")],-1),K=n("p",null,[s("The following pulls it all together and demonstrates how the program interacts with the "),n("code",null,"ProgramAccountState"),s(" which encapsulates the initialization flag as well as the underlying "),n("code",null,"BTreeMap"),s(" for our key/value pairs.")],-1),G=n("p",null,"First when we want to initialize a brand new account:",-1),F=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"/// Initialize a new program account, which is the first in AccountInfo array"),s(` `),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"initialize_account"),n("span",{class:"token punctuation"},"("),s("accounts"),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token operator"},"&"),n("span",{class:"token punctuation"},"["),n("span",{class:"token class-name"},"AccountInfo"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"->"),s(),n("span",{class:"token class-name"},"ProgramResult"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token macro property"},"msg!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Initialize account"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"let"),s(" account_info_iter "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token operator"},"&"),n("span",{class:"token keyword"},"mut"),s(" accounts"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"iter"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` @@ -603,10 +604,9 @@ payload_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token keyword"},"let"),s(" nameAccount "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"getAccountInfo"),n("span",{class:"token punctuation"},"("),s("account"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token string"},'"processed"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"return"),s(),n("span",{class:"token function"},"deserializeUnchecked"),n("span",{class:"token punctuation"},"("),s("dataSchema"),n("span",{class:"token punctuation"},","),s(" AccoundData"),n("span",{class:"token punctuation"},","),s(" nameAccount"),n("span",{class:"token punctuation"},"."),s("data"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br")])],-1),Y=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(` base64 -`),n("span",{class:"token keyword"},"from"),s(" borsh_construct "),n("span",{class:"token keyword"},"import"),s(" CStruct"),n("span",{class:"token punctuation"},","),s(" U8"),n("span",{class:"token punctuation"},","),s(" U32"),n("span",{class:"token punctuation"},","),s(" HashMap"),n("span",{class:"token punctuation"},","),s(` String +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br")])],-1),Y=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" borsh_construct "),n("span",{class:"token keyword"},"import"),s(" CStruct"),n("span",{class:"token punctuation"},","),s(" U8"),n("span",{class:"token punctuation"},","),s(" U32"),n("span",{class:"token punctuation"},","),s(" HashMap"),n("span",{class:"token punctuation"},","),s(` String `),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("commitment "),n("span",{class:"token keyword"},"import"),s(` Confirmed -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("publickey "),n("span",{class:"token keyword"},"import"),s(` PublicKey +`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("pubkey "),n("span",{class:"token keyword"},"import"),s(` Pubkey `),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("api "),n("span",{class:"token keyword"},"import"),s(` Client @@ -618,14 +618,10 @@ account_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"def"),s(),n("span",{class:"token function"},"get_account_info"),n("span",{class:"token punctuation"},"("),s("client"),n("span",{class:"token punctuation"},":"),s(" Client"),n("span",{class:"token punctuation"},","),s(" account_pk"),n("span",{class:"token punctuation"},":"),s(" PublicKey"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},":"),s(` +`),n("span",{class:"token keyword"},"def"),s(),n("span",{class:"token function"},"get_account_info"),n("span",{class:"token punctuation"},"("),s("client"),n("span",{class:"token punctuation"},":"),s(" Client"),n("span",{class:"token punctuation"},","),s(" account_pk"),n("span",{class:"token punctuation"},":"),s(" Pubkey"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},":"),s(` `),n("span",{class:"token triple-quoted-string string"},'"""Fetch account information from RPC, parse out the data and deserialize"""'),s(` res `),n("span",{class:"token operator"},"="),s(" client"),n("span",{class:"token punctuation"},"."),s("get_account_info"),n("span",{class:"token punctuation"},"("),s("account_pk"),n("span",{class:"token punctuation"},","),s(" Confirmed"),n("span",{class:"token punctuation"},","),s(" encoding"),n("span",{class:"token operator"},"="),n("span",{class:"token string"},"'base64'"),n("span",{class:"token punctuation"},")"),s(` - data `),n("span",{class:"token operator"},"="),s(" res"),n("span",{class:"token punctuation"},"["),n("span",{class:"token string"},"'result'"),n("span",{class:"token punctuation"},"]"),s(` - `),n("span",{class:"token keyword"},"if"),s(),n("span",{class:"token builtin"},"isinstance"),n("span",{class:"token punctuation"},"("),s("data"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token builtin"},"dict"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},":"),s(` - `),n("span",{class:"token keyword"},"return"),s(" account_schema"),n("span",{class:"token punctuation"},"."),s("parse"),n("span",{class:"token punctuation"},"("),s("base64"),n("span",{class:"token punctuation"},"."),s("urlsafe_b64decode"),n("span",{class:"token punctuation"},"("),s("data"),n("span",{class:"token punctuation"},"["),n("span",{class:"token string"},"'value'"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},"["),n("span",{class:"token string"},"'data'"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},"["),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` - `),n("span",{class:"token keyword"},"else"),n("span",{class:"token punctuation"},":"),s(` - `),n("span",{class:"token keyword"},"raise"),s(" AttributeError"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string-interpolation"},[n("span",{class:"token string"},"f'Unknown RPC result "),n("span",{class:"token interpolation"},[n("span",{class:"token punctuation"},"{"),s("data"),n("span",{class:"token punctuation"},"}")]),n("span",{class:"token string"},"'")]),n("span",{class:"token punctuation"},")"),s(` + `),n("span",{class:"token keyword"},"return"),s(" account_schema"),n("span",{class:"token punctuation"},"."),s("parse"),n("span",{class:"token punctuation"},"("),s("res"),n("span",{class:"token punctuation"},"."),s("value"),n("span",{class:"token punctuation"},"."),s("data"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"# Results in or similar"),s(` `),n("span",{class:"token comment"},"# => Container:"),s(` @@ -633,7 +629,7 @@ account_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token comment"},"# => map_length = 109"),s(` `),n("span",{class:"token comment"},"# => map = {'Happy': 'New Year!', 'newKey': 'A new value',"),s(` `),n("span",{class:"token comment"},"# => 'python key': 'python value', 'ts key': 'ts first value'}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br")])],-1),X=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token punctuation"},"{"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br")])],-1),X=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token namespace"},[s("arrayref"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token operator"},"*"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token namespace"},[s("borsh"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"BorshDeserialize"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"BorshSerialize"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token namespace"},[s("std"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token namespace"},[s("collections"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"BTreeMap"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token namespace"},[s("error"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"Error"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},","),s(` @@ -737,8 +733,7 @@ account_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token function"},"entry"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br"),n("span",{class:"line-number"},"69"),n("br"),n("span",{class:"line-number"},"70"),n("br"),n("span",{class:"line-number"},"71"),n("br")])],-1),sn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(` base64 -`),n("span",{class:"token keyword"},"from"),s(" borsh_construct "),n("span",{class:"token keyword"},"import"),s(" U8"),n("span",{class:"token punctuation"},","),s(" U16"),n("span",{class:"token punctuation"},","),s(" U32"),n("span",{class:"token punctuation"},","),s(" String"),n("span",{class:"token punctuation"},","),s(` HashMap +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br"),n("span",{class:"line-number"},"69"),n("br"),n("span",{class:"line-number"},"70"),n("br"),n("span",{class:"line-number"},"71"),n("br")])],-1),sn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" borsh_construct "),n("span",{class:"token keyword"},"import"),s(" U8"),n("span",{class:"token punctuation"},","),s(" U16"),n("span",{class:"token punctuation"},","),s(" U32"),n("span",{class:"token punctuation"},","),s(" String"),n("span",{class:"token punctuation"},","),s(` HashMap `),n("span",{class:"token comment"},"# Schema to deserialize various types"),s(` primitive_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span",{class:"token punctuation"},"("),s(` @@ -782,7 +777,7 @@ primitive_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span `),n("span",{class:"token comment"},"# => 4"),s(` `),n("span",{class:"token comment"},"# => 5"),s(` `),n("span",{class:"token comment"},"# => MAP_STRING_STRING = {'cookbook': 'recipe', 'recipe': 'ingredient'}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br")])],-1),an=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br")])],-1),an=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token attribute attr-name"},"#[cfg(test)]"),s(` `),n("span",{class:"token keyword"},"mod"),s(),n("span",{class:"token module-declaration namespace"},"tests"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -991,4 +986,4 @@ primitive_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span `),n("span",{class:"token macro property"},"println!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Some = {:?} Pubkey = {:?}"'),n("span",{class:"token punctuation"},","),s(" toption"),n("span",{class:"token number"},".0"),n("span",{class:"token punctuation"},","),s(" pkey"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br")])],-1),ln=n("h2",{id:"resources",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#resources","aria-hidden":"true"},"#"),s(" Resources")],-1),un={href:"https://borsh.io/",target:"_blank",rel:"noopener noreferrer"},rn=s("Borsh Specification"),kn={href:"https://github.com/near/borsh-rs",target:"_blank",rel:"noopener noreferrer"},bn=s("Rust Borsh"),mn={href:"https://github.com/near/borsh-js",target:"_blank",rel:"noopener noreferrer"},dn=s("TS/JS Borsh"),yn={href:"https://github.com/near/borsh-construct-py",target:"_blank",rel:"noopener noreferrer"},gn=s("Python Borsh"),fn={href:"https://near.github.io/borsh-construct-py/",target:"_blank",rel:"noopener noreferrer"},hn=s("Python Borsh Documentation"),_n={href:"https://github.com/hashblock/solana-cli-program-template",target:"_blank",rel:"noopener noreferrer"},wn=s("Solana CLI Program Template2");function Sn(zn,vn){const e=l("CodeGroupItem"),o=l("CodeGroup"),c=l("ExternalLinkIcon");return r(),i(k,null,[g,a(o,null,{default:t(()=>[a(e,{title:"Program"},{default:t(()=>[f]),_:1}),a(e,{title:"Rust Client",active:""},{default:t(()=>[h]),_:1}),a(e,{title:"Node Client",active:""},{default:t(()=>[_]),_:1}),a(e,{title:"Python Client",active:""},{default:t(()=>[w]),_:1})]),_:1}),S,a(o,null,{default:t(()=>[a(e,{title:"TS Client",active:""},{default:t(()=>[z]),_:1}),a(e,{title:"Python Client",active:""},{default:t(()=>[v]),_:1}),a(e,{title:"Rust Client"},{default:t(()=>[T]),_:1})]),_:1}),P,A,a(o,null,{default:t(()=>[a(e,{title:"Rust Program"},{default:t(()=>[C]),_:1})]),_:1}),x,n("p",null,[E,n("a",I,[B,a(c)]),R]),O,a(o,null,{default:t(()=>[a(e,{title:"Rust Program"},{default:t(()=>[N]),_:1})]),_:1}),M,a(o,null,{default:t(()=>[a(e,{title:"Rust Program"},{default:t(()=>[U]),_:1})]),_:1}),K,D,G,a(o,null,{default:t(()=>[a(e,{title:"Rust"},{default:t(()=>[F]),_:1})]),_:1}),V,a(o,null,{default:t(()=>[a(e,{title:"Rust"},{default:t(()=>[L]),_:1})]),_:1}),H,j,W,a(o,null,{default:t(()=>[a(e,{title:"TS",active:""},{default:t(()=>[q]),_:1}),a(e,{title:"Python",active:""},{default:t(()=>[Y]),_:1}),a(e,{title:"Rust"},{default:t(()=>[X]),_:1})]),_:1}),Z,J,Q,$,a(o,null,{default:t(()=>[a(e,{title:"TS",active:""},{default:t(()=>[nn]),_:1}),a(e,{title:"Python",active:""},{default:t(()=>[sn]),_:1}),a(e,{title:"Rust"},{default:t(()=>[an]),_:1})]),_:1}),tn,en,on,a(o,null,{default:t(()=>[a(e,{title:"TS",active:""},{default:t(()=>[cn]),_:1}),a(e,{title:"Rust"},{default:t(()=>[pn]),_:1})]),_:1}),ln,n("ul",null,[n("li",null,[n("a",un,[rn,a(c)])]),n("li",null,[n("a",kn,[bn,a(c)])]),n("li",null,[n("a",mn,[dn,a(c)])]),n("li",null,[n("a",yn,[gn,a(c)])]),n("li",null,[n("a",fn,[hn,a(c)])]),n("li",null,[n("a",_n,[wn,a(c)])])])],64)}var Pn=u(y,[["render",Sn]]);export{Pn as default}; +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br")])],-1),ln=n("h2",{id:"resources",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#resources","aria-hidden":"true"},"#"),s(" Resources")],-1),un={href:"https://borsh.io/",target:"_blank",rel:"noopener noreferrer"},rn=s("Borsh Specification"),kn={href:"https://github.com/near/borsh-rs",target:"_blank",rel:"noopener noreferrer"},bn=s("Rust Borsh"),mn={href:"https://github.com/near/borsh-js",target:"_blank",rel:"noopener noreferrer"},dn=s("TS/JS Borsh"),yn={href:"https://github.com/near/borsh-construct-py",target:"_blank",rel:"noopener noreferrer"},gn=s("Python Borsh"),fn={href:"https://near.github.io/borsh-construct-py/",target:"_blank",rel:"noopener noreferrer"},hn=s("Python Borsh Documentation"),_n={href:"https://github.com/hashblock/solana-cli-program-template",target:"_blank",rel:"noopener noreferrer"},wn=s("Solana CLI Program Template2");function Sn(zn,vn){const e=l("CodeGroupItem"),o=l("CodeGroup"),c=l("ExternalLinkIcon");return r(),i(k,null,[g,a(o,null,{default:t(()=>[a(e,{title:"Program"},{default:t(()=>[f]),_:1}),a(e,{title:"Rust Client",active:""},{default:t(()=>[h]),_:1}),a(e,{title:"Node Client",active:""},{default:t(()=>[_]),_:1}),a(e,{title:"Python Client",active:""},{default:t(()=>[w]),_:1})]),_:1}),S,a(o,null,{default:t(()=>[a(e,{title:"TS Client",active:""},{default:t(()=>[z]),_:1}),a(e,{title:"Python Client",active:""},{default:t(()=>[v]),_:1}),a(e,{title:"Rust Client"},{default:t(()=>[T]),_:1})]),_:1}),P,A,a(o,null,{default:t(()=>[a(e,{title:"Rust Program"},{default:t(()=>[x]),_:1})]),_:1}),C,n("p",null,[E,n("a",I,[B,a(c)]),R]),O,a(o,null,{default:t(()=>[a(e,{title:"Rust Program"},{default:t(()=>[N]),_:1})]),_:1}),M,a(o,null,{default:t(()=>[a(e,{title:"Rust Program"},{default:t(()=>[U]),_:1})]),_:1}),D,K,G,a(o,null,{default:t(()=>[a(e,{title:"Rust"},{default:t(()=>[F]),_:1})]),_:1}),V,a(o,null,{default:t(()=>[a(e,{title:"Rust"},{default:t(()=>[L]),_:1})]),_:1}),H,j,W,a(o,null,{default:t(()=>[a(e,{title:"TS",active:""},{default:t(()=>[q]),_:1}),a(e,{title:"Python",active:""},{default:t(()=>[Y]),_:1}),a(e,{title:"Rust"},{default:t(()=>[X]),_:1})]),_:1}),Z,J,Q,$,a(o,null,{default:t(()=>[a(e,{title:"TS",active:""},{default:t(()=>[nn]),_:1}),a(e,{title:"Python",active:""},{default:t(()=>[sn]),_:1}),a(e,{title:"Rust"},{default:t(()=>[an]),_:1})]),_:1}),tn,en,on,a(o,null,{default:t(()=>[a(e,{title:"TS",active:""},{default:t(()=>[cn]),_:1}),a(e,{title:"Rust"},{default:t(()=>[pn]),_:1})]),_:1}),ln,n("ul",null,[n("li",null,[n("a",un,[rn,a(c)])]),n("li",null,[n("a",kn,[bn,a(c)])]),n("li",null,[n("a",mn,[dn,a(c)])]),n("li",null,[n("a",yn,[gn,a(c)])]),n("li",null,[n("a",fn,[hn,a(c)])]),n("li",null,[n("a",_n,[wn,a(c)])])])],64)}var Pn=u(y,[["render",Sn]]);export{Pn as default}; diff --git a/docs/.vuepress/dist/assets/serialization.html.6d8ae2d4.js b/docs/.vuepress/dist/assets/serialization.html.e9f1b66c.js similarity index 97% rename from docs/.vuepress/dist/assets/serialization.html.6d8ae2d4.js rename to docs/.vuepress/dist/assets/serialization.html.e9f1b66c.js index be7fe91c4..7e066b365 100644 --- a/docs/.vuepress/dist/assets/serialization.html.6d8ae2d4.js +++ b/docs/.vuepress/dist/assets/serialization.html.e9f1b66c.js @@ -1,4 +1,4 @@ -import{_ as u,r as l,o as r,c as i,b as a,w as t,a as n,F as k,e as p,d as s}from"./app.cfdf84e7.js";var b="/assets/ser1.ceec0bad.png",m="/assets/ser2.38d4ca5b.png",d="/assets/ser3.7cdd43c8.png";const y={},g=p('

    Serializando datos

    Cuando hablamos de serializaci\xF3n, nos referimos tanto a la serializaci\xF3n de datos como a la deserializaci\xF3n de datos.

    La serializaci\xF3n entra en juego en algunos puntos a lo largo del ciclo de vida de las cuentas del programa y los programa en Solana:

    1. Serializaci\xF3n de datos de instrucciones en el cliente
    2. Deserializar datos de instrucci\xF3n en el programa
    3. Serializaci\xF3n de datos de la cuenta en el programa
    4. Deserializaci\xF3n de datos de cuenta en el cliente

    Es importante que todas las acciones anteriores est\xE9n respaldadas por el mismo enfoque de serializaci\xF3n. Los fragmentos (snippets) incluidos demuestran la serializaci\xF3n mediante Borsh.

    Los ejemplos en el resto de este documento son extractos tomados de la Plantilla del programa CLI de Solana

    Configuraci\xF3n para la serializaci\xF3n con Borsh

    Las bibliotecas para Borsh deben configurarse para el programa Rust, el cliente Rust, el cliente Node y/o Python.

    ',8),f=n("div",{class:"language-toml ext-toml line-numbers-mode"},[n("pre",{class:"language-toml"},[n("code",null,[n("span",{class:"token punctuation"},"["),n("span",{class:"token table class-name"},"package"),n("span",{class:"token punctuation"},"]"),s(` +import{_ as u,r as l,o as r,c as i,b as a,w as t,a as n,F as k,e as p,d as s}from"./app.2fbb9e96.js";var b="/assets/ser1.ceec0bad.png",m="/assets/ser2.38d4ca5b.png",d="/assets/ser3.7cdd43c8.png";const y={},g=p('

    Serializando datos

    Cuando hablamos de serializaci\xF3n, nos referimos tanto a la serializaci\xF3n de datos como a la deserializaci\xF3n de datos.

    La serializaci\xF3n entra en juego en algunos puntos a lo largo del ciclo de vida de las cuentas del programa y los programa en Solana:

    1. Serializaci\xF3n de datos de instrucciones en el cliente
    2. Deserializar datos de instrucci\xF3n en el programa
    3. Serializaci\xF3n de datos de la cuenta en el programa
    4. Deserializaci\xF3n de datos de cuenta en el cliente

    Es importante que todas las acciones anteriores est\xE9n respaldadas por el mismo enfoque de serializaci\xF3n. Los fragmentos (snippets) incluidos demuestran la serializaci\xF3n mediante Borsh.

    Los ejemplos en el resto de este documento son extractos tomados de la Plantilla del programa CLI de Solana

    Configuraci\xF3n para la serializaci\xF3n con Borsh

    Las bibliotecas para Borsh deben configurarse para el programa Rust, el cliente Rust, el cliente Node y/o Python.

    ',8),f=n("div",{class:"language-toml ext-toml line-numbers-mode"},[n("pre",{class:"language-toml"},[n("code",null,[n("span",{class:"token punctuation"},"["),n("span",{class:"token table class-name"},"package"),n("span",{class:"token punctuation"},"]"),s(` `),n("span",{class:"token key property"},"name"),s(),n("span",{class:"token punctuation"},"="),s(),n("span",{class:"token string"},'"solana-cli-template-program-bpf"'),s(` `),n("span",{class:"token key property"},"version"),s(),n("span",{class:"token punctuation"},"="),s(),n("span",{class:"token string"},'"0.1.0"'),s(` `),n("span",{class:"token key property"},"edition"),s(),n("span",{class:"token punctuation"},"="),s(),n("span",{class:"token string"},'"2018"'),s(` @@ -224,10 +224,11 @@ solana==0.20.0 `),n("span",{class:"token punctuation"},"}"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br"),n("span",{class:"line-number"},"69"),n("br"),n("span",{class:"line-number"},"70"),n("br"),n("span",{class:"line-number"},"71"),n("br"),n("span",{class:"line-number"},"72"),n("br"),n("span",{class:"line-number"},"73"),n("br"),n("span",{class:"line-number"},"74"),n("br"),n("span",{class:"line-number"},"75"),n("br"),n("span",{class:"line-number"},"76"),n("br"),n("span",{class:"line-number"},"77"),n("br"),n("span",{class:"line-number"},"78"),n("br"),n("span",{class:"line-number"},"79"),n("br"),n("span",{class:"line-number"},"80"),n("br"),n("span",{class:"line-number"},"81"),n("br"),n("span",{class:"line-number"},"82"),n("br"),n("span",{class:"line-number"},"83"),n("br"),n("span",{class:"line-number"},"84"),n("br"),n("span",{class:"line-number"},"85"),n("br"),n("span",{class:"line-number"},"86"),n("br"),n("span",{class:"line-number"},"87"),n("br"),n("span",{class:"line-number"},"88"),n("br"),n("span",{class:"line-number"},"89"),n("br"),n("span",{class:"line-number"},"90"),n("br"),n("span",{class:"line-number"},"91"),n("br"),n("span",{class:"line-number"},"92"),n("br"),n("span",{class:"line-number"},"93"),n("br"),n("span",{class:"line-number"},"94"),n("br"),n("span",{class:"line-number"},"95"),n("br"),n("span",{class:"line-number"},"96"),n("br"),n("span",{class:"line-number"},"97"),n("br"),n("span",{class:"line-number"},"98"),n("br"),n("span",{class:"line-number"},"99"),n("br"),n("span",{class:"line-number"},"100"),n("br"),n("span",{class:"line-number"},"101"),n("br"),n("span",{class:"line-number"},"102"),n("br"),n("span",{class:"line-number"},"103"),n("br"),n("span",{class:"line-number"},"104"),n("br"),n("span",{class:"line-number"},"105"),n("br"),n("span",{class:"line-number"},"106"),n("br"),n("span",{class:"line-number"},"107"),n("br"),n("span",{class:"line-number"},"108"),n("br")])],-1),v=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" borsh_construct "),n("span",{class:"token keyword"},"import"),s(" String"),n("span",{class:"token punctuation"},","),s(" CStruct"),n("span",{class:"token punctuation"},","),s(` U8 `),n("span",{class:"token keyword"},"from"),s(" enum "),n("span",{class:"token keyword"},"import"),s(` IntEnum -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("types "),n("span",{class:"token keyword"},"import"),s(` RPCResponse -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("transaction "),n("span",{class:"token keyword"},"import"),s(" Transaction"),n("span",{class:"token punctuation"},","),s(" TransactionInstruction"),n("span",{class:"token punctuation"},","),s(` AccountMeta -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("publickey "),n("span",{class:"token keyword"},"import"),s(` PublicKey -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("transaction "),n("span",{class:"token keyword"},"import"),s(` Transaction +`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("pubkey "),n("span",{class:"token keyword"},"import"),s(` Pubkey +`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("keypair "),n("span",{class:"token keyword"},"import"),s(` Keypair +`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("instruction "),n("span",{class:"token keyword"},"import"),s(" Instruction"),n("span",{class:"token punctuation"},","),s(` AccountMeta +`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("responses "),n("span",{class:"token keyword"},"import"),s(` SendTransactionResp `),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("api "),n("span",{class:"token keyword"},"import"),s(` Client @@ -250,12 +251,12 @@ payload_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token keyword"},"def"),s(),n("span",{class:"token function"},"mint_kv"),n("span",{class:"token punctuation"},"("),s(` client`),n("span",{class:"token punctuation"},":"),s(" Client"),n("span",{class:"token punctuation"},","),s(` - program_pk`),n("span",{class:"token punctuation"},":"),s(" PublicKey"),n("span",{class:"token punctuation"},","),s(` - account_pk`),n("span",{class:"token punctuation"},":"),s(" PublicKey"),n("span",{class:"token punctuation"},","),s(` + program_pk`),n("span",{class:"token punctuation"},":"),s(" Pubkey"),n("span",{class:"token punctuation"},","),s(` + account_pk`),n("span",{class:"token punctuation"},":"),s(" Pubkey"),n("span",{class:"token punctuation"},","),s(` wallet_kp`),n("span",{class:"token punctuation"},":"),s(" Keypair"),n("span",{class:"token punctuation"},","),s(` mint_key`),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token builtin"},"str"),n("span",{class:"token punctuation"},","),s(` mint_value`),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token builtin"},"str"),n("span",{class:"token punctuation"},","),s(` -`),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"-"),n("span",{class:"token operator"},">"),s(" RPCResponse"),n("span",{class:"token punctuation"},":"),s(` +`),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"-"),n("span",{class:"token operator"},">"),s(" SendTransactionResp"),n("span",{class:"token punctuation"},":"),s(` `),n("span",{class:"token triple-quoted-string string"},'"""Mint with a key/value pair to an account"""'),s(` `),n("span",{class:"token comment"},"# Construct the program payload for Mint invariant"),s(` payload_ser `),n("span",{class:"token operator"},"="),s(" construct_payload"),n("span",{class:"token punctuation"},"("),s("InstructionVariant"),n("span",{class:"token punctuation"},"."),s("MINT"),n("span",{class:"token punctuation"},","),s(" mint_key"),n("span",{class:"token punctuation"},","),s(" mint_value"),n("span",{class:"token punctuation"},")"),s(` @@ -271,13 +272,13 @@ payload_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token comment"},"# Construct the transaction with instructionVariant"),s(` txn `),n("span",{class:"token operator"},"="),s(" Transaction"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"."),s("add"),n("span",{class:"token punctuation"},"("),s(` - TransactionInstruction`),n("span",{class:"token punctuation"},"("),s(` - `),n("span",{class:"token punctuation"},"["),s("AccountMeta"),n("span",{class:"token punctuation"},"("),s("account_pk"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token boolean"},"False"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token boolean"},"True"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},","),s(" program_pk"),n("span",{class:"token punctuation"},","),s(` payload_ser + Instruction`),n("span",{class:"token punctuation"},"("),s(` + accounts`),n("span",{class:"token operator"},"="),n("span",{class:"token punctuation"},"["),s("AccountMeta"),n("span",{class:"token punctuation"},"("),s("account_pk"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token boolean"},"False"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token boolean"},"True"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},","),s(" program_id"),n("span",{class:"token operator"},"="),s("program_pk"),n("span",{class:"token punctuation"},","),s(" data"),n("span",{class:"token operator"},"="),s(`payload_ser `),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token keyword"},"return"),s(" client"),n("span",{class:"token punctuation"},"."),s("send_transaction"),n("span",{class:"token punctuation"},"("),s("txn"),n("span",{class:"token punctuation"},","),s(" wallet_kp"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"# => {'jsonrpc': '2.0', 'result': '4ZdpWNdovdVaLextWSiqEBWp67k9rNTTUaX3qviHDXWY9c98bVtaRt5sasPhYzMVXHqhex78gzNKytcBnVH5CSTZ', 'id': 2}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br")])],-1),T=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br")])],-1),T=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[s(` `),n("span",{class:"token comment"},"/// Instruction payload gets serialized"),s(` `),n("span",{class:"token attribute attr-name"},"#[derive(BorshSerialize)]"),s(` `),n("span",{class:"token keyword"},"pub"),s(),n("span",{class:"token keyword"},"struct"),s(),n("span",{class:"token type-definition class-name"},"Payload"),n("span",{class:"token operator"},"<"),n("span",{class:"token lifetime-annotation symbol"},"'a"),n("span",{class:"token operator"},">"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -328,7 +329,7 @@ payload_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"map_err"),n("span",{class:"token punctuation"},"("),n("span",{class:"token closure-params"},[n("span",{class:"token closure-punctuation punctuation"},"|"),s("err"),n("span",{class:"token closure-punctuation punctuation"},"|")]),s(),n("span",{class:"token macro property"},"format!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"error: send transaction: {}"'),n("span",{class:"token punctuation"},","),s(" err"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token class-name"},"Ok"),n("span",{class:"token punctuation"},"("),s("signature"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br")])],-1),E=n("h2",{id:"how-to-deserialize-instruction-data-on-the-program",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-deserialize-instruction-data-on-the-program","aria-hidden":"true"},"#"),s(" How to deserialize instruction data on the program")],-1),P=n("img",{src:m,alt:"Deserialize Instruction Data"},null,-1),C=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"//! instruction Contains the main ProgramInstruction enum"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br")])],-1),E=n("h2",{id:"how-to-deserialize-instruction-data-on-the-program",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-deserialize-instruction-data-on-the-program","aria-hidden":"true"},"#"),s(" How to deserialize instruction data on the program")],-1),P=n("img",{src:m,alt:"Deserialize Instruction Data"},null,-1),A=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"//! instruction Contains the main ProgramInstruction enum"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"crate"),n("span",{class:"token module-declaration namespace"},[n("span",{class:"token punctuation"},"::"),s("error"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"SampleError"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token namespace"},[s("borsh"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"BorshDeserialize"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token namespace"},[s("solana_program"),n("span",{class:"token punctuation"},"::"),s("program_error"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"ProgramError"),n("span",{class:"token punctuation"},","),s(` @@ -377,7 +378,7 @@ payload_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br")])],-1),A=p('

    C\xF3mo serializar los datos de la cuenta en el programa

    Account Data Serialization

    El bloque de datos de la cuenta del programa (como se ve en el repositorio) est\xE1 estructurado de la siguiente manera:

    Byte 0Bytes 1-4Bytes hasta 1019
    bandera de inicializadolongitud del BTreeMap serializadoBTreeMap (donde los pares clave/valor son almacenados)

    Pack

    ',5),x=s("Unas palabras sobre el trait "),B={href:"https://github.com/solana-labs/solana/blob/22a18a68e3ee68ae013d647e62e12128433d7230/sdk/program/src/program_pack.rs",target:"_blank",rel:"noopener noreferrer"},I=s("Pack"),R=p("

    El trait Pack hace que sea m\xE1s f\xE1cil ocultar los detalles de la serializaci\xF3n/deserializaci\xF3n de los datos de la cuenta en el procesamiento de instrucciones de su programa principal. En lugar de poner la serializaci\xF3n/deserializaci\xF3n en el c\xF3digo del programa, encapsula los detalles por detr\xE1s de (3) funciones:

    1. unpack_unchecked - Le permite deserializar una cuenta sin validar si se ha inicializado. Es \xFAtil cuando realmente est\xE1 procesando la funci\xF3n de inicializaci\xF3n (\xEDndice 0)
    2. unpack - LLama a tu implementaci\xF3n de unpack_from_slice y valida si la cuenta se ha inicializado.
    3. pack - LLama a tu implementaci\xF3n de pack_into_slice

    Here is the implementation of the Pack trait for our sample program. This is followed with the actual processing of the account data using borsh.

    Aqu\xED est\xE1 la implementaci\xF3n del trait Pack para nuestro programa de ejemplo. Seguido del procesamiento actual de la cuenta usando borsh.

    ",4),O=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"//! @brief account_state manages account data"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br")])],-1),C=p('

    C\xF3mo serializar los datos de la cuenta en el programa

    Account Data Serialization

    El bloque de datos de la cuenta del programa (como se ve en el repositorio) est\xE1 estructurado de la siguiente manera:

    Byte 0Bytes 1-4Bytes hasta 1019
    bandera de inicializadolongitud del BTreeMap serializadoBTreeMap (donde los pares clave/valor son almacenados)

    Pack

    ',5),x=s("Unas palabras sobre el trait "),B={href:"https://github.com/solana-labs/solana/blob/22a18a68e3ee68ae013d647e62e12128433d7230/sdk/program/src/program_pack.rs",target:"_blank",rel:"noopener noreferrer"},I=s("Pack"),R=p("

    El trait Pack hace que sea m\xE1s f\xE1cil ocultar los detalles de la serializaci\xF3n/deserializaci\xF3n de los datos de la cuenta en el procesamiento de instrucciones de su programa principal. En lugar de poner la serializaci\xF3n/deserializaci\xF3n en el c\xF3digo del programa, encapsula los detalles por detr\xE1s de (3) funciones:

    1. unpack_unchecked - Le permite deserializar una cuenta sin validar si se ha inicializado. Es \xFAtil cuando realmente est\xE1 procesando la funci\xF3n de inicializaci\xF3n (\xEDndice 0)
    2. unpack - LLama a tu implementaci\xF3n de unpack_from_slice y valida si la cuenta se ha inicializado.
    3. pack - LLama a tu implementaci\xF3n de pack_into_slice

    Here is the implementation of the Pack trait for our sample program. This is followed with the actual processing of the account data using borsh.

    Aqu\xED est\xE1 la implementaci\xF3n del trait Pack para nuestro programa de ejemplo. Seguido del procesamiento actual de la cuenta usando borsh.

    ",4),O=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"//! @brief account_state manages account data"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token keyword"},"crate"),n("span",{class:"token module-declaration namespace"},[n("span",{class:"token punctuation"},"::"),s("error"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"SampleError"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("sol_template_shared"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token constant"},"ACCOUNT_STATE_SPACE"),n("span",{class:"token punctuation"},";"),s(` @@ -516,7 +517,7 @@ payload_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token class-name"},"Ok"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},"("),s("is_initialized"),n("span",{class:"token punctuation"},","),s(" data_dser"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br")])],-1),U=n("h3",{id:"usage",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#usage","aria-hidden":"true"},"#"),s(" Usage")],-1),K=n("p",null,[s("Lo siguiente es el consolidado y demuestra c\xF3mo el programa interact\xFAa con "),n("code",null,"ProgramAccountState"),s(" que encapsula el indicador de inicializaci\xF3n, as\xED como el "),n("code",null,"BTreeMap"),s(" interno para nuestros pares clave/valor.")],-1),D=n("p",null,"Primero cuando queremos inicializar una cuenta nueva:",-1),G=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"/// Initialize a new program account, which is the first in AccountInfo array"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br")])],-1),U=n("h3",{id:"usage",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#usage","aria-hidden":"true"},"#"),s(" Usage")],-1),D=n("p",null,[s("Lo siguiente es el consolidado y demuestra c\xF3mo el programa interact\xFAa con "),n("code",null,"ProgramAccountState"),s(" que encapsula el indicador de inicializaci\xF3n, as\xED como el "),n("code",null,"BTreeMap"),s(" interno para nuestros pares clave/valor.")],-1),K=n("p",null,"Primero cuando queremos inicializar una cuenta nueva:",-1),G=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token comment"},"/// Initialize a new program account, which is the first in AccountInfo array"),s(` `),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"initialize_account"),n("span",{class:"token punctuation"},"("),s("accounts"),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token operator"},"&"),n("span",{class:"token punctuation"},"["),n("span",{class:"token class-name"},"AccountInfo"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"->"),s(),n("span",{class:"token class-name"},"ProgramResult"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token macro property"},"msg!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Initialize account"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"let"),s(" account_info_iter "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token operator"},"&"),n("span",{class:"token keyword"},"mut"),s(" accounts"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"iter"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` @@ -603,10 +604,9 @@ payload_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token keyword"},"let"),s(" nameAccount "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"await"),s(" connection"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"getAccountInfo"),n("span",{class:"token punctuation"},"("),s("account"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token string"},'"processed"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"return"),s(),n("span",{class:"token function"},"deserializeUnchecked"),n("span",{class:"token punctuation"},"("),s("dataSchema"),n("span",{class:"token punctuation"},","),s(" AccoundData"),n("span",{class:"token punctuation"},","),s(" nameAccount"),n("span",{class:"token punctuation"},"."),s("data"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br")])],-1),Y=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(` base64 -`),n("span",{class:"token keyword"},"from"),s(" borsh_construct "),n("span",{class:"token keyword"},"import"),s(" CStruct"),n("span",{class:"token punctuation"},","),s(" U8"),n("span",{class:"token punctuation"},","),s(" U32"),n("span",{class:"token punctuation"},","),s(" HashMap"),n("span",{class:"token punctuation"},","),s(` String +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br")])],-1),Y=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" borsh_construct "),n("span",{class:"token keyword"},"import"),s(" CStruct"),n("span",{class:"token punctuation"},","),s(" U8"),n("span",{class:"token punctuation"},","),s(" U32"),n("span",{class:"token punctuation"},","),s(" HashMap"),n("span",{class:"token punctuation"},","),s(` String `),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("commitment "),n("span",{class:"token keyword"},"import"),s(` Confirmed -`),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("publickey "),n("span",{class:"token keyword"},"import"),s(` PublicKey +`),n("span",{class:"token keyword"},"from"),s(" solders"),n("span",{class:"token punctuation"},"."),s("pubkey "),n("span",{class:"token keyword"},"import"),s(` Pubkey `),n("span",{class:"token keyword"},"from"),s(" solana"),n("span",{class:"token punctuation"},"."),s("rpc"),n("span",{class:"token punctuation"},"."),s("api "),n("span",{class:"token keyword"},"import"),s(` Client @@ -618,14 +618,10 @@ account_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token punctuation"},")"),s(` -`),n("span",{class:"token keyword"},"def"),s(),n("span",{class:"token function"},"get_account_info"),n("span",{class:"token punctuation"},"("),s("client"),n("span",{class:"token punctuation"},":"),s(" Client"),n("span",{class:"token punctuation"},","),s(" account_pk"),n("span",{class:"token punctuation"},":"),s(" PublicKey"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},":"),s(` +`),n("span",{class:"token keyword"},"def"),s(),n("span",{class:"token function"},"get_account_info"),n("span",{class:"token punctuation"},"("),s("client"),n("span",{class:"token punctuation"},":"),s(" Client"),n("span",{class:"token punctuation"},","),s(" account_pk"),n("span",{class:"token punctuation"},":"),s(" Pubkey"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},":"),s(` `),n("span",{class:"token triple-quoted-string string"},'"""Fetch account information from RPC, parse out the data and deserialize"""'),s(` res `),n("span",{class:"token operator"},"="),s(" client"),n("span",{class:"token punctuation"},"."),s("get_account_info"),n("span",{class:"token punctuation"},"("),s("account_pk"),n("span",{class:"token punctuation"},","),s(" Confirmed"),n("span",{class:"token punctuation"},","),s(" encoding"),n("span",{class:"token operator"},"="),n("span",{class:"token string"},"'base64'"),n("span",{class:"token punctuation"},")"),s(` - data `),n("span",{class:"token operator"},"="),s(" res"),n("span",{class:"token punctuation"},"["),n("span",{class:"token string"},"'result'"),n("span",{class:"token punctuation"},"]"),s(` - `),n("span",{class:"token keyword"},"if"),s(),n("span",{class:"token builtin"},"isinstance"),n("span",{class:"token punctuation"},"("),s("data"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token builtin"},"dict"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},":"),s(` - `),n("span",{class:"token keyword"},"return"),s(" account_schema"),n("span",{class:"token punctuation"},"."),s("parse"),n("span",{class:"token punctuation"},"("),s("base64"),n("span",{class:"token punctuation"},"."),s("urlsafe_b64decode"),n("span",{class:"token punctuation"},"("),s("data"),n("span",{class:"token punctuation"},"["),n("span",{class:"token string"},"'value'"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},"["),n("span",{class:"token string"},"'data'"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},"["),n("span",{class:"token number"},"0"),n("span",{class:"token punctuation"},"]"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),s(` - `),n("span",{class:"token keyword"},"else"),n("span",{class:"token punctuation"},":"),s(` - `),n("span",{class:"token keyword"},"raise"),s(" AttributeError"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string-interpolation"},[n("span",{class:"token string"},"f'Unknown RPC result "),n("span",{class:"token interpolation"},[n("span",{class:"token punctuation"},"{"),s("data"),n("span",{class:"token punctuation"},"}")]),n("span",{class:"token string"},"'")]),n("span",{class:"token punctuation"},")"),s(` + `),n("span",{class:"token keyword"},"return"),s(" account_schema"),n("span",{class:"token punctuation"},"."),s("parse"),n("span",{class:"token punctuation"},"("),s("res"),n("span",{class:"token punctuation"},"."),s("value"),n("span",{class:"token punctuation"},"."),s("data"),n("span",{class:"token punctuation"},")"),s(` `),n("span",{class:"token comment"},"# Results in or similar"),s(` `),n("span",{class:"token comment"},"# => Container:"),s(` @@ -633,7 +629,7 @@ account_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token comment"},"# => map_length = 109"),s(` `),n("span",{class:"token comment"},"# => map = {'Happy': 'New Year!', 'newKey': 'A new value',"),s(` `),n("span",{class:"token comment"},"# => 'python key': 'python value', 'ts key': 'ts first value'}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br")])],-1),W=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token punctuation"},"{"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br")])],-1),W=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token namespace"},[s("arrayref"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token operator"},"*"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token namespace"},[s("borsh"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token class-name"},"BorshDeserialize"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"BorshSerialize"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token namespace"},[s("std"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token punctuation"},"{"),n("span",{class:"token namespace"},[s("collections"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"BTreeMap"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token namespace"},[s("error"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"Error"),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},","),s(` @@ -737,8 +733,7 @@ account_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span", `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token function"},"entry"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br"),n("span",{class:"line-number"},"69"),n("br"),n("span",{class:"line-number"},"70"),n("br"),n("span",{class:"line-number"},"71"),n("br")])],-1),nn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(` base64 -`),n("span",{class:"token keyword"},"from"),s(" borsh_construct "),n("span",{class:"token keyword"},"import"),s(" U8"),n("span",{class:"token punctuation"},","),s(" U16"),n("span",{class:"token punctuation"},","),s(" U32"),n("span",{class:"token punctuation"},","),s(" String"),n("span",{class:"token punctuation"},","),s(` HashMap +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br"),n("span",{class:"line-number"},"46"),n("br"),n("span",{class:"line-number"},"47"),n("br"),n("span",{class:"line-number"},"48"),n("br"),n("span",{class:"line-number"},"49"),n("br"),n("span",{class:"line-number"},"50"),n("br"),n("span",{class:"line-number"},"51"),n("br"),n("span",{class:"line-number"},"52"),n("br"),n("span",{class:"line-number"},"53"),n("br"),n("span",{class:"line-number"},"54"),n("br"),n("span",{class:"line-number"},"55"),n("br"),n("span",{class:"line-number"},"56"),n("br"),n("span",{class:"line-number"},"57"),n("br"),n("span",{class:"line-number"},"58"),n("br"),n("span",{class:"line-number"},"59"),n("br"),n("span",{class:"line-number"},"60"),n("br"),n("span",{class:"line-number"},"61"),n("br"),n("span",{class:"line-number"},"62"),n("br"),n("span",{class:"line-number"},"63"),n("br"),n("span",{class:"line-number"},"64"),n("br"),n("span",{class:"line-number"},"65"),n("br"),n("span",{class:"line-number"},"66"),n("br"),n("span",{class:"line-number"},"67"),n("br"),n("span",{class:"line-number"},"68"),n("br"),n("span",{class:"line-number"},"69"),n("br"),n("span",{class:"line-number"},"70"),n("br"),n("span",{class:"line-number"},"71"),n("br")])],-1),nn=n("div",{class:"language-python ext-py line-numbers-mode"},[n("pre",{class:"language-python"},[n("code",null,[n("span",{class:"token keyword"},"from"),s(" borsh_construct "),n("span",{class:"token keyword"},"import"),s(" U8"),n("span",{class:"token punctuation"},","),s(" U16"),n("span",{class:"token punctuation"},","),s(" U32"),n("span",{class:"token punctuation"},","),s(" String"),n("span",{class:"token punctuation"},","),s(` HashMap `),n("span",{class:"token comment"},"# Schema to deserialize various types"),s(` primitive_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span",{class:"token punctuation"},"("),s(` @@ -782,7 +777,7 @@ primitive_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span `),n("span",{class:"token comment"},"# => 4"),s(` `),n("span",{class:"token comment"},"# => 5"),s(` `),n("span",{class:"token comment"},"# => MAP_STRING_STRING = {'cookbook': 'recipe', 'recipe': 'ingredient'}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br"),n("span",{class:"line-number"},"45"),n("br")])],-1),sn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),n("span",{class:"token punctuation"},"}"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br"),n("span",{class:"line-number"},"43"),n("br"),n("span",{class:"line-number"},"44"),n("br")])],-1),sn=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"main"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"{"),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token attribute attr-name"},"#[cfg(test)]"),s(` `),n("span",{class:"token keyword"},"mod"),s(),n("span",{class:"token module-declaration namespace"},"tests"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -991,4 +986,4 @@ primitive_schema `),n("span",{class:"token operator"},"="),s(" CStruct"),n("span `),n("span",{class:"token macro property"},"println!"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"Some = {:?} Pubkey = {:?}"'),n("span",{class:"token punctuation"},","),s(" toption"),n("span",{class:"token number"},".0"),n("span",{class:"token punctuation"},","),s(" pkey"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"}"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br")])],-1),pn=n("h2",{id:"recursos",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#recursos","aria-hidden":"true"},"#"),s(" Recursos")],-1),ln={href:"https://borsh.io/",target:"_blank",rel:"noopener noreferrer"},un=s("Especificaci\xF3n de Borsh"),rn={href:"https://github.com/near/borsh-rs",target:"_blank",rel:"noopener noreferrer"},kn=s("Rust Borsh"),bn={href:"https://github.com/near/borsh-js",target:"_blank",rel:"noopener noreferrer"},mn=s("TS/JS Borsh"),dn={href:"https://github.com/near/borsh-construct-py",target:"_blank",rel:"noopener noreferrer"},yn=s("Python Borsh"),gn={href:"https://near.github.io/borsh-construct-py/",target:"_blank",rel:"noopener noreferrer"},fn=s("Python Borsh Documentation"),_n={href:"https://github.com/hashblock/solana-cli-program-template",target:"_blank",rel:"noopener noreferrer"},wn=s("Programa CLI de Solana Template2");function hn(Sn,zn){const e=l("CodeGroupItem"),o=l("CodeGroup"),c=l("ExternalLinkIcon");return r(),i(k,null,[g,a(o,null,{default:t(()=>[a(e,{title:"Program"},{default:t(()=>[f]),_:1}),a(e,{title:"Rust Client",active:""},{default:t(()=>[_]),_:1}),a(e,{title:"Node Client",active:""},{default:t(()=>[w]),_:1}),a(e,{title:"Python Client",active:""},{default:t(()=>[h]),_:1})]),_:1}),S,a(o,null,{default:t(()=>[a(e,{title:"TS Client",active:""},{default:t(()=>[z]),_:1}),a(e,{title:"Python Client",active:""},{default:t(()=>[v]),_:1}),a(e,{title:"Rust Client"},{default:t(()=>[T]),_:1})]),_:1}),E,P,a(o,null,{default:t(()=>[a(e,{title:"Rust Program"},{default:t(()=>[C]),_:1})]),_:1}),A,n("p",null,[x,n("a",B,[I,a(c)])]),R,a(o,null,{default:t(()=>[a(e,{title:"Rust Program"},{default:t(()=>[O]),_:1})]),_:1}),M,a(o,null,{default:t(()=>[a(e,{title:"Rust Program"},{default:t(()=>[N]),_:1})]),_:1}),U,K,D,a(o,null,{default:t(()=>[a(e,{title:"Rust"},{default:t(()=>[G]),_:1})]),_:1}),q,a(o,null,{default:t(()=>[a(e,{title:"Rust"},{default:t(()=>[L]),_:1})]),_:1}),F,V,j,a(o,null,{default:t(()=>[a(e,{title:"TS",active:""},{default:t(()=>[H]),_:1}),a(e,{title:"Python",active:""},{default:t(()=>[Y]),_:1}),a(e,{title:"Rust"},{default:t(()=>[W]),_:1})]),_:1}),X,Z,J,Q,a(o,null,{default:t(()=>[a(e,{title:"TS",active:""},{default:t(()=>[$]),_:1}),a(e,{title:"Python",active:""},{default:t(()=>[nn]),_:1}),a(e,{title:"Rust"},{default:t(()=>[sn]),_:1})]),_:1}),an,tn,en,a(o,null,{default:t(()=>[a(e,{title:"TS",active:""},{default:t(()=>[on]),_:1}),a(e,{title:"Rust"},{default:t(()=>[cn]),_:1})]),_:1}),pn,n("ul",null,[n("li",null,[n("a",ln,[un,a(c)])]),n("li",null,[n("a",rn,[kn,a(c)])]),n("li",null,[n("a",bn,[mn,a(c)])]),n("li",null,[n("a",dn,[yn,a(c)])]),n("li",null,[n("a",gn,[fn,a(c)])]),n("li",null,[n("a",_n,[wn,a(c)])])])],64)}var Tn=u(y,[["render",hn]]);export{Tn as default}; +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br"),n("span",{class:"line-number"},"36"),n("br"),n("span",{class:"line-number"},"37"),n("br"),n("span",{class:"line-number"},"38"),n("br"),n("span",{class:"line-number"},"39"),n("br"),n("span",{class:"line-number"},"40"),n("br"),n("span",{class:"line-number"},"41"),n("br"),n("span",{class:"line-number"},"42"),n("br")])],-1),pn=n("h2",{id:"recursos",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#recursos","aria-hidden":"true"},"#"),s(" Recursos")],-1),ln={href:"https://borsh.io/",target:"_blank",rel:"noopener noreferrer"},un=s("Especificaci\xF3n de Borsh"),rn={href:"https://github.com/near/borsh-rs",target:"_blank",rel:"noopener noreferrer"},kn=s("Rust Borsh"),bn={href:"https://github.com/near/borsh-js",target:"_blank",rel:"noopener noreferrer"},mn=s("TS/JS Borsh"),dn={href:"https://github.com/near/borsh-construct-py",target:"_blank",rel:"noopener noreferrer"},yn=s("Python Borsh"),gn={href:"https://near.github.io/borsh-construct-py/",target:"_blank",rel:"noopener noreferrer"},fn=s("Python Borsh Documentation"),_n={href:"https://github.com/hashblock/solana-cli-program-template",target:"_blank",rel:"noopener noreferrer"},wn=s("Programa CLI de Solana Template2");function hn(Sn,zn){const e=l("CodeGroupItem"),o=l("CodeGroup"),c=l("ExternalLinkIcon");return r(),i(k,null,[g,a(o,null,{default:t(()=>[a(e,{title:"Program"},{default:t(()=>[f]),_:1}),a(e,{title:"Rust Client",active:""},{default:t(()=>[_]),_:1}),a(e,{title:"Node Client",active:""},{default:t(()=>[w]),_:1}),a(e,{title:"Python Client",active:""},{default:t(()=>[h]),_:1})]),_:1}),S,a(o,null,{default:t(()=>[a(e,{title:"TS Client",active:""},{default:t(()=>[z]),_:1}),a(e,{title:"Python Client",active:""},{default:t(()=>[v]),_:1}),a(e,{title:"Rust Client"},{default:t(()=>[T]),_:1})]),_:1}),E,P,a(o,null,{default:t(()=>[a(e,{title:"Rust Program"},{default:t(()=>[A]),_:1})]),_:1}),C,n("p",null,[x,n("a",B,[I,a(c)])]),R,a(o,null,{default:t(()=>[a(e,{title:"Rust Program"},{default:t(()=>[O]),_:1})]),_:1}),M,a(o,null,{default:t(()=>[a(e,{title:"Rust Program"},{default:t(()=>[N]),_:1})]),_:1}),U,D,K,a(o,null,{default:t(()=>[a(e,{title:"Rust"},{default:t(()=>[G]),_:1})]),_:1}),q,a(o,null,{default:t(()=>[a(e,{title:"Rust"},{default:t(()=>[L]),_:1})]),_:1}),F,V,j,a(o,null,{default:t(()=>[a(e,{title:"TS",active:""},{default:t(()=>[H]),_:1}),a(e,{title:"Python",active:""},{default:t(()=>[Y]),_:1}),a(e,{title:"Rust"},{default:t(()=>[W]),_:1})]),_:1}),X,Z,J,Q,a(o,null,{default:t(()=>[a(e,{title:"TS",active:""},{default:t(()=>[$]),_:1}),a(e,{title:"Python",active:""},{default:t(()=>[nn]),_:1}),a(e,{title:"Rust"},{default:t(()=>[sn]),_:1})]),_:1}),an,tn,en,a(o,null,{default:t(()=>[a(e,{title:"TS",active:""},{default:t(()=>[on]),_:1}),a(e,{title:"Rust"},{default:t(()=>[cn]),_:1})]),_:1}),pn,n("ul",null,[n("li",null,[n("a",ln,[un,a(c)])]),n("li",null,[n("a",rn,[kn,a(c)])]),n("li",null,[n("a",bn,[mn,a(c)])]),n("li",null,[n("a",dn,[yn,a(c)])]),n("li",null,[n("a",gn,[fn,a(c)])]),n("li",null,[n("a",_n,[wn,a(c)])])])],64)}var Tn=u(y,[["render",hn]]);export{Tn as default}; diff --git a/docs/.vuepress/dist/assets/serum.html.35f8591c.js b/docs/.vuepress/dist/assets/serum.html.20de9b32.js similarity index 99% rename from docs/.vuepress/dist/assets/serum.html.35f8591c.js rename to docs/.vuepress/dist/assets/serum.html.20de9b32.js index 332cf18cf..b9009de8e 100644 --- a/docs/.vuepress/dist/assets/serum.html.35f8591c.js +++ b/docs/.vuepress/dist/assets/serum.html.20de9b32.js @@ -1,4 +1,4 @@ -import{_ as p,r as c,o as l,c as u,b as t,w as a,F as r,a as n,d as s}from"./app.cfdf84e7.js";const i={},k=n("h1",{id:"serum",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#serum","aria-hidden":"true"},"#"),s(" Serum")],-1),d=n("p",null,"Serum is a protocol for decentralized exchanges built on Solana. You can use Serum to create new markets, get order books, trade, and more.",-1),b=n("h2",{id:"how-to-get-a-serum-market",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-get-a-serum-market","aria-hidden":"true"},"#"),s(" How to get a Serum market")],-1),m=n("p",null,"A market on Serum contains all the orders and capabilities to make orders on Serum. For everything you do on Serum you need to know the market you are working with.",-1),w=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +import{_ as p,r as c,o as l,c as u,b as t,w as a,F as r,a as n,d as s}from"./app.2fbb9e96.js";const i={},k=n("h1",{id:"serum",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#serum","aria-hidden":"true"},"#"),s(" Serum")],-1),d=n("p",null,"Serum is a protocol for decentralized exchanges built on Solana. You can use Serum to create new markets, get order books, trade, and more.",-1),b=n("h2",{id:"how-to-get-a-serum-market",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-get-a-serum-market","aria-hidden":"true"},"#"),s(" How to get a Serum market")],-1),m=n("p",null,"A market on Serum contains all the orders and capabilities to make orders on Serum. For everything you do on Serum you need to know the market you are working with.",-1),w=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Market "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@project-serum/serum"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` diff --git a/docs/.vuepress/dist/assets/serum.html.6ba897c2.js b/docs/.vuepress/dist/assets/serum.html.4f134f2b.js similarity index 99% rename from docs/.vuepress/dist/assets/serum.html.6ba897c2.js rename to docs/.vuepress/dist/assets/serum.html.4f134f2b.js index 8bf7da6a9..924cafd5d 100644 --- a/docs/.vuepress/dist/assets/serum.html.6ba897c2.js +++ b/docs/.vuepress/dist/assets/serum.html.4f134f2b.js @@ -1,4 +1,4 @@ -import{_ as p,r as c,o as l,c as u,b as e,w as a,F as r,a as n,d as s}from"./app.cfdf84e7.js";const i={},k=n("h1",{id:"serum",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#serum","aria-hidden":"true"},"#"),s(" Serum")],-1),d=n("p",null,"Serum ist ein auf Solana basierendes Protokoll f\xFCr den dezentralisierten Austausch. Du kannst Serum verwenden, um neue M\xE4rkte zu schaffen, Auftragsb\xFCcher zu erhalten, Handel zu treiben und vieles mehr.",-1),b=n("h2",{id:"so-erhalten-sie-einen-serummarkt",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#so-erhalten-sie-einen-serummarkt","aria-hidden":"true"},"#"),s(" So erhalten Sie einen Serummarkt")],-1),m=n("p",null,"Ein Markt auf Serum enth\xE4lt alle Bestellungen und M\xF6glichkeiten, um Bestellungen zu t\xE4tigen auf Serum. F\xFCr alles, was Sie mit Serum tun, m\xFCssen Sie den Markt kennen arbeiten mit.",-1),w=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +import{_ as p,r as c,o as l,c as u,b as e,w as a,F as r,a as n,d as s}from"./app.2fbb9e96.js";const i={},k=n("h1",{id:"serum",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#serum","aria-hidden":"true"},"#"),s(" Serum")],-1),d=n("p",null,"Serum ist ein auf Solana basierendes Protokoll f\xFCr den dezentralisierten Austausch. Du kannst Serum verwenden, um neue M\xE4rkte zu schaffen, Auftragsb\xFCcher zu erhalten, Handel zu treiben und vieles mehr.",-1),b=n("h2",{id:"so-erhalten-sie-einen-serummarkt",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#so-erhalten-sie-einen-serummarkt","aria-hidden":"true"},"#"),s(" So erhalten Sie einen Serummarkt")],-1),m=n("p",null,"Ein Markt auf Serum enth\xE4lt alle Bestellungen und M\xF6glichkeiten, um Bestellungen zu t\xE4tigen auf Serum. F\xFCr alles, was Sie mit Serum tun, m\xFCssen Sie den Markt kennen arbeiten mit.",-1),w=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Market "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@project-serum/serum"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` diff --git a/docs/.vuepress/dist/assets/serum.html.ed3537fa.js b/docs/.vuepress/dist/assets/serum.html.8f65bdc5.js similarity index 99% rename from docs/.vuepress/dist/assets/serum.html.ed3537fa.js rename to docs/.vuepress/dist/assets/serum.html.8f65bdc5.js index d360961fb..fca893754 100644 --- a/docs/.vuepress/dist/assets/serum.html.ed3537fa.js +++ b/docs/.vuepress/dist/assets/serum.html.8f65bdc5.js @@ -1,4 +1,4 @@ -import{_ as p,r as c,o as l,c as u,b as t,w as a,F as r,a as n,d as s}from"./app.cfdf84e7.js";const i={},k=n("h1",{id:"serum",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#serum","aria-hidden":"true"},"#"),s(" Serum")],-1),d=n("p",null,"Serum \u0E04\u0E37\u0E2D protocol \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A decentralized exchanges \u0E2A\u0E23\u0E49\u0E32\u0E07\u0E2D\u0E22\u0E39\u0E48\u0E1A\u0E19 Solana. \u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E43\u0E0A\u0E49 Serum \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E2A\u0E23\u0E49\u0E32\u0E07 markets, get order books, trade, \u0E41\u0E25\u0E30\u0E2D\u0E37\u0E48\u0E19\u0E46 \u0E2D\u0E35\u0E01\u0E21\u0E32\u0E01\u0E21\u0E32\u0E22",-1),b=n("h2",{id:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25-serum-market",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25-serum-market","aria-hidden":"true"},"#"),s(" \u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25 Serum market")],-1),m=n("p",null,"market \u0E1A\u0E19 Serum \u0E08\u0E30\u0E21\u0E35 orders \u0E41\u0E25\u0E30\u0E04\u0E27\u0E32\u0E21\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E43\u0E19\u0E01\u0E32\u0E23\u0E2A\u0E23\u0E49\u0E32\u0E07 orders \u0E1A\u0E19 Serum \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E01\u0E32\u0E23\u0E08\u0E30\u0E17\u0E33\u0E2D\u0E30\u0E44\u0E23\u0E1A\u0E19 Serum \u0E40\u0E23\u0E32\u0E15\u0E49\u0E2D\u0E07\u0E23\u0E39\u0E49\u0E27\u0E48\u0E32 market \u0E44\u0E2B\u0E19\u0E17\u0E35\u0E48\u0E40\u0E23\u0E32\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19\u0E2D\u0E22\u0E39\u0E48\u0E14\u0E49\u0E27\u0E22",-1),y=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +import{_ as p,r as c,o as l,c as u,b as t,w as a,F as r,a as n,d as s}from"./app.2fbb9e96.js";const i={},k=n("h1",{id:"serum",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#serum","aria-hidden":"true"},"#"),s(" Serum")],-1),d=n("p",null,"Serum \u0E04\u0E37\u0E2D protocol \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A decentralized exchanges \u0E2A\u0E23\u0E49\u0E32\u0E07\u0E2D\u0E22\u0E39\u0E48\u0E1A\u0E19 Solana. \u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E43\u0E0A\u0E49 Serum \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E2A\u0E23\u0E49\u0E32\u0E07 markets, get order books, trade, \u0E41\u0E25\u0E30\u0E2D\u0E37\u0E48\u0E19\u0E46 \u0E2D\u0E35\u0E01\u0E21\u0E32\u0E01\u0E21\u0E32\u0E22",-1),b=n("h2",{id:"\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25-serum-market",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25-serum-market","aria-hidden":"true"},"#"),s(" \u0E27\u0E34\u0E18\u0E35\u0E14\u0E36\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25 Serum market")],-1),m=n("p",null,"market \u0E1A\u0E19 Serum \u0E08\u0E30\u0E21\u0E35 orders \u0E41\u0E25\u0E30\u0E04\u0E27\u0E32\u0E21\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E43\u0E19\u0E01\u0E32\u0E23\u0E2A\u0E23\u0E49\u0E32\u0E07 orders \u0E1A\u0E19 Serum \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E01\u0E32\u0E23\u0E08\u0E30\u0E17\u0E33\u0E2D\u0E30\u0E44\u0E23\u0E1A\u0E19 Serum \u0E40\u0E23\u0E32\u0E15\u0E49\u0E2D\u0E07\u0E23\u0E39\u0E49\u0E27\u0E48\u0E32 market \u0E44\u0E2B\u0E19\u0E17\u0E35\u0E48\u0E40\u0E23\u0E32\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19\u0E2D\u0E22\u0E39\u0E48\u0E14\u0E49\u0E27\u0E22",-1),y=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Market "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@project-serum/serum"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` diff --git a/docs/.vuepress/dist/assets/serum.html.c2509ca4.js b/docs/.vuepress/dist/assets/serum.html.bf6c9d32.js similarity index 99% rename from docs/.vuepress/dist/assets/serum.html.c2509ca4.js rename to docs/.vuepress/dist/assets/serum.html.bf6c9d32.js index 332cf18cf..b9009de8e 100644 --- a/docs/.vuepress/dist/assets/serum.html.c2509ca4.js +++ b/docs/.vuepress/dist/assets/serum.html.bf6c9d32.js @@ -1,4 +1,4 @@ -import{_ as p,r as c,o as l,c as u,b as t,w as a,F as r,a as n,d as s}from"./app.cfdf84e7.js";const i={},k=n("h1",{id:"serum",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#serum","aria-hidden":"true"},"#"),s(" Serum")],-1),d=n("p",null,"Serum is a protocol for decentralized exchanges built on Solana. You can use Serum to create new markets, get order books, trade, and more.",-1),b=n("h2",{id:"how-to-get-a-serum-market",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-get-a-serum-market","aria-hidden":"true"},"#"),s(" How to get a Serum market")],-1),m=n("p",null,"A market on Serum contains all the orders and capabilities to make orders on Serum. For everything you do on Serum you need to know the market you are working with.",-1),w=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +import{_ as p,r as c,o as l,c as u,b as t,w as a,F as r,a as n,d as s}from"./app.2fbb9e96.js";const i={},k=n("h1",{id:"serum",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#serum","aria-hidden":"true"},"#"),s(" Serum")],-1),d=n("p",null,"Serum is a protocol for decentralized exchanges built on Solana. You can use Serum to create new markets, get order books, trade, and more.",-1),b=n("h2",{id:"how-to-get-a-serum-market",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-get-a-serum-market","aria-hidden":"true"},"#"),s(" How to get a Serum market")],-1),m=n("p",null,"A market on Serum contains all the orders and capabilities to make orders on Serum. For everything you do on Serum you need to know the market you are working with.",-1),w=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Market "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@project-serum/serum"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` diff --git a/docs/.vuepress/dist/assets/serum.html.78e40a76.js b/docs/.vuepress/dist/assets/serum.html.edb62029.js similarity index 99% rename from docs/.vuepress/dist/assets/serum.html.78e40a76.js rename to docs/.vuepress/dist/assets/serum.html.edb62029.js index 65531ac60..c84e4676f 100644 --- a/docs/.vuepress/dist/assets/serum.html.78e40a76.js +++ b/docs/.vuepress/dist/assets/serum.html.edb62029.js @@ -1,4 +1,4 @@ -import{_ as p,r as c,o as l,c as u,b as t,w as a,F as r,a as n,d as s}from"./app.cfdf84e7.js";const i={},k=n("h1",{id:"serum",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#serum","aria-hidden":"true"},"#"),s(" Serum")],-1),d=n("p",null,"Serum est un protocole pour les \xE9changes d\xE9centralis\xE9s construit sur Solana. Vous pouvez utiliser Serum pour cr\xE9er de nouveaux march\xE9s, obtenir des carnets d'ordres, trade, etc.",-1),b=n("h2",{id:"comment-obtenir-un-marche-de-serum",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#comment-obtenir-un-marche-de-serum","aria-hidden":"true"},"#"),s(" Comment obtenir un march\xE9 de Serum")],-1),m=n("p",null,"Un march\xE9 sur Serum contient tous les ordres et les fonctionnalit\xE9s permettant de passer des ordres sur Serum. Pour tout ce que vous faites sur Serum, vous devez conna\xEEtre le march\xE9 avec lequel vous travaillez.",-1),y=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +import{_ as p,r as c,o as l,c as u,b as t,w as a,F as r,a as n,d as s}from"./app.2fbb9e96.js";const i={},k=n("h1",{id:"serum",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#serum","aria-hidden":"true"},"#"),s(" Serum")],-1),d=n("p",null,"Serum est un protocole pour les \xE9changes d\xE9centralis\xE9s construit sur Solana. Vous pouvez utiliser Serum pour cr\xE9er de nouveaux march\xE9s, obtenir des carnets d'ordres, trade, etc.",-1),b=n("h2",{id:"comment-obtenir-un-marche-de-serum",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#comment-obtenir-un-marche-de-serum","aria-hidden":"true"},"#"),s(" Comment obtenir un march\xE9 de Serum")],-1),m=n("p",null,"Un march\xE9 sur Serum contient tous les ordres et les fonctionnalit\xE9s permettant de passer des ordres sur Serum. Pour tout ce que vous faites sur Serum, vous devez conna\xEEtre le march\xE9 avec lequel vous travaillez.",-1),y=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Market "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@project-serum/serum"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` diff --git a/docs/.vuepress/dist/assets/serum.html.299c0148.js b/docs/.vuepress/dist/assets/serum.html.f55e8c37.js similarity index 99% rename from docs/.vuepress/dist/assets/serum.html.299c0148.js rename to docs/.vuepress/dist/assets/serum.html.f55e8c37.js index c6067ddbc..ce27e965e 100644 --- a/docs/.vuepress/dist/assets/serum.html.299c0148.js +++ b/docs/.vuepress/dist/assets/serum.html.f55e8c37.js @@ -1,4 +1,4 @@ -import{_ as p,r as c,o as l,c as u,b as t,w as a,F as r,e as i,a as n,d as s}from"./app.cfdf84e7.js";const k={},d=i('

    Serum

    Serum adalah protokol untuk pertukaran terdesentralisasi yang dibangun di atas Solana. Anda dapat menggunakan Serum untuk menciptakan pasar baru (new market), mendapatkan buku pesanan (orderbooks), berdagang (trades), dan banyak lagi.

    Cara Mendapatkan Serum Market

    Market di Serum berisi semua pesanan dan kemampuan untuk membuat pesanan pada Serum. Untuk semua yang Anda lakukan di Serum, Anda perlu mengetahui market yang Anda sedang kerjakan.

    ',4),b=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +import{_ as p,r as c,o as l,c as u,b as t,w as a,F as r,e as i,a as n,d as s}from"./app.2fbb9e96.js";const k={},d=i('

    Serum

    Serum adalah protokol untuk pertukaran terdesentralisasi yang dibangun di atas Solana. Anda dapat menggunakan Serum untuk menciptakan pasar baru (new market), mendapatkan buku pesanan (orderbooks), berdagang (trades), dan banyak lagi.

    Cara Mendapatkan Serum Market

    Market di Serum berisi semua pesanan dan kemampuan untuk membuat pesanan pada Serum. Untuk semua yang Anda lakukan di Serum, Anda perlu mengetahui market yang Anda sedang kerjakan.

    ',4),b=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Connection"),n("span",{class:"token punctuation"},","),s(" PublicKey "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Market "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@project-serum/serum"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` diff --git a/docs/.vuepress/dist/assets/staking.html.e91c71dd.js b/docs/.vuepress/dist/assets/staking.html.18305091.js similarity index 99% rename from docs/.vuepress/dist/assets/staking.html.e91c71dd.js rename to docs/.vuepress/dist/assets/staking.html.18305091.js index 11ca0f0d6..7fcb7232b 100644 --- a/docs/.vuepress/dist/assets/staking.html.e91c71dd.js +++ b/docs/.vuepress/dist/assets/staking.html.18305091.js @@ -1,4 +1,4 @@ -import{_ as r,r as e,o as k,c as b,b as t,w as a,a as n,F as m,d as s}from"./app.cfdf84e7.js";const d={},g=n("h1",{id:"staking",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#staking","aria-hidden":"true"},"#"),s(" Staking")],-1),w=n("h2",{id:"obtener-los-validadores-actuales",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#obtener-los-validadores-actuales","aria-hidden":"true"},"#"),s(" Obtener los validadores actuales")],-1),y=n("p",null,"Podemos hacer stake de SOL y ganar recompensas por ayudar a asegurar la red. Para hacer stake, delegamos SOL a validadores que a su vez procesan transacciones.",-1),h=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" clusterApiUrl"),n("span",{class:"token punctuation"},","),s(" Connection "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` +import{_ as r,r as e,o as k,c as b,b as t,w as a,a as n,F as m,d as s}from"./app.2fbb9e96.js";const d={},g=n("h1",{id:"staking",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#staking","aria-hidden":"true"},"#"),s(" Staking")],-1),w=n("h2",{id:"obtener-los-validadores-actuales",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#obtener-los-validadores-actuales","aria-hidden":"true"},"#"),s(" Obtener los validadores actuales")],-1),y=n("p",null,"Podemos hacer stake de SOL y ganar recompensas por ayudar a asegurar la red. Para hacer stake, delegamos SOL a validadores que a su vez procesan transacciones.",-1),h=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" clusterApiUrl"),n("span",{class:"token punctuation"},","),s(" Connection "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"const"),s(" connection "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"clusterApiUrl"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"devnet"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token string"},'"confirmed"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` diff --git a/docs/.vuepress/dist/assets/staking.html.be6c8f38.js b/docs/.vuepress/dist/assets/staking.html.2a68a938.js similarity index 99% rename from docs/.vuepress/dist/assets/staking.html.be6c8f38.js rename to docs/.vuepress/dist/assets/staking.html.2a68a938.js index ff08c85d6..e73473d1a 100644 --- a/docs/.vuepress/dist/assets/staking.html.be6c8f38.js +++ b/docs/.vuepress/dist/assets/staking.html.2a68a938.js @@ -1,4 +1,4 @@ -import{_ as l,r as o,o as u,c as i,a as s,b as a,w as c,F as r,e as p,d as n}from"./app.cfdf84e7.js";const k={},b=p(`

    Staking

    Mendapatkan Validators

    Kita bisa stake SOL dan mendapatkan rewards dari membantu menjaga keamanan network. Untuk melakukan staking, kita mendelegasi SOL kepada para validator yang selanjutnya memproses transaksi.

    import { clusterApiUrl, Connection } from "@solana/web3.js";
    +import{_ as l,r as o,o as u,c as i,a as s,b as a,w as c,F as r,e as p,d as n}from"./app.2fbb9e96.js";const k={},b=p(`

    Staking

    Mendapatkan Validators

    Kita bisa stake SOL dan mendapatkan rewards dari membantu menjaga keamanan network. Untuk melakukan staking, kita mendelegasi SOL kepada para validator yang selanjutnya memproses transaksi.

    import { clusterApiUrl, Connection } from "@solana/web3.js";
     
     (async () => {
       const connection = new Connection(clusterApiUrl("devnet"), "confirmed");
    diff --git a/docs/.vuepress/dist/assets/staking.html.b27c769d.js b/docs/.vuepress/dist/assets/staking.html.2accd08e.js
    similarity index 99%
    rename from docs/.vuepress/dist/assets/staking.html.b27c769d.js
    rename to docs/.vuepress/dist/assets/staking.html.2accd08e.js
    index ff4e6a9a1..05340e4ff 100644
    --- a/docs/.vuepress/dist/assets/staking.html.b27c769d.js
    +++ b/docs/.vuepress/dist/assets/staking.html.2accd08e.js
    @@ -1,4 +1,4 @@
    -import{_ as r,r as e,o as k,c as b,b as t,w as a,a as n,F as m,d as s}from"./app.cfdf84e7.js";const d={},w=n("h1",{id:"staking",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#staking","aria-hidden":"true"},"#"),s(" Staking")],-1),g=n("h2",{id:"get-current-validators",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#get-current-validators","aria-hidden":"true"},"#"),s(" Get Current Validators")],-1),y=n("p",null,"\uC6B0\uB9AC\uB294 \uB124\uD2B8\uC6CC\uD06C\uB97C \uC548\uC815\uC801\uC73C\uB85C \uD655\uBCF4\uD558\uB294 \uAC83\uC744 \uB3D5\uAE30 \uC704\uD574 SOL\uC744 \uC2A4\uD14C\uC774\uD0B9\uD560 \uC218 \uC788\uACE0 \uBCF4\uC131\uC744 \uC5BB\uC744 \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uC2A4\uD14C\uC774\uD0B9\uC744 \uC704\uD574\uC11C \uC6B0\uB9AC\uB294 \uCC28\uB840\uB85C transaction\uB4E4\uC744 \uCC98\uB9AC\uD558\uB294 validator\uB4E4\uC5D0\uAC8C SOL\uC744 \uC704\uC784\uD574\uC57C \uD569\uB2C8\uB2E4.",-1),h=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" clusterApiUrl"),n("span",{class:"token punctuation"},","),s(" Connection "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(`
    +import{_ as r,r as e,o as k,c as b,b as t,w as a,a as n,F as m,d as s}from"./app.2fbb9e96.js";const d={},w=n("h1",{id:"staking",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#staking","aria-hidden":"true"},"#"),s(" Staking")],-1),g=n("h2",{id:"get-current-validators",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#get-current-validators","aria-hidden":"true"},"#"),s(" Get Current Validators")],-1),y=n("p",null,"\uC6B0\uB9AC\uB294 \uB124\uD2B8\uC6CC\uD06C\uB97C \uC548\uC815\uC801\uC73C\uB85C \uD655\uBCF4\uD558\uB294 \uAC83\uC744 \uB3D5\uAE30 \uC704\uD574 SOL\uC744 \uC2A4\uD14C\uC774\uD0B9\uD560 \uC218 \uC788\uACE0 \uBCF4\uC131\uC744 \uC5BB\uC744 \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uC2A4\uD14C\uC774\uD0B9\uC744 \uC704\uD574\uC11C \uC6B0\uB9AC\uB294 \uCC28\uB840\uB85C transaction\uB4E4\uC744 \uCC98\uB9AC\uD558\uB294 validator\uB4E4\uC5D0\uAC8C SOL\uC744 \uC704\uC784\uD574\uC57C \uD569\uB2C8\uB2E4.",-1),h=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" clusterApiUrl"),n("span",{class:"token punctuation"},","),s(" Connection "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(`
     
     `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(`
       `),n("span",{class:"token keyword"},"const"),s(" connection "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"clusterApiUrl"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"devnet"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token string"},'"confirmed"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
    diff --git a/docs/.vuepress/dist/assets/staking.html.350e1ee5.js b/docs/.vuepress/dist/assets/staking.html.7540b6be.js
    similarity index 99%
    rename from docs/.vuepress/dist/assets/staking.html.350e1ee5.js
    rename to docs/.vuepress/dist/assets/staking.html.7540b6be.js
    index 75bc88f20..3268fdc4d 100644
    --- a/docs/.vuepress/dist/assets/staking.html.350e1ee5.js
    +++ b/docs/.vuepress/dist/assets/staking.html.7540b6be.js
    @@ -1,4 +1,4 @@
    -import{_ as r,r as e,o as k,c as b,b as t,w as a,a as n,F as m,d as s}from"./app.cfdf84e7.js";const d={},w=n("h1",{id:"staking",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#staking","aria-hidden":"true"},"#"),s(" Staking")],-1),g=n("h2",{id:"holen-sie-sich-aktuelle-validatoren",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#holen-sie-sich-aktuelle-validatoren","aria-hidden":"true"},"#"),s(" Holen Sie sich aktuelle Validatoren")],-1),y=n("p",null,"Wir k\xF6nnen SOL einsetzen und Belohnungen verdienen, wenn wir helfen, das Netzwerk zu sichern. Zum Abstecken delegieren wir SOL an Validatoren, die wiederum Transaktionen verarbeiten.",-1),h=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" clusterApiUrl"),n("span",{class:"token punctuation"},","),s(" Connection "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(`
    +import{_ as r,r as e,o as k,c as b,b as t,w as a,a as n,F as m,d as s}from"./app.2fbb9e96.js";const d={},w=n("h1",{id:"staking",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#staking","aria-hidden":"true"},"#"),s(" Staking")],-1),g=n("h2",{id:"holen-sie-sich-aktuelle-validatoren",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#holen-sie-sich-aktuelle-validatoren","aria-hidden":"true"},"#"),s(" Holen Sie sich aktuelle Validatoren")],-1),y=n("p",null,"Wir k\xF6nnen SOL einsetzen und Belohnungen verdienen, wenn wir helfen, das Netzwerk zu sichern. Zum Abstecken delegieren wir SOL an Validatoren, die wiederum Transaktionen verarbeiten.",-1),h=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" clusterApiUrl"),n("span",{class:"token punctuation"},","),s(" Connection "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(`
     
     `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(`
       `),n("span",{class:"token keyword"},"const"),s(" connection "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"clusterApiUrl"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"devnet"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token string"},'"confirmed"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
    diff --git a/docs/.vuepress/dist/assets/staking.html.2985c0ca.js b/docs/.vuepress/dist/assets/staking.html.b453dc6b.js
    similarity index 99%
    rename from docs/.vuepress/dist/assets/staking.html.2985c0ca.js
    rename to docs/.vuepress/dist/assets/staking.html.b453dc6b.js
    index 34ace40e7..b3bd38fda 100644
    --- a/docs/.vuepress/dist/assets/staking.html.2985c0ca.js
    +++ b/docs/.vuepress/dist/assets/staking.html.b453dc6b.js
    @@ -1,4 +1,4 @@
    -import{_ as r,r as e,o as k,c as b,b as t,w as a,a as n,F as m,d as s}from"./app.cfdf84e7.js";const d={},g=n("h1",{id:"staking",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#staking","aria-hidden":"true"},"#"),s(" Staking")],-1),w=n("h2",{id:"obtenir-les-validateurs-actuels",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#obtenir-les-validateurs-actuels","aria-hidden":"true"},"#"),s(" Obtenir les Validateurs Actuels")],-1),y=n("p",null,"Il est possible de staker des SOL et d'obtenir des r\xE9compenses en aidant \xE0 s\xE9curiser le r\xE9seau. Pour staker, nous d\xE9l\xE9guons les SOL \xE0 des validateurs qui, \xE0 leur tour, traitent les transactions.",-1),h=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" clusterApiUrl"),n("span",{class:"token punctuation"},","),s(" Connection "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(`
    +import{_ as r,r as e,o as k,c as b,b as t,w as a,a as n,F as m,d as s}from"./app.2fbb9e96.js";const d={},g=n("h1",{id:"staking",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#staking","aria-hidden":"true"},"#"),s(" Staking")],-1),w=n("h2",{id:"obtenir-les-validateurs-actuels",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#obtenir-les-validateurs-actuels","aria-hidden":"true"},"#"),s(" Obtenir les Validateurs Actuels")],-1),y=n("p",null,"Il est possible de staker des SOL et d'obtenir des r\xE9compenses en aidant \xE0 s\xE9curiser le r\xE9seau. Pour staker, nous d\xE9l\xE9guons les SOL \xE0 des validateurs qui, \xE0 leur tour, traitent les transactions.",-1),h=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" clusterApiUrl"),n("span",{class:"token punctuation"},","),s(" Connection "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(`
     
     `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(`
       `),n("span",{class:"token keyword"},"const"),s(" connection "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"clusterApiUrl"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"devnet"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token string"},'"confirmed"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
    diff --git a/docs/.vuepress/dist/assets/staking.html.c0d58ac7.js b/docs/.vuepress/dist/assets/staking.html.d08e4599.js
    similarity index 99%
    rename from docs/.vuepress/dist/assets/staking.html.c0d58ac7.js
    rename to docs/.vuepress/dist/assets/staking.html.d08e4599.js
    index b914216d7..95b214545 100644
    --- a/docs/.vuepress/dist/assets/staking.html.c0d58ac7.js
    +++ b/docs/.vuepress/dist/assets/staking.html.d08e4599.js
    @@ -1,4 +1,4 @@
    -import{_ as l,r as o,o as u,c as i,a,b as s,w as c,F as r,e,d as n}from"./app.cfdf84e7.js";const k={},b=e(`

    Staking (Stake Etme)

    Get Current Validators (Ge\xE7erli Validator\u2019lar\u0131 Getirme)

    SOL'u stake edebilir ve a\u011F\u0131n g\xFCvenli\u011Fini sa\u011Flamaya yard\u0131mc\u0131 oldu\u011Fumuz i\xE7in \xF6d\xFCller kazanabiliriz. Stake etmek i\xE7in, SOL'u s\u0131rayla i\u015Flemleri i\u015Fleyen validator\u2019lara devrederiz.

    import { clusterApiUrl, Connection } from "@solana/web3.js";
    +import{_ as l,r as o,o as u,c as i,a,b as s,w as c,F as r,e,d as n}from"./app.2fbb9e96.js";const k={},b=e(`

    Staking (Stake Etme)

    Get Current Validators (Ge\xE7erli Validator\u2019lar\u0131 Getirme)

    SOL'u stake edebilir ve a\u011F\u0131n g\xFCvenli\u011Fini sa\u011Flamaya yard\u0131mc\u0131 oldu\u011Fumuz i\xE7in \xF6d\xFCller kazanabiliriz. Stake etmek i\xE7in, SOL'u s\u0131rayla i\u015Flemleri i\u015Fleyen validator\u2019lara devrederiz.

    import { clusterApiUrl, Connection } from "@solana/web3.js";
     
     (async () => {
       const connection = new Connection(clusterApiUrl("devnet"), "confirmed");
    diff --git a/docs/.vuepress/dist/assets/staking.html.e4486924.js b/docs/.vuepress/dist/assets/staking.html.e0773cbc.js
    similarity index 99%
    rename from docs/.vuepress/dist/assets/staking.html.e4486924.js
    rename to docs/.vuepress/dist/assets/staking.html.e0773cbc.js
    index 015e86a21..b31805a1f 100644
    --- a/docs/.vuepress/dist/assets/staking.html.e4486924.js
    +++ b/docs/.vuepress/dist/assets/staking.html.e0773cbc.js
    @@ -1,4 +1,4 @@
    -import{_ as r,r as e,o as k,c as b,b as t,w as a,a as n,F as m,d as s}from"./app.cfdf84e7.js";const d={},w=n("h1",{id:"staking",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#staking","aria-hidden":"true"},"#"),s(" Staking")],-1),g=n("h2",{id:"get-current-validators",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#get-current-validators","aria-hidden":"true"},"#"),s(" Get Current Validators")],-1),y=n("p",null,"We can stake SOL and earn rewards for helping secure the network. To stake, we delegate SOL to validators who in turn process transactions.",-1),h=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" clusterApiUrl"),n("span",{class:"token punctuation"},","),s(" Connection "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(`
    +import{_ as r,r as e,o as k,c as b,b as t,w as a,a as n,F as m,d as s}from"./app.2fbb9e96.js";const d={},w=n("h1",{id:"staking",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#staking","aria-hidden":"true"},"#"),s(" Staking")],-1),g=n("h2",{id:"get-current-validators",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#get-current-validators","aria-hidden":"true"},"#"),s(" Get Current Validators")],-1),y=n("p",null,"We can stake SOL and earn rewards for helping secure the network. To stake, we delegate SOL to validators who in turn process transactions.",-1),h=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" clusterApiUrl"),n("span",{class:"token punctuation"},","),s(" Connection "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(`
     
     `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(`
       `),n("span",{class:"token keyword"},"const"),s(" connection "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"clusterApiUrl"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"devnet"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token string"},'"confirmed"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
    diff --git a/docs/.vuepress/dist/assets/staking.html.6f06e74b.js b/docs/.vuepress/dist/assets/staking.html.f5dd8fb8.js
    similarity index 99%
    rename from docs/.vuepress/dist/assets/staking.html.6f06e74b.js
    rename to docs/.vuepress/dist/assets/staking.html.f5dd8fb8.js
    index 1b84b713e..63b6a9f8b 100644
    --- a/docs/.vuepress/dist/assets/staking.html.6f06e74b.js
    +++ b/docs/.vuepress/dist/assets/staking.html.f5dd8fb8.js
    @@ -1,4 +1,4 @@
    -import{_ as r,r as e,o as k,c as b,b as t,w as a,a as n,F as m,d as s}from"./app.cfdf84e7.js";const d={},w=n("h1",{id:"staking",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#staking","aria-hidden":"true"},"#"),s(" Staking")],-1),g=n("h2",{id:"\u0E2B\u0E32\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25-validators-\u0E43\u0E19\u0E1B\u0E31\u0E08\u0E08\u0E38\u0E1A\u0E31\u0E19",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E2B\u0E32\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25-validators-\u0E43\u0E19\u0E1B\u0E31\u0E08\u0E08\u0E38\u0E1A\u0E31\u0E19","aria-hidden":"true"},"#"),s(" \u0E2B\u0E32\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25 Validators \u0E43\u0E19\u0E1B\u0E31\u0E08\u0E08\u0E38\u0E1A\u0E31\u0E19")],-1),y=n("p",null,"\u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 stake SOL \u0E41\u0E25\u0E30\u0E23\u0E31\u0E1A rewards \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E01\u0E32\u0E23\u0E0A\u0E48\u0E27\u0E22\u0E43\u0E2B\u0E49 network \u0E21\u0E35\u0E04\u0E27\u0E32\u0E21\u0E1B\u0E25\u0E2D\u0E14\u0E20\u0E31\u0E22\u0E21\u0E32\u0E01\u0E02\u0E36\u0E49\u0E19 \u0E43\u0E19\u0E01\u0E32\u0E23 stake \u0E40\u0E23\u0E32\u0E08\u0E30 delegate SOL \u0E44\u0E1B\u0E17\u0E35\u0E48 validators \u0E17\u0E35\u0E48\u0E21\u0E35\u0E2B\u0E19\u0E49\u0E32\u0E17\u0E35\u0E48\u0E1B\u0E23\u0E30\u0E21\u0E27\u0E25\u0E1C\u0E25 transactions",-1),h=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" clusterApiUrl"),n("span",{class:"token punctuation"},","),s(" Connection "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(`
    +import{_ as r,r as e,o as k,c as b,b as t,w as a,a as n,F as m,d as s}from"./app.2fbb9e96.js";const d={},w=n("h1",{id:"staking",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#staking","aria-hidden":"true"},"#"),s(" Staking")],-1),g=n("h2",{id:"\u0E2B\u0E32\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25-validators-\u0E43\u0E19\u0E1B\u0E31\u0E08\u0E08\u0E38\u0E1A\u0E31\u0E19",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E2B\u0E32\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25-validators-\u0E43\u0E19\u0E1B\u0E31\u0E08\u0E08\u0E38\u0E1A\u0E31\u0E19","aria-hidden":"true"},"#"),s(" \u0E2B\u0E32\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25 Validators \u0E43\u0E19\u0E1B\u0E31\u0E08\u0E08\u0E38\u0E1A\u0E31\u0E19")],-1),y=n("p",null,"\u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 stake SOL \u0E41\u0E25\u0E30\u0E23\u0E31\u0E1A rewards \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E01\u0E32\u0E23\u0E0A\u0E48\u0E27\u0E22\u0E43\u0E2B\u0E49 network \u0E21\u0E35\u0E04\u0E27\u0E32\u0E21\u0E1B\u0E25\u0E2D\u0E14\u0E20\u0E31\u0E22\u0E21\u0E32\u0E01\u0E02\u0E36\u0E49\u0E19 \u0E43\u0E19\u0E01\u0E32\u0E23 stake \u0E40\u0E23\u0E32\u0E08\u0E30 delegate SOL \u0E44\u0E1B\u0E17\u0E35\u0E48 validators \u0E17\u0E35\u0E48\u0E21\u0E35\u0E2B\u0E19\u0E49\u0E32\u0E17\u0E35\u0E48\u0E1B\u0E23\u0E30\u0E21\u0E27\u0E25\u0E1C\u0E25 transactions",-1),h=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" clusterApiUrl"),n("span",{class:"token punctuation"},","),s(" Connection "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(`
     
     `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(`
       `),n("span",{class:"token keyword"},"const"),s(" connection "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"clusterApiUrl"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"devnet"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token string"},'"confirmed"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
    diff --git a/docs/.vuepress/dist/assets/staking.html.ba5f3b69.js b/docs/.vuepress/dist/assets/staking.html.ff32fca8.js
    similarity index 99%
    rename from docs/.vuepress/dist/assets/staking.html.ba5f3b69.js
    rename to docs/.vuepress/dist/assets/staking.html.ff32fca8.js
    index 75f709035..2b25a8904 100644
    --- a/docs/.vuepress/dist/assets/staking.html.ba5f3b69.js
    +++ b/docs/.vuepress/dist/assets/staking.html.ff32fca8.js
    @@ -1,4 +1,4 @@
    -import{_ as r,r as e,o as k,c as b,b as t,w as a,a as n,F as m,d as s}from"./app.cfdf84e7.js";const d={},g=n("h1",{id:"staking",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#staking","aria-hidden":"true"},"#"),s(" Staking")],-1),w=n("h2",{id:"truy-van-danh-sach-validators-hien-tai",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#truy-van-danh-sach-validators-hien-tai","aria-hidden":"true"},"#"),s(" Truy v\u1EA5n danh s\xE1ch Validators hi\u1EC7n t\u1EA1i")],-1),y=n("p",null,"Ch\xFAng ta c\xF3 th\u1EC3 stake SOL v\xE0 ki\u1EBFm ph\u1EA7n th\u01B0\u1EDFng cho vi\u1EC7c n\xE2ng cao an to\xE0n m\u1EA1ng l\u01B0\u1EDBi. \u0110\u1EC3 stake, b\u1EA1n ph\u1EA3i u\u1EF7 quy\u1EC1n SOL c\xF3 c\xE1c validators ng\u01B0\u1EDDi s\u1EBD th\u1EF1c hi\u1EC7n vi\u1EC7c x\u1EED l\xFD c\xE1c giao d\u1ECBch.",-1),h=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" clusterApiUrl"),n("span",{class:"token punctuation"},","),s(" Connection "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(`
    +import{_ as r,r as e,o as k,c as b,b as t,w as a,a as n,F as m,d as s}from"./app.2fbb9e96.js";const d={},g=n("h1",{id:"staking",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#staking","aria-hidden":"true"},"#"),s(" Staking")],-1),w=n("h2",{id:"truy-van-danh-sach-validators-hien-tai",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#truy-van-danh-sach-validators-hien-tai","aria-hidden":"true"},"#"),s(" Truy v\u1EA5n danh s\xE1ch Validators hi\u1EC7n t\u1EA1i")],-1),y=n("p",null,"Ch\xFAng ta c\xF3 th\u1EC3 stake SOL v\xE0 ki\u1EBFm ph\u1EA7n th\u01B0\u1EDFng cho vi\u1EC7c n\xE2ng cao an to\xE0n m\u1EA1ng l\u01B0\u1EDBi. \u0110\u1EC3 stake, b\u1EA1n ph\u1EA3i u\u1EF7 quy\u1EC1n SOL c\xF3 c\xE1c validators ng\u01B0\u1EDDi s\u1EBD th\u1EF1c hi\u1EC7n vi\u1EC7c x\u1EED l\xFD c\xE1c giao d\u1ECBch.",-1),h=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" clusterApiUrl"),n("span",{class:"token punctuation"},","),s(" Connection "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(`
     
     `),n("span",{class:"token punctuation"},"("),n("span",{class:"token keyword"},"async"),s(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token operator"},"=>"),s(),n("span",{class:"token punctuation"},"{"),s(`
       `),n("span",{class:"token keyword"},"const"),s(" connection "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token keyword"},"new"),s(),n("span",{class:"token class-name"},"Connection"),n("span",{class:"token punctuation"},"("),n("span",{class:"token function"},"clusterApiUrl"),n("span",{class:"token punctuation"},"("),n("span",{class:"token string"},'"devnet"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token string"},'"confirmed"'),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(`
    diff --git a/docs/.vuepress/dist/assets/strata.html.ac51818e.js b/docs/.vuepress/dist/assets/strata.html.39f81272.js
    similarity index 99%
    rename from docs/.vuepress/dist/assets/strata.html.ac51818e.js
    rename to docs/.vuepress/dist/assets/strata.html.39f81272.js
    index d9781f3ee..8d56a9890 100644
    --- a/docs/.vuepress/dist/assets/strata.html.ac51818e.js
    +++ b/docs/.vuepress/dist/assets/strata.html.39f81272.js
    @@ -1,4 +1,4 @@
    -import{_ as l,r as p,o as u,c as r,b as t,w as a,a as n,F as i,e as k,d as s}from"./app.cfdf84e7.js";const b={},m=k('

    Strata

    Strata est un protocole permettant de lancer des jetons construit sur Solana. Vous pouvez utiliser Strata pour lancer tout type de jeton fongible, allant des jetons sociaux aux jetons dao et gamefi. Vous pouvez \xE9galement utiliser Strata avec n'importe quel m\xE9canisme de prix fixe pour obtenir un m\xE9canisme de prix dynamique, comme par exemple la CandyMachine de Metaplex.

    Des documents plus d\xE9taill\xE9s sont disponibles ici. Vous pouvez \xE9galement utiliser l'interface graphique (GUI) de Strata Launchpad

    Comment cr\xE9er un jeton enti\xE8rement g\xE9r\xE9

    Un jeton Strata enti\xE8rement g\xE9r\xE9 est un jeton dont la liquidit\xE9 est g\xE9r\xE9e par le protocole. Le r\xE9sultat est que vous obtenez imm\xE9diatement un jeton tradable, sans avoir besoin de pools ou de fournisseurs de liquidit\xE9s. Un jeton enti\xE8rement g\xE9r\xE9 est un jeton spl classique avec des m\xE9tadonn\xE9es de jeton Metaplex et une courbe de liaison (bonding curve) associ\xE9e. La courbe de liaison g\xE8re la liquidit\xE9, le prix et l'offre de ce jeton.

    ',5),d=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` +import{_ as l,r as p,o as u,c as r,b as t,w as a,a as n,F as i,e as k,d as s}from"./app.2fbb9e96.js";const b={},m=k('

    Strata

    Strata est un protocole permettant de lancer des jetons construit sur Solana. Vous pouvez utiliser Strata pour lancer tout type de jeton fongible, allant des jetons sociaux aux jetons dao et gamefi. Vous pouvez \xE9galement utiliser Strata avec n'importe quel m\xE9canisme de prix fixe pour obtenir un m\xE9canisme de prix dynamique, comme par exemple la CandyMachine de Metaplex.

    Des documents plus d\xE9taill\xE9s sont disponibles ici. Vous pouvez \xE9galement utiliser l'interface graphique (GUI) de Strata Launchpad

    Comment cr\xE9er un jeton enti\xE8rement g\xE9r\xE9

    Un jeton Strata enti\xE8rement g\xE9r\xE9 est un jeton dont la liquidit\xE9 est g\xE9r\xE9e par le protocole. Le r\xE9sultat est que vous obtenez imm\xE9diatement un jeton tradable, sans avoir besoin de pools ou de fournisseurs de liquidit\xE9s. Un jeton enti\xE8rement g\xE9r\xE9 est un jeton spl classique avec des m\xE9tadonn\xE9es de jeton Metaplex et une courbe de liaison (bonding curve) associ\xE9e. La courbe de liaison g\xE8re la liquidit\xE9, le prix et l'offre de ce jeton.

    ',5),d=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` SplTokenBonding`),n("span",{class:"token punctuation"},","),s(` ExponentialCurveConfig`),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@strata-foundation/spl-token-bonding"'),n("span",{class:"token punctuation"},";"),s(` diff --git a/docs/.vuepress/dist/assets/strata.html.0fc9f9d8.js b/docs/.vuepress/dist/assets/strata.html.3b66a030.js similarity index 99% rename from docs/.vuepress/dist/assets/strata.html.0fc9f9d8.js rename to docs/.vuepress/dist/assets/strata.html.3b66a030.js index e6d3ae141..fad1740ec 100644 --- a/docs/.vuepress/dist/assets/strata.html.0fc9f9d8.js +++ b/docs/.vuepress/dist/assets/strata.html.3b66a030.js @@ -1,4 +1,4 @@ -import{_ as l,r as p,o as u,c as r,b as t,w as a,a as n,F as i,e as k,d as s}from"./app.cfdf84e7.js";const b={},d=k('

    Strata

    Strata adalah protokol untuk launching token di Solana. Kamu bisa pakai Strata untuk membuat semua jenis fungible token, mulai dari social tokens sampai dao dan gamefi token. Kamu bisa juga compose strata dengan apapun yang menggabungkan mekanisme harga tetap (_fixed price) untuk mendapatkan harga yang dinamis, sebagai contohnya adalah Metaplex CandyMachine.

    Dokumen lebih detail ada disini. Bisa juga gunakan GUI di Strata Launchpad

    Cara Membuat Token Yang Dikendalikan Penuh

    Token Yang Dikendalikan Penuh (fully-managed Strata token) adalah a token dimana liquidity dikendalikan oleh protokol. Hasilnya adalah Anda segera mendapatkan tradeable token, tanpa perlu pool atau penyedia likuiditas. Token yang dikelola sepenuhnya adalah token spl normal dengan metadata token metaplex dan kurva ikatan terkait. Kurva ikatan mengelola likuiditas, harga, dan pasokan token itu.

    ',5),m=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` +import{_ as l,r as p,o as u,c as r,b as t,w as a,a as n,F as i,e as k,d as s}from"./app.2fbb9e96.js";const b={},d=k('

    Strata

    Strata adalah protokol untuk launching token di Solana. Kamu bisa pakai Strata untuk membuat semua jenis fungible token, mulai dari social tokens sampai dao dan gamefi token. Kamu bisa juga compose strata dengan apapun yang menggabungkan mekanisme harga tetap (_fixed price) untuk mendapatkan harga yang dinamis, sebagai contohnya adalah Metaplex CandyMachine.

    Dokumen lebih detail ada disini. Bisa juga gunakan GUI di Strata Launchpad

    Cara Membuat Token Yang Dikendalikan Penuh

    Token Yang Dikendalikan Penuh (fully-managed Strata token) adalah a token dimana liquidity dikendalikan oleh protokol. Hasilnya adalah Anda segera mendapatkan tradeable token, tanpa perlu pool atau penyedia likuiditas. Token yang dikelola sepenuhnya adalah token spl normal dengan metadata token metaplex dan kurva ikatan terkait. Kurva ikatan mengelola likuiditas, harga, dan pasokan token itu.

    ',5),m=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` SplTokenBonding`),n("span",{class:"token punctuation"},","),s(` ExponentialCurveConfig`),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@strata-foundation/spl-token-bonding"'),n("span",{class:"token punctuation"},";"),s(` diff --git a/docs/.vuepress/dist/assets/strata.html.c6b22229.js b/docs/.vuepress/dist/assets/strata.html.70d377de.js similarity index 99% rename from docs/.vuepress/dist/assets/strata.html.c6b22229.js rename to docs/.vuepress/dist/assets/strata.html.70d377de.js index 0b1d7f50b..33a267e47 100644 --- a/docs/.vuepress/dist/assets/strata.html.c6b22229.js +++ b/docs/.vuepress/dist/assets/strata.html.70d377de.js @@ -1,4 +1,4 @@ -import{_ as l,r as p,o as u,c as r,b as t,w as a,a as n,F as i,e as k,d as s}from"./app.cfdf84e7.js";const b={},d=k('

    Strata

    Strata is a protocol for launching tokens built on Solana. You can use Strata to launch any kind of fungible token, ranging from social tokens to dao and gamefi tokens. You can also compose strata with anything that uses fixed price mechanics to get dynamic pricing mechanics, for example the Metaplex CandyMachine.

    More in-depth docs are available here. You can also use the gui at Strata Launchpad

    How to create a fully managed token

    A fully-managed Strata token is a token where the liquidity is managed by the protocol. The upshot is that you immediately get a tradeable token, with no need for pools or liquidity providers. A fully-managed token is a normal spl token with metaplex token metadata and an associated bonding curve. The bonding curve manages the liquidity, pricing, and supply of that token.

    ',5),m=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` +import{_ as l,r as p,o as u,c as r,b as t,w as a,a as n,F as i,e as k,d as s}from"./app.2fbb9e96.js";const b={},d=k('

    Strata

    Strata is a protocol for launching tokens built on Solana. You can use Strata to launch any kind of fungible token, ranging from social tokens to dao and gamefi tokens. You can also compose strata with anything that uses fixed price mechanics to get dynamic pricing mechanics, for example the Metaplex CandyMachine.

    More in-depth docs are available here. You can also use the gui at Strata Launchpad

    How to create a fully managed token

    A fully-managed Strata token is a token where the liquidity is managed by the protocol. The upshot is that you immediately get a tradeable token, with no need for pools or liquidity providers. A fully-managed token is a normal spl token with metaplex token metadata and an associated bonding curve. The bonding curve manages the liquidity, pricing, and supply of that token.

    ',5),m=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` SplTokenBonding`),n("span",{class:"token punctuation"},","),s(` ExponentialCurveConfig`),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@strata-foundation/spl-token-bonding"'),n("span",{class:"token punctuation"},";"),s(` diff --git a/docs/.vuepress/dist/assets/strata.html.134e705d.js b/docs/.vuepress/dist/assets/strata.html.95f9b321.js similarity index 99% rename from docs/.vuepress/dist/assets/strata.html.134e705d.js rename to docs/.vuepress/dist/assets/strata.html.95f9b321.js index 0b1d7f50b..33a267e47 100644 --- a/docs/.vuepress/dist/assets/strata.html.134e705d.js +++ b/docs/.vuepress/dist/assets/strata.html.95f9b321.js @@ -1,4 +1,4 @@ -import{_ as l,r as p,o as u,c as r,b as t,w as a,a as n,F as i,e as k,d as s}from"./app.cfdf84e7.js";const b={},d=k('

    Strata

    Strata is a protocol for launching tokens built on Solana. You can use Strata to launch any kind of fungible token, ranging from social tokens to dao and gamefi tokens. You can also compose strata with anything that uses fixed price mechanics to get dynamic pricing mechanics, for example the Metaplex CandyMachine.

    More in-depth docs are available here. You can also use the gui at Strata Launchpad

    How to create a fully managed token

    A fully-managed Strata token is a token where the liquidity is managed by the protocol. The upshot is that you immediately get a tradeable token, with no need for pools or liquidity providers. A fully-managed token is a normal spl token with metaplex token metadata and an associated bonding curve. The bonding curve manages the liquidity, pricing, and supply of that token.

    ',5),m=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` +import{_ as l,r as p,o as u,c as r,b as t,w as a,a as n,F as i,e as k,d as s}from"./app.2fbb9e96.js";const b={},d=k('

    Strata

    Strata is a protocol for launching tokens built on Solana. You can use Strata to launch any kind of fungible token, ranging from social tokens to dao and gamefi tokens. You can also compose strata with anything that uses fixed price mechanics to get dynamic pricing mechanics, for example the Metaplex CandyMachine.

    More in-depth docs are available here. You can also use the gui at Strata Launchpad

    How to create a fully managed token

    A fully-managed Strata token is a token where the liquidity is managed by the protocol. The upshot is that you immediately get a tradeable token, with no need for pools or liquidity providers. A fully-managed token is a normal spl token with metaplex token metadata and an associated bonding curve. The bonding curve manages the liquidity, pricing, and supply of that token.

    ',5),m=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` SplTokenBonding`),n("span",{class:"token punctuation"},","),s(` ExponentialCurveConfig`),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@strata-foundation/spl-token-bonding"'),n("span",{class:"token punctuation"},";"),s(` diff --git a/docs/.vuepress/dist/assets/strata.html.aa4e8f16.js b/docs/.vuepress/dist/assets/strata.html.98bf58fc.js similarity index 99% rename from docs/.vuepress/dist/assets/strata.html.aa4e8f16.js rename to docs/.vuepress/dist/assets/strata.html.98bf58fc.js index 8f369052b..97063c4e2 100644 --- a/docs/.vuepress/dist/assets/strata.html.aa4e8f16.js +++ b/docs/.vuepress/dist/assets/strata.html.98bf58fc.js @@ -1,4 +1,4 @@ -import{_ as l,r as p,o as u,c as r,b as t,w as a,a as n,F as i,e as k,d as s}from"./app.cfdf84e7.js";const b={},d=k('

    Strata

    Strata \u0E04\u0E37\u0E2D protocol \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E1B\u0E25\u0E48\u0E2D\u0E22\u0E02\u0E32\u0E22 tokens \u0E1A\u0E19 Solana. \u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E43\u0E0A\u0E49 Strata \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E1B\u0E25\u0E48\u0E2D\u0E22\u0E02\u0E32\u0E22 fungible token \u0E43\u0E14\u0E46 \u0E44\u0E21\u0E48\u0E27\u0E48\u0E32\u0E08\u0E30\u0E40\u0E1B\u0E47\u0E19 social tokens \u0E2B\u0E23\u0E37\u0E2D dao \u0E41\u0E25\u0E30 gamefi tokens. \u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E43\u0E0A\u0E49 strata \u0E23\u0E48\u0E27\u0E21\u0E01\u0E31\u0E1A\u0E2D\u0E30\u0E44\u0E23\u0E01\u0E47\u0E15\u0E32\u0E21\u0E17\u0E35\u0E48\u0E21\u0E35\u0E01\u0E32\u0E23\u0E04\u0E34\u0E14\u0E23\u0E32\u0E04\u0E32\u0E41\u0E1A\u0E1A fixed price mechanics \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E43\u0E2B\u0E49\u0E44\u0E14\u0E49 dynamic pricing mechanics \u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E40\u0E0A\u0E48\u0E19 Metaplex CandyMachine.

    \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E40\u0E0A\u0E34\u0E07\u0E25\u0E36\u0E01\u0E44\u0E1B\u0E14\u0E39\u0E44\u0E14\u0E49 \u0E17\u0E35\u0E48\u0E19\u0E35\u0E48. \u0E41\u0E25\u0E30\u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 \u0E43\u0E0A\u0E49 gui \u0E44\u0E14\u0E49\u0E17\u0E35\u0E48 Strata Launchpad

    \u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07 fully managed token

    fully-managed Strata token \u0E04\u0E37\u0E2D token \u0E17\u0E35\u0E48\u0E21\u0E35\u0E01\u0E32\u0E23\u0E08\u0E31\u0E14\u0E01\u0E32\u0E23 liquidity \u0E42\u0E14\u0E22 protocol \u0E02\u0E49\u0E2D\u0E44\u0E14\u0E49\u0E40\u0E1B\u0E23\u0E35\u0E22\u0E1A\u0E04\u0E37\u0E2D\u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E40\u0E1B\u0E34\u0E14\u0E01\u0E32\u0E23 trade token \u0E44\u0E14\u0E49\u0E43\u0E19\u0E17\u0E31\u0E19\u0E17\u0E35\u0E42\u0E14\u0E22\u0E44\u0E21\u0E48\u0E15\u0E49\u0E2D\u0E07\u0E21\u0E35 pools \u0E2B\u0E23\u0E37\u0E2D liquidity providers. \u0E42\u0E14\u0E22\u0E17\u0E35\u0E48 fully-managed token \u0E19\u0E31\u0E49\u0E19\u0E01\u0E47\u0E04\u0E37\u0E2D spl token \u0E17\u0E31\u0E48\u0E27\u0E44\u0E1B\u0E01\u0E31\u0E1A metaplex token metadata \u0E41\u0E25\u0E30 associated bonding curve. \u0E0B\u0E36\u0E48\u0E07 bonding curve \u0E08\u0E30\u0E08\u0E31\u0E14\u0E01\u0E32\u0E23\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07 liquidity, pricing, \u0E41\u0E25\u0E30 supply \u0E02\u0E2D\u0E07 token \u0E19\u0E31\u0E49\u0E19

    ',5),m=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` +import{_ as l,r as p,o as u,c as r,b as t,w as a,a as n,F as i,e as k,d as s}from"./app.2fbb9e96.js";const b={},d=k('

    Strata

    Strata \u0E04\u0E37\u0E2D protocol \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E1B\u0E25\u0E48\u0E2D\u0E22\u0E02\u0E32\u0E22 tokens \u0E1A\u0E19 Solana. \u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E43\u0E0A\u0E49 Strata \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E1B\u0E25\u0E48\u0E2D\u0E22\u0E02\u0E32\u0E22 fungible token \u0E43\u0E14\u0E46 \u0E44\u0E21\u0E48\u0E27\u0E48\u0E32\u0E08\u0E30\u0E40\u0E1B\u0E47\u0E19 social tokens \u0E2B\u0E23\u0E37\u0E2D dao \u0E41\u0E25\u0E30 gamefi tokens. \u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E43\u0E0A\u0E49 strata \u0E23\u0E48\u0E27\u0E21\u0E01\u0E31\u0E1A\u0E2D\u0E30\u0E44\u0E23\u0E01\u0E47\u0E15\u0E32\u0E21\u0E17\u0E35\u0E48\u0E21\u0E35\u0E01\u0E32\u0E23\u0E04\u0E34\u0E14\u0E23\u0E32\u0E04\u0E32\u0E41\u0E1A\u0E1A fixed price mechanics \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E43\u0E2B\u0E49\u0E44\u0E14\u0E49 dynamic pricing mechanics \u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E40\u0E0A\u0E48\u0E19 Metaplex CandyMachine.

    \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E40\u0E0A\u0E34\u0E07\u0E25\u0E36\u0E01\u0E44\u0E1B\u0E14\u0E39\u0E44\u0E14\u0E49 \u0E17\u0E35\u0E48\u0E19\u0E35\u0E48. \u0E41\u0E25\u0E30\u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 \u0E43\u0E0A\u0E49 gui \u0E44\u0E14\u0E49\u0E17\u0E35\u0E48 Strata Launchpad

    \u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07 fully managed token

    fully-managed Strata token \u0E04\u0E37\u0E2D token \u0E17\u0E35\u0E48\u0E21\u0E35\u0E01\u0E32\u0E23\u0E08\u0E31\u0E14\u0E01\u0E32\u0E23 liquidity \u0E42\u0E14\u0E22 protocol \u0E02\u0E49\u0E2D\u0E44\u0E14\u0E49\u0E40\u0E1B\u0E23\u0E35\u0E22\u0E1A\u0E04\u0E37\u0E2D\u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E40\u0E1B\u0E34\u0E14\u0E01\u0E32\u0E23 trade token \u0E44\u0E14\u0E49\u0E43\u0E19\u0E17\u0E31\u0E19\u0E17\u0E35\u0E42\u0E14\u0E22\u0E44\u0E21\u0E48\u0E15\u0E49\u0E2D\u0E07\u0E21\u0E35 pools \u0E2B\u0E23\u0E37\u0E2D liquidity providers. \u0E42\u0E14\u0E22\u0E17\u0E35\u0E48 fully-managed token \u0E19\u0E31\u0E49\u0E19\u0E01\u0E47\u0E04\u0E37\u0E2D spl token \u0E17\u0E31\u0E48\u0E27\u0E44\u0E1B\u0E01\u0E31\u0E1A metaplex token metadata \u0E41\u0E25\u0E30 associated bonding curve. \u0E0B\u0E36\u0E48\u0E07 bonding curve \u0E08\u0E30\u0E08\u0E31\u0E14\u0E01\u0E32\u0E23\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07 liquidity, pricing, \u0E41\u0E25\u0E30 supply \u0E02\u0E2D\u0E07 token \u0E19\u0E31\u0E49\u0E19

    ',5),m=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` SplTokenBonding`),n("span",{class:"token punctuation"},","),s(` ExponentialCurveConfig`),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@strata-foundation/spl-token-bonding"'),n("span",{class:"token punctuation"},";"),s(` diff --git a/docs/.vuepress/dist/assets/strata.html.83f9132b.js b/docs/.vuepress/dist/assets/strata.html.bd864fcf.js similarity index 99% rename from docs/.vuepress/dist/assets/strata.html.83f9132b.js rename to docs/.vuepress/dist/assets/strata.html.bd864fcf.js index b10d50215..acd9b8daf 100644 --- a/docs/.vuepress/dist/assets/strata.html.83f9132b.js +++ b/docs/.vuepress/dist/assets/strata.html.bd864fcf.js @@ -1,4 +1,4 @@ -import{_ as l,r as p,o as u,c as r,b as t,w as a,a as n,F as i,e as k,d as s}from"./app.cfdf84e7.js";const b={},d=k('

    Strata

    Strata ist ein Protokoll zum Starten von Token, das auf Solana basiert. Sie k\xF6nnen Strata verwenden, um jede Art von fungiblen Token zu starten, von sozialen Token bis hin zu Dao- und Gamefi-Token. Sie k\xF6nnen auch Schichten mit allem zusammenstellen, das Festpreismechanismen verwendet, um dynamische Preismechanismen wie z. B. die Metaplex CandyMachine zu erhalten.

    Ausf\xFChrlichere Dokumente sind hier verf\xFCgbar . Sie k\xF6nnen auch die GUI unter Strata Launchpad verwenden.

    So erstellen Sie ein vollst\xE4ndig verwaltetes Token

    Ein vollst\xE4ndig verwalteter Strata-Token ist ein Token, bei dem die Liquidit\xE4t durch das Protokoll verwaltet wird. Das Ergebnis ist, dass Sie sofort einen handelbaren Token erhalten, ohne dass Pools oder Liquidit\xE4tsanbieter erforderlich sind. Ein vollst\xE4ndig verwaltetes Token ist ein normales spl-Token mit Metaplex-Token-Metadaten und einer zugeh\xF6rigen Bindungskurve. Die Bindungskurve verwaltet die Liquidit\xE4t, die Preisgestaltung und das Angebot dieses Tokens.

    ',5),m=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` +import{_ as l,r as p,o as u,c as r,b as t,w as a,a as n,F as i,e as k,d as s}from"./app.2fbb9e96.js";const b={},d=k('

    Strata

    Strata ist ein Protokoll zum Starten von Token, das auf Solana basiert. Sie k\xF6nnen Strata verwenden, um jede Art von fungiblen Token zu starten, von sozialen Token bis hin zu Dao- und Gamefi-Token. Sie k\xF6nnen auch Schichten mit allem zusammenstellen, das Festpreismechanismen verwendet, um dynamische Preismechanismen wie z. B. die Metaplex CandyMachine zu erhalten.

    Ausf\xFChrlichere Dokumente sind hier verf\xFCgbar . Sie k\xF6nnen auch die GUI unter Strata Launchpad verwenden.

    So erstellen Sie ein vollst\xE4ndig verwaltetes Token

    Ein vollst\xE4ndig verwalteter Strata-Token ist ein Token, bei dem die Liquidit\xE4t durch das Protokoll verwaltet wird. Das Ergebnis ist, dass Sie sofort einen handelbaren Token erhalten, ohne dass Pools oder Liquidit\xE4tsanbieter erforderlich sind. Ein vollst\xE4ndig verwaltetes Token ist ein normales spl-Token mit Metaplex-Token-Metadaten und einer zugeh\xF6rigen Bindungskurve. Die Bindungskurve verwaltet die Liquidit\xE4t, die Preisgestaltung und das Angebot dieses Tokens.

    ',5),m=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` SplTokenBonding`),n("span",{class:"token punctuation"},","),s(` ExponentialCurveConfig`),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@strata-foundation/spl-token-bonding"'),n("span",{class:"token punctuation"},";"),s(` diff --git a/docs/.vuepress/dist/assets/switchboard.html.db9555dc.js b/docs/.vuepress/dist/assets/switchboard.html.2054dd93.js similarity index 98% rename from docs/.vuepress/dist/assets/switchboard.html.db9555dc.js rename to docs/.vuepress/dist/assets/switchboard.html.2054dd93.js index 610fd96e2..ef9ec9c0f 100644 --- a/docs/.vuepress/dist/assets/switchboard.html.db9555dc.js +++ b/docs/.vuepress/dist/assets/switchboard.html.2054dd93.js @@ -1,4 +1,4 @@ -import{_ as u,r as p,o as r,c as i,a as n,b as a,w as t,F as k,d as s,e as b}from"./app.cfdf84e7.js";const m={},d=n("h1",{id:"switchboard",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#switchboard","aria-hidden":"true"},"#"),s(" Switchboard")],-1),y=n("p",null,"Switchboard is an Oracle protocol that enables developers to source data on-chain for a variety of use cases such as price feeds, NFT floor prices, sport statistics, or even verifiable randomness. In a general sense, Switchboard is an off-chain resource developers can invoke to bridge high integrity data on-chain and power the next generation of web3 and DeFi.",-1),f=n("h2",{id:"data-feeds",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#data-feeds","aria-hidden":"true"},"#"),s(" Data Feeds")],-1),h=s("Switchboard provides a JavaScript/TypeScript library called "),g=n("strong",null,"@switchboard-xyz/switchboard-v2",-1),w=s(" . This library can be used to reach On-chain data from existing data feeds or publish your own custom feeds. Learn more about this "),_={href:"https://www.npmjs.com/package/@switchboard-xyz/switchboard-v2",target:"_blank",rel:"noopener noreferrer"},v=s("here"),A=n("h3",{id:"read-data-from-an-aggregator-feed",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#read-data-from-an-aggregator-feed","aria-hidden":"true"},"#"),s(" Read data from an aggregator feed")],-1),x=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` +import{_ as u,r as p,o as r,c as i,a as n,b as a,w as t,F as k,d as s,e as b}from"./app.2fbb9e96.js";const m={},d=n("h1",{id:"switchboard",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#switchboard","aria-hidden":"true"},"#"),s(" Switchboard")],-1),y=n("p",null,"Switchboard is an Oracle protocol that enables developers to source data on-chain for a variety of use cases such as price feeds, NFT floor prices, sport statistics, or even verifiable randomness. In a general sense, Switchboard is an off-chain resource developers can invoke to bridge high integrity data on-chain and power the next generation of web3 and DeFi.",-1),f=n("h2",{id:"data-feeds",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#data-feeds","aria-hidden":"true"},"#"),s(" Data Feeds")],-1),h=s("Switchboard provides a JavaScript/TypeScript library called "),g=n("strong",null,"@switchboard-xyz/switchboard-v2",-1),w=s(" . This library can be used to reach On-chain data from existing data feeds or publish your own custom feeds. Learn more about this "),_={href:"https://www.npmjs.com/package/@switchboard-xyz/switchboard-v2",target:"_blank",rel:"noopener noreferrer"},v=s("here"),A=n("h3",{id:"read-data-from-an-aggregator-feed",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#read-data-from-an-aggregator-feed","aria-hidden":"true"},"#"),s(" Read data from an aggregator feed")],-1),x=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` clusterApiUrl`),n("span",{class:"token punctuation"},","),s(` Connection`),n("span",{class:"token punctuation"},","),s(` Keypair`),n("span",{class:"token punctuation"},","),s(` @@ -140,8 +140,8 @@ import{_ as u,r as p,o as r,c as i,a as n,b as a,w as t,F as k,d as s,e as b}fro `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token keyword"},"super"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token operator"},"*"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"pub"),s(),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"get_result"),n("span",{class:"token punctuation"},"("),s("ctx"),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token class-name"},"Context"),n("span",{class:"token operator"},"<"),n("span",{class:"token class-name"},"GetResult"),n("span",{class:"token operator"},">"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"->"),s(),n("span",{class:"token class-name"},"Result"),n("span",{class:"token operator"},"<"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},">"),s(),n("span",{class:"token punctuation"},"{"),s(` - `),n("span",{class:"token keyword"},"let"),s(" aggregator "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token operator"},"&"),s("ctx"),n("span",{class:"token punctuation"},"."),s("accounts"),n("span",{class:"token punctuation"},"."),s("aggregator_feed"),n("span",{class:"token punctuation"},";"),s(` - `),n("span",{class:"token keyword"},"let"),s(" val"),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token keyword"},"f64"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"AggregatorAccountData"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new"),n("span",{class:"token punctuation"},"("),s("aggregator"),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),s(` + `),n("span",{class:"token keyword"},"let"),s(" aggregator "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token operator"},"&"),s("ctx"),n("span",{class:"token punctuation"},"."),s("accounts"),n("span",{class:"token punctuation"},"."),s("aggregator_feed"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"load"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token keyword"},"let"),s(" val"),n("span",{class:"token punctuation"},":"),n("span",{class:"token keyword"},"f64"),s(),n("span",{class:"token operator"},"="),s(` aggregator `),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"get_result"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),s(` `),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"try_into"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),n("span",{class:"token punctuation"},";"),s(` @@ -155,13 +155,13 @@ import{_ as u,r as p,o as r,c as i,a as n,b as a,w as t,F as k,d as s,e as b}fro `),n("span",{class:"token keyword"},"pub"),s(),n("span",{class:"token keyword"},"struct"),s(),n("span",{class:"token type-definition class-name"},"GetResult"),n("span",{class:"token operator"},"<"),n("span",{class:"token lifetime-annotation symbol"},"'info"),n("span",{class:"token operator"},">"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"pub"),s(" authority"),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token class-name"},"Signer"),n("span",{class:"token operator"},"<"),n("span",{class:"token lifetime-annotation symbol"},"'info"),n("span",{class:"token operator"},">"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token comment"},"/// CHECK: field is unsafe"),s(` - `),n("span",{class:"token keyword"},"pub"),s(" aggregator_feed"),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token class-name"},"AccountInfo"),n("span",{class:"token operator"},"<"),n("span",{class:"token lifetime-annotation symbol"},"'info"),n("span",{class:"token operator"},">"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token comment"},"// pass aggregator key"),s(` + `),n("span",{class:"token keyword"},"pub"),s(" aggregator_feed"),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token class-name"},"AccountLoader"),n("span",{class:"token operator"},"<"),n("span",{class:"token lifetime-annotation symbol"},"'info"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"AggregatorAccountData"),n("span",{class:"token operator"},">"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token comment"},"// pass aggregator key"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br")])],-1),I=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" aggregator "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token operator"},"&"),s("ctx"),n("span",{class:"token punctuation"},"."),s("accounts"),n("span",{class:"token punctuation"},"."),s("aggregator_feed"),n("span",{class:"token punctuation"},";"),s(` -`),n("span",{class:"token keyword"},"let"),s(" val"),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token keyword"},"f64"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"AggregatorAccountData"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new"),n("span",{class:"token punctuation"},"("),s("aggregator"),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),s(` - `),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"get_result"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),s(` - `),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"try_into"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),V=n("h3",{id:"how-to-create-a-feed-from-the-publisher",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-create-a-feed-from-the-publisher","aria-hidden":"true"},"#"),s(" How to Create a Feed from the Publisher")],-1),j=s("The official Switchboard documentation has an in-depth walk-through of how to create a feed from the publisher. Check it out "),U={href:"https://docs.switchboard.xyz/feed/publisher",target:"_blank",rel:"noopener noreferrer"},z=s("here"),F=s("."),B=n("h2",{id:"oracles",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#oracles","aria-hidden":"true"},"#"),s(" Oracles")],-1),N=n("p",null,"Switchboard's unique feature is that it allows you to create your own oracle and run it locally.",-1),J=n("h3",{id:"create-an-oracle",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#create-an-oracle","aria-hidden":"true"},"#"),s(" Create an oracle")],-1),G=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" anchor "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@project-serum/anchor"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br")])],-1),V=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" aggregator "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token operator"},"&"),s("ctx"),n("span",{class:"token punctuation"},"."),s("accounts"),n("span",{class:"token punctuation"},"."),s("aggregator_feed"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"load"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token keyword"},"let"),s(" val"),n("span",{class:"token punctuation"},":"),n("span",{class:"token keyword"},"f64"),s(),n("span",{class:"token operator"},"="),s(` aggregator + `),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"get_result"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),s(` + `),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"try_into"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),I=n("h3",{id:"how-to-create-a-feed-from-the-publisher",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-create-a-feed-from-the-publisher","aria-hidden":"true"},"#"),s(" How to Create a Feed from the Publisher")],-1),j=s("The official Switchboard documentation has an in-depth walk-through of how to create a feed from the publisher. Check it out "),U={href:"https://docs.switchboard.xyz/feed/publisher",target:"_blank",rel:"noopener noreferrer"},z=s("here"),F=s("."),B=n("h2",{id:"oracles",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#oracles","aria-hidden":"true"},"#"),s(" Oracles")],-1),N=n("p",null,"Switchboard's unique feature is that it allows you to create your own oracle and run it locally.",-1),J=n("h3",{id:"create-an-oracle",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#create-an-oracle","aria-hidden":"true"},"#"),s(" Create an oracle")],-1),G=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" anchor "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@project-serum/anchor"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` loadSwitchboardProgram`),n("span",{class:"token punctuation"},","),s(` @@ -506,4 +506,4 @@ vrf_request_randomness`),n("span",{class:"token punctuation"},"."),n("span",{cla params`),n("span",{class:"token punctuation"},"."),s("permission_bump"),n("span",{class:"token punctuation"},","),s(` state_seeds`),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br")])],-1),dn=n("h2",{id:"resources",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#resources","aria-hidden":"true"},"#"),s(" Resources")],-1),yn=n("h3",{id:"apis-and-libraries",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#apis-and-libraries","aria-hidden":"true"},"#"),s(" APIs and Libraries")],-1),fn={href:"https://docs.switchboard.xyz/api/tasks",target:"_blank",rel:"noopener noreferrer"},hn=s("Switchboard Task Types"),gn={href:"https://docs.rs/switchboard-v2/latest/switchboard_v2/",target:"_blank",rel:"noopener noreferrer"},wn=s("Rust API Docs"),_n={href:"https://docs.switchboard.xyz/api/ts",target:"_blank",rel:"noopener noreferrer"},vn=s("Typescript API Docs"),An={href:"https://docs.switchboard.xyz/api/py",target:"_blank",rel:"noopener noreferrer"},xn=s("Python API Docs"),Rn={href:"https://docs.switchboard.xyz/api/cli",target:"_blank",rel:"noopener noreferrer"},Sn=s("CLI Docs"),qn=n("h3",{id:"examples",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#examples","aria-hidden":"true"},"#"),s(" Examples")],-1),Pn={href:"https://github.com/switchboard-xyz/switchboard-v2/tree/main/packages/feed-walkthrough",target:"_blank",rel:"noopener noreferrer"},Cn=s("[Client] Custom Data Feed Walkthrough"),Kn={href:"https://github.com/switchboard-xyz/switchboard-v2/tree/main/programs/anchor-feed-parser",target:"_blank",rel:"noopener noreferrer"},Tn=s("[Program] Anchor Feed Parser"),En={href:"https://github.com/switchboard-xyz/switchboard-v2/tree/main/programs/anchor-vrf-parser",target:"_blank",rel:"noopener noreferrer"},On=s("[Program] Anchor VRF Parser"),Dn=n("h3",{id:"more-information",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#more-information","aria-hidden":"true"},"#"),s(" More Information")],-1),Ln={href:"https://docs.switchboard.xyz/introduction",target:"_blank",rel:"noopener noreferrer"},In=s("Protocol Documentation"),Vn={href:"https://crawling-cent-d6b.notion.site/The-Switchboard-Deep-Dive-717df6ba0b92465e8118351466257a0f",target:"_blank",rel:"noopener noreferrer"},jn=s("SuperteamDAO Deep Dive");function Un(zn,Fn){const e=p("ExternalLinkIcon"),o=p("SolanaCodeGroupItem"),c=p("SolanaCodeGroup"),l=p("RouterLink");return r(),i(k,null,[d,y,f,n("p",null,[h,g,w,n("a",_,[v,a(e)])]),A,a(c,null,{default:t(()=>[a(o,{title:"TS",active:""},{default:t(()=>[x]),preview:t(()=>[R]),_:1})]),_:1}),S,a(c,null,{default:t(()=>[a(o,{title:"TS",active:""},{default:t(()=>[q]),preview:t(()=>[P]),_:1})]),_:1}),C,n("p",null,[K,T,E,n("a",O,[D,a(e)])]),a(c,null,{default:t(()=>[a(o,{title:"Rust",active:""},{default:t(()=>[L]),preview:t(()=>[I]),_:1})]),_:1}),V,n("p",null,[j,n("a",U,[z,a(e)]),F]),B,N,J,a(c,null,{default:t(()=>[a(o,{title:"TS",active:""},{default:t(()=>[G]),preview:t(()=>[M]),_:1})]),_:1}),Q,Y,H,W,n("p",null,[$,a(l,{to:"/integrations/switchboard.html#oracle-config"},{default:t(()=>[X]),_:1})]),a(c,null,{default:t(()=>[a(o,{title:"TS",active:""},{default:t(()=>[Z]),preview:t(()=>[nn]),_:1})]),_:1}),sn,a(c,null,{default:t(()=>[a(o,{title:"TS",active:""},{default:t(()=>[an]),preview:t(()=>[tn]),_:1}),a(o,{title:"Rust",active:""},{default:t(()=>[en]),preview:t(()=>[on]),_:1})]),_:1}),cn,a(c,null,{default:t(()=>[a(o,{title:"TS",active:""},{default:t(()=>[pn]),preview:t(()=>[ln]),_:1})]),_:1}),un,a(c,null,{default:t(()=>[a(o,{title:"TS",active:""},{default:t(()=>[rn]),preview:t(()=>[kn]),_:1}),a(o,{title:"Rust",active:""},{default:t(()=>[bn]),preview:t(()=>[mn]),_:1})]),_:1}),dn,yn,n("ul",null,[n("li",null,[n("a",fn,[hn,a(e)])]),n("li",null,[n("a",gn,[wn,a(e)])]),n("li",null,[n("a",_n,[vn,a(e)])]),n("li",null,[n("a",An,[xn,a(e)])]),n("li",null,[n("a",Rn,[Sn,a(e)])])]),qn,n("ul",null,[n("li",null,[n("a",Pn,[Cn,a(e)])]),n("li",null,[n("a",Kn,[Tn,a(e)])]),n("li",null,[n("a",En,[On,a(e)])])]),Dn,n("ul",null,[n("li",null,[n("a",Ln,[In,a(e)])]),n("li",null,[n("a",Vn,[jn,a(e)])])])],64)}var Nn=u(m,[["render",Un]]);export{Nn as default}; +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br")])],-1),dn=n("h2",{id:"resources",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#resources","aria-hidden":"true"},"#"),s(" Resources")],-1),yn=n("h3",{id:"apis-and-libraries",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#apis-and-libraries","aria-hidden":"true"},"#"),s(" APIs and Libraries")],-1),fn={href:"https://docs.switchboard.xyz/api/tasks",target:"_blank",rel:"noopener noreferrer"},hn=s("Switchboard Task Types"),gn={href:"https://docs.rs/switchboard-v2/latest/switchboard_v2/",target:"_blank",rel:"noopener noreferrer"},wn=s("Rust API Docs"),_n={href:"https://docs.switchboard.xyz/api/ts",target:"_blank",rel:"noopener noreferrer"},vn=s("Typescript API Docs"),An={href:"https://docs.switchboard.xyz/api/py",target:"_blank",rel:"noopener noreferrer"},xn=s("Python API Docs"),Rn={href:"https://docs.switchboard.xyz/api/cli",target:"_blank",rel:"noopener noreferrer"},Sn=s("CLI Docs"),qn=n("h3",{id:"examples",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#examples","aria-hidden":"true"},"#"),s(" Examples")],-1),Pn={href:"https://github.com/switchboard-xyz/switchboard-v2/tree/main/packages/feed-walkthrough",target:"_blank",rel:"noopener noreferrer"},Cn=s("[Client] Custom Data Feed Walkthrough"),Kn={href:"https://github.com/switchboard-xyz/switchboard-v2/tree/main/programs/anchor-feed-parser",target:"_blank",rel:"noopener noreferrer"},Tn=s("[Program] Anchor Feed Parser"),En={href:"https://github.com/switchboard-xyz/switchboard-v2/tree/main/programs/anchor-vrf-parser",target:"_blank",rel:"noopener noreferrer"},On=s("[Program] Anchor VRF Parser"),Dn=n("h3",{id:"more-information",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#more-information","aria-hidden":"true"},"#"),s(" More Information")],-1),Ln={href:"https://docs.switchboard.xyz/introduction",target:"_blank",rel:"noopener noreferrer"},Vn=s("Protocol Documentation"),In={href:"https://crawling-cent-d6b.notion.site/The-Switchboard-Deep-Dive-717df6ba0b92465e8118351466257a0f",target:"_blank",rel:"noopener noreferrer"},jn=s("SuperteamDAO Deep Dive");function Un(zn,Fn){const e=p("ExternalLinkIcon"),o=p("SolanaCodeGroupItem"),c=p("SolanaCodeGroup"),l=p("RouterLink");return r(),i(k,null,[d,y,f,n("p",null,[h,g,w,n("a",_,[v,a(e)])]),A,a(c,null,{default:t(()=>[a(o,{title:"TS",active:""},{default:t(()=>[x]),preview:t(()=>[R]),_:1})]),_:1}),S,a(c,null,{default:t(()=>[a(o,{title:"TS",active:""},{default:t(()=>[q]),preview:t(()=>[P]),_:1})]),_:1}),C,n("p",null,[K,T,E,n("a",O,[D,a(e)])]),a(c,null,{default:t(()=>[a(o,{title:"Rust",active:""},{default:t(()=>[L]),preview:t(()=>[V]),_:1})]),_:1}),I,n("p",null,[j,n("a",U,[z,a(e)]),F]),B,N,J,a(c,null,{default:t(()=>[a(o,{title:"TS",active:""},{default:t(()=>[G]),preview:t(()=>[M]),_:1})]),_:1}),Q,Y,H,W,n("p",null,[$,a(l,{to:"/integrations/switchboard.html#oracle-config"},{default:t(()=>[X]),_:1})]),a(c,null,{default:t(()=>[a(o,{title:"TS",active:""},{default:t(()=>[Z]),preview:t(()=>[nn]),_:1})]),_:1}),sn,a(c,null,{default:t(()=>[a(o,{title:"TS",active:""},{default:t(()=>[an]),preview:t(()=>[tn]),_:1}),a(o,{title:"Rust",active:""},{default:t(()=>[en]),preview:t(()=>[on]),_:1})]),_:1}),cn,a(c,null,{default:t(()=>[a(o,{title:"TS",active:""},{default:t(()=>[pn]),preview:t(()=>[ln]),_:1})]),_:1}),un,a(c,null,{default:t(()=>[a(o,{title:"TS",active:""},{default:t(()=>[rn]),preview:t(()=>[kn]),_:1}),a(o,{title:"Rust",active:""},{default:t(()=>[bn]),preview:t(()=>[mn]),_:1})]),_:1}),dn,yn,n("ul",null,[n("li",null,[n("a",fn,[hn,a(e)])]),n("li",null,[n("a",gn,[wn,a(e)])]),n("li",null,[n("a",_n,[vn,a(e)])]),n("li",null,[n("a",An,[xn,a(e)])]),n("li",null,[n("a",Rn,[Sn,a(e)])])]),qn,n("ul",null,[n("li",null,[n("a",Pn,[Cn,a(e)])]),n("li",null,[n("a",Kn,[Tn,a(e)])]),n("li",null,[n("a",En,[On,a(e)])])]),Dn,n("ul",null,[n("li",null,[n("a",Ln,[Vn,a(e)])]),n("li",null,[n("a",In,[jn,a(e)])])])],64)}var Nn=u(m,[["render",Un]]);export{Nn as default}; diff --git a/docs/.vuepress/dist/assets/switchboard.html.5d81e6aa.js b/docs/.vuepress/dist/assets/switchboard.html.4cb6706c.js similarity index 98% rename from docs/.vuepress/dist/assets/switchboard.html.5d81e6aa.js rename to docs/.vuepress/dist/assets/switchboard.html.4cb6706c.js index 4c39af3de..90cc59125 100644 --- a/docs/.vuepress/dist/assets/switchboard.html.5d81e6aa.js +++ b/docs/.vuepress/dist/assets/switchboard.html.4cb6706c.js @@ -1,4 +1,4 @@ -import{_ as l,r as p,o as r,c as i,a as n,b as a,w as t,F as k,d as s,e as b}from"./app.cfdf84e7.js";const m={},d=n("h1",{id:"switchboard",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#switchboard","aria-hidden":"true"},"#"),s(" Switchboard")],-1),y=n("p",null,"Switchboard adalah protokol Oracle yang memungkinkan pengembang untuk menarik data on-chain untuk berbagai kasus penggunaan seperti feed harga, harga dasar NFT, statistik olahraga, atau bahkan keacakan yang dapat diverifikasi. Secara umum, Switchboard adalah sumber daya off-chain yang dapat digunakan untuk menjembatani data dengan integritas tinggi secara on-chain dan memberi daya pada web3 dan DeFi.",-1),f=n("h2",{id:"data-feeds",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#data-feeds","aria-hidden":"true"},"#"),s(" Data Feeds")],-1),h=s("Switchboard menyediakan librari JavaScript/TypeScript yang disebut "),g=n("strong",null,"@switchboard-xyz/switchboard-v2",-1),_=s(" . Librari ini bisa digunakan untuk mendapatkan on-chain data dari feeds yang sudah ada atau bisa juga untuk mempublikasikan feeds kustom. Pelajari lebih lanjut "),w={href:"https://www.npmjs.com/package/@switchboard-xyz/switchboard-v2",target:"_blank",rel:"noopener noreferrer"},v=s("here"),A=n("h3",{id:"cara-baca-data-dari-aggregator-feeds",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#cara-baca-data-dari-aggregator-feeds","aria-hidden":"true"},"#"),s(" Cara Baca Data Dari Aggregator Feeds")],-1),x=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` +import{_ as l,r as p,o as r,c as i,a as n,b as a,w as t,F as k,d as s,e as b}from"./app.2fbb9e96.js";const m={},d=n("h1",{id:"switchboard",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#switchboard","aria-hidden":"true"},"#"),s(" Switchboard")],-1),y=n("p",null,"Switchboard adalah protokol Oracle yang memungkinkan pengembang untuk menarik data on-chain untuk berbagai kasus penggunaan seperti feed harga, harga dasar NFT, statistik olahraga, atau bahkan keacakan yang dapat diverifikasi. Secara umum, Switchboard adalah sumber daya off-chain yang dapat digunakan untuk menjembatani data dengan integritas tinggi secara on-chain dan memberi daya pada web3 dan DeFi.",-1),f=n("h2",{id:"data-feeds",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#data-feeds","aria-hidden":"true"},"#"),s(" Data Feeds")],-1),h=s("Switchboard menyediakan librari JavaScript/TypeScript yang disebut "),g=n("strong",null,"@switchboard-xyz/switchboard-v2",-1),_=s(" . Librari ini bisa digunakan untuk mendapatkan on-chain data dari feeds yang sudah ada atau bisa juga untuk mempublikasikan feeds kustom. Pelajari lebih lanjut "),w={href:"https://www.npmjs.com/package/@switchboard-xyz/switchboard-v2",target:"_blank",rel:"noopener noreferrer"},v=s("here"),A=n("h3",{id:"cara-baca-data-dari-aggregator-feeds",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#cara-baca-data-dari-aggregator-feeds","aria-hidden":"true"},"#"),s(" Cara Baca Data Dari Aggregator Feeds")],-1),x=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` clusterApiUrl`),n("span",{class:"token punctuation"},","),s(` Connection`),n("span",{class:"token punctuation"},","),s(` Keypair`),n("span",{class:"token punctuation"},","),s(` @@ -140,8 +140,8 @@ import{_ as l,r as p,o as r,c as i,a as n,b as a,w as t,F as k,d as s,e as b}fro `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token keyword"},"super"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token operator"},"*"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"pub"),s(),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"get_result"),n("span",{class:"token punctuation"},"("),s("ctx"),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token class-name"},"Context"),n("span",{class:"token operator"},"<"),n("span",{class:"token class-name"},"GetResult"),n("span",{class:"token operator"},">"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"->"),s(),n("span",{class:"token class-name"},"Result"),n("span",{class:"token operator"},"<"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},">"),s(),n("span",{class:"token punctuation"},"{"),s(` - `),n("span",{class:"token keyword"},"let"),s(" aggregator "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token operator"},"&"),s("ctx"),n("span",{class:"token punctuation"},"."),s("accounts"),n("span",{class:"token punctuation"},"."),s("aggregator_feed"),n("span",{class:"token punctuation"},";"),s(` - `),n("span",{class:"token keyword"},"let"),s(" val"),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token keyword"},"f64"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"AggregatorAccountData"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new"),n("span",{class:"token punctuation"},"("),s("aggregator"),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),s(` + `),n("span",{class:"token keyword"},"let"),s(" aggregator "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token operator"},"&"),s("ctx"),n("span",{class:"token punctuation"},"."),s("accounts"),n("span",{class:"token punctuation"},"."),s("aggregator_feed"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"load"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token keyword"},"let"),s(" val"),n("span",{class:"token punctuation"},":"),n("span",{class:"token keyword"},"f64"),s(),n("span",{class:"token operator"},"="),s(` aggregator `),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"get_result"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),s(` `),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"try_into"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),n("span",{class:"token punctuation"},";"),s(` @@ -155,12 +155,12 @@ import{_ as l,r as p,o as r,c as i,a as n,b as a,w as t,F as k,d as s,e as b}fro `),n("span",{class:"token keyword"},"pub"),s(),n("span",{class:"token keyword"},"struct"),s(),n("span",{class:"token type-definition class-name"},"GetResult"),n("span",{class:"token operator"},"<"),n("span",{class:"token lifetime-annotation symbol"},"'info"),n("span",{class:"token operator"},">"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"pub"),s(" authority"),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token class-name"},"Signer"),n("span",{class:"token operator"},"<"),n("span",{class:"token lifetime-annotation symbol"},"'info"),n("span",{class:"token operator"},">"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token comment"},"/// CHECK: field is unsafe"),s(` - `),n("span",{class:"token keyword"},"pub"),s(" aggregator_feed"),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token class-name"},"AccountInfo"),n("span",{class:"token operator"},"<"),n("span",{class:"token lifetime-annotation symbol"},"'info"),n("span",{class:"token operator"},">"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token comment"},"// pass aggregator key"),s(` + `),n("span",{class:"token keyword"},"pub"),s(" aggregator_feed"),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token class-name"},"AccountLoader"),n("span",{class:"token operator"},"<"),n("span",{class:"token lifetime-annotation symbol"},"'info"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"AggregatorAccountData"),n("span",{class:"token operator"},">"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token comment"},"// pass aggregator key"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br")])],-1),L=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" aggregator "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token operator"},"&"),s("ctx"),n("span",{class:"token punctuation"},"."),s("accounts"),n("span",{class:"token punctuation"},"."),s("aggregator_feed"),n("span",{class:"token punctuation"},";"),s(` -`),n("span",{class:"token keyword"},"let"),s(" val"),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token keyword"},"f64"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"AggregatorAccountData"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new"),n("span",{class:"token punctuation"},"("),s("aggregator"),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),s(` - `),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"get_result"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),s(` - `),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"try_into"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br")])],-1),L=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" aggregator "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token operator"},"&"),s("ctx"),n("span",{class:"token punctuation"},"."),s("accounts"),n("span",{class:"token punctuation"},"."),s("aggregator_feed"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"load"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token keyword"},"let"),s(" val"),n("span",{class:"token punctuation"},":"),n("span",{class:"token keyword"},"f64"),s(),n("span",{class:"token operator"},"="),s(` aggregator + `),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"get_result"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),s(` + `),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"try_into"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),n("span",{class:"token punctuation"},";"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),V=n("h3",{id:"cara-membuat-a-feeds-dari-publisher",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#cara-membuat-a-feeds-dari-publisher","aria-hidden":"true"},"#"),s(" Cara Membuat a Feeds Dari Publisher")],-1),I=s("Dokumentasi Switchboard resmi memiliki panduan mendalam tentang cara membuat feeds dari penerbit. Cek lebih lanjut "),F={href:"https://docs.switchboard.xyz/feed/publisher",target:"_blank",rel:"noopener noreferrer"},U=s("here"),z=s("."),B=n("h2",{id:"oracles",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#oracles","aria-hidden":"true"},"#"),s(" Oracles")],-1),M=n("p",null,"Fitur unik Switchboard adalah memungkinkan Anda membuat oracle Anda sendiri dan menjalankannya secara lokal.",-1),N=n("h3",{id:"create-an-oracle",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#create-an-oracle","aria-hidden":"true"},"#"),s(" Create an oracle")],-1),J=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" anchor "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@project-serum/anchor"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` diff --git a/docs/.vuepress/dist/assets/switchboard.html.157173ca.js b/docs/.vuepress/dist/assets/switchboard.html.8c428b59.js similarity index 98% rename from docs/.vuepress/dist/assets/switchboard.html.157173ca.js rename to docs/.vuepress/dist/assets/switchboard.html.8c428b59.js index d24d56fba..34b0fcd75 100644 --- a/docs/.vuepress/dist/assets/switchboard.html.157173ca.js +++ b/docs/.vuepress/dist/assets/switchboard.html.8c428b59.js @@ -1,4 +1,4 @@ -import{_ as u,r as p,o as r,c as i,a as n,b as a,w as t,F as k,d as s,e as b}from"./app.cfdf84e7.js";const m={},d=n("h1",{id:"switchboard",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#switchboard","aria-hidden":"true"},"#"),s(" Switchboard")],-1),f=n("p",null,"Switchboard ist ein Oracle-Protokoll, das es Entwicklern erm\xF6glicht, Daten f\xFCr eine Vielzahl von Anwendungsf\xE4llen wie Preis-Feeds, NFT-Mindestpreise, Sportstatistiken oder sogar \xFCberpr\xFCfbare Zuf\xE4lligkeiten on-chain zu beziehen. Im Allgemeinen ist Switchboard eine Off-Chain-Ressource, auf die sich Entwickler berufen k\xF6nnen, um hochintegrierte Daten on-Chain zu \xFCberbr\xFCcken und die n\xE4chste Generation von Web3 und DeFi voranzutreiben.",-1),y=n("h2",{id:"daten-feeds",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#daten-feeds","aria-hidden":"true"},"#"),s(" Daten Feeds")],-1),h=s("Switchboard bietet eine JavaScript/TypeScript-Bibliothek namens "),g=n("strong",null,"@switchboard-xyz/switchboard-v2",-1),w=s(" . Diese Bibliothek kann verwendet werden, um On-Chain-Daten aus vorhandenen Datenfeeds zu erreichen oder Ihre eigenen benutzerdefinierten Feeds zu ver\xF6ffentlichen. Erfahren Sie mehr dar\xFCber "),_={href:"https://www.npmjs.com/package/@switchboard-xyz/switchboard-v2",target:"_blank",rel:"noopener noreferrer"},v=s("hier"),A=n("h3",{id:"daten-aus-einem-aggregator-feed-lesen",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#daten-aus-einem-aggregator-feed-lesen","aria-hidden":"true"},"#"),s(" Daten aus einem Aggregator-Feed lesen")],-1),x=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` +import{_ as u,r as p,o as r,c as i,a as n,b as a,w as t,F as k,d as s,e as b}from"./app.2fbb9e96.js";const m={},d=n("h1",{id:"switchboard",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#switchboard","aria-hidden":"true"},"#"),s(" Switchboard")],-1),f=n("p",null,"Switchboard ist ein Oracle-Protokoll, das es Entwicklern erm\xF6glicht, Daten f\xFCr eine Vielzahl von Anwendungsf\xE4llen wie Preis-Feeds, NFT-Mindestpreise, Sportstatistiken oder sogar \xFCberpr\xFCfbare Zuf\xE4lligkeiten on-chain zu beziehen. Im Allgemeinen ist Switchboard eine Off-Chain-Ressource, auf die sich Entwickler berufen k\xF6nnen, um hochintegrierte Daten on-Chain zu \xFCberbr\xFCcken und die n\xE4chste Generation von Web3 und DeFi voranzutreiben.",-1),y=n("h2",{id:"daten-feeds",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#daten-feeds","aria-hidden":"true"},"#"),s(" Daten Feeds")],-1),h=s("Switchboard bietet eine JavaScript/TypeScript-Bibliothek namens "),g=n("strong",null,"@switchboard-xyz/switchboard-v2",-1),w=s(" . Diese Bibliothek kann verwendet werden, um On-Chain-Daten aus vorhandenen Datenfeeds zu erreichen oder Ihre eigenen benutzerdefinierten Feeds zu ver\xF6ffentlichen. Erfahren Sie mehr dar\xFCber "),_={href:"https://www.npmjs.com/package/@switchboard-xyz/switchboard-v2",target:"_blank",rel:"noopener noreferrer"},v=s("hier"),A=n("h3",{id:"daten-aus-einem-aggregator-feed-lesen",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#daten-aus-einem-aggregator-feed-lesen","aria-hidden":"true"},"#"),s(" Daten aus einem Aggregator-Feed lesen")],-1),x=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` clusterApiUrl`),n("span",{class:"token punctuation"},","),s(` Connection`),n("span",{class:"token punctuation"},","),s(` Keypair`),n("span",{class:"token punctuation"},","),s(` @@ -129,7 +129,7 @@ import{_ as u,r as p,o as r,c as i,a as n,b as a,w as t,F as k,d as s,e as b}fro authority`),n("span",{class:"token operator"},":"),s(" authority"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("aggregatorAccount"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toString"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br")])],-1),E=n("h3",{id:"lesen-sie-daten-aus-einem-aggregator-feed-in-programm",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#lesen-sie-daten-aus-einem-aggregator-feed-in-programm","aria-hidden":"true"},"#"),s(" Lesen Sie Daten aus einem Aggregator-Feed-in-Programm")],-1),K=s("Switchboard bietet eine Kiste namens "),C=n("strong",null,"switchboard_v2",-1),D=s(" Erfahren Sie mehr dar\xFCber "),T={href:"https://docs.rs/switchboard-v2/0.1.10/switchboard_v2/",target:"_blank",rel:"noopener noreferrer"},O=s("hier"),I=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("anchor_lang"),n("span",{class:"token punctuation"},"::"),s("prelude"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token operator"},"*"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br")])],-1),E=n("h3",{id:"lesen-sie-daten-aus-einem-aggregator-feed-in-programm",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#lesen-sie-daten-aus-einem-aggregator-feed-in-programm","aria-hidden":"true"},"#"),s(" Lesen Sie Daten aus einem Aggregator-Feed-in-Programm")],-1),K=s("Switchboard bietet eine Kiste namens "),C=n("strong",null,"switchboard_v2",-1),T=s(" Erfahren Sie mehr dar\xFCber "),D={href:"https://docs.rs/switchboard-v2/0.1.10/switchboard_v2/",target:"_blank",rel:"noopener noreferrer"},O=s("hier"),I=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("anchor_lang"),n("span",{class:"token punctuation"},"::"),s("prelude"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token operator"},"*"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("switchboard_v2"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"AggregatorAccountData"),n("span",{class:"token punctuation"},";"),s(` @@ -140,8 +140,8 @@ import{_ as u,r as p,o as r,c as i,a as n,b as a,w as t,F as k,d as s,e as b}fro `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token keyword"},"super"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token operator"},"*"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"pub"),s(),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"get_result"),n("span",{class:"token punctuation"},"("),s("ctx"),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token class-name"},"Context"),n("span",{class:"token operator"},"<"),n("span",{class:"token class-name"},"GetResult"),n("span",{class:"token operator"},">"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"->"),s(),n("span",{class:"token class-name"},"Result"),n("span",{class:"token operator"},"<"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},">"),s(),n("span",{class:"token punctuation"},"{"),s(` - `),n("span",{class:"token keyword"},"let"),s(" aggregator "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token operator"},"&"),s("ctx"),n("span",{class:"token punctuation"},"."),s("accounts"),n("span",{class:"token punctuation"},"."),s("aggregator_feed"),n("span",{class:"token punctuation"},";"),s(` - `),n("span",{class:"token keyword"},"let"),s(" val"),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token keyword"},"f64"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"AggregatorAccountData"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new"),n("span",{class:"token punctuation"},"("),s("aggregator"),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),s(` + `),n("span",{class:"token keyword"},"let"),s(" aggregator "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token operator"},"&"),s("ctx"),n("span",{class:"token punctuation"},"."),s("accounts"),n("span",{class:"token punctuation"},"."),s("aggregator_feed"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"load"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token keyword"},"let"),s(" val"),n("span",{class:"token punctuation"},":"),n("span",{class:"token keyword"},"f64"),s(),n("span",{class:"token operator"},"="),s(` aggregator `),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"get_result"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),s(` `),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"try_into"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),n("span",{class:"token punctuation"},";"),s(` @@ -155,12 +155,12 @@ import{_ as u,r as p,o as r,c as i,a as n,b as a,w as t,F as k,d as s,e as b}fro `),n("span",{class:"token keyword"},"pub"),s(),n("span",{class:"token keyword"},"struct"),s(),n("span",{class:"token type-definition class-name"},"GetResult"),n("span",{class:"token operator"},"<"),n("span",{class:"token lifetime-annotation symbol"},"'info"),n("span",{class:"token operator"},">"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"pub"),s(" authority"),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token class-name"},"Signer"),n("span",{class:"token operator"},"<"),n("span",{class:"token lifetime-annotation symbol"},"'info"),n("span",{class:"token operator"},">"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token comment"},"/// CHECK: field is unsafe"),s(` - `),n("span",{class:"token keyword"},"pub"),s(" aggregator_feed"),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token class-name"},"AccountInfo"),n("span",{class:"token operator"},"<"),n("span",{class:"token lifetime-annotation symbol"},"'info"),n("span",{class:"token operator"},">"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token comment"},"// pass aggregator key"),s(` + `),n("span",{class:"token keyword"},"pub"),s(" aggregator_feed"),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token class-name"},"AccountLoader"),n("span",{class:"token operator"},"<"),n("span",{class:"token lifetime-annotation symbol"},"'info"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"AggregatorAccountData"),n("span",{class:"token operator"},">"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token comment"},"// pass aggregator key"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br")])],-1),z=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" aggregator "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token operator"},"&"),s("ctx"),n("span",{class:"token punctuation"},"."),s("accounts"),n("span",{class:"token punctuation"},"."),s("aggregator_feed"),n("span",{class:"token punctuation"},";"),s(` -`),n("span",{class:"token keyword"},"let"),s(" val"),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token keyword"},"f64"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"AggregatorAccountData"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new"),n("span",{class:"token punctuation"},"("),s("aggregator"),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),s(` - `),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"get_result"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),s(` - `),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"try_into"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br")])],-1),z=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" aggregator "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token operator"},"&"),s("ctx"),n("span",{class:"token punctuation"},"."),s("accounts"),n("span",{class:"token punctuation"},"."),s("aggregator_feed"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"load"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token keyword"},"let"),s(" val"),n("span",{class:"token punctuation"},":"),n("span",{class:"token keyword"},"f64"),s(),n("span",{class:"token operator"},"="),s(` aggregator + `),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"get_result"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),s(` + `),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"try_into"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),n("span",{class:"token punctuation"},";"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),L=n("h3",{id:"so-erstellen-sie-einen-feed-vom-publisher",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#so-erstellen-sie-einen-feed-vom-publisher","aria-hidden":"true"},"#"),s(" So erstellen Sie einen Feed vom Publisher")],-1),V=s("Die offizielle Switchboard-Dokumentation enth\xE4lt eine ausf\xFChrliche Anleitung zum Erstellen eines Feeds vom Herausgeber. Sehen Sie es sich "),j={href:"https://docs.switchboard.xyz/feed/publisher",target:"_blank",rel:"noopener noreferrer"},F=s("hier"),U=s(" an ."),B=n("h2",{id:"oracles",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#oracles","aria-hidden":"true"},"#"),s(" Oracles")],-1),N=n("p",null,"Die einzigartige Funktion von Switchboard besteht darin, dass Sie Ihr eigenes Orakel erstellen und lokal ausf\xFChren k\xF6nnen.",-1),G=n("h3",{id:"erstelen-eines-oracle",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#erstelen-eines-oracle","aria-hidden":"true"},"#"),s(" Erstelen eines Oracle")],-1),J=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" anchor "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@project-serum/anchor"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -506,4 +506,4 @@ vrf_request_randomness`),n("span",{class:"token punctuation"},"."),n("span",{cla params`),n("span",{class:"token punctuation"},"."),s("permission_bump"),n("span",{class:"token punctuation"},","),s(` state_seeds`),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br")])],-1),dn=n("h2",{id:"resources",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#resources","aria-hidden":"true"},"#"),s(" Resources")],-1),fn=n("h3",{id:"apis-and-libraries",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#apis-and-libraries","aria-hidden":"true"},"#"),s(" APIs and Libraries")],-1),yn={href:"https://docs.switchboard.xyz/api/tasks",target:"_blank",rel:"noopener noreferrer"},hn=s("Switchboard Task Types"),gn={href:"https://docs.rs/switchboard-v2/latest/switchboard_v2/",target:"_blank",rel:"noopener noreferrer"},wn=s("Rust API Docs"),_n={href:"https://docs.switchboard.xyz/api/ts",target:"_blank",rel:"noopener noreferrer"},vn=s("Typescript API Docs"),An={href:"https://docs.switchboard.xyz/api/py",target:"_blank",rel:"noopener noreferrer"},xn=s("Python API Docs"),Sn={href:"https://docs.switchboard.xyz/api/cli",target:"_blank",rel:"noopener noreferrer"},Rn=s("CLI Docs"),Pn=n("h3",{id:"examples",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#examples","aria-hidden":"true"},"#"),s(" Examples")],-1),qn={href:"https://github.com/switchboard-xyz/switchboard-v2/tree/main/packages/feed-walkthrough",target:"_blank",rel:"noopener noreferrer"},En=s("[Client] Custom Data Feed Walkthrough"),Kn={href:"https://github.com/switchboard-xyz/switchboard-v2/tree/main/programs/anchor-feed-parser",target:"_blank",rel:"noopener noreferrer"},Cn=s("[Program] Anchor Feed Parser"),Dn={href:"https://github.com/switchboard-xyz/switchboard-v2/tree/main/programs/anchor-vrf-parser",target:"_blank",rel:"noopener noreferrer"},Tn=s("[Program] Anchor VRF Parser"),On=n("h3",{id:"more-information",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#more-information","aria-hidden":"true"},"#"),s(" More Information")],-1),In={href:"https://docs.switchboard.xyz/introduction",target:"_blank",rel:"noopener noreferrer"},zn=s("Protocol Documentation"),Ln={href:"https://crawling-cent-d6b.notion.site/The-Switchboard-Deep-Dive-717df6ba0b92465e8118351466257a0f",target:"_blank",rel:"noopener noreferrer"},Vn=s("SuperteamDAO Deep Dive");function jn(Fn,Un){const e=p("ExternalLinkIcon"),o=p("SolanaCodeGroupItem"),c=p("SolanaCodeGroup"),l=p("RouterLink");return r(),i(k,null,[d,f,y,n("p",null,[h,g,w,n("a",_,[v,a(e)])]),A,a(c,null,{default:t(()=>[a(o,{title:"TS",active:""},{default:t(()=>[x]),preview:t(()=>[S]),_:1})]),_:1}),R,a(c,null,{default:t(()=>[a(o,{title:"TS",active:""},{default:t(()=>[P]),preview:t(()=>[q]),_:1})]),_:1}),E,n("p",null,[K,C,D,n("a",T,[O,a(e)])]),a(c,null,{default:t(()=>[a(o,{title:"Rust",active:""},{default:t(()=>[I]),preview:t(()=>[z]),_:1})]),_:1}),L,n("p",null,[V,n("a",j,[F,a(e)]),U]),B,N,G,a(c,null,{default:t(()=>[a(o,{title:"TS",active:""},{default:t(()=>[J]),preview:t(()=>[M]),_:1})]),_:1}),Q,H,W,Y,n("p",null,[$,a(l,{to:"/integrations/switchboard.html#oracle-config"},{default:t(()=>[Z]),_:1})]),a(c,null,{default:t(()=>[a(o,{title:"TS",active:""},{default:t(()=>[X]),preview:t(()=>[nn]),_:1})]),_:1}),sn,a(c,null,{default:t(()=>[a(o,{title:"TS",active:""},{default:t(()=>[an]),preview:t(()=>[tn]),_:1}),a(o,{title:"Rust",active:""},{default:t(()=>[en]),preview:t(()=>[on]),_:1})]),_:1}),cn,a(c,null,{default:t(()=>[a(o,{title:"TS",active:""},{default:t(()=>[pn]),preview:t(()=>[ln]),_:1})]),_:1}),un,a(c,null,{default:t(()=>[a(o,{title:"TS",active:""},{default:t(()=>[rn]),preview:t(()=>[kn]),_:1}),a(o,{title:"Rust",active:""},{default:t(()=>[bn]),preview:t(()=>[mn]),_:1})]),_:1}),dn,fn,n("ul",null,[n("li",null,[n("a",yn,[hn,a(e)])]),n("li",null,[n("a",gn,[wn,a(e)])]),n("li",null,[n("a",_n,[vn,a(e)])]),n("li",null,[n("a",An,[xn,a(e)])]),n("li",null,[n("a",Sn,[Rn,a(e)])])]),Pn,n("ul",null,[n("li",null,[n("a",qn,[En,a(e)])]),n("li",null,[n("a",Kn,[Cn,a(e)])]),n("li",null,[n("a",Dn,[Tn,a(e)])])]),On,n("ul",null,[n("li",null,[n("a",In,[zn,a(e)])]),n("li",null,[n("a",Ln,[Vn,a(e)])])])],64)}var Nn=u(m,[["render",jn]]);export{Nn as default}; +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br")])],-1),dn=n("h2",{id:"resources",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#resources","aria-hidden":"true"},"#"),s(" Resources")],-1),fn=n("h3",{id:"apis-and-libraries",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#apis-and-libraries","aria-hidden":"true"},"#"),s(" APIs and Libraries")],-1),yn={href:"https://docs.switchboard.xyz/api/tasks",target:"_blank",rel:"noopener noreferrer"},hn=s("Switchboard Task Types"),gn={href:"https://docs.rs/switchboard-v2/latest/switchboard_v2/",target:"_blank",rel:"noopener noreferrer"},wn=s("Rust API Docs"),_n={href:"https://docs.switchboard.xyz/api/ts",target:"_blank",rel:"noopener noreferrer"},vn=s("Typescript API Docs"),An={href:"https://docs.switchboard.xyz/api/py",target:"_blank",rel:"noopener noreferrer"},xn=s("Python API Docs"),Sn={href:"https://docs.switchboard.xyz/api/cli",target:"_blank",rel:"noopener noreferrer"},Rn=s("CLI Docs"),Pn=n("h3",{id:"examples",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#examples","aria-hidden":"true"},"#"),s(" Examples")],-1),qn={href:"https://github.com/switchboard-xyz/switchboard-v2/tree/main/packages/feed-walkthrough",target:"_blank",rel:"noopener noreferrer"},En=s("[Client] Custom Data Feed Walkthrough"),Kn={href:"https://github.com/switchboard-xyz/switchboard-v2/tree/main/programs/anchor-feed-parser",target:"_blank",rel:"noopener noreferrer"},Cn=s("[Program] Anchor Feed Parser"),Tn={href:"https://github.com/switchboard-xyz/switchboard-v2/tree/main/programs/anchor-vrf-parser",target:"_blank",rel:"noopener noreferrer"},Dn=s("[Program] Anchor VRF Parser"),On=n("h3",{id:"more-information",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#more-information","aria-hidden":"true"},"#"),s(" More Information")],-1),In={href:"https://docs.switchboard.xyz/introduction",target:"_blank",rel:"noopener noreferrer"},zn=s("Protocol Documentation"),Ln={href:"https://crawling-cent-d6b.notion.site/The-Switchboard-Deep-Dive-717df6ba0b92465e8118351466257a0f",target:"_blank",rel:"noopener noreferrer"},Vn=s("SuperteamDAO Deep Dive");function jn(Fn,Un){const e=p("ExternalLinkIcon"),o=p("SolanaCodeGroupItem"),c=p("SolanaCodeGroup"),l=p("RouterLink");return r(),i(k,null,[d,f,y,n("p",null,[h,g,w,n("a",_,[v,a(e)])]),A,a(c,null,{default:t(()=>[a(o,{title:"TS",active:""},{default:t(()=>[x]),preview:t(()=>[S]),_:1})]),_:1}),R,a(c,null,{default:t(()=>[a(o,{title:"TS",active:""},{default:t(()=>[P]),preview:t(()=>[q]),_:1})]),_:1}),E,n("p",null,[K,C,T,n("a",D,[O,a(e)])]),a(c,null,{default:t(()=>[a(o,{title:"Rust",active:""},{default:t(()=>[I]),preview:t(()=>[z]),_:1})]),_:1}),L,n("p",null,[V,n("a",j,[F,a(e)]),U]),B,N,G,a(c,null,{default:t(()=>[a(o,{title:"TS",active:""},{default:t(()=>[J]),preview:t(()=>[M]),_:1})]),_:1}),Q,H,W,Y,n("p",null,[$,a(l,{to:"/integrations/switchboard.html#oracle-config"},{default:t(()=>[Z]),_:1})]),a(c,null,{default:t(()=>[a(o,{title:"TS",active:""},{default:t(()=>[X]),preview:t(()=>[nn]),_:1})]),_:1}),sn,a(c,null,{default:t(()=>[a(o,{title:"TS",active:""},{default:t(()=>[an]),preview:t(()=>[tn]),_:1}),a(o,{title:"Rust",active:""},{default:t(()=>[en]),preview:t(()=>[on]),_:1})]),_:1}),cn,a(c,null,{default:t(()=>[a(o,{title:"TS",active:""},{default:t(()=>[pn]),preview:t(()=>[ln]),_:1})]),_:1}),un,a(c,null,{default:t(()=>[a(o,{title:"TS",active:""},{default:t(()=>[rn]),preview:t(()=>[kn]),_:1}),a(o,{title:"Rust",active:""},{default:t(()=>[bn]),preview:t(()=>[mn]),_:1})]),_:1}),dn,fn,n("ul",null,[n("li",null,[n("a",yn,[hn,a(e)])]),n("li",null,[n("a",gn,[wn,a(e)])]),n("li",null,[n("a",_n,[vn,a(e)])]),n("li",null,[n("a",An,[xn,a(e)])]),n("li",null,[n("a",Sn,[Rn,a(e)])])]),Pn,n("ul",null,[n("li",null,[n("a",qn,[En,a(e)])]),n("li",null,[n("a",Kn,[Cn,a(e)])]),n("li",null,[n("a",Tn,[Dn,a(e)])])]),On,n("ul",null,[n("li",null,[n("a",In,[zn,a(e)])]),n("li",null,[n("a",Ln,[Vn,a(e)])])])],64)}var Nn=u(m,[["render",jn]]);export{Nn as default}; diff --git a/docs/.vuepress/dist/assets/switchboard.html.5ddc737d.js b/docs/.vuepress/dist/assets/switchboard.html.9c632cc0.js similarity index 98% rename from docs/.vuepress/dist/assets/switchboard.html.5ddc737d.js rename to docs/.vuepress/dist/assets/switchboard.html.9c632cc0.js index 5c062b6dd..9b936288f 100644 --- a/docs/.vuepress/dist/assets/switchboard.html.5ddc737d.js +++ b/docs/.vuepress/dist/assets/switchboard.html.9c632cc0.js @@ -1,4 +1,4 @@ -import{_ as u,r as p,o as r,c as i,a as n,b as a,w as t,F as k,d as s,e as b}from"./app.cfdf84e7.js";const m={},d=n("h1",{id:"switchboard",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#switchboard","aria-hidden":"true"},"#"),s(" Switchboard")],-1),y=n("p",null,"Switchboard \u0E40\u0E1B\u0E47\u0E19 Oracle protocol \u0E17\u0E35\u0E48\u0E17\u0E33\u0E43\u0E2B\u0E49\u0E19\u0E31\u0E01\u0E1E\u0E31\u0E12\u0E19\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E40\u0E1E\u0E34\u0E48\u0E21\u0E41\u0E2B\u0E25\u0E48\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25 on-chain \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19\u0E17\u0E35\u0E48\u0E2B\u0E25\u0E32\u0E01\u0E2B\u0E25\u0E32\u0E22 \u0E40\u0E0A\u0E48\u0E19 price feeds, NFT floor prices, sport statistics, \u0E2B\u0E23\u0E37\u0E2D\u0E41\u0E21\u0E49\u0E41\u0E15\u0E48\u0E01\u0E32\u0E23\u0E2A\u0E38\u0E48\u0E21\u0E17\u0E35\u0E48\u0E15\u0E23\u0E27\u0E08\u0E2A\u0E2D\u0E1A\u0E44\u0E14\u0E49 (verifiable randomness) \u0E43\u0E19\u0E01\u0E23\u0E13\u0E35\u0E17\u0E31\u0E48\u0E27\u0E44\u0E1B Switchboard \u0E01\u0E47\u0E04\u0E37\u0E2D\u0E41\u0E2B\u0E25\u0E48\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25 off-chain \u0E17\u0E35\u0E48\u0E19\u0E31\u0E01\u0E1E\u0E31\u0E12\u0E19\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E40\u0E23\u0E35\u0E22\u0E01\u0E43\u0E0A\u0E49\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E40\u0E0A\u0E37\u0E48\u0E2D\u0E21\u0E42\u0E22\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E17\u0E35\u0E48\u0E40\u0E0A\u0E37\u0E48\u0E2D\u0E16\u0E37\u0E2D\u0E44\u0E14\u0E49\u0E1A\u0E19 on-chain \u0E41\u0E25\u0E30\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E40\u0E1B\u0E47\u0E19\u0E01\u0E33\u0E25\u0E31\u0E07\u0E2A\u0E33\u0E04\u0E31\u0E0D\u0E02\u0E2D\u0E07 web3 \u0E41\u0E25\u0E30 DeFi \u0E43\u0E19\u0E22\u0E38\u0E04\u0E16\u0E31\u0E14\u0E44\u0E1B",-1),f=n("h2",{id:"data-feeds",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#data-feeds","aria-hidden":"true"},"#"),s(" Data Feeds")],-1),h=s("Switchboard \u0E21\u0E35 JavaScript/TypeScript library \u0E40\u0E23\u0E35\u0E22\u0E01\u0E27\u0E48\u0E32 "),g=n("strong",null,"@switchboard-xyz/switchboard-v2",-1),_=s(" . \u0E42\u0E14\u0E22 library \u0E19\u0E35\u0E49\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E43\u0E0A\u0E49\u0E43\u0E19\u0E01\u0E32\u0E23\u0E40\u0E02\u0E49\u0E32\u0E16\u0E36\u0E07 On-chain data \u0E08\u0E32\u0E01 data feeds \u0E17\u0E35\u0E48\u0E21\u0E35\u0E2D\u0E22\u0E39\u0E48\u0E41\u0E25\u0E49\u0E27 \u0E2B\u0E23\u0E37\u0E2D publish feeds \u0E17\u0E35\u0E48\u0E40\u0E23\u0E32\u0E40\u0E25\u0E37\u0E2D\u0E01\u0E21\u0E32\u0E40\u0E2D\u0E07\u0E44\u0E14\u0E49 \u0E40\u0E23\u0E35\u0E22\u0E19\u0E23\u0E39\u0E49\u0E40\u0E1E\u0E34\u0E48\u0E21\u0E40\u0E15\u0E34\u0E21\u0E44\u0E14\u0E49 "),w={href:"https://www.npmjs.com/package/@switchboard-xyz/switchboard-v2",target:"_blank",rel:"noopener noreferrer"},v=s("\u0E17\u0E35\u0E48\u0E19\u0E35\u0E48"),A=n("h3",{id:"\u0E01\u0E32\u0E23\u0E2D\u0E48\u0E32\u0E19\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E08\u0E32\u0E01-aggregator-feed",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E01\u0E32\u0E23\u0E2D\u0E48\u0E32\u0E19\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E08\u0E32\u0E01-aggregator-feed","aria-hidden":"true"},"#"),s(" \u0E01\u0E32\u0E23\u0E2D\u0E48\u0E32\u0E19\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E08\u0E32\u0E01 aggregator feed")],-1),x=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` +import{_ as u,r as p,o as r,c as i,a as n,b as a,w as t,F as k,d as s,e as b}from"./app.2fbb9e96.js";const m={},d=n("h1",{id:"switchboard",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#switchboard","aria-hidden":"true"},"#"),s(" Switchboard")],-1),y=n("p",null,"Switchboard \u0E40\u0E1B\u0E47\u0E19 Oracle protocol \u0E17\u0E35\u0E48\u0E17\u0E33\u0E43\u0E2B\u0E49\u0E19\u0E31\u0E01\u0E1E\u0E31\u0E12\u0E19\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E40\u0E1E\u0E34\u0E48\u0E21\u0E41\u0E2B\u0E25\u0E48\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25 on-chain \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19\u0E17\u0E35\u0E48\u0E2B\u0E25\u0E32\u0E01\u0E2B\u0E25\u0E32\u0E22 \u0E40\u0E0A\u0E48\u0E19 price feeds, NFT floor prices, sport statistics, \u0E2B\u0E23\u0E37\u0E2D\u0E41\u0E21\u0E49\u0E41\u0E15\u0E48\u0E01\u0E32\u0E23\u0E2A\u0E38\u0E48\u0E21\u0E17\u0E35\u0E48\u0E15\u0E23\u0E27\u0E08\u0E2A\u0E2D\u0E1A\u0E44\u0E14\u0E49 (verifiable randomness) \u0E43\u0E19\u0E01\u0E23\u0E13\u0E35\u0E17\u0E31\u0E48\u0E27\u0E44\u0E1B Switchboard \u0E01\u0E47\u0E04\u0E37\u0E2D\u0E41\u0E2B\u0E25\u0E48\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25 off-chain \u0E17\u0E35\u0E48\u0E19\u0E31\u0E01\u0E1E\u0E31\u0E12\u0E19\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E40\u0E23\u0E35\u0E22\u0E01\u0E43\u0E0A\u0E49\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E40\u0E0A\u0E37\u0E48\u0E2D\u0E21\u0E42\u0E22\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E17\u0E35\u0E48\u0E40\u0E0A\u0E37\u0E48\u0E2D\u0E16\u0E37\u0E2D\u0E44\u0E14\u0E49\u0E1A\u0E19 on-chain \u0E41\u0E25\u0E30\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E40\u0E1B\u0E47\u0E19\u0E01\u0E33\u0E25\u0E31\u0E07\u0E2A\u0E33\u0E04\u0E31\u0E0D\u0E02\u0E2D\u0E07 web3 \u0E41\u0E25\u0E30 DeFi \u0E43\u0E19\u0E22\u0E38\u0E04\u0E16\u0E31\u0E14\u0E44\u0E1B",-1),f=n("h2",{id:"data-feeds",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#data-feeds","aria-hidden":"true"},"#"),s(" Data Feeds")],-1),h=s("Switchboard \u0E21\u0E35 JavaScript/TypeScript library \u0E40\u0E23\u0E35\u0E22\u0E01\u0E27\u0E48\u0E32 "),g=n("strong",null,"@switchboard-xyz/switchboard-v2",-1),_=s(" . \u0E42\u0E14\u0E22 library \u0E19\u0E35\u0E49\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E43\u0E0A\u0E49\u0E43\u0E19\u0E01\u0E32\u0E23\u0E40\u0E02\u0E49\u0E32\u0E16\u0E36\u0E07 On-chain data \u0E08\u0E32\u0E01 data feeds \u0E17\u0E35\u0E48\u0E21\u0E35\u0E2D\u0E22\u0E39\u0E48\u0E41\u0E25\u0E49\u0E27 \u0E2B\u0E23\u0E37\u0E2D publish feeds \u0E17\u0E35\u0E48\u0E40\u0E23\u0E32\u0E40\u0E25\u0E37\u0E2D\u0E01\u0E21\u0E32\u0E40\u0E2D\u0E07\u0E44\u0E14\u0E49 \u0E40\u0E23\u0E35\u0E22\u0E19\u0E23\u0E39\u0E49\u0E40\u0E1E\u0E34\u0E48\u0E21\u0E40\u0E15\u0E34\u0E21\u0E44\u0E14\u0E49 "),w={href:"https://www.npmjs.com/package/@switchboard-xyz/switchboard-v2",target:"_blank",rel:"noopener noreferrer"},v=s("\u0E17\u0E35\u0E48\u0E19\u0E35\u0E48"),A=n("h3",{id:"\u0E01\u0E32\u0E23\u0E2D\u0E48\u0E32\u0E19\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E08\u0E32\u0E01-aggregator-feed",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E01\u0E32\u0E23\u0E2D\u0E48\u0E32\u0E19\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E08\u0E32\u0E01-aggregator-feed","aria-hidden":"true"},"#"),s(" \u0E01\u0E32\u0E23\u0E2D\u0E48\u0E32\u0E19\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E08\u0E32\u0E01 aggregator feed")],-1),x=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` clusterApiUrl`),n("span",{class:"token punctuation"},","),s(` Connection`),n("span",{class:"token punctuation"},","),s(` Keypair`),n("span",{class:"token punctuation"},","),s(` @@ -129,7 +129,7 @@ import{_ as u,r as p,o as r,c as i,a as n,b as a,w as t,F as k,d as s,e as b}fro authority`),n("span",{class:"token operator"},":"),s(" authority"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},"}"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token builtin"},"console"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"log"),n("span",{class:"token punctuation"},"("),s("aggregatorAccount"),n("span",{class:"token punctuation"},"."),s("publicKey"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"toString"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},")"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br")])],-1),C=n("h3",{id:"read-data-from-an-aggregator-feed-in-program",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#read-data-from-an-aggregator-feed-in-program","aria-hidden":"true"},"#"),s(" Read data from an aggregator feed in program")],-1),K=s("Switchboard \u0E21\u0E35 crate \u0E40\u0E23\u0E35\u0E22\u0E01\u0E27\u0E48\u0E32 "),T=n("strong",null,"switchboard_v2",-1),E=s(" \u0E40\u0E23\u0E35\u0E22\u0E19\u0E23\u0E39\u0E49\u0E40\u0E1E\u0E34\u0E48\u0E21\u0E40\u0E15\u0E34\u0E21\u0E44\u0E14\u0E49 "),O={href:"https://docs.rs/switchboard-v2/0.1.10/switchboard_v2/",target:"_blank",rel:"noopener noreferrer"},D=s("\u0E17\u0E35\u0E48\u0E19\u0E35\u0E48"),V=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("anchor_lang"),n("span",{class:"token punctuation"},"::"),s("prelude"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token operator"},"*"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br")])],-1),C=n("h3",{id:"read-data-from-an-aggregator-feed-in-program",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#read-data-from-an-aggregator-feed-in-program","aria-hidden":"true"},"#"),s(" Read data from an aggregator feed in program")],-1),K=s("Switchboard \u0E21\u0E35 crate \u0E40\u0E23\u0E35\u0E22\u0E01\u0E27\u0E48\u0E32 "),T=n("strong",null,"switchboard_v2",-1),E=s(" \u0E40\u0E23\u0E35\u0E22\u0E19\u0E23\u0E39\u0E49\u0E40\u0E1E\u0E34\u0E48\u0E21\u0E40\u0E15\u0E34\u0E21\u0E44\u0E14\u0E49 "),O={href:"https://docs.rs/switchboard-v2/0.1.10/switchboard_v2/",target:"_blank",rel:"noopener noreferrer"},D=s("\u0E17\u0E35\u0E48\u0E19\u0E35\u0E48"),L=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("anchor_lang"),n("span",{class:"token punctuation"},"::"),s("prelude"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token operator"},"*"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token namespace"},[s("switchboard_v2"),n("span",{class:"token punctuation"},"::")]),n("span",{class:"token class-name"},"AggregatorAccountData"),n("span",{class:"token punctuation"},";"),s(` @@ -140,8 +140,8 @@ import{_ as u,r as p,o as r,c as i,a as n,b as a,w as t,F as k,d as s,e as b}fro `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token keyword"},"super"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token operator"},"*"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"pub"),s(),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"get_result"),n("span",{class:"token punctuation"},"("),s("ctx"),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token class-name"},"Context"),n("span",{class:"token operator"},"<"),n("span",{class:"token class-name"},"GetResult"),n("span",{class:"token operator"},">"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"->"),s(),n("span",{class:"token class-name"},"Result"),n("span",{class:"token operator"},"<"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},">"),s(),n("span",{class:"token punctuation"},"{"),s(` - `),n("span",{class:"token keyword"},"let"),s(" aggregator "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token operator"},"&"),s("ctx"),n("span",{class:"token punctuation"},"."),s("accounts"),n("span",{class:"token punctuation"},"."),s("aggregator_feed"),n("span",{class:"token punctuation"},";"),s(` - `),n("span",{class:"token keyword"},"let"),s(" val"),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token keyword"},"f64"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"AggregatorAccountData"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new"),n("span",{class:"token punctuation"},"("),s("aggregator"),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),s(` + `),n("span",{class:"token keyword"},"let"),s(" aggregator "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token operator"},"&"),s("ctx"),n("span",{class:"token punctuation"},"."),s("accounts"),n("span",{class:"token punctuation"},"."),s("aggregator_feed"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"load"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token keyword"},"let"),s(" val"),n("span",{class:"token punctuation"},":"),n("span",{class:"token keyword"},"f64"),s(),n("span",{class:"token operator"},"="),s(` aggregator `),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"get_result"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),s(` `),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"try_into"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),n("span",{class:"token punctuation"},";"),s(` @@ -155,12 +155,12 @@ import{_ as u,r as p,o as r,c as i,a as n,b as a,w as t,F as k,d as s,e as b}fro `),n("span",{class:"token keyword"},"pub"),s(),n("span",{class:"token keyword"},"struct"),s(),n("span",{class:"token type-definition class-name"},"GetResult"),n("span",{class:"token operator"},"<"),n("span",{class:"token lifetime-annotation symbol"},"'info"),n("span",{class:"token operator"},">"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"pub"),s(" authority"),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token class-name"},"Signer"),n("span",{class:"token operator"},"<"),n("span",{class:"token lifetime-annotation symbol"},"'info"),n("span",{class:"token operator"},">"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token comment"},"/// CHECK: field is unsafe"),s(` - `),n("span",{class:"token keyword"},"pub"),s(" aggregator_feed"),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token class-name"},"AccountInfo"),n("span",{class:"token operator"},"<"),n("span",{class:"token lifetime-annotation symbol"},"'info"),n("span",{class:"token operator"},">"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token comment"},"// pass aggregator key"),s(` + `),n("span",{class:"token keyword"},"pub"),s(" aggregator_feed"),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token class-name"},"AccountLoader"),n("span",{class:"token operator"},"<"),n("span",{class:"token lifetime-annotation symbol"},"'info"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"AggregatorAccountData"),n("span",{class:"token operator"},">"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token comment"},"// pass aggregator key"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br")])],-1),L=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" aggregator "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token operator"},"&"),s("ctx"),n("span",{class:"token punctuation"},"."),s("accounts"),n("span",{class:"token punctuation"},"."),s("aggregator_feed"),n("span",{class:"token punctuation"},";"),s(` -`),n("span",{class:"token keyword"},"let"),s(" val"),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token keyword"},"f64"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"AggregatorAccountData"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new"),n("span",{class:"token punctuation"},"("),s("aggregator"),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),s(` - `),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"get_result"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),s(` - `),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"try_into"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br")])],-1),V=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" aggregator "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token operator"},"&"),s("ctx"),n("span",{class:"token punctuation"},"."),s("accounts"),n("span",{class:"token punctuation"},"."),s("aggregator_feed"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"load"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token keyword"},"let"),s(" val"),n("span",{class:"token punctuation"},":"),n("span",{class:"token keyword"},"f64"),s(),n("span",{class:"token operator"},"="),s(` aggregator + `),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"get_result"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),s(` + `),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"try_into"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),n("span",{class:"token punctuation"},";"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),I=n("h3",{id:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07-feed-\u0E08\u0E32\u0E01-publisher",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07-feed-\u0E08\u0E32\u0E01-publisher","aria-hidden":"true"},"#"),s(" \u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07 Feed \u0E08\u0E32\u0E01 Publisher")],-1),j=s("\u0E43\u0E19 Switchboard documentation \u0E08\u0E30\u0E21\u0E35\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07 feed \u0E08\u0E32\u0E01 publisher \u0E2D\u0E22\u0E48\u0E32\u0E07\u0E25\u0E30\u0E40\u0E2D\u0E35\u0E22\u0E14 \u0E25\u0E2D\u0E07\u0E44\u0E1B\u0E14\u0E39\u0E44\u0E14\u0E49 "),U={href:"https://docs.switchboard.xyz/feed/publisher",target:"_blank",rel:"noopener noreferrer"},z=s("\u0E17\u0E35\u0E48\u0E19\u0E35\u0E48"),F=s("."),B=n("h2",{id:"oracles",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#oracles","aria-hidden":"true"},"#"),s(" Oracles")],-1),N=n("p",null,"\u0E04\u0E38\u0E13\u0E2A\u0E21\u0E1A\u0E31\u0E15\u0E34\u0E1E\u0E34\u0E40\u0E28\u0E29\u0E02\u0E2D\u0E07 Switchboard \u0E04\u0E37\u0E2D\u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E2A\u0E23\u0E49\u0E32\u0E07 oracle \u0E02\u0E2D\u0E07\u0E40\u0E23\u0E32\u0E40\u0E2D\u0E07\u0E44\u0E14\u0E49\u0E17\u0E35\u0E48 local",-1),J=n("h3",{id:"\u0E2A\u0E23\u0E49\u0E32\u0E07-oracle",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E2A\u0E23\u0E49\u0E32\u0E07-oracle","aria-hidden":"true"},"#"),s(" \u0E2A\u0E23\u0E49\u0E32\u0E07 oracle")],-1),G=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" anchor "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@project-serum/anchor"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` @@ -506,4 +506,4 @@ vrf_request_randomness`),n("span",{class:"token punctuation"},"."),n("span",{cla params`),n("span",{class:"token punctuation"},"."),s("permission_bump"),n("span",{class:"token punctuation"},","),s(` state_seeds`),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br")])],-1),dn=n("h2",{id:"\u0E41\u0E2B\u0E25\u0E48\u0E07\u0E04\u0E27\u0E32\u0E21\u0E23\u0E39\u0E49",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E41\u0E2B\u0E25\u0E48\u0E07\u0E04\u0E27\u0E32\u0E21\u0E23\u0E39\u0E49","aria-hidden":"true"},"#"),s(" \u0E41\u0E2B\u0E25\u0E48\u0E07\u0E04\u0E27\u0E32\u0E21\u0E23\u0E39\u0E49")],-1),yn=n("h3",{id:"apis-\u0E41\u0E25\u0E30-libraries",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#apis-\u0E41\u0E25\u0E30-libraries","aria-hidden":"true"},"#"),s(" APIs \u0E41\u0E25\u0E30 Libraries")],-1),fn={href:"https://docs.switchboard.xyz/api/tasks",target:"_blank",rel:"noopener noreferrer"},hn=s("Switchboard Task Types"),gn={href:"https://docs.rs/switchboard-v2/latest/switchboard_v2/",target:"_blank",rel:"noopener noreferrer"},_n=s("Rust API Docs"),wn={href:"https://docs.switchboard.xyz/api/ts",target:"_blank",rel:"noopener noreferrer"},vn=s("Typescript API Docs"),An={href:"https://docs.switchboard.xyz/api/py",target:"_blank",rel:"noopener noreferrer"},xn=s("Python API Docs"),Rn={href:"https://docs.switchboard.xyz/api/cli",target:"_blank",rel:"noopener noreferrer"},Sn=s("CLI Docs"),qn=n("h3",{id:"\u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07","aria-hidden":"true"},"#"),s(" \u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07")],-1),Pn={href:"https://github.com/switchboard-xyz/switchboard-v2/tree/main/packages/feed-walkthrough",target:"_blank",rel:"noopener noreferrer"},Cn=s("[Client] Custom Data Feed Walkthrough"),Kn={href:"https://github.com/switchboard-xyz/switchboard-v2/tree/main/programs/anchor-feed-parser",target:"_blank",rel:"noopener noreferrer"},Tn=s("[Program] Anchor Feed Parser"),En={href:"https://github.com/switchboard-xyz/switchboard-v2/tree/main/programs/anchor-vrf-parser",target:"_blank",rel:"noopener noreferrer"},On=s("[Program] Anchor VRF Parser"),Dn=n("h3",{id:"\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19\u0E46",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19\u0E46","aria-hidden":"true"},"#"),s(" \u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19\u0E46")],-1),Vn={href:"https://docs.switchboard.xyz/introduction",target:"_blank",rel:"noopener noreferrer"},Ln=s("Protocol Documentation"),In={href:"https://crawling-cent-d6b.notion.site/The-Switchboard-Deep-Dive-717df6ba0b92465e8118351466257a0f",target:"_blank",rel:"noopener noreferrer"},jn=s("SuperteamDAO Deep Dive");function Un(zn,Fn){const e=p("ExternalLinkIcon"),o=p("SolanaCodeGroupItem"),c=p("SolanaCodeGroup"),l=p("RouterLink");return r(),i(k,null,[d,y,f,n("p",null,[h,g,_,n("a",w,[v,a(e)])]),A,a(c,null,{default:t(()=>[a(o,{title:"TS",active:""},{default:t(()=>[x]),preview:t(()=>[R]),_:1})]),_:1}),S,a(c,null,{default:t(()=>[a(o,{title:"TS",active:""},{default:t(()=>[q]),preview:t(()=>[P]),_:1})]),_:1}),C,n("p",null,[K,T,E,n("a",O,[D,a(e)])]),a(c,null,{default:t(()=>[a(o,{title:"Rust",active:""},{default:t(()=>[V]),preview:t(()=>[L]),_:1})]),_:1}),I,n("p",null,[j,n("a",U,[z,a(e)]),F]),B,N,J,a(c,null,{default:t(()=>[a(o,{title:"TS",active:""},{default:t(()=>[G]),preview:t(()=>[Q]),_:1})]),_:1}),M,Y,H,W,n("p",null,[$,a(l,{to:"/integrations/switchboard.html#oracle-config"},{default:t(()=>[X]),_:1})]),a(c,null,{default:t(()=>[a(o,{title:"TS",active:""},{default:t(()=>[Z]),preview:t(()=>[nn]),_:1})]),_:1}),sn,a(c,null,{default:t(()=>[a(o,{title:"TS",active:""},{default:t(()=>[an]),preview:t(()=>[tn]),_:1}),a(o,{title:"Rust",active:""},{default:t(()=>[en]),preview:t(()=>[on]),_:1})]),_:1}),cn,a(c,null,{default:t(()=>[a(o,{title:"TS",active:""},{default:t(()=>[pn]),preview:t(()=>[ln]),_:1})]),_:1}),un,a(c,null,{default:t(()=>[a(o,{title:"TS",active:""},{default:t(()=>[rn]),preview:t(()=>[kn]),_:1}),a(o,{title:"Rust",active:""},{default:t(()=>[bn]),preview:t(()=>[mn]),_:1})]),_:1}),dn,yn,n("ul",null,[n("li",null,[n("a",fn,[hn,a(e)])]),n("li",null,[n("a",gn,[_n,a(e)])]),n("li",null,[n("a",wn,[vn,a(e)])]),n("li",null,[n("a",An,[xn,a(e)])]),n("li",null,[n("a",Rn,[Sn,a(e)])])]),qn,n("ul",null,[n("li",null,[n("a",Pn,[Cn,a(e)])]),n("li",null,[n("a",Kn,[Tn,a(e)])]),n("li",null,[n("a",En,[On,a(e)])])]),Dn,n("ul",null,[n("li",null,[n("a",Vn,[Ln,a(e)])]),n("li",null,[n("a",In,[jn,a(e)])])])],64)}var Nn=u(m,[["render",Un]]);export{Nn as default}; +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br")])],-1),dn=n("h2",{id:"\u0E41\u0E2B\u0E25\u0E48\u0E07\u0E04\u0E27\u0E32\u0E21\u0E23\u0E39\u0E49",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E41\u0E2B\u0E25\u0E48\u0E07\u0E04\u0E27\u0E32\u0E21\u0E23\u0E39\u0E49","aria-hidden":"true"},"#"),s(" \u0E41\u0E2B\u0E25\u0E48\u0E07\u0E04\u0E27\u0E32\u0E21\u0E23\u0E39\u0E49")],-1),yn=n("h3",{id:"apis-\u0E41\u0E25\u0E30-libraries",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#apis-\u0E41\u0E25\u0E30-libraries","aria-hidden":"true"},"#"),s(" APIs \u0E41\u0E25\u0E30 Libraries")],-1),fn={href:"https://docs.switchboard.xyz/api/tasks",target:"_blank",rel:"noopener noreferrer"},hn=s("Switchboard Task Types"),gn={href:"https://docs.rs/switchboard-v2/latest/switchboard_v2/",target:"_blank",rel:"noopener noreferrer"},_n=s("Rust API Docs"),wn={href:"https://docs.switchboard.xyz/api/ts",target:"_blank",rel:"noopener noreferrer"},vn=s("Typescript API Docs"),An={href:"https://docs.switchboard.xyz/api/py",target:"_blank",rel:"noopener noreferrer"},xn=s("Python API Docs"),Rn={href:"https://docs.switchboard.xyz/api/cli",target:"_blank",rel:"noopener noreferrer"},Sn=s("CLI Docs"),qn=n("h3",{id:"\u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07","aria-hidden":"true"},"#"),s(" \u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07")],-1),Pn={href:"https://github.com/switchboard-xyz/switchboard-v2/tree/main/packages/feed-walkthrough",target:"_blank",rel:"noopener noreferrer"},Cn=s("[Client] Custom Data Feed Walkthrough"),Kn={href:"https://github.com/switchboard-xyz/switchboard-v2/tree/main/programs/anchor-feed-parser",target:"_blank",rel:"noopener noreferrer"},Tn=s("[Program] Anchor Feed Parser"),En={href:"https://github.com/switchboard-xyz/switchboard-v2/tree/main/programs/anchor-vrf-parser",target:"_blank",rel:"noopener noreferrer"},On=s("[Program] Anchor VRF Parser"),Dn=n("h3",{id:"\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19\u0E46",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19\u0E46","aria-hidden":"true"},"#"),s(" \u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19\u0E46")],-1),Ln={href:"https://docs.switchboard.xyz/introduction",target:"_blank",rel:"noopener noreferrer"},Vn=s("Protocol Documentation"),In={href:"https://crawling-cent-d6b.notion.site/The-Switchboard-Deep-Dive-717df6ba0b92465e8118351466257a0f",target:"_blank",rel:"noopener noreferrer"},jn=s("SuperteamDAO Deep Dive");function Un(zn,Fn){const e=p("ExternalLinkIcon"),o=p("SolanaCodeGroupItem"),c=p("SolanaCodeGroup"),l=p("RouterLink");return r(),i(k,null,[d,y,f,n("p",null,[h,g,_,n("a",w,[v,a(e)])]),A,a(c,null,{default:t(()=>[a(o,{title:"TS",active:""},{default:t(()=>[x]),preview:t(()=>[R]),_:1})]),_:1}),S,a(c,null,{default:t(()=>[a(o,{title:"TS",active:""},{default:t(()=>[q]),preview:t(()=>[P]),_:1})]),_:1}),C,n("p",null,[K,T,E,n("a",O,[D,a(e)])]),a(c,null,{default:t(()=>[a(o,{title:"Rust",active:""},{default:t(()=>[L]),preview:t(()=>[V]),_:1})]),_:1}),I,n("p",null,[j,n("a",U,[z,a(e)]),F]),B,N,J,a(c,null,{default:t(()=>[a(o,{title:"TS",active:""},{default:t(()=>[G]),preview:t(()=>[Q]),_:1})]),_:1}),M,Y,H,W,n("p",null,[$,a(l,{to:"/integrations/switchboard.html#oracle-config"},{default:t(()=>[X]),_:1})]),a(c,null,{default:t(()=>[a(o,{title:"TS",active:""},{default:t(()=>[Z]),preview:t(()=>[nn]),_:1})]),_:1}),sn,a(c,null,{default:t(()=>[a(o,{title:"TS",active:""},{default:t(()=>[an]),preview:t(()=>[tn]),_:1}),a(o,{title:"Rust",active:""},{default:t(()=>[en]),preview:t(()=>[on]),_:1})]),_:1}),cn,a(c,null,{default:t(()=>[a(o,{title:"TS",active:""},{default:t(()=>[pn]),preview:t(()=>[ln]),_:1})]),_:1}),un,a(c,null,{default:t(()=>[a(o,{title:"TS",active:""},{default:t(()=>[rn]),preview:t(()=>[kn]),_:1}),a(o,{title:"Rust",active:""},{default:t(()=>[bn]),preview:t(()=>[mn]),_:1})]),_:1}),dn,yn,n("ul",null,[n("li",null,[n("a",fn,[hn,a(e)])]),n("li",null,[n("a",gn,[_n,a(e)])]),n("li",null,[n("a",wn,[vn,a(e)])]),n("li",null,[n("a",An,[xn,a(e)])]),n("li",null,[n("a",Rn,[Sn,a(e)])])]),qn,n("ul",null,[n("li",null,[n("a",Pn,[Cn,a(e)])]),n("li",null,[n("a",Kn,[Tn,a(e)])]),n("li",null,[n("a",En,[On,a(e)])])]),Dn,n("ul",null,[n("li",null,[n("a",Ln,[Vn,a(e)])]),n("li",null,[n("a",In,[jn,a(e)])])])],64)}var Nn=u(m,[["render",Un]]);export{Nn as default}; diff --git a/docs/.vuepress/dist/assets/switchboard.html.2ea924f1.js b/docs/.vuepress/dist/assets/switchboard.html.e36a699f.js similarity index 98% rename from docs/.vuepress/dist/assets/switchboard.html.2ea924f1.js rename to docs/.vuepress/dist/assets/switchboard.html.e36a699f.js index cff76e348..08532cf35 100644 --- a/docs/.vuepress/dist/assets/switchboard.html.2ea924f1.js +++ b/docs/.vuepress/dist/assets/switchboard.html.e36a699f.js @@ -1,4 +1,4 @@ -import{_ as l,r as p,o as r,c as i,a as n,b as a,w as t,F as k,d as s,e as b}from"./app.cfdf84e7.js";const m={},d=n("h1",{id:"switchboard",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#switchboard","aria-hidden":"true"},"#"),s(" Switchboard")],-1),y=n("p",null,"Switchboard est un Oracle qui permet aux d\xE9veloppeurs de s'approvisionner en donn\xE9es on-chain pour une vari\xE9t\xE9 de cas d'utilisation tels que l'obtention du prix de jetons, le prix plancher (floor price) de NFTs, les statistiques sportives ou m\xEAme le caract\xE8re v\xE9rifiable du hasard. D'une mani\xE8re g\xE9n\xE9rale, Switchboard est une ressource hors cha\xEEne que les d\xE9veloppeurs peuvent utiliser pour relier des donn\xE9es on-chain de haute qualit\xE9 et alimenter la prochaine g\xE9n\xE9ration du Web3 et de la DeFi.",-1),f=n("h2",{id:"flux-de-donnees",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#flux-de-donnees","aria-hidden":"true"},"#"),s(" Flux de Donn\xE9es")],-1),h=s("Switchboard fournit une biblioth\xE8que JavaScript/TypeScript appel\xE9e "),_=n("strong",null,"@switchboard-xyz/switchboard-v2",-1),g=s(". Cette biblioth\xE8que peut \xEAtre utilis\xE9e pour acc\xE9der aux donn\xE9es On-chain \xE0 partir de flux de donn\xE9es existants ou pour publier vos propres flux personnalis\xE9s. Plus d'informations \xE0 ce sujet "),w={href:"https://www.npmjs.com/package/@switchboard-xyz/switchboard-v2",target:"_blank",rel:"noopener noreferrer"},v=s("ici"),A=n("h3",{id:"lire-les-donnees-d-un-flux-d-agregation",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#lire-les-donnees-d-un-flux-d-agregation","aria-hidden":"true"},"#"),s(" Lire les donn\xE9es d'un flux d'agr\xE9gation")],-1),x=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` +import{_ as l,r as p,o as r,c as i,a as n,b as a,w as t,F as k,d as s,e as b}from"./app.2fbb9e96.js";const m={},d=n("h1",{id:"switchboard",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#switchboard","aria-hidden":"true"},"#"),s(" Switchboard")],-1),y=n("p",null,"Switchboard est un Oracle qui permet aux d\xE9veloppeurs de s'approvisionner en donn\xE9es on-chain pour une vari\xE9t\xE9 de cas d'utilisation tels que l'obtention du prix de jetons, le prix plancher (floor price) de NFTs, les statistiques sportives ou m\xEAme le caract\xE8re v\xE9rifiable du hasard. D'une mani\xE8re g\xE9n\xE9rale, Switchboard est une ressource hors cha\xEEne que les d\xE9veloppeurs peuvent utiliser pour relier des donn\xE9es on-chain de haute qualit\xE9 et alimenter la prochaine g\xE9n\xE9ration du Web3 et de la DeFi.",-1),f=n("h2",{id:"flux-de-donnees",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#flux-de-donnees","aria-hidden":"true"},"#"),s(" Flux de Donn\xE9es")],-1),h=s("Switchboard fournit une biblioth\xE8que JavaScript/TypeScript appel\xE9e "),_=n("strong",null,"@switchboard-xyz/switchboard-v2",-1),g=s(". Cette biblioth\xE8que peut \xEAtre utilis\xE9e pour acc\xE9der aux donn\xE9es On-chain \xE0 partir de flux de donn\xE9es existants ou pour publier vos propres flux personnalis\xE9s. Plus d'informations \xE0 ce sujet "),w={href:"https://www.npmjs.com/package/@switchboard-xyz/switchboard-v2",target:"_blank",rel:"noopener noreferrer"},v=s("ici"),A=n("h3",{id:"lire-les-donnees-d-un-flux-d-agregation",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#lire-les-donnees-d-un-flux-d-agregation","aria-hidden":"true"},"#"),s(" Lire les donn\xE9es d'un flux d'agr\xE9gation")],-1),x=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` clusterApiUrl`),n("span",{class:"token punctuation"},","),s(` Connection`),n("span",{class:"token punctuation"},","),s(` Keypair`),n("span",{class:"token punctuation"},","),s(` @@ -140,8 +140,8 @@ import{_ as l,r as p,o as r,c as i,a as n,b as a,w as t,F as k,d as s,e as b}fro `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token keyword"},"super"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token operator"},"*"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"pub"),s(),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"get_result"),n("span",{class:"token punctuation"},"("),s("ctx"),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token class-name"},"Context"),n("span",{class:"token operator"},"<"),n("span",{class:"token class-name"},"GetResult"),n("span",{class:"token operator"},">"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"->"),s(),n("span",{class:"token class-name"},"Result"),n("span",{class:"token operator"},"<"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},">"),s(),n("span",{class:"token punctuation"},"{"),s(` - `),n("span",{class:"token keyword"},"let"),s(" aggregator "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token operator"},"&"),s("ctx"),n("span",{class:"token punctuation"},"."),s("accounts"),n("span",{class:"token punctuation"},"."),s("aggregator_feed"),n("span",{class:"token punctuation"},";"),s(` - `),n("span",{class:"token keyword"},"let"),s(" val"),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token keyword"},"f64"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"AggregatorAccountData"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new"),n("span",{class:"token punctuation"},"("),s("aggregator"),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),s(` + `),n("span",{class:"token keyword"},"let"),s(" aggregator "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token operator"},"&"),s("ctx"),n("span",{class:"token punctuation"},"."),s("accounts"),n("span",{class:"token punctuation"},"."),s("aggregator_feed"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"load"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token keyword"},"let"),s(" val"),n("span",{class:"token punctuation"},":"),n("span",{class:"token keyword"},"f64"),s(),n("span",{class:"token operator"},"="),s(` aggregator `),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"get_result"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),s(` `),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"try_into"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),n("span",{class:"token punctuation"},";"),s(` @@ -155,12 +155,12 @@ import{_ as l,r as p,o as r,c as i,a as n,b as a,w as t,F as k,d as s,e as b}fro `),n("span",{class:"token keyword"},"pub"),s(),n("span",{class:"token keyword"},"struct"),s(),n("span",{class:"token type-definition class-name"},"GetResult"),n("span",{class:"token operator"},"<"),n("span",{class:"token lifetime-annotation symbol"},"'info"),n("span",{class:"token operator"},">"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"pub"),s(" authority"),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token class-name"},"Signer"),n("span",{class:"token operator"},"<"),n("span",{class:"token lifetime-annotation symbol"},"'info"),n("span",{class:"token operator"},">"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token comment"},"/// CHECK: field is unsafe"),s(` - `),n("span",{class:"token keyword"},"pub"),s(" aggregator_feed"),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token class-name"},"AccountInfo"),n("span",{class:"token operator"},"<"),n("span",{class:"token lifetime-annotation symbol"},"'info"),n("span",{class:"token operator"},">"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token comment"},"// pass aggregator key"),s(` + `),n("span",{class:"token keyword"},"pub"),s(" aggregator_feed"),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token class-name"},"AccountLoader"),n("span",{class:"token operator"},"<"),n("span",{class:"token lifetime-annotation symbol"},"'info"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"AggregatorAccountData"),n("span",{class:"token operator"},">"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token comment"},"// pass aggregator key"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br")])],-1),V=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" aggregator "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token operator"},"&"),s("ctx"),n("span",{class:"token punctuation"},"."),s("accounts"),n("span",{class:"token punctuation"},"."),s("aggregator_feed"),n("span",{class:"token punctuation"},";"),s(` -`),n("span",{class:"token keyword"},"let"),s(" val"),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token keyword"},"f64"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"AggregatorAccountData"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new"),n("span",{class:"token punctuation"},"("),s("aggregator"),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),s(` - `),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"get_result"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),s(` - `),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"try_into"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br")])],-1),V=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" aggregator "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token operator"},"&"),s("ctx"),n("span",{class:"token punctuation"},"."),s("accounts"),n("span",{class:"token punctuation"},"."),s("aggregator_feed"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"load"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token keyword"},"let"),s(" val"),n("span",{class:"token punctuation"},":"),n("span",{class:"token keyword"},"f64"),s(),n("span",{class:"token operator"},"="),s(` aggregator + `),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"get_result"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),s(` + `),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"try_into"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),n("span",{class:"token punctuation"},";"),s(` `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),I=n("h3",{id:"comment-creer-un-flux-a-partir-du-publisher",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#comment-creer-un-flux-a-partir-du-publisher","aria-hidden":"true"},"#"),s(" Comment Cr\xE9er un Flux \xE0 partir du Publisher")],-1),j=s("La documentation officielle de Switchboard explique en d\xE9tail comment cr\xE9er un flux \xE0 partir du Publisher. D\xE9couvrez-la "),z={href:"https://docs.switchboard.xyz/feed/publisher",target:"_blank",rel:"noopener noreferrer"},F=s("ici"),U=s("."),B=n("h2",{id:"oracles",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#oracles","aria-hidden":"true"},"#"),s(" Oracles")],-1),N=n("p",null,"La caract\xE9ristique unique de Switchboard est qu'il vous permet de cr\xE9er votre propre oracle et de l'ex\xE9cuter localement.",-1),G=n("h3",{id:"creer-un-oracle",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#creer-un-oracle","aria-hidden":"true"},"#"),s(" Cr\xE9er un oracle")],-1),J=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" anchor "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@project-serum/anchor"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` diff --git a/docs/.vuepress/dist/assets/switchboard.html.1e632500.js b/docs/.vuepress/dist/assets/switchboard.html.ff24c966.js similarity index 98% rename from docs/.vuepress/dist/assets/switchboard.html.1e632500.js rename to docs/.vuepress/dist/assets/switchboard.html.ff24c966.js index 610fd96e2..ef9ec9c0f 100644 --- a/docs/.vuepress/dist/assets/switchboard.html.1e632500.js +++ b/docs/.vuepress/dist/assets/switchboard.html.ff24c966.js @@ -1,4 +1,4 @@ -import{_ as u,r as p,o as r,c as i,a as n,b as a,w as t,F as k,d as s,e as b}from"./app.cfdf84e7.js";const m={},d=n("h1",{id:"switchboard",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#switchboard","aria-hidden":"true"},"#"),s(" Switchboard")],-1),y=n("p",null,"Switchboard is an Oracle protocol that enables developers to source data on-chain for a variety of use cases such as price feeds, NFT floor prices, sport statistics, or even verifiable randomness. In a general sense, Switchboard is an off-chain resource developers can invoke to bridge high integrity data on-chain and power the next generation of web3 and DeFi.",-1),f=n("h2",{id:"data-feeds",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#data-feeds","aria-hidden":"true"},"#"),s(" Data Feeds")],-1),h=s("Switchboard provides a JavaScript/TypeScript library called "),g=n("strong",null,"@switchboard-xyz/switchboard-v2",-1),w=s(" . This library can be used to reach On-chain data from existing data feeds or publish your own custom feeds. Learn more about this "),_={href:"https://www.npmjs.com/package/@switchboard-xyz/switchboard-v2",target:"_blank",rel:"noopener noreferrer"},v=s("here"),A=n("h3",{id:"read-data-from-an-aggregator-feed",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#read-data-from-an-aggregator-feed","aria-hidden":"true"},"#"),s(" Read data from an aggregator feed")],-1),x=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` +import{_ as u,r as p,o as r,c as i,a as n,b as a,w as t,F as k,d as s,e as b}from"./app.2fbb9e96.js";const m={},d=n("h1",{id:"switchboard",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#switchboard","aria-hidden":"true"},"#"),s(" Switchboard")],-1),y=n("p",null,"Switchboard is an Oracle protocol that enables developers to source data on-chain for a variety of use cases such as price feeds, NFT floor prices, sport statistics, or even verifiable randomness. In a general sense, Switchboard is an off-chain resource developers can invoke to bridge high integrity data on-chain and power the next generation of web3 and DeFi.",-1),f=n("h2",{id:"data-feeds",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#data-feeds","aria-hidden":"true"},"#"),s(" Data Feeds")],-1),h=s("Switchboard provides a JavaScript/TypeScript library called "),g=n("strong",null,"@switchboard-xyz/switchboard-v2",-1),w=s(" . This library can be used to reach On-chain data from existing data feeds or publish your own custom feeds. Learn more about this "),_={href:"https://www.npmjs.com/package/@switchboard-xyz/switchboard-v2",target:"_blank",rel:"noopener noreferrer"},v=s("here"),A=n("h3",{id:"read-data-from-an-aggregator-feed",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#read-data-from-an-aggregator-feed","aria-hidden":"true"},"#"),s(" Read data from an aggregator feed")],-1),x=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` clusterApiUrl`),n("span",{class:"token punctuation"},","),s(` Connection`),n("span",{class:"token punctuation"},","),s(` Keypair`),n("span",{class:"token punctuation"},","),s(` @@ -140,8 +140,8 @@ import{_ as u,r as p,o as r,c as i,a as n,b as a,w as t,F as k,d as s,e as b}fro `),n("span",{class:"token keyword"},"use"),s(),n("span",{class:"token keyword"},"super"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token operator"},"*"),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"pub"),s(),n("span",{class:"token keyword"},"fn"),s(),n("span",{class:"token function-definition function"},"get_result"),n("span",{class:"token punctuation"},"("),s("ctx"),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token class-name"},"Context"),n("span",{class:"token operator"},"<"),n("span",{class:"token class-name"},"GetResult"),n("span",{class:"token operator"},">"),n("span",{class:"token punctuation"},")"),s(),n("span",{class:"token punctuation"},"->"),s(),n("span",{class:"token class-name"},"Result"),n("span",{class:"token operator"},"<"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},">"),s(),n("span",{class:"token punctuation"},"{"),s(` - `),n("span",{class:"token keyword"},"let"),s(" aggregator "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token operator"},"&"),s("ctx"),n("span",{class:"token punctuation"},"."),s("accounts"),n("span",{class:"token punctuation"},"."),s("aggregator_feed"),n("span",{class:"token punctuation"},";"),s(` - `),n("span",{class:"token keyword"},"let"),s(" val"),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token keyword"},"f64"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"AggregatorAccountData"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new"),n("span",{class:"token punctuation"},"("),s("aggregator"),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),s(` + `),n("span",{class:"token keyword"},"let"),s(" aggregator "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token operator"},"&"),s("ctx"),n("span",{class:"token punctuation"},"."),s("accounts"),n("span",{class:"token punctuation"},"."),s("aggregator_feed"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"load"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),n("span",{class:"token punctuation"},";"),s(` + `),n("span",{class:"token keyword"},"let"),s(" val"),n("span",{class:"token punctuation"},":"),n("span",{class:"token keyword"},"f64"),s(),n("span",{class:"token operator"},"="),s(` aggregator `),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"get_result"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),s(` `),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"try_into"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),n("span",{class:"token punctuation"},";"),s(` @@ -155,13 +155,13 @@ import{_ as u,r as p,o as r,c as i,a as n,b as a,w as t,F as k,d as s,e as b}fro `),n("span",{class:"token keyword"},"pub"),s(),n("span",{class:"token keyword"},"struct"),s(),n("span",{class:"token type-definition class-name"},"GetResult"),n("span",{class:"token operator"},"<"),n("span",{class:"token lifetime-annotation symbol"},"'info"),n("span",{class:"token operator"},">"),s(),n("span",{class:"token punctuation"},"{"),s(` `),n("span",{class:"token keyword"},"pub"),s(" authority"),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token class-name"},"Signer"),n("span",{class:"token operator"},"<"),n("span",{class:"token lifetime-annotation symbol"},"'info"),n("span",{class:"token operator"},">"),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token comment"},"/// CHECK: field is unsafe"),s(` - `),n("span",{class:"token keyword"},"pub"),s(" aggregator_feed"),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token class-name"},"AccountInfo"),n("span",{class:"token operator"},"<"),n("span",{class:"token lifetime-annotation symbol"},"'info"),n("span",{class:"token operator"},">"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token comment"},"// pass aggregator key"),s(` + `),n("span",{class:"token keyword"},"pub"),s(" aggregator_feed"),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token class-name"},"AccountLoader"),n("span",{class:"token operator"},"<"),n("span",{class:"token lifetime-annotation symbol"},"'info"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token class-name"},"AggregatorAccountData"),n("span",{class:"token operator"},">"),n("span",{class:"token punctuation"},","),s(),n("span",{class:"token comment"},"// pass aggregator key"),s(` `),n("span",{class:"token punctuation"},"}"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br")])],-1),I=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" aggregator "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token operator"},"&"),s("ctx"),n("span",{class:"token punctuation"},"."),s("accounts"),n("span",{class:"token punctuation"},"."),s("aggregator_feed"),n("span",{class:"token punctuation"},";"),s(` -`),n("span",{class:"token keyword"},"let"),s(" val"),n("span",{class:"token punctuation"},":"),s(),n("span",{class:"token keyword"},"f64"),s(),n("span",{class:"token operator"},"="),s(),n("span",{class:"token class-name"},"AggregatorAccountData"),n("span",{class:"token punctuation"},"::"),n("span",{class:"token function"},"new"),n("span",{class:"token punctuation"},"("),s("aggregator"),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),s(` - `),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"get_result"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),s(` - `),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"try_into"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),V=n("h3",{id:"how-to-create-a-feed-from-the-publisher",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-create-a-feed-from-the-publisher","aria-hidden":"true"},"#"),s(" How to Create a Feed from the Publisher")],-1),j=s("The official Switchboard documentation has an in-depth walk-through of how to create a feed from the publisher. Check it out "),U={href:"https://docs.switchboard.xyz/feed/publisher",target:"_blank",rel:"noopener noreferrer"},z=s("here"),F=s("."),B=n("h2",{id:"oracles",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#oracles","aria-hidden":"true"},"#"),s(" Oracles")],-1),N=n("p",null,"Switchboard's unique feature is that it allows you to create your own oracle and run it locally.",-1),J=n("h3",{id:"create-an-oracle",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#create-an-oracle","aria-hidden":"true"},"#"),s(" Create an oracle")],-1),G=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" anchor "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@project-serum/anchor"'),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br")])],-1),V=n("div",{class:"language-rust ext-rs line-numbers-mode"},[n("pre",{class:"language-rust"},[n("code",null,[n("span",{class:"token keyword"},"let"),s(" aggregator "),n("span",{class:"token operator"},"="),s(),n("span",{class:"token operator"},"&"),s("ctx"),n("span",{class:"token punctuation"},"."),s("accounts"),n("span",{class:"token punctuation"},"."),s("aggregator_feed"),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"load"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),n("span",{class:"token punctuation"},";"),s(` +`),n("span",{class:"token keyword"},"let"),s(" val"),n("span",{class:"token punctuation"},":"),n("span",{class:"token keyword"},"f64"),s(),n("span",{class:"token operator"},"="),s(` aggregator + `),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"get_result"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),s(` + `),n("span",{class:"token punctuation"},"."),n("span",{class:"token function"},"try_into"),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),n("span",{class:"token punctuation"},";"),s(` +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br")])],-1),I=n("h3",{id:"how-to-create-a-feed-from-the-publisher",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-create-a-feed-from-the-publisher","aria-hidden":"true"},"#"),s(" How to Create a Feed from the Publisher")],-1),j=s("The official Switchboard documentation has an in-depth walk-through of how to create a feed from the publisher. Check it out "),U={href:"https://docs.switchboard.xyz/feed/publisher",target:"_blank",rel:"noopener noreferrer"},z=s("here"),F=s("."),B=n("h2",{id:"oracles",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#oracles","aria-hidden":"true"},"#"),s(" Oracles")],-1),N=n("p",null,"Switchboard's unique feature is that it allows you to create your own oracle and run it locally.",-1),J=n("h3",{id:"create-an-oracle",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#create-an-oracle","aria-hidden":"true"},"#"),s(" Create an oracle")],-1),G=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token operator"},"*"),s(),n("span",{class:"token keyword"},"as"),s(" anchor "),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@project-serum/anchor"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" Keypair "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` `),n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` loadSwitchboardProgram`),n("span",{class:"token punctuation"},","),s(` @@ -506,4 +506,4 @@ vrf_request_randomness`),n("span",{class:"token punctuation"},"."),n("span",{cla params`),n("span",{class:"token punctuation"},"."),s("permission_bump"),n("span",{class:"token punctuation"},","),s(` state_seeds`),n("span",{class:"token punctuation"},","),s(` `),n("span",{class:"token punctuation"},")"),n("span",{class:"token operator"},"?"),n("span",{class:"token punctuation"},";"),s(` -`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br")])],-1),dn=n("h2",{id:"resources",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#resources","aria-hidden":"true"},"#"),s(" Resources")],-1),yn=n("h3",{id:"apis-and-libraries",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#apis-and-libraries","aria-hidden":"true"},"#"),s(" APIs and Libraries")],-1),fn={href:"https://docs.switchboard.xyz/api/tasks",target:"_blank",rel:"noopener noreferrer"},hn=s("Switchboard Task Types"),gn={href:"https://docs.rs/switchboard-v2/latest/switchboard_v2/",target:"_blank",rel:"noopener noreferrer"},wn=s("Rust API Docs"),_n={href:"https://docs.switchboard.xyz/api/ts",target:"_blank",rel:"noopener noreferrer"},vn=s("Typescript API Docs"),An={href:"https://docs.switchboard.xyz/api/py",target:"_blank",rel:"noopener noreferrer"},xn=s("Python API Docs"),Rn={href:"https://docs.switchboard.xyz/api/cli",target:"_blank",rel:"noopener noreferrer"},Sn=s("CLI Docs"),qn=n("h3",{id:"examples",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#examples","aria-hidden":"true"},"#"),s(" Examples")],-1),Pn={href:"https://github.com/switchboard-xyz/switchboard-v2/tree/main/packages/feed-walkthrough",target:"_blank",rel:"noopener noreferrer"},Cn=s("[Client] Custom Data Feed Walkthrough"),Kn={href:"https://github.com/switchboard-xyz/switchboard-v2/tree/main/programs/anchor-feed-parser",target:"_blank",rel:"noopener noreferrer"},Tn=s("[Program] Anchor Feed Parser"),En={href:"https://github.com/switchboard-xyz/switchboard-v2/tree/main/programs/anchor-vrf-parser",target:"_blank",rel:"noopener noreferrer"},On=s("[Program] Anchor VRF Parser"),Dn=n("h3",{id:"more-information",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#more-information","aria-hidden":"true"},"#"),s(" More Information")],-1),Ln={href:"https://docs.switchboard.xyz/introduction",target:"_blank",rel:"noopener noreferrer"},In=s("Protocol Documentation"),Vn={href:"https://crawling-cent-d6b.notion.site/The-Switchboard-Deep-Dive-717df6ba0b92465e8118351466257a0f",target:"_blank",rel:"noopener noreferrer"},jn=s("SuperteamDAO Deep Dive");function Un(zn,Fn){const e=p("ExternalLinkIcon"),o=p("SolanaCodeGroupItem"),c=p("SolanaCodeGroup"),l=p("RouterLink");return r(),i(k,null,[d,y,f,n("p",null,[h,g,w,n("a",_,[v,a(e)])]),A,a(c,null,{default:t(()=>[a(o,{title:"TS",active:""},{default:t(()=>[x]),preview:t(()=>[R]),_:1})]),_:1}),S,a(c,null,{default:t(()=>[a(o,{title:"TS",active:""},{default:t(()=>[q]),preview:t(()=>[P]),_:1})]),_:1}),C,n("p",null,[K,T,E,n("a",O,[D,a(e)])]),a(c,null,{default:t(()=>[a(o,{title:"Rust",active:""},{default:t(()=>[L]),preview:t(()=>[I]),_:1})]),_:1}),V,n("p",null,[j,n("a",U,[z,a(e)]),F]),B,N,J,a(c,null,{default:t(()=>[a(o,{title:"TS",active:""},{default:t(()=>[G]),preview:t(()=>[M]),_:1})]),_:1}),Q,Y,H,W,n("p",null,[$,a(l,{to:"/integrations/switchboard.html#oracle-config"},{default:t(()=>[X]),_:1})]),a(c,null,{default:t(()=>[a(o,{title:"TS",active:""},{default:t(()=>[Z]),preview:t(()=>[nn]),_:1})]),_:1}),sn,a(c,null,{default:t(()=>[a(o,{title:"TS",active:""},{default:t(()=>[an]),preview:t(()=>[tn]),_:1}),a(o,{title:"Rust",active:""},{default:t(()=>[en]),preview:t(()=>[on]),_:1})]),_:1}),cn,a(c,null,{default:t(()=>[a(o,{title:"TS",active:""},{default:t(()=>[pn]),preview:t(()=>[ln]),_:1})]),_:1}),un,a(c,null,{default:t(()=>[a(o,{title:"TS",active:""},{default:t(()=>[rn]),preview:t(()=>[kn]),_:1}),a(o,{title:"Rust",active:""},{default:t(()=>[bn]),preview:t(()=>[mn]),_:1})]),_:1}),dn,yn,n("ul",null,[n("li",null,[n("a",fn,[hn,a(e)])]),n("li",null,[n("a",gn,[wn,a(e)])]),n("li",null,[n("a",_n,[vn,a(e)])]),n("li",null,[n("a",An,[xn,a(e)])]),n("li",null,[n("a",Rn,[Sn,a(e)])])]),qn,n("ul",null,[n("li",null,[n("a",Pn,[Cn,a(e)])]),n("li",null,[n("a",Kn,[Tn,a(e)])]),n("li",null,[n("a",En,[On,a(e)])])]),Dn,n("ul",null,[n("li",null,[n("a",Ln,[In,a(e)])]),n("li",null,[n("a",Vn,[jn,a(e)])])])],64)}var Nn=u(m,[["render",Un]]);export{Nn as default}; +`)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br"),n("span",{class:"line-number"},"2"),n("br"),n("span",{class:"line-number"},"3"),n("br"),n("span",{class:"line-number"},"4"),n("br"),n("span",{class:"line-number"},"5"),n("br"),n("span",{class:"line-number"},"6"),n("br"),n("span",{class:"line-number"},"7"),n("br"),n("span",{class:"line-number"},"8"),n("br"),n("span",{class:"line-number"},"9"),n("br"),n("span",{class:"line-number"},"10"),n("br"),n("span",{class:"line-number"},"11"),n("br"),n("span",{class:"line-number"},"12"),n("br"),n("span",{class:"line-number"},"13"),n("br"),n("span",{class:"line-number"},"14"),n("br"),n("span",{class:"line-number"},"15"),n("br"),n("span",{class:"line-number"},"16"),n("br"),n("span",{class:"line-number"},"17"),n("br"),n("span",{class:"line-number"},"18"),n("br"),n("span",{class:"line-number"},"19"),n("br"),n("span",{class:"line-number"},"20"),n("br"),n("span",{class:"line-number"},"21"),n("br"),n("span",{class:"line-number"},"22"),n("br"),n("span",{class:"line-number"},"23"),n("br"),n("span",{class:"line-number"},"24"),n("br"),n("span",{class:"line-number"},"25"),n("br"),n("span",{class:"line-number"},"26"),n("br"),n("span",{class:"line-number"},"27"),n("br"),n("span",{class:"line-number"},"28"),n("br"),n("span",{class:"line-number"},"29"),n("br"),n("span",{class:"line-number"},"30"),n("br"),n("span",{class:"line-number"},"31"),n("br"),n("span",{class:"line-number"},"32"),n("br"),n("span",{class:"line-number"},"33"),n("br"),n("span",{class:"line-number"},"34"),n("br"),n("span",{class:"line-number"},"35"),n("br")])],-1),dn=n("h2",{id:"resources",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#resources","aria-hidden":"true"},"#"),s(" Resources")],-1),yn=n("h3",{id:"apis-and-libraries",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#apis-and-libraries","aria-hidden":"true"},"#"),s(" APIs and Libraries")],-1),fn={href:"https://docs.switchboard.xyz/api/tasks",target:"_blank",rel:"noopener noreferrer"},hn=s("Switchboard Task Types"),gn={href:"https://docs.rs/switchboard-v2/latest/switchboard_v2/",target:"_blank",rel:"noopener noreferrer"},wn=s("Rust API Docs"),_n={href:"https://docs.switchboard.xyz/api/ts",target:"_blank",rel:"noopener noreferrer"},vn=s("Typescript API Docs"),An={href:"https://docs.switchboard.xyz/api/py",target:"_blank",rel:"noopener noreferrer"},xn=s("Python API Docs"),Rn={href:"https://docs.switchboard.xyz/api/cli",target:"_blank",rel:"noopener noreferrer"},Sn=s("CLI Docs"),qn=n("h3",{id:"examples",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#examples","aria-hidden":"true"},"#"),s(" Examples")],-1),Pn={href:"https://github.com/switchboard-xyz/switchboard-v2/tree/main/packages/feed-walkthrough",target:"_blank",rel:"noopener noreferrer"},Cn=s("[Client] Custom Data Feed Walkthrough"),Kn={href:"https://github.com/switchboard-xyz/switchboard-v2/tree/main/programs/anchor-feed-parser",target:"_blank",rel:"noopener noreferrer"},Tn=s("[Program] Anchor Feed Parser"),En={href:"https://github.com/switchboard-xyz/switchboard-v2/tree/main/programs/anchor-vrf-parser",target:"_blank",rel:"noopener noreferrer"},On=s("[Program] Anchor VRF Parser"),Dn=n("h3",{id:"more-information",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#more-information","aria-hidden":"true"},"#"),s(" More Information")],-1),Ln={href:"https://docs.switchboard.xyz/introduction",target:"_blank",rel:"noopener noreferrer"},Vn=s("Protocol Documentation"),In={href:"https://crawling-cent-d6b.notion.site/The-Switchboard-Deep-Dive-717df6ba0b92465e8118351466257a0f",target:"_blank",rel:"noopener noreferrer"},jn=s("SuperteamDAO Deep Dive");function Un(zn,Fn){const e=p("ExternalLinkIcon"),o=p("SolanaCodeGroupItem"),c=p("SolanaCodeGroup"),l=p("RouterLink");return r(),i(k,null,[d,y,f,n("p",null,[h,g,w,n("a",_,[v,a(e)])]),A,a(c,null,{default:t(()=>[a(o,{title:"TS",active:""},{default:t(()=>[x]),preview:t(()=>[R]),_:1})]),_:1}),S,a(c,null,{default:t(()=>[a(o,{title:"TS",active:""},{default:t(()=>[q]),preview:t(()=>[P]),_:1})]),_:1}),C,n("p",null,[K,T,E,n("a",O,[D,a(e)])]),a(c,null,{default:t(()=>[a(o,{title:"Rust",active:""},{default:t(()=>[L]),preview:t(()=>[V]),_:1})]),_:1}),I,n("p",null,[j,n("a",U,[z,a(e)]),F]),B,N,J,a(c,null,{default:t(()=>[a(o,{title:"TS",active:""},{default:t(()=>[G]),preview:t(()=>[M]),_:1})]),_:1}),Q,Y,H,W,n("p",null,[$,a(l,{to:"/integrations/switchboard.html#oracle-config"},{default:t(()=>[X]),_:1})]),a(c,null,{default:t(()=>[a(o,{title:"TS",active:""},{default:t(()=>[Z]),preview:t(()=>[nn]),_:1})]),_:1}),sn,a(c,null,{default:t(()=>[a(o,{title:"TS",active:""},{default:t(()=>[an]),preview:t(()=>[tn]),_:1}),a(o,{title:"Rust",active:""},{default:t(()=>[en]),preview:t(()=>[on]),_:1})]),_:1}),cn,a(c,null,{default:t(()=>[a(o,{title:"TS",active:""},{default:t(()=>[pn]),preview:t(()=>[ln]),_:1})]),_:1}),un,a(c,null,{default:t(()=>[a(o,{title:"TS",active:""},{default:t(()=>[rn]),preview:t(()=>[kn]),_:1}),a(o,{title:"Rust",active:""},{default:t(()=>[bn]),preview:t(()=>[mn]),_:1})]),_:1}),dn,yn,n("ul",null,[n("li",null,[n("a",fn,[hn,a(e)])]),n("li",null,[n("a",gn,[wn,a(e)])]),n("li",null,[n("a",_n,[vn,a(e)])]),n("li",null,[n("a",An,[xn,a(e)])]),n("li",null,[n("a",Rn,[Sn,a(e)])])]),qn,n("ul",null,[n("li",null,[n("a",Pn,[Cn,a(e)])]),n("li",null,[n("a",Kn,[Tn,a(e)])]),n("li",null,[n("a",En,[On,a(e)])])]),Dn,n("ul",null,[n("li",null,[n("a",Ln,[Vn,a(e)])]),n("li",null,[n("a",In,[jn,a(e)])])])],64)}var Nn=u(m,[["render",Un]]);export{Nn as default}; diff --git a/docs/.vuepress/dist/assets/token.html.2099653c.js b/docs/.vuepress/dist/assets/token.html.271324d7.js similarity index 99% rename from docs/.vuepress/dist/assets/token.html.2099653c.js rename to docs/.vuepress/dist/assets/token.html.271324d7.js index a4c9b4f52..e1fe498f1 100644 --- a/docs/.vuepress/dist/assets/token.html.2099653c.js +++ b/docs/.vuepress/dist/assets/token.html.271324d7.js @@ -1,4 +1,4 @@ -import{_ as u,r as c,o as i,c as r,b as t,w as a,F as k,a as n,d as s,e as b}from"./app.cfdf84e7.js";const m={},d=n("h1",{id:"zeichen",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#zeichen","aria-hidden":"true"},"#"),s(" Zeichen")],-1),y=n("h2",{id:"was-benotige-ich-um-mit-spl-tokens-zu-beginnen",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#was-benotige-ich-um-mit-spl-tokens-zu-beginnen","aria-hidden":"true"},"#"),s(" Was ben\xF6tige ich, um mit SPL-Tokens zu beginnen?")],-1),f=n("p",null,"Jedes Mal, wenn Sie mit Token auf Solana interagieren, tun Sie es tats\xE4chlich Interaktion mit dem Solana Program Library Token oder SPL-Token Standard. Der SPL-Token-Standard erfordert dazu eine bestimmte Bibliothek zu verwenden, die Sie unten basierend auf Ihrer Sprache finden.",-1),w=n("div",{class:"language-text ext-text line-numbers-mode"},[n("pre",{class:"language-text"},[n("code",null,`"@solana/spl-token": "^0.2.0" +import{_ as u,r as c,o as i,c as r,b as t,w as a,F as k,a as n,d as s,e as b}from"./app.2fbb9e96.js";const m={},d=n("h1",{id:"zeichen",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#zeichen","aria-hidden":"true"},"#"),s(" Zeichen")],-1),y=n("h2",{id:"was-benotige-ich-um-mit-spl-tokens-zu-beginnen",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#was-benotige-ich-um-mit-spl-tokens-zu-beginnen","aria-hidden":"true"},"#"),s(" Was ben\xF6tige ich, um mit SPL-Tokens zu beginnen?")],-1),f=n("p",null,"Jedes Mal, wenn Sie mit Token auf Solana interagieren, tun Sie es tats\xE4chlich Interaktion mit dem Solana Program Library Token oder SPL-Token Standard. Der SPL-Token-Standard erfordert dazu eine bestimmte Bibliothek zu verwenden, die Sie unten basierend auf Ihrer Sprache finden.",-1),w=n("div",{class:"language-text ext-text line-numbers-mode"},[n("pre",{class:"language-text"},[n("code",null,`"@solana/spl-token": "^0.2.0" `)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),g=n("h2",{id:"so-erstellen-sie-ein-neues-token",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#so-erstellen-sie-ein-neues-token","aria-hidden":"true"},"#"),s(" So erstellen Sie ein neues Token")],-1),h=n("p",null,"Das Erstellen von Token erfolgt durch Erstellen eines sogenannten \u201EMint-Kontos\u201C. Dieses Mint-Konto wird sp\xE4ter verwendet, um Token auf das Token-Konto eines Benutzers zu pr\xE4gen.",-1),K=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` clusterApiUrl`),n("span",{class:"token punctuation"},","),s(` Connection`),n("span",{class:"token punctuation"},","),s(` diff --git a/docs/.vuepress/dist/assets/token.html.43349d24.js b/docs/.vuepress/dist/assets/token.html.8a3ee454.js similarity index 99% rename from docs/.vuepress/dist/assets/token.html.43349d24.js rename to docs/.vuepress/dist/assets/token.html.8a3ee454.js index 8bc80a2a4..8c29e69ae 100644 --- a/docs/.vuepress/dist/assets/token.html.43349d24.js +++ b/docs/.vuepress/dist/assets/token.html.8a3ee454.js @@ -1,4 +1,4 @@ -import{_ as u,r as o,o as i,c as r,b as t,w as a,F as k,a as n,d as s,e as b}from"./app.cfdf84e7.js";const m={},d=n("h1",{id:"token",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#token","aria-hidden":"true"},"#"),s(" Token")],-1),y=n("h2",{id:"\xBFque-necesito-para-comenzar-a-trabajar-con-spl-tokens",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\xBFque-necesito-para-comenzar-a-trabajar-con-spl-tokens","aria-hidden":"true"},"#"),s(" \xBFQu\xE9 necesito para comenzar a trabajar con SPL-Tokens?")],-1),f=n("p",null,"Cada vez que interact\xFAas con tokens en Solana, en realidad est\xE1s interactuando con el token el programa (SPL) Token de Solana, o el est\xE1ndar SPL-Token. El est\xE1ndar SPL-Token requiere una librer\xEDa espec\xEDfica para ser utilizado, la cual puedes encontrar a continuaci\xF3n en funci\xF3n de tu lenguaje.",-1),w=n("div",{class:"language-text ext-text line-numbers-mode"},[n("pre",{class:"language-text"},[n("code",null,`"@solana/spl-token": "^0.2.0" +import{_ as u,r as o,o as i,c as r,b as t,w as a,F as k,a as n,d as s,e as b}from"./app.2fbb9e96.js";const m={},d=n("h1",{id:"token",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#token","aria-hidden":"true"},"#"),s(" Token")],-1),y=n("h2",{id:"\xBFque-necesito-para-comenzar-a-trabajar-con-spl-tokens",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\xBFque-necesito-para-comenzar-a-trabajar-con-spl-tokens","aria-hidden":"true"},"#"),s(" \xBFQu\xE9 necesito para comenzar a trabajar con SPL-Tokens?")],-1),f=n("p",null,"Cada vez que interact\xFAas con tokens en Solana, en realidad est\xE1s interactuando con el token el programa (SPL) Token de Solana, o el est\xE1ndar SPL-Token. El est\xE1ndar SPL-Token requiere una librer\xEDa espec\xEDfica para ser utilizado, la cual puedes encontrar a continuaci\xF3n en funci\xF3n de tu lenguaje.",-1),w=n("div",{class:"language-text ext-text line-numbers-mode"},[n("pre",{class:"language-text"},[n("code",null,`"@solana/spl-token": "^0.2.0" `)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),g=n("h2",{id:"\xBFcomo-crear-un-nuevo-token",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\xBFcomo-crear-un-nuevo-token","aria-hidden":"true"},"#"),s(" \xBFC\xF3mo crear un nuevo token?")],-1),h=n("p",null,'La creaci\xF3n de tokens se realiza creando lo que se llama una cuenta "mint". Esta cuenta "mint" se usa luego para acu\xF1ar (o crear y enviar) tokens a una cuenta de token y tambi\xE9n para crear el suministro inicial.',-1),A=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` clusterApiUrl`),n("span",{class:"token punctuation"},","),s(` Connection`),n("span",{class:"token punctuation"},","),s(` diff --git a/docs/.vuepress/dist/assets/token.html.343389bd.js b/docs/.vuepress/dist/assets/token.html.8a86434c.js similarity index 99% rename from docs/.vuepress/dist/assets/token.html.343389bd.js rename to docs/.vuepress/dist/assets/token.html.8a86434c.js index 9ccb86efa..1d66db861 100644 --- a/docs/.vuepress/dist/assets/token.html.343389bd.js +++ b/docs/.vuepress/dist/assets/token.html.8a86434c.js @@ -1,4 +1,4 @@ -import{_ as u,r as c,o as i,c as r,b as t,w as a,F as k,a as n,d as s,e as b}from"./app.cfdf84e7.js";const m={},d=n("h1",{id:"jeton",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#jeton","aria-hidden":"true"},"#"),s(" Jeton")],-1),y=n("h2",{id:"de-quoi-ai-je-besoin-pour-commencer-avec-spl-tokens",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#de-quoi-ai-je-besoin-pour-commencer-avec-spl-tokens","aria-hidden":"true"},"#"),s(" De quoi ai-je besoin pour commencer avec SPL-Tokens ?")],-1),f=n("p",null,"Chaque fois que vous interagissez avec des jetons sur Solana, vous interagissez en fait avec la Biblioth\xE8que du Programme Solana (SPL) de Jeton, ou norme SPL-Token. La norme SPL-Token n\xE9cessite l'utilisation d'une biblioth\xE8que sp\xE9cifique, que vous trouverez ci-dessous en fonction de votre langage de programmation.",-1),w=n("div",{class:"language-text ext-text line-numbers-mode"},[n("pre",{class:"language-text"},[n("code",null,`"@solana/spl-token": "^0.2.0" +import{_ as u,r as c,o as i,c as r,b as t,w as a,F as k,a as n,d as s,e as b}from"./app.2fbb9e96.js";const m={},d=n("h1",{id:"jeton",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#jeton","aria-hidden":"true"},"#"),s(" Jeton")],-1),y=n("h2",{id:"de-quoi-ai-je-besoin-pour-commencer-avec-spl-tokens",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#de-quoi-ai-je-besoin-pour-commencer-avec-spl-tokens","aria-hidden":"true"},"#"),s(" De quoi ai-je besoin pour commencer avec SPL-Tokens ?")],-1),f=n("p",null,"Chaque fois que vous interagissez avec des jetons sur Solana, vous interagissez en fait avec la Biblioth\xE8que du Programme Solana (SPL) de Jeton, ou norme SPL-Token. La norme SPL-Token n\xE9cessite l'utilisation d'une biblioth\xE8que sp\xE9cifique, que vous trouverez ci-dessous en fonction de votre langage de programmation.",-1),w=n("div",{class:"language-text ext-text line-numbers-mode"},[n("pre",{class:"language-text"},[n("code",null,`"@solana/spl-token": "^0.2.0" `)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),g=n("h2",{id:"comment-creer-un-nouveau-jeton",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#comment-creer-un-nouveau-jeton","aria-hidden":"true"},"#"),s(" Comment cr\xE9er un nouveau Jeton")],-1),h=n("p",null,`La cr\xE9ation de jetons se fait par la cr\xE9ation de ce que l'on appelle un "compte de cr\xE9ation" (mint account). Ce compte de cr\xE9ation est ensuite utilis\xE9 pour cr\xE9er des jetons sur le compte de jetons d'un utilisateur.`,-1),A=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` clusterApiUrl`),n("span",{class:"token punctuation"},","),s(` Connection`),n("span",{class:"token punctuation"},","),s(` diff --git a/docs/.vuepress/dist/assets/token.html.1cdd0ba1.js b/docs/.vuepress/dist/assets/token.html.abb56ff4.js similarity index 99% rename from docs/.vuepress/dist/assets/token.html.1cdd0ba1.js rename to docs/.vuepress/dist/assets/token.html.abb56ff4.js index 32220e8cb..be436d57e 100644 --- a/docs/.vuepress/dist/assets/token.html.1cdd0ba1.js +++ b/docs/.vuepress/dist/assets/token.html.abb56ff4.js @@ -1,4 +1,4 @@ -import{_ as u,r as o,o as i,c as r,b as t,w as a,F as k,a as n,d as s,e as b}from"./app.cfdf84e7.js";const m={},d=n("h1",{id:"token",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#token","aria-hidden":"true"},"#"),s(" Token")],-1),y=n("h2",{id:"what-do-i-need-to-get-started-with-spl-tokens",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#what-do-i-need-to-get-started-with-spl-tokens","aria-hidden":"true"},"#"),s(" What do I need to get started with SPL-Tokens?")],-1),w=n("p",null,"Solana\uC5D0\uC11C \uB2F9\uC2E0\uC774 Token\uB4E4\uACFC \uD1B5\uC2E0\uD560 \uB54C, \uB2F9\uC2E0\uC740 \uC2E4\uC81C\uB85C\uB294 SPL-Token standard \uB77C\uACE0\uB3C4 \uD558\uB294 Solana Program Library Token\uACFC \uD1B5\uC2E0\uD558\uB294 \uAC83\uC785\uB2C8\uB2E4. SPL-Token standard\uB97C \uC0AC\uC6A9\uD558\uAE30 \uC704\uD574\uC11C\uB294 \uD2B9\uC815 \uB77C\uC774\uBE0C\uB7EC\uB9AC\uAC00 \uD544\uC694\uD569\uB2C8\uB2E4. \uC544\uB798\uC5D0\uC11C \uC5B8\uC5B4\uC5D0 \uB530\uB77C \uCC3E\uC744 \uC218 \uC788\uC2B5\uB2C8\uB2E4.",-1),f=n("div",{class:"language-text ext-text line-numbers-mode"},[n("pre",{class:"language-text"},[n("code",null,`"@solana/spl-token": "^0.2.0" +import{_ as u,r as o,o as i,c as r,b as t,w as a,F as k,a as n,d as s,e as b}from"./app.2fbb9e96.js";const m={},d=n("h1",{id:"token",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#token","aria-hidden":"true"},"#"),s(" Token")],-1),y=n("h2",{id:"what-do-i-need-to-get-started-with-spl-tokens",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#what-do-i-need-to-get-started-with-spl-tokens","aria-hidden":"true"},"#"),s(" What do I need to get started with SPL-Tokens?")],-1),w=n("p",null,"Solana\uC5D0\uC11C \uB2F9\uC2E0\uC774 Token\uB4E4\uACFC \uD1B5\uC2E0\uD560 \uB54C, \uB2F9\uC2E0\uC740 \uC2E4\uC81C\uB85C\uB294 SPL-Token standard \uB77C\uACE0\uB3C4 \uD558\uB294 Solana Program Library Token\uACFC \uD1B5\uC2E0\uD558\uB294 \uAC83\uC785\uB2C8\uB2E4. SPL-Token standard\uB97C \uC0AC\uC6A9\uD558\uAE30 \uC704\uD574\uC11C\uB294 \uD2B9\uC815 \uB77C\uC774\uBE0C\uB7EC\uB9AC\uAC00 \uD544\uC694\uD569\uB2C8\uB2E4. \uC544\uB798\uC5D0\uC11C \uC5B8\uC5B4\uC5D0 \uB530\uB77C \uCC3E\uC744 \uC218 \uC788\uC2B5\uB2C8\uB2E4.",-1),f=n("div",{class:"language-text ext-text line-numbers-mode"},[n("pre",{class:"language-text"},[n("code",null,`"@solana/spl-token": "^0.2.0" `)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),g=n("h2",{id:"how-to-create-a-new-token",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-create-a-new-token","aria-hidden":"true"},"#"),s(" How to create a new Token")],-1),h=n("p",null,'Token\uC744 \uC0DD\uC131\uD558\uB294 \uAC83\uC740 "mint account"\uB77C\uACE0 \uBD88\uB9AC\uB294 \uAC83\uC744 \uC0DD\uC131\uD558\uB294 \uAC83\uC73C\uB85C \uC774\uB904\uC9D1\uB2C8\uB2E4. \uC774 mint Account\uB294 \uB098\uC911\uC5D0 \uC0AC\uC6A9\uC790\uC758 token Account\uC5D0 token\uB4E4\uC744 mint \uD560 \uB54C \uC0AC\uC6A9\uB429\uB2C8\uB2E4.',-1),A=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` clusterApiUrl`),n("span",{class:"token punctuation"},","),s(` Connection`),n("span",{class:"token punctuation"},","),s(` diff --git a/docs/.vuepress/dist/assets/token.html.002323ce.js b/docs/.vuepress/dist/assets/token.html.b0f64f1f.js similarity index 99% rename from docs/.vuepress/dist/assets/token.html.002323ce.js rename to docs/.vuepress/dist/assets/token.html.b0f64f1f.js index c725c5b9a..dbf54658d 100644 --- a/docs/.vuepress/dist/assets/token.html.002323ce.js +++ b/docs/.vuepress/dist/assets/token.html.b0f64f1f.js @@ -1,4 +1,4 @@ -import{_ as u,r as o,o as i,c as r,b as t,w as a,F as k,a as n,d as s,e as b}from"./app.cfdf84e7.js";const m={},d=n("h1",{id:"token",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#token","aria-hidden":"true"},"#"),s(" Token")],-1),y=n("h2",{id:"what-do-i-need-to-get-started-with-spl-tokens",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#what-do-i-need-to-get-started-with-spl-tokens","aria-hidden":"true"},"#"),s(" What do I need to get started with SPL-Tokens?")],-1),w=n("p",null,"Every time you interact with tokens on Solana, you are actually interacting with the Solana Program Library Token, or SPL-Token standard. The SPL-Token standard requires a specific library to be used, which you can find below based on your language.",-1),f=n("div",{class:"language-text ext-text line-numbers-mode"},[n("pre",{class:"language-text"},[n("code",null,`"@solana/spl-token": "^0.2.0" +import{_ as u,r as o,o as i,c as r,b as t,w as a,F as k,a as n,d as s,e as b}from"./app.2fbb9e96.js";const m={},d=n("h1",{id:"token",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#token","aria-hidden":"true"},"#"),s(" Token")],-1),y=n("h2",{id:"what-do-i-need-to-get-started-with-spl-tokens",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#what-do-i-need-to-get-started-with-spl-tokens","aria-hidden":"true"},"#"),s(" What do I need to get started with SPL-Tokens?")],-1),w=n("p",null,"Every time you interact with tokens on Solana, you are actually interacting with the Solana Program Library Token, or SPL-Token standard. The SPL-Token standard requires a specific library to be used, which you can find below based on your language.",-1),f=n("div",{class:"language-text ext-text line-numbers-mode"},[n("pre",{class:"language-text"},[n("code",null,`"@solana/spl-token": "^0.2.0" `)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),g=n("h2",{id:"how-to-create-a-new-token",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#how-to-create-a-new-token","aria-hidden":"true"},"#"),s(" How to create a new Token")],-1),h=n("p",null,`Creating tokens is done by creating what is called a "mint account". This mint account is later used to mint tokens to a user's token account.`,-1),A=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` clusterApiUrl`),n("span",{class:"token punctuation"},","),s(` Connection`),n("span",{class:"token punctuation"},","),s(` diff --git a/docs/.vuepress/dist/assets/token.html.98a84493.js b/docs/.vuepress/dist/assets/token.html.cb018164.js similarity index 99% rename from docs/.vuepress/dist/assets/token.html.98a84493.js rename to docs/.vuepress/dist/assets/token.html.cb018164.js index 8fd5b4c1b..53ee9f348 100644 --- a/docs/.vuepress/dist/assets/token.html.98a84493.js +++ b/docs/.vuepress/dist/assets/token.html.cb018164.js @@ -1,4 +1,4 @@ -import{_ as u,r as o,o as i,c as r,b as t,w as a,F as k,a as n,d as s,e as b}from"./app.cfdf84e7.js";const m={},d=n("h1",{id:"token",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#token","aria-hidden":"true"},"#"),s(" Token")],-1),y=n("h2",{id:"\u0E40\u0E23\u0E32\u0E15\u0E49\u0E2D\u0E07\u0E23\u0E39\u0E49\u0E2D\u0E30\u0E44\u0E23\u0E1A\u0E49\u0E32\u0E07\u0E01\u0E48\u0E2D\u0E19\u0E08\u0E30\u0E44\u0E1B\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19-spl-tokens",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E40\u0E23\u0E32\u0E15\u0E49\u0E2D\u0E07\u0E23\u0E39\u0E49\u0E2D\u0E30\u0E44\u0E23\u0E1A\u0E49\u0E32\u0E07\u0E01\u0E48\u0E2D\u0E19\u0E08\u0E30\u0E44\u0E1B\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19-spl-tokens","aria-hidden":"true"},"#"),s(" \u0E40\u0E23\u0E32\u0E15\u0E49\u0E2D\u0E07\u0E23\u0E39\u0E49\u0E2D\u0E30\u0E44\u0E23\u0E1A\u0E49\u0E32\u0E07\u0E01\u0E48\u0E2D\u0E19\u0E08\u0E30\u0E44\u0E1B\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19 SPL-Tokens?")],-1),f=n("p",null,"\u0E17\u0E38\u0E01\u0E04\u0E23\u0E31\u0E49\u0E07\u0E17\u0E35\u0E48\u0E40\u0E23\u0E32\u0E08\u0E30\u0E17\u0E33\u0E07\u0E32\u0E19\u0E01\u0E31\u0E1A tokens \u0E1A\u0E19 Solana \u0E08\u0E23\u0E34\u0E07\u0E46 \u0E41\u0E25\u0E49\u0E27\u0E40\u0E23\u0E32\u0E08\u0E30\u0E17\u0E33\u0E07\u0E32\u0E19\u0E01\u0E31\u0E1A Solana Program Library Token \u0E2B\u0E23\u0E37\u0E2D\u0E21\u0E32\u0E15\u0E23\u0E10\u0E32\u0E19 SPL-Token standard \u0E0B\u0E36\u0E48\u0E07\u0E08\u0E30\u0E15\u0E49\u0E2D\u0E07\u0E01\u0E32\u0E23 library \u0E40\u0E09\u0E1E\u0E32\u0E30 \u0E17\u0E35\u0E48\u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E2B\u0E32\u0E44\u0E14\u0E49\u0E02\u0E49\u0E32\u0E07\u0E25\u0E48\u0E32\u0E07\u0E19\u0E35\u0E49\u0E15\u0E32\u0E21\u0E20\u0E32\u0E29\u0E32\u0E17\u0E35\u0E48\u0E40\u0E23\u0E32\u0E2A\u0E19\u0E43\u0E08",-1),w=n("div",{class:"language-text ext-text line-numbers-mode"},[n("pre",{class:"language-text"},[n("code",null,`"@solana/spl-token": "^0.2.0" +import{_ as u,r as o,o as i,c as r,b as t,w as a,F as k,a as n,d as s,e as b}from"./app.2fbb9e96.js";const m={},d=n("h1",{id:"token",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#token","aria-hidden":"true"},"#"),s(" Token")],-1),y=n("h2",{id:"\u0E40\u0E23\u0E32\u0E15\u0E49\u0E2D\u0E07\u0E23\u0E39\u0E49\u0E2D\u0E30\u0E44\u0E23\u0E1A\u0E49\u0E32\u0E07\u0E01\u0E48\u0E2D\u0E19\u0E08\u0E30\u0E44\u0E1B\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19-spl-tokens",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E40\u0E23\u0E32\u0E15\u0E49\u0E2D\u0E07\u0E23\u0E39\u0E49\u0E2D\u0E30\u0E44\u0E23\u0E1A\u0E49\u0E32\u0E07\u0E01\u0E48\u0E2D\u0E19\u0E08\u0E30\u0E44\u0E1B\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19-spl-tokens","aria-hidden":"true"},"#"),s(" \u0E40\u0E23\u0E32\u0E15\u0E49\u0E2D\u0E07\u0E23\u0E39\u0E49\u0E2D\u0E30\u0E44\u0E23\u0E1A\u0E49\u0E32\u0E07\u0E01\u0E48\u0E2D\u0E19\u0E08\u0E30\u0E44\u0E1B\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19 SPL-Tokens?")],-1),f=n("p",null,"\u0E17\u0E38\u0E01\u0E04\u0E23\u0E31\u0E49\u0E07\u0E17\u0E35\u0E48\u0E40\u0E23\u0E32\u0E08\u0E30\u0E17\u0E33\u0E07\u0E32\u0E19\u0E01\u0E31\u0E1A tokens \u0E1A\u0E19 Solana \u0E08\u0E23\u0E34\u0E07\u0E46 \u0E41\u0E25\u0E49\u0E27\u0E40\u0E23\u0E32\u0E08\u0E30\u0E17\u0E33\u0E07\u0E32\u0E19\u0E01\u0E31\u0E1A Solana Program Library Token \u0E2B\u0E23\u0E37\u0E2D\u0E21\u0E32\u0E15\u0E23\u0E10\u0E32\u0E19 SPL-Token standard \u0E0B\u0E36\u0E48\u0E07\u0E08\u0E30\u0E15\u0E49\u0E2D\u0E07\u0E01\u0E32\u0E23 library \u0E40\u0E09\u0E1E\u0E32\u0E30 \u0E17\u0E35\u0E48\u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E2B\u0E32\u0E44\u0E14\u0E49\u0E02\u0E49\u0E32\u0E07\u0E25\u0E48\u0E32\u0E07\u0E19\u0E35\u0E49\u0E15\u0E32\u0E21\u0E20\u0E32\u0E29\u0E32\u0E17\u0E35\u0E48\u0E40\u0E23\u0E32\u0E2A\u0E19\u0E43\u0E08",-1),w=n("div",{class:"language-text ext-text line-numbers-mode"},[n("pre",{class:"language-text"},[n("code",null,`"@solana/spl-token": "^0.2.0" `)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),g=n("h2",{id:"\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07-token-\u0E43\u0E2B\u0E21\u0E48",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07-token-\u0E43\u0E2B\u0E21\u0E48","aria-hidden":"true"},"#"),s(" \u0E27\u0E34\u0E18\u0E35\u0E2A\u0E23\u0E49\u0E32\u0E07 Token \u0E43\u0E2B\u0E21\u0E48")],-1),h=n("p",null,'\u0E01\u0E32\u0E23\u0E2A\u0E23\u0E49\u0E32\u0E07 token \u0E17\u0E33\u0E44\u0E14\u0E49\u0E14\u0E49\u0E27\u0E22\u0E01\u0E32\u0E23\u0E2A\u0E23\u0E49\u0E32\u0E07 "mint account" \u0E0B\u0E36\u0E48\u0E07 mint account \u0E19\u0E35\u0E49\u0E08\u0E30\u0E16\u0E39\u0E01\u0E19\u0E33\u0E44\u0E1B\u0E43\u0E0A\u0E49\u0E43\u0E19\u0E01\u0E32\u0E23 mint token \u0E44\u0E1B\u0E17\u0E35\u0E48 token account \u0E02\u0E2D\u0E07\u0E40\u0E23\u0E32\u0E43\u0E19\u0E20\u0E32\u0E22\u0E2B\u0E25\u0E31\u0E07',-1),A=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` clusterApiUrl`),n("span",{class:"token punctuation"},","),s(` Connection`),n("span",{class:"token punctuation"},","),s(` diff --git a/docs/.vuepress/dist/assets/token.html.c4c325c8.js b/docs/.vuepress/dist/assets/token.html.e77e0548.js similarity index 99% rename from docs/.vuepress/dist/assets/token.html.c4c325c8.js rename to docs/.vuepress/dist/assets/token.html.e77e0548.js index 74dc7fab6..6a46c4f52 100644 --- a/docs/.vuepress/dist/assets/token.html.c4c325c8.js +++ b/docs/.vuepress/dist/assets/token.html.e77e0548.js @@ -1,4 +1,4 @@ -import{_ as u,r as o,o as i,c as r,b as t,w as a,F as k,a as n,d as s,e as b}from"./app.cfdf84e7.js";const m={},d=n("h1",{id:"token",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#token","aria-hidden":"true"},"#"),s(" Token")],-1),y=n("h2",{id:"apa-yang-saya-perlukan-untuk-memulai-dengan-spl-tokens",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#apa-yang-saya-perlukan-untuk-memulai-dengan-spl-tokens","aria-hidden":"true"},"#"),s(" Apa yang saya perlukan untuk memulai dengan SPL-Tokens?")],-1),g=n("p",null,"Setiap kali anda berinteraksi dengan tokens di Solana, anda sebenarnya berinteraksi dengan Solana Program Library Token, atau SPL-Token standard. SPL-Token standard mensyaratkan sebuah library spesifik untuk digunakan, yang anda dapat temukan dibawah ini berdasarkan bahasa anda.",-1),f=n("div",{class:"language-text ext-text line-numbers-mode"},[n("pre",{class:"language-text"},[n("code",null,`"@solana/spl-token": "^0.2.0" +import{_ as u,r as o,o as i,c as r,b as t,w as a,F as k,a as n,d as s,e as b}from"./app.2fbb9e96.js";const m={},d=n("h1",{id:"token",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#token","aria-hidden":"true"},"#"),s(" Token")],-1),y=n("h2",{id:"apa-yang-saya-perlukan-untuk-memulai-dengan-spl-tokens",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#apa-yang-saya-perlukan-untuk-memulai-dengan-spl-tokens","aria-hidden":"true"},"#"),s(" Apa yang saya perlukan untuk memulai dengan SPL-Tokens?")],-1),g=n("p",null,"Setiap kali anda berinteraksi dengan tokens di Solana, anda sebenarnya berinteraksi dengan Solana Program Library Token, atau SPL-Token standard. SPL-Token standard mensyaratkan sebuah library spesifik untuk digunakan, yang anda dapat temukan dibawah ini berdasarkan bahasa anda.",-1),f=n("div",{class:"language-text ext-text line-numbers-mode"},[n("pre",{class:"language-text"},[n("code",null,`"@solana/spl-token": "^0.2.0" `)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),w=n("h2",{id:"bagaimana-cara-untuk-membuat-sebuah-token-baru",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#bagaimana-cara-untuk-membuat-sebuah-token-baru","aria-hidden":"true"},"#"),s(" Bagaimana cara untuk membuat sebuah Token baru")],-1),h=n("p",null,'Membuat token-token didapat dengan menciptakan apa yang disebut dengan sebuah "akun mint". Akun mint ini nantinya akan digunakan untuk me-mint token-token ke sebuah akun token dan membuat supply awal.',-1),A=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(` clusterApiUrl`),n("span",{class:"token punctuation"},","),s(` Connection`),n("span",{class:"token punctuation"},","),s(` diff --git a/docs/.vuepress/dist/assets/token.html.1c90d8cc.js b/docs/.vuepress/dist/assets/token.html.eae451ae.js similarity index 99% rename from docs/.vuepress/dist/assets/token.html.1c90d8cc.js rename to docs/.vuepress/dist/assets/token.html.eae451ae.js index cb6fceef4..aa860a3cc 100644 --- a/docs/.vuepress/dist/assets/token.html.1c90d8cc.js +++ b/docs/.vuepress/dist/assets/token.html.eae451ae.js @@ -1,4 +1,4 @@ -import{_ as n,e as s}from"./app.cfdf84e7.js";const a={},e=s(`

    Interacting with Tokens (Token\u2019lar ile Etkile\u015Fim)

    What do I need to get started with SPL-Tokens? (SPL Token\u2019lar\u0131 kullanmaya ba\u015Flamak i\xE7in neye ihtiyac\u0131m\u0131z var?)

    Solana'da Token\u2019larla her etkile\u015Fimde bulundu\u011Funuzda, asl\u0131nda Solana Program Kitapl\u0131\u011F\u0131 Token\u2019\u0131 veya SPL-Token standard\u0131 ile etkile\u015Fime girersiniz. SPL-Token standard\u0131, programlama dilinize g\xF6re a\u015Fa\u011F\u0131da bulabilece\u011Finiz belirli bir kitapl\u0131\u011F\u0131n kullan\u0131lmas\u0131n\u0131 gerektirir.

    "@solana/spl-token": "^0.2.0"
    +import{_ as n,e as s}from"./app.2fbb9e96.js";const a={},e=s(`

    Interacting with Tokens (Token\u2019lar ile Etkile\u015Fim)

    What do I need to get started with SPL-Tokens? (SPL Token\u2019lar\u0131 kullanmaya ba\u015Flamak i\xE7in neye ihtiyac\u0131m\u0131z var?)

    Solana'da Token\u2019larla her etkile\u015Fimde bulundu\u011Funuzda, asl\u0131nda Solana Program Kitapl\u0131\u011F\u0131 Token\u2019\u0131 veya SPL-Token standard\u0131 ile etkile\u015Fime girersiniz. SPL-Token standard\u0131, programlama dilinize g\xF6re a\u015Fa\u011F\u0131da bulabilece\u011Finiz belirli bir kitapl\u0131\u011F\u0131n kullan\u0131lmas\u0131n\u0131 gerektirir.

    "@solana/spl-token": "^0.2.0"
     

    How to create a new Token (Yeni bir Token olu\u015Fturma)

    Token olu\u015Fturma, "mint account" ad\u0131 verilen account olu\u015Fturularak yap\u0131l\u0131r. Bu mint account daha sonra bir kullan\u0131c\u0131n\u0131n token account'\u0131na token basmak i\xE7in kullan\u0131l\u0131r.

    // 1) use build-in function
     let mintPubkey = await createMint(
       connection, // conneciton
    diff --git a/docs/.vuepress/dist/assets/token.html.80a1f130.js b/docs/.vuepress/dist/assets/token.html.f8b32b64.js
    similarity index 99%
    rename from docs/.vuepress/dist/assets/token.html.80a1f130.js
    rename to docs/.vuepress/dist/assets/token.html.f8b32b64.js
    index bb4f6fe8b..cc0aed211 100644
    --- a/docs/.vuepress/dist/assets/token.html.80a1f130.js
    +++ b/docs/.vuepress/dist/assets/token.html.f8b32b64.js
    @@ -1,4 +1,4 @@
    -import{_ as u,r as o,o as i,c as r,b as t,w as a,F as k,a as n,d as s,e as b}from"./app.cfdf84e7.js";const m={},d=n("h1",{id:"token",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#token","aria-hidden":"true"},"#"),s(" Token")],-1),y=n("h2",{id:"toi-nen-can-gi-\u0111e-bat-\u0111au-voi-spl-tokens",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#toi-nen-can-gi-\u0111e-bat-\u0111au-voi-spl-tokens","aria-hidden":"true"},"#"),s(" T\xF4i n\xEAn c\u1EA7n g\xEC \u0111\u1EC3 b\u1EAFt \u0111\u1EA7u v\u1EDBi SPL-Tokens?")],-1),f=n("p",null,"M\u1ED7i khi b\u1EA1n t\u01B0\u01A1ng t\xE1c v\u1EDBi token tr\xEAn Solana, b\u1EA1n th\u1EF1c ch\u1EA5t \u0111ang t\u01B0\u01A1ng t\xE1c v\u1EDBi Solana Program Library Token, g\u1ECDi t\u1EAFt l\xE0 SPL-Token Standard. Chu\u1EA9n SPL-Token y\xEAu c\u1EA7u m\u1ED9t th\u01B0 vi\u1EC7n \u0111\u1EB7c th\xF9 \u0111\u1EC3 s\u1EED d\u1EE5ng v\xE0 b\u1EA1n c\xF3 th\u1EC3 t\xECm th\u1EA5y b\xEAn d\u01B0\u1EDBi tu\u1EF3 v\xE0o ng\xF4n ng\u1EEF l\u1EADp tr\xECnh c\u1EE7a b\u1EA1n.",-1),g=n("div",{class:"language-text ext-text line-numbers-mode"},[n("pre",{class:"language-text"},[n("code",null,`"@solana/spl-token": "^0.2.0"
    +import{_ as u,r as o,o as i,c as r,b as t,w as a,F as k,a as n,d as s,e as b}from"./app.2fbb9e96.js";const m={},d=n("h1",{id:"token",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#token","aria-hidden":"true"},"#"),s(" Token")],-1),y=n("h2",{id:"toi-nen-can-gi-\u0111e-bat-\u0111au-voi-spl-tokens",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#toi-nen-can-gi-\u0111e-bat-\u0111au-voi-spl-tokens","aria-hidden":"true"},"#"),s(" T\xF4i n\xEAn c\u1EA7n g\xEC \u0111\u1EC3 b\u1EAFt \u0111\u1EA7u v\u1EDBi SPL-Tokens?")],-1),f=n("p",null,"M\u1ED7i khi b\u1EA1n t\u01B0\u01A1ng t\xE1c v\u1EDBi token tr\xEAn Solana, b\u1EA1n th\u1EF1c ch\u1EA5t \u0111ang t\u01B0\u01A1ng t\xE1c v\u1EDBi Solana Program Library Token, g\u1ECDi t\u1EAFt l\xE0 SPL-Token Standard. Chu\u1EA9n SPL-Token y\xEAu c\u1EA7u m\u1ED9t th\u01B0 vi\u1EC7n \u0111\u1EB7c th\xF9 \u0111\u1EC3 s\u1EED d\u1EE5ng v\xE0 b\u1EA1n c\xF3 th\u1EC3 t\xECm th\u1EA5y b\xEAn d\u01B0\u1EDBi tu\u1EF3 v\xE0o ng\xF4n ng\u1EEF l\u1EADp tr\xECnh c\u1EE7a b\u1EA1n.",-1),g=n("div",{class:"language-text ext-text line-numbers-mode"},[n("pre",{class:"language-text"},[n("code",null,`"@solana/spl-token": "^0.2.0"
     `)]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),w=n("h2",{id:"lam-the-nao-\u0111e-tao-mot-token-moi",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#lam-the-nao-\u0111e-tao-mot-token-moi","aria-hidden":"true"},"#"),s(" L\xE0m th\u1EBF n\xE0o \u0111\u1EC3 t\u1EA1o m\u1ED9t token m\u1EDBi")],-1),h=n("p",null,'T\u1EA1o m\u1EDBi token c\xF3 th\u1EC3 th\u1EF1c hi\u1EC7n b\u1EB1ng c\xE1ch t\u1EA1o m\u1ED9t "mint account". Account n\xE0y s\u1EBD \u0111\u01B0\u1EE3c s\u1EED d\u1EE5ng l\u01B0u \u0111\xFAc token cho token account v\xE0 ghi nh\u1EDB t\u1ED5ng cung cung kh\u1EDFi t\u1EA1o.',-1),A=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(`
       clusterApiUrl`),n("span",{class:"token punctuation"},","),s(`
       Connection`),n("span",{class:"token punctuation"},","),s(`
    diff --git a/docs/.vuepress/dist/assets/transactions.html.5dbc422d.js b/docs/.vuepress/dist/assets/transactions.html.02f2bc8b.js
    similarity index 99%
    rename from docs/.vuepress/dist/assets/transactions.html.5dbc422d.js
    rename to docs/.vuepress/dist/assets/transactions.html.02f2bc8b.js
    index 512b9ce6d..d7d539ac8 100644
    --- a/docs/.vuepress/dist/assets/transactions.html.5dbc422d.js
    +++ b/docs/.vuepress/dist/assets/transactions.html.02f2bc8b.js
    @@ -1 +1 @@
    -import{_ as r,r as a,o as i,c,a as t,b as n,w as l,F as d,d as e,e as h}from"./app.cfdf84e7.js";const _={},u=t("h1",{id:"transactions",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#transactions","aria-hidden":"true"},"#"),e(" Transactions")],-1),p=e("Clients \u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 invoke "),m=e("programs"),f=e(" \u0E14\u0E49\u0E27\u0E22\u0E01\u0E32\u0E23\u0E2A\u0E48\u0E07 (submitting) transaction \u0E44\u0E1B\u0E17\u0E35\u0E48 cluster. transaction \u0E08\u0E30\u0E1B\u0E23\u0E30\u0E01\u0E2D\u0E1A\u0E44\u0E1B\u0E14\u0E49\u0E27\u0E22 instructions, \u0E42\u0E14\u0E22\u0E41\u0E15\u0E48\u0E25\u0E30\u0E2D\u0E31\u0E19\u0E08\u0E30\u0E21\u0E35\u0E40\u0E1B\u0E49\u0E32\u0E2B\u0E21\u0E32\u0E22\u0E44\u0E1B\u0E17\u0E35\u0E48 program \u0E02\u0E2D\u0E07\u0E15\u0E31\u0E27\u0E40\u0E2D\u0E07. \u0E40\u0E21\u0E37\u0E48\u0E2D transaction submit \u0E44\u0E1B\u0E41\u0E25\u0E49\u0E27, Solana "),b={href:"https://docs.solana.com/developing/programming-model/runtime",target:"_blank",rel:"noopener noreferrer"},g=e("Runtime"),k=e(" \u0E08\u0E30 process instructions \u0E15\u0E32\u0E21\u0E25\u0E33\u0E14\u0E31\u0E1A \u0E41\u0E25\u0E30\u0E17\u0E33\u0E43\u0E19\u0E23\u0E30\u0E14\u0E31\u0E1A atomic. \u0E16\u0E49\u0E32\u0E21\u0E35\u0E2A\u0E48\u0E27\u0E19\u0E44\u0E2B\u0E19\u0E02\u0E2D\u0E07 instruction \u0E25\u0E49\u0E21\u0E40\u0E2B\u0E25\u0E27 (fail), \u0E17\u0E31\u0E49\u0E07 transaction \u0E08\u0E30 fail \u0E17\u0E31\u0E49\u0E07\u0E2B\u0E21\u0E14."),y=h('

    \u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49

    Fact Sheet

    • Instructions \u0E04\u0E37\u0E2D\u0E2B\u0E19\u0E48\u0E27\u0E22\u0E01\u0E32\u0E23\u0E17\u0E33\u0E07\u0E32\u0E19\u0E1E\u0E37\u0E49\u0E19\u0E10\u0E32\u0E19\u0E17\u0E35\u0E48\u0E2A\u0E38\u0E14\u0E02\u0E2D\u0E07 Solana
    • \u0E41\u0E15\u0E48\u0E25\u0E30 instruction \u0E08\u0E30\u0E21\u0E35:
      • program_id \u0E02\u0E2D\u0E07 program
      • \u0E0A\u0E38\u0E14\u0E02\u0E2D\u0E07 accounts \u0E17\u0E31\u0E49\u0E07\u0E2B\u0E21\u0E14\u0E17\u0E35\u0E48\u0E15\u0E49\u0E2D\u0E07\u0E2D\u0E48\u0E32\u0E19 (read) \u0E2B\u0E23\u0E37\u0E2D\u0E40\u0E02\u0E35\u0E22\u0E19 (write)
      • instruction_data byte array \u0E17\u0E35\u0E48\u0E08\u0E33\u0E40\u0E1E\u0E32\u0E30\u0E40\u0E08\u0E32\u0E30\u0E08\u0E07\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E41\u0E15\u0E48\u0E1A\u0E30 program
    • \u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E43\u0E2A\u0E48\u0E40 instructions \u0E44\u0E14\u0E49\u0E21\u0E32\u0E01\u0E01\u0E27\u0E48\u0E32\u0E2B\u0E19\u0E36\u0E48\u0E07\u0E15\u0E31\u0E27 \u0E40\u0E02\u0E49\u0E32\u0E44\u0E1B\u0E43\u0E19\u0E2B\u0E19\u0E36\u0E48\u0E07 transaction
    • \u0E41\u0E15\u0E48\u0E25\u0E30 transaction \u0E08\u0E30\u0E21\u0E35:
      • \u0E0A\u0E38\u0E14\u0E02\u0E2D\u0E07 accounts \u0E17\u0E31\u0E49\u0E07\u0E2B\u0E21\u0E14\u0E17\u0E35\u0E48\u0E15\u0E49\u0E2D\u0E07\u0E2D\u0E48\u0E32\u0E19 (read) \u0E2B\u0E23\u0E37\u0E2D\u0E40\u0E02\u0E35\u0E22\u0E19 (write)
      • instructions \u0E2B\u0E19\u0E36\u0E48\u0E07\u0E15\u0E31\u0E27 \u0E2B\u0E23\u0E37\u0E2D\u0E21\u0E32\u0E01\u0E01\u0E27\u0E48\u0E32
      • blockhash \u0E25\u0E48\u0E32\u0E2A\u0E38\u0E14 (recent)
      • signatures \u0E2B\u0E19\u0E36\u0E48\u0E07\u0E15\u0E31\u0E27 \u0E2B\u0E23\u0E37\u0E2D\u0E21\u0E32\u0E01\u0E01\u0E27\u0E48\u0E32
    • Instructions \u0E08\u0E30 process instructions \u0E15\u0E32\u0E21\u0E25\u0E33\u0E14\u0E31\u0E1A \u0E41\u0E25\u0E30\u0E17\u0E33\u0E43\u0E19\u0E23\u0E30\u0E14\u0E31\u0E1A atomic
    • \u0E16\u0E49\u0E32\u0E21\u0E35\u0E2A\u0E48\u0E27\u0E19\u0E44\u0E2B\u0E19\u0E02\u0E2D\u0E07 instruction \u0E25\u0E49\u0E21\u0E40\u0E2B\u0E25\u0E27 (fail), \u0E17\u0E31\u0E49\u0E07 transaction \u0E08\u0E30 fail \u0E17\u0E31\u0E49\u0E07\u0E2B\u0E21\u0E14
    • \u0E02\u0E19\u0E32\u0E14\u0E02\u0E2D\u0E07 Transactions \u0E08\u0E33\u0E01\u0E31\u0E14\u0E2D\u0E22\u0E39\u0E48\u0E17\u0E35\u0E48 1232 bytes

    \u0E25\u0E07\u0E25\u0E36\u0E01

    Solana Runtime \u0E15\u0E49\u0E2D\u0E07\u0E01\u0E32\u0E23\u0E43\u0E2B\u0E49\u0E17\u0E31\u0E49\u0E07 instructions \u0E41\u0E25\u0E30 transactions \u0E23\u0E30\u0E1A\u0E38 accounts \u0E17\u0E31\u0E49\u0E07\u0E2B\u0E21\u0E14\u0E17\u0E35\u0E48\u0E08\u0E30\u0E2D\u0E48\u0E32\u0E19 \u0E2B\u0E23\u0E37\u0E2D\u0E40\u0E02\u0E35\u0E22\u0E19 \u0E01\u0E32\u0E23\u0E17\u0E35\u0E48\u0E40\u0E23\u0E32\u0E40\u0E15\u0E23\u0E35\u0E22\u0E21 accounts \u0E44\u0E27\u0E49\u0E01\u0E48\u0E2D\u0E19\u0E41\u0E1A\u0E1A\u0E19\u0E35\u0E49\u0E08\u0E30\u0E17\u0E33\u0E43\u0E2B\u0E49 runtime \u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E17\u0E33\u0E07\u0E32\u0E19\u0E02\u0E19\u0E32\u0E19\u0E01\u0E31\u0E19 (parallelize execution) \u0E44\u0E14\u0E49\u0E17\u0E31\u0E49\u0E07 transactions.

    \u0E40\u0E21\u0E37\u0E48\u0E2D transaction \u0E16\u0E39\u0E01 submit \u0E44\u0E1B\u0E17\u0E35\u0E48 cluster \u0E41\u0E25\u0E49\u0E27, \u0E15\u0E31\u0E27 runtime \u0E08\u0E30 process instructions \u0E15\u0E32\u0E21\u0E25\u0E33\u0E14\u0E31\u0E1A \u0E41\u0E25\u0E30\u0E17\u0E33\u0E43\u0E19\u0E23\u0E30\u0E14\u0E31\u0E1A atomic. \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E41\u0E15\u0E48\u0E25\u0E30 instruction, program \u0E17\u0E35\u0E48\u0E23\u0E31\u0E1A\u0E44\u0E1B\u0E08\u0E30\u0E41\u0E1B\u0E25 (interpret) data array \u0E41\u0E25\u0E30\u0E17\u0E33\u0E07\u0E32\u0E19\u0E1A\u0E19 accounts \u0E17\u0E35\u0E48\u0E01\u0E33\u0E2B\u0E19\u0E14\u0E44\u0E27\u0E49. program \u0E08\u0E30\u0E2A\u0E48\u0E07\u0E1C\u0E25\u0E2A\u0E33\u0E40\u0E23\u0E47\u0E08 \u0E2B\u0E23\u0E37\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E1C\u0E34\u0E14\u0E1E\u0E25\u0E32\u0E14 (error code) \u0E01\u0E25\u0E31\u0E1A\u0E21\u0E32. \u0E16\u0E49\u0E32\u0E2A\u0E48\u0E07 error \u0E01\u0E25\u0E31\u0E1A\u0E21\u0E32 \u0E17\u0E31\u0E49\u0E07 transaction \u0E08\u0E30 fail \u0E17\u0E31\u0E19\u0E17\u0E35.

    transaction \u0E17\u0E35\u0E48\u0E40\u0E1B\u0E47\u0E19\u0E01\u0E32\u0E23\u0E16\u0E2D\u0E19\u0E40\u0E07\u0E34\u0E19 (debit) \u0E08\u0E32\u0E01 account \u0E2B\u0E23\u0E37\u0E2D\u0E08\u0E30\u0E41\u0E01\u0E49\u0E44\u0E02 data \u0E08\u0E30\u0E15\u0E49\u0E2D\u0E07\u0E21\u0E35 signature \u0E02\u0E2D\u0E07\u0E40\u0E08\u0E49\u0E32\u0E02\u0E2D\u0E07 account \u0E19\u0E31\u0E49\u0E19\u0E2A\u0E48\u0E07\u0E21\u0E32\u0E14\u0E49\u0E27\u0E22. account \u0E44\u0E2B\u0E19\u0E17\u0E35\u0E48\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E40\u0E02\u0E35\u0E22\u0E19\u0E44\u0E14\u0E49 \u0E08\u0E30\u0E16\u0E39\u0E01\u0E23\u0E30\u0E1A\u0E38\u0E44\u0E27\u0E49\u0E27\u0E48\u0E32 writable. account \u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E23\u0E31\u0E1A\u0E40\u0E07\u0E34\u0E19 (credited) \u0E42\u0E14\u0E22\u0E44\u0E21\u0E48\u0E15\u0E49\u0E2D\u0E07\u0E44\u0E14\u0E49\u0E23\u0E31\u0E1A\u0E2D\u0E19\u0E38\u0E0D\u0E32\u0E15\u0E08\u0E32\u0E01\u0E40\u0E08\u0E49\u0E32\u0E02\u0E2D\u0E07 \u0E17\u0E31\u0E49\u0E07\u0E19\u0E35\u0E49\u0E04\u0E19\u0E08\u0E48\u0E32\u0E22 (payer)\u0E44\u0E14\u0E49\u0E08\u0E48\u0E32\u0E22\u0E04\u0E23\u0E2D\u0E1A\u0E04\u0E25\u0E38\u0E21\u0E04\u0E48\u0E32 rent \u0E41\u0E25\u0E30 transaction fees \u0E44\u0E1B\u0E41\u0E25\u0E49\u0E27.

    ',6),x=e("\u0E01\u0E48\u0E2D\u0E19\u0E01\u0E32\u0E23 submission, \u0E17\u0E38\u0E01 transactions \u0E08\u0E30\u0E15\u0E49\u0E2D\u0E07\u0E2D\u0E49\u0E32\u0E07\u0E44\u0E1B\u0E17\u0E35\u0E48 "),v={href:"https://docs.solana.com/developing/programming-model/transactions#recent-blockhash",target:"_blank",rel:"noopener noreferrer"},S=e("recent blockhash"),T=e(". \u0E42\u0E14\u0E22\u0E17\u0E35\u0E48 blockhash \u0E08\u0E30\u0E43\u0E0A\u0E49\u0E43\u0E19\u0E01\u0E32\u0E23\u0E1B\u0E49\u0E2D\u0E07\u0E01\u0E31\u0E19\u0E01\u0E32\u0E23\u0E2A\u0E48\u0E07 transactions \u0E0B\u0E49\u0E33 \u0E41\u0E25\u0E30 transactions \u0E17\u0E35\u0E48\u0E40\u0E01\u0E48\u0E32\u0E40\u0E01\u0E34\u0E19\u0E44\u0E1B. \u0E08\u0E33\u0E19\u0E27\u0E19\u0E2A\u0E39\u0E07\u0E2A\u0E38\u0E14\u0E02\u0E2D\u0E07 transaction's blockhash \u0E04\u0E37\u0E2D 150 blocks, \u0E2B\u0E23\u0E37\u0E2D\u0E1B\u0E23\u0E30\u0E21\u0E32\u0E13 ~1 \u0E19\u0E32\u0E17\u0E35 19 \u0E27\u0E34\u0E19\u0E32\u0E17\u0E35 \u0E43\u0E19\u0E40\u0E27\u0E25\u0E32\u0E15\u0E2D\u0E19\u0E17\u0E35\u0E48\u0E40\u0E02\u0E35\u0E22\u0E19\u0E19\u0E35\u0E49."),w=t("h3",{id:"\u0E04\u0E48\u0E32\u0E18\u0E23\u0E23\u0E21\u0E40\u0E19\u0E35\u0E22\u0E21-fees",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#\u0E04\u0E48\u0E32\u0E18\u0E23\u0E23\u0E21\u0E40\u0E19\u0E35\u0E22\u0E21-fees","aria-hidden":"true"},"#"),e(" \u0E04\u0E48\u0E32\u0E18\u0E23\u0E23\u0E21\u0E40\u0E19\u0E35\u0E22\u0E21 (Fees)")],-1),F=t("p",null,"Solana \u0E08\u0E30\u0E40\u0E01\u0E47\u0E1A fee 2 \u0E41\u0E1A\u0E1A:",-1),I={href:"https://docs.solana.com/transaction_fees",target:"_blank",rel:"noopener noreferrer"},L=e("Transaction fees"),R=e(" \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E17\u0E33 transactions (\u0E2B\u0E23\u0E37\u0E2D\u0E17\u0E35\u0E48\u0E40\u0E23\u0E35\u0E22\u0E01\u0E27\u0E48\u0E32 \u201Cgas fees\u201D)"),N={href:"https://docs.solana.com/developing/programming-model/accounts#rent",target:"_blank",rel:"noopener noreferrer"},V=e("Rent fees"),B=e(" \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E40\u0E01\u0E47\u0E1A data on-chain"),C=t("p",null,[e("\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A Solana, transaction fees \u0E08\u0E30\u0E40\u0E1B\u0E47\u0E19 deterministic (\u0E17\u0E38\u0E01\u0E40\u0E2B\u0E15\u0E38\u0E01\u0E32\u0E23\u0E13\u0E4C\u0E17\u0E35\u0E48\u0E40\u0E01\u0E34\u0E14\u0E02\u0E36\u0E49\u0E19 \u0E21\u0E35\u0E1B\u0E31\u0E08\u0E08\u0E31\u0E22\u0E17\u0E35\u0E48\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E01\u0E33\u0E2B\u0E19\u0E14\u0E44\u0E14\u0E49\u0E42\u0E14\u0E22\u0E2A\u0E21\u0E1A\u0E39\u0E23\u0E13\u0E4C): \u0E08\u0E30\u0E22\u0E31\u0E07\u0E44\u0E21\u0E48\u0E21\u0E35 fee market \u0E17\u0E35\u0E48\u0E1C\u0E39\u0E49\u0E43\u0E0A\u0E49 \u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 \u0E08\u0E48\u0E32\u0E22 fees \u0E2A\u0E39\u0E07\u0E01\u0E27\u0E48\u0E32\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E40\u0E1E\u0E34\u0E48\u0E21\u0E42\u0E2D\u0E01\u0E32\u0E2A\u0E43\u0E19\u0E01\u0E32\u0E23\u0E16\u0E39\u0E01\u0E1B\u0E23\u0E30\u0E21\u0E27\u0E25\u0E1C\u0E25\u0E43\u0E19 block \u0E16\u0E31\u0E14\u0E44\u0E1B\u0E43\u0E19\u0E40\u0E27\u0E25\u0E32\u0E15\u0E2D\u0E19\u0E17\u0E35\u0E48\u0E40\u0E02\u0E35\u0E22\u0E19\u0E19\u0E35\u0E49, transaction fees \u0E08\u0E30\u0E40\u0E01\u0E47\u0E1A\u0E15\u0E32\u0E21\u0E08\u0E33\u0E19\u0E27\u0E19\u0E02\u0E2D\u0E07 signatures \u0E17\u0E35\u0E48\u0E15\u0E49\u0E2D\u0E07\u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49 ("),t("code",null,"lamports_per_signature"),e("), \u0E44\u0E21\u0E48\u0E43\u0E0A\u0E48\u0E15\u0E32\u0E21\u0E08\u0E33\u0E19\u0E27\u0E19 resources \u0E17\u0E35\u0E48\u0E43\u0E0A\u0E49\u0E44\u0E1B \u0E17\u0E31\u0E49\u0E07\u0E19\u0E35\u0E49\u0E40\u0E1B\u0E47\u0E19\u0E40\u0E1E\u0E23\u0E32\u0E30\u0E21\u0E35 hard cap 1232 bytes \u0E43\u0E19\u0E17\u0E38\u0E01\u0E46 transactions \u0E2D\u0E22\u0E39\u0E48.")],-1),E=t("p",null,[e("\u0E17\u0E38\u0E01\u0E46 transactions \u0E08\u0E30\u0E15\u0E49\u0E2D\u0E07\u0E21\u0E35 "),t("code",null,"writable"),e(" account \u0E2D\u0E22\u0E48\u0E32\u0E07\u0E19\u0E49\u0E2D\u0E22\u0E2B\u0E19\u0E36\u0E07\u0E15\u0E31\u0E27\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A sign transaction. \u0E40\u0E21\u0E37\u0E48\u0E2D submitted \u0E41\u0E25\u0E49\u0E27 writable signer account \u0E17\u0E35\u0E48\u0E16\u0E39\u0E01 serialized \u0E40\u0E1B\u0E47\u0E19\u0E15\u0E31\u0E27\u0E41\u0E23\u0E01\u0E08\u0E30\u0E40\u0E1B\u0E47\u0E19 fee payer \u0E41\u0E25\u0E30 account \u0E19\u0E35\u0E49\u0E08\u0E30\u0E08\u0E48\u0E32\u0E22\u0E04\u0E48\u0E32 transaction \u0E42\u0E14\u0E22\u0E44\u0E21\u0E48\u0E2A\u0E19\u0E43\u0E08\u0E27\u0E48\u0E32 transaction \u0E08\u0E30\u0E2A\u0E33\u0E40\u0E23\u0E47\u0E08\u0E2B\u0E23\u0E37\u0E2D\u0E44\u0E21\u0E48. \u0E16\u0E49\u0E32 fee payer \u0E44\u0E21\u0E48\u0E21\u0E35 balance \u0E1E\u0E2D\u0E17\u0E35\u0E48\u0E08\u0E30\u0E08\u0E48\u0E32\u0E22 transaction fee \u0E44\u0E14\u0E49 transaction \u0E01\u0E47\u0E08\u0E30\u0E16\u0E39\u0E01\u0E17\u0E34\u0E49\u0E07\u0E44\u0E1B (dropped).")],-1),j=t("p",null,"\u0E43\u0E19\u0E40\u0E27\u0E25\u0E32\u0E15\u0E2D\u0E19\u0E17\u0E35\u0E48\u0E40\u0E02\u0E35\u0E22\u0E19\u0E19\u0E35\u0E49, 50% \u0E02\u0E2D\u0E07\u0E17\u0E38\u0E01 transaction fees \u0E08\u0E30\u0E16\u0E39\u0E01\u0E40\u0E01\u0E47\u0E1A\u0E44\u0E1B\u0E42\u0E14\u0E22 validator \u0E17\u0E35\u0E48\u0E40\u0E1B\u0E47\u0E19\u0E04\u0E19\u0E2A\u0E23\u0E49\u0E32\u0E07 block, \u0E43\u0E19\u0E02\u0E13\u0E30\u0E17\u0E35\u0E48 50% \u0E17\u0E35\u0E48\u0E40\u0E2B\u0E25\u0E37\u0E2D\u0E08\u0E30\u0E16\u0E39\u0E01\u0E40\u0E1C\u0E32\u0E17\u0E34\u0E49\u0E07 (burn). \u0E42\u0E04\u0E23\u0E07\u0E2A\u0E23\u0E49\u0E32\u0E07\u0E41\u0E1A\u0E1A\u0E19\u0E35\u0E49\u0E21\u0E35\u0E02\u0E36\u0E49\u0E19\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E40\u0E1B\u0E47\u0E19\u0E41\u0E23\u0E07\u0E08\u0E39\u0E07\u0E43\u0E08\u0E43\u0E2B\u0E49 validators \u0E1B\u0E23\u0E30\u0E21\u0E27\u0E13\u0E1C\u0E25 transactions \u0E43\u0E2B\u0E49\u0E21\u0E32\u0E01\u0E17\u0E35\u0E48\u0E2A\u0E38\u0E14\u0E40\u0E17\u0E48\u0E32\u0E17\u0E35\u0E48\u0E08\u0E30\u0E40\u0E1B\u0E47\u0E19\u0E44\u0E1B\u0E44\u0E14\u0E49\u0E43\u0E19\u0E0A\u0E48\u0E27\u0E07 slots \u0E43\u0E19\u0E02\u0E13\u0E30\u0E17\u0E35\u0E48\u0E40\u0E1B\u0E47\u0E19\u0E1C\u0E39\u0E49\u0E19\u0E33 (leader)",-1),z=t("h2",{id:"\u0E41\u0E2B\u0E25\u0E48\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#\u0E41\u0E2B\u0E25\u0E48\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19","aria-hidden":"true"},"#"),e(" \u0E41\u0E2B\u0E25\u0E48\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19")],-1),A={href:"https://docs.solana.com/developing/programming-model/transactions",target:"_blank",rel:"noopener noreferrer"},D=e("Official Documentation"),J={href:"https://solana.wiki/docs/solidity-guide/transactions/#solana-transaction-structure",target:"_blank",rel:"noopener noreferrer"},H=e("Transaction Structure"),M={href:"https://jstarry.notion.site/Transaction-Fees-f09387e6a8d84287aa16a34ecb58e239",target:"_blank",rel:"noopener noreferrer"},O=e("Transaction Fees by Justin Starry"),P={href:"https://2501babe.github.io/posts/solana101.html",target:"_blank",rel:"noopener noreferrer"},q=e("An Introduction to Solana by Hana"),G={href:"https://jito-labs.medium.com/solana-validator-101-transaction-processing-90bcdc271143",target:"_blank",rel:"noopener noreferrer"},K=e("Transaction Processing by Jito Labs"),Q={href:"https://medium.com/@asmiller1989/solana-transactions-in-depth-1f7f7fe06ac2",target:"_blank",rel:"noopener noreferrer"},U=e("Solana Transaction in Depth by Alex Miller");function W(X,Y){const s=a("RouterLink"),o=a("ExternalLinkIcon");return i(),c(d,null,[u,t("p",null,[p,n(s,{to:"/th/core-concepts/programs.html"},{default:l(()=>[m]),_:1}),f,t("a",b,[g,n(o)]),k]),y,t("p",null,[x,t("a",v,[S,n(o)]),T]),w,F,t("ul",null,[t("li",null,[t("a",I,[L,n(o)]),R]),t("li",null,[t("a",N,[V,n(o)]),B])]),C,E,j,z,t("ul",null,[t("li",null,[t("a",A,[D,n(o)])]),t("li",null,[t("a",J,[H,n(o)])]),t("li",null,[t("a",M,[O,n(o)])]),t("li",null,[t("a",P,[q,n(o)])]),t("li",null,[t("a",G,[K,n(o)])]),t("li",null,[t("a",Q,[U,n(o)])])])],64)}var $=r(_,[["render",W]]);export{$ as default}; +import{_ as r,r as a,o as i,c,a as t,b as n,w as l,F as d,d as e,e as h}from"./app.2fbb9e96.js";const _={},u=t("h1",{id:"transactions",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#transactions","aria-hidden":"true"},"#"),e(" Transactions")],-1),p=e("Clients \u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 invoke "),m=e("programs"),f=e(" \u0E14\u0E49\u0E27\u0E22\u0E01\u0E32\u0E23\u0E2A\u0E48\u0E07 (submitting) transaction \u0E44\u0E1B\u0E17\u0E35\u0E48 cluster. transaction \u0E08\u0E30\u0E1B\u0E23\u0E30\u0E01\u0E2D\u0E1A\u0E44\u0E1B\u0E14\u0E49\u0E27\u0E22 instructions, \u0E42\u0E14\u0E22\u0E41\u0E15\u0E48\u0E25\u0E30\u0E2D\u0E31\u0E19\u0E08\u0E30\u0E21\u0E35\u0E40\u0E1B\u0E49\u0E32\u0E2B\u0E21\u0E32\u0E22\u0E44\u0E1B\u0E17\u0E35\u0E48 program \u0E02\u0E2D\u0E07\u0E15\u0E31\u0E27\u0E40\u0E2D\u0E07. \u0E40\u0E21\u0E37\u0E48\u0E2D transaction submit \u0E44\u0E1B\u0E41\u0E25\u0E49\u0E27, Solana "),b={href:"https://docs.solana.com/developing/programming-model/runtime",target:"_blank",rel:"noopener noreferrer"},g=e("Runtime"),k=e(" \u0E08\u0E30 process instructions \u0E15\u0E32\u0E21\u0E25\u0E33\u0E14\u0E31\u0E1A \u0E41\u0E25\u0E30\u0E17\u0E33\u0E43\u0E19\u0E23\u0E30\u0E14\u0E31\u0E1A atomic. \u0E16\u0E49\u0E32\u0E21\u0E35\u0E2A\u0E48\u0E27\u0E19\u0E44\u0E2B\u0E19\u0E02\u0E2D\u0E07 instruction \u0E25\u0E49\u0E21\u0E40\u0E2B\u0E25\u0E27 (fail), \u0E17\u0E31\u0E49\u0E07 transaction \u0E08\u0E30 fail \u0E17\u0E31\u0E49\u0E07\u0E2B\u0E21\u0E14."),y=h('

    \u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49

    Fact Sheet

    • Instructions \u0E04\u0E37\u0E2D\u0E2B\u0E19\u0E48\u0E27\u0E22\u0E01\u0E32\u0E23\u0E17\u0E33\u0E07\u0E32\u0E19\u0E1E\u0E37\u0E49\u0E19\u0E10\u0E32\u0E19\u0E17\u0E35\u0E48\u0E2A\u0E38\u0E14\u0E02\u0E2D\u0E07 Solana
    • \u0E41\u0E15\u0E48\u0E25\u0E30 instruction \u0E08\u0E30\u0E21\u0E35:
      • program_id \u0E02\u0E2D\u0E07 program
      • \u0E0A\u0E38\u0E14\u0E02\u0E2D\u0E07 accounts \u0E17\u0E31\u0E49\u0E07\u0E2B\u0E21\u0E14\u0E17\u0E35\u0E48\u0E15\u0E49\u0E2D\u0E07\u0E2D\u0E48\u0E32\u0E19 (read) \u0E2B\u0E23\u0E37\u0E2D\u0E40\u0E02\u0E35\u0E22\u0E19 (write)
      • instruction_data byte array \u0E17\u0E35\u0E48\u0E08\u0E33\u0E40\u0E1E\u0E32\u0E30\u0E40\u0E08\u0E32\u0E30\u0E08\u0E07\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E41\u0E15\u0E48\u0E1A\u0E30 program
    • \u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E43\u0E2A\u0E48\u0E40 instructions \u0E44\u0E14\u0E49\u0E21\u0E32\u0E01\u0E01\u0E27\u0E48\u0E32\u0E2B\u0E19\u0E36\u0E48\u0E07\u0E15\u0E31\u0E27 \u0E40\u0E02\u0E49\u0E32\u0E44\u0E1B\u0E43\u0E19\u0E2B\u0E19\u0E36\u0E48\u0E07 transaction
    • \u0E41\u0E15\u0E48\u0E25\u0E30 transaction \u0E08\u0E30\u0E21\u0E35:
      • \u0E0A\u0E38\u0E14\u0E02\u0E2D\u0E07 accounts \u0E17\u0E31\u0E49\u0E07\u0E2B\u0E21\u0E14\u0E17\u0E35\u0E48\u0E15\u0E49\u0E2D\u0E07\u0E2D\u0E48\u0E32\u0E19 (read) \u0E2B\u0E23\u0E37\u0E2D\u0E40\u0E02\u0E35\u0E22\u0E19 (write)
      • instructions \u0E2B\u0E19\u0E36\u0E48\u0E07\u0E15\u0E31\u0E27 \u0E2B\u0E23\u0E37\u0E2D\u0E21\u0E32\u0E01\u0E01\u0E27\u0E48\u0E32
      • blockhash \u0E25\u0E48\u0E32\u0E2A\u0E38\u0E14 (recent)
      • signatures \u0E2B\u0E19\u0E36\u0E48\u0E07\u0E15\u0E31\u0E27 \u0E2B\u0E23\u0E37\u0E2D\u0E21\u0E32\u0E01\u0E01\u0E27\u0E48\u0E32
    • Instructions \u0E08\u0E30 process instructions \u0E15\u0E32\u0E21\u0E25\u0E33\u0E14\u0E31\u0E1A \u0E41\u0E25\u0E30\u0E17\u0E33\u0E43\u0E19\u0E23\u0E30\u0E14\u0E31\u0E1A atomic
    • \u0E16\u0E49\u0E32\u0E21\u0E35\u0E2A\u0E48\u0E27\u0E19\u0E44\u0E2B\u0E19\u0E02\u0E2D\u0E07 instruction \u0E25\u0E49\u0E21\u0E40\u0E2B\u0E25\u0E27 (fail), \u0E17\u0E31\u0E49\u0E07 transaction \u0E08\u0E30 fail \u0E17\u0E31\u0E49\u0E07\u0E2B\u0E21\u0E14
    • \u0E02\u0E19\u0E32\u0E14\u0E02\u0E2D\u0E07 Transactions \u0E08\u0E33\u0E01\u0E31\u0E14\u0E2D\u0E22\u0E39\u0E48\u0E17\u0E35\u0E48 1232 bytes

    \u0E25\u0E07\u0E25\u0E36\u0E01

    Solana Runtime \u0E15\u0E49\u0E2D\u0E07\u0E01\u0E32\u0E23\u0E43\u0E2B\u0E49\u0E17\u0E31\u0E49\u0E07 instructions \u0E41\u0E25\u0E30 transactions \u0E23\u0E30\u0E1A\u0E38 accounts \u0E17\u0E31\u0E49\u0E07\u0E2B\u0E21\u0E14\u0E17\u0E35\u0E48\u0E08\u0E30\u0E2D\u0E48\u0E32\u0E19 \u0E2B\u0E23\u0E37\u0E2D\u0E40\u0E02\u0E35\u0E22\u0E19 \u0E01\u0E32\u0E23\u0E17\u0E35\u0E48\u0E40\u0E23\u0E32\u0E40\u0E15\u0E23\u0E35\u0E22\u0E21 accounts \u0E44\u0E27\u0E49\u0E01\u0E48\u0E2D\u0E19\u0E41\u0E1A\u0E1A\u0E19\u0E35\u0E49\u0E08\u0E30\u0E17\u0E33\u0E43\u0E2B\u0E49 runtime \u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E17\u0E33\u0E07\u0E32\u0E19\u0E02\u0E19\u0E32\u0E19\u0E01\u0E31\u0E19 (parallelize execution) \u0E44\u0E14\u0E49\u0E17\u0E31\u0E49\u0E07 transactions.

    \u0E40\u0E21\u0E37\u0E48\u0E2D transaction \u0E16\u0E39\u0E01 submit \u0E44\u0E1B\u0E17\u0E35\u0E48 cluster \u0E41\u0E25\u0E49\u0E27, \u0E15\u0E31\u0E27 runtime \u0E08\u0E30 process instructions \u0E15\u0E32\u0E21\u0E25\u0E33\u0E14\u0E31\u0E1A \u0E41\u0E25\u0E30\u0E17\u0E33\u0E43\u0E19\u0E23\u0E30\u0E14\u0E31\u0E1A atomic. \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E41\u0E15\u0E48\u0E25\u0E30 instruction, program \u0E17\u0E35\u0E48\u0E23\u0E31\u0E1A\u0E44\u0E1B\u0E08\u0E30\u0E41\u0E1B\u0E25 (interpret) data array \u0E41\u0E25\u0E30\u0E17\u0E33\u0E07\u0E32\u0E19\u0E1A\u0E19 accounts \u0E17\u0E35\u0E48\u0E01\u0E33\u0E2B\u0E19\u0E14\u0E44\u0E27\u0E49. program \u0E08\u0E30\u0E2A\u0E48\u0E07\u0E1C\u0E25\u0E2A\u0E33\u0E40\u0E23\u0E47\u0E08 \u0E2B\u0E23\u0E37\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E1C\u0E34\u0E14\u0E1E\u0E25\u0E32\u0E14 (error code) \u0E01\u0E25\u0E31\u0E1A\u0E21\u0E32. \u0E16\u0E49\u0E32\u0E2A\u0E48\u0E07 error \u0E01\u0E25\u0E31\u0E1A\u0E21\u0E32 \u0E17\u0E31\u0E49\u0E07 transaction \u0E08\u0E30 fail \u0E17\u0E31\u0E19\u0E17\u0E35.

    transaction \u0E17\u0E35\u0E48\u0E40\u0E1B\u0E47\u0E19\u0E01\u0E32\u0E23\u0E16\u0E2D\u0E19\u0E40\u0E07\u0E34\u0E19 (debit) \u0E08\u0E32\u0E01 account \u0E2B\u0E23\u0E37\u0E2D\u0E08\u0E30\u0E41\u0E01\u0E49\u0E44\u0E02 data \u0E08\u0E30\u0E15\u0E49\u0E2D\u0E07\u0E21\u0E35 signature \u0E02\u0E2D\u0E07\u0E40\u0E08\u0E49\u0E32\u0E02\u0E2D\u0E07 account \u0E19\u0E31\u0E49\u0E19\u0E2A\u0E48\u0E07\u0E21\u0E32\u0E14\u0E49\u0E27\u0E22. account \u0E44\u0E2B\u0E19\u0E17\u0E35\u0E48\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E40\u0E02\u0E35\u0E22\u0E19\u0E44\u0E14\u0E49 \u0E08\u0E30\u0E16\u0E39\u0E01\u0E23\u0E30\u0E1A\u0E38\u0E44\u0E27\u0E49\u0E27\u0E48\u0E32 writable. account \u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E23\u0E31\u0E1A\u0E40\u0E07\u0E34\u0E19 (credited) \u0E42\u0E14\u0E22\u0E44\u0E21\u0E48\u0E15\u0E49\u0E2D\u0E07\u0E44\u0E14\u0E49\u0E23\u0E31\u0E1A\u0E2D\u0E19\u0E38\u0E0D\u0E32\u0E15\u0E08\u0E32\u0E01\u0E40\u0E08\u0E49\u0E32\u0E02\u0E2D\u0E07 \u0E17\u0E31\u0E49\u0E07\u0E19\u0E35\u0E49\u0E04\u0E19\u0E08\u0E48\u0E32\u0E22 (payer)\u0E44\u0E14\u0E49\u0E08\u0E48\u0E32\u0E22\u0E04\u0E23\u0E2D\u0E1A\u0E04\u0E25\u0E38\u0E21\u0E04\u0E48\u0E32 rent \u0E41\u0E25\u0E30 transaction fees \u0E44\u0E1B\u0E41\u0E25\u0E49\u0E27.

    ',6),x=e("\u0E01\u0E48\u0E2D\u0E19\u0E01\u0E32\u0E23 submission, \u0E17\u0E38\u0E01 transactions \u0E08\u0E30\u0E15\u0E49\u0E2D\u0E07\u0E2D\u0E49\u0E32\u0E07\u0E44\u0E1B\u0E17\u0E35\u0E48 "),v={href:"https://docs.solana.com/developing/programming-model/transactions#recent-blockhash",target:"_blank",rel:"noopener noreferrer"},S=e("recent blockhash"),T=e(". \u0E42\u0E14\u0E22\u0E17\u0E35\u0E48 blockhash \u0E08\u0E30\u0E43\u0E0A\u0E49\u0E43\u0E19\u0E01\u0E32\u0E23\u0E1B\u0E49\u0E2D\u0E07\u0E01\u0E31\u0E19\u0E01\u0E32\u0E23\u0E2A\u0E48\u0E07 transactions \u0E0B\u0E49\u0E33 \u0E41\u0E25\u0E30 transactions \u0E17\u0E35\u0E48\u0E40\u0E01\u0E48\u0E32\u0E40\u0E01\u0E34\u0E19\u0E44\u0E1B. \u0E08\u0E33\u0E19\u0E27\u0E19\u0E2A\u0E39\u0E07\u0E2A\u0E38\u0E14\u0E02\u0E2D\u0E07 transaction's blockhash \u0E04\u0E37\u0E2D 150 blocks, \u0E2B\u0E23\u0E37\u0E2D\u0E1B\u0E23\u0E30\u0E21\u0E32\u0E13 ~1 \u0E19\u0E32\u0E17\u0E35 19 \u0E27\u0E34\u0E19\u0E32\u0E17\u0E35 \u0E43\u0E19\u0E40\u0E27\u0E25\u0E32\u0E15\u0E2D\u0E19\u0E17\u0E35\u0E48\u0E40\u0E02\u0E35\u0E22\u0E19\u0E19\u0E35\u0E49."),w=t("h3",{id:"\u0E04\u0E48\u0E32\u0E18\u0E23\u0E23\u0E21\u0E40\u0E19\u0E35\u0E22\u0E21-fees",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#\u0E04\u0E48\u0E32\u0E18\u0E23\u0E23\u0E21\u0E40\u0E19\u0E35\u0E22\u0E21-fees","aria-hidden":"true"},"#"),e(" \u0E04\u0E48\u0E32\u0E18\u0E23\u0E23\u0E21\u0E40\u0E19\u0E35\u0E22\u0E21 (Fees)")],-1),F=t("p",null,"Solana \u0E08\u0E30\u0E40\u0E01\u0E47\u0E1A fee 2 \u0E41\u0E1A\u0E1A:",-1),I={href:"https://docs.solana.com/transaction_fees",target:"_blank",rel:"noopener noreferrer"},L=e("Transaction fees"),R=e(" \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E17\u0E33 transactions (\u0E2B\u0E23\u0E37\u0E2D\u0E17\u0E35\u0E48\u0E40\u0E23\u0E35\u0E22\u0E01\u0E27\u0E48\u0E32 \u201Cgas fees\u201D)"),N={href:"https://docs.solana.com/developing/programming-model/accounts#rent",target:"_blank",rel:"noopener noreferrer"},V=e("Rent fees"),B=e(" \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E40\u0E01\u0E47\u0E1A data on-chain"),C=t("p",null,[e("\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A Solana, transaction fees \u0E08\u0E30\u0E40\u0E1B\u0E47\u0E19 deterministic (\u0E17\u0E38\u0E01\u0E40\u0E2B\u0E15\u0E38\u0E01\u0E32\u0E23\u0E13\u0E4C\u0E17\u0E35\u0E48\u0E40\u0E01\u0E34\u0E14\u0E02\u0E36\u0E49\u0E19 \u0E21\u0E35\u0E1B\u0E31\u0E08\u0E08\u0E31\u0E22\u0E17\u0E35\u0E48\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E01\u0E33\u0E2B\u0E19\u0E14\u0E44\u0E14\u0E49\u0E42\u0E14\u0E22\u0E2A\u0E21\u0E1A\u0E39\u0E23\u0E13\u0E4C): \u0E08\u0E30\u0E22\u0E31\u0E07\u0E44\u0E21\u0E48\u0E21\u0E35 fee market \u0E17\u0E35\u0E48\u0E1C\u0E39\u0E49\u0E43\u0E0A\u0E49 \u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 \u0E08\u0E48\u0E32\u0E22 fees \u0E2A\u0E39\u0E07\u0E01\u0E27\u0E48\u0E32\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E40\u0E1E\u0E34\u0E48\u0E21\u0E42\u0E2D\u0E01\u0E32\u0E2A\u0E43\u0E19\u0E01\u0E32\u0E23\u0E16\u0E39\u0E01\u0E1B\u0E23\u0E30\u0E21\u0E27\u0E25\u0E1C\u0E25\u0E43\u0E19 block \u0E16\u0E31\u0E14\u0E44\u0E1B\u0E43\u0E19\u0E40\u0E27\u0E25\u0E32\u0E15\u0E2D\u0E19\u0E17\u0E35\u0E48\u0E40\u0E02\u0E35\u0E22\u0E19\u0E19\u0E35\u0E49, transaction fees \u0E08\u0E30\u0E40\u0E01\u0E47\u0E1A\u0E15\u0E32\u0E21\u0E08\u0E33\u0E19\u0E27\u0E19\u0E02\u0E2D\u0E07 signatures \u0E17\u0E35\u0E48\u0E15\u0E49\u0E2D\u0E07\u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49 ("),t("code",null,"lamports_per_signature"),e("), \u0E44\u0E21\u0E48\u0E43\u0E0A\u0E48\u0E15\u0E32\u0E21\u0E08\u0E33\u0E19\u0E27\u0E19 resources \u0E17\u0E35\u0E48\u0E43\u0E0A\u0E49\u0E44\u0E1B \u0E17\u0E31\u0E49\u0E07\u0E19\u0E35\u0E49\u0E40\u0E1B\u0E47\u0E19\u0E40\u0E1E\u0E23\u0E32\u0E30\u0E21\u0E35 hard cap 1232 bytes \u0E43\u0E19\u0E17\u0E38\u0E01\u0E46 transactions \u0E2D\u0E22\u0E39\u0E48.")],-1),E=t("p",null,[e("\u0E17\u0E38\u0E01\u0E46 transactions \u0E08\u0E30\u0E15\u0E49\u0E2D\u0E07\u0E21\u0E35 "),t("code",null,"writable"),e(" account \u0E2D\u0E22\u0E48\u0E32\u0E07\u0E19\u0E49\u0E2D\u0E22\u0E2B\u0E19\u0E36\u0E07\u0E15\u0E31\u0E27\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A sign transaction. \u0E40\u0E21\u0E37\u0E48\u0E2D submitted \u0E41\u0E25\u0E49\u0E27 writable signer account \u0E17\u0E35\u0E48\u0E16\u0E39\u0E01 serialized \u0E40\u0E1B\u0E47\u0E19\u0E15\u0E31\u0E27\u0E41\u0E23\u0E01\u0E08\u0E30\u0E40\u0E1B\u0E47\u0E19 fee payer \u0E41\u0E25\u0E30 account \u0E19\u0E35\u0E49\u0E08\u0E30\u0E08\u0E48\u0E32\u0E22\u0E04\u0E48\u0E32 transaction \u0E42\u0E14\u0E22\u0E44\u0E21\u0E48\u0E2A\u0E19\u0E43\u0E08\u0E27\u0E48\u0E32 transaction \u0E08\u0E30\u0E2A\u0E33\u0E40\u0E23\u0E47\u0E08\u0E2B\u0E23\u0E37\u0E2D\u0E44\u0E21\u0E48. \u0E16\u0E49\u0E32 fee payer \u0E44\u0E21\u0E48\u0E21\u0E35 balance \u0E1E\u0E2D\u0E17\u0E35\u0E48\u0E08\u0E30\u0E08\u0E48\u0E32\u0E22 transaction fee \u0E44\u0E14\u0E49 transaction \u0E01\u0E47\u0E08\u0E30\u0E16\u0E39\u0E01\u0E17\u0E34\u0E49\u0E07\u0E44\u0E1B (dropped).")],-1),j=t("p",null,"\u0E43\u0E19\u0E40\u0E27\u0E25\u0E32\u0E15\u0E2D\u0E19\u0E17\u0E35\u0E48\u0E40\u0E02\u0E35\u0E22\u0E19\u0E19\u0E35\u0E49, 50% \u0E02\u0E2D\u0E07\u0E17\u0E38\u0E01 transaction fees \u0E08\u0E30\u0E16\u0E39\u0E01\u0E40\u0E01\u0E47\u0E1A\u0E44\u0E1B\u0E42\u0E14\u0E22 validator \u0E17\u0E35\u0E48\u0E40\u0E1B\u0E47\u0E19\u0E04\u0E19\u0E2A\u0E23\u0E49\u0E32\u0E07 block, \u0E43\u0E19\u0E02\u0E13\u0E30\u0E17\u0E35\u0E48 50% \u0E17\u0E35\u0E48\u0E40\u0E2B\u0E25\u0E37\u0E2D\u0E08\u0E30\u0E16\u0E39\u0E01\u0E40\u0E1C\u0E32\u0E17\u0E34\u0E49\u0E07 (burn). \u0E42\u0E04\u0E23\u0E07\u0E2A\u0E23\u0E49\u0E32\u0E07\u0E41\u0E1A\u0E1A\u0E19\u0E35\u0E49\u0E21\u0E35\u0E02\u0E36\u0E49\u0E19\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E40\u0E1B\u0E47\u0E19\u0E41\u0E23\u0E07\u0E08\u0E39\u0E07\u0E43\u0E08\u0E43\u0E2B\u0E49 validators \u0E1B\u0E23\u0E30\u0E21\u0E27\u0E13\u0E1C\u0E25 transactions \u0E43\u0E2B\u0E49\u0E21\u0E32\u0E01\u0E17\u0E35\u0E48\u0E2A\u0E38\u0E14\u0E40\u0E17\u0E48\u0E32\u0E17\u0E35\u0E48\u0E08\u0E30\u0E40\u0E1B\u0E47\u0E19\u0E44\u0E1B\u0E44\u0E14\u0E49\u0E43\u0E19\u0E0A\u0E48\u0E27\u0E07 slots \u0E43\u0E19\u0E02\u0E13\u0E30\u0E17\u0E35\u0E48\u0E40\u0E1B\u0E47\u0E19\u0E1C\u0E39\u0E49\u0E19\u0E33 (leader)",-1),z=t("h2",{id:"\u0E41\u0E2B\u0E25\u0E48\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#\u0E41\u0E2B\u0E25\u0E48\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19","aria-hidden":"true"},"#"),e(" \u0E41\u0E2B\u0E25\u0E48\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19")],-1),A={href:"https://docs.solana.com/developing/programming-model/transactions",target:"_blank",rel:"noopener noreferrer"},D=e("Official Documentation"),J={href:"https://solana.wiki/docs/solidity-guide/transactions/#solana-transaction-structure",target:"_blank",rel:"noopener noreferrer"},H=e("Transaction Structure"),M={href:"https://jstarry.notion.site/Transaction-Fees-f09387e6a8d84287aa16a34ecb58e239",target:"_blank",rel:"noopener noreferrer"},O=e("Transaction Fees by Justin Starry"),P={href:"https://2501babe.github.io/posts/solana101.html",target:"_blank",rel:"noopener noreferrer"},q=e("An Introduction to Solana by Hana"),G={href:"https://jito-labs.medium.com/solana-validator-101-transaction-processing-90bcdc271143",target:"_blank",rel:"noopener noreferrer"},K=e("Transaction Processing by Jito Labs"),Q={href:"https://medium.com/@asmiller1989/solana-transactions-in-depth-1f7f7fe06ac2",target:"_blank",rel:"noopener noreferrer"},U=e("Solana Transaction in Depth by Alex Miller");function W(X,Y){const s=a("RouterLink"),o=a("ExternalLinkIcon");return i(),c(d,null,[u,t("p",null,[p,n(s,{to:"/th/core-concepts/programs.html"},{default:l(()=>[m]),_:1}),f,t("a",b,[g,n(o)]),k]),y,t("p",null,[x,t("a",v,[S,n(o)]),T]),w,F,t("ul",null,[t("li",null,[t("a",I,[L,n(o)]),R]),t("li",null,[t("a",N,[V,n(o)]),B])]),C,E,j,z,t("ul",null,[t("li",null,[t("a",A,[D,n(o)])]),t("li",null,[t("a",J,[H,n(o)])]),t("li",null,[t("a",M,[O,n(o)])]),t("li",null,[t("a",P,[q,n(o)])]),t("li",null,[t("a",G,[K,n(o)])]),t("li",null,[t("a",Q,[U,n(o)])])])],64)}var $=r(_,[["render",W]]);export{$ as default}; diff --git a/docs/.vuepress/dist/assets/transactions.html.3d289101.js b/docs/.vuepress/dist/assets/transactions.html.039d4d6d.js similarity index 99% rename from docs/.vuepress/dist/assets/transactions.html.3d289101.js rename to docs/.vuepress/dist/assets/transactions.html.039d4d6d.js index 4d1f512e6..53b7d6837 100644 --- a/docs/.vuepress/dist/assets/transactions.html.3d289101.js +++ b/docs/.vuepress/dist/assets/transactions.html.039d4d6d.js @@ -1 +1 @@ -import{_ as l,r as n,o,c as s,a as e,b as r,w as c,F as d,d as a,e as m}from"./app.cfdf84e7.js";const h={},k=e("h1",{id:"transactions-islemler",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#transactions-islemler","aria-hidden":"true"},"#"),a(" Transactions (\u0130\u015Flemler)")],-1),u=a("Client\u2019lar, bir cluster\u2019a bir transaction (i\u015Flem) g\xF6ndererek "),b=a("programlar\u0131"),_=a(" \xE7a\u011F\u0131rabilir. Tek bir i\u015Flem, her biri kendi program\u0131n\u0131 hedefleyen birden fazla talimat i\xE7erebilir. Bir i\u015Flem g\xF6nderildi\u011Finde, Solana "),y={href:"https://docs.solana.com/developing/programming-model/runtime",target:"_blank",rel:"noopener noreferrer"},p=a("Runtime"),g=a(" talimatlar\u0131n\u0131 s\u0131rayla ve atomik olarak i\u015Fleyecektir. Bir talimat\u0131n herhangi bir k\u0131sm\u0131 ba\u015Far\u0131s\u0131z olursa, t\xFCm i\u015Flem ba\u015Far\u0131s\u0131z olur."),f=m('

    Facts (\xD6zet Bilgiler)

    Bilgi Tablosu

    • Instruction\u2019lar(talimatlar) Solana'daki en temel operasyonel birimdir.
    • Her instruction \u015Funlar\u0131 i\xE7erir:
      • Ama\xE7lanan program\u0131n program_id'si
      • Okumak veya yazmak istedi\u011Fi t\xFCm account\u2019lar\u0131n array\u2019i
      • Ama\xE7lanan programa \xF6zel bir instruction_data byte array\u2019i
    • Birden fazla talimat tek bir transaction\u2019da(i\u015Flemde) toplanabilir.
    • Her i\u015Flem \u015Funlar\u0131 i\xE7erir:
      • Okumak veya yazmak istedi\u011Fi t\xFCm account\u2019lar\u0131n array\u2019i
      • Bir veya daha fazla instruction
      • Yak\u0131n zamanda bir blockhash
      • Bir veya daha fazla signature(imza)
    • Instruction\u2019lar s\u0131rayla ve atomik olarak i\u015Flenir.
    • Bir instruction\u2019\u0131n herhangi bir k\u0131sm\u0131 ba\u015Far\u0131s\u0131z olursa, transaction\u2019\u0131n tamam\u0131 ba\u015Far\u0131s\u0131z olur.
    • Transaction\u2019lar 1232 bayt ile s\u0131n\u0131rl\u0131d\u0131r.

    Deep Dive (Derinlemesine Bak\u0131\u015F)

    Solana Runtime, okumak veya yazmak istedikleri t\xFCm account\u2019lar\u0131n bir listesini belirtmek i\xE7in hem instructions hem de transactions gerektirir. Bu account\u2019lar\u0131 \xF6nceden talep ederek, \xE7al\u0131\u015Fma zaman\u0131 t\xFCm transaction\u2019larda y\xFCr\xFCtmeyi paralel hale getirebilir.

    Bir transaction bir k\xFCmeye g\xF6nderildi\u011Finde, \xE7al\u0131\u015Fma zaman\u0131 instruction\u2019lar\u0131n\u0131 s\u0131rayla ve atomik olarak i\u015Fleyecektir. Her talimat i\xE7in, al\u0131c\u0131 program kendi veri dizisini yorumlayacak ve belirtilen account\u2019lar\u0131 \xFCzerinde \xE7al\u0131\u015Facakt\u0131r. Program ya ba\u015Far\u0131l\u0131 bir \u015Fekilde ya da bir hata koduyla d\xF6necektir. Bir hata d\xF6nd\xFCr\xFCl\xFCrse, t\xFCm i\u015Flem hemen ba\u015Far\u0131s\u0131z olur.

    Bir account\u2019\u0131 bor\xE7land\u0131rmay\u0131 veya verilerini de\u011Fi\u015Ftirmeyi ama\xE7layan herhangi bir transaction, account sahibinin imzas\u0131n\u0131 gerektirir. De\u011Fi\u015Ftirilecek herhangi bir account writable(yaz\u0131labilir) olarak i\u015Faretlenir. Transaction \xFCcretini \xF6deyen ki\u015Fi, gerekli rent ve transaction \xFCcretlerini kar\u015F\u0131lad\u0131\u011F\u0131 s\xFCrece, sahibinin izni olmadan bir account\u2019a kredi verilebilir.

    G\xF6nderilmeden \xF6nce, t\xFCm transaction\u2019lar son bir blockhash\u2019e referans vermelidir. Blockhash, tekrarlar\u0131 \xF6nlemek ve eski transaction\u2019lar\u0131 ortadan kald\u0131rmak i\xE7in kullan\u0131l\u0131r. Bir i\u015Flemin blockhash\u2019inin maksimum ya\u015F\u0131 150 blok veya bu yaz\u0131n\u0131n yaz\u0131ld\u0131\u011F\u0131 zaman itibariyle yakla\u015F\u0131k ~1 dakika 19 saniyedir.

    Fees (\xDCcretler)

    Solana a\u011F\u0131 iki t\xFCr \xFCcret toplar:

    ',10),z=a("Yay\u0131lan i\u015Flemler i\xE7in "),v={href:"https://docs.solana.com/transaction_fees",target:"_blank",rel:"noopener noreferrer"},B=a("transaction \xFCcreti"),x=a(' ("gaz \xFCcretleri" olarak da bilinir)'),T=a("Zincir \xFCzerinde veri depolamak i\xE7in "),S={href:"https://docs.solana.com/developing/programming-model/accounts#rent",target:"_blank",rel:"noopener noreferrer"},D=a("rent \xFCcreti"),w=e("p",null,[a("Solana'da i\u015Flem \xFCcretleri belirlidir: Kullan\u0131c\u0131lar\u0131n bir sonraki blo\u011Fa dahil olma \u015Fanslar\u0131n\u0131 art\u0131rmak i\xE7in daha y\xFCksek \xFCcretler \xF6deyebilecekleri bir \xFCcret piyasas\u0131 kavram\u0131 yoktur. Bu yaz\u0131n\u0131n yaz\u0131ld\u0131\u011F\u0131 tarihte, i\u015Flem \xFCcretleri kullan\u0131lan kaynak miktar\u0131na g\xF6re de\u011Fil, yaln\u0131zca gereken imza say\u0131s\u0131na ("),e("code",null,"lamports_per_signature"),a(") g\xF6re belirlenir. Bunun nedeni, \u015Fu anda t\xFCm i\u015Flemlerde 1232 baytl\u0131k bir sabit s\u0131n\u0131r bulunmas\u0131d\u0131r.")],-1),F=e("p",null,"T\xFCm i\u015Flemler, i\u015Flemi imzalamak i\xE7in en az bir writable account(yaz\u0131labilir hesap) gerektirir. G\xF6nderildikten sonra, ilk olarak seri hale getirilen writable signer account \xFCcreti \xF6deyen ki\u015Fi olacakt\u0131r. Bu account, i\u015Flemin ba\u015Far\u0131l\u0131 veya ba\u015Far\u0131s\u0131z olmas\u0131na bak\u0131lmaks\u0131z\u0131n i\u015Flem maliyetini \xF6deyecektir. \xDCcret \xF6deyen ki\u015Finin i\u015Flem \xFCcretini \xF6demek i\xE7in yeterli bakiyesi yoksa i\u015Flem d\xFC\u015Fer.",-1),I=e("p",null,"Bu yaz\u0131n\u0131n yaz\u0131ld\u0131\u011F\u0131 s\u0131rada, t\xFCm i\u015Flem \xFCcretlerinin %50'si blo\u011Fu \xFCreten validator(do\u011Frulay\u0131c\u0131) taraf\u0131ndan al\u0131n\u0131rken, kalan %50'si yak\u0131l\u0131r(burn). Bu yap\u0131, validator\u2019leri leader program\u0131 s\u0131ras\u0131nda m\xFCmk\xFCn oldu\u011Funca \xE7ok i\u015Flemi i\u015Flemeye te\u015Fvik etmek i\xE7in \xE7al\u0131\u015F\u0131r.",-1),L=e("h2",{id:"other-resources-diger-kaynaklar",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#other-resources-diger-kaynaklar","aria-hidden":"true"},"#"),a(" Other Resources (Di\u011Fer Kaynaklar)")],-1),R={href:"https://docs.solana.com/developing/programming-model/transactions",target:"_blank",rel:"noopener noreferrer"},A=a("Official Documentation"),H={href:"https://solana.wiki/docs/solidity-guide/transactions/#solana-transaction-structure",target:"_blank",rel:"noopener noreferrer"},N=a("Transaction Structure"),O={href:"https://jstarry.notion.site/Transaction-Fees-f09387e6a8d84287aa16a34ecb58e239",target:"_blank",rel:"noopener noreferrer"},V=a("Transaction Fees by Justin Starry"),C={href:"https://2501babe.github.io/posts/solana101.html",target:"_blank",rel:"noopener noreferrer"},E=a("An Introduction to Solana by Hana"),j={href:"https://jito-labs.medium.com/solana-validator-101-transaction-processing-90bcdc271143",target:"_blank",rel:"noopener noreferrer"},G=a("Transaction Processing by Jito Labs"),J={href:"https://medium.com/@asmiller1989/solana-transactions-in-depth-1f7f7fe06ac2",target:"_blank",rel:"noopener noreferrer"},K=a("Solana Transaction in Depth by Alex Miller");function P(Y,M){const t=n("RouterLink"),i=n("ExternalLinkIcon");return o(),s(d,null,[k,e("p",null,[u,r(t,{to:"/tr/core-concepts/programs.html"},{default:c(()=>[b]),_:1}),_,e("a",y,[p,r(i)]),g]),f,e("ul",null,[e("li",null,[z,e("a",v,[B,r(i)]),x]),e("li",null,[T,e("a",S,[D,r(i)])])]),w,F,I,L,e("ul",null,[e("li",null,[e("a",R,[A,r(i)])]),e("li",null,[e("a",H,[N,r(i)])]),e("li",null,[e("a",O,[V,r(i)])]),e("li",null,[e("a",C,[E,r(i)])]),e("li",null,[e("a",j,[G,r(i)])]),e("li",null,[e("a",J,[K,r(i)])])])],64)}var q=l(h,[["render",P]]);export{q as default}; +import{_ as l,r as n,o,c as s,a as e,b as r,w as c,F as d,d as a,e as m}from"./app.2fbb9e96.js";const h={},k=e("h1",{id:"transactions-islemler",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#transactions-islemler","aria-hidden":"true"},"#"),a(" Transactions (\u0130\u015Flemler)")],-1),u=a("Client\u2019lar, bir cluster\u2019a bir transaction (i\u015Flem) g\xF6ndererek "),b=a("programlar\u0131"),_=a(" \xE7a\u011F\u0131rabilir. Tek bir i\u015Flem, her biri kendi program\u0131n\u0131 hedefleyen birden fazla talimat i\xE7erebilir. Bir i\u015Flem g\xF6nderildi\u011Finde, Solana "),y={href:"https://docs.solana.com/developing/programming-model/runtime",target:"_blank",rel:"noopener noreferrer"},p=a("Runtime"),g=a(" talimatlar\u0131n\u0131 s\u0131rayla ve atomik olarak i\u015Fleyecektir. Bir talimat\u0131n herhangi bir k\u0131sm\u0131 ba\u015Far\u0131s\u0131z olursa, t\xFCm i\u015Flem ba\u015Far\u0131s\u0131z olur."),f=m('

    Facts (\xD6zet Bilgiler)

    Bilgi Tablosu

    • Instruction\u2019lar(talimatlar) Solana'daki en temel operasyonel birimdir.
    • Her instruction \u015Funlar\u0131 i\xE7erir:
      • Ama\xE7lanan program\u0131n program_id'si
      • Okumak veya yazmak istedi\u011Fi t\xFCm account\u2019lar\u0131n array\u2019i
      • Ama\xE7lanan programa \xF6zel bir instruction_data byte array\u2019i
    • Birden fazla talimat tek bir transaction\u2019da(i\u015Flemde) toplanabilir.
    • Her i\u015Flem \u015Funlar\u0131 i\xE7erir:
      • Okumak veya yazmak istedi\u011Fi t\xFCm account\u2019lar\u0131n array\u2019i
      • Bir veya daha fazla instruction
      • Yak\u0131n zamanda bir blockhash
      • Bir veya daha fazla signature(imza)
    • Instruction\u2019lar s\u0131rayla ve atomik olarak i\u015Flenir.
    • Bir instruction\u2019\u0131n herhangi bir k\u0131sm\u0131 ba\u015Far\u0131s\u0131z olursa, transaction\u2019\u0131n tamam\u0131 ba\u015Far\u0131s\u0131z olur.
    • Transaction\u2019lar 1232 bayt ile s\u0131n\u0131rl\u0131d\u0131r.

    Deep Dive (Derinlemesine Bak\u0131\u015F)

    Solana Runtime, okumak veya yazmak istedikleri t\xFCm account\u2019lar\u0131n bir listesini belirtmek i\xE7in hem instructions hem de transactions gerektirir. Bu account\u2019lar\u0131 \xF6nceden talep ederek, \xE7al\u0131\u015Fma zaman\u0131 t\xFCm transaction\u2019larda y\xFCr\xFCtmeyi paralel hale getirebilir.

    Bir transaction bir k\xFCmeye g\xF6nderildi\u011Finde, \xE7al\u0131\u015Fma zaman\u0131 instruction\u2019lar\u0131n\u0131 s\u0131rayla ve atomik olarak i\u015Fleyecektir. Her talimat i\xE7in, al\u0131c\u0131 program kendi veri dizisini yorumlayacak ve belirtilen account\u2019lar\u0131 \xFCzerinde \xE7al\u0131\u015Facakt\u0131r. Program ya ba\u015Far\u0131l\u0131 bir \u015Fekilde ya da bir hata koduyla d\xF6necektir. Bir hata d\xF6nd\xFCr\xFCl\xFCrse, t\xFCm i\u015Flem hemen ba\u015Far\u0131s\u0131z olur.

    Bir account\u2019\u0131 bor\xE7land\u0131rmay\u0131 veya verilerini de\u011Fi\u015Ftirmeyi ama\xE7layan herhangi bir transaction, account sahibinin imzas\u0131n\u0131 gerektirir. De\u011Fi\u015Ftirilecek herhangi bir account writable(yaz\u0131labilir) olarak i\u015Faretlenir. Transaction \xFCcretini \xF6deyen ki\u015Fi, gerekli rent ve transaction \xFCcretlerini kar\u015F\u0131lad\u0131\u011F\u0131 s\xFCrece, sahibinin izni olmadan bir account\u2019a kredi verilebilir.

    G\xF6nderilmeden \xF6nce, t\xFCm transaction\u2019lar son bir blockhash\u2019e referans vermelidir. Blockhash, tekrarlar\u0131 \xF6nlemek ve eski transaction\u2019lar\u0131 ortadan kald\u0131rmak i\xE7in kullan\u0131l\u0131r. Bir i\u015Flemin blockhash\u2019inin maksimum ya\u015F\u0131 150 blok veya bu yaz\u0131n\u0131n yaz\u0131ld\u0131\u011F\u0131 zaman itibariyle yakla\u015F\u0131k ~1 dakika 19 saniyedir.

    Fees (\xDCcretler)

    Solana a\u011F\u0131 iki t\xFCr \xFCcret toplar:

    ',10),z=a("Yay\u0131lan i\u015Flemler i\xE7in "),v={href:"https://docs.solana.com/transaction_fees",target:"_blank",rel:"noopener noreferrer"},B=a("transaction \xFCcreti"),x=a(' ("gaz \xFCcretleri" olarak da bilinir)'),T=a("Zincir \xFCzerinde veri depolamak i\xE7in "),S={href:"https://docs.solana.com/developing/programming-model/accounts#rent",target:"_blank",rel:"noopener noreferrer"},D=a("rent \xFCcreti"),w=e("p",null,[a("Solana'da i\u015Flem \xFCcretleri belirlidir: Kullan\u0131c\u0131lar\u0131n bir sonraki blo\u011Fa dahil olma \u015Fanslar\u0131n\u0131 art\u0131rmak i\xE7in daha y\xFCksek \xFCcretler \xF6deyebilecekleri bir \xFCcret piyasas\u0131 kavram\u0131 yoktur. Bu yaz\u0131n\u0131n yaz\u0131ld\u0131\u011F\u0131 tarihte, i\u015Flem \xFCcretleri kullan\u0131lan kaynak miktar\u0131na g\xF6re de\u011Fil, yaln\u0131zca gereken imza say\u0131s\u0131na ("),e("code",null,"lamports_per_signature"),a(") g\xF6re belirlenir. Bunun nedeni, \u015Fu anda t\xFCm i\u015Flemlerde 1232 baytl\u0131k bir sabit s\u0131n\u0131r bulunmas\u0131d\u0131r.")],-1),F=e("p",null,"T\xFCm i\u015Flemler, i\u015Flemi imzalamak i\xE7in en az bir writable account(yaz\u0131labilir hesap) gerektirir. G\xF6nderildikten sonra, ilk olarak seri hale getirilen writable signer account \xFCcreti \xF6deyen ki\u015Fi olacakt\u0131r. Bu account, i\u015Flemin ba\u015Far\u0131l\u0131 veya ba\u015Far\u0131s\u0131z olmas\u0131na bak\u0131lmaks\u0131z\u0131n i\u015Flem maliyetini \xF6deyecektir. \xDCcret \xF6deyen ki\u015Finin i\u015Flem \xFCcretini \xF6demek i\xE7in yeterli bakiyesi yoksa i\u015Flem d\xFC\u015Fer.",-1),I=e("p",null,"Bu yaz\u0131n\u0131n yaz\u0131ld\u0131\u011F\u0131 s\u0131rada, t\xFCm i\u015Flem \xFCcretlerinin %50'si blo\u011Fu \xFCreten validator(do\u011Frulay\u0131c\u0131) taraf\u0131ndan al\u0131n\u0131rken, kalan %50'si yak\u0131l\u0131r(burn). Bu yap\u0131, validator\u2019leri leader program\u0131 s\u0131ras\u0131nda m\xFCmk\xFCn oldu\u011Funca \xE7ok i\u015Flemi i\u015Flemeye te\u015Fvik etmek i\xE7in \xE7al\u0131\u015F\u0131r.",-1),L=e("h2",{id:"other-resources-diger-kaynaklar",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#other-resources-diger-kaynaklar","aria-hidden":"true"},"#"),a(" Other Resources (Di\u011Fer Kaynaklar)")],-1),R={href:"https://docs.solana.com/developing/programming-model/transactions",target:"_blank",rel:"noopener noreferrer"},A=a("Official Documentation"),H={href:"https://solana.wiki/docs/solidity-guide/transactions/#solana-transaction-structure",target:"_blank",rel:"noopener noreferrer"},N=a("Transaction Structure"),O={href:"https://jstarry.notion.site/Transaction-Fees-f09387e6a8d84287aa16a34ecb58e239",target:"_blank",rel:"noopener noreferrer"},V=a("Transaction Fees by Justin Starry"),C={href:"https://2501babe.github.io/posts/solana101.html",target:"_blank",rel:"noopener noreferrer"},E=a("An Introduction to Solana by Hana"),j={href:"https://jito-labs.medium.com/solana-validator-101-transaction-processing-90bcdc271143",target:"_blank",rel:"noopener noreferrer"},G=a("Transaction Processing by Jito Labs"),J={href:"https://medium.com/@asmiller1989/solana-transactions-in-depth-1f7f7fe06ac2",target:"_blank",rel:"noopener noreferrer"},K=a("Solana Transaction in Depth by Alex Miller");function P(Y,M){const t=n("RouterLink"),i=n("ExternalLinkIcon");return o(),s(d,null,[k,e("p",null,[u,r(t,{to:"/tr/core-concepts/programs.html"},{default:c(()=>[b]),_:1}),_,e("a",y,[p,r(i)]),g]),f,e("ul",null,[e("li",null,[z,e("a",v,[B,r(i)]),x]),e("li",null,[T,e("a",S,[D,r(i)])])]),w,F,I,L,e("ul",null,[e("li",null,[e("a",R,[A,r(i)])]),e("li",null,[e("a",H,[N,r(i)])]),e("li",null,[e("a",O,[V,r(i)])]),e("li",null,[e("a",C,[E,r(i)])]),e("li",null,[e("a",j,[G,r(i)])]),e("li",null,[e("a",J,[K,r(i)])])])],64)}var q=l(h,[["render",P]]);export{q as default}; diff --git a/docs/.vuepress/dist/assets/transactions.html.658251de.js b/docs/.vuepress/dist/assets/transactions.html.30c748a9.js similarity index 99% rename from docs/.vuepress/dist/assets/transactions.html.658251de.js rename to docs/.vuepress/dist/assets/transactions.html.30c748a9.js index 2446ed353..acd7a2afb 100644 --- a/docs/.vuepress/dist/assets/transactions.html.658251de.js +++ b/docs/.vuepress/dist/assets/transactions.html.30c748a9.js @@ -1 +1 @@ -import{_ as s,r as i,o,c as l,a as e,b as r,w as d,F as h,d as n,e as c}from"./app.cfdf84e7.js";const u={},g=e("h1",{id:"transaktionen",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#transaktionen","aria-hidden":"true"},"#"),n(" Transaktionen")],-1),m=n("Clients k\xF6nnen "),_=n("Programme"),b=n(" durch Senden einer Transaktion an einen Cluster aufrufen. Eine einzelne Transaktion kann mehrere Answeisungen beinhalten - jedes zielt auf sein eigenes Programm ab. Wenn eine Transaktion \xFCbermittelt wird, verarbeitet der Solana "),k={href:"https://docs.solana.com/developing/programming-model/runtime",target:"_blank",rel:"noopener noreferrer"},f=n("Runtime"),p=n(" seine Anweisungen der Reihe nach und atomar. Wenn ein Teil einer Anweisung fehlschl\xE4gt, schl\xE4gt die gesamte Transaktion fehl."),z=c('

    Fakten

    Fact Sheet

    • Anweisungen sind die grundlegendste operative Einheit auf Solana
    • Jede Anweisung enth\xE4lt:
    • Die program_id des beabsichtigten Programms
      • Ein Array aller Accounts, von denen gelesen oder in die geschrieben werden soll
      • Ein "instruction_data"-Byte-Array, das f\xFCr das vorgesehene Programm spezifisch ist
    • Mehrere Anweisungen k\xF6nnen zu einer einzigen Transaktion geb\xFCndelt werden
    • Jede Transaktion enth\xE4lt:
      • Ein Array aller Accounts, von denen gelesen oder in die geschrieben werden soll
      • Eine oder mehrere Anweisungen
      • Ein neuer Blockhash
      • Eine oder mehrere \u201ESignaturen\u201C.
    • Anweisungen werden der Reihe nach und atomar verarbeitet
    • Wenn ein Teil einer Anweisung fehlschl\xE4gt, schl\xE4gt die gesamte Transaktion fehl.
    • Transaktionen sind auf 1232 Bytes begrenzt

    Deep Dive

    Die Solana-Laufzeit erfordert sowohl Anweisungen als auch Transaktionen, um eine Liste aller Accounts anzugeben, von denen sie lesen oder in die sie schreiben m\xF6chten. Indem diese Accounts im Voraus angefordert werden, ist die Laufzeit in der Lage, die Ausf\xFChrung \xFCber alle Transaktionen hinweg zu parallelisieren.

    Wenn eine Transaktion an einen Cluster \xFCbermittelt wird, verarbeitet die Laufzeitumgebung ihre Anweisungen der Reihe nach und atomar. F\xFCr jede Anweisung interpretiert das empfangende Programm sein Datenarray und verarbeitet seine angegebenen Accounts. Das Programm kehrt entweder erfolgreich oder mit einem Fehlercode zur\xFCck. Wenn ein Fehler zur\xFCckgegeben wird, schl\xE4gt die gesamte Transaktion sofort fehl.

    Jede Transaktion, die darauf abzielt, ein Konto zu belasten oder seine Daten zu \xE4ndern, erfordert die Unterschrift seines Kontoinhabers. Jedes Konto, das ge\xE4ndert wird, wird als \u201Ebeschreibbar\u201C markiert. Ein Konto kann ohne Zustimmung des Inhabers gutgeschrieben werden, solange der Zahler der Transaktionsgeb\xFChr die erforderlichen Mieten und Transaktionsgeb\xFChren tr\xE4gt.

    ',6),w=n("Vor der \xDCbermittlung, m\xFCssen alle Transaktionen auf einen "),v={href:"https://docs.solana.com/developing/programming-model/transactions#recent-blockhash",target:"_blank",rel:"noopener noreferrer"},T=n("aktuellen blockhash"),A=n(" verweisen. Der Blockhash wird verwendet, um Duplizierungen zu verhindern und veraltete Transaktionen zu beseitigen. Das maximale Alter des Blockhashs einer Transaktion betr\xE4gt 150 Bl\xF6cke oder etwa 1 Minute 19 Sekunden zum Zeitpunkt des Schreibens dieses Artikels."),D=e("h3",{id:"gebuhren",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#gebuhren","aria-hidden":"true"},"#"),n(" Geb\xFChren")],-1),E=e("p",null,"Das Solana-Netzwerk erhebt zwei Arten von Geb\xFChren:",-1),S={href:"https://docs.solana.com/transaction_fees",target:"_blank",rel:"noopener noreferrer"},x=n("Transaktionsgeb\xFChren"),B=n(" zur Verbreitung der Transaktion (auch bekannt als \u201EGasgeb\xFChren\u201C)"),L={href:"https://docs.solana.com/developing/programming-model/accounts#rent",target:"_blank",rel:"noopener noreferrer"},y=n("Mietgeb\xFChren"),K=n(" zum Speichern von Daten in der Kette"),F=e("p",null,"In Solana sind Transaktionsgeb\xFChren deterministisch: Es gibt kein Konzept f\xFCr einen Geb\xFChrenmarkt, auf dem Benutzer h\xF6here Geb\xFChren zahlen k\xF6nnen, um ihre Chancen zu erh\xF6hen, in den n\xE4chsten Block aufgenommen zu werden. Zum Zeitpunkt der Erstellung dieses Artikels werden die Transaktionsgeb\xFChren nur durch die Anzahl der erforderlichen Unterschriften (d. h. \u201Elamports_per_signature\u201C) bestimmt, nicht durch die Menge der verwendeten Ressourcen. Dies liegt daran, dass derzeit f\xFCr alle Transaktionen eine feste Obergrenze von 1232 Bytes gilt.",-1),G=e("p",null,"Alle Transaktionen erfordern mindestens ein \u201Ebeschreibbares\u201C Konto, um die Transaktion zu signieren. Nach der \xDCbermittlung ist das zuerst serialisierte Konto des beschreibbaren Unterzeichners der Geb\xFChrenzahler. Dieses Konto zahlt f\xFCr die Kosten der Transaktion, unabh\xE4ngig davon, ob die Transaktion erfolgreich ist oder fehlschl\xE4gt. Wenn der Geb\xFChrenzahler nicht \xFCber ein ausreichendes Guthaben verf\xFCgt, um die Transaktionsgeb\xFChr zu bezahlen, wird die Transaktion abgebrochen.",-1),R=e("p",null,"Zum Zeitpunkt der Erstellung dieses Artikels werden 50 % aller Transaktionsgeb\xFChren von dem Validator eingezogen, der den Block produziert, w\xE4hrend die restlichen 50 % verbrannt werden. Diese Struktur dient dazu, die Pr\xFCfer dazu anzuregen, so viele Transaktionen wie m\xF6glich w\xE4hrend ihrer Slots im Leader-Zeitplan zu verarbeiten.",-1),V=e("h2",{id:"other-resources",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#other-resources","aria-hidden":"true"},"#"),n(" Other Resources")],-1),Z={href:"https://docs.solana.com/developing/programming-model/Transaktionen",target:"_blank",rel:"noopener noreferrer"},P=n("Offizielle Dokumentation"),C={href:"https://solana.wiki/docs/solidity-guide/transactions/#solana-transaction-structure",target:"_blank",rel:"noopener noreferrer"},J=n("Transaktionsstruktur"),M={href:"https://jstarry.notion.site/transactions-Fees-f09387e6a8d84287aa16a34ecb58e239",target:"_blank",rel:"noopener noreferrer"},N=n("Transaktionsgeb\xFChren von Justin Starry"),W={href:"https://2501babe.github.io/posts/solana101.html",target:"_blank",rel:"noopener noreferrer"},I=n("Eine Einf\xFChhrung in Solana von Hana"),j={href:"https://jito-labs.medium.com/solana-validator-101-transaction-processing-90bcdc271143",target:"_blank",rel:"noopener noreferrer"},O=n("Transaktionsverarbeitung von Jito Labs"),U={href:"https://medium.com/@asmiller1989/solana-transactions-in-depth-1f7f7fe06ac2",target:"_blank",rel:"noopener noreferrer"},q=n("Solana-Transaktion im Detail von Alex Miller");function H(Q,X){const a=i("RouterLink"),t=i("ExternalLinkIcon");return o(),l(h,null,[g,e("p",null,[m,r(a,{to:"/de/core-concepts/programs.html"},{default:d(()=>[_]),_:1}),b,e("a",k,[f,r(t)]),p]),z,e("p",null,[w,e("a",v,[T,r(t)]),A]),D,E,e("ul",null,[e("li",null,[e("a",S,[x,r(t)]),B]),e("li",null,[e("a",L,[y,r(t)]),K])]),F,G,R,V,e("ul",null,[e("li",null,[e("a",Z,[P,r(t)])]),e("li",null,[e("a",C,[J,r(t)])]),e("li",null,[e("a",M,[N,r(t)])]),e("li",null,[e("a",W,[I,r(t)])]),e("li",null,[e("a",j,[O,r(t)])]),e("li",null,[e("a",U,[q,r(t)])])])],64)}var $=s(u,[["render",H]]);export{$ as default}; +import{_ as s,r as i,o,c as l,a as e,b as r,w as d,F as h,d as n,e as c}from"./app.2fbb9e96.js";const u={},g=e("h1",{id:"transaktionen",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#transaktionen","aria-hidden":"true"},"#"),n(" Transaktionen")],-1),m=n("Clients k\xF6nnen "),_=n("Programme"),b=n(" durch Senden einer Transaktion an einen Cluster aufrufen. Eine einzelne Transaktion kann mehrere Answeisungen beinhalten - jedes zielt auf sein eigenes Programm ab. Wenn eine Transaktion \xFCbermittelt wird, verarbeitet der Solana "),k={href:"https://docs.solana.com/developing/programming-model/runtime",target:"_blank",rel:"noopener noreferrer"},f=n("Runtime"),p=n(" seine Anweisungen der Reihe nach und atomar. Wenn ein Teil einer Anweisung fehlschl\xE4gt, schl\xE4gt die gesamte Transaktion fehl."),z=c('

    Fakten

    Fact Sheet

    • Anweisungen sind die grundlegendste operative Einheit auf Solana
    • Jede Anweisung enth\xE4lt:
    • Die program_id des beabsichtigten Programms
      • Ein Array aller Accounts, von denen gelesen oder in die geschrieben werden soll
      • Ein "instruction_data"-Byte-Array, das f\xFCr das vorgesehene Programm spezifisch ist
    • Mehrere Anweisungen k\xF6nnen zu einer einzigen Transaktion geb\xFCndelt werden
    • Jede Transaktion enth\xE4lt:
      • Ein Array aller Accounts, von denen gelesen oder in die geschrieben werden soll
      • Eine oder mehrere Anweisungen
      • Ein neuer Blockhash
      • Eine oder mehrere \u201ESignaturen\u201C.
    • Anweisungen werden der Reihe nach und atomar verarbeitet
    • Wenn ein Teil einer Anweisung fehlschl\xE4gt, schl\xE4gt die gesamte Transaktion fehl.
    • Transaktionen sind auf 1232 Bytes begrenzt

    Deep Dive

    Die Solana-Laufzeit erfordert sowohl Anweisungen als auch Transaktionen, um eine Liste aller Accounts anzugeben, von denen sie lesen oder in die sie schreiben m\xF6chten. Indem diese Accounts im Voraus angefordert werden, ist die Laufzeit in der Lage, die Ausf\xFChrung \xFCber alle Transaktionen hinweg zu parallelisieren.

    Wenn eine Transaktion an einen Cluster \xFCbermittelt wird, verarbeitet die Laufzeitumgebung ihre Anweisungen der Reihe nach und atomar. F\xFCr jede Anweisung interpretiert das empfangende Programm sein Datenarray und verarbeitet seine angegebenen Accounts. Das Programm kehrt entweder erfolgreich oder mit einem Fehlercode zur\xFCck. Wenn ein Fehler zur\xFCckgegeben wird, schl\xE4gt die gesamte Transaktion sofort fehl.

    Jede Transaktion, die darauf abzielt, ein Konto zu belasten oder seine Daten zu \xE4ndern, erfordert die Unterschrift seines Kontoinhabers. Jedes Konto, das ge\xE4ndert wird, wird als \u201Ebeschreibbar\u201C markiert. Ein Konto kann ohne Zustimmung des Inhabers gutgeschrieben werden, solange der Zahler der Transaktionsgeb\xFChr die erforderlichen Mieten und Transaktionsgeb\xFChren tr\xE4gt.

    ',6),w=n("Vor der \xDCbermittlung, m\xFCssen alle Transaktionen auf einen "),v={href:"https://docs.solana.com/developing/programming-model/transactions#recent-blockhash",target:"_blank",rel:"noopener noreferrer"},T=n("aktuellen blockhash"),A=n(" verweisen. Der Blockhash wird verwendet, um Duplizierungen zu verhindern und veraltete Transaktionen zu beseitigen. Das maximale Alter des Blockhashs einer Transaktion betr\xE4gt 150 Bl\xF6cke oder etwa 1 Minute 19 Sekunden zum Zeitpunkt des Schreibens dieses Artikels."),D=e("h3",{id:"gebuhren",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#gebuhren","aria-hidden":"true"},"#"),n(" Geb\xFChren")],-1),E=e("p",null,"Das Solana-Netzwerk erhebt zwei Arten von Geb\xFChren:",-1),S={href:"https://docs.solana.com/transaction_fees",target:"_blank",rel:"noopener noreferrer"},x=n("Transaktionsgeb\xFChren"),B=n(" zur Verbreitung der Transaktion (auch bekannt als \u201EGasgeb\xFChren\u201C)"),L={href:"https://docs.solana.com/developing/programming-model/accounts#rent",target:"_blank",rel:"noopener noreferrer"},y=n("Mietgeb\xFChren"),K=n(" zum Speichern von Daten in der Kette"),F=e("p",null,"In Solana sind Transaktionsgeb\xFChren deterministisch: Es gibt kein Konzept f\xFCr einen Geb\xFChrenmarkt, auf dem Benutzer h\xF6here Geb\xFChren zahlen k\xF6nnen, um ihre Chancen zu erh\xF6hen, in den n\xE4chsten Block aufgenommen zu werden. Zum Zeitpunkt der Erstellung dieses Artikels werden die Transaktionsgeb\xFChren nur durch die Anzahl der erforderlichen Unterschriften (d. h. \u201Elamports_per_signature\u201C) bestimmt, nicht durch die Menge der verwendeten Ressourcen. Dies liegt daran, dass derzeit f\xFCr alle Transaktionen eine feste Obergrenze von 1232 Bytes gilt.",-1),G=e("p",null,"Alle Transaktionen erfordern mindestens ein \u201Ebeschreibbares\u201C Konto, um die Transaktion zu signieren. Nach der \xDCbermittlung ist das zuerst serialisierte Konto des beschreibbaren Unterzeichners der Geb\xFChrenzahler. Dieses Konto zahlt f\xFCr die Kosten der Transaktion, unabh\xE4ngig davon, ob die Transaktion erfolgreich ist oder fehlschl\xE4gt. Wenn der Geb\xFChrenzahler nicht \xFCber ein ausreichendes Guthaben verf\xFCgt, um die Transaktionsgeb\xFChr zu bezahlen, wird die Transaktion abgebrochen.",-1),R=e("p",null,"Zum Zeitpunkt der Erstellung dieses Artikels werden 50 % aller Transaktionsgeb\xFChren von dem Validator eingezogen, der den Block produziert, w\xE4hrend die restlichen 50 % verbrannt werden. Diese Struktur dient dazu, die Pr\xFCfer dazu anzuregen, so viele Transaktionen wie m\xF6glich w\xE4hrend ihrer Slots im Leader-Zeitplan zu verarbeiten.",-1),V=e("h2",{id:"other-resources",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#other-resources","aria-hidden":"true"},"#"),n(" Other Resources")],-1),Z={href:"https://docs.solana.com/developing/programming-model/Transaktionen",target:"_blank",rel:"noopener noreferrer"},P=n("Offizielle Dokumentation"),C={href:"https://solana.wiki/docs/solidity-guide/transactions/#solana-transaction-structure",target:"_blank",rel:"noopener noreferrer"},J=n("Transaktionsstruktur"),M={href:"https://jstarry.notion.site/transactions-Fees-f09387e6a8d84287aa16a34ecb58e239",target:"_blank",rel:"noopener noreferrer"},N=n("Transaktionsgeb\xFChren von Justin Starry"),W={href:"https://2501babe.github.io/posts/solana101.html",target:"_blank",rel:"noopener noreferrer"},I=n("Eine Einf\xFChhrung in Solana von Hana"),j={href:"https://jito-labs.medium.com/solana-validator-101-transaction-processing-90bcdc271143",target:"_blank",rel:"noopener noreferrer"},O=n("Transaktionsverarbeitung von Jito Labs"),U={href:"https://medium.com/@asmiller1989/solana-transactions-in-depth-1f7f7fe06ac2",target:"_blank",rel:"noopener noreferrer"},q=n("Solana-Transaktion im Detail von Alex Miller");function H(Q,X){const a=i("RouterLink"),t=i("ExternalLinkIcon");return o(),l(h,null,[g,e("p",null,[m,r(a,{to:"/de/core-concepts/programs.html"},{default:d(()=>[_]),_:1}),b,e("a",k,[f,r(t)]),p]),z,e("p",null,[w,e("a",v,[T,r(t)]),A]),D,E,e("ul",null,[e("li",null,[e("a",S,[x,r(t)]),B]),e("li",null,[e("a",L,[y,r(t)]),K])]),F,G,R,V,e("ul",null,[e("li",null,[e("a",Z,[P,r(t)])]),e("li",null,[e("a",C,[J,r(t)])]),e("li",null,[e("a",M,[N,r(t)])]),e("li",null,[e("a",W,[I,r(t)])]),e("li",null,[e("a",j,[O,r(t)])]),e("li",null,[e("a",U,[q,r(t)])])])],64)}var $=s(u,[["render",H]]);export{$ as default}; diff --git a/docs/.vuepress/dist/assets/transactions.html.813aef7d.js b/docs/.vuepress/dist/assets/transactions.html.6a6e4f0c.js similarity index 96% rename from docs/.vuepress/dist/assets/transactions.html.813aef7d.js rename to docs/.vuepress/dist/assets/transactions.html.6a6e4f0c.js index 5ea30224c..637a322b2 100644 --- a/docs/.vuepress/dist/assets/transactions.html.813aef7d.js +++ b/docs/.vuepress/dist/assets/transactions.html.6a6e4f0c.js @@ -1 +1 @@ -const t={key:"v-55f1b6eb",path:"/vi/core-concepts/transactions.html",title:"Transactions",lang:"vi-VN",frontmatter:{title:"Transactions",head:[["meta",{name:"title",content:"To\xE0n t\u1EADp Solana | Transactions"}],["meta",{name:"og:title",content:"To\xE0n t\u1EADp Solana | Transactions"}],["meta",{name:"description",content:"Transaction l\xE0 t\u1EADp h\u1EE3p nhi\u1EC1u \u0111\u01A1n v\u1ECB th\u1EF1c thi tr\xEAn Solana. Chi ti\u1EBFt v\u1EC1 Transaction v\xE0 c\xE1c kh\xE1i ni\u1EC7m c\u01A1n b\u1EA3n kh\xE1c trong To\xE0n t\u1EADp Solana."}],["meta",{name:"og:description",content:"Transaction l\xE0 t\u1EADp h\u1EE3p nhi\u1EC1u \u0111\u01A1n v\u1ECB th\u1EF1c thi tr\xEAn Solana. Chi ti\u1EBFt v\u1EC1 Transaction v\xE0 c\xE1c kh\xE1i ni\u1EC7m c\u01A1n b\u1EA3n kh\xE1c trong To\xE0n t\u1EADp Solana."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"C\xF3 th\u1EC3 b\u1EA1n ch\u01B0a bi\u1EBFt",slug:"co-the-ban-chua-biet",children:[]},{level:2,title:"Chi ti\u1EBFt",slug:"chi-tiet",children:[{level:3,title:"Ph\xED",slug:"phi",children:[]}]},{level:2,title:"C\xE1c ngu\u1ED3n t\xE0i li\u1EC7u kh\xE1c",slug:"cac-nguon-tai-lieu-khac",children:[]}],git:{updatedTime:1658783638e3},filePathRelative:"vi/core-concepts/transactions.md"};export{t as data}; +const t={key:"v-55f1b6eb",path:"/vi/core-concepts/transactions.html",title:"Transactions",lang:"vi-VN",frontmatter:{title:"Transactions",head:[["meta",{name:"title",content:"To\xE0n t\u1EADp Solana | Transactions"}],["meta",{name:"og:title",content:"To\xE0n t\u1EADp Solana | Transactions"}],["meta",{name:"description",content:"Transaction l\xE0 t\u1EADp h\u1EE3p nhi\u1EC1u \u0111\u01A1n v\u1ECB th\u1EF1c thi tr\xEAn Solana. Chi ti\u1EBFt v\u1EC1 Transaction v\xE0 c\xE1c kh\xE1i ni\u1EC7m c\u01A1n b\u1EA3n kh\xE1c trong To\xE0n t\u1EADp Solana."}],["meta",{name:"og:description",content:"Transaction l\xE0 t\u1EADp h\u1EE3p nhi\u1EC1u \u0111\u01A1n v\u1ECB th\u1EF1c thi tr\xEAn Solana. Chi ti\u1EBFt v\u1EC1 Transaction v\xE0 c\xE1c kh\xE1i ni\u1EC7m c\u01A1n b\u1EA3n kh\xE1c trong To\xE0n t\u1EADp Solana."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"C\xF3 th\u1EC3 b\u1EA1n ch\u01B0a bi\u1EBFt",slug:"co-the-ban-chua-biet",children:[]},{level:2,title:"Chi ti\u1EBFt",slug:"chi-tiet",children:[{level:3,title:"Ph\xED",slug:"phi",children:[]}]},{level:2,title:"C\xE1c ngu\u1ED3n t\xE0i li\u1EC7u kh\xE1c",slug:"cac-nguon-tai-lieu-khac",children:[]}],git:{updatedTime:1677551527e3},filePathRelative:"vi/core-concepts/transactions.md"};export{t as data}; diff --git a/docs/.vuepress/dist/assets/transactions.html.ac3b5113.js b/docs/.vuepress/dist/assets/transactions.html.6e86b8ba.js similarity index 99% rename from docs/.vuepress/dist/assets/transactions.html.ac3b5113.js rename to docs/.vuepress/dist/assets/transactions.html.6e86b8ba.js index 3fbe1f757..4fd0f987c 100644 --- a/docs/.vuepress/dist/assets/transactions.html.ac3b5113.js +++ b/docs/.vuepress/dist/assets/transactions.html.6e86b8ba.js @@ -1 +1 @@ -import{_ as r,r as o,o as i,c as l,a as e,b as t,w as c,F as u,d as s,e as d}from"./app.cfdf84e7.js";const p={},m=e("h1",{id:"transactions",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#transactions","aria-hidden":"true"},"#"),s(" Transactions")],-1),h=s("Les clients peuvent invoquer des "),_=s("programmes"),f=s(" en soumettant une transaction \xE0 un cluster. Une seule transaction peut comprendre plusieurs instructions, chacune ciblant son propre programme. Lorsqu'une transaction est soumise, Le "),b={href:"https://docs.solana.com/developing/programming-model/runtime",target:"_blank",rel:"noopener noreferrer"},g=s("Runtime"),q=s(" de Solana va traiter ses instructions dans l'ordre et de mani\xE8re atomique. Si le traitement d'au moins une instruction \xE9choue, c'est l'ensemble de la transaction qui \xE9chouera."),v=d('

    Faits

    Fiche d'Information

    • Les instructions sont l'unit\xE9 de base du fonctionnement de Solana
    • Chaque instruction contient :
      • Le program_id du programme vis\xE9
      • Un tableau de tous les accounts (comptes) dans lesquels il a l'intention de lire ou d'\xE9crire
      • Un tableau d'octets instruction_data qui est sp\xE9cifique au programme vis\xE9
    • Plusieurs instructions peuvent \xEAtre regroup\xE9es en une seule transaction
    • Chaque transaction contient :
      • Un tableau de tous les accounts (comptes) dans lesquels il a l'intention de lire ou d'\xE9crire
      • Une ou plusieurs instructions
      • Un blockhash (hash de blocs) r\xE9cent
      • Une ou plusieurs signatures
    • Les instructions sont trait\xE9es dans l'ordre et de mani\xE8re atomique
    • Si le traitement d'au moins une instruction \xE9choue, c'est l'ensemble de la transaction qui \xE9chouera.
    • Les transactions sont limit\xE9es \xE0 1232 octets

    Examen plus approfondi

    Le Runtime de Solana n\xE9cessite que les instructions et les transactions sp\xE9cifient une liste de tous les comptes dans lesquels elles ont l'intention de lire ou d'\xE9crire. En exigeant ces comptes \xE0 l'avance, le runtime est capable de parall\xE9liser l'ex\xE9cution de toutes les transactions.

    Lorsqu'une transaction est soumise \xE0 un cluster, le runtime traite ses instructions dans l'ordre et de mani\xE8re atomique. Pour chaque instruction, le programme utilis\xE9 interpr\xE8te le tableau de donn\xE9es et op\xE8re sur les comptes sp\xE9cifi\xE9s. Le programme retournera soit un message de succ\xE8s, soit un code d'erreur. Si une erreur est retourn\xE9e, l'ensemble de la transaction \xE9choue instantan\xE9ment.

    Toute transaction visant \xE0 d\xE9biter un compte ou \xE0 modifier ses donn\xE9es n\xE9cessite la signature de son propri\xE9taire. Tout compte qui sera modifi\xE9 sera marqu\xE9 comme writable. Un compte peut \xEAtre cr\xE9dit\xE9 sans l'autorisation de son propri\xE9taire \xE0 condition que le payeur des frais de transaction couvre les frais de rente et les frais de transaction n\xE9cessaires.

    ',6),k=s("Avant d'\xEAtre soumises, toutes les transactions doivent faire r\xE9f\xE9rence \xE0 un "),x={href:"https://docs.solana.com/developing/programming-model/transactions#recent-blockhash",target:"_blank",rel:"noopener noreferrer"},L=s("hash de blocs r\xE9cent"),S=s(". Le hash de blocs r\xE9cent est utilis\xE9 pour \xE9viter les doublons et \xE9liminer les transactions obsol\xE8tes. L'\xE2ge maximal que peut avoir le hash de blocs d'une transaction est de 150 blocs ou environ 1 minute et 19 secondes au moment o\xF9 nous \xE9crivons ces lignes."),y=e("h3",{id:"frais",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#frais","aria-hidden":"true"},"#"),s(" Frais")],-1),T=e("p",null,"Le r\xE9seau Solana per\xE7oit deux types de frais :",-1),U={href:"https://docs.solana.com/transaction_fees",target:"_blank",rel:"noopener noreferrer"},C=s("Les frais de transaction"),F=s(" pour propager les transactions sur la blockchain (aka \u201Cfrais de gas\u201D ou \u201Cgas fees\u201D)"),w={href:"https://docs.solana.com/developing/programming-model/accounts#rent",target:"_blank",rel:"noopener noreferrer"},A=s("Les frais de rente"),E=s(" pour le stockage des donn\xE9es sur la blockchain"),R=e("p",null,[s("Dans Solana, les frais de transaction sont d\xE9terministes : il n'existe pas de concept de march\xE9 des frais dans lequel les utilisateurs peuvent payer des frais plus \xE9lev\xE9s pour augmenter leurs chances d'\xEAtre inclus dans le bloc suivant. Au moment o\xF9 nous \xE9crivons ces lignes, les frais de transaction sont d\xE9termin\xE9s uniquement par le nombre de signatures requises (i.e. "),e("code",null,"lamports_per_signature"),s("), et non par la quantit\xE9 de ressources utilis\xE9es. Cela est d\xFB au fait qu'il existe actuellement une limite maximale de 1232 bytes pour toutes les transactions.")],-1),B=e("p",null,[s("Toutes les transactions n\xE9cessitent qu'il y ait au moins un compte "),e("code",null,"writable"),s(" (accessible en \xE9criture) pour signer la transaction. Une fois soumise, le compte signataire accessible en \xE9criture qui est s\xE9rialis\xE9 en premier sera le payeur des frais. Ce compte paiera le co\xFBt de la transaction, que celle-ci r\xE9ussisse ou \xE9choue. Si le payeur des frais ne dispose pas d'un solde suffisant pour payer les frais de transaction, la transaction sera abandonn\xE9e.")],-1),I=e("p",null,"Au moment o\xF9 nous \xE9crivons ces lignes, 50 % de tous les frais de transaction sont per\xE7us par le validateur qui produit le bloc, tandis que les 50 % restants sont br\xFBl\xE9s. Ce m\xE9canisme a pour but d'inciter les validateurs \xE0 traiter le plus grand nombre possible de transactions pendant les cr\xE9neaux qui leur sont attribu\xE9s dans le calendrier des leaders.",-1),N=e("h2",{id:"autres-ressources",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#autres-ressources","aria-hidden":"true"},"#"),s(" Autres Ressources")],-1),V={href:"https://docs.solana.com/developing/programming-model/transactions",target:"_blank",rel:"noopener noreferrer"},j=s("Documentation officielle"),D={href:"https://solana.wiki/docs/solidity-guide/transactions/#solana-transaction-structure",target:"_blank",rel:"noopener noreferrer"},J=s("Structure des Transactions"),P={href:"https://jstarry.notion.site/Transaction-Fees-f09387e6a8d84287aa16a34ecb58e239",target:"_blank",rel:"noopener noreferrer"},H=s("Frais de transactions par Justin Starry"),M={href:"https://2501babe.github.io/posts/solana101.html",target:"_blank",rel:"noopener noreferrer"},z=s("Une Introduction \xE0 la Blockchain Solana par Hana"),G={href:"https://jito-labs.medium.com/solana-validator-101-transaction-processing-90bcdc271143",target:"_blank",rel:"noopener noreferrer"},K=s("Traitement des Transactions par Jito Labs"),O={href:"https://medium.com/@asmiller1989/solana-transactions-in-depth-1f7f7fe06ac2",target:"_blank",rel:"noopener noreferrer"},Q=s("Les Transactions sur Solana en profondeur par Alex Miller");function W(X,Y){const a=o("RouterLink"),n=o("ExternalLinkIcon");return i(),l(u,null,[m,e("p",null,[h,t(a,{to:"/fr/core-concepts/programs.html"},{default:c(()=>[_]),_:1}),f,e("a",b,[g,t(n)]),q]),v,e("p",null,[k,e("a",x,[L,t(n)]),S]),y,T,e("ul",null,[e("li",null,[e("a",U,[C,t(n)]),F]),e("li",null,[e("a",w,[A,t(n)]),E])]),R,B,I,N,e("ul",null,[e("li",null,[e("a",V,[j,t(n)])]),e("li",null,[e("a",D,[J,t(n)])]),e("li",null,[e("a",P,[H,t(n)])]),e("li",null,[e("a",M,[z,t(n)])]),e("li",null,[e("a",G,[K,t(n)])]),e("li",null,[e("a",O,[Q,t(n)])])])],64)}var $=r(p,[["render",W]]);export{$ as default}; +import{_ as r,r as o,o as i,c as l,a as e,b as t,w as c,F as u,d as s,e as d}from"./app.2fbb9e96.js";const p={},m=e("h1",{id:"transactions",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#transactions","aria-hidden":"true"},"#"),s(" Transactions")],-1),h=s("Les clients peuvent invoquer des "),_=s("programmes"),f=s(" en soumettant une transaction \xE0 un cluster. Une seule transaction peut comprendre plusieurs instructions, chacune ciblant son propre programme. Lorsqu'une transaction est soumise, Le "),b={href:"https://docs.solana.com/developing/programming-model/runtime",target:"_blank",rel:"noopener noreferrer"},g=s("Runtime"),q=s(" de Solana va traiter ses instructions dans l'ordre et de mani\xE8re atomique. Si le traitement d'au moins une instruction \xE9choue, c'est l'ensemble de la transaction qui \xE9chouera."),v=d('

    Faits

    Fiche d'Information

    • Les instructions sont l'unit\xE9 de base du fonctionnement de Solana
    • Chaque instruction contient :
      • Le program_id du programme vis\xE9
      • Un tableau de tous les accounts (comptes) dans lesquels il a l'intention de lire ou d'\xE9crire
      • Un tableau d'octets instruction_data qui est sp\xE9cifique au programme vis\xE9
    • Plusieurs instructions peuvent \xEAtre regroup\xE9es en une seule transaction
    • Chaque transaction contient :
      • Un tableau de tous les accounts (comptes) dans lesquels il a l'intention de lire ou d'\xE9crire
      • Une ou plusieurs instructions
      • Un blockhash (hash de blocs) r\xE9cent
      • Une ou plusieurs signatures
    • Les instructions sont trait\xE9es dans l'ordre et de mani\xE8re atomique
    • Si le traitement d'au moins une instruction \xE9choue, c'est l'ensemble de la transaction qui \xE9chouera.
    • Les transactions sont limit\xE9es \xE0 1232 octets

    Examen plus approfondi

    Le Runtime de Solana n\xE9cessite que les instructions et les transactions sp\xE9cifient une liste de tous les comptes dans lesquels elles ont l'intention de lire ou d'\xE9crire. En exigeant ces comptes \xE0 l'avance, le runtime est capable de parall\xE9liser l'ex\xE9cution de toutes les transactions.

    Lorsqu'une transaction est soumise \xE0 un cluster, le runtime traite ses instructions dans l'ordre et de mani\xE8re atomique. Pour chaque instruction, le programme utilis\xE9 interpr\xE8te le tableau de donn\xE9es et op\xE8re sur les comptes sp\xE9cifi\xE9s. Le programme retournera soit un message de succ\xE8s, soit un code d'erreur. Si une erreur est retourn\xE9e, l'ensemble de la transaction \xE9choue instantan\xE9ment.

    Toute transaction visant \xE0 d\xE9biter un compte ou \xE0 modifier ses donn\xE9es n\xE9cessite la signature de son propri\xE9taire. Tout compte qui sera modifi\xE9 sera marqu\xE9 comme writable. Un compte peut \xEAtre cr\xE9dit\xE9 sans l'autorisation de son propri\xE9taire \xE0 condition que le payeur des frais de transaction couvre les frais de rente et les frais de transaction n\xE9cessaires.

    ',6),k=s("Avant d'\xEAtre soumises, toutes les transactions doivent faire r\xE9f\xE9rence \xE0 un "),x={href:"https://docs.solana.com/developing/programming-model/transactions#recent-blockhash",target:"_blank",rel:"noopener noreferrer"},L=s("hash de blocs r\xE9cent"),S=s(". Le hash de blocs r\xE9cent est utilis\xE9 pour \xE9viter les doublons et \xE9liminer les transactions obsol\xE8tes. L'\xE2ge maximal que peut avoir le hash de blocs d'une transaction est de 150 blocs ou environ 1 minute et 19 secondes au moment o\xF9 nous \xE9crivons ces lignes."),y=e("h3",{id:"frais",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#frais","aria-hidden":"true"},"#"),s(" Frais")],-1),T=e("p",null,"Le r\xE9seau Solana per\xE7oit deux types de frais :",-1),U={href:"https://docs.solana.com/transaction_fees",target:"_blank",rel:"noopener noreferrer"},C=s("Les frais de transaction"),F=s(" pour propager les transactions sur la blockchain (aka \u201Cfrais de gas\u201D ou \u201Cgas fees\u201D)"),w={href:"https://docs.solana.com/developing/programming-model/accounts#rent",target:"_blank",rel:"noopener noreferrer"},A=s("Les frais de rente"),E=s(" pour le stockage des donn\xE9es sur la blockchain"),R=e("p",null,[s("Dans Solana, les frais de transaction sont d\xE9terministes : il n'existe pas de concept de march\xE9 des frais dans lequel les utilisateurs peuvent payer des frais plus \xE9lev\xE9s pour augmenter leurs chances d'\xEAtre inclus dans le bloc suivant. Au moment o\xF9 nous \xE9crivons ces lignes, les frais de transaction sont d\xE9termin\xE9s uniquement par le nombre de signatures requises (i.e. "),e("code",null,"lamports_per_signature"),s("), et non par la quantit\xE9 de ressources utilis\xE9es. Cela est d\xFB au fait qu'il existe actuellement une limite maximale de 1232 bytes pour toutes les transactions.")],-1),B=e("p",null,[s("Toutes les transactions n\xE9cessitent qu'il y ait au moins un compte "),e("code",null,"writable"),s(" (accessible en \xE9criture) pour signer la transaction. Une fois soumise, le compte signataire accessible en \xE9criture qui est s\xE9rialis\xE9 en premier sera le payeur des frais. Ce compte paiera le co\xFBt de la transaction, que celle-ci r\xE9ussisse ou \xE9choue. Si le payeur des frais ne dispose pas d'un solde suffisant pour payer les frais de transaction, la transaction sera abandonn\xE9e.")],-1),I=e("p",null,"Au moment o\xF9 nous \xE9crivons ces lignes, 50 % de tous les frais de transaction sont per\xE7us par le validateur qui produit le bloc, tandis que les 50 % restants sont br\xFBl\xE9s. Ce m\xE9canisme a pour but d'inciter les validateurs \xE0 traiter le plus grand nombre possible de transactions pendant les cr\xE9neaux qui leur sont attribu\xE9s dans le calendrier des leaders.",-1),N=e("h2",{id:"autres-ressources",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#autres-ressources","aria-hidden":"true"},"#"),s(" Autres Ressources")],-1),V={href:"https://docs.solana.com/developing/programming-model/transactions",target:"_blank",rel:"noopener noreferrer"},j=s("Documentation officielle"),D={href:"https://solana.wiki/docs/solidity-guide/transactions/#solana-transaction-structure",target:"_blank",rel:"noopener noreferrer"},J=s("Structure des Transactions"),P={href:"https://jstarry.notion.site/Transaction-Fees-f09387e6a8d84287aa16a34ecb58e239",target:"_blank",rel:"noopener noreferrer"},H=s("Frais de transactions par Justin Starry"),M={href:"https://2501babe.github.io/posts/solana101.html",target:"_blank",rel:"noopener noreferrer"},z=s("Une Introduction \xE0 la Blockchain Solana par Hana"),G={href:"https://jito-labs.medium.com/solana-validator-101-transaction-processing-90bcdc271143",target:"_blank",rel:"noopener noreferrer"},K=s("Traitement des Transactions par Jito Labs"),O={href:"https://medium.com/@asmiller1989/solana-transactions-in-depth-1f7f7fe06ac2",target:"_blank",rel:"noopener noreferrer"},Q=s("Les Transactions sur Solana en profondeur par Alex Miller");function W(X,Y){const a=o("RouterLink"),n=o("ExternalLinkIcon");return i(),l(u,null,[m,e("p",null,[h,t(a,{to:"/fr/core-concepts/programs.html"},{default:c(()=>[_]),_:1}),f,e("a",b,[g,t(n)]),q]),v,e("p",null,[k,e("a",x,[L,t(n)]),S]),y,T,e("ul",null,[e("li",null,[e("a",U,[C,t(n)]),F]),e("li",null,[e("a",w,[A,t(n)]),E])]),R,B,I,N,e("ul",null,[e("li",null,[e("a",V,[j,t(n)])]),e("li",null,[e("a",D,[J,t(n)])]),e("li",null,[e("a",P,[H,t(n)])]),e("li",null,[e("a",M,[z,t(n)])]),e("li",null,[e("a",G,[K,t(n)])]),e("li",null,[e("a",O,[Q,t(n)])])])],64)}var $=r(p,[["render",W]]);export{$ as default}; diff --git a/docs/.vuepress/dist/assets/transactions.html.603e9adb.js b/docs/.vuepress/dist/assets/transactions.html.a8a9e78c.js similarity index 99% rename from docs/.vuepress/dist/assets/transactions.html.603e9adb.js rename to docs/.vuepress/dist/assets/transactions.html.a8a9e78c.js index 24770b03a..1cb64e92d 100644 --- a/docs/.vuepress/dist/assets/transactions.html.603e9adb.js +++ b/docs/.vuepress/dist/assets/transactions.html.a8a9e78c.js @@ -1 +1 @@ -import{_ as t,r as s,o as i,c,a as e,b as n,w as l,F as d,d as a,e as u}from"./app.cfdf84e7.js";const p={},m=e("h1",{id:"transacciones",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#transacciones","aria-hidden":"true"},"#"),a(" Transacciones")],-1),h=a("Los clientes pueden invocar "),_=a("programas"),f=a(" enviando una transacci\xF3n a un cluster. Una transacci\xF3n puede incluir m\xFAltiples instrucciones, cada una de ellas apuntando a un programa diferente. Cuando una transacci\xF3n es enviada, el "),g={href:"https://docs.solana.com/developing/programming-model/runtime",target:"_blank",rel:"noopener noreferrer"},b=a("Runtime"),v=a(" de Solana procesar\xE1 sus instrucciones en orden y de forma at\xF3mica. Si una parte de la transacci\xF3n falla, toda la transacci\xF3n fallar\xE1."),q=u('

    Hechos

    Hoja de hechos

    • Las instrucciones son la unidad de operaci\xF3n m\xE1s b\xE1sica en Solana
    • Cada instrucci\xF3n contiene:
      • El program_id (id del programa) del programa al que apunta
      • Un arreglo de todas accounts (cuentas) donde va a leer o escribir
      • Un instruction_data (datos de la instrucci\xF3n) que es un byte array para el programa espec\xEDfico
    • Varias instrucciones pueden estar contenidas en una Transacci\xF3n
    • Cada transacci\xF3n consiste de:
      • Un arreglo de todas accounts (cuentas) donde va a leer o escribir
      • Una o m\xE1s instructions (instrucciones)
      • Un blockhash (hash de bloque) reciente
      • Una o m\xE1s signatures (firmas)
    • Las instrucciones son procesadas en orden y de forma at\xF3mica
    • Si una parte de la transacci\xF3n falla, toda la transacci\xF3n fallar\xE1
    • Las transacciones est\xE1n limitadas a un m\xE1ximo de 1232 bytes

    Un vistazo m\xE1s profundo

    El Runtime de Solana requiere tanto de instrucciones como de transacciones para especificar una lista de todas las cuentas de las que va a leer o escribir. Al requerir estas cuentas por adelantado, el Runtime de Solana es capaz de paralelizar la ejecuci\xF3n en todas las transacciones.

    Cuando se env\xEDa una transacci\xF3n a un cl\xFAster, el Runtime de Solana procesar\xE1 sus instrucciones en orden y de forma at\xF3mica. Para cada instrucci\xF3n, el programa al que se invoca interpretar\xE1 el arreglo de datos y operar\xE1 en las cuentas especificadas. El programa retornar\xE1 con \xE9xito o un c\xF3digo de error. Si se devuelve un error, toda la transacci\xF3n fallar\xE1 inmediatamente.

    Toda transacci\xF3n que debite de una cuenta o modique sus datos requiere la firma del titular de la cuenta. Cualquier cuenta que se modificar\xE1 ser\xE1 marcada como writable. Una cuenta puede recibir fondos sin el permiso del titular siempre que el pagador del cargo (fee) cubra la renta y las tarifas de transacci\xF3n.

    ',6),k=a("Antes de enviar una transacci\xF3n se debe enviar un "),x={href:"https://docs.solana.com/developing/programming-model/transactions#recent-blockhash",target:"_blank",rel:"noopener noreferrer"},S=a("hash de bloque reciente"),y=a(". El hash de bloque reciente es usado para prevenir duplicados y eliminar transacciones obsoletas. El tiempo m\xE1ximo del hash de bloque reciente de una transacci\xF3n es de 150 bloques, o aproximadamente ~1 minuto 19 segundos al momento de escribir este art\xEDculo."),E=e("h3",{id:"cargos-fees",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#cargos-fees","aria-hidden":"true"},"#"),a(" Cargos (fees)")],-1),C=e("p",null,"La red de Solana colecta 2 tipos de cargos:",-1),L={href:"https://docs.solana.com/transaction_fees",target:"_blank",rel:"noopener noreferrer"},U=a("Cargo por transacci\xF3n"),z=a(" para propagar las transacciones (aka \u201Cgas fees\u201D)"),R={href:"https://docs.solana.com/developing/programming-model/accounts#rent",target:"_blank",rel:"noopener noreferrer"},T=a("Cargo por renta"),w=a(" por almacenar datos en la blockchain"),A=e("p",null,[a("En Solana, los cargos son deterministas: no existe el concepto de un mercado de cargos en el que los usuarios puedan pagar tarifas m\xE1s altas para aumentar sus posibilidades de ser incluidos en el siguiente bloque. Al momento de redactar este documento, las tarifas de transacci\xF3n est\xE1n determinadas \xFAnicamente por la cantidad de firmas requeridas (es decir, "),e("code",null,"lamports_per_signature"),a("), no por la cantidad de recursos utilizados. Esto se debe a que actualmente existe un l\xEDmite m\xE1ximo de 1232 bytes en todas las transacciones.")],-1),V=e("p",null,[a("Todas las transacciones requieren al menos una cuenta sea "),e("code",null,"writable"),a(" (escribible) para firmar la transacci\xF3n. Una vez enviada, la cuenta del firmante que se serializa primero ser\xE1 el pagador del cargo (fee). Esta cuenta pagar\xE1 el costo de la transacci\xF3n sin importar si la transacci\xF3n tiene \xE9xito o falla. Si el pagador del cargo no tiene saldo suficiente para pagar la tarifa de transacci\xF3n, la transacci\xF3n se cancelar\xE1.")],-1),j=e("p",null,"Al momento de escribir este art\xEDculo, el validador que produce el bloque cobra el 50% de todas las tarifas de transacci\xF3n, mientras que el 50% restante se quema. Esta estructura funciona para incentivar a los validadores a procesar tantas transacciones como sea posible durante sus espacios en el programa l\xEDder.",-1),N=e("h2",{id:"other-resources",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#other-resources","aria-hidden":"true"},"#"),a(" Other Resources")],-1),B={href:"https://docs.solana.com/developing/programming-model/transactions",target:"_blank",rel:"noopener noreferrer"},F=a("Documentaci\xF3n oficial"),H={href:"https://solana.wiki/docs/solidity-guide/transactions/#solana-transaction-structure",target:"_blank",rel:"noopener noreferrer"},I=a("Estructura de una transacci\xF3n"),J={href:"https://jstarry.notion.site/Transaction-Fees-f09387e6a8d84287aa16a34ecb58e239",target:"_blank",rel:"noopener noreferrer"},P=a("Cargos de una transacci\xF3n por Justin Starry"),D={href:"https://2501babe.github.io/posts/solana101.html",target:"_blank",rel:"noopener noreferrer"},M=a("Introducci\xF3n a Solana por Hana"),O={href:"https://jito-labs.medium.com/solana-validator-101-transaction-processing-90bcdc271143",target:"_blank",rel:"noopener noreferrer"},G=a("Procesamiento de una transacci\xF3n por Jito Labs"),K={href:"https://medium.com/@asmiller1989/solana-transactions-in-depth-1f7f7fe06ac2",target:"_blank",rel:"noopener noreferrer"},Q=a("Transacci\xF3n en Solana en detalle por Alex Miller");function W(X,Y){const r=s("RouterLink"),o=s("ExternalLinkIcon");return i(),c(d,null,[m,e("p",null,[h,n(r,{to:"/es/core-concepts/programs.html"},{default:l(()=>[_]),_:1}),f,e("a",g,[b,n(o)]),v]),q,e("p",null,[k,e("a",x,[S,n(o)]),y]),E,C,e("ul",null,[e("li",null,[e("a",L,[U,n(o)]),z]),e("li",null,[e("a",R,[T,n(o)]),w])]),A,V,j,N,e("ul",null,[e("li",null,[e("a",B,[F,n(o)])]),e("li",null,[e("a",H,[I,n(o)])]),e("li",null,[e("a",J,[P,n(o)])]),e("li",null,[e("a",D,[M,n(o)])]),e("li",null,[e("a",O,[G,n(o)])]),e("li",null,[e("a",K,[Q,n(o)])])])],64)}var $=t(p,[["render",W]]);export{$ as default}; +import{_ as t,r as s,o as i,c,a as e,b as n,w as l,F as d,d as a,e as u}from"./app.2fbb9e96.js";const p={},m=e("h1",{id:"transacciones",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#transacciones","aria-hidden":"true"},"#"),a(" Transacciones")],-1),h=a("Los clientes pueden invocar "),_=a("programas"),f=a(" enviando una transacci\xF3n a un cluster. Una transacci\xF3n puede incluir m\xFAltiples instrucciones, cada una de ellas apuntando a un programa diferente. Cuando una transacci\xF3n es enviada, el "),g={href:"https://docs.solana.com/developing/programming-model/runtime",target:"_blank",rel:"noopener noreferrer"},b=a("Runtime"),v=a(" de Solana procesar\xE1 sus instrucciones en orden y de forma at\xF3mica. Si una parte de la transacci\xF3n falla, toda la transacci\xF3n fallar\xE1."),q=u('

    Hechos

    Hoja de hechos

    • Las instrucciones son la unidad de operaci\xF3n m\xE1s b\xE1sica en Solana
    • Cada instrucci\xF3n contiene:
      • El program_id (id del programa) del programa al que apunta
      • Un arreglo de todas accounts (cuentas) donde va a leer o escribir
      • Un instruction_data (datos de la instrucci\xF3n) que es un byte array para el programa espec\xEDfico
    • Varias instrucciones pueden estar contenidas en una Transacci\xF3n
    • Cada transacci\xF3n consiste de:
      • Un arreglo de todas accounts (cuentas) donde va a leer o escribir
      • Una o m\xE1s instructions (instrucciones)
      • Un blockhash (hash de bloque) reciente
      • Una o m\xE1s signatures (firmas)
    • Las instrucciones son procesadas en orden y de forma at\xF3mica
    • Si una parte de la transacci\xF3n falla, toda la transacci\xF3n fallar\xE1
    • Las transacciones est\xE1n limitadas a un m\xE1ximo de 1232 bytes

    Un vistazo m\xE1s profundo

    El Runtime de Solana requiere tanto de instrucciones como de transacciones para especificar una lista de todas las cuentas de las que va a leer o escribir. Al requerir estas cuentas por adelantado, el Runtime de Solana es capaz de paralelizar la ejecuci\xF3n en todas las transacciones.

    Cuando se env\xEDa una transacci\xF3n a un cl\xFAster, el Runtime de Solana procesar\xE1 sus instrucciones en orden y de forma at\xF3mica. Para cada instrucci\xF3n, el programa al que se invoca interpretar\xE1 el arreglo de datos y operar\xE1 en las cuentas especificadas. El programa retornar\xE1 con \xE9xito o un c\xF3digo de error. Si se devuelve un error, toda la transacci\xF3n fallar\xE1 inmediatamente.

    Toda transacci\xF3n que debite de una cuenta o modique sus datos requiere la firma del titular de la cuenta. Cualquier cuenta que se modificar\xE1 ser\xE1 marcada como writable. Una cuenta puede recibir fondos sin el permiso del titular siempre que el pagador del cargo (fee) cubra la renta y las tarifas de transacci\xF3n.

    ',6),k=a("Antes de enviar una transacci\xF3n se debe enviar un "),x={href:"https://docs.solana.com/developing/programming-model/transactions#recent-blockhash",target:"_blank",rel:"noopener noreferrer"},S=a("hash de bloque reciente"),y=a(". El hash de bloque reciente es usado para prevenir duplicados y eliminar transacciones obsoletas. El tiempo m\xE1ximo del hash de bloque reciente de una transacci\xF3n es de 150 bloques, o aproximadamente ~1 minuto 19 segundos al momento de escribir este art\xEDculo."),E=e("h3",{id:"cargos-fees",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#cargos-fees","aria-hidden":"true"},"#"),a(" Cargos (fees)")],-1),C=e("p",null,"La red de Solana colecta 2 tipos de cargos:",-1),L={href:"https://docs.solana.com/transaction_fees",target:"_blank",rel:"noopener noreferrer"},U=a("Cargo por transacci\xF3n"),z=a(" para propagar las transacciones (aka \u201Cgas fees\u201D)"),R={href:"https://docs.solana.com/developing/programming-model/accounts#rent",target:"_blank",rel:"noopener noreferrer"},T=a("Cargo por renta"),w=a(" por almacenar datos en la blockchain"),A=e("p",null,[a("En Solana, los cargos son deterministas: no existe el concepto de un mercado de cargos en el que los usuarios puedan pagar tarifas m\xE1s altas para aumentar sus posibilidades de ser incluidos en el siguiente bloque. Al momento de redactar este documento, las tarifas de transacci\xF3n est\xE1n determinadas \xFAnicamente por la cantidad de firmas requeridas (es decir, "),e("code",null,"lamports_per_signature"),a("), no por la cantidad de recursos utilizados. Esto se debe a que actualmente existe un l\xEDmite m\xE1ximo de 1232 bytes en todas las transacciones.")],-1),V=e("p",null,[a("Todas las transacciones requieren al menos una cuenta sea "),e("code",null,"writable"),a(" (escribible) para firmar la transacci\xF3n. Una vez enviada, la cuenta del firmante que se serializa primero ser\xE1 el pagador del cargo (fee). Esta cuenta pagar\xE1 el costo de la transacci\xF3n sin importar si la transacci\xF3n tiene \xE9xito o falla. Si el pagador del cargo no tiene saldo suficiente para pagar la tarifa de transacci\xF3n, la transacci\xF3n se cancelar\xE1.")],-1),j=e("p",null,"Al momento de escribir este art\xEDculo, el validador que produce el bloque cobra el 50% de todas las tarifas de transacci\xF3n, mientras que el 50% restante se quema. Esta estructura funciona para incentivar a los validadores a procesar tantas transacciones como sea posible durante sus espacios en el programa l\xEDder.",-1),N=e("h2",{id:"other-resources",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#other-resources","aria-hidden":"true"},"#"),a(" Other Resources")],-1),B={href:"https://docs.solana.com/developing/programming-model/transactions",target:"_blank",rel:"noopener noreferrer"},F=a("Documentaci\xF3n oficial"),H={href:"https://solana.wiki/docs/solidity-guide/transactions/#solana-transaction-structure",target:"_blank",rel:"noopener noreferrer"},I=a("Estructura de una transacci\xF3n"),J={href:"https://jstarry.notion.site/Transaction-Fees-f09387e6a8d84287aa16a34ecb58e239",target:"_blank",rel:"noopener noreferrer"},P=a("Cargos de una transacci\xF3n por Justin Starry"),D={href:"https://2501babe.github.io/posts/solana101.html",target:"_blank",rel:"noopener noreferrer"},M=a("Introducci\xF3n a Solana por Hana"),O={href:"https://jito-labs.medium.com/solana-validator-101-transaction-processing-90bcdc271143",target:"_blank",rel:"noopener noreferrer"},G=a("Procesamiento de una transacci\xF3n por Jito Labs"),K={href:"https://medium.com/@asmiller1989/solana-transactions-in-depth-1f7f7fe06ac2",target:"_blank",rel:"noopener noreferrer"},Q=a("Transacci\xF3n en Solana en detalle por Alex Miller");function W(X,Y){const r=s("RouterLink"),o=s("ExternalLinkIcon");return i(),c(d,null,[m,e("p",null,[h,n(r,{to:"/es/core-concepts/programs.html"},{default:l(()=>[_]),_:1}),f,e("a",g,[b,n(o)]),v]),q,e("p",null,[k,e("a",x,[S,n(o)]),y]),E,C,e("ul",null,[e("li",null,[e("a",L,[U,n(o)]),z]),e("li",null,[e("a",R,[T,n(o)]),w])]),A,V,j,N,e("ul",null,[e("li",null,[e("a",B,[F,n(o)])]),e("li",null,[e("a",H,[I,n(o)])]),e("li",null,[e("a",J,[P,n(o)])]),e("li",null,[e("a",D,[M,n(o)])]),e("li",null,[e("a",O,[G,n(o)])]),e("li",null,[e("a",K,[Q,n(o)])])])],64)}var $=t(p,[["render",W]]);export{$ as default}; diff --git a/docs/.vuepress/dist/assets/transactions.html.53129791.js b/docs/.vuepress/dist/assets/transactions.html.c11549b8.js similarity index 99% rename from docs/.vuepress/dist/assets/transactions.html.53129791.js rename to docs/.vuepress/dist/assets/transactions.html.c11549b8.js index 36d6e999d..878db2fca 100644 --- a/docs/.vuepress/dist/assets/transactions.html.53129791.js +++ b/docs/.vuepress/dist/assets/transactions.html.c11549b8.js @@ -1 +1 @@ -import{_ as r,r as a,o as l,c as i,a as e,b as t,w as c,F as d,d as o,e as h}from"./app.cfdf84e7.js";const _={},p=e("h1",{id:"\u4EA4\u6613",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#\u4EA4\u6613","aria-hidden":"true"},"#"),o(" \u4EA4\u6613")],-1),u=o("\u5BA2\u6237\u7AEF\u53EF\u4EE5\u901A\u8FC7\u5411\u4E00\u4E2A\u96C6\u7FA4\u63D0\u4EA4\u4EA4\u6613\u6765\u8C03\u7528"),m=o("\u7A0B\u5E8F"),f=o("\u3002\u4E00\u4E2A\u4EA4\u6613\u53EF\u4EE5\u5305\u542B\u591A\u4E2A\u6307\u4EE4\uFF0C\u6BCF\u4E2A\u6307\u4EE4\u53EF\u4EE5\u9488\u5BF9\u4E0D\u540C\u7684\u7A0B\u5E8F\u3002 \u4EA4\u6613\u63D0\u4EA4\u65F6\uFF0CSolana"),b={href:"https://docs.solana.com/developing/programming-model/runtime",target:"_blank",rel:"noopener noreferrer"},g=o("\u8FD0\u884C\u5E93"),k=o("\u4F1A\u81EA\u52A8\u7684\u6309\u987A\u5E8F\u5904\u7406\u8FD9\u4E9B\u6307\u4EE4\u3002 \u5982\u679C\u67D0\u4E00\u4E2A\u6307\u4EE4\u4E2D\u7684\u4EFB\u4F55\u4E00\u4E2A\u90E8\u5206\u5931\u8D25\uFF0C\u6574\u4E2A\u4EA4\u6613\u5C31\u4F1A\u5931\u8D25\u3002"),x=h('

    \u6982\u8FF0

    \u8981\u70B9

    • \u6307\u4EE4\u662FSolana\u4E0A\u6700\u57FA\u672C\u7684\u64CD\u4F5C\u5355\u5143
    • \u6BCF\u4E2A\u6307\u4EE4\u90FD\u5305\u542B\uFF1A
      • program_id\uFF1A\u6240\u9488\u5BF9\u7684\u7A0B\u5E8F\u7684id
      • accounts\uFF1A\u9700\u8981\u8BFB\u6216\u5199\u7684\u5168\u90E8\u8D26\u6237\u7EC4\u6210\u7684\u6570\u7EC4
      • instruction_data\uFF1A\u5411\u6307\u5B9A\u7A0B\u5E8F\u6240\u4F20\u8F93\u7684\u6570\u636E\u7684\u5B57\u8282\u7801
    • \u591A\u4E2A\u6307\u4EE4\u53EF\u4EE5\u88AB\u6253\u5305\u8FDB\u5165\u540C\u4E00\u4E2A\u4EA4\u6613\u5F53\u4E2D
    • \u6BCF\u4E2A\u4EA4\u6613\u90FD\u5305\u542B\uFF1A
      • instructions\uFF1A\u4E00\u4E2A\u6216\u591A\u4E2A\u6307\u4EE4
      • blockhash\uFF1A\u6700\u65B0\u7684\u5757\u54C8\u5E0C\u503C
      • signatures\uFF1A\u4E00\u4E2A\u6216\u591A\u4E2A\u7B7E\u540D
    • \u6307\u4EE4\u4F1A\u88AB\u81EA\u52A8\u7684\u6309\u987A\u5E8F\u6267\u884C
    • \u5982\u679C\u4E00\u4E2A\u6307\u4EE4\u7684\u4EFB\u4F55\u4E00\u90E8\u5206\u5931\u8D25\uFF0C\u6574\u4E2A\u4EA4\u6613\u5C31\u4F1A\u5931\u8D25
    • \u4EA4\u6613\u7684\u5927\u5C0F\u9650\u5236\u57281232\u5B57\u8282\u4EE5\u5185

    \u6DF1\u5165

    \u5728Solana\u8FD0\u884C\u5E93\u4E2D\uFF0C\u6307\u4EE4\u548C\u4EA4\u6613\u90FD\u9700\u8981\u5148\u6307\u5B9A\u5168\u90E8\u9700\u8981\u8BFB\u5199\u8BBF\u95EE\u7684\u8D26\u6237\u5217\u8868\u3002 \u901A\u8FC7\u4E8B\u5148\u6307\u5B9A\u8D26\u6237\u5217\u8868\uFF0C\u8FD0\u884C\u5E93\u53EF\u4EE5\u5BF9\u4EA4\u6613\u7684\u6267\u884C\u505A\u5E76\u884C\u5316\u5904\u7406\u3002

    \u5F53\u4EA4\u6613\u88AB\u63D0\u4EA4\u5230\u96C6\u7FA4\u65F6\uFF0C\u8FD0\u884C\u5E93\u4F1A\u81EA\u52A8\u7684\u6309\u7167\u987A\u5E8F\u5904\u7406\u8FD9\u4E9B\u6307\u4EE4\u3002\u5BF9\u4E8E\u6BCF\u4E2A\u6307\u4EE4\uFF0C\u63A5\u6536\u8FD9\u4E2A\u6307\u4EE4\u7684\u7A0B\u5E8F\u4F1A\u89E3\u6790\u6307\u4EE4\u4E2D\u7684\u6570\u636E\u5B57\u6BB5\uFF0C\u5728\u6307\u5B9A\u7684\u8D26\u6237\u4E0A\u8FDB\u884C\u64CD\u4F5C\u3002 \u7A0B\u5E8F\u8981\u4E48\u6267\u884C\u6210\u529F\uFF0C\u8981\u4E48\u4F1A\u8FD4\u56DE\u4E00\u4E2A\u9519\u8BEF\u7801\u3002\u5982\u679C\u8FD4\u56DE\u4E86\u4E00\u4E2A\u9519\u8BEF\u7801\uFF0C\u6574\u4E2A\u4EA4\u6613\u90FD\u4F1A\u7ACB\u5373\u5931\u8D25\u3002

    \u4EFB\u4F55\u4EA4\u6613\uFF0C\u53EA\u8981\u9488\u5BF9\u4E00\u4E2A\u8D26\u6237\u6263\u9664SOL\uFF0C\u6216\u8005\u4FEE\u6539\u5176\u4E2D\u7684\u6570\u636E\uFF0C\u90FD\u9700\u8981\u8FD9\u4E2A\u8D26\u6237\u62E5\u6709\u8005\u7684\u7B7E\u540D\u3002 \u5728\u4EA4\u6613\u4E2D\uFF0C\u4F1A\u88AB\u4FEE\u6539\u7684\u8D26\u6237\u90FD\u4F1A\u88AB\u6807\u8BB0\u4E3Awritable\uFF08\u53EF\u5199\uFF09\u3002 \u5F53\u4EA4\u6613\u7684\u4ED8\u8D39\u8005\u652F\u4ED8\u4E86\u8DB3\u591F\u7684\u79DF\u91D1\u548C\u4EA4\u6613\u8D39\u7528\u65F6\uFF0C\u4E00\u4E2A\u8D26\u6237\u53EF\u4EE5\u88AB\u5B58\u5165SOL\u800C\u4E0D\u7528\u8FD9\u4E2A\u8D26\u6237\u62E5\u6709\u8005\u7684\u8BB8\u53EF\u3002

    ',6),S=o("\u63D0\u4EA4\u4E4B\u524D\uFF0C\u6BCF\u4E2A\u4EA4\u6613\u9700\u8981\u5F15\u7528\u4E00\u4E2A"),v={href:"https://docs.solana.com/developing/programming-model/transactions#recent-blockhash",target:"_blank",rel:"noopener noreferrer"},y=o("recent blockhash\uFF08\u6700\u65B0\u5757\u54C8\u5E0C\uFF09"),L=o("\u3002 \u5757\u54C8\u5E0C\u88AB\u7528\u4E8E\u53BB\u91CD\uFF0C\u4EE5\u53CA\u79FB\u9664\u8FC7\u671F\u4EA4\u6613\u3002\u4E00\u4E2A\u5757\u54C8\u5E0C\u7684\u6700\u5927\u5BFF\u547D\u662F150\u4E2A\u533A\u5757\uFF0C\u6210\u6587\u65F6\u8FD9\u4E2A\u65F6\u95F4\u5927\u7EA6\u662F1\u5206\u949F19\u79D2\u3002"),w=e("h3",{id:"\u8D39\u7528",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#\u8D39\u7528","aria-hidden":"true"},"#"),o(" \u8D39\u7528")],-1),T=e("p",null,"Solana\u7F51\u7EDC\u6536\u53D6\u4E24\u79CD\u8D39\u7528\uFF1A",-1),F={href:"https://docs.solana.com/transaction_fees",target:"_blank",rel:"noopener noreferrer"},N=o("\u4EA4\u6613\u8D39"),V=o("\uFF0C\u7528\u4E8E\u5411\u7F51\u7EDC\u5E7F\u64AD\u6D88\u606F\uFF08\u4EA6\u5373gas\u8D39\uFF09"),B={href:"https://docs.solana.com/developing/programming-model/accounts#rent",target:"_blank",rel:"noopener noreferrer"},E=o("\u79DF\u91D1"),I=o("\uFF0C\u7528\u4E8E\u5411\u533A\u5757\u94FE\u4E0A\u5B58\u50A8\u6570\u636E"),O=e("p",null,[o("\u5728Solana\u4E2D\uFF0C\u4EA4\u6613\u8D39\u662F\u786E\u5B9A\u7684\u3002\u5E76\u6CA1\u6709\u8D39\u7387\u7ADE\u4EF7\u7684\u6982\u5FF5\uFF0C\u7528\u6237\u65E0\u6CD5\u901A\u8FC7\u589E\u52A0\u4EA4\u6613\u8D39\u7684\u65B9\u5F0F\u589E\u52A0\u81EA\u5DF1\u7684\u4EA4\u6613\u88AB\u6253\u5305\u8FDB\u4E0B\u4E00\u4E2A\u533A\u5757\u7684\u6982\u7387\u3002 \u5728\u6210\u6587\u65F6\uFF0C\u4EA4\u6613\u8D39\u53EA\u4E0E\u4EA4\u6613\u6240\u9700\u7684\u7B7E\u540D\u6570\u91CF\u76F8\u5173\uFF08\u53C2\u89C1"),e("code",null,"lamports_per_signature"),o("\uFF09\uFF0C\u4E0E\u4EA4\u6613\u6240\u4F7F\u7528\u7684\u8D44\u6E90\u65E0\u5173\u3002 \u8FD9\u662F\u56E0\u4E3A\u76EE\u524D\u6240\u6709\u4EA4\u6613\u90FD\u6709\u4E00\u4E2A\u4E25\u683C\u76841232\u5B57\u8282\u7684\u9650\u5236\u3002")],-1),R=e("p",null,[o("\u6BCF\u4E2A\u4EA4\u6613\u90FD\u9700\u8981\u81F3\u5C11\u6709\u4E00\u4E2A"),e("code",null,"writable"),o("\uFF08\u53EF\u5199\uFF09\u7684\u8D26\u6237\uFF0C\u7528\u4E8E\u4E3A\u4EA4\u6613\u7B7E\u540D\u3002\u8FD9\u4E2A\u8D26\u6237\u65E0\u8BBA\u4EA4\u6613\u6210\u529F\u4E0E\u5426\u90FD\u9700\u8981\u4E3A\u4EA4\u6613\u6210\u672C\u4ED8\u8D39\u3002 \u5982\u679C\u4ED8\u8D39\u8005\u6CA1\u6709\u8DB3\u591F\u4E3A\u4EA4\u6613\u4ED8\u8D39\u7684\u4F59\u989D\uFF0C\u8FD9\u4E2A\u4EA4\u6613\u5C31\u4F1A\u88AB\u4E22\u5F03\u3002")],-1),j=e("p",null,"\u6210\u6587\u65F6\uFF0C50%\u7684\u4EA4\u6613\u8D39\u88AB\u51FA\u5757\u7684\u9A8C\u8BC1\u8282\u70B9\u6536\u53D6\uFF0C\u5269\u4E0B\u768450%\u88AB\u71C3\u70E7\u6389\u3002\u8FD9\u6837\u7684\u7ED3\u6784\u4F1A\u6FC0\u52B1\u9A8C\u8BC1\u8282\u70B9\u5728leader schedule\uFF08\u9886\u5BFC\u65F6\u95F4\u8868\uFF09\u89C4\u5B9A\u7684\u5C5E\u4E8E\u81EA\u5DF1\u7684slot\uFF08\u63D2\u69FD\uFF09\u4E2D\u5904\u7406\u5C3D\u53EF\u80FD\u591A\u7684\u4EA4\u6613\u3002",-1),A=e("h2",{id:"other-resources",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#other-resources","aria-hidden":"true"},"#"),o(" Other Resources")],-1),C={href:"https://docs.solana.com/developing/programming-model/transactions",target:"_blank",rel:"noopener noreferrer"},J=o("\u5B98\u65B9\u6587\u6863"),z={href:"https://solana.wiki/docs/solidity-guide/transactions/#solana-transaction-structure",target:"_blank",rel:"noopener noreferrer"},D=o("\u4EA4\u6613\u7684\u7ED3\u6784"),H={href:"https://jstarry.notion.site/Transaction-Fees-f09387e6a8d84287aa16a34ecb58e239",target:"_blank",rel:"noopener noreferrer"},M=o("Transaction Fees by Justin Starry"),P={href:"https://2501babe.github.io/posts/solana101.html",target:"_blank",rel:"noopener noreferrer"},q=o("An Introduction to Solana by Hana"),G={href:"https://jito-labs.medium.com/solana-validator-101-transaction-processing-90bcdc271143",target:"_blank",rel:"noopener noreferrer"},K=o("Transaction Processing by Jito Labs"),Q={href:"https://medium.com/@asmiller1989/solana-transactions-in-depth-1f7f7fe06ac2",target:"_blank",rel:"noopener noreferrer"},U=o("Solana Transaction in Depth by Alex Miller");function W(X,Y){const s=a("RouterLink"),n=a("ExternalLinkIcon");return l(),i(d,null,[p,e("p",null,[u,t(s,{to:"/zh/core-concepts/programs.html"},{default:c(()=>[m]),_:1}),f,e("a",b,[g,t(n)]),k]),x,e("p",null,[S,e("a",v,[y,t(n)]),L]),w,T,e("ul",null,[e("li",null,[e("a",F,[N,t(n)]),V]),e("li",null,[e("a",B,[E,t(n)]),I])]),O,R,j,A,e("ul",null,[e("li",null,[e("a",C,[J,t(n)])]),e("li",null,[e("a",z,[D,t(n)])]),e("li",null,[e("a",H,[M,t(n)])]),e("li",null,[e("a",P,[q,t(n)])]),e("li",null,[e("a",G,[K,t(n)])]),e("li",null,[e("a",Q,[U,t(n)])])])],64)}var $=r(_,[["render",W]]);export{$ as default}; +import{_ as r,r as a,o as l,c as i,a as e,b as t,w as c,F as d,d as o,e as h}from"./app.2fbb9e96.js";const _={},p=e("h1",{id:"\u4EA4\u6613",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#\u4EA4\u6613","aria-hidden":"true"},"#"),o(" \u4EA4\u6613")],-1),u=o("\u5BA2\u6237\u7AEF\u53EF\u4EE5\u901A\u8FC7\u5411\u4E00\u4E2A\u96C6\u7FA4\u63D0\u4EA4\u4EA4\u6613\u6765\u8C03\u7528"),m=o("\u7A0B\u5E8F"),f=o("\u3002\u4E00\u4E2A\u4EA4\u6613\u53EF\u4EE5\u5305\u542B\u591A\u4E2A\u6307\u4EE4\uFF0C\u6BCF\u4E2A\u6307\u4EE4\u53EF\u4EE5\u9488\u5BF9\u4E0D\u540C\u7684\u7A0B\u5E8F\u3002 \u4EA4\u6613\u63D0\u4EA4\u65F6\uFF0CSolana"),b={href:"https://docs.solana.com/developing/programming-model/runtime",target:"_blank",rel:"noopener noreferrer"},g=o("\u8FD0\u884C\u5E93"),k=o("\u4F1A\u81EA\u52A8\u7684\u6309\u987A\u5E8F\u5904\u7406\u8FD9\u4E9B\u6307\u4EE4\u3002 \u5982\u679C\u67D0\u4E00\u4E2A\u6307\u4EE4\u4E2D\u7684\u4EFB\u4F55\u4E00\u4E2A\u90E8\u5206\u5931\u8D25\uFF0C\u6574\u4E2A\u4EA4\u6613\u5C31\u4F1A\u5931\u8D25\u3002"),x=h('

    \u6982\u8FF0

    \u8981\u70B9

    • \u6307\u4EE4\u662FSolana\u4E0A\u6700\u57FA\u672C\u7684\u64CD\u4F5C\u5355\u5143
    • \u6BCF\u4E2A\u6307\u4EE4\u90FD\u5305\u542B\uFF1A
      • program_id\uFF1A\u6240\u9488\u5BF9\u7684\u7A0B\u5E8F\u7684id
      • accounts\uFF1A\u9700\u8981\u8BFB\u6216\u5199\u7684\u5168\u90E8\u8D26\u6237\u7EC4\u6210\u7684\u6570\u7EC4
      • instruction_data\uFF1A\u5411\u6307\u5B9A\u7A0B\u5E8F\u6240\u4F20\u8F93\u7684\u6570\u636E\u7684\u5B57\u8282\u7801
    • \u591A\u4E2A\u6307\u4EE4\u53EF\u4EE5\u88AB\u6253\u5305\u8FDB\u5165\u540C\u4E00\u4E2A\u4EA4\u6613\u5F53\u4E2D
    • \u6BCF\u4E2A\u4EA4\u6613\u90FD\u5305\u542B\uFF1A
      • instructions\uFF1A\u4E00\u4E2A\u6216\u591A\u4E2A\u6307\u4EE4
      • blockhash\uFF1A\u6700\u65B0\u7684\u5757\u54C8\u5E0C\u503C
      • signatures\uFF1A\u4E00\u4E2A\u6216\u591A\u4E2A\u7B7E\u540D
    • \u6307\u4EE4\u4F1A\u88AB\u81EA\u52A8\u7684\u6309\u987A\u5E8F\u6267\u884C
    • \u5982\u679C\u4E00\u4E2A\u6307\u4EE4\u7684\u4EFB\u4F55\u4E00\u90E8\u5206\u5931\u8D25\uFF0C\u6574\u4E2A\u4EA4\u6613\u5C31\u4F1A\u5931\u8D25
    • \u4EA4\u6613\u7684\u5927\u5C0F\u9650\u5236\u57281232\u5B57\u8282\u4EE5\u5185

    \u6DF1\u5165

    \u5728Solana\u8FD0\u884C\u5E93\u4E2D\uFF0C\u6307\u4EE4\u548C\u4EA4\u6613\u90FD\u9700\u8981\u5148\u6307\u5B9A\u5168\u90E8\u9700\u8981\u8BFB\u5199\u8BBF\u95EE\u7684\u8D26\u6237\u5217\u8868\u3002 \u901A\u8FC7\u4E8B\u5148\u6307\u5B9A\u8D26\u6237\u5217\u8868\uFF0C\u8FD0\u884C\u5E93\u53EF\u4EE5\u5BF9\u4EA4\u6613\u7684\u6267\u884C\u505A\u5E76\u884C\u5316\u5904\u7406\u3002

    \u5F53\u4EA4\u6613\u88AB\u63D0\u4EA4\u5230\u96C6\u7FA4\u65F6\uFF0C\u8FD0\u884C\u5E93\u4F1A\u81EA\u52A8\u7684\u6309\u7167\u987A\u5E8F\u5904\u7406\u8FD9\u4E9B\u6307\u4EE4\u3002\u5BF9\u4E8E\u6BCF\u4E2A\u6307\u4EE4\uFF0C\u63A5\u6536\u8FD9\u4E2A\u6307\u4EE4\u7684\u7A0B\u5E8F\u4F1A\u89E3\u6790\u6307\u4EE4\u4E2D\u7684\u6570\u636E\u5B57\u6BB5\uFF0C\u5728\u6307\u5B9A\u7684\u8D26\u6237\u4E0A\u8FDB\u884C\u64CD\u4F5C\u3002 \u7A0B\u5E8F\u8981\u4E48\u6267\u884C\u6210\u529F\uFF0C\u8981\u4E48\u4F1A\u8FD4\u56DE\u4E00\u4E2A\u9519\u8BEF\u7801\u3002\u5982\u679C\u8FD4\u56DE\u4E86\u4E00\u4E2A\u9519\u8BEF\u7801\uFF0C\u6574\u4E2A\u4EA4\u6613\u90FD\u4F1A\u7ACB\u5373\u5931\u8D25\u3002

    \u4EFB\u4F55\u4EA4\u6613\uFF0C\u53EA\u8981\u9488\u5BF9\u4E00\u4E2A\u8D26\u6237\u6263\u9664SOL\uFF0C\u6216\u8005\u4FEE\u6539\u5176\u4E2D\u7684\u6570\u636E\uFF0C\u90FD\u9700\u8981\u8FD9\u4E2A\u8D26\u6237\u62E5\u6709\u8005\u7684\u7B7E\u540D\u3002 \u5728\u4EA4\u6613\u4E2D\uFF0C\u4F1A\u88AB\u4FEE\u6539\u7684\u8D26\u6237\u90FD\u4F1A\u88AB\u6807\u8BB0\u4E3Awritable\uFF08\u53EF\u5199\uFF09\u3002 \u5F53\u4EA4\u6613\u7684\u4ED8\u8D39\u8005\u652F\u4ED8\u4E86\u8DB3\u591F\u7684\u79DF\u91D1\u548C\u4EA4\u6613\u8D39\u7528\u65F6\uFF0C\u4E00\u4E2A\u8D26\u6237\u53EF\u4EE5\u88AB\u5B58\u5165SOL\u800C\u4E0D\u7528\u8FD9\u4E2A\u8D26\u6237\u62E5\u6709\u8005\u7684\u8BB8\u53EF\u3002

    ',6),S=o("\u63D0\u4EA4\u4E4B\u524D\uFF0C\u6BCF\u4E2A\u4EA4\u6613\u9700\u8981\u5F15\u7528\u4E00\u4E2A"),v={href:"https://docs.solana.com/developing/programming-model/transactions#recent-blockhash",target:"_blank",rel:"noopener noreferrer"},y=o("recent blockhash\uFF08\u6700\u65B0\u5757\u54C8\u5E0C\uFF09"),L=o("\u3002 \u5757\u54C8\u5E0C\u88AB\u7528\u4E8E\u53BB\u91CD\uFF0C\u4EE5\u53CA\u79FB\u9664\u8FC7\u671F\u4EA4\u6613\u3002\u4E00\u4E2A\u5757\u54C8\u5E0C\u7684\u6700\u5927\u5BFF\u547D\u662F150\u4E2A\u533A\u5757\uFF0C\u6210\u6587\u65F6\u8FD9\u4E2A\u65F6\u95F4\u5927\u7EA6\u662F1\u5206\u949F19\u79D2\u3002"),w=e("h3",{id:"\u8D39\u7528",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#\u8D39\u7528","aria-hidden":"true"},"#"),o(" \u8D39\u7528")],-1),T=e("p",null,"Solana\u7F51\u7EDC\u6536\u53D6\u4E24\u79CD\u8D39\u7528\uFF1A",-1),F={href:"https://docs.solana.com/transaction_fees",target:"_blank",rel:"noopener noreferrer"},N=o("\u4EA4\u6613\u8D39"),V=o("\uFF0C\u7528\u4E8E\u5411\u7F51\u7EDC\u5E7F\u64AD\u6D88\u606F\uFF08\u4EA6\u5373gas\u8D39\uFF09"),B={href:"https://docs.solana.com/developing/programming-model/accounts#rent",target:"_blank",rel:"noopener noreferrer"},E=o("\u79DF\u91D1"),I=o("\uFF0C\u7528\u4E8E\u5411\u533A\u5757\u94FE\u4E0A\u5B58\u50A8\u6570\u636E"),O=e("p",null,[o("\u5728Solana\u4E2D\uFF0C\u4EA4\u6613\u8D39\u662F\u786E\u5B9A\u7684\u3002\u5E76\u6CA1\u6709\u8D39\u7387\u7ADE\u4EF7\u7684\u6982\u5FF5\uFF0C\u7528\u6237\u65E0\u6CD5\u901A\u8FC7\u589E\u52A0\u4EA4\u6613\u8D39\u7684\u65B9\u5F0F\u589E\u52A0\u81EA\u5DF1\u7684\u4EA4\u6613\u88AB\u6253\u5305\u8FDB\u4E0B\u4E00\u4E2A\u533A\u5757\u7684\u6982\u7387\u3002 \u5728\u6210\u6587\u65F6\uFF0C\u4EA4\u6613\u8D39\u53EA\u4E0E\u4EA4\u6613\u6240\u9700\u7684\u7B7E\u540D\u6570\u91CF\u76F8\u5173\uFF08\u53C2\u89C1"),e("code",null,"lamports_per_signature"),o("\uFF09\uFF0C\u4E0E\u4EA4\u6613\u6240\u4F7F\u7528\u7684\u8D44\u6E90\u65E0\u5173\u3002 \u8FD9\u662F\u56E0\u4E3A\u76EE\u524D\u6240\u6709\u4EA4\u6613\u90FD\u6709\u4E00\u4E2A\u4E25\u683C\u76841232\u5B57\u8282\u7684\u9650\u5236\u3002")],-1),R=e("p",null,[o("\u6BCF\u4E2A\u4EA4\u6613\u90FD\u9700\u8981\u81F3\u5C11\u6709\u4E00\u4E2A"),e("code",null,"writable"),o("\uFF08\u53EF\u5199\uFF09\u7684\u8D26\u6237\uFF0C\u7528\u4E8E\u4E3A\u4EA4\u6613\u7B7E\u540D\u3002\u8FD9\u4E2A\u8D26\u6237\u65E0\u8BBA\u4EA4\u6613\u6210\u529F\u4E0E\u5426\u90FD\u9700\u8981\u4E3A\u4EA4\u6613\u6210\u672C\u4ED8\u8D39\u3002 \u5982\u679C\u4ED8\u8D39\u8005\u6CA1\u6709\u8DB3\u591F\u4E3A\u4EA4\u6613\u4ED8\u8D39\u7684\u4F59\u989D\uFF0C\u8FD9\u4E2A\u4EA4\u6613\u5C31\u4F1A\u88AB\u4E22\u5F03\u3002")],-1),j=e("p",null,"\u6210\u6587\u65F6\uFF0C50%\u7684\u4EA4\u6613\u8D39\u88AB\u51FA\u5757\u7684\u9A8C\u8BC1\u8282\u70B9\u6536\u53D6\uFF0C\u5269\u4E0B\u768450%\u88AB\u71C3\u70E7\u6389\u3002\u8FD9\u6837\u7684\u7ED3\u6784\u4F1A\u6FC0\u52B1\u9A8C\u8BC1\u8282\u70B9\u5728leader schedule\uFF08\u9886\u5BFC\u65F6\u95F4\u8868\uFF09\u89C4\u5B9A\u7684\u5C5E\u4E8E\u81EA\u5DF1\u7684slot\uFF08\u63D2\u69FD\uFF09\u4E2D\u5904\u7406\u5C3D\u53EF\u80FD\u591A\u7684\u4EA4\u6613\u3002",-1),A=e("h2",{id:"other-resources",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#other-resources","aria-hidden":"true"},"#"),o(" Other Resources")],-1),C={href:"https://docs.solana.com/developing/programming-model/transactions",target:"_blank",rel:"noopener noreferrer"},J=o("\u5B98\u65B9\u6587\u6863"),z={href:"https://solana.wiki/docs/solidity-guide/transactions/#solana-transaction-structure",target:"_blank",rel:"noopener noreferrer"},D=o("\u4EA4\u6613\u7684\u7ED3\u6784"),H={href:"https://jstarry.notion.site/Transaction-Fees-f09387e6a8d84287aa16a34ecb58e239",target:"_blank",rel:"noopener noreferrer"},M=o("Transaction Fees by Justin Starry"),P={href:"https://2501babe.github.io/posts/solana101.html",target:"_blank",rel:"noopener noreferrer"},q=o("An Introduction to Solana by Hana"),G={href:"https://jito-labs.medium.com/solana-validator-101-transaction-processing-90bcdc271143",target:"_blank",rel:"noopener noreferrer"},K=o("Transaction Processing by Jito Labs"),Q={href:"https://medium.com/@asmiller1989/solana-transactions-in-depth-1f7f7fe06ac2",target:"_blank",rel:"noopener noreferrer"},U=o("Solana Transaction in Depth by Alex Miller");function W(X,Y){const s=a("RouterLink"),n=a("ExternalLinkIcon");return l(),i(d,null,[p,e("p",null,[u,t(s,{to:"/zh/core-concepts/programs.html"},{default:c(()=>[m]),_:1}),f,e("a",b,[g,t(n)]),k]),x,e("p",null,[S,e("a",v,[y,t(n)]),L]),w,T,e("ul",null,[e("li",null,[e("a",F,[N,t(n)]),V]),e("li",null,[e("a",B,[E,t(n)]),I])]),O,R,j,A,e("ul",null,[e("li",null,[e("a",C,[J,t(n)])]),e("li",null,[e("a",z,[D,t(n)])]),e("li",null,[e("a",H,[M,t(n)])]),e("li",null,[e("a",P,[q,t(n)])]),e("li",null,[e("a",G,[K,t(n)])]),e("li",null,[e("a",Q,[U,t(n)])])])],64)}var $=r(_,[["render",W]]);export{$ as default}; diff --git a/docs/.vuepress/dist/assets/transactions.html.cbaf2f31.js b/docs/.vuepress/dist/assets/transactions.html.cbaf2f31.js new file mode 100644 index 000000000..2b41b45ba --- /dev/null +++ b/docs/.vuepress/dist/assets/transactions.html.cbaf2f31.js @@ -0,0 +1 @@ +import{_ as r,r as i,o as e,c as s,a as n,b as c,w as l,F as u,d as t,e as a}from"./app.2fbb9e96.js";const d={},g=n("h1",{id:"transactions",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#transactions","aria-hidden":"true"},"#"),t(" Transactions")],-1),_=t("Ng\u01B0\u1EDDi d\xF9ng c\xF3 th\u1EC3 g\u1ECDi "),p=t("Program"),m=t(" b\u1EB1ng c\xE1ch t\u1EA1o v\xE0 g\u1EEDi m\u1ED9t Transaction \u0111\u1EBFn m\u1EA1ng l\u01B0\u1EDBi Solana. M\u1ED9t Transaction c\xF3 th\u1EC3 ch\u1EE9a nhi\u1EC1u instruction b\xEAn trong, v\xE0 m\u1ED7i instruction c\xF3 th\u1EC3 t\u01B0\u01A1ng t\xE1c v\u1EDBi c\xE1c Program kh\xE1c nhau. Khi m\u1ED9t Transaction \u0111\u01B0\u1EE3c g\u1EEDi \u0111i, "),b={href:"https://docs.solana.com/developing/programming-model/runtime",target:"_blank",rel:"noopener noreferrer"},k=t("Solana Runtime"),T=t(" s\u1EBD x\u1EED l\xFD c\xE1c instruction b\xEAn trong Transaction theo th\u1EE9 t\u1EF1 v\xE0 tu\u1EA7n t\u1EF1. N\u1EBFu c\xF3 b\u1EA5t k\u1EF3 instruction n\xE0o x\u1EA3y ra l\u1ED7i, to\xE0n b\u1ED9 Transaction s\u1EBD \u0111\u01B0\u1EE3c xem l\xE0 l\u1ED7i."),v=a('

    C\xF3 th\u1EC3 b\u1EA1n ch\u01B0a bi\u1EBFt

    Nh\u1EEFng \u0111i\u1EC1u c\xF3 th\u1EC3 b\u1EA1n ch\u01B0a bi\u1EBFt

    • C\xE1c instruction l\xE0 nh\u1EEFng \u0111\u01A1n v\u1ECB th\u1EF1c thi nh\u1ECF nh\u1EA5t tr\xEAn Solana
    • M\u1ED7i instruction s\u1EBD ch\u1EE9a:
      • program_id c\u1EE7a Program m\u1EE5c ti\xEAu
      • M\u1ED9t m\u1EA3ng t\u1EA5t c\u1EA3 accounts m\xE0 instruction mu\u1ED1n \u0111\u1ECDc ho\u1EB7c ghi
      • M\u1ED9t m\u1EA3ng byte instruction_data cung c\u1EA5p d\u1EEF li\u1EC7u \u0111\u1EA7u v\xE0o c\u1EE5 th\u1EC3 cho Program
    • Nhi\u1EC1u instruction c\xF3 th\u1EC3 \u0111\u01B0\u1EE3c \u0111\xF3ng g\xF3i trong m\u1ED9t Transaction duy nh\u1EA5t
    • M\u1ED7i Transaction c\xF3 th\u1EC3 ch\u1EE9a:
      • M\u1ED9t m\u1EA3ng t\u1EA5t c\u1EA3 accounts m\xE0 Transaction mu\u1ED1n \u0111\u1ECDc ho\u1EB7c ghi
      • M\u1ED9t ho\u1EB7c nhi\u1EC1u instructions
      • blockhash hi\u1EC7n t\u1EA1i
      • M\u1ED9t ho\u1EB7c nhi\u1EC1u signatures
    • C\xE1c instruction s\u1EBD \u0111\u01B0\u1EE3c th\u1EF1c thi tu\u1EA7n t\u1EF1 v\xE0 theo th\u1EE9 t\u1EF1 trong Transaction
    • N\u1EBFu c\xF3 b\u1EA5t k\u1EF3 instruction n\xE0o x\u1EA3y ra l\u1ED7i, to\xE0n b\u1ED9 giao d\u1ECBch s\u1EBD \u0111\u01B0\u1EE3c xem l\xE0 l\u1ED7i
    • Transaction c\xF3 gi\u1EDBi h\u1EA1n dung l\u01B0\u1EE3ng l\xE0 1232 bytes

    Chi ti\u1EBFt

    Solana Runtime y\xEAu c\u1EA7u instruction v\xE0 Transaction ph\u1EA3i khai b\xE1o m\u1ED9t danh s\xE1ch t\u1EA5t c\u1EA3 c\xE1c Account m\xE0 ch\xFAng c\u1EA7n \u0111\u1ECDc ho\u1EB7c ghi d\u1EEF li\u1EC7u. B\u1EB1ng c\xE1ch y\xEAu c\u1EA7u nh\u1EEFng Account n\xE0y tr\u01B0\u1EDBc, Solana Runtime c\xF3 th\u1EC3 song song ho\xE1 qu\xE1 tr\xECnh th\u1EF1c thi xuy\xEAn su\u1ED1t t\u1EA5t c\u1EA3 c\xE1c Transaction.

    Khi m\u1ED9t Transaction \u0111\u01B0\u1EE3c g\u1EEDi v\xE0o m\u1EA1ng l\u01B0\u1EDBi, Solana Runtime s\u1EBD x\u1EED l\xFD c\xE1c instructions c\u1EE7a n\xF3 tu\u1EA7n t\u1EF1 t\u1EEBng instruction m\u1ED9t theo th\u1EE9 t\u1EF1 khai b\xE1o b\xEAn trong Transaction. V\u1EDBi m\u1ED7i instruction, Program \u0111\u01B0\u1EE3c truy v\u1EA5n s\u1EBD l\u1EA5y d\u1EEF li\u1EC7u t\u1EEB instruction v\xE0 th\u1EF1c thi tr\xEAn c\xE1c Account t\u01B0\u01A1ng \u1EE9ng trong instruction \u0111\xF3. Program ho\u1EB7c l\xE0 tr\u1EA3 v\u1EC1 k\u1EBFt qu\u1EA3 th\xE0nh c\xF4ng, ho\u1EB7c l\xE0 v\u1EDBi k\u1EBFt qu\u1EA3 l\u1ED7i v\u1EDBi m\xE3 l\u1ED7i t\u01B0\u01A1ng \u1EE9ng. V\u1EDBi b\u1EA5t k\u1EF3 l\u1ED7i n\xE0o \u0111\u01B0\u1EE3c tr\u1EA3 ra, to\xE0n b\u1ED9 Transaction s\u1EBD k\u1EBFt th\xFAc v\u1EDBi l\u1ED7i ngay l\u1EADp t\u1EE9c.

    B\u1EA5t k\u1EF3 Transaction n\xE0o m\xE0 thay \u0111\u1ED5i d\u1EEF li\u1EC7u c\u1EE7a Account hay r\xFAt lamports ra t\u1EEB Account th\xEC \u0111\u1EC1u c\u1EA7n y\xEAu c\u1EA7u ch\u1EEF k\xFD c\u1EE7a owner trong Account. B\u1EA5t k\u1EF3 Account n\xE0o khi c\u1EA7n \u0111\u01B0\u1EE3c s\u1EEDa \u0111\u1ED5i \u0111\u1EC1u ph\u1EA3i \u0111\xE1nh d\u1EA5u l\xE0 writable trong instruction t\u01B0\u01A1ng \u1EE9ng. M\u1ED9t Account c\xF3 th\u1EC3 \u0111\u01B0\u1EE3c n\u1EA1p th\xEAm lamports m\xE0 kh\xF4ng c\u1EA7n xin ph\xE9p, ch\u1EC9 c\u1EA7n ng\u01B0\u1EDDi tr\u1EA3 ph\xED cho Transaction \u0111\u1EE7 kh\u1EA3 n\u0103ng chi tr\u1EA3 ph\xED thu\xEA v\xE0 ph\xED giao d\u1ECBch.

    ',6),f=t("Tr\u01B0\u1EDBc khi g\u1EEDi \u0111i, t\u1EA5t c\u1EA3 c\xE1c Transaction ph\u1EA3i tham chi\u1EBFu "),y={href:"https://docs.solana.com/developing/programming-model/transactions#recent-blockhash",target:"_blank",rel:"noopener noreferrer"},x=t("Blockhash"),A=t(" m\u1EDBi nh\u1EA5t. Blockhash \u0111\u01B0\u1EE3c d\xF9ng \u0111\u1EC3 ch\u1ED1ng tr\xF9ng l\u1EB7p v\xE0 lo\u1EA1i b\u1ECF c\xE1c giao d\u1ECBch qu\xE1 h\u1EA1n. Th\u1EDDi h\u1EA1n t\u1ED1i \u0111a cho m\u1ED9t Transaction l\xE0 kh\xF4ng qu\xE1 150 blocks so v\u1EDBi Blockhash \u0111\u01B0\u1EE3c ghi, v\xE0 kho\u1EA3ng ch\u1EEBng 1 ph\xFAt 19 gi\xE2y theo \u01B0\u1EDBc t\xEDnh t\u1EA1i th\u1EDDi \u0111i\u1EC3m cu\u1ED1n s\xE1ch \u0111\u01B0\u1EE3c vi\u1EBFt."),S=n("h3",{id:"phi",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#phi","aria-hidden":"true"},"#"),t(" Ph\xED")],-1),M=n("p",null,"M\u1EA1ng Solana s\u1EBD thu 2 lo\u1EA1i ph\xED:",-1),B={href:"https://docs.solana.com/transaction_fees",target:"_blank",rel:"noopener noreferrer"},N=t("Ph\xED giao d\u1ECBch"),P=t(" cho vi\u1EC7c lan truy\u1EC1n Transaction (Hay th\u01B0\u1EDDng \u0111\u01B0\u1EE3c g\u1ECDi l\xE0 ph\xED gas \u1EDF c\xE1c blockchain kh\xE1c)"),V={href:"https://docs.solana.com/developing/programming-model/accounts#rent",target:"_blank",rel:"noopener noreferrer"},w=t("Ph\xED thu\xEA"),C=t(" v\xF9ng nh\u1EDB d\u1EEF li\u1EC7u cho Account"),q=a('

    Tr\xEAn Solana, ph\xED giao d\u1ECBch th\u01B0\u1EDDng b\u1EA5t bi\u1EBFn, ngh\u0129a l\xE0 kh\xF4ng c\xF3 kh\xE1i ni\u1EC7m v\u1EC1 \u0111\xE1nh ph\xED theo th\u1ECB tr\u01B0\u1EDDng n\u01A1i m\xE0 ng\u01B0\u1EDDi d\xF9ng c\xF3 th\u1EC3 tr\u1EA3 ph\xED cao h\u01A1n m\u1EB7t b\u1EB1ng \u0111\u1EC3 t\u0103ng c\u01A1 h\u1ED9i \u0111\u01B0\u1EE3c \u01B0u ti\xEAn th\u1EF1c thi Transaction tr\u01B0\u1EDBc. T\u1EA1i th\u1EDDi \u0111i\u1EC3m t\xE1c gi\u1EA3 vi\u1EBFt, ph\xED giao d\u1ECBch \u0111\u01B0\u1EE3c x\xE1c \u0111\u1ECBnh b\u1EB1ng s\u1ED1 l\u01B0\u1EE3ng ch\u1EEF k\xFD b\xEAn trong Transaction (c\u1EE5 th\u1EC3 l\xE0 lamports_per_signature), v\xE0 kh\xF4ng ph\u1EA3i b\u1EB1ng s\u1ED1 b\u01B0\u1EDBc t\xEDnh to\xE1n cho Transaction \u0111\xF3. \u0110i\u1EC1u \u0111\xF3 \u0111\u01B0\u1EE3c l\xFD gi\u1EA3i b\u1EDFi v\xEC lu\xF4n c\xF3 m\u1ED9t gi\u1EDBi h\u1EA1n tr\u1EA7n l\xE0 1232 bytes cho m\u1ECDi Transaction.

    T\u1EA5t c\u1EA3 Transaction y\xEAu c\u1EA7u \xEDt nh\u1EA5t m\u1ED9t Account l\xE0 writable \u0111\u1EC3 k\xFD Transaction \u0111\xF3. M\u1ED9t khi \u0111\u01B0\u1EE3c g\u1EEDi, Account tr\u1EA3 ph\xED v\u1EDBi nh\xE3n writable v\xE0 sigher s\u1EBD \u0111\u01B0\u1EE3c tu\u1EA7n t\u1EF1 ho\xE1 tr\u01B0\u1EDBc ti\xEAn. Account n\xE0y s\u1EBD chi tr\u1EA3 c\xE1c chi ph\xED ph\xE1t sinh c\u1EE7a Transaction cho d\xF9 Transaction th\xE0nh c\xF4ng hay th\u1EA5t b\u1EA1i. N\u1EBFu Account tr\u1EA3 ph\xED kh\xF4ng \u0111\u1EE7 s\u1ED1 d\u01B0 \u0111\u1EC3 tr\u1EA3 ph\xED giao d\u1ECBch, Transaction s\u1EBD b\u1ECB b\u1ECF qua.

    T\u1EA1i th\u1EDDi \u0111i\u1EC3m \u0111\u01B0\u1EE3c vi\u1EBFt, 50% ph\xED giao d\u1ECBch s\u1EBD \u0111\u01B0\u1EE3c th\u01B0\u1EDFng cho Validator \u0111\u1EC3 sinh ra block, trong khi 50% c\xF2n l\u1EA1i s\u1EBD \u0111\u01B0\u1EE3c \u0111\u1ED1t. B\u1EB1ng c\u01A1 c\u1EA5u nh\u01B0 v\u1EADy, Validator \u0111\u01B0\u1EE3c khuy\u1EBFn kh\xEDch ph\u1EA3i x\u1EED l\xFD c\xE0ng nhi\u1EC1u Transaction c\xE0ng t\u1ED1t trong th\u1EDDi h\u1EA1n \u0111\u01B0\u1EE3c \u0111\u1EC1 c\u1EED.

    C\xE1c ngu\u1ED3n t\xE0i li\u1EC7u kh\xE1c

    ',4),R={href:"https://docs.solana.com/developing/programming-model/transactions",target:"_blank",rel:"noopener noreferrer"},L=t("T\xE0i li\u1EC7u ch\xEDnh th\u1ED1ng"),F={href:"https://solana.wiki/docs/solidity-guide/transactions/#solana-transaction-structure",target:"_blank",rel:"noopener noreferrer"},E=t("Transaction Structure"),I={href:"https://jstarry.notion.site/Transaction-Fees-f09387e6a8d84287aa16a34ecb58e239",target:"_blank",rel:"noopener noreferrer"},j=t("Transaction Fees by Justin Starry"),H={href:"https://2501babe.github.io/posts/solana101.html",target:"_blank",rel:"noopener noreferrer"},J=t("An Introduction to Solana by Hana"),K={href:"https://jito-labs.medium.com/solana-validator-101-transaction-processing-90bcdc271143",target:"_blank",rel:"noopener noreferrer"},D=t("Transaction Processing by Jito Labs"),z={href:"https://medium.com/@asmiller1989/solana-transactions-in-depth-1f7f7fe06ac2",target:"_blank",rel:"noopener noreferrer"},G=t("Solana Transaction in Depth by Alex Miller");function O(Q,U){const h=i("RouterLink"),o=i("ExternalLinkIcon");return e(),s(u,null,[g,n("p",null,[_,c(h,{to:"/vi/core-concepts/programs.html"},{default:l(()=>[p]),_:1}),m,n("a",b,[k,c(o)]),T]),v,n("p",null,[f,n("a",y,[x,c(o)]),A]),S,M,n("ul",null,[n("li",null,[n("a",B,[N,c(o)]),P]),n("li",null,[n("a",V,[w,c(o)]),C])]),q,n("ul",null,[n("li",null,[n("a",R,[L,c(o)])]),n("li",null,[n("a",F,[E,c(o)])]),n("li",null,[n("a",I,[j,c(o)])]),n("li",null,[n("a",H,[J,c(o)])]),n("li",null,[n("a",K,[D,c(o)])]),n("li",null,[n("a",z,[G,c(o)])])])],64)}var X=r(d,[["render",O]]);export{X as default}; diff --git a/docs/.vuepress/dist/assets/transactions.html.e622419d.js b/docs/.vuepress/dist/assets/transactions.html.d1090aa2.js similarity index 99% rename from docs/.vuepress/dist/assets/transactions.html.e622419d.js rename to docs/.vuepress/dist/assets/transactions.html.d1090aa2.js index f85ab1ef7..ea850a85c 100644 --- a/docs/.vuepress/dist/assets/transactions.html.e622419d.js +++ b/docs/.vuepress/dist/assets/transactions.html.d1090aa2.js @@ -1 +1 @@ -import{_ as s,r as a,o as c,c as i,a as n,b as t,w as l,F as d,d as o,e as h}from"./app.cfdf84e7.js";const _={},u=n("h1",{id:"transactions",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#transactions","aria-hidden":"true"},"#"),o(" Transactions")],-1),p=o("Client\uB4E4\uC740 Cluster\uC5D0 Transaction\uC744 \uBCF4\uB0C4\uC73C\uB85C\uC368 "),m=o("programs"),f=o("\uB4E4\uC744 \uD638\uCD9C\uD569\uB2C8\uB2E4. \uD558\uB098\uC758 Transaction\uC740 \uAC01\uC790\uC758 Program\uC744 \uB300\uC0C1\uC73C\uB85C \uD558\uB294 \uB2E4\uC218\uC758 Instruction\uB4E4\uC744 \uD3EC\uD568\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4. Transaction\uC774 \uBCF4\uB0B4\uC84C\uC744 \uB54C, Solana "),T={href:"https://docs.solana.com/developing/programming-model/runtime",target:"_blank",rel:"noopener noreferrer"},g=o("Runtime"),b=o("\uC740 Transaction\uC758 Instruction\uB4E4\uC744 \uC21C\uC11C\uB300\uB85C \uCC98\uB9AC\uD560 \uAC83\uC785\uB2C8\uB2E4. \uB9CC\uC57D \uD55C Instruction\uC758 \uC5B4\uB5A4 \uBD80\uBD84\uC774\uB77C\uB3C4 \uC2E4\uD328\uD55C\uB2E4\uBA74, \uC804\uCCB4 Transaction\uC740 \uC2E4\uD328\uD560 \uAC83\uC785\uB2C8\uB2E4."),k=h('

    Facts

    Fact Sheet

    • Instruction\uC740 Solana\uC5D0\uC11C \uAC00\uC7A5 \uAE30\uBCF8\uC801\uC778 \uC5F0\uC0B0 \uB2E8\uC704\uC785\uB2C8\uB2E4.
    • \uAC01 Instruction\uC740 \uC544\uB798 \uB0B4\uC6A9\uC744 \uD3EC\uD568\uD569\uB2C8\uB2E4:
      • \uB300\uC0C1 Program\uC758 program_id
      • \uC77D\uAC70\uB098 \uC4F8\uB824\uACE0 \uD558\uB294 \uBAA8\uB4E0 accounts\uB97C \uB2F4\uC740 \uD558\uB098\uC758 Array
      • \uB300\uC0C1 Program\uC5D0 \uBA85\uC2DC\uB41C byte array \uD615\uD0DC\uC758 instruction_data
    • \uB2E4\uC218\uC758 Instruction\uB4E4\uC740 \uD558\uB098\uC758 Transaction\uC73C\uB85C \uBB36\uC77C \uC218 \uC788\uC2B5\uB2C8\uB2E4.
    • \uAC01 Transaction\uC740 \uC544\uB798 \uB0B4\uC6A9\uC744 \uD3EC\uD568\uD569\uB2C8\uB2E4:
      • \uC77D\uAC70\uB098 \uC4F8\uB824\uACE0 \uD558\uB294 \uBAA8\uB4E0 accounts\uB97C \uB2F4\uC740 \uD558\uB098\uC758 Array
      • \uD558\uB098 \uC774\uC0C1\uC758 instructions
      • \uCD5C\uADFC blockhash
      • \uD558\uB098 \uC774\uC0C1\uC758 signatures
    • Instruction\uB4E4\uC740 \uC21C\uC11C\uB300\uB85C \uCC98\uB9AC\uB41C\uB2E4.
    • \uB9CC\uC57D Instuction\uC758 \uD55C \uBD80\uBD84\uC774\uB77C\uB3C4 \uC2E4\uD328\uD55C\uB2E4\uBA74, \uC804\uCCB4 Transaction\uC740 \uC2E4\uD328\uD55C\uB2E4.
    • Transaction\uC740 1232 \uBC14\uC774\uD2B8\uB85C \uC81C\uD55C\uB41C\uB2E4.

    Deep Dive

    Solana Runtime\uC740 Instruction\uACFC Transaction \uB458 \uBAA8\uB450\uC5D0\uAC8C \uC77D\uAC70\uB098 \uC4F8 \uBAA8\uB4E0 Account\uC758 \uBAA9\uB85D\uC744 \uBA85\uC2DC\uD558\uB3C4\uB85D \uC694\uAD6C\uD569\uB2C8\uB2E4. \uC0AC\uC804\uC5D0 Account\uB4E4\uC758 \uBAA9\uB85D\uC744 \uC694\uAD6C\uD568\uC73C\uB85C\uC368, Runtime\uC740 \uBAA8\uB4E0 Transaction\uB4E4\uC744 \uBCD1\uB82C\uB85C \uC2E4\uD589\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.

    \uD55C Transaction\uC774 Cluster\uB85C \uBCF4\uB0B4\uC9C0\uBA74, Runtime\uC740 \uC774 Transaction\uC758 Instruction\uB4E4\uC744 \uC21C\uCC28\uB85C \uCC98\uB9AC\uD560 \uAC83\uC785\uB2C8\uB2E4. \uAC01 Instruction\uC744 \uBC1B\uB294 Program\uC740 Instruction\uC758 \uB370\uC774\uD130\uB97C \uD574\uC11D\uD558\uACE0 \uBA85\uC2DC\uB41C Account\uB4E4\uC744 \uB3D9\uC791\uC2DC\uD0AC \uAC83\uC785\uB2C8\uB2E4. Program\uC740 \uC131\uACF5\uC744 \uBC18\uD658\uD560 \uC218\uB3C4 \uC788\uACE0 \uC5D0\uB7EC \uCF54\uB4DC\uB97C \uBC18\uD658\uD560 \uC218\uB3C4 \uC788\uC2B5\uB2C8\uB2E4. \uB9CC\uC57D \uC5D0\uB7EC\uAC00 \uBC18\uD658\uB418\uBA74, Transaction\uC740 \uC989\uC2DC \uC2E4\uD328\uD560 \uAC83\uC785\uB2C8\uB2E4.

    Account\uC758 \uB370\uC774\uD130\uB97C \uBCC0\uACBD\uD558\uAC70\uB098 \uCD9C\uAE08\uD558\uB824\uACE0 \uD558\uB294 Transaction\uC5D0\uB294 \uD574\uB2F9 Account \uC18C\uC720\uC790\uC758 \uC11C\uBA85\uC774 \uC694\uAD6C\uB429\uB2C8\uB2E4. \uBCC0\uACBD\uB420 Account\uB294 wriable \uD45C\uC2DC\uB429\uB2C8\uB2E4. Transaction \uC694\uAE08 \uC9C0\uBD88\uC790\uAC00 \uD544\uC694\uD55C rent\uC640 Transaction \uC694\uAE08\uC744 \uC9C0\uBD88\uD55C\uB2E4\uBA74, Account\uC5D0 \uC785\uAE08\uD558\uB294 \uB370\uC5D0\uB294 \uC18C\uC720\uC790\uC758 \uC11C\uBA85\uC774 \uD544\uC694\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.

    ',6),I=o("\uBAA8\uB4E0 Transaction\uB4E4\uC740 \uC804\uC1A1 \uC804\uC5D0 "),A={href:"https://docs.solana.com/developing/programming-model/transactions#recent-blockhash",target:"_blank",rel:"noopener noreferrer"},x=o("recent blockhash"),v=o("\uB97C \uCC38\uC870\uD574\uC57C \uD569\uB2C8\uB2E4. Blockhash\uB294 \uC911\uBCF5\uC744 \uBC29\uC9C0\uD558\uACE0 \uC624\uB798\uB41C Transaction\uC744 \uC81C\uAC70\uD558\uAE30 \uC704\uD574 \uC0AC\uC6A9\uB429\uB2C8\uB2E4. Transaction Blockhash\uB294 \uCD5C\uB300 150 blocks\uAE4C\uC9C0, \uD639\uC740 \uCD5C\uB300 1\uBD84 19\uCD08\uAE4C\uC9C0 \uD5C8\uC6A9\uB429\uB2C8\uB2E4."),y=n("h3",{id:"fees",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#fees","aria-hidden":"true"},"#"),o(" Fees")],-1),S=n("p",null,"Solana \uB124\uD2B8\uC6CC\uD06C\uB294 \uB450 \uC885\uB958\uC758 \uC694\uAE08\uC744 \uAC77\uC2B5\uB2C8\uB2E4.",-1),R=o("Transaction \uC804\uD30C\uB97C \uC704\uD55C "),B={href:"https://docs.solana.com/transaction_fees",target:"_blank",rel:"noopener noreferrer"},F=o("Transaction fees"),P=o(" (\u201Dgas fees\u201D \uB77C\uACE0 \uC54C\uB824\uC9C4)"),V=o("On-chain\uC5D0 \uB370\uC774\uD130 \uC800\uC7A5\uC744 \uC704\uD55C "),w={href:"https://docs.solana.com/developing/programming-model/accounts#rent",target:"_blank",rel:"noopener noreferrer"},C=o("Rent fees"),L=n("p",null,[o("Solana\uC758 Transaction fees\uC5D0\uB294 \uC0AC\uC6A9\uC790\uB4E4\uC774 \uB2E4\uC74C block\uC5D0 \uD3EC\uD568\uB420 \uAE30\uD68C\uB97C \uC99D\uAC00\uC2DC\uD0A4\uAE30 \uC704\uD574 \uB354 \uB192\uC740 \uC694\uAE08\uC744 \uC9C0\uBD88\uD560 \uC218 \uC788\uB294 fee market \uAC1C\uB150\uC774 \uC5C6\uC2B5\uB2C8\uB2E4. \uC774 \uAE00\uC744 \uC4F0\uB294 \uC2DC\uC810\uC5D0, Transaction fees\uB294 \uC0AC\uC6A9\uB418\uB294 \uC790\uC6D0\uC758 \uC591\uC5D0 \uC758\uD574\uC11C\uAC00 \uC544\uB2C8\uB77C \uC624\uC9C1 \uC694\uAD6C\uB41C \uC11C\uBA85\uB4E4(i.e. "),n("code",null,"lamports_per_signature"),o(")\uC758 \uAC1C\uC218\uC5D0 \uC758\uD574 \uACB0\uC815\uB429\uB2C8\uB2E4. \uC774\uAC83\uC740 \uD604\uC7AC \uBAA8\uB4E0 Transaction\uB4E4\uC5D0 \uB300\uD55C 1232 \uBC14\uC774\uD2B8\uC758 \uC5C4\uACA9\uD55C \uD55C\uB3C4\uAC00 \uC874\uC7AC\uD558\uAE30 \uB54C\uBB38\uC785\uB2C8\uB2E4.")],-1),D=n("p",null,[o("\uBAA8\uB4E0 Transaction\uC740 Transaction\uC5D0 \uC11C\uBA85\uD558\uAE30 \uC704\uD574 \uCD5C\uC18C \uD558\uB098\uC758 "),n("code",null,"writable"),o(" Account\uB97C \uC694\uAD6C\uD569\uB2C8\uB2E4. \uC804\uC1A1\uB420 \uB54C, \uCC98\uC74C \uC9C1\uB825\uD654\uB41C \uC218\uC815 \uAC00\uB2A5\uD55C \uC11C\uBA85\uC790 Account\uAC00 \uC694\uAE08 \uC9C0\uBD88\uC790\uAC00 \uB420 \uAC83\uC785\uB2C8\uB2E4. \uC774 Account\uB294 Transaction\uC774 \uC131\uACF5\uD558\uB294\uC9C0 \uC2E4\uD328\uD558\uB294\uC9C0\uC640 \uC0C1\uAD00\uC5C6\uC774 Transaction\uC5D0 \uB300\uD55C \uBE44\uC6A9\uC744 \uC9C0\uBD88\uD569\uB2C8\uB2E4. \uB9CC\uC57D \uC694\uAE08 \uC9C0\uBD88\uC790\uAC00 Transaction \uC694\uAE08\uC744 \uC9C0\uBD88\uD558\uAE30 \uC704\uD55C \uCDA9\uBD84\uD55C Balance\uB97C \uAC16\uACE0 \uC788\uC9C0 \uC54A\uB2E4\uBA74, \uC774 Transaction\uC740 \uAC70\uC808\uB429\uB2C8\uB2E4.")],-1),N=n("p",null,"\uC774 \uAE00\uC744 \uC791\uC131\uD558\uB294 \uC2DC\uC810\uC5D0\uB294, \uBAA8\uB4E0 Transaction \uC694\uAE08\uC758 50 \uD37C\uC13C\uD2B8\uB294 Block\uC744 \uC0DD\uC0B0\uD558\uB294 Validator\uAC00 \uAC00\uC838\uAC00\uACE0, \uB098\uBA38\uC9C0 50 \uD37C\uC13C\uD2B8\uB294 \uC18C\uBA78\uB429\uB2C8\uB2E4. \uC774\uB7EC\uD55C \uAD6C\uC870\uB294 Validator\uB4E4\uC774 \uAC00\uB2A5\uD55C \uB9CE\uC740 Transaction\uB4E4\uC744 \uCC98\uB9AC\uD558\uB3C4\uB85D \uBCF4\uC0C1\uD558\uAE30 \uC704\uD568\uC785\uB2C8\uB2E4.",-1),E=n("h2",{id:"other-resources",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#other-resources","aria-hidden":"true"},"#"),o(" Other Resources")],-1),O={href:"https://docs.solana.com/developing/programming-model/transactions",target:"_blank",rel:"noopener noreferrer"},j=o("Official Documentation"),J={href:"https://solana.wiki/docs/solidity-guide/transactions/#solana-transaction-structure",target:"_blank",rel:"noopener noreferrer"},H=o("Transaction Structure"),M={href:"https://jstarry.notion.site/Transaction-Fees-f09387e6a8d84287aa16a34ecb58e239",target:"_blank",rel:"noopener noreferrer"},q=o("Transaction Fees by Justin Starry"),z={href:"https://2501babe.github.io/posts/solana101.html",target:"_blank",rel:"noopener noreferrer"},G=o("An Introduction to Solana by Hana"),K={href:"https://jito-labs.medium.com/solana-validator-101-transaction-processing-90bcdc271143",target:"_blank",rel:"noopener noreferrer"},Q=o("Transaction Processing by Jito Labs"),U={href:"https://medium.com/@asmiller1989/solana-transactions-in-depth-1f7f7fe06ac2",target:"_blank",rel:"noopener noreferrer"},W=o("Solana Transaction in Depth by Alex Miller");function X(Y,Z){const r=a("RouterLink"),e=a("ExternalLinkIcon");return c(),i(d,null,[u,n("p",null,[p,t(r,{to:"/kr/core-concepts/programs.html"},{default:l(()=>[m]),_:1}),f,n("a",T,[g,t(e)]),b]),k,n("p",null,[I,n("a",A,[x,t(e)]),v]),y,S,n("ul",null,[n("li",null,[R,n("a",B,[F,t(e)]),P]),n("li",null,[V,n("a",w,[C,t(e)])])]),L,D,N,E,n("ul",null,[n("li",null,[n("a",O,[j,t(e)])]),n("li",null,[n("a",J,[H,t(e)])]),n("li",null,[n("a",M,[q,t(e)])]),n("li",null,[n("a",z,[G,t(e)])]),n("li",null,[n("a",K,[Q,t(e)])]),n("li",null,[n("a",U,[W,t(e)])])])],64)}var nn=s(_,[["render",X]]);export{nn as default}; +import{_ as s,r as a,o as c,c as i,a as n,b as t,w as l,F as d,d as o,e as h}from"./app.2fbb9e96.js";const _={},u=n("h1",{id:"transactions",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#transactions","aria-hidden":"true"},"#"),o(" Transactions")],-1),p=o("Client\uB4E4\uC740 Cluster\uC5D0 Transaction\uC744 \uBCF4\uB0C4\uC73C\uB85C\uC368 "),m=o("programs"),f=o("\uB4E4\uC744 \uD638\uCD9C\uD569\uB2C8\uB2E4. \uD558\uB098\uC758 Transaction\uC740 \uAC01\uC790\uC758 Program\uC744 \uB300\uC0C1\uC73C\uB85C \uD558\uB294 \uB2E4\uC218\uC758 Instruction\uB4E4\uC744 \uD3EC\uD568\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4. Transaction\uC774 \uBCF4\uB0B4\uC84C\uC744 \uB54C, Solana "),T={href:"https://docs.solana.com/developing/programming-model/runtime",target:"_blank",rel:"noopener noreferrer"},g=o("Runtime"),b=o("\uC740 Transaction\uC758 Instruction\uB4E4\uC744 \uC21C\uC11C\uB300\uB85C \uCC98\uB9AC\uD560 \uAC83\uC785\uB2C8\uB2E4. \uB9CC\uC57D \uD55C Instruction\uC758 \uC5B4\uB5A4 \uBD80\uBD84\uC774\uB77C\uB3C4 \uC2E4\uD328\uD55C\uB2E4\uBA74, \uC804\uCCB4 Transaction\uC740 \uC2E4\uD328\uD560 \uAC83\uC785\uB2C8\uB2E4."),k=h('

    Facts

    Fact Sheet

    • Instruction\uC740 Solana\uC5D0\uC11C \uAC00\uC7A5 \uAE30\uBCF8\uC801\uC778 \uC5F0\uC0B0 \uB2E8\uC704\uC785\uB2C8\uB2E4.
    • \uAC01 Instruction\uC740 \uC544\uB798 \uB0B4\uC6A9\uC744 \uD3EC\uD568\uD569\uB2C8\uB2E4:
      • \uB300\uC0C1 Program\uC758 program_id
      • \uC77D\uAC70\uB098 \uC4F8\uB824\uACE0 \uD558\uB294 \uBAA8\uB4E0 accounts\uB97C \uB2F4\uC740 \uD558\uB098\uC758 Array
      • \uB300\uC0C1 Program\uC5D0 \uBA85\uC2DC\uB41C byte array \uD615\uD0DC\uC758 instruction_data
    • \uB2E4\uC218\uC758 Instruction\uB4E4\uC740 \uD558\uB098\uC758 Transaction\uC73C\uB85C \uBB36\uC77C \uC218 \uC788\uC2B5\uB2C8\uB2E4.
    • \uAC01 Transaction\uC740 \uC544\uB798 \uB0B4\uC6A9\uC744 \uD3EC\uD568\uD569\uB2C8\uB2E4:
      • \uC77D\uAC70\uB098 \uC4F8\uB824\uACE0 \uD558\uB294 \uBAA8\uB4E0 accounts\uB97C \uB2F4\uC740 \uD558\uB098\uC758 Array
      • \uD558\uB098 \uC774\uC0C1\uC758 instructions
      • \uCD5C\uADFC blockhash
      • \uD558\uB098 \uC774\uC0C1\uC758 signatures
    • Instruction\uB4E4\uC740 \uC21C\uC11C\uB300\uB85C \uCC98\uB9AC\uB41C\uB2E4.
    • \uB9CC\uC57D Instuction\uC758 \uD55C \uBD80\uBD84\uC774\uB77C\uB3C4 \uC2E4\uD328\uD55C\uB2E4\uBA74, \uC804\uCCB4 Transaction\uC740 \uC2E4\uD328\uD55C\uB2E4.
    • Transaction\uC740 1232 \uBC14\uC774\uD2B8\uB85C \uC81C\uD55C\uB41C\uB2E4.

    Deep Dive

    Solana Runtime\uC740 Instruction\uACFC Transaction \uB458 \uBAA8\uB450\uC5D0\uAC8C \uC77D\uAC70\uB098 \uC4F8 \uBAA8\uB4E0 Account\uC758 \uBAA9\uB85D\uC744 \uBA85\uC2DC\uD558\uB3C4\uB85D \uC694\uAD6C\uD569\uB2C8\uB2E4. \uC0AC\uC804\uC5D0 Account\uB4E4\uC758 \uBAA9\uB85D\uC744 \uC694\uAD6C\uD568\uC73C\uB85C\uC368, Runtime\uC740 \uBAA8\uB4E0 Transaction\uB4E4\uC744 \uBCD1\uB82C\uB85C \uC2E4\uD589\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.

    \uD55C Transaction\uC774 Cluster\uB85C \uBCF4\uB0B4\uC9C0\uBA74, Runtime\uC740 \uC774 Transaction\uC758 Instruction\uB4E4\uC744 \uC21C\uCC28\uB85C \uCC98\uB9AC\uD560 \uAC83\uC785\uB2C8\uB2E4. \uAC01 Instruction\uC744 \uBC1B\uB294 Program\uC740 Instruction\uC758 \uB370\uC774\uD130\uB97C \uD574\uC11D\uD558\uACE0 \uBA85\uC2DC\uB41C Account\uB4E4\uC744 \uB3D9\uC791\uC2DC\uD0AC \uAC83\uC785\uB2C8\uB2E4. Program\uC740 \uC131\uACF5\uC744 \uBC18\uD658\uD560 \uC218\uB3C4 \uC788\uACE0 \uC5D0\uB7EC \uCF54\uB4DC\uB97C \uBC18\uD658\uD560 \uC218\uB3C4 \uC788\uC2B5\uB2C8\uB2E4. \uB9CC\uC57D \uC5D0\uB7EC\uAC00 \uBC18\uD658\uB418\uBA74, Transaction\uC740 \uC989\uC2DC \uC2E4\uD328\uD560 \uAC83\uC785\uB2C8\uB2E4.

    Account\uC758 \uB370\uC774\uD130\uB97C \uBCC0\uACBD\uD558\uAC70\uB098 \uCD9C\uAE08\uD558\uB824\uACE0 \uD558\uB294 Transaction\uC5D0\uB294 \uD574\uB2F9 Account \uC18C\uC720\uC790\uC758 \uC11C\uBA85\uC774 \uC694\uAD6C\uB429\uB2C8\uB2E4. \uBCC0\uACBD\uB420 Account\uB294 wriable \uD45C\uC2DC\uB429\uB2C8\uB2E4. Transaction \uC694\uAE08 \uC9C0\uBD88\uC790\uAC00 \uD544\uC694\uD55C rent\uC640 Transaction \uC694\uAE08\uC744 \uC9C0\uBD88\uD55C\uB2E4\uBA74, Account\uC5D0 \uC785\uAE08\uD558\uB294 \uB370\uC5D0\uB294 \uC18C\uC720\uC790\uC758 \uC11C\uBA85\uC774 \uD544\uC694\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.

    ',6),I=o("\uBAA8\uB4E0 Transaction\uB4E4\uC740 \uC804\uC1A1 \uC804\uC5D0 "),A={href:"https://docs.solana.com/developing/programming-model/transactions#recent-blockhash",target:"_blank",rel:"noopener noreferrer"},x=o("recent blockhash"),v=o("\uB97C \uCC38\uC870\uD574\uC57C \uD569\uB2C8\uB2E4. Blockhash\uB294 \uC911\uBCF5\uC744 \uBC29\uC9C0\uD558\uACE0 \uC624\uB798\uB41C Transaction\uC744 \uC81C\uAC70\uD558\uAE30 \uC704\uD574 \uC0AC\uC6A9\uB429\uB2C8\uB2E4. Transaction Blockhash\uB294 \uCD5C\uB300 150 blocks\uAE4C\uC9C0, \uD639\uC740 \uCD5C\uB300 1\uBD84 19\uCD08\uAE4C\uC9C0 \uD5C8\uC6A9\uB429\uB2C8\uB2E4."),y=n("h3",{id:"fees",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#fees","aria-hidden":"true"},"#"),o(" Fees")],-1),S=n("p",null,"Solana \uB124\uD2B8\uC6CC\uD06C\uB294 \uB450 \uC885\uB958\uC758 \uC694\uAE08\uC744 \uAC77\uC2B5\uB2C8\uB2E4.",-1),R=o("Transaction \uC804\uD30C\uB97C \uC704\uD55C "),B={href:"https://docs.solana.com/transaction_fees",target:"_blank",rel:"noopener noreferrer"},F=o("Transaction fees"),P=o(" (\u201Dgas fees\u201D \uB77C\uACE0 \uC54C\uB824\uC9C4)"),V=o("On-chain\uC5D0 \uB370\uC774\uD130 \uC800\uC7A5\uC744 \uC704\uD55C "),w={href:"https://docs.solana.com/developing/programming-model/accounts#rent",target:"_blank",rel:"noopener noreferrer"},C=o("Rent fees"),L=n("p",null,[o("Solana\uC758 Transaction fees\uC5D0\uB294 \uC0AC\uC6A9\uC790\uB4E4\uC774 \uB2E4\uC74C block\uC5D0 \uD3EC\uD568\uB420 \uAE30\uD68C\uB97C \uC99D\uAC00\uC2DC\uD0A4\uAE30 \uC704\uD574 \uB354 \uB192\uC740 \uC694\uAE08\uC744 \uC9C0\uBD88\uD560 \uC218 \uC788\uB294 fee market \uAC1C\uB150\uC774 \uC5C6\uC2B5\uB2C8\uB2E4. \uC774 \uAE00\uC744 \uC4F0\uB294 \uC2DC\uC810\uC5D0, Transaction fees\uB294 \uC0AC\uC6A9\uB418\uB294 \uC790\uC6D0\uC758 \uC591\uC5D0 \uC758\uD574\uC11C\uAC00 \uC544\uB2C8\uB77C \uC624\uC9C1 \uC694\uAD6C\uB41C \uC11C\uBA85\uB4E4(i.e. "),n("code",null,"lamports_per_signature"),o(")\uC758 \uAC1C\uC218\uC5D0 \uC758\uD574 \uACB0\uC815\uB429\uB2C8\uB2E4. \uC774\uAC83\uC740 \uD604\uC7AC \uBAA8\uB4E0 Transaction\uB4E4\uC5D0 \uB300\uD55C 1232 \uBC14\uC774\uD2B8\uC758 \uC5C4\uACA9\uD55C \uD55C\uB3C4\uAC00 \uC874\uC7AC\uD558\uAE30 \uB54C\uBB38\uC785\uB2C8\uB2E4.")],-1),D=n("p",null,[o("\uBAA8\uB4E0 Transaction\uC740 Transaction\uC5D0 \uC11C\uBA85\uD558\uAE30 \uC704\uD574 \uCD5C\uC18C \uD558\uB098\uC758 "),n("code",null,"writable"),o(" Account\uB97C \uC694\uAD6C\uD569\uB2C8\uB2E4. \uC804\uC1A1\uB420 \uB54C, \uCC98\uC74C \uC9C1\uB825\uD654\uB41C \uC218\uC815 \uAC00\uB2A5\uD55C \uC11C\uBA85\uC790 Account\uAC00 \uC694\uAE08 \uC9C0\uBD88\uC790\uAC00 \uB420 \uAC83\uC785\uB2C8\uB2E4. \uC774 Account\uB294 Transaction\uC774 \uC131\uACF5\uD558\uB294\uC9C0 \uC2E4\uD328\uD558\uB294\uC9C0\uC640 \uC0C1\uAD00\uC5C6\uC774 Transaction\uC5D0 \uB300\uD55C \uBE44\uC6A9\uC744 \uC9C0\uBD88\uD569\uB2C8\uB2E4. \uB9CC\uC57D \uC694\uAE08 \uC9C0\uBD88\uC790\uAC00 Transaction \uC694\uAE08\uC744 \uC9C0\uBD88\uD558\uAE30 \uC704\uD55C \uCDA9\uBD84\uD55C Balance\uB97C \uAC16\uACE0 \uC788\uC9C0 \uC54A\uB2E4\uBA74, \uC774 Transaction\uC740 \uAC70\uC808\uB429\uB2C8\uB2E4.")],-1),N=n("p",null,"\uC774 \uAE00\uC744 \uC791\uC131\uD558\uB294 \uC2DC\uC810\uC5D0\uB294, \uBAA8\uB4E0 Transaction \uC694\uAE08\uC758 50 \uD37C\uC13C\uD2B8\uB294 Block\uC744 \uC0DD\uC0B0\uD558\uB294 Validator\uAC00 \uAC00\uC838\uAC00\uACE0, \uB098\uBA38\uC9C0 50 \uD37C\uC13C\uD2B8\uB294 \uC18C\uBA78\uB429\uB2C8\uB2E4. \uC774\uB7EC\uD55C \uAD6C\uC870\uB294 Validator\uB4E4\uC774 \uAC00\uB2A5\uD55C \uB9CE\uC740 Transaction\uB4E4\uC744 \uCC98\uB9AC\uD558\uB3C4\uB85D \uBCF4\uC0C1\uD558\uAE30 \uC704\uD568\uC785\uB2C8\uB2E4.",-1),E=n("h2",{id:"other-resources",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#other-resources","aria-hidden":"true"},"#"),o(" Other Resources")],-1),O={href:"https://docs.solana.com/developing/programming-model/transactions",target:"_blank",rel:"noopener noreferrer"},j=o("Official Documentation"),J={href:"https://solana.wiki/docs/solidity-guide/transactions/#solana-transaction-structure",target:"_blank",rel:"noopener noreferrer"},H=o("Transaction Structure"),M={href:"https://jstarry.notion.site/Transaction-Fees-f09387e6a8d84287aa16a34ecb58e239",target:"_blank",rel:"noopener noreferrer"},q=o("Transaction Fees by Justin Starry"),z={href:"https://2501babe.github.io/posts/solana101.html",target:"_blank",rel:"noopener noreferrer"},G=o("An Introduction to Solana by Hana"),K={href:"https://jito-labs.medium.com/solana-validator-101-transaction-processing-90bcdc271143",target:"_blank",rel:"noopener noreferrer"},Q=o("Transaction Processing by Jito Labs"),U={href:"https://medium.com/@asmiller1989/solana-transactions-in-depth-1f7f7fe06ac2",target:"_blank",rel:"noopener noreferrer"},W=o("Solana Transaction in Depth by Alex Miller");function X(Y,Z){const r=a("RouterLink"),e=a("ExternalLinkIcon");return c(),i(d,null,[u,n("p",null,[p,t(r,{to:"/kr/core-concepts/programs.html"},{default:l(()=>[m]),_:1}),f,n("a",T,[g,t(e)]),b]),k,n("p",null,[I,n("a",A,[x,t(e)]),v]),y,S,n("ul",null,[n("li",null,[R,n("a",B,[F,t(e)]),P]),n("li",null,[V,n("a",w,[C,t(e)])])]),L,D,N,E,n("ul",null,[n("li",null,[n("a",O,[j,t(e)])]),n("li",null,[n("a",J,[H,t(e)])]),n("li",null,[n("a",M,[q,t(e)])]),n("li",null,[n("a",z,[G,t(e)])]),n("li",null,[n("a",K,[Q,t(e)])]),n("li",null,[n("a",U,[W,t(e)])])])],64)}var nn=s(_,[["render",X]]);export{nn as default}; diff --git a/docs/.vuepress/dist/assets/transactions.html.7a46c0fe.js b/docs/.vuepress/dist/assets/transactions.html.e77ad835.js similarity index 99% rename from docs/.vuepress/dist/assets/transactions.html.7a46c0fe.js rename to docs/.vuepress/dist/assets/transactions.html.e77ad835.js index 19cdd8050..3661508df 100644 --- a/docs/.vuepress/dist/assets/transactions.html.7a46c0fe.js +++ b/docs/.vuepress/dist/assets/transactions.html.e77ad835.js @@ -1 +1 @@ -import{_ as r,r as a,o as i,c,a as e,b as n,w as l,F as d,d as t,e as h}from"./app.cfdf84e7.js";const u={},f=e("h1",{id:"transactions",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#transactions","aria-hidden":"true"},"#"),t(" Transactions")],-1),_=t("Clients can invoke "),p=t("programs"),m=t(" by submitting a transaction to a cluster. A single transaction can include multiple instructions, each targeting its own program. When a transaction is submitted, the Solana "),b={href:"https://docs.solana.com/developing/programming-model/runtime",target:"_blank",rel:"noopener noreferrer"},g=t("Runtime"),y=t(" will process its instructions in order and atomically. If any part of an instruction fails, the entire transaction will fail."),k=h('

    Facts

    Fact Sheet

    • Instructions are the most basic operational unit on Solana
    • Each instruction contains:
      • The program_id of the intended program
      • An array of all accounts it intends to read from or write to
      • An instruction_data byte array that is specific to the intended program
    • Multiple instructions can be bundled into a single transaction
    • Each transaction contains:
      • An array of all accounts it intends to read from or write to
      • One or more instructions
      • A recent blockhash
      • One or more signatures
    • Instructions are processed in order and atomically
    • If any part of an instruction fails, the entire transaction fails.
    • Transactions are limited to 1232 bytes

    Deep Dive

    The Solana Runtime requires both instructions and transactions to specify a list of all accounts they intended to read from or write to. By requiring these accounts in advance, the runtime is able to parallelize execution across all transactions.

    When a transaction is submitted to a cluster, the runtime will process its instructions in order and atomically. For each instruction, the receiving program will interpret its data array and operate on its specified accounts. The program will either return successfully or with an error code. If an error is returned, the entire transaction will fail immediately.

    Any transaction that aims to debit an account or modify its data requires the signature of its account holder. Any account that will be modified is marked as writable. An account can be credited without the holder\u2019s permission so long as the transaction fee payer covers the necessary rent and transaction fees.

    ',6),w=t("Before submission, all transactions must reference a "),v={href:"https://docs.solana.com/developing/programming-model/transactions#recent-blockhash",target:"_blank",rel:"noopener noreferrer"},T=t("recent blockhash"),x=t(". The blockhash is used to prevent duplications and eliminate stale transactions. The max age of a transaction's blockhash is 150 blocks, or about ~1 minute 19 seconds as of the time of this writing."),A=e("h3",{id:"fees",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#fees","aria-hidden":"true"},"#"),t(" Fees")],-1),S=e("p",null,"The Solana network collects two types of fees:",-1),I={href:"https://docs.solana.com/transaction_fees",target:"_blank",rel:"noopener noreferrer"},F=t("Transaction fees"),R=t(" for propagating transactions (aka \u201Cgas fees\u201D)"),q={href:"https://docs.solana.com/developing/programming-model/accounts#rent",target:"_blank",rel:"noopener noreferrer"},B=t("Rent fees"),E=t(" for storing data on-chain"),L=e("p",null,[t("In Solana, transaction fees are deterministic: there is no concept of a fee market in which users can pay higher fees to increase their chances of being included in the next block. At the time of this writing, transaction fees are determined only by the number of signatures required (i.e. "),e("code",null,"lamports_per_signature"),t("), not by the amount of resources used. This is because there is currently a hard cap of 1232 bytes on all transactions.")],-1),O=e("p",null,[t("All transactions require at least one "),e("code",null,"writable"),t(" account to sign the transaction. Once submitted, the writable signer account that is serialized first will be the fee payer. This account will pay for the cost of the transaction regardless of whether the transaction succeeds or fails. If the fee payer does not have a sufficient balance to pay the transaction fee, the transaction will be dropped.")],-1),D=e("p",null,"At the time of this writing, 50% of all transaction fees are collected by the validator that produces the block, while the remaining 50% are burned. This structure works to incentivize validators to process as many transactions as possible during their slots in the leader schedule.",-1),N=e("h2",{id:"other-resources",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#other-resources","aria-hidden":"true"},"#"),t(" Other Resources")],-1),V={href:"https://docs.solana.com/developing/programming-model/transactions",target:"_blank",rel:"noopener noreferrer"},z=t("Official Documentation"),C={href:"https://solana.wiki/docs/solidity-guide/transactions/#solana-transaction-structure",target:"_blank",rel:"noopener noreferrer"},j=t("Transaction Structure"),J={href:"https://jstarry.notion.site/Transaction-Fees-f09387e6a8d84287aa16a34ecb58e239",target:"_blank",rel:"noopener noreferrer"},M=t("Transaction Fees by Justin Starry"),W={href:"https://2501babe.github.io/posts/solana101.html",target:"_blank",rel:"noopener noreferrer"},H=t("An Introduction to Solana by Hana"),P={href:"https://jito-labs.medium.com/solana-validator-101-transaction-processing-90bcdc271143",target:"_blank",rel:"noopener noreferrer"},G=t("Transaction Processing by Jito Labs"),K={href:"https://medium.com/@asmiller1989/solana-transactions-in-depth-1f7f7fe06ac2",target:"_blank",rel:"noopener noreferrer"},Q=t("Solana Transaction in Depth by Alex Miller");function U(X,Y){const s=a("RouterLink"),o=a("ExternalLinkIcon");return i(),c(d,null,[f,e("p",null,[_,n(s,{to:"/core-concepts/programs.html"},{default:l(()=>[p]),_:1}),m,e("a",b,[g,n(o)]),y]),k,e("p",null,[w,e("a",v,[T,n(o)]),x]),A,S,e("ul",null,[e("li",null,[e("a",I,[F,n(o)]),R]),e("li",null,[e("a",q,[B,n(o)]),E])]),L,O,D,N,e("ul",null,[e("li",null,[e("a",V,[z,n(o)])]),e("li",null,[e("a",C,[j,n(o)])]),e("li",null,[e("a",J,[M,n(o)])]),e("li",null,[e("a",W,[H,n(o)])]),e("li",null,[e("a",P,[G,n(o)])]),e("li",null,[e("a",K,[Q,n(o)])])])],64)}var $=r(u,[["render",U]]);export{$ as default}; +import{_ as r,r as a,o as i,c,a as e,b as n,w as l,F as d,d as t,e as h}from"./app.2fbb9e96.js";const u={},f=e("h1",{id:"transactions",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#transactions","aria-hidden":"true"},"#"),t(" Transactions")],-1),_=t("Clients can invoke "),p=t("programs"),m=t(" by submitting a transaction to a cluster. A single transaction can include multiple instructions, each targeting its own program. When a transaction is submitted, the Solana "),b={href:"https://docs.solana.com/developing/programming-model/runtime",target:"_blank",rel:"noopener noreferrer"},g=t("Runtime"),y=t(" will process its instructions in order and atomically. If any part of an instruction fails, the entire transaction will fail."),k=h('

    Facts

    Fact Sheet

    • Instructions are the most basic operational unit on Solana
    • Each instruction contains:
      • The program_id of the intended program
      • An array of all accounts it intends to read from or write to
      • An instruction_data byte array that is specific to the intended program
    • Multiple instructions can be bundled into a single transaction
    • Each transaction contains:
      • An array of all accounts it intends to read from or write to
      • One or more instructions
      • A recent blockhash
      • One or more signatures
    • Instructions are processed in order and atomically
    • If any part of an instruction fails, the entire transaction fails.
    • Transactions are limited to 1232 bytes

    Deep Dive

    The Solana Runtime requires both instructions and transactions to specify a list of all accounts they intended to read from or write to. By requiring these accounts in advance, the runtime is able to parallelize execution across all transactions.

    When a transaction is submitted to a cluster, the runtime will process its instructions in order and atomically. For each instruction, the receiving program will interpret its data array and operate on its specified accounts. The program will either return successfully or with an error code. If an error is returned, the entire transaction will fail immediately.

    Any transaction that aims to debit an account or modify its data requires the signature of its account holder. Any account that will be modified is marked as writable. An account can be credited without the holder\u2019s permission so long as the transaction fee payer covers the necessary rent and transaction fees.

    ',6),w=t("Before submission, all transactions must reference a "),v={href:"https://docs.solana.com/developing/programming-model/transactions#recent-blockhash",target:"_blank",rel:"noopener noreferrer"},T=t("recent blockhash"),x=t(". The blockhash is used to prevent duplications and eliminate stale transactions. The max age of a transaction's blockhash is 150 blocks, or about ~1 minute 19 seconds as of the time of this writing."),A=e("h3",{id:"fees",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#fees","aria-hidden":"true"},"#"),t(" Fees")],-1),S=e("p",null,"The Solana network collects two types of fees:",-1),I={href:"https://docs.solana.com/transaction_fees",target:"_blank",rel:"noopener noreferrer"},F=t("Transaction fees"),R=t(" for propagating transactions (aka \u201Cgas fees\u201D)"),q={href:"https://docs.solana.com/developing/programming-model/accounts#rent",target:"_blank",rel:"noopener noreferrer"},B=t("Rent fees"),E=t(" for storing data on-chain"),L=e("p",null,[t("In Solana, transaction fees are deterministic: there is no concept of a fee market in which users can pay higher fees to increase their chances of being included in the next block. At the time of this writing, transaction fees are determined only by the number of signatures required (i.e. "),e("code",null,"lamports_per_signature"),t("), not by the amount of resources used. This is because there is currently a hard cap of 1232 bytes on all transactions.")],-1),O=e("p",null,[t("All transactions require at least one "),e("code",null,"writable"),t(" account to sign the transaction. Once submitted, the writable signer account that is serialized first will be the fee payer. This account will pay for the cost of the transaction regardless of whether the transaction succeeds or fails. If the fee payer does not have a sufficient balance to pay the transaction fee, the transaction will be dropped.")],-1),D=e("p",null,"At the time of this writing, 50% of all transaction fees are collected by the validator that produces the block, while the remaining 50% are burned. This structure works to incentivize validators to process as many transactions as possible during their slots in the leader schedule.",-1),N=e("h2",{id:"other-resources",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#other-resources","aria-hidden":"true"},"#"),t(" Other Resources")],-1),V={href:"https://docs.solana.com/developing/programming-model/transactions",target:"_blank",rel:"noopener noreferrer"},z=t("Official Documentation"),C={href:"https://solana.wiki/docs/solidity-guide/transactions/#solana-transaction-structure",target:"_blank",rel:"noopener noreferrer"},j=t("Transaction Structure"),J={href:"https://jstarry.notion.site/Transaction-Fees-f09387e6a8d84287aa16a34ecb58e239",target:"_blank",rel:"noopener noreferrer"},M=t("Transaction Fees by Justin Starry"),W={href:"https://2501babe.github.io/posts/solana101.html",target:"_blank",rel:"noopener noreferrer"},H=t("An Introduction to Solana by Hana"),P={href:"https://jito-labs.medium.com/solana-validator-101-transaction-processing-90bcdc271143",target:"_blank",rel:"noopener noreferrer"},G=t("Transaction Processing by Jito Labs"),K={href:"https://medium.com/@asmiller1989/solana-transactions-in-depth-1f7f7fe06ac2",target:"_blank",rel:"noopener noreferrer"},Q=t("Solana Transaction in Depth by Alex Miller");function U(X,Y){const s=a("RouterLink"),o=a("ExternalLinkIcon");return i(),c(d,null,[f,e("p",null,[_,n(s,{to:"/core-concepts/programs.html"},{default:l(()=>[p]),_:1}),m,e("a",b,[g,n(o)]),y]),k,e("p",null,[w,e("a",v,[T,n(o)]),x]),A,S,e("ul",null,[e("li",null,[e("a",I,[F,n(o)]),R]),e("li",null,[e("a",q,[B,n(o)]),E])]),L,O,D,N,e("ul",null,[e("li",null,[e("a",V,[z,n(o)])]),e("li",null,[e("a",C,[j,n(o)])]),e("li",null,[e("a",J,[M,n(o)])]),e("li",null,[e("a",W,[H,n(o)])]),e("li",null,[e("a",P,[G,n(o)])]),e("li",null,[e("a",K,[Q,n(o)])])])],64)}var $=r(u,[["render",U]]);export{$ as default}; diff --git a/docs/.vuepress/dist/assets/transactions.html.f0ff60a1.js b/docs/.vuepress/dist/assets/transactions.html.f0ff60a1.js deleted file mode 100644 index 059679aba..000000000 --- a/docs/.vuepress/dist/assets/transactions.html.f0ff60a1.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,r as i,o as r,c as s,a as t,b as c,w as l,F as d,d as n,e as h}from"./app.cfdf84e7.js";const g={},u=t("h1",{id:"transactions",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#transactions","aria-hidden":"true"},"#"),n(" Transactions")],-1),_=n("Ng\u01B0\u1EDDi d\xF9ng c\xF3 th\u1EC3 g\u1ECDi "),p=n("Program"),m=n(" b\u1EB1ng c\xE1ch t\u1EA1o v\xE0 g\u1EEDi m\u1ED9t Transaction \u0111\u1EBFn m\u1EA1ng l\u01B0\u1EDBi Solana. M\u1ED9t Transaction \u0111\u01A1n c\xF3 th\u1EC3 ch\u1EE9a nhi\u1EC1u ch\u1EC9 th\u1ECB b\xEAn trong, v\xE0 m\u1ED7i ch\u1EC9 th\u1ECB c\xF3 th\u1EC3 t\u01B0\u01A1ng t\xE1c v\u1EDBi c\xE1c Program kh\xE1c nhau. Khi m\u1ED9t Transaction \u0111\u01B0\u1EE3c g\u1EEDi \u0111i, "),b={href:"https://docs.solana.com/developing/programming-model/runtime",target:"_blank",rel:"noopener noreferrer"},k=n("Solana Runtime"),T=n(" s\u1EBD x\u1EED l\xFD c\xE1c ch\u1EC9 th\u1ECB b\xEAn trong Transaction t\u1EEBng ch\u1EC9 th\u1ECB m\u1ED9t theo th\u1EE9 t\u1EF1. N\u1EBFu c\xF3 b\u1EA5t k\u1EF3 ch\u1EC9 th\u1ECB n\xE0o x\u1EA3y ra l\u1ED7i, to\xE0n b\u1ED9 Transaction s\u1EBD \u0111\u01B0\u1EE3c xem l\xE0 l\u1ED7i."),v=h('

    C\xF3 th\u1EC3 b\u1EA1n ch\u01B0a bi\u1EBFt

    Nh\u1EEFng \u0111i\u1EC1u c\xF3 th\u1EC3 b\u1EA1n ch\u01B0a bi\u1EBFt

    • C\xE1c ch\u1EC9 th\u1ECB l\xE0 nh\u1EEFng \u0111\u01A1n v\u1ECB th\u1EF1c thi nh\u1ECF nh\u1EA5t tr\xEAn Solana
    • M\u1ED7i ch\u1EC9 th\u1ECB s\u1EBD ch\u1EE9a:
      • program_id c\u1EE7a Program m\u1EE5c ti\xEAu
      • M\u1ED9t m\u1EA3ng t\u1EA5t c\u1EA3 accounts m\xE0 ch\u1EC9 th\u1ECB mu\u1ED1n \u0111\u1ECDc ho\u1EB7c ghi
      • M\u1ED9t m\u1EA3ng byte instruction_data cung c\u1EA5p d\u1EEF li\u1EC7u \u0111\u1EA7u v\xE0o c\u1EE5 th\u1EC3 cho Program
    • Nhi\u1EC1u ch\u1EC9 th\u1ECB c\xF3 th\u1EC3 \u0111\u1ECDc \u0111\xF3ng g\xF3i trong m\u1ED9t Transaction duy nh\u1EA5t
    • M\u1ED7i Transaction c\xF3 th\u1EC3 ch\u1EE9a:
      • M\u1ED9t m\u1EA3ng t\u1EA5t c\u1EA3 accounts m\xE0 Transaction mu\u1ED1n \u0111\u1ECDc ho\u1EB7c ghi
      • M\u1ED9t ho\u1EB7c nhi\u1EC1u ch\u1EC9 th\u1ECB v\xE0 \u0111\u01B0\u1EE3c l\u01B0u trong instructions
      • blockhash hi\u1EC7n t\u1EA1i
      • M\u1ED9t ho\u1EB7c nhi\u1EC1u ch\u1EEF k\u1EF3 v\xE0 \u0111\u01B0\u1EE3c l\u01B0u trong signatures
    • C\xE1c ch\u1EC9 th\u1ECB s\u1EBD \u0111\u01B0\u1EE3c th\u1EF1c thi tu\u1EA7n t\u1EF1 v\xE0 theo th\u1EE9 t\u1EF1 trong Transaction
    • N\u1EBFu c\xF3 b\u1EA5t k\u1EF3 ch\u1EC9 th\u1ECB n\xE0o x\u1EA3y ra l\u1ED7i, to\xE0n b\u1ED9 giao d\u1ECBch s\u1EBD \u0111\u01B0\u1EE3c xem l\xE0 l\u1ED7i
    • Transaction c\xF3 gi\u1EDBi h\u1EA1n dung l\u01B0\u1EE3ng l\xE0 1232 bytes

    Chi ti\u1EBFt

    Solana Runtime y\xEAu c\u1EA7u c\u1EA3 ch\u1EC9 th\u1ECB v\xE0 Transaction ph\u1EA3i khai b\xE1o m\u1ED9t danh s\xE1ch t\u1EA5t c\u1EA3 c\xE1c Account m\xE0 ch\xFAng c\u1EA7n \u0111\u1ECDc ho\u1EB7c ghi d\u1EEF li\u1EC7u. B\u1EB1ng c\xE1c y\xEAu c\u1EA7u nh\u1EEFng Account n\xE0y tr\u01B0\u1EDBc, Solana Runtime c\xF3 th\u1EC3 song song ho\xE1 qu\xE1 tr\xECnh th\u1EF1c thi xuy\xEAn su\u1ED1t t\u1EA5t c\u1EA3 c\xE1c Transaction.

    Khi m\u1ED9t Transaction \u0111\u01B0\u1EE3c g\u1EEDi v\xE0o m\u1EA1ng l\u01B0\u1EDBi, Solana Runtime s\u1EBD x\u1EED l\xFD c\xE1c ch\u1EC9 th\u1ECB c\u1EE7a n\xF3 tu\u1EA7n t\u1EF1 t\u1EEBng ch\u1EC9 th\u1ECB m\u1ED9t theo th\u1EE9 t\u1EF1 khai b\xE1o b\xEAn trong Transaction. V\u1EDBi m\u1ED7i ch\u1EC9 th\u1ECB, Program \u0111\u01B0\u1EE3c truy v\u1EA5n s\u1EBD l\u1EA5y d\u1EEF li\u1EC7u t\u1EEB ch\u1EC9 th\u1ECB v\xE0 th\u1EF1c thi tr\xEAn c\xE1c Account t\u01B0\u01A1ng \u1EE9ng trong ch\u1EC9 th\u1ECB \u0111\xF3. Program ho\u1EB7c l\xE0 tr\u1EA3 v\u1EC1 k\u1EBFt qu\u1EA3 th\xE0nh c\xF4ng, ho\u1EB7c l\xE0 v\u1EDBi k\u1EBFt qu\u1EA3 l\u1ED7i v\u1EDBi m\xE3 l\u1ED7i t\u01B0\u01A1ng \u1EE9ng. V\u1EDBi b\u1EA5t k\u1EF3 l\u1ED7i n\xE0o \u0111\u01B0\u1EE3c tr\u1EA3 ra, to\xE0n b\u1ED9 Transaction s\u1EBD k\u1EBFt th\xFAc v\u1EDBi l\u1ED7i ngay l\u1EADp t\u1EE9c.

    B\u1EA5t k\u1EF3 Transaction n\xE0o m\xE0 thay \u0111\u1ED5i d\u1EEF li\u1EC7u c\u1EE7a Account hay r\xFAt lamports ra t\u1EEB Account th\xEC \u0111\u1EC1u c\u1EA7n y\xEAu c\u1EA7u ch\u1EEF k\xFD c\u1EE7a owner trong Account. B\u1EA5t k\u1EF3 Account n\xE0o khi c\u1EA7n \u0111\u01B0\u1EE3c s\u1EEDa \u0111\u1ED5i \u0111\u1EC1u ph\u1EA3i \u0111\xE1nh d\u1EA5u l\xE0 writable trong ch\u1EC9 th\u1ECB t\u01B0\u01A1ng \u1EE9ng. M\u1ED9t Account c\xF3 th\u1EC3 \u0111\u01B0\u1EE3c n\u1EA1p th\xEAm lamports m\xE0 kh\xF4ng c\u1EA7n xin ph\xE9p, duy ch\u1EC9 c\u1EA7n ng\u01B0\u1EDDi tr\u1EA3 ph\xED cho Transaction \u0111\u1EE7 kh\u1EA3 n\u0103ng chi tr\u1EA3 ph\xED thu\xEA v\xE0 ph\xED giao d\u1ECBch.

    ',6),f=n("Tr\u01B0\u1EDBc khi g\u1EEDi \u0111i, t\u1EA5t c\u1EA3 c\xE1c Transaction ph\u1EA3i tham v\u1EA5n "),y={href:"https://docs.solana.com/developing/programming-model/transactions#recent-blockhash",target:"_blank",rel:"noopener noreferrer"},x=n("Blockhash"),A=n(" m\u1EDBi nh\u1EA5t. Blockhash \u0111\u01B0\u1EE3c d\xF9ng \u0111\u1EC3 ch\u1ED1ng tr\xF9ng l\u1EB7p v\xE0 lo\u1EA1i b\u1ECF c\xE1c giao d\u1ECBch qu\xE1 h\u1EA1n. Th\u1EDDi h\u1EA1n t\u1ED1i \u0111a cho m\u1ED9t Transaction l\xE0 kh\xF4ng qu\xE1 150 blocks so v\u1EDBi Blockhash \u0111\u01B0\u1EE3c ghi, v\xE0 kho\u1EA3ng ch\u1EEBng 1 ph\xFAt 19 gi\xE2y theo \u01B0\u1EDBc t\xEDnh t\u1EA1i th\u1EDDi \u0111i\u1EC3m cu\u1ED1n s\xE1ch \u0111\u01B0\u1EE3c vi\u1EBFt."),S=t("h3",{id:"phi",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#phi","aria-hidden":"true"},"#"),n(" Ph\xED")],-1),M=t("p",null,"M\u1EA1ng Solana s\u1EBD thu 2 lo\u1EA1i ph\xED:",-1),B={href:"https://docs.solana.com/transaction_fees",target:"_blank",rel:"noopener noreferrer"},N=n("Ph\xED giao d\u1ECBch"),P=n(" cho vi\u1EC7c lan truy\u1EC1n Transaction (Hay th\u01B0\u1EDDng \u0111\u01B0\u1EE3c g\u1ECDi l\xE0 ph\xED gas \u1EDF c\xE1c blockchain kh\xE1c)"),V={href:"https://docs.solana.com/developing/programming-model/accounts#rent",target:"_blank",rel:"noopener noreferrer"},w=n("Ph\xED thu\xEA"),C=n(" v\xF9ng nh\u1EDB d\u1EEF li\u1EC7u cho Account"),q=h('

    Tr\xEAn Solana, ph\xED giao d\u1ECBch th\u01B0\u1EDDng b\u1EA5t bi\u1EBFn, ngh\u0129a l\xE0 kh\xF4ng c\xF3 kh\xE1i ni\u1EC7m v\u1EC1 \u0111\xE1nh ph\xED theo th\u1ECB tr\u01B0\u1EDDng n\u01A1i m\xE0 ng\u01B0\u1EDDi d\xF9ng c\xF3 th\u1EC3 tr\u1EA3 ph\xED cao h\u01A1n m\u1EB7t b\u1EB1ng \u0111\u1EC3 t\u0103ng c\u01A1 h\u1ED9i \u0111\u01B0\u1EE3c \u01B0u ti\xEAn th\u1EF1c thi Transaction tr\u01B0\u1EDBc. T\u1EA1i th\u1EDDi \u0111i\u1EC3m t\xE1c gi\u1EA3 vi\u1EBFt, ph\xED giao d\u1ECBch \u0111\u01B0\u1EE3c x\xE1c \u0111\u1ECBnh b\u1EB1ng s\u1ED1 l\u01B0\u1EE3ng ch\u1EEF k\xFD b\xEAn trong Transaction (c\u1EE5 th\u1EC3 l\xE0 lamports_per_signature), v\xE0 kh\xF4ng ph\u1EA3i b\u1EB1ng s\u1ED1 b\u01B0\u1EDBc t\xEDnh to\xE1n cho Transaction \u0111\xF3. \u0110i\u1EC1u \u0111\xF3 \u0111\u01B0\u1EE3c l\xFD gi\u1EA3i b\u1EDFi v\xEC lu\xF4n c\xF3 m\u1ED9t gi\u1EDBi h\u1EA1n tr\u1EA7n l\xE0 1232 bytes cho m\u1ECDi Transaction.

    T\u1EA5t c\u1EA3 Transaction y\xEAu c\u1EA7u \xEDt nh\u1EA5t m\u1ED9t Account l\xE0 writable \u0111\u1EC3 k\xFD Transaction \u0111\xF3. M\u1ED9t khi \u0111\u01B0\u1EE3c g\u1EEDi, Account tr\u1EA3 ph\xED v\u1EDBi nh\xE3n writable v\xE0 sigher s\u1EBD \u0111\u01B0\u1EE3c tu\u1EA7n t\u1EF1 ho\xE1 tr\u01B0\u1EDBc ti\xEAn. Account n\xE0y s\u1EBD chi tr\u1EA3 c\xE1c chi ph\xED ph\xE1t sinh c\u1EE7a Transaction du cho Transaction th\xE0nh c\xF4ng hay th\u1EA5t b\u1EA1i. N\u1EBFu Account tr\u1EA3 ph\xED kh\xF4ng \u0111\u1EE7 s\u1ED1 d\u01B0 \u0111\u1EC3 tr\u1EA3 ph\xED giao d\u1ECBch, Transaction s\u1EBD b\u1ECB b\u1ECF qua.

    T\u1EA1i th\u1EDDi \u0111i\u1EC3m \u0111\u01B0\u1EE3c vi\u1EBFt, 50% ph\xED giao d\u1ECBch s\u1EBD \u0111\u01B0\u1EE3c th\u01B0\u1EDFng cho Validator \u0111\u1EC3 sinh ra block, trong khi 50% c\xF2n l\u1EA1i s\u1EBD \u0111\u01B0\u1EE3c \u0111\u1ED1t. B\u1EB1ng c\u01A1 c\u1EA5u nh\u01B0 v\u1EADy, Validator \u0111\u01B0\u1EE3c khuy\u1EBFn kh\xEDch ph\u1EA3i x\u1EED l\xFD c\xE0ng nhi\u1EC1u Transaction c\xE0ng t\u1ED1t trong th\u1EDDi h\u1EA1n \u0111\u01B0\u1EE3c \u0111\u1EC1 c\u1EED.

    C\xE1c ngu\u1ED3n t\xE0i li\u1EC7u kh\xE1c

    ',4),R={href:"https://docs.solana.com/developing/programming-model/transactions",target:"_blank",rel:"noopener noreferrer"},L=n("T\xE0i li\u1EC7u ch\xEDnh th\u1ED1ng"),F={href:"https://solana.wiki/docs/solidity-guide/transactions/#solana-transaction-structure",target:"_blank",rel:"noopener noreferrer"},E=n("Transaction Structure"),I={href:"https://jstarry.notion.site/Transaction-Fees-f09387e6a8d84287aa16a34ecb58e239",target:"_blank",rel:"noopener noreferrer"},j=n("Transaction Fees by Justin Starry"),H={href:"https://2501babe.github.io/posts/solana101.html",target:"_blank",rel:"noopener noreferrer"},J=n("An Introduction to Solana by Hana"),K={href:"https://jito-labs.medium.com/solana-validator-101-transaction-processing-90bcdc271143",target:"_blank",rel:"noopener noreferrer"},D=n("Transaction Processing by Jito Labs"),z={href:"https://medium.com/@asmiller1989/solana-transactions-in-depth-1f7f7fe06ac2",target:"_blank",rel:"noopener noreferrer"},G=n("Solana Transaction in Depth by Alex Miller");function O(Q,U){const a=i("RouterLink"),o=i("ExternalLinkIcon");return r(),s(d,null,[u,t("p",null,[_,c(a,{to:"/vi/core-concepts/programs.html"},{default:l(()=>[p]),_:1}),m,t("a",b,[k,c(o)]),T]),v,t("p",null,[f,t("a",y,[x,c(o)]),A]),S,M,t("ul",null,[t("li",null,[t("a",B,[N,c(o)]),P]),t("li",null,[t("a",V,[w,c(o)]),C])]),q,t("ul",null,[t("li",null,[t("a",R,[L,c(o)])]),t("li",null,[t("a",F,[E,c(o)])]),t("li",null,[t("a",I,[j,c(o)])]),t("li",null,[t("a",H,[J,c(o)])]),t("li",null,[t("a",K,[D,c(o)])]),t("li",null,[t("a",z,[G,c(o)])])])],64)}var X=e(g,[["render",O]]);export{X as default}; diff --git a/docs/.vuepress/dist/assets/transactions.html.e89c78f1.js b/docs/.vuepress/dist/assets/transactions.html.f3b1874c.js similarity index 99% rename from docs/.vuepress/dist/assets/transactions.html.e89c78f1.js rename to docs/.vuepress/dist/assets/transactions.html.f3b1874c.js index f3bdac8a3..99f2ba9da 100644 --- a/docs/.vuepress/dist/assets/transactions.html.e89c78f1.js +++ b/docs/.vuepress/dist/assets/transactions.html.f3b1874c.js @@ -1 +1 @@ -import{_ as o,r as t,o as l,c as u,a,b as e,w as d,F as k,d as n,e as s}from"./app.cfdf84e7.js";const m={},c=a("h1",{id:"transaksi",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#transaksi","aria-hidden":"true"},"#"),n(" Transaksi")],-1),h=n("Klien dapat menjalankan "),p=n("programs"),g=n(" dengan mengirimkan sebuah transaksi ke cluster. Sebuah transaksi tunggal dapat berisikan berbagai macam instruksi terhadap masing-masing program. Ketika sebuah transaksi dikirimkan, Solana "),_={href:"https://docs.solana.com/developing/programming-model/runtime",target:"_blank",rel:"noopener noreferrer"},b=n("Runtime"),y=n(" akan menjalankan setiap instruksi sesuai dengan urutan dan secara "),f=a("code",null,"atomic",-1),S=n(". Jika ada instruksi yang gagal, maka keseluruhan transaksi akan gagal."),v=s('

    Fakta-Fakta

    Fakta

    • Dalam Solana, instruksi adalah unit operasional yang paling dasar
    • Setiap instruksi mengandung:
      • program_id program yang ingin dijalankan
      • Kumpulan semua accounts yang ingin di baca atau di tulis
      • Sebuah instruction_data byte array yang spesifik terhadap suatu program tertentu
    • Beberapa instruksi dapat disatukan dalam sebuah transaksi
    • Setiap transaksi mengandung:
      • Kumpulan semua accounts yang ingin di baca atau di tulis
      • Satu atau lebih instructions
      • blockhash terkini
      • Satu atau lebih signatures
    • Instruksi secara berurutan dan bersifatatomic
    • Jika ada instruksi yang gagal, maka seluruh transaksi akan gagal.
    • Transaksi dibatasi sampai dengan 1232 bytes

    Lebih Dalam

    Solana Runtime membutuhkan instruksi dan transaksi untuk menentukan kumpulan akun yang akan dibaca dan ditulis. Dengan mempersiapkan akun terlebih dahulu, runtime dapat menjalankan eksekusinya terhadap semua transaksi bersamaan.

    Ketika sebutah transaksi dikirimkan ke cluster, runtime akan memproses setiap instruksi sesuai urutan dan atomic. Program yang menerima instruksi akan menginterpretasi kumpulan data dan menjalankannya di akun yang ditentukan. Program akan berhasil menjalankan instruksi atau gagal karena adanya error. Jika ada ditemukannya error, maka keseluruhan transaksi akan gagal.

    Setiap transaksi yang bertujuan untuk meng-debet suatu akun atau mengubah data, memerlukan verifikasi dari si pemilik akun. Setiap akun yang akan dimodifikasi akan ditandai dengan writable. Sebuah akun dapat dikreditkan tanpa persetujuan pemiliknya asalkan biaya transaksi dibayarkan menutupi biaya yang dibutuhkan untuk rent dan biaya transaksi itu sendiri.

    ',6),j=n("Sebelum pengiriman, semua transaksi harus mengacu kepada sebuah "),x={href:"https://docs.solana.com/developing/programming-model/transactions#recent-blockhash",target:"_blank",rel:"noopener noreferrer"},w=n("blockhash terbaru"),B=n(". "),T=a("em",null,"Blockhash",-1),F=n(" digunakan untuk mencegah duplikasi dan menghapus transaksi gagal. Batas waktu sebuah "),J=a("em",null,"blockhash",-1),D=n(" transaksi adalah sekitar 1 menit 19 detik atau 150 blocks saat ini ditulis."),K=a("h3",{id:"biaya",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#biaya","aria-hidden":"true"},"#"),n(" Biaya")],-1),L=a("p",null,"Jaringan Solana mengambil dua jenis biaya:",-1),P={href:"https://docs.solana.com/transaction_fees",target:"_blank",rel:"noopener noreferrer"},I=a("em",null,"Biaya Transaksi",-1),N=n(" untuk menjalankan transaksi (atau biasa disebut \u201Cgas fees\u201D)"),R={href:"https://docs.solana.com/developing/programming-model/accounts#rent",target:"_blank",rel:"noopener noreferrer"},V=a("em",null,"Biaya Sewa",-1),A=n(" untuk menyimpan data on-chain"),E=s('

    Di Solana, Biaya Transaksi itu determistik: tidak ada konsep dimana pengguna dapat membayar lebih demi meningkatkan kesempatan untuk dimasukkan ke block berikutnya. Pada waktu penulisan, biaya transaksi hanya ditentukan oleh jumlah verifikasi yang dibutuhkan (seperti lamports_per_signature), bukan dari jumlah sumber daya yang digunakan. Hal ini dikarenakan adanya batas maksimal 1232 bytes untuk semua transaksi.

    Semua transaksi membutuhkan setidaknya sebuah akun writable untuk memverifikasi transaksi. Ketika transaksi sudah dikirim, akun writable pemverifikasi yang di-serialisasi pertama harus membayar biaya transaksi. Akun ini akan membayar biaya dari transaksi tanpa mempedulikan transaksinya berhasil atau gagal. Jika pihak pembayar tidak memiliki saldo yang cukup, maka transaksi akan dihentikan.

    Pada waktu penulisan, 50% dari semua transaction fee dibayarkan kepada validator yang membuat block dan sisa setengahnya hangus. Struktur ini berguna untuk mendorong validator memproses transaksi sebanyak mungkin.

    Sumber lainnya

    ',4),C={href:"https://docs.solana.com/developing/programming-model/transactions",target:"_blank",rel:"noopener noreferrer"},H=n("Official Documentation"),M={href:"https://solana.wiki/docs/solidity-guide/transactions/#solana-transaction-structure",target:"_blank",rel:"noopener noreferrer"},O=n("Transaction Structure"),q={href:"https://jstarry.notion.site/Transaction-Fees-f09387e6a8d84287aa16a34ecb58e239",target:"_blank",rel:"noopener noreferrer"},z=n("Transaction Fees by Justin Starry"),G={href:"https://2501babe.github.io/posts/solana101.html",target:"_blank",rel:"noopener noreferrer"},Q=n("An Introduction to Solana by Hana"),U={href:"https://jito-labs.medium.com/solana-validator-101-transaction-processing-90bcdc271143",target:"_blank",rel:"noopener noreferrer"},W=n("Transaction Processing by Jito Labs"),X={href:"https://medium.com/@asmiller1989/solana-transactions-in-depth-1f7f7fe06ac2",target:"_blank",rel:"noopener noreferrer"},Y=n("Solana Transaction in Depth by Alex Miller");function Z($,aa){const r=t("RouterLink"),i=t("ExternalLinkIcon");return l(),u(k,null,[c,a("p",null,[h,e(r,{to:"/id/core-concepts/programs.html"},{default:d(()=>[p]),_:1}),g,a("a",_,[b,e(i)]),y,f,S]),v,a("p",null,[j,a("a",x,[w,e(i)]),B,T,F,J,D]),K,L,a("ul",null,[a("li",null,[a("a",P,[I,e(i)]),N]),a("li",null,[a("a",R,[V,e(i)]),A])]),E,a("ul",null,[a("li",null,[a("a",C,[H,e(i)])]),a("li",null,[a("a",M,[O,e(i)])]),a("li",null,[a("a",q,[z,e(i)])]),a("li",null,[a("a",G,[Q,e(i)])]),a("li",null,[a("a",U,[W,e(i)])]),a("li",null,[a("a",X,[Y,e(i)])])])],64)}var ea=o(m,[["render",Z]]);export{ea as default}; +import{_ as o,r as t,o as l,c as u,a,b as e,w as d,F as k,d as n,e as s}from"./app.2fbb9e96.js";const m={},c=a("h1",{id:"transaksi",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#transaksi","aria-hidden":"true"},"#"),n(" Transaksi")],-1),h=n("Klien dapat menjalankan "),p=n("programs"),g=n(" dengan mengirimkan sebuah transaksi ke cluster. Sebuah transaksi tunggal dapat berisikan berbagai macam instruksi terhadap masing-masing program. Ketika sebuah transaksi dikirimkan, Solana "),_={href:"https://docs.solana.com/developing/programming-model/runtime",target:"_blank",rel:"noopener noreferrer"},b=n("Runtime"),y=n(" akan menjalankan setiap instruksi sesuai dengan urutan dan secara "),f=a("code",null,"atomic",-1),S=n(". Jika ada instruksi yang gagal, maka keseluruhan transaksi akan gagal."),v=s('

    Fakta-Fakta

    Fakta

    • Dalam Solana, instruksi adalah unit operasional yang paling dasar
    • Setiap instruksi mengandung:
      • program_id program yang ingin dijalankan
      • Kumpulan semua accounts yang ingin di baca atau di tulis
      • Sebuah instruction_data byte array yang spesifik terhadap suatu program tertentu
    • Beberapa instruksi dapat disatukan dalam sebuah transaksi
    • Setiap transaksi mengandung:
      • Kumpulan semua accounts yang ingin di baca atau di tulis
      • Satu atau lebih instructions
      • blockhash terkini
      • Satu atau lebih signatures
    • Instruksi secara berurutan dan bersifatatomic
    • Jika ada instruksi yang gagal, maka seluruh transaksi akan gagal.
    • Transaksi dibatasi sampai dengan 1232 bytes

    Lebih Dalam

    Solana Runtime membutuhkan instruksi dan transaksi untuk menentukan kumpulan akun yang akan dibaca dan ditulis. Dengan mempersiapkan akun terlebih dahulu, runtime dapat menjalankan eksekusinya terhadap semua transaksi bersamaan.

    Ketika sebutah transaksi dikirimkan ke cluster, runtime akan memproses setiap instruksi sesuai urutan dan atomic. Program yang menerima instruksi akan menginterpretasi kumpulan data dan menjalankannya di akun yang ditentukan. Program akan berhasil menjalankan instruksi atau gagal karena adanya error. Jika ada ditemukannya error, maka keseluruhan transaksi akan gagal.

    Setiap transaksi yang bertujuan untuk meng-debet suatu akun atau mengubah data, memerlukan verifikasi dari si pemilik akun. Setiap akun yang akan dimodifikasi akan ditandai dengan writable. Sebuah akun dapat dikreditkan tanpa persetujuan pemiliknya asalkan biaya transaksi dibayarkan menutupi biaya yang dibutuhkan untuk rent dan biaya transaksi itu sendiri.

    ',6),j=n("Sebelum pengiriman, semua transaksi harus mengacu kepada sebuah "),x={href:"https://docs.solana.com/developing/programming-model/transactions#recent-blockhash",target:"_blank",rel:"noopener noreferrer"},w=n("blockhash terbaru"),B=n(". "),T=a("em",null,"Blockhash",-1),F=n(" digunakan untuk mencegah duplikasi dan menghapus transaksi gagal. Batas waktu sebuah "),J=a("em",null,"blockhash",-1),D=n(" transaksi adalah sekitar 1 menit 19 detik atau 150 blocks saat ini ditulis."),K=a("h3",{id:"biaya",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#biaya","aria-hidden":"true"},"#"),n(" Biaya")],-1),L=a("p",null,"Jaringan Solana mengambil dua jenis biaya:",-1),P={href:"https://docs.solana.com/transaction_fees",target:"_blank",rel:"noopener noreferrer"},I=a("em",null,"Biaya Transaksi",-1),N=n(" untuk menjalankan transaksi (atau biasa disebut \u201Cgas fees\u201D)"),R={href:"https://docs.solana.com/developing/programming-model/accounts#rent",target:"_blank",rel:"noopener noreferrer"},V=a("em",null,"Biaya Sewa",-1),A=n(" untuk menyimpan data on-chain"),E=s('

    Di Solana, Biaya Transaksi itu determistik: tidak ada konsep dimana pengguna dapat membayar lebih demi meningkatkan kesempatan untuk dimasukkan ke block berikutnya. Pada waktu penulisan, biaya transaksi hanya ditentukan oleh jumlah verifikasi yang dibutuhkan (seperti lamports_per_signature), bukan dari jumlah sumber daya yang digunakan. Hal ini dikarenakan adanya batas maksimal 1232 bytes untuk semua transaksi.

    Semua transaksi membutuhkan setidaknya sebuah akun writable untuk memverifikasi transaksi. Ketika transaksi sudah dikirim, akun writable pemverifikasi yang di-serialisasi pertama harus membayar biaya transaksi. Akun ini akan membayar biaya dari transaksi tanpa mempedulikan transaksinya berhasil atau gagal. Jika pihak pembayar tidak memiliki saldo yang cukup, maka transaksi akan dihentikan.

    Pada waktu penulisan, 50% dari semua transaction fee dibayarkan kepada validator yang membuat block dan sisa setengahnya hangus. Struktur ini berguna untuk mendorong validator memproses transaksi sebanyak mungkin.

    Sumber lainnya

    ',4),C={href:"https://docs.solana.com/developing/programming-model/transactions",target:"_blank",rel:"noopener noreferrer"},H=n("Official Documentation"),M={href:"https://solana.wiki/docs/solidity-guide/transactions/#solana-transaction-structure",target:"_blank",rel:"noopener noreferrer"},O=n("Transaction Structure"),q={href:"https://jstarry.notion.site/Transaction-Fees-f09387e6a8d84287aa16a34ecb58e239",target:"_blank",rel:"noopener noreferrer"},z=n("Transaction Fees by Justin Starry"),G={href:"https://2501babe.github.io/posts/solana101.html",target:"_blank",rel:"noopener noreferrer"},Q=n("An Introduction to Solana by Hana"),U={href:"https://jito-labs.medium.com/solana-validator-101-transaction-processing-90bcdc271143",target:"_blank",rel:"noopener noreferrer"},W=n("Transaction Processing by Jito Labs"),X={href:"https://medium.com/@asmiller1989/solana-transactions-in-depth-1f7f7fe06ac2",target:"_blank",rel:"noopener noreferrer"},Y=n("Solana Transaction in Depth by Alex Miller");function Z($,aa){const r=t("RouterLink"),i=t("ExternalLinkIcon");return l(),u(k,null,[c,a("p",null,[h,e(r,{to:"/id/core-concepts/programs.html"},{default:d(()=>[p]),_:1}),g,a("a",_,[b,e(i)]),y,f,S]),v,a("p",null,[j,a("a",x,[w,e(i)]),B,T,F,J,D]),K,L,a("ul",null,[a("li",null,[a("a",P,[I,e(i)]),N]),a("li",null,[a("a",R,[V,e(i)]),A])]),E,a("ul",null,[a("li",null,[a("a",C,[H,e(i)])]),a("li",null,[a("a",M,[O,e(i)])]),a("li",null,[a("a",q,[z,e(i)])]),a("li",null,[a("a",G,[Q,e(i)])]),a("li",null,[a("a",U,[W,e(i)])]),a("li",null,[a("a",X,[Y,e(i)])])])],64)}var ea=o(m,[["render",Z]]);export{ea as default}; diff --git a/docs/.vuepress/dist/assets/versioned-transactions.html.66b49b02.js b/docs/.vuepress/dist/assets/versioned-transactions.html.66b49b02.js new file mode 100644 index 000000000..31e0131e4 --- /dev/null +++ b/docs/.vuepress/dist/assets/versioned-transactions.html.66b49b02.js @@ -0,0 +1 @@ +const e={key:"v-0074d650",path:"/th/guides/versioned-transactions.html",title:"Versioned Transactions",lang:"th-TH",frontmatter:{title:"Versioned Transactions",head:[["meta",{name:"title",content:"Solana Cookbook | Versioned Transactions"}],["meta",{name:"og:title",content:"Solana Cookbook | Versioned Transactions"}],["meta",{name:"description",content:"Transaction format \u0E41\u0E1A\u0E1A\u0E43\u0E2B\u0E21\u0E48\u0E1A\u0E19 Solana."}],["meta",{name:"og:description",content:"Transaction format \u0E41\u0E1A\u0E1A\u0E43\u0E2B\u0E21\u0E48\u0E1A\u0E19 Solana."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"Facts (\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49)",slug:"facts-\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49",children:[]},{level:2,title:"Legacy Transaction",slug:"legacy-transaction",children:[]},{level:2,title:"Legacy Message",slug:"legacy-message",children:[{level:3,title:"Header",slug:"header",children:[]},{level:3,title:"Compact-array \u0E02\u0E2D\u0E07 account addresses",slug:"compact-array-\u0E02\u0E2D\u0E07-account-addresses",children:[]},{level:3,title:"Compact array \u0E02\u0E2D\u0E07 instructions",slug:"compact-array-\u0E02\u0E2D\u0E07-instructions",children:[]}]},{level:2,title:"\u0E02\u0E49\u0E2D\u0E08\u0E33\u0E01\u0E31\u0E14\u0E02\u0E2D\u0E07 Legacy Transactions",slug:"\u0E02\u0E49\u0E2D\u0E08\u0E4D\u0E32\u0E01\u0E31\u0E14\u0E02\u0E2D\u0E07-legacy-transactions",children:[]},{level:2,title:"Address Lookup Tables (LUT)",slug:"address-lookup-tables-lut",children:[]},{level:2,title:"Versioned Transactions: TransactionV0",slug:"versioned-transactions-transactionv0",children:[]},{level:2,title:"MessageV0",slug:"messagev0",children:[{level:3,title:"Compact array \u0E02\u0E2D\u0E07 address table lookups",slug:"compact-array-\u0E02\u0E2D\u0E07-address-table-lookups",children:[]},{level:3,title:"Compact array \u0E02\u0E2D\u0E07 instructions",slug:"compact-array-\u0E02\u0E2D\u0E07-instructions-1",children:[]}]},{level:2,title:"RPC Changes",slug:"rpc-changes",children:[]},{level:2,title:"\u0E41\u0E2B\u0E25\u0E48\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19\u0E46",slug:"\u0E41\u0E2B\u0E25\u0E48\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19\u0E46",children:[]},{level:2,title:"\u0E2D\u0E49\u0E32\u0E07\u0E2D\u0E34\u0E07",slug:"\u0E2D\u0E49\u0E32\u0E07\u0E2D\u0E34\u0E07",children:[]}],git:{updatedTime:1676167053e3},filePathRelative:"th/guides/versioned-transactions.md"};export{e as data}; diff --git a/docs/.vuepress/dist/assets/versioned-transactions.html.c555dcb8.js b/docs/.vuepress/dist/assets/versioned-transactions.html.7f9e7fba.js similarity index 99% rename from docs/.vuepress/dist/assets/versioned-transactions.html.c555dcb8.js rename to docs/.vuepress/dist/assets/versioned-transactions.html.7f9e7fba.js index 5e2350527..276156b06 100644 --- a/docs/.vuepress/dist/assets/versioned-transactions.html.c555dcb8.js +++ b/docs/.vuepress/dist/assets/versioned-transactions.html.7f9e7fba.js @@ -1,4 +1,4 @@ -import{_ as o,r,o as i,c,a as e,b as n,F as l,e as t,d as a}from"./app.cfdf84e7.js";var d="/assets/tx_format.1023848a.png",p="/assets/compact_array_format.6984243f.png",u="/assets/legacy_message.09ab30b7.png",h="/assets/message_header.8eb7d589.png",m="/assets/compat_array_of_account_addresses.7792e5c7.png",g="/assets/compact_array_of_ixs.6281d70b.png",b="/assets/issues_with_legacy_txs.5766db66.png",f="/assets/luts.96a8a310.png",y="/assets/lut_format.060d6be2.png",_="/assets/messagev0.c089b240.png",k="/assets/compact_array_of_luts.9175e491.png",w="/assets/new_compact_array_of_ixs.54090dc5.png";const v={},T=t('

    Versioned Transactions

    Solana recently released Versioned Transactions. The proposed changes are as follows:

    1. Introduce a new program which manages on-chain address lookup tables

    2. Add a new transaction format which can make use of on-chain address lookup tables

    Facts

    Fact Sheet

    • Legacy transactions have a major issue: Maximum allowed size of 1232 bytes, and hence the number of accounts that can fit in an atomic transaction: 35 addresses.
    • Address Lookup Tables (LUTs): Once accounts are stored in this table, the address of the table can be referenced in a transaction message using 1-byte u8 indices.
    • solana/web3.js's createLookupTable() can be used to construct a new lookup table, as well as determine its address.
    • Once an LUT is created, it can be extended, ie., accounts can be appended to the table.
    • Versioned Transactions: The structure of legacy transaction needs to be modified to incorporate LUTs
    • Before versioning was introduced, txs left an unused upper bit in the first byte of their headers, which can be used to explicitly declare the version of txs

    We'll talk more about the above introduced changes and what they mean for developers. To understand the changes better, however, we need to first understand the anatomy of a regular (or legacy) transaction.

    Legacy Transaction

    ',7),x=a("The Solana network uses a maximum transactional unit (MTU) size of 1280 bytes, adherent to the "),q={href:"https://en.wikipedia.org/wiki/IPv6_packet",target:"_blank",rel:"noopener noreferrer"},A=a("IPv6 MTU"),L=a(" size constraints to ensure speed and reliability. This leaves "),V=e("strong",null,"1232 bytes",-1),C=a(" for packet data like serialised transactions."),S=e("p",null,"A transaction is comprised of:",-1),U=a("A compact array of signatures, where each signature is a 64 byte "),I={href:"https://ed25519.cr.yp.to/",target:"_blank",rel:"noopener noreferrer"},M=a("ed25519"),j=a("."),W=e("li",null,"A (legacy) message",-1),B=e("p",null,[e("img",{src:d,alt:"Transaction Format"})],-1),H={class:"custom-container tip"},P=e("p",{class:"custom-container-title"},"Compact-Array format",-1),R=e("p",null,"A compact array is an array serialised to have the following components:",-1),F=a("An array length in a multi-byte encoding called "),N={href:"https://beta.docs.solana.com/developing/programming-model/transactions#compact-u16-format",target:"_blank",rel:"noopener noreferrer"},E=a("Compact-u16"),z=e("li",null,"Followed by each array item",-1),O=e("p",null,[e("img",{src:p,alt:"Compact array format"})],-1),D=t('

    Legacy Message

    A Legacy Message has the following components:

    1. A header
    2. A compact-array of account addresses, where each account address takes 32 bytes
    3. A recent blockhash
    • a 32-byte SHA-256 hash used to indicate when ledger was last observed. If a blockhash is too old, validators reject it.
    1. A compact-array of Instructions

    Legacy Message

    The message header is 3 bytes in length and contains 3 u8 integers:

    1. The number of required signatures: the Solana runtime verifies this number with the length of the compact array of signatures in the transaction.
    2. The number of read-only account addresses that require signatures.
    3. The number of read-only account addresses that do not require signatures.

    Message Header

    Compact-array of account addresses

    This compact array starts with a compact-u16 encoding of the number of account addresses, followed by:

    1. Account addresses that require signatures: The addresses that request read and write access are listed first, followed by the ones that request for read-only access
    2. Account addresses that do not require signatures: Same as above, the addresses that request read and write access are listed first, followed by the ones that request for read-only access

    Compact array of account addresses

    Compact array of instructions

    Much like the array of account addresses, this compact array starts with a compact-u16 encoding of the number of instructions, followed by an array of instructions. Each instruction in the array has the following components:

    1. Program ID: identifies an on-chain program that will process the instruction. This is represented as a u8 index to an address in the compact array of account addresses inside the message.
    2. Compact array of account address indexes: u8 indexes to a subset of account addresses in the compact array of account addresses, that require signatures.
    3. Compact array of opaque u8 data: a general purpose byte array that is specific to the program ID mentioned before. This array of data specifies any operations that the program should perform and any additional information that the accounts might not contain.

    Compact array of Instructions

    Issues with Legacy Transactions

    What is the issue with the above Transaction model?

    The max size of a transaction, and hence the number of accounts that can fit in a single atomic transaction.

    As discussed earlier, the maximum allowed size of a transaction is 1232 bytes. The size of an account address is 32 bytes. Thus, a transaction can at the very best store 35 accounts, taking into account some space for headers, signatures and other metadata.

    Issue with legacy transactions

    This is problematic as there are several cases where developers need to include 100s of signature-free accounts in a single transaction. This is currently not possible with the legacy transaction model. The solution currently being used is to temporarily store state on-chain and consume it later in transactions. This workaround does not work when multiple programs need to be composed in a single transaction. Each program requires multiple accounts as input and hence we fall into the same problem as before.

    This is where Address Lookup Tables (LUT) are introduced.

    Address Lookup Tables (LUT)

    The idea behind Address Lookup Tables is to store account addresses in a table-like (array) data structure on-chain. Once accounts are stored in this table, the address of the table can be referenced in a transaction message. To point to an individual account within the table, a 1-byte u8 index is needed.

    LUTs

    This opens up space as addresses need not be stored inside the transaction message anymore. They only need to be referenced in the form of an index within the array like table. This leads to a possibility of referencing 2^8=256 accounts, as accounts are referenced using a u8 index.

    LUTs need to be rent-exempt when initialised or whenever a new address is added to the table. Addresses can be added to this table either by an on-chain buffer, or by directly appending them to the table through the Extension instruction. Furthermore, LUTs can store associated metadata followed by a compact-array of accounts. Below you can see the structure of a typical Address Lookup Table.

    LUT Format

    One important pitfall of LUTs is that since address lookups require extra overhead during transaction processing, they usually incur higher costs for a transaction.

    Versioned Transactions: TransactionV0

    The structure of legacy transaction needs to be modified to incorporate address table lookups. These changes should not break transaction processing on Solana, nor should they indicate any format changes to the invoked programs.

    To ensure the above, it is important to explicitly mention the transaction type: legacy or versioned. How do we include this information in a transaction?

    Before versioning was introduced, transactions left an unused upper bit in the first byte of their message headers: num_required_signatures. We can now use this bit to explicitly declare the version of our transactions.

    pub enum VersionedMessage {
    +import{_ as o,r,o as i,c,a as e,b as n,F as l,e as t,d as a}from"./app.2fbb9e96.js";var d="/assets/tx_format.1023848a.png",p="/assets/compact_array_format.6984243f.png",u="/assets/legacy_message.09ab30b7.png",h="/assets/message_header.8eb7d589.png",m="/assets/compat_array_of_account_addresses.7792e5c7.png",g="/assets/compact_array_of_ixs.6281d70b.png",b="/assets/issues_with_legacy_txs.5766db66.png",f="/assets/luts.96a8a310.png",y="/assets/lut_format.060d6be2.png",_="/assets/messagev0.c089b240.png",k="/assets/compact_array_of_luts.9175e491.png",w="/assets/new_compact_array_of_ixs.54090dc5.png";const v={},T=t('

    Versioned Transactions

    Solana recently released Versioned Transactions. The proposed changes are as follows:

    1. Introduce a new program which manages on-chain address lookup tables

    2. Add a new transaction format which can make use of on-chain address lookup tables

    Facts

    Fact Sheet

    • Legacy transactions have a major issue: Maximum allowed size of 1232 bytes, and hence the number of accounts that can fit in an atomic transaction: 35 addresses.
    • Address Lookup Tables (LUTs): Once accounts are stored in this table, the address of the table can be referenced in a transaction message using 1-byte u8 indices.
    • solana/web3.js's createLookupTable() can be used to construct a new lookup table, as well as determine its address.
    • Once an LUT is created, it can be extended, ie., accounts can be appended to the table.
    • Versioned Transactions: The structure of legacy transaction needs to be modified to incorporate LUTs
    • Before versioning was introduced, txs left an unused upper bit in the first byte of their headers, which can be used to explicitly declare the version of txs

    We'll talk more about the above introduced changes and what they mean for developers. To understand the changes better, however, we need to first understand the anatomy of a regular (or legacy) transaction.

    Legacy Transaction

    ',7),x=a("The Solana network uses a maximum transactional unit (MTU) size of 1280 bytes, adherent to the "),q={href:"https://en.wikipedia.org/wiki/IPv6_packet",target:"_blank",rel:"noopener noreferrer"},A=a("IPv6 MTU"),L=a(" size constraints to ensure speed and reliability. This leaves "),V=e("strong",null,"1232 bytes",-1),C=a(" for packet data like serialised transactions."),S=e("p",null,"A transaction is comprised of:",-1),U=a("A compact array of signatures, where each signature is a 64 byte "),I={href:"https://ed25519.cr.yp.to/",target:"_blank",rel:"noopener noreferrer"},M=a("ed25519"),j=a("."),W=e("li",null,"A (legacy) message",-1),B=e("p",null,[e("img",{src:d,alt:"Transaction Format"})],-1),H={class:"custom-container tip"},P=e("p",{class:"custom-container-title"},"Compact-Array format",-1),R=e("p",null,"A compact array is an array serialised to have the following components:",-1),F=a("An array length in a multi-byte encoding called "),N={href:"https://beta.docs.solana.com/developing/programming-model/transactions#compact-u16-format",target:"_blank",rel:"noopener noreferrer"},E=a("Compact-u16"),z=e("li",null,"Followed by each array item",-1),O=e("p",null,[e("img",{src:p,alt:"Compact array format"})],-1),D=t('

    Legacy Message

    A Legacy Message has the following components:

    1. A header
    2. A compact-array of account addresses, where each account address takes 32 bytes
    3. A recent blockhash
    • a 32-byte SHA-256 hash used to indicate when ledger was last observed. If a blockhash is too old, validators reject it.
    1. A compact-array of Instructions

    Legacy Message

    The message header is 3 bytes in length and contains 3 u8 integers:

    1. The number of required signatures: the Solana runtime verifies this number with the length of the compact array of signatures in the transaction.
    2. The number of read-only account addresses that require signatures.
    3. The number of read-only account addresses that do not require signatures.

    Message Header

    Compact-array of account addresses

    This compact array starts with a compact-u16 encoding of the number of account addresses, followed by:

    1. Account addresses that require signatures: The addresses that request read and write access are listed first, followed by the ones that request for read-only access
    2. Account addresses that do not require signatures: Same as above, the addresses that request read and write access are listed first, followed by the ones that request for read-only access

    Compact array of account addresses

    Compact array of instructions

    Much like the array of account addresses, this compact array starts with a compact-u16 encoding of the number of instructions, followed by an array of instructions. Each instruction in the array has the following components:

    1. Program ID: identifies an on-chain program that will process the instruction. This is represented as a u8 index to an address in the compact array of account addresses inside the message.
    2. Compact array of account address indexes: u8 indexes to a subset of account addresses in the compact array of account addresses, that require signatures.
    3. Compact array of opaque u8 data: a general purpose byte array that is specific to the program ID mentioned before. This array of data specifies any operations that the program should perform and any additional information that the accounts might not contain.

    Compact array of Instructions

    Issues with Legacy Transactions

    What is the issue with the above Transaction model?

    The max size of a transaction, and hence the number of accounts that can fit in a single atomic transaction.

    As discussed earlier, the maximum allowed size of a transaction is 1232 bytes. The size of an account address is 32 bytes. Thus, a transaction can at the very best store 35 accounts, taking into account some space for headers, signatures and other metadata.

    Issue with legacy transactions

    This is problematic as there are several cases where developers need to include 100s of signature-free accounts in a single transaction. This is currently not possible with the legacy transaction model. The solution currently being used is to temporarily store state on-chain and consume it later in transactions. This workaround does not work when multiple programs need to be composed in a single transaction. Each program requires multiple accounts as input and hence we fall into the same problem as before.

    This is where Address Lookup Tables (LUT) are introduced.

    Address Lookup Tables (LUT)

    The idea behind Address Lookup Tables is to store account addresses in a table-like (array) data structure on-chain. Once accounts are stored in this table, the address of the table can be referenced in a transaction message. To point to an individual account within the table, a 1-byte u8 index is needed.

    LUTs

    This opens up space as addresses need not be stored inside the transaction message anymore. They only need to be referenced in the form of an index within the array like table. This leads to a possibility of referencing 2^8=256 accounts, as accounts are referenced using a u8 index.

    LUTs need to be rent-exempt when initialised or whenever a new address is added to the table. Addresses can be added to this table either by an on-chain buffer, or by directly appending them to the table through the Extension instruction. Furthermore, LUTs can store associated metadata followed by a compact-array of accounts. Below you can see the structure of a typical Address Lookup Table.

    LUT Format

    One important pitfall of LUTs is that since address lookups require extra overhead during transaction processing, they usually incur higher costs for a transaction.

    Versioned Transactions: TransactionV0

    The structure of legacy transaction needs to be modified to incorporate address table lookups. These changes should not break transaction processing on Solana, nor should they indicate any format changes to the invoked programs.

    To ensure the above, it is important to explicitly mention the transaction type: legacy or versioned. How do we include this information in a transaction?

    Before versioning was introduced, transactions left an unused upper bit in the first byte of their message headers: num_required_signatures. We can now use this bit to explicitly declare the version of our transactions.

    pub enum VersionedMessage {
         Legacy(Message),
         V0(v0::Message),
     }
    diff --git a/docs/.vuepress/dist/assets/versioned-transactions.html.a6b7138b.js b/docs/.vuepress/dist/assets/versioned-transactions.html.a6b7138b.js
    new file mode 100644
    index 000000000..74e52a7d8
    --- /dev/null
    +++ b/docs/.vuepress/dist/assets/versioned-transactions.html.a6b7138b.js
    @@ -0,0 +1,28 @@
    +import{_ as o,r,o as i,c as l,a as e,b as a,F as c,e as t,d as s}from"./app.2fbb9e96.js";var u="/assets/tx_format.1023848a.png",d="/assets/compact_array_format.6984243f.png",p="/assets/legacy_message.09ab30b7.png",m="/assets/message_header.8eb7d589.png",b="/assets/compat_array_of_account_addresses.7792e5c7.png",h="/assets/compact_array_of_ixs.6281d70b.png",g="/assets/issues_with_legacy_txs.5766db66.png",_="/assets/luts.96a8a310.png",v="/assets/lut_format.060d6be2.png",f="/assets/messagev0.c089b240.png",k="/assets/compact_array_of_luts.9175e491.png",q="/assets/new_compact_array_of_ixs.54090dc5.png";const x={},T=t('

    Transactions Versionn\xE9es

    Solana a r\xE9cemment sorti les Transactions Versionn\xE9es. Les changements propos\xE9s sont les suivants :

    1. Introduction d'un nouveau programme qui g\xE8re les tables de consultation d'adresses sur la cha\xEEne

    2. Ajout d'un nouveau format de transaction qui peut utiliser les tables de consultation d'adresses sur la cha\xEEne

    Faits

    Fiche d'Information

    • Les transactions h\xE9rit\xE9es ont un probl\xE8me majeur : La taille maximale autoris\xE9e est de 1232 octets ce qui fait que le nombre de comptes qui peuvent tenir dans une transaction atomique est de maximum 35 adresses.
    • Tables de Consultation d'Adresses (Address Lookup Tables, LUTs): Une fois que les comptes sont stock\xE9s dans cette table, l'adresse de la table peut \xEAtre r\xE9f\xE9renc\xE9e dans un message de transaction utilisant des indices u8 de 1 octet.
    • createLookupTable() de solana/web3.js peut \xEAtre utilis\xE9 pour construire une nouvelle table de consultation, ainsi que pour d\xE9terminer son adresse.
    • Une fois qu'une Table de Consultation d'Adresses est cr\xE9\xE9e, elle peut \xEAtre \xE9tendue, c'est-\xE0-dire que des comptes peuvent \xEAtre ajout\xE9s \xE0 la table.
    • Transactions Versionn\xE9es : La structure des transactions h\xE9rit\xE9es doit \xEAtre modifi\xE9e pour int\xE9grer les Tables de Consultation d'Adresses
    • Avant l'introduction du versionnage, les transactions avaient un bit sup\xE9rieur inutilis\xE9 dans le premier octet de leur en-t\xEAte. Celui-ci peut \xEAtre utilis\xE9 pour d\xE9clarer explicitement la version des transactions.

    Nous parlerons plus en d\xE9tail des changements introduits ci-dessus et de ce qu'ils signifient pour les d\xE9veloppeurs. Toutefois, pour mieux comprendre les changements, nous devons d'abord comprendre l'anatomie d'une transaction classique (ou h\xE9rit\xE9e).

    Transaction H\xE9rit\xE9e

    ',7),C=s("Le r\xE9seau Solana utilise une taille d'unit\xE9 transactionnelle maximale (MTU) de 1280 octets, conform\xE9ment aux contraintes de taille de l'"),L={href:"https://en.wikipedia.org/wiki/IPv6_packet",target:"_blank",rel:"noopener noreferrer"},y=s("IPv6 MTU"),V=s(" afin de garantir la vitesse et la fiabilit\xE9. Cela laisse "),w=e("strong",null,"1232 octets",-1),A=s(" pour les paquets de donn\xE9es comme les transactions s\xE9rialis\xE9es."),U=e("p",null,"Une transaction est compos\xE9e de :",-1),j=s("Un tableau compact de signatures, o\xF9 chaque signature est un "),S={href:"https://ed25519.cr.yp.to/",target:"_blank",rel:"noopener noreferrer"},I=s("ed25519"),N=s(" de 64 octets."),M=e("li",null,"Un message (h\xE9rit\xE9)",-1),P=e("p",null,[e("img",{src:u,alt:"Transaction Format"})],-1),B={class:"custom-container tip"},H=e("p",{class:"custom-container-title"},"Le format Tableau Compact",-1),E=e("p",null,"Un tableau compact est un tableau s\xE9rialis\xE9 de mani\xE8re \xE0 avoir les composants suivants :",-1),F=s("Une taille de tableau dans un encodage multi-octet appel\xE9 "),R={href:"https://beta.docs.solana.com/developing/programming-model/transactions#compact-u16-format",target:"_blank",rel:"noopener noreferrer"},z=s("Compact-u16"),W=e("li",null,"Suivi de chaque \xE9l\xE9ment du tableau",-1),D=e("p",null,[e("img",{src:d,alt:"Compact array format"})],-1),K=t('

    Message H\xE9rit\xE9

    Un message h\xE9rit\xE9 comporte les \xE9l\xE9ments suivants :

    1. Un en-t\xEAte
    2. Un tableau compact d'adresses de comptes, o\xF9 chaque adresse de compte occupe 32 octets
    3. Un hash de bloc r\xE9cent
    • un hachage SHA-256 de 32 octets utilis\xE9 pour indiquer quand le registre a \xE9t\xE9 observ\xE9 pour la derni\xE8re fois. Si un hash de bloc est trop vieux, les validateurs le rejettent.
    1. Un tableau compact d'instructions

    Legacy Message

    En-t\xEAte

    L'en-t\xEAte du message a une taille de 3 octets et contient 3 entiers u8 :

    1. Le nombre de signatures requises : le runtime de Solana v\xE9rifie ce nombre avec la taille du tableau compact des signatures de la transaction.
    2. Le nombre d'adresses de comptes en lecture seule qui n\xE9cessitent une signature.
    3. Le nombre d'adresses de comptes en lecture seule qui ne n\xE9cessitent pas de signature.

    Message Header

    Tableau compact d'adresses de comptes

    Ce tableau compact commence par un encodage compact-u16 du nombre d'adresses de comptes, suivi par :

    1. Adresses de compte n\xE9cessitant une signature: Les adresses qui demandent un acc\xE8s en lecture et en \xE9criture sont list\xE9es en premier, suivies de celles qui demandent un acc\xE8s en lecture seule
    2. Adresses de comptes qui ne n\xE9cessitent pas de signature: Comme ci-dessus, les adresses qui demandent un acc\xE8s en lecture et en \xE9criture sont list\xE9es en premier, suivies de celles qui demandent un acc\xE8s en lecture seule

    Compact array of account addresses

    Tableau compact d'instructions

    Tout comme le tableau d'adresses de comptes, ce tableau compact commence par un encodage compact-u16 du nombre d'instructions, suivi d'un tableau d'instructions. Chaque instruction du tableau comporte les \xE9l\xE9ments suivants :

    1. Identifiant du programme: identifie un programme on-chain qui traitera l'instruction. Il est repr\xE9sent\xE9 par un index u8 vers une adresse dans le tableau compact d'adresses de comptes dans le message.
    2. Tableau compact d'index d'adresses de compte: index u8 vers un sous-ensemble d'adresses de comptes dans le tableau compact des adresses de comptes qui n\xE9cessitent une signature.
    3. Tableau compact de donn\xE9es opaques u8: un tableau d'octets d'usage g\xE9n\xE9ral qui est sp\xE9cifique \xE0 l'identifiant du programme mentionn\xE9 pr\xE9c\xE9demment. Ce tableau de donn\xE9es sp\xE9cifie toutes les op\xE9rations que le programme doit effectuer et toute information suppl\xE9mentaire que les comptes pourraient ne pas contenir.

    Compact array of Instructions

    Probl\xE8mes li\xE9s aux Transactions H\xE9rit\xE9es

    Quel est le probl\xE8me avec le mod\xE8le de transaction ci-dessus ?

    La taille maximale d'une transaction, et donc le nombre de comptes qui peuvent tenir dans une seule transaction atomique.

    Comme nous l'avons vu pr\xE9c\xE9demment, la taille maximale autoris\xE9e pour une transaction est de 1232 octets. La taille d'une adresse de compte est de 32 octets. Ainsi, une transaction peut au mieux stocker 35 comptes, en tenant compte d'un certain espace pour les en-t\xEAtes, les signatures et autres m\xE9tadonn\xE9es.

    Issue with legacy transactions

    Cela pose probl\xE8me car il existe plusieurs cas o\xF9 les d\xE9veloppeurs doivent inclure des centaines de comptes sans signature dans une seule transaction. Cela n'est actuellement pas possible avec le mod\xE8le de transaction h\xE9rit\xE9e. La solution actuellement utilis\xE9e consiste \xE0 stocker temporairement l'\xE9tat sur la cha\xEEne et \xE0 le r\xE9utiliser ult\xE9rieurement dans des transactions. Cette solution de fortune ne fonctionne pas lorsque plusieurs programmes doivent \xEAtre compos\xE9s en une seule transaction. Chaque programme n\xE9cessite plusieurs comptes en entr\xE9e et nous tombons donc dans le m\xEAme probl\xE8me que pr\xE9c\xE9demment.

    C'est l\xE0 que les Tables de Consultation d'Adresses (LUT) sont utilis\xE9es.

    Tables de Consultation d'Adresses (LUT)

    L'id\xE9e derri\xE8re les Tables de Consultation d'Adresses est de stocker les adresses de comptes dans une structure de donn\xE9es de type table (tableau) sur la cha\xEEne. Une fois que les comptes sont stock\xE9s dans cette table, l'adresse de la table peut \xEAtre r\xE9f\xE9renc\xE9e dans un message de transaction. Pour pointer vers un compte en particulier dans la table, un index u8 de 1 octet est n\xE9cessaire.

    LUTs

    Cela permet de gagner de l'espace car les adresses ne doivent plus \xEAtre stock\xE9es dans le message de transaction. Ils doivent seulement \xEAtre r\xE9f\xE9renc\xE9s sous la forme d'un index dans le tableau. Cela conduit \xE0 la possibilit\xE9 de r\xE9f\xE9rencer 2^8=256 comptes, car les comptes sont r\xE9f\xE9renc\xE9s en utilisant un index u8.

    Les Tables de Consultation d'Adresses doivent \xEAtre exemptes de rente lors de leur initialisation ou chaque fois qu'une nouvelle adresse est ajout\xE9e \xE0 la table. Les adresses peuvent \xEAtre ajout\xE9es \xE0 cette table soit par un buffer on-chain, soit en les ajoutant directement \xE0 la table par l'instruction Extension. De plus, les Tables de Consultation d'Adresses peuvent stocker les m\xE9tadonn\xE9es associ\xE9es suivies d'un tableau compact de comptes. Vous pouvez voir ci-dessous la structure d'une Table de Consultation d'Adresses standard.

    LUT Format

    L'un des principaux inconv\xE9nients des Tables de Consultation d'Adresses est que, comme les recherches d'adresses n\xE9cessitent une charge suppl\xE9mentaire pendant le traitement des transactions, elles entra\xEEnent g\xE9n\xE9ralement des co\xFBts plus \xE9lev\xE9s pour une transaction.

    Transactions Versionn\xE9es : TransactionV0

    La structure des transactions h\xE9rit\xE9es doit \xEAtre modifi\xE9e pour int\xE9grer les consultations de la table d'adresses. Ces changements ne doivent pas perturber le traitement des transactions sur Solana, et ne doivent pas provoquer de changement de format des programmes invoqu\xE9s.

    Pour garantir cela, il est important de mentionner explicitement le type de transaction : legacy or versioned. Comment inclure ces informations dans une transaction ?

    Avant l'introduction du versionnage, les transactions avaient un bit sup\xE9rieur inutilis\xE9 dans le premier octet de leur en-t\xEAte : num_required_signatures. Nous pouvons maintenant utiliser ce bit pour d\xE9clarer explicitement la version de nos transactions.

    pub enum VersionedMessage {
    +    Legacy(Message),
    +    V0(v0::Message),
    +}
    +

    Si le premier bit est fix\xE9, les autres bits du premier octet codent un num\xE9ro de version. Solana commence avec la "Version 0", qui est la version requise pour commencer \xE0 utiliser les Tables de Consultation d'Adresses.

    Si le premier bit n'est pas fix\xE9, la transaction sera consid\xE9r\xE9e comme une "transaction h\xE9rit\xE9e" et le reste du premier octet sera trait\xE9 comme le premier octet d'un message h\xE9rit\xE9 cod\xE9.

    MessageV0

    La structure du nouveau MessageV0 est plus ou moins la m\xEAme, \xE0 l'exception de deux petits mais importants changements :

    1. En-t\xEAte du Message: inchang\xE9 par rapport \xE0 celui du message h\xE9rit\xE9
    2. Tableau compact de cl\xE9s de compte: inchang\xE9 par rapport \xE0 celui du message h\xE9rit\xE9. Nous d\xE9signerons le tableau d'indices pointant vers les \xE9l\xE9ments de ce tableau par tableau d'indices A (vous verrez bient\xF4t pourquoi nous le d\xE9signons ainsi)
    3. Hash de bloc r\xE9cent: inchang\xE9 par rapport \xE0 celui du message h\xE9rit\xE9
    4. Tableau compact d'instructions: diff\xE9rent de celui du message h\xE9rit\xE9
    5. Tableau compact de consultations de tables d'adresses: introduit dans v0

    Message v0

    Nous allons d'abord discuter de la structure du tableau compact de consultation de la table d'adresses avant de voir ce qui a chang\xE9 dans le tableau d'instructions.

    Tableau compact de consultations de tables d'adresses

    Cette structure introduit les Tables de Consultation d'Adresses (LUTs) dans les transactions versionn\xE9es, ce qui permet d'utiliser les LUTs pour int\xE9grer plus de comptes en lecture seule et en \xE9criture dans une seule transaction.

    Le tableau compact commence par un encodage compact-u16 du nombre de consultations de la table d'adresses, suivi d'un tableau de consultations de la table d'adresses. Chaque consultation a la structure suivante :

    1. Cl\xE9 de compte: cl\xE9 de compte de la table de consultation d'adresses
    2. Index modifiables en \xE9criture: tableau compact d'index utilis\xE9s pour int\xE9grer les adresses de comptes modifiables en \xE9criture. Nous d\xE9signerons ce tableau par tableau d'indices B.
    3. Index en lecture seule: tableau compact d'index utilis\xE9s pour int\xE9grer les adresses de comptes en lecture seule. Nous d\xE9signerons ce tableau par tableau d'indices C

    Compact array of LUTs

    Voyons maintenant quels changements ont \xE9t\xE9 apport\xE9s dans le tableau compact d'instructions

    Tableau compact d'instructions

    Comme indiqu\xE9 pr\xE9c\xE9demment, le tableau compact d'instructions h\xE9rit\xE9es stocke des instructions h\xE9rit\xE9es individuelles qui, \xE0 leur tour, stockent les \xE9l\xE9ments suivants :

    1. Index de l'identifiant du programme
    2. Tableau compact d'index d'adresses de comptes
    3. Tableau compact de donn\xE9es opaques de 8 bits

    Le changement dans la nouvelle instruction n'est pas dans la structure de l'instruction elle-m\xEAme, mais dans le tableau utilis\xE9 pour obtenir les indices de 1 et 2. Dans les transactions h\xE9rit\xE9es, un sous-ensemble du tableau d'indices A est utilis\xE9, tandis que dans les transactions versionn\xE9es, un sous-ensemble du tableau combin\xE9 des \xE9l\xE9ments suivants est utilis\xE9 :

    1. tableau d'indices A: Tableau compact des comptes stock\xE9s dans le message
    2. tableau d'indices B: Index modifiables en \xE9criture dans la consultation de la table d'adresses
    3. tableau d'indices C: Index en lecture seule dans la consultation de la table d'adresses

    New Compact array of Instructions

    Modifications du RPC

    Les r\xE9ponses des transactions n\xE9cessiteront un nouveau champ correspondant \xE0 la version : maxSupportedTransactionVersion pour indiquer aux clients quelle structure de transaction doit \xEAtre utilis\xE9e pour la d\xE9s\xE9rialisation.

    Les m\xE9thodes suivantes doivent \xEAtre mises \xE0 jour pour \xE9viter les erreurs :

    • getTransaction
    • getBlock

    Le param\xE8tre suivant doit \xEAtre ajout\xE9 aux requ\xEAtes :

    maxSupportedTransactionVersion: 0

    Si maxSupportedTransactionVersion n'est pas explicitement ajout\xE9 \xE0 la requ\xEAte, la version de la transaction sera fix\xE9e \xE0 legacy. Tout bloc qui contient une transaction versionn\xE9e sera retourn\xE9 avec une erreur par le client dans le cas d'une transaction h\xE9rit\xE9e.

    Vous pouvez d\xE9finir ces param\xE8tres via des requ\xEAtes au format JSON adress\xE9es au point de terminaison RPC, comme ci-dessous :

    curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d \\
    +'{"jsonrpc": "2.0", "id":1, "method": "getBlock", "params": [430, {
    +  "encoding":"json",
    +  "maxSupportedTransactionVersion":0,
    +  "transactionDetails":"full",
    +  "rewards":false
    +}]}'
    +
    `,65),Q=s("Vous pouvez \xE9galement faire de m\xEAme en utilisant la biblioth\xE8que "),G={href:"https://solana-labs.github.io/solana-web3.js/",target:"_blank",rel:"noopener noreferrer"},J=e("code",null,"@solana/web3.js",-1),O=s("."),X=t(`
    // connect to the \`devnet\` cluster and get the current \`slot\`
    +const connection = new web3.Connection(web3.clusterApiUrl("devnet"));
    +const slot = await connection.getSlot();
    +
    +// get the latest block (allowing for v0 transactions)
    +const block = await connection.getBlock(slot, {
    +  maxSupportedTransactionVersion: 0,
    +});
    +
    +// get a specific transaction (allowing for v0 transactions)
    +const getTx = await connection.getTransaction(
    +  "3jpoANiFeVGisWRY5UP648xRXs3iQasCHABPWRWnoEjeA93nc79WrnGgpgazjq4K9m8g2NJoyKoWBV1Kx5VmtwHQ",
    +  {
    +    maxSupportedTransactionVersion: 0,
    +  },
    +);
    +

    Autres Ressources

    `,2),Y={href:"https://beta.docs.solana.com/developing/versioned-transactions#how-create-a-versioned-transaction",target:"_blank",rel:"noopener noreferrer"},Z=s("Comment construire une Transaction Versionn\xE9e"),$={href:"https://beta.docs.solana.com/developing/lookup-tables#how-to-create-an-address-lookup-table",target:"_blank",rel:"noopener noreferrer"},ee=s("Comment construire une Transaction Versionn\xE9e avec consultation d'adresse en utilisant les LUTs"),se={href:"https://beta.docs.solana.com/proposals/transactions-v2#limitations",target:"_blank",rel:"noopener noreferrer"},ne=s("Limites des Transactions Versionn\xE9es"),ae={href:"https://beta.docs.solana.com/proposals/transactions-v2#security-concerns",target:"_blank",rel:"noopener noreferrer"},te=s("Probl\xE8mes de s\xE9curit\xE9 des Transactions Versionn\xE9es"),oe={href:"https://beta.docs.solana.com/proposals/transactions-v2#other-proposals",target:"_blank",rel:"noopener noreferrer"},re=s("Autres solutions propos\xE9es pour les Transactions Versionn\xE9es"),ie=e("h2",{id:"references",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#references","aria-hidden":"true"},"#"),s(" R\xE9f\xE9rences")],-1),le={href:"https://beta.docs.solana.com/proposals/transactions-v2",target:"_blank",rel:"noopener noreferrer"},ce=s("Proposition de transactions-V2"),ue={href:"https://beta.docs.solana.com/developing/versioned-transactions",target:"_blank",rel:"noopener noreferrer"},de=s("D\xE9velopper avec les Transactions Versionn\xE9es");function pe(me,be){const n=r("ExternalLinkIcon");return i(),l(c,null,[T,e("p",null,[C,e("a",L,[y,a(n)]),V,w,A]),U,e("ol",null,[e("li",null,[j,e("a",S,[I,a(n)]),N]),M]),P,e("div",B,[H,E,e("ol",null,[e("li",null,[F,e("a",R,[z,a(n)])]),W]),D]),K,e("p",null,[Q,e("a",G,[J,a(n)]),O]),X,e("ul",null,[e("li",null,[e("a",Y,[Z,a(n)])]),e("li",null,[e("a",$,[ee,a(n)])]),e("li",null,[e("a",se,[ne,a(n)])]),e("li",null,[e("a",ae,[te,a(n)])]),e("li",null,[e("a",oe,[re,a(n)])])]),ie,e("ul",null,[e("li",null,[e("a",le,[ce,a(n)])]),e("li",null,[e("a",ue,[de,a(n)])])])],64)}var ge=o(x,[["render",pe]]);export{ge as default}; diff --git a/docs/.vuepress/dist/assets/versioned-transactions.html.c4762cf6.js b/docs/.vuepress/dist/assets/versioned-transactions.html.c4762cf6.js new file mode 100644 index 000000000..c53614038 --- /dev/null +++ b/docs/.vuepress/dist/assets/versioned-transactions.html.c4762cf6.js @@ -0,0 +1 @@ +const e={key:"v-77103780",path:"/fr/guides/versioned-transactions.html",title:"Transactions Versionn\xE9es",lang:"fr-FR",frontmatter:{title:"Transactions Versionn\xE9es",head:[["meta",{name:"title",content:"Solana Cookbook | Transactions Versionn\xE9es"}],["meta",{name:"og:title",content:"Solana Cookbook | Transactions Versionn\xE9es"}],["meta",{name:"description",content:"Nouveau et meilleur format de transaction sur Solana."}],["meta",{name:"og:description",content:"Nouveau et meilleur format de transaction sur Solana."}],["meta",{name:"og:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"og:image:alt",content:"Solana splash card"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:site",content:"@solanacookbook"}],["meta",{name:"twitter:image",content:"https://solanacookbook.com/cookbook-sharing-card.png"}],["meta",{name:"robots",content:"index,follow,noodp"}],["meta",{name:"googlebot",content:"index,follow"}]],footer:"MIT Licensed"},excerpt:"",headers:[{level:2,title:"Faits",slug:"faits",children:[]},{level:2,title:"Transaction H\xE9rit\xE9e",slug:"transaction-heritee",children:[]},{level:2,title:"Message H\xE9rit\xE9",slug:"message-herite",children:[{level:3,title:"En-t\xEAte",slug:"en-tete",children:[]},{level:3,title:"Tableau compact d'adresses de comptes",slug:"tableau-compact-d-adresses-de-comptes",children:[]},{level:3,title:"Tableau compact d'instructions",slug:"tableau-compact-d-instructions",children:[]}]},{level:2,title:"Probl\xE8mes li\xE9s aux Transactions H\xE9rit\xE9es",slug:"problemes-lies-aux-transactions-heritees",children:[]},{level:2,title:"Tables de Consultation d'Adresses (LUT)",slug:"tables-de-consultation-d-adresses-lut",children:[]},{level:2,title:"Transactions Versionn\xE9es : TransactionV0",slug:"transactions-versionnees-transactionv0",children:[]},{level:2,title:"MessageV0",slug:"messagev0",children:[{level:3,title:"Tableau compact de consultations de tables d'adresses",slug:"tableau-compact-de-consultations-de-tables-d-adresses",children:[]},{level:3,title:"Tableau compact d'instructions",slug:"tableau-compact-d-instructions-1",children:[]}]},{level:2,title:"Modifications du RPC",slug:"modifications-du-rpc",children:[]},{level:2,title:"Autres Ressources",slug:"autres-ressources",children:[]},{level:2,title:"R\xE9f\xE9rences",slug:"references",children:[]}],git:{updatedTime:1674873344e3},filePathRelative:"fr/guides/versioned-transactions.md"};export{e as data}; diff --git a/docs/.vuepress/dist/assets/versioned-transactions.html.ca57f109.js b/docs/.vuepress/dist/assets/versioned-transactions.html.ca57f109.js new file mode 100644 index 000000000..5915fe66c --- /dev/null +++ b/docs/.vuepress/dist/assets/versioned-transactions.html.ca57f109.js @@ -0,0 +1,28 @@ +import{_ as o,r,o as c,c as i,a,b as e,F as p,e as t,d as s}from"./app.2fbb9e96.js";var l="/assets/tx_format.1023848a.png",d="/assets/compact_array_format.6984243f.png",u="/assets/legacy_message.09ab30b7.png",m="/assets/message_header.8eb7d589.png",h="/assets/compat_array_of_account_addresses.7792e5c7.png",g="/assets/compact_array_of_ixs.6281d70b.png",b="/assets/issues_with_legacy_txs.5766db66.png",_="/assets/luts.96a8a310.png",k="/assets/lut_format.060d6be2.png",y="/assets/messagev0.c089b240.png",f="/assets/compact_array_of_luts.9175e491.png",v="/assets/new_compact_array_of_ixs.54090dc5.png";const x={},T=t('

    Versioned Transactions

    Solana \u0E40\u0E1E\u0E34\u0E48\u0E07\u0E08\u0E30\u0E1B\u0E25\u0E48\u0E2D\u0E22 Versioned Transactions \u0E2D\u0E2D\u0E01\u0E21\u0E32\u0E42\u0E14\u0E22\u0E21\u0E35\u0E2A\u0E34\u0E48\u0E07\u0E17\u0E35\u0E48\u0E40\u0E1B\u0E25\u0E35\u0E48\u0E22\u0E19\u0E44\u0E1B\u0E01\u0E47\u0E04\u0E37\u0E2D:

    1. \u0E21\u0E35 program \u0E17\u0E35\u0E48\u0E40\u0E2D\u0E32\u0E44\u0E27\u0E49\u0E08\u0E31\u0E14\u0E01\u0E32\u0E23 on-chain address lookup tables

    2. \u0E21\u0E35 transaction \u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E43\u0E2B\u0E21\u0E48\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19 on-chain address lookup tables \u0E44\u0E14\u0E49

    Facts (\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E19\u0E48\u0E32\u0E23\u0E39\u0E49)

    Fact Sheet

    • Transaction \u0E41\u0E1A\u0E1A\u0E40\u0E01\u0E48\u0E32\u0E08\u0E30\u0E21\u0E35\u0E02\u0E49\u0E2D\u0E08\u0E33\u0E01\u0E31\u0E14\u0E2D\u0E22\u0E39\u0E48: \u0E02\u0E19\u0E32\u0E14\u0E08\u0E33\u0E01\u0E31\u0E14\u0E2D\u0E22\u0E39\u0E48\u0E17\u0E35\u0E48 1232 bytes, \u0E14\u0E31\u0E07\u0E19\u0E31\u0E49\u0E19\u0E08\u0E33\u0E19\u0E27\u0E19 accounts \u0E17\u0E35\u0E48\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E08\u0E31\u0E14\u0E40\u0E01\u0E47\u0E1A\u0E44\u0E14\u0E49\u0E43\u0E19 atomic transaction \u0E04\u0E37\u0E2D: 35 addresses.
    • Address Lookup Tables (LUTs): \u0E40\u0E21\u0E37\u0E48\u0E2D accounts \u0E16\u0E39\u0E01\u0E08\u0E31\u0E14\u0E40\u0E01\u0E47\u0E1A\u0E43\u0E19\u0E15\u0E32\u0E23\u0E32\u0E07\u0E19\u0E35\u0E49 \u0E17\u0E35\u0E48\u0E2D\u0E22\u0E39\u0E48\u0E02\u0E2D\u0E07\u0E15\u0E32\u0E23\u0E32\u0E07\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E2D\u0E49\u0E32\u0E07\u0E2D\u0E34\u0E07\u0E43\u0E19 transaction message \u0E42\u0E14\u0E22\u0E43\u0E0A\u0E49\u0E14\u0E31\u0E0A\u0E19\u0E35(index) u8 \u0E02\u0E19\u0E32\u0E14 1 \u0E44\u0E1A\u0E15\u0E4C
    • createLookupTable() \u0E43\u0E19 solana/web3.js \u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E43\u0E0A\u0E49\u0E2A\u0E23\u0E49\u0E32\u0E07\u0E15\u0E32\u0E23\u0E32\u0E07\u0E04\u0E49\u0E19\u0E2B\u0E32\u0E43\u0E2B\u0E21\u0E48\u0E44\u0E14\u0E49 \u0E41\u0E25\u0E30\u0E2B\u0E32\u0E17\u0E35\u0E48\u0E2D\u0E22\u0E39\u0E48\u0E02\u0E2D\u0E07\u0E15\u0E32\u0E23\u0E32\u0E07\u0E44\u0E14\u0E49
    • \u0E40\u0E21\u0E37\u0E48\u0E2D LUT \u0E16\u0E39\u0E01\u0E2A\u0E23\u0E49\u0E32\u0E07\u0E41\u0E25\u0E49\u0E27 \u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E02\u0E22\u0E32\u0E22\u0E44\u0E14\u0E49 \u0E01\u0E25\u0E48\u0E32\u0E27\u0E04\u0E37\u0E2D\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E40\u0E1E\u0E34\u0E48\u0E21\u0E1A\u0E31\u0E0D\u0E0A\u0E35\u0E43\u0E19\u0E15\u0E32\u0E23\u0E32\u0E07\u0E44\u0E14\u0E49
    • Versioned Transactions: \u0E42\u0E04\u0E23\u0E07\u0E2A\u0E23\u0E49\u0E32\u0E07\u0E02\u0E2D\u0E07\u0E18\u0E38\u0E23\u0E01\u0E23\u0E23\u0E21\u0E40\u0E01\u0E48\u0E32\u0E15\u0E49\u0E2D\u0E07\u0E16\u0E39\u0E01\u0E1B\u0E23\u0E31\u0E1A\u0E40\u0E1B\u0E25\u0E35\u0E48\u0E22\u0E19\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E23\u0E27\u0E21 LUTs \u0E40\u0E02\u0E49\u0E32\u0E44\u0E1B
    • \u0E01\u0E48\u0E2D\u0E19\u0E17\u0E35\u0E48\u0E08\u0E30\u0E21\u0E35\u0E01\u0E32\u0E23\u0E40\u0E1B\u0E25\u0E35\u0E48\u0E22\u0E19\u0E21\u0E32\u0E43\u0E0A\u0E49 version \u0E43\u0E2B\u0E21\u0E48\u0E19\u0E35\u0E49 \u0E43\u0E19 Transactions \u0E08\u0E30\u0E21\u0E35 bit \u0E1A\u0E19\u0E2A\u0E38\u0E14\u0E02\u0E2D\u0E07 byte \u0E41\u0E23\u0E01\u0E43\u0E19 header \u0E17\u0E35\u0E48\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E40\u0E2D\u0E32\u0E21\u0E32\u0E43\u0E0A\u0E49\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E43\u0E19\u0E01\u0E32\u0E23\u0E23\u0E30\u0E1A\u0E38 version \u0E02\u0E2D\u0E07 Transactions \u0E44\u0E14\u0E49

    \u0E40\u0E23\u0E32\u0E08\u0E30\u0E1E\u0E39\u0E14\u0E16\u0E36\u0E07\u0E01\u0E32\u0E23\u0E40\u0E1B\u0E25\u0E35\u0E48\u0E22\u0E19\u0E41\u0E1B\u0E25\u0E07 \u0E41\u0E25\u0E30 developers \u0E15\u0E49\u0E2D\u0E07\u0E40\u0E02\u0E49\u0E32\u0E43\u0E08\u0E2D\u0E30\u0E44\u0E23\u0E1A\u0E49\u0E32\u0E07\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E25\u0E30\u0E40\u0E2D\u0E35\u0E22\u0E14\u0E21\u0E32\u0E01\u0E02\u0E36\u0E49\u0E19 \u0E2D\u0E22\u0E48\u0E32\u0E07\u0E44\u0E23\u0E01\u0E47\u0E15\u0E32\u0E21 \u0E40\u0E23\u0E32\u0E15\u0E49\u0E2D\u0E07\u0E40\u0E02\u0E49\u0E32\u0E43\u0E08\u0E42\u0E04\u0E23\u0E07\u0E2A\u0E23\u0E49\u0E32\u0E07 (anatomy)\u200B\u0E02\u0E2D\u0E07 transaction \u0E1B\u0E01\u0E15\u0E34 (\u0E2B\u0E23\u0E37\u0E2D\u0E40\u0E01\u0E48\u0E32) \u0E01\u0E48\u0E2D\u0E19\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E40\u0E02\u0E49\u0E32\u0E43\u0E08\u0E01\u0E32\u0E23\u0E40\u0E1B\u0E25\u0E35\u0E48\u0E22\u0E19\u0E41\u0E1B\u0E25\u0E07\u0E44\u0E14\u0E49\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E0A\u0E31\u0E14\u0E40\u0E08\u0E19

    Legacy Transaction

    ',7),q=s("The Solana network \u0E43\u0E0A\u0E49\u0E02\u0E19\u0E32\u0E14 maximum transactional unit (MTU) \u0E2D\u0E22\u0E39\u0E48\u0E17\u0E35\u0E48 1280 bytes, \u0E15\u0E32\u0E21\u0E02\u0E49\u0E2D\u0E08\u0E33\u0E01\u0E31\u0E14\u0E02\u0E19\u0E32\u0E14\u0E02\u0E2D\u0E07 "),w={href:"https://en.wikipedia.org/wiki/IPv6_packet",target:"_blank",rel:"noopener noreferrer"},L=s("IPv6 MTU"),C=s(" \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E43\u0E2B\u0E49\u0E21\u0E35\u0E04\u0E27\u0E32\u0E21\u0E40\u0E23\u0E47\u0E27 \u0E41\u0E25\u0E30\u0E40\u0E0A\u0E37\u0E48\u0E2D\u0E16\u0E37\u0E2D\u0E44\u0E14\u0E49 \u0E0B\u0E36\u0E48\u0E07\u0E17\u0E33\u0E43\u0E2B\u0E49\u0E40\u0E2B\u0E25\u0E37\u0E2D "),V=a("strong",null,"1232 bytes",-1),A=s(" \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A packet data \u0E40\u0E0A\u0E48\u0E19 serialised transactions."),S=a("p",null,"Transaction \u0E1B\u0E23\u0E30\u0E01\u0E2D\u0E1A\u0E14\u0E49\u0E27\u0E22:",-1),U=s("Array \u0E02\u0E2D\u0E07 signatures, \u0E15\u0E31\u0E27\u0E25\u0E30 64 byte \u0E43\u0E19\u0E41\u0E1A\u0E1A "),M={href:"https://ed25519.cr.yp.to/",target:"_blank",rel:"noopener noreferrer"},j=s("ed25519"),I=s("."),B=a("li",null,"Message (\u0E41\u0E1A\u0E1A\u0E40\u0E01\u0E48\u0E32)",-1),P=a("p",null,[a("img",{src:l,alt:"Transaction Format"})],-1),H={class:"custom-container tip"},N=a("p",{class:"custom-container-title"},"Compact-Array format",-1),R=a("p",null,"Compact array \u0E04\u0E37\u0E2D array \u0E17\u0E35\u0E48\u0E16\u0E39\u0E01 serialised \u0E15\u0E32\u0E21\u0E19\u0E35\u0E49:",-1),F=s("\u0E04\u0E27\u0E32\u0E21\u0E22\u0E32\u0E27 Array \u0E43\u0E19\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A multi-byte encoding \u0E17\u0E35\u0E48\u0E40\u0E23\u0E35\u0E22\u0E01\u0E27\u0E48\u0E32 "),W={href:"https://beta.docs.solana.com/developing/programming-model/transactions#compact-u16-format",target:"_blank",rel:"noopener noreferrer"},D=s("Compact-u16"),E=a("li",null,"\u0E15\u0E32\u0E21\u0E14\u0E49\u0E27\u0E22\u0E41\u0E15\u0E48\u0E25\u0E30\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23\u0E02\u0E2D\u0E07 array item",-1),K=a("p",null,[a("img",{src:d,alt:"Compact array format"})],-1),G=t('

    Legacy Message

    Legacy Message \u0E41\u0E1A\u0E1A\u0E40\u0E01\u0E48\u0E32\u0E08\u0E30\u0E1B\u0E23\u0E30\u0E01\u0E2D\u0E1A\u0E14\u0E49\u0E27\u0E22\u0E2A\u0E48\u0E27\u0E19\u0E15\u0E48\u0E2D\u0E44\u0E1B\u0E19\u0E35\u0E49:

    1. \u0E2A\u0E48\u0E27\u0E19\u0E2B\u0E31\u0E27\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07 (header)
    2. compact-array \u0E02\u0E2D\u0E07 account addresses, \u0E17\u0E35\u0E48\u0E41\u0E15\u0E48\u0E25\u0E30 account address \u0E08\u0E30\u0E21\u0E35\u0E02\u0E19\u0E32\u0E14 32 bytes
    3. blockhash \u0E25\u0E48\u0E32\u0E2A\u0E38\u0E14 (recent blockhash)
    • \u0E04\u0E37\u0E2D 32-byte SHA-256 hash \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E1A\u0E2D\u0E01\u0E40\u0E27\u0E25\u0E32\u0E25\u0E48\u0E32\u0E2A\u0E38\u0E14\u0E17\u0E35\u0E48\u0E25\u0E47\u0E2D\u0E04\u0E1A\u0E31\u0E0D\u0E0A\u0E35\u0E16\u0E39\u0E01\u0E15\u0E23\u0E27\u0E08\u0E1E\u0E1A \u0E16\u0E49\u0E32 blockhash \u0E40\u0E01\u0E48\u0E32\u0E40\u0E01\u0E34\u0E19\u0E44\u0E1B validator \u0E08\u0E30\u0E1B\u0E0F\u0E34\u0E40\u0E2A\u0E18.
    1. compact-array \u0E02\u0E2D\u0E07 Instructions

    Legacy Message

    \u0E2B\u0E31\u0E27\u0E02\u0E2D\u0E07\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21 (message header) \u0E08\u0E30\u0E21\u0E35\u0E02\u0E19\u0E32\u0E14 3 bytes \u0E41\u0E25\u0E30\u0E21\u0E35 u8 integers 3 \u0E15\u0E31\u0E27:

    1. \u0E08\u0E33\u0E19\u0E27\u0E19\u0E25\u0E32\u0E22\u0E40\u0E0B\u0E47\u0E19\u0E17\u0E35\u0E48\u0E08\u0E33\u0E40\u0E1B\u0E47\u0E19 (required signatures): Solana runtime \u0E08\u0E30\u0E15\u0E23\u0E27\u0E08\u0E2A\u0E2D\u0E1A\u0E08\u0E33\u0E19\u0E27\u0E19\u0E19\u0E35\u0E49\u0E01\u0E31\u0E1A\u0E04\u0E27\u0E32\u0E21\u0E22\u0E32\u0E27\u0E02\u0E2D\u0E07 compact array \u0E02\u0E2D\u0E07 signatures \u0E43\u0E19 transaction.
    2. \u0E08\u0E33\u0E19\u0E27\u0E19\u0E02\u0E2D\u0E07\u0E17\u0E35\u0E48\u0E2D\u0E22\u0E39\u0E48\u0E1A\u0E31\u0E0D\u0E0A\u0E35\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E01\u0E32\u0E23\u0E2D\u0E48\u0E32\u0E19\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E40\u0E14\u0E35\u0E22\u0E27 (read-only account addresses) \u0E17\u0E35\u0E48\u0E15\u0E49\u0E2D\u0E07\u0E01\u0E32\u0E23 signatures
    3. \u0E08\u0E33\u0E19\u0E27\u0E19\u0E02\u0E2D\u0E07\u0E17\u0E35\u0E48\u0E2D\u0E22\u0E39\u0E48\u0E1A\u0E31\u0E0D\u0E0A\u0E35\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E01\u0E32\u0E23\u0E2D\u0E48\u0E32\u0E19\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E40\u0E14\u0E35\u0E22\u0E27 (read-only account addresses) \u0E17\u0E35\u0E48\u0E44\u0E21\u0E48\u0E15\u0E49\u0E2D\u0E07\u0E01\u0E32\u0E23 signatures

    Message Header

    Compact-array \u0E02\u0E2D\u0E07 account addresses

    Compact array \u0E19\u0E35\u0E49\u0E08\u0E30\u0E40\u0E23\u0E34\u0E48\u0E21\u0E15\u0E49\u0E19\u0E14\u0E49\u0E27\u0E22\u0E01\u0E32\u0E23\u0E40\u0E02\u0E49\u0E32\u0E23\u0E2B\u0E31\u0E2A\u0E15\u0E31\u0E27\u0E40\u0E25\u0E02\u0E08\u0E33\u0E19\u0E27\u0E19\u0E02\u0E2D\u0E07 account addresses \u0E42\u0E14\u0E22\u0E43\u0E0A\u0E49 Compact-u16 \u0E15\u0E32\u0E21\u0E14\u0E49\u0E27\u0E22:

    1. Account addresses \u0E17\u0E35\u0E48\u0E15\u0E49\u0E2D\u0E07\u0E01\u0E32\u0E23 signatures: \u0E41\u0E2A\u0E14\u0E07\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23\u0E02\u0E2D\u0E07\u0E17\u0E35\u0E48\u0E2D\u0E22\u0E39\u0E48\u0E1A\u0E31\u0E0D\u0E0A\u0E35\u0E17\u0E35\u0E48\u0E15\u0E49\u0E2D\u0E07\u0E01\u0E32\u0E23\u0E2A\u0E34\u0E17\u0E18\u0E34\u0E4C\u0E01\u0E32\u0E23\u0E2D\u0E48\u0E32\u0E19 \u0E41\u0E25\u0E30\u0E40\u0E02\u0E35\u0E22\u0E19\u0E01\u0E48\u0E2D\u0E19 \u0E41\u0E25\u0E49\u0E27\u0E15\u0E32\u0E21\u0E14\u0E49\u0E27\u0E22\u0E2D\u0E48\u0E32\u0E19\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E40\u0E14\u0E35\u0E22\u0E27
    2. Account addresses \u0E17\u0E35\u0E48\u0E44\u0E21\u0E48\u0E15\u0E49\u0E2D\u0E07\u0E01\u0E32\u0E23 signatures: \u0E40\u0E2B\u0E21\u0E37\u0E2D\u0E19\u0E02\u0E49\u0E32\u0E07\u0E1A\u0E19\u0E04\u0E37\u0E2D \u0E41\u0E2A\u0E14\u0E07\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23\u0E02\u0E2D\u0E07\u0E17\u0E35\u0E48\u0E2D\u0E22\u0E39\u0E48\u0E1A\u0E31\u0E0D\u0E0A\u0E35\u0E17\u0E35\u0E48\u0E15\u0E49\u0E2D\u0E07\u0E01\u0E32\u0E23\u0E2A\u0E34\u0E17\u0E18\u0E34\u0E4C\u0E01\u0E32\u0E23\u0E2D\u0E48\u0E32\u0E19 \u0E41\u0E25\u0E30\u0E40\u0E02\u0E35\u0E22\u0E19\u0E01\u0E48\u0E2D\u0E19 \u0E41\u0E25\u0E49\u0E27\u0E15\u0E32\u0E21\u0E14\u0E49\u0E27\u0E22\u0E2D\u0E48\u0E32\u0E19\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E40\u0E14\u0E35\u0E22\u0E27

    Compact array \u0E02\u0E2D\u0E07 account addresses

    Compact array \u0E02\u0E2D\u0E07 instructions

    \u0E40\u0E2B\u0E21\u0E37\u0E2D\u0E19\u0E01\u0E31\u0E1A compact array \u0E02\u0E2D\u0E07 account addresses, compact array \u0E08\u0E30\u0E40\u0E23\u0E34\u0E48\u0E21\u0E15\u0E49\u0E19\u0E14\u0E49\u0E27\u0E22\u0E01\u0E32\u0E23 encode \u0E08\u0E33\u0E19\u0E27\u0E19\u0E02\u0E2D\u0E07 instructions \u0E42\u0E14\u0E22\u0E43\u0E0A\u0E49 Compact-u16 \u0E41\u0E25\u0E49\u0E27\u0E15\u0E32\u0E21\u0E14\u0E49\u0E27\u0E22 array \u0E02\u0E2D\u0E07 instructions \u0E41\u0E15\u0E48\u0E25\u0E30\u0E15\u0E31\u0E27\u0E17\u0E35\u0E48\u0E21\u0E35\u0E2A\u0E48\u0E27\u0E19\u0E1B\u0E23\u0E30\u0E01\u0E2D\u0E1A\u0E14\u0E31\u0E07\u0E19\u0E35\u0E49:

    1. Program ID: \u0E23\u0E30\u0E1A\u0E38\u0E42\u0E1B\u0E23\u0E41\u0E01\u0E23\u0E21 on-chain \u0E17\u0E35\u0E48\u0E08\u0E30\u0E14\u0E33\u0E40\u0E19\u0E34\u0E19\u0E01\u0E32\u0E23 instruction \u0E19\u0E35\u0E49 \u0E0B\u0E36\u0E48\u0E07\u0E08\u0E30\u0E41\u0E17\u0E19\u0E14\u0E49\u0E27\u0E22 index \u0E02\u0E2D\u0E07 u8 \u0E43\u0E19 compact array \u0E02\u0E2D\u0E07 account addresses \u0E20\u0E32\u0E22\u0E43\u0E19 message.
    2. Compact array \u0E02\u0E2D\u0E07 account address indexes: u8 indexes \u0E02\u0E2D\u0E07 account addresses \u0E43\u0E19 compact array \u0E02\u0E2D\u0E07 account addresses \u0E17\u0E35\u0E48\u0E15\u0E49\u0E2D\u0E07\u0E01\u0E32\u0E23 signatures.
    3. Compact array \u0E02\u0E2D\u0E07 opaque u8 data: array \u0E02\u0E2D\u0E07 byte \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19\u0E17\u0E31\u0E48\u0E27\u0E44\u0E1B\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A program ID \u0E17\u0E35\u0E48\u0E40\u0E04\u0E22\u0E1E\u0E39\u0E14\u0E16\u0E36\u0E07\u0E01\u0E48\u0E2D\u0E19\u0E2B\u0E19\u0E49\u0E32\u0E19\u0E35\u0E49. array \u0E02\u0E2D\u0E07 data \u0E19\u0E35\u0E49\u0E08\u0E30\u0E23\u0E30\u0E1A\u0E38\u0E2A\u0E34\u0E48\u0E07\u0E17\u0E35\u0E48\u0E42\u0E1B\u0E23\u0E41\u0E01\u0E23\u0E21\u0E04\u0E27\u0E23\u0E14\u0E33\u0E40\u0E19\u0E34\u0E19\u0E01\u0E32\u0E23 \u0E41\u0E25\u0E30\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E40\u0E1E\u0E34\u0E48\u0E21\u0E40\u0E15\u0E34\u0E21\u0E2D\u0E37\u0E48\u0E19\u0E46 \u0E17\u0E35\u0E48\u0E2D\u0E32\u0E08\u0E44\u0E21\u0E48\u0E21\u0E35\u0E1A\u0E2D\u0E01\u0E44\u0E27\u0E49\u0E43\u0E19 account.

    Compact array \u0E02\u0E2D\u0E07 Instructions

    \u0E02\u0E49\u0E2D\u0E08\u0E33\u0E01\u0E31\u0E14\u0E02\u0E2D\u0E07 Legacy Transactions

    \u0E1B\u0E31\u0E0D\u0E2B\u0E32\u0E43\u0E19 Legacy Transactions \u0E04\u0E37\u0E2D\u0E2D\u0E30\u0E44\u0E23?

    \u0E02\u0E19\u0E32\u0E14\u0E02\u0E2D\u0E07 transaction \u0E0B\u0E36\u0E48\u0E07\u0E2B\u0E21\u0E32\u0E22\u0E16\u0E36\u0E07\u0E08\u0E33\u0E19\u0E27\u0E19\u0E1A\u0E31\u0E0D\u0E0A\u0E35\u0E17\u0E35\u0E48\u0E08\u0E30\u0E43\u0E0A\u0E49\u0E44\u0E14\u0E49\u0E43\u0E19 atomic transaction \u0E44\u0E14\u0E49.

    \u0E40\u0E2B\u0E21\u0E37\u0E2D\u0E19\u0E17\u0E35\u0E48\u0E2D\u0E18\u0E34\u0E1A\u0E32\u0E22\u0E44\u0E27\u0E49\u0E01\u0E48\u0E2D\u0E19\u0E2B\u0E19\u0E49\u0E32\u0E19\u0E35\u0E49 \u0E02\u0E19\u0E32\u0E14\u0E02\u0E2D\u0E07 Transaction \u0E17\u0E35\u0E48\u0E2D\u0E19\u0E38\u0E0D\u0E32\u0E15\u0E2A\u0E39\u0E07\u0E2A\u0E38\u0E14\u0E04\u0E37\u0E2D 1232 bytes. \u0E02\u0E19\u0E32\u0E14\u0E02\u0E2D\u0E07 account address \u0E04\u0E37\u0E2D 32 bytes. \u0E14\u0E31\u0E07\u0E19\u0E31\u0E49\u0E19 transaction \u0E08\u0E30\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E40\u0E01\u0E47\u0E1A accounts \u0E44\u0E14\u0E49\u0E21\u0E32\u0E01\u0E17\u0E35\u0E48\u0E2A\u0E38\u0E14 35 accounts \u0E42\u0E14\u0E22\u0E15\u0E49\u0E2D\u0E07\u0E21\u0E35\u0E1E\u0E37\u0E49\u0E19\u0E17\u0E35\u0E48\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A headers signatures \u0E41\u0E25\u0E30\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25 metadata \u0E14\u0E49\u0E27\u0E22.

    \u0E02\u0E49\u0E2D\u0E08\u0E33\u0E01\u0E31\u0E14\u0E02\u0E2D\u0E07 legacy transactions

    \u0E19\u0E35\u0E48\u0E40\u0E1B\u0E47\u0E19\u0E1B\u0E31\u0E0D\u0E2B\u0E32\u0E40\u0E1E\u0E23\u0E32\u0E30\u0E21\u0E35\u0E01\u0E23\u0E13\u0E35\u0E2B\u0E25\u0E32\u0E22\u0E01\u0E23\u0E13\u0E35\u0E17\u0E35\u0E48 developers \u0E15\u0E49\u0E2D\u0E07\u0E01\u0E32\u0E23\u0E43\u0E2A\u0E48 100 signature-free accounts \u0E43\u0E19 transaction \u0E40\u0E14\u0E35\u0E22\u0E27. \u0E0B\u0E36\u0E48\u0E07 legacy transaction \u0E40\u0E14\u0E34\u0E21\u0E19\u0E31\u0E49\u0E19\u0E08\u0E30\u0E44\u0E21\u0E48\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E23\u0E2D\u0E07\u0E23\u0E31\u0E1A\u0E44\u0E14\u0E49. \u0E27\u0E34\u0E18\u0E35\u0E01\u0E32\u0E23\u0E41\u0E01\u0E49\u0E44\u0E02\u0E1B\u0E31\u0E08\u0E08\u0E38\u0E1A\u0E31\u0E19\u0E17\u0E35\u0E48\u0E01\u0E33\u0E25\u0E31\u0E07\u0E16\u0E39\u0E01\u0E19\u0E33\u0E21\u0E32\u0E43\u0E0A\u0E49\u0E04\u0E37\u0E2D\u0E01\u0E32\u0E23\u0E40\u0E01\u0E47\u0E1A\u0E2A\u0E16\u0E32\u0E19\u0E30 (state) \u0E0A\u0E31\u0E48\u0E27\u0E04\u0E23\u0E32\u0E27 on-chain \u0E41\u0E25\u0E30\u0E19\u0E33\u0E44\u0E1B\u0E43\u0E0A\u0E49\u0E43\u0E19 transactions \u0E17\u0E35\u0E2B\u0E25\u0E31\u0E07. \u0E0B\u0E36\u0E48\u0E07 workaround \u0E19\u0E35\u0E49\u0E08\u0E30\u0E43\u0E0A\u0E49\u0E44\u0E21\u0E48\u0E44\u0E14\u0E49\u0E40\u0E27\u0E25\u0E32\u0E43\u0E0A\u0E49 multiple programs \u0E17\u0E35\u0E48\u0E15\u0E49\u0E2D\u0E07 compose \u0E43\u0E19 transaction \u0E40\u0E14\u0E35\u0E22\u0E27. \u0E0B\u0E36\u0E48\u0E07\u0E41\u0E15\u0E48\u0E25\u0E30 program \u0E01\u0E47\u0E08\u0E30\u0E15\u0E49\u0E2D\u0E07\u0E01\u0E32\u0E23 accounts \u0E2B\u0E25\u0E32\u0E22\u0E15\u0E31\u0E27\u0E40\u0E1B\u0E47\u0E19 input \u0E17\u0E33\u0E43\u0E2B\u0E49\u0E40\u0E23\u0E32\u0E40\u0E08\u0E2D\u0E01\u0E31\u0E1A\u0E02\u0E49\u0E2D\u0E08\u0E33\u0E01\u0E31\u0E14\u0E40\u0E14\u0E34\u0E21\u0E17\u0E35\u0E48\u0E40\u0E04\u0E22\u0E40\u0E08\u0E2D\u0E01\u0E48\u0E2D\u0E19\u0E2B\u0E19\u0E49\u0E32\u0E2D\u0E22\u0E39\u0E48\u0E14\u0E35.

    \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E41\u0E01\u0E49\u0E44\u0E02\u0E1B\u0E31\u0E0D\u0E2B\u0E32\u0E19\u0E35\u0E49\u0E08\u0E36\u0E07\u0E21\u0E35\u0E01\u0E32\u0E23\u0E19\u0E33\u0E40\u0E2A\u0E19\u0E2D Address Lookup Tables (LUT) \u0E02\u0E36\u0E49\u0E19\u0E21\u0E32

    Address Lookup Tables (LUT)

    \u0E41\u0E19\u0E27\u0E04\u0E34\u0E14\u0E02\u0E2D\u0E07 Address Lookup Tables \u0E04\u0E37\u0E2D\u0E01\u0E32\u0E23\u0E40\u0E01\u0E47\u0E1A account addresses \u0E43\u0E19\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A table-like (array) data structure \u0E1A\u0E19 on-chain. \u0E2B\u0E25\u0E31\u0E07\u0E08\u0E32\u0E01\u0E17\u0E35\u0E48 accounts \u0E16\u0E39\u0E01\u0E40\u0E01\u0E47\u0E1A\u0E43\u0E19\u0E15\u0E32\u0E23\u0E32\u0E07\u0E19\u0E35\u0E49\u0E41\u0E25\u0E49\u0E27 \u0E40\u0E23\u0E32\u0E08\u0E30\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E2D\u0E49\u0E32\u0E07\u0E2D\u0E34\u0E07\u0E16\u0E36\u0E07\u0E17\u0E35\u0E48\u0E2D\u0E22\u0E39\u0E48\u0E02\u0E2D\u0E07\u0E15\u0E32\u0E23\u0E32\u0E07\u0E19\u0E31\u0E49\u0E19\u0E43\u0E19 transaction message \u0E44\u0E14\u0E49 \u0E42\u0E14\u0E22\u0E43\u0E0A\u0E49 1-byte u8 \u0E40\u0E1B\u0E47\u0E19 index \u0E0A\u0E35\u0E49\u0E44\u0E1B\u0E17\u0E35\u0E48\u0E41\u0E15\u0E48\u0E25\u0E30 account.

    LUTs

    \u0E40\u0E1E\u0E23\u0E32\u0E30\u0E41\u0E1A\u0E1A\u0E19\u0E31\u0E49\u0E19\u0E40\u0E23\u0E32\u0E40\u0E25\u0E22\u0E44\u0E21\u0E48\u0E15\u0E49\u0E2D\u0E07\u0E40\u0E01\u0E47\u0E1A addresses \u0E43\u0E19 transaction message \u0E2D\u0E35\u0E01\u0E15\u0E48\u0E2D\u0E44\u0E1B \u0E40\u0E23\u0E32\u0E41\u0E04\u0E48\u0E15\u0E49\u0E2D\u0E07\u0E01\u0E32\u0E23\u0E40\u0E01\u0E47\u0E1A u8 \u0E44\u0E27\u0E49\u0E2D\u0E49\u0E32\u0E07\u0E2D\u0E34\u0E07 index \u0E17\u0E33\u0E43\u0E2B\u0E49\u0E40\u0E23\u0E32\u0E08\u0E30\u0E40\u0E01\u0E47\u0E1A\u0E44\u0E14\u0E49\u0E21\u0E32\u0E01\u0E16\u0E36\u0E07 2^8=256 accounts

    LUTs \u0E15\u0E49\u0E2D\u0E07\u0E17\u0E33 rent-exempt \u0E40\u0E27\u0E25\u0E32\u0E40\u0E23\u0E34\u0E48\u0E21\u0E43\u0E0A\u0E49 (initialised) \u0E2B\u0E23\u0E37\u0E2D\u0E17\u0E38\u0E01\u0E04\u0E23\u0E31\u0E49\u0E07\u0E17\u0E35\u0E48 address \u0E43\u0E2B\u0E21\u0E48\u0E16\u0E39\u0E01\u0E40\u0E1E\u0E34\u0E48\u0E21\u0E40\u0E02\u0E49\u0E32\u0E44\u0E1B\u0E43\u0E19\u0E15\u0E32\u0E23\u0E32\u0E07. Addresses \u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E40\u0E1E\u0E34\u0E48\u0E21\u0E44\u0E14\u0E49\u0E42\u0E14\u0E22\u0E43\u0E0A\u0E49 on-chain buffer \u0E2B\u0E23\u0E37\u0E2D\u0E40\u0E1E\u0E34\u0E48\u0E21\u0E42\u0E14\u0E22\u0E15\u0E23\u0E07\u0E43\u0E19\u0E15\u0E32\u0E23\u0E32\u0E07\u0E1C\u0E48\u0E32\u0E19\u0E04\u0E33\u0E2A\u0E31\u0E48\u0E07 Extension \u0E43\u0E19 instruction. \u0E19\u0E2D\u0E01\u0E08\u0E32\u0E01\u0E19\u0E35\u0E49 LUTs \u0E22\u0E31\u0E07\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E40\u0E01\u0E47\u0E1A metadata \u0E17\u0E35\u0E48\u0E40\u0E01\u0E35\u0E48\u0E22\u0E27\u0E02\u0E49\u0E2D\u0E07\u0E15\u0E32\u0E21\u0E14\u0E49\u0E27\u0E22 compact-array \u0E02\u0E2D\u0E07 accounts \u0E44\u0E14\u0E49 \u0E14\u0E49\u0E32\u0E19\u0E25\u0E48\u0E32\u0E07\u0E19\u0E35\u0E49\u0E04\u0E37\u0E2D\u0E42\u0E04\u0E23\u0E07\u0E2A\u0E23\u0E49\u0E32\u0E07\u0E02\u0E2D\u0E07 Address Lookup Table \u0E17\u0E31\u0E48\u0E27\u0E44\u0E1B

    LUT Format

    \u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E17\u0E35\u0E48\u0E15\u0E49\u0E2D\u0E07\u0E23\u0E30\u0E27\u0E31\u0E07\u0E02\u0E2D\u0E07 LUTs \u0E04\u0E37\u0E2D\u0E40\u0E19\u0E37\u0E48\u0E2D\u0E07\u0E08\u0E32\u0E01 address lookups \u0E08\u0E30\u0E21\u0E35 overhead \u0E23\u0E30\u0E2B\u0E27\u0E48\u0E32\u0E07\u0E1B\u0E23\u0E30\u0E21\u0E27\u0E25\u0E1C\u0E25 transaction, \u0E0B\u0E36\u0E48\u0E07\u0E08\u0E30\u0E17\u0E33\u0E43\u0E2B\u0E49\u0E04\u0E48\u0E32 fee \u0E2A\u0E39\u0E07\u0E02\u0E36\u0E49\u0E19\u0E15\u0E32\u0E21\u0E44\u0E1B\u0E14\u0E49\u0E27\u0E22

    Versioned Transactions: TransactionV0

    \u0E42\u0E04\u0E23\u0E07\u0E2A\u0E23\u0E49\u0E32\u0E07\u0E02\u0E2D\u0E07 legacy transaction \u0E15\u0E49\u0E2D\u0E07\u0E21\u0E35\u0E01\u0E32\u0E23\u0E1B\u0E23\u0E31\u0E1A\u0E40\u0E1B\u0E25\u0E35\u0E48\u0E22\u0E19\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E43\u0E2B\u0E49\u0E43\u0E0A\u0E49 address table lookups \u0E44\u0E14\u0E49. \u0E01\u0E32\u0E23\u0E40\u0E1B\u0E25\u0E35\u0E48\u0E22\u0E19\u0E41\u0E1B\u0E25\u0E07\u0E40\u0E2B\u0E25\u0E48\u0E32\u0E19\u0E35\u0E49\u0E44\u0E21\u0E48\u0E04\u0E27\u0E23\u0E44\u0E1B\u0E17\u0E33\u0E43\u0E2B\u0E49\u0E01\u0E32\u0E23\u0E1B\u0E23\u0E30\u0E21\u0E27\u0E25\u0E1C\u0E25 transaction \u0E1A\u0E19 Solana \u0E1E\u0E31\u0E07, \u0E41\u0E25\u0E30\u0E01\u0E47\u0E44\u0E21\u0E48\u0E04\u0E27\u0E23\u0E44\u0E1B\u0E40\u0E1B\u0E25\u0E35\u0E48\u0E22\u0E19\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E01\u0E32\u0E23\u0E40\u0E23\u0E35\u0E22\u0E01 program \u0E41\u0E1A\u0E1A\u0E40\u0E14\u0E34\u0E21\u0E14\u0E49\u0E27\u0E22

    \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E43\u0E2B\u0E49\u0E21\u0E31\u0E48\u0E19\u0E43\u0E08\u0E27\u0E48\u0E32\u0E08\u0E30\u0E44\u0E21\u0E48\u0E21\u0E35\u0E2D\u0E30\u0E44\u0E23\u0E1E\u0E31\u0E07 \u0E40\u0E23\u0E32\u0E08\u0E36\u0E07\u0E08\u0E33\u0E40\u0E1B\u0E47\u0E19\u0E15\u0E49\u0E2D\u0E07\u0E23\u0E30\u0E1A\u0E38\u0E0A\u0E19\u0E34\u0E14\u0E02\u0E2D\u0E07 transaction \u0E44\u0E27\u0E49\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E0A\u0E31\u0E14\u0E40\u0E08\u0E19\u0E27\u0E48\u0E32\u0E21\u0E31\u0E19\u0E40\u0E1B\u0E47\u0E19 legacy \u0E2B\u0E23\u0E37\u0E2D versioned. \u0E41\u0E25\u0E49\u0E27\u0E40\u0E23\u0E32\u0E08\u0E30\u0E43\u0E2A\u0E48 version \u0E44\u0E1B\u0E15\u0E23\u0E07\u0E44\u0E2B\u0E19\u0E02\u0E2D\u0E07 transaction \u0E14\u0E35\u0E25\u0E48\u0E30?

    \u0E01\u0E48\u0E2D\u0E19\u0E2B\u0E19\u0E49\u0E32\u0E19\u0E35\u0E49 transactions \u0E08\u0E30\u0E40\u0E2B\u0E25\u0E37\u0E2D upper bit \u0E17\u0E35\u0E48\u0E44\u0E21\u0E48\u0E44\u0E14\u0E49\u0E43\u0E0A\u0E49\u0E2D\u0E22\u0E39\u0E48\u0E17\u0E35\u0E48 byte \u0E41\u0E23\u0E01\u0E02\u0E2D\u0E07 message headers: num_required_signatures. \u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E43\u0E0A\u0E49 bit \u0E19\u0E35\u0E49\u0E43\u0E19\u0E01\u0E32\u0E23\u0E1B\u0E23\u0E30\u0E01\u0E32\u0E28 version \u0E02\u0E2D\u0E07 transactions \u0E02\u0E2D\u0E07\u0E40\u0E23\u0E32\u0E44\u0E14\u0E49.

    pub enum VersionedMessage {
    +    Legacy(Message),
    +    V0(v0::Message),
    +}
    +

    \u0E16\u0E49\u0E32 bit \u0E41\u0E23\u0E01\u0E43\u0E19 byte \u0E41\u0E23\u0E01\u0E16\u0E39\u0E01\u0E15\u0E31\u0E49\u0E07\u0E04\u0E48\u0E32 \u0E08\u0E30\u0E17\u0E33\u0E43\u0E2B\u0E49 bit \u0E15\u0E48\u0E2D\u0E44\u0E1B\u0E08\u0E30\u0E2B\u0E21\u0E32\u0E22\u0E16\u0E36\u0E07\u0E2B\u0E21\u0E32\u0E22\u0E40\u0E25\u0E02 version \u0E0B\u0E36\u0E48\u0E07 Solana \u0E40\u0E23\u0E34\u0E48\u0E21\u0E15\u0E49\u0E19\u0E14\u0E49\u0E27\u0E22 \u201CVersion 0\u201D \u0E0B\u0E36\u0E48\u0E07\u0E15\u0E49\u0E2D\u0E07\u0E01\u0E33\u0E2B\u0E19\u0E14\u0E44\u0E27\u0E49 \u0E16\u0E49\u0E32\u0E08\u0E30\u0E40\u0E23\u0E34\u0E48\u0E21\u0E43\u0E0A\u0E49 LUTs

    If the first bit is not set, the transaction will be considered a \u201CLegacy Transaction\u201D and the remainder of the first byte will be treated as the first byte of an encoded legacy message.

    \u0E2B\u0E32\u0E01 bit \u0E41\u0E23\u0E01\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E31\u0E49\u0E07\u0E04\u0E48\u0E32 transaction \u0E19\u0E31\u0E49\u0E19\u0E08\u0E30\u0E16\u0E37\u0E2D\u0E27\u0E48\u0E32\u0E40\u0E1B\u0E47\u0E19 "Legacy Transaction" \u0E41\u0E25\u0E30\u0E2A\u0E48\u0E27\u0E19\u0E17\u0E35\u0E48\u0E40\u0E2B\u0E25\u0E37\u0E2D\u0E02\u0E2D\u0E07 byte \u0E41\u0E23\u0E01\u0E08\u0E30\u0E16\u0E39\u0E01\u0E08\u0E31\u0E14\u0E01\u0E32\u0E23\u0E40\u0E2B\u0E21\u0E37\u0E2D\u0E19\u0E40\u0E1B\u0E47\u0E19 byte \u0E41\u0E23\u0E01\u0E02\u0E2D\u0E07 message \u0E15\u0E32\u0E21\u0E40\u0E14\u0E34\u0E21

    MessageV0

    \u0E42\u0E04\u0E23\u0E07\u0E2A\u0E23\u0E49\u0E32\u0E07\u0E02\u0E2D\u0E07 MessageV0 \u0E04\u0E48\u0E2D\u0E19\u0E02\u0E49\u0E32\u0E07\u0E40\u0E2B\u0E21\u0E37\u0E2D\u0E19\u0E40\u0E14\u0E34\u0E21 \u0E40\u0E1E\u0E34\u0E48\u0E21\u0E40\u0E15\u0E34\u0E21\u0E04\u0E37\u0E2D...

    1. Message Header: \u0E40\u0E2B\u0E21\u0E37\u0E2D\u0E19\u0E40\u0E14\u0E34\u0E21
    2. Compact array of account keys: \u0E40\u0E2B\u0E21\u0E37\u0E2D\u0E19\u0E40\u0E14\u0E34\u0E21 \u0E41\u0E15\u0E48\u0E40\u0E23\u0E32\u0E08\u0E30\u0E43\u0E0A\u0E49\u0E41\u0E15\u0E48\u0E25\u0E30 byte \u0E44\u0E1B\u0E17\u0E33 index \u0E41\u0E17\u0E19\u0E40\u0E23\u0E35\u0E22\u0E01\u0E27\u0E48\u0E32 index array A (\u0E08\u0E30\u0E21\u0E35\u0E2D\u0E18\u0E34\u0E1A\u0E32\u0E22\u0E2D\u0E35\u0E01\u0E17\u0E35)
    3. Recent blockhash: \u0E40\u0E2B\u0E21\u0E37\u0E2D\u0E19\u0E40\u0E14\u0E34\u0E21
    4. Compact array of instructions: \u0E40\u0E1B\u0E25\u0E35\u0E48\u0E22\u0E19
    5. Compact array of address table lookups: \u0E40\u0E1E\u0E34\u0E48\u0E21\u0E21\u0E32\u0E43\u0E19 v0

    Message v0

    \u0E40\u0E23\u0E32\u0E08\u0E30\u0E21\u0E32\u0E14\u0E39\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E42\u0E04\u0E23\u0E07\u0E2A\u0E23\u0E49\u0E32\u0E07\u0E02\u0E2D\u0E07 compact array \u0E02\u0E2D\u0E07 address table lookups \u0E01\u0E48\u0E2D\u0E19\u0E17\u0E35\u0E48\u0E08\u0E30\u0E44\u0E1B\u0E14\u0E39\u0E27\u0E48\u0E32\u0E21\u0E35\u0E2D\u0E30\u0E44\u0E23\u0E40\u0E1B\u0E25\u0E35\u0E48\u0E22\u0E19\u0E44\u0E1B\u0E43\u0E19 instruction array \u0E1A\u0E49\u0E32\u0E07

    Compact array \u0E02\u0E2D\u0E07 address table lookups

    \u0E42\u0E04\u0E23\u0E07\u0E2A\u0E23\u0E49\u0E32\u0E07\u0E19\u0E35\u0E49\u0E19\u0E33\u0E40\u0E2A\u0E19\u0E2D Address Lookup Tables (LUT) \u0E43\u0E19\u0E01\u0E32\u0E23\u0E17\u0E33 Versioned Transactions \u0E0B\u0E36\u0E48\u0E07\u0E17\u0E33\u0E43\u0E2B\u0E49\u0E40\u0E1B\u0E47\u0E19\u0E44\u0E1B\u0E44\u0E14\u0E49\u0E17\u0E35\u0E48\u0E08\u0E30\u0E42\u0E2B\u0E25\u0E14 accounts \u0E17\u0E35\u0E48\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E2D\u0E48\u0E32\u0E19 \u0E41\u0E25\u0E30\u0E40\u0E02\u0E35\u0E22\u0E19\u0E44\u0E14\u0E49\u0E21\u0E32\u0E01\u0E02\u0E36\u0E49\u0E19\u0E43\u0E19\u0E18\u0E38\u0E23\u0E01\u0E23\u0E23\u0E21\u0E40\u0E14\u0E35\u0E22\u0E27

    \u0E2A\u0E48\u0E27\u0E19 compact array \u0E08\u0E30\u0E40\u0E23\u0E34\u0E48\u0E21\u0E14\u0E49\u0E27\u0E22 compact-u16 encoding \u0E02\u0E2D\u0E07\u0E08\u0E33\u0E19\u0E27\u0E19\u0E02\u0E2D\u0E07 address table lookups, \u0E15\u0E32\u0E21\u0E14\u0E49\u0E27\u0E22 array \u0E02\u0E2D\u0E07 address table lookups. \u0E41\u0E15\u0E48\u0E25\u0E30 lookup \u0E08\u0E30\u0E21\u0E35\u0E42\u0E04\u0E23\u0E07\u0E2A\u0E23\u0E49\u0E32\u0E07\u0E15\u0E32\u0E21\u0E19\u0E35\u0E49:

    1. Account key: account key \u0E02\u0E2D\u0E07 address lookup table
    2. Writable indexes: compact array \u0E02\u0E2D\u0E07 indexes \u0E40\u0E2D\u0E32\u0E44\u0E27\u0E49\u0E42\u0E2B\u0E25\u0E14 account addresses \u0E17\u0E35\u0E48\u0E40\u0E02\u0E35\u0E22\u0E19\u0E44\u0E14\u0E49\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E40\u0E14\u0E35\u0E22\u0E27. \u0E40\u0E23\u0E32\u0E08\u0E30\u0E40\u0E23\u0E35\u0E22\u0E01\u0E21\u0E31\u0E19\u0E27\u0E48\u0E32 index array B.
    3. Readonly indexes: compact array \u0E02\u0E2D\u0E07 indexes \u0E40\u0E2D\u0E32\u0E44\u0E27\u0E49\u0E42\u0E2B\u0E25\u0E14 account addresses \u0E17\u0E35\u0E48\u0E2D\u0E48\u0E32\u0E19\u0E44\u0E14\u0E49\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E40\u0E14\u0E35\u0E22\u0E27. \u0E40\u0E23\u0E32\u0E08\u0E30\u0E40\u0E23\u0E35\u0E22\u0E01\u0E21\u0E31\u0E19\u0E27\u0E48\u0E32 index array C.

    Compact array of LUTs

    \u0E17\u0E35\u0E19\u0E35\u0E49\u0E40\u0E23\u0E32\u0E25\u0E2D\u0E07\u0E21\u0E32\u0E14\u0E39\u0E01\u0E31\u0E19\u0E27\u0E48\u0E32\u0E21\u0E35\u0E2D\u0E30\u0E44\u0E23\u0E40\u0E1B\u0E25\u0E35\u0E48\u0E22\u0E19\u0E41\u0E1B\u0E25\u0E07\u0E43\u0E19 instructions compact array \u0E01\u0E31\u0E19\u0E1A\u0E49\u0E32\u0E07

    Compact array \u0E02\u0E2D\u0E07 instructions

    \u0E40\u0E2B\u0E21\u0E37\u0E2D\u0E19\u0E01\u0E31\u0E1A\u0E17\u0E35\u0E48\u0E44\u0E14\u0E49\u0E1E\u0E39\u0E14\u0E44\u0E27\u0E49\u0E01\u0E48\u0E2D\u0E19\u0E2B\u0E19\u0E49\u0E32\u0E19\u0E35\u0E49 \u0E04\u0E37\u0E2D compact array \u0E02\u0E2D\u0E07 legacy instruction \u0E17\u0E35\u0E48\u0E08\u0E31\u0E14\u0E40\u0E01\u0E47\u0E1A legacy instruction \u0E41\u0E15\u0E48\u0E25\u0E30\u0E04\u0E33\u0E2A\u0E31\u0E48\u0E07\u0E0B\u0E36\u0E48\u0E07\u0E43\u0E19\u0E25\u0E31\u0E01\u0E29\u0E13\u0E30\u0E40\u0E1A\u0E37\u0E49\u0E2D\u0E07\u0E15\u0E49\u0E19\u0E08\u0E30\u0E40\u0E01\u0E47\u0E1A\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E15\u0E48\u0E2D\u0E44\u0E1B\u0E19\u0E35\u0E49:

    1. index \u0E02\u0E2D\u0E07 Program ID
    2. Compact array \u0E02\u0E2D\u0E07 account address indexes
    3. Compact array \u0E02\u0E2D\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25 opaque 8-bit

    \u0E01\u0E32\u0E23\u0E40\u0E1B\u0E25\u0E35\u0E48\u0E22\u0E19\u0E41\u0E1B\u0E25\u0E07\u0E43\u0E19 instruction \u0E43\u0E2B\u0E21\u0E48\u0E44\u0E21\u0E48\u0E44\u0E14\u0E49\u0E2D\u0E22\u0E39\u0E48\u0E43\u0E19\u0E42\u0E04\u0E23\u0E07\u0E2A\u0E23\u0E49\u0E32\u0E07\u0E02\u0E2D\u0E07 instruction \u0E41\u0E15\u0E48\u0E08\u0E30\u0E2D\u0E22\u0E39\u0E48\u0E43\u0E19 array \u0E17\u0E35\u0E48\u0E40\u0E23\u0E32\u0E43\u0E0A\u0E49\u0E40\u0E01\u0E47\u0E1A index \u0E02\u0E2D\u0E07 1 \u0E01\u0E31\u0E1A 2. \u0E0B\u0E36\u0E48\u0E07\u0E43\u0E19 legacy transactions \u0E08\u0E30\u0E43\u0E0A\u0E49\u0E1A\u0E32\u0E07\u0E2A\u0E48\u0E27\u0E19\u0E02\u0E2D\u0E07 index array A \u0E41\u0E15\u0E48\u0E43\u0E19 versioned transactions \u0E40\u0E23\u0E32\u0E08\u0E30\u0E43\u0E0A\u0E49\u0E1A\u0E32\u0E07\u0E2A\u0E48\u0E27\u0E19\u0E17\u0E35\u0E48\u0E44\u0E14\u0E49\u0E08\u0E32\u0E01\u0E01\u0E32\u0E23\u0E23\u0E27\u0E21 array \u0E15\u0E48\u0E2D\u0E44\u0E1B\u0E19\u0E35\u0E49\u0E41\u0E17\u0E19:

    1. index array A: Compact array \u0E02\u0E2D\u0E07 accounts \u0E17\u0E35\u0E48\u0E40\u0E01\u0E47\u0E1A\u0E44\u0E27\u0E49\u0E43\u0E19 message
    2. index array B: Writable indexes \u0E43\u0E19 address table lookup
    3. index array C: Readonly indexes \u0E43\u0E19 address table lookup

    New Compact array of Instructions

    RPC Changes

    Transaction \u0E17\u0E35\u0E48\u0E15\u0E2D\u0E1A\u0E01\u0E25\u0E31\u0E1A\u0E21\u0E32 (responses)\u0E08\u0E30\u0E15\u0E49\u0E2D\u0E07\u0E23\u0E30\u0E1A\u0E38 version field: maxSupportedTransactionVersion \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E1A\u0E2D\u0E01 clients \u0E27\u0E48\u0E32\u0E08\u0E30\u0E41\u0E01\u0E30(deserialisation) transaction \u0E22\u0E31\u0E07\u0E44\u0E07.

    methods \u0E15\u0E48\u0E2D\u0E44\u0E1B\u0E19\u0E35\u0E49\u0E08\u0E33\u0E40\u0E1B\u0E47\u0E19\u0E15\u0E49\u0E2D\u0E07 update \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E2B\u0E25\u0E35\u0E01\u0E40\u0E25\u0E35\u0E48\u0E22\u0E07\u0E02\u0E49\u0E2D\u0E1C\u0E34\u0E14\u0E1E\u0E25\u0E32\u0E14:

    • getTransaction
    • getBlock

    \u0E41\u0E25\u0E30\u0E15\u0E49\u0E2D\u0E07\u0E40\u0E1E\u0E34\u0E48\u0E21 parameter \u0E19\u0E35\u0E49\u0E40\u0E02\u0E49\u0E32\u0E44\u0E1B\u0E15\u0E2D\u0E19\u0E40\u0E23\u0E35\u0E22\u0E01\u0E02\u0E2D\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25 (requests):

    maxSupportedTransactionVersion: 0

    \u0E16\u0E49\u0E32 maxSupportedTransactionVersion \u0E44\u0E21\u0E48\u0E44\u0E14\u0E49\u0E43\u0E2A\u0E48\u0E21\u0E32\u0E43\u0E19 request, transaction version \u0E08\u0E30\u0E16\u0E37\u0E2D\u0E27\u0E48\u0E32\u0E40\u0E1B\u0E47\u0E19\u0E40\u0E1B\u0E47\u0E19 legacy. \u0E41\u0E25\u0E30\u0E16\u0E49\u0E32 block \u0E44\u0E2B\u0E19\u0E21\u0E35 versioned transaction \u0E08\u0E30\u0E17\u0E33\u0E43\u0E2B\u0E49\u0E40\u0E01\u0E34\u0E14 error \u0E44\u0E14\u0E49.

    \u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E43\u0E2A\u0E48\u0E04\u0E48\u0E32\u0E19\u0E35\u0E49\u0E40\u0E1E\u0E34\u0E48\u0E21\u0E40\u0E1B\u0E47\u0E19 JSON formatted requests \u0E44\u0E1B\u0E2B\u0E32 RPC endpoint \u0E44\u0E14\u0E49\u0E15\u0E32\u0E21\u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E02\u0E49\u0E32\u0E07\u0E25\u0E48\u0E32\u0E07:

    curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d \\
    +'{"jsonrpc": "2.0", "id":1, "method": "getBlock", "params": [430, {
    +  "encoding":"json",
    +  "maxSupportedTransactionVersion":0,
    +  "transactionDetails":"full",
    +  "rewards":false
    +}]}'
    +
    `,66),J=s("\u0E2B\u0E23\u0E37\u0E2D\u0E43\u0E0A\u0E49\u0E1C\u0E48\u0E32\u0E19 library "),O={href:"https://solana-labs.github.io/solana-web3.js/",target:"_blank",rel:"noopener noreferrer"},Q=a("code",null,"@solana/web3.js",-1),X=s(" \u0E01\u0E47\u0E44\u0E14\u0E49\u0E40\u0E2B\u0E21\u0E37\u0E2D\u0E19\u0E01\u0E31\u0E19."),z=t(`
    // connect to the \`devnet\` cluster and get the current \`slot\`
    +const connection = new web3.Connection(web3.clusterApiUrl("devnet"));
    +const slot = await connection.getSlot();
    +
    +// get the latest block (allowing for v0 transactions)
    +const block = await connection.getBlock(slot, {
    +  maxSupportedTransactionVersion: 0,
    +});
    +
    +// get a specific transaction (allowing for v0 transactions)
    +const getTx = await connection.getTransaction(
    +  "3jpoANiFeVGisWRY5UP648xRXs3iQasCHABPWRWnoEjeA93nc79WrnGgpgazjq4K9m8g2NJoyKoWBV1Kx5VmtwHQ",
    +  {
    +    maxSupportedTransactionVersion: 0,
    +  },
    +);
    +

    \u0E41\u0E2B\u0E25\u0E48\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E2D\u0E37\u0E48\u0E19\u0E46

    `,2),Y={href:"https://beta.docs.solana.com/developing/versioned-transactions#how-create-a-versioned-transaction",target:"_blank",rel:"noopener noreferrer"},Z=s("How to build a Versioned Transaction"),$={href:"https://beta.docs.solana.com/developing/lookup-tables#how-to-create-an-address-lookup-table",target:"_blank",rel:"noopener noreferrer"},aa=s("How to build a Versioned Transaction with Address Lookup using LUTs"),sa={href:"https://beta.docs.solana.com/proposals/transactions-v2#limitations",target:"_blank",rel:"noopener noreferrer"},na=s("Limitations of Versioned Transactions"),ea={href:"https://beta.docs.solana.com/proposals/transactions-v2#security-concerns",target:"_blank",rel:"noopener noreferrer"},ta=s("Security concerns of Versioned Transactions"),oa={href:"https://beta.docs.solana.com/proposals/transactions-v2#other-proposals",target:"_blank",rel:"noopener noreferrer"},ra=s("Alternate proposed solutions to Versioned Transactions"),ca=a("h2",{id:"\u0E2D\u0E49\u0E32\u0E07\u0E2D\u0E34\u0E07",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#\u0E2D\u0E49\u0E32\u0E07\u0E2D\u0E34\u0E07","aria-hidden":"true"},"#"),s(" \u0E2D\u0E49\u0E32\u0E07\u0E2D\u0E34\u0E07")],-1),ia={href:"https://beta.docs.solana.com/proposals/transactions-v2",target:"_blank",rel:"noopener noreferrer"},pa=s("Transactions-V2 Proposal"),la={href:"https://beta.docs.solana.com/developing/versioned-transactions",target:"_blank",rel:"noopener noreferrer"},da=s("Developing with Versioned Transactions");function ua(ma,ha){const n=r("ExternalLinkIcon");return c(),i(p,null,[T,a("p",null,[q,a("a",w,[L,e(n)]),C,V,A]),S,a("ol",null,[a("li",null,[U,a("a",M,[j,e(n)]),I]),B]),P,a("div",H,[N,R,a("ol",null,[a("li",null,[F,a("a",W,[D,e(n)])]),E]),K]),G,a("p",null,[J,a("a",O,[Q,e(n)]),X]),z,a("ul",null,[a("li",null,[a("a",Y,[Z,e(n)])]),a("li",null,[a("a",$,[aa,e(n)])]),a("li",null,[a("a",sa,[na,e(n)])]),a("li",null,[a("a",ea,[ta,e(n)])]),a("li",null,[a("a",oa,[ra,e(n)])])]),ca,a("ul",null,[a("li",null,[a("a",ia,[pa,e(n)])]),a("li",null,[a("a",la,[da,e(n)])])])],64)}var ba=o(x,[["render",ua]]);export{ba as default}; diff --git a/docs/.vuepress/dist/assets/web3auth.html.918e8853.js b/docs/.vuepress/dist/assets/web3auth.html.2d668c51.js similarity index 99% rename from docs/.vuepress/dist/assets/web3auth.html.918e8853.js rename to docs/.vuepress/dist/assets/web3auth.html.2d668c51.js index 11d941c6b..197b9e6d3 100644 --- a/docs/.vuepress/dist/assets/web3auth.html.918e8853.js +++ b/docs/.vuepress/dist/assets/web3auth.html.2d668c51.js @@ -1,4 +1,4 @@ -import{_ as i,r as l,o as r,c as k,a as n,b as a,w as t,F as d,e as b,d as s}from"./app.cfdf84e7.js";var m="/assets/login-modal.dc11cad0.png";const h={},g=b('

    Wallet

    wallet \u0E04\u0E37\u0E2D\u0E2D\u0E30\u0E44\u0E23?

    crypto wallet \u0E04\u0E37\u0E2D digital wallet \u0E17\u0E35\u0E48\u0E43\u0E0A\u0E49\u0E15\u0E34\u0E14\u0E15\u0E48\u0E2D\u0E01\u0E31\u0E1A blockchain \u0E40\u0E1E\u0E37\u0E48\u0E2D sign, verify, \u0E41\u0E25\u0E30\u0E2A\u0E48\u0E07 transactions \u0E43\u0E19\u0E1B\u0E31\u0E08\u0E08\u0E38\u0E1A\u0E31\u0E19\u0E21\u0E35 crypto wallet solutions \u0E21\u0E32\u0E01\u0E21\u0E32\u0E22\u0E43\u0E19\u0E15\u0E25\u0E32\u0E14, \u0E15\u0E31\u0E49\u0E07\u0E41\u0E15\u0E48 simple-to-use web apps \u0E08\u0E19\u0E44\u0E1B\u0E16\u0E36\u0E07 hardware security solutions \u0E17\u0E35\u0E48\u0E0B\u0E31\u0E1A\u0E0B\u0E49\u0E2D\u0E19.

    Social Logins \u0E1A\u0E19 Solana

    ',4),_={href:"https://docs.web3auth.io/",target:"_blank",rel:"noopener noreferrer"},y=n("strong",null,"Web3Auth",-1),w=s(" \u0E17\u0E33\u0E43\u0E2B\u0E49 users \u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 sign in \u0E42\u0E14\u0E22\u0E43\u0E0A\u0E49 Web2 OAuth Providers(Facebook, Google, Twitter etc.) \u0E17\u0E35\u0E48\u0E21\u0E35\u0E2D\u0E22\u0E39\u0E48\u0E41\u0E25\u0E49\u0E27\u0E44\u0E1B\u0E22\u0E31\u0E07 Web3 dapps. \u0E21\u0E31\u0E19\u0E08\u0E30\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E22\u0E07\u0E48\u0E32\u0E22 \u0E41\u0E25\u0E30\u0E43\u0E0A\u0E49\u0E27\u0E34\u0E18\u0E35 "),f={href:"https://docs.web3auth.io/key-infrastructure/overview",target:"_blank",rel:"noopener noreferrer"},v=s("non-custodial"),x=s(" \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E08\u0E31\u0E14\u0E01\u0E32\u0E23 assets \u0E41\u0E25\u0E30 identity. \u0E21\u0E31\u0E19\u0E17\u0E33\u0E43\u0E2B\u0E49 technical barriers \u0E25\u0E14\u0E25\u0E07 \u0E41\u0E25\u0E30\u0E25\u0E14\u0E01\u0E32\u0E23\u0E40\u0E23\u0E35\u0E22\u0E19\u0E23\u0E39\u0E49\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07 digital ownership \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A users \u0E17\u0E38\u0E01\u0E04\u0E19\u0E42\u0E14\u0E22\u0E0B\u0E48\u0E2D\u0E19\u0E01\u0E32\u0E23\u0E08\u0E31\u0E14\u0E01\u0E32\u0E23 private key \u0E44\u0E27\u0E49"),S=n("h2",{id:"\u0E41\u0E19\u0E27\u0E17\u0E32\u0E07\u0E01\u0E32\u0E23-integration",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E41\u0E19\u0E27\u0E17\u0E32\u0E07\u0E01\u0E32\u0E23-integration","aria-hidden":"true"},"#"),s(" \u0E41\u0E19\u0E27\u0E17\u0E32\u0E07\u0E01\u0E32\u0E23 Integration")],-1),T=n("p",null,"\u0E43\u0E19\u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E19\u0E35\u0E49\u0E08\u0E30\u0E40\u0E1B\u0E47\u0E19\u0E41\u0E19\u0E27\u0E17\u0E32\u0E07\u0E07\u0E48\u0E32\u0E22\u0E46 \u0E43\u0E19\u0E01\u0E32\u0E23 integrate social logins \u0E40\u0E02\u0E49\u0E32\u0E44\u0E1B\u0E43\u0E19 dapp \u0E02\u0E2D\u0E07\u0E40\u0E23\u0E32",-1),P=n("h3",{id:"\u0E01\u0E32\u0E23\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07-dependencies",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E01\u0E32\u0E23\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07-dependencies","aria-hidden":"true"},"#"),s(" \u0E01\u0E32\u0E23\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07 Dependencies")],-1),K=n("p",null,[s("\u0E40\u0E23\u0E34\u0E48\u0E21\u0E42\u0E14\u0E22\u0E43\u0E0A\u0E49 wallet \u0E17\u0E35\u0E48\u0E21\u0E35 dapp, \u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E25\u0E07 "),n("code",null,"@toruslabs/solana-embed"),s(". \u0E42\u0E14\u0E22\u0E43\u0E0A\u0E49 package managers \u0E15\u0E48\u0E32\u0E07\u0E46 \u0E40\u0E0A\u0E48\u0E19 yarn \u0E41\u0E25\u0E30 npm \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07.")],-1),I=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token function"},"yarn"),s(),n("span",{class:"token function"},"add"),s(` @toruslabs/solana-embed +import{_ as i,r as l,o as r,c as k,a as n,b as a,w as t,F as d,e as b,d as s}from"./app.2fbb9e96.js";var m="/assets/login-modal.dc11cad0.png";const h={},g=b('

    Wallet

    wallet \u0E04\u0E37\u0E2D\u0E2D\u0E30\u0E44\u0E23?

    crypto wallet \u0E04\u0E37\u0E2D digital wallet \u0E17\u0E35\u0E48\u0E43\u0E0A\u0E49\u0E15\u0E34\u0E14\u0E15\u0E48\u0E2D\u0E01\u0E31\u0E1A blockchain \u0E40\u0E1E\u0E37\u0E48\u0E2D sign, verify, \u0E41\u0E25\u0E30\u0E2A\u0E48\u0E07 transactions \u0E43\u0E19\u0E1B\u0E31\u0E08\u0E08\u0E38\u0E1A\u0E31\u0E19\u0E21\u0E35 crypto wallet solutions \u0E21\u0E32\u0E01\u0E21\u0E32\u0E22\u0E43\u0E19\u0E15\u0E25\u0E32\u0E14, \u0E15\u0E31\u0E49\u0E07\u0E41\u0E15\u0E48 simple-to-use web apps \u0E08\u0E19\u0E44\u0E1B\u0E16\u0E36\u0E07 hardware security solutions \u0E17\u0E35\u0E48\u0E0B\u0E31\u0E1A\u0E0B\u0E49\u0E2D\u0E19.

    Social Logins \u0E1A\u0E19 Solana

    ',4),_={href:"https://docs.web3auth.io/",target:"_blank",rel:"noopener noreferrer"},y=n("strong",null,"Web3Auth",-1),w=s(" \u0E17\u0E33\u0E43\u0E2B\u0E49 users \u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16 sign in \u0E42\u0E14\u0E22\u0E43\u0E0A\u0E49 Web2 OAuth Providers(Facebook, Google, Twitter etc.) \u0E17\u0E35\u0E48\u0E21\u0E35\u0E2D\u0E22\u0E39\u0E48\u0E41\u0E25\u0E49\u0E27\u0E44\u0E1B\u0E22\u0E31\u0E07 Web3 dapps. \u0E21\u0E31\u0E19\u0E08\u0E30\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E22\u0E07\u0E48\u0E32\u0E22 \u0E41\u0E25\u0E30\u0E43\u0E0A\u0E49\u0E27\u0E34\u0E18\u0E35 "),f={href:"https://docs.web3auth.io/key-infrastructure/overview",target:"_blank",rel:"noopener noreferrer"},v=s("non-custodial"),x=s(" \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E08\u0E31\u0E14\u0E01\u0E32\u0E23 assets \u0E41\u0E25\u0E30 identity. \u0E21\u0E31\u0E19\u0E17\u0E33\u0E43\u0E2B\u0E49 technical barriers \u0E25\u0E14\u0E25\u0E07 \u0E41\u0E25\u0E30\u0E25\u0E14\u0E01\u0E32\u0E23\u0E40\u0E23\u0E35\u0E22\u0E19\u0E23\u0E39\u0E49\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07 digital ownership \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A users \u0E17\u0E38\u0E01\u0E04\u0E19\u0E42\u0E14\u0E22\u0E0B\u0E48\u0E2D\u0E19\u0E01\u0E32\u0E23\u0E08\u0E31\u0E14\u0E01\u0E32\u0E23 private key \u0E44\u0E27\u0E49"),S=n("h2",{id:"\u0E41\u0E19\u0E27\u0E17\u0E32\u0E07\u0E01\u0E32\u0E23-integration",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E41\u0E19\u0E27\u0E17\u0E32\u0E07\u0E01\u0E32\u0E23-integration","aria-hidden":"true"},"#"),s(" \u0E41\u0E19\u0E27\u0E17\u0E32\u0E07\u0E01\u0E32\u0E23 Integration")],-1),T=n("p",null,"\u0E43\u0E19\u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E19\u0E35\u0E49\u0E08\u0E30\u0E40\u0E1B\u0E47\u0E19\u0E41\u0E19\u0E27\u0E17\u0E32\u0E07\u0E07\u0E48\u0E32\u0E22\u0E46 \u0E43\u0E19\u0E01\u0E32\u0E23 integrate social logins \u0E40\u0E02\u0E49\u0E32\u0E44\u0E1B\u0E43\u0E19 dapp \u0E02\u0E2D\u0E07\u0E40\u0E23\u0E32",-1),P=n("h3",{id:"\u0E01\u0E32\u0E23\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07-dependencies",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E01\u0E32\u0E23\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07-dependencies","aria-hidden":"true"},"#"),s(" \u0E01\u0E32\u0E23\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07 Dependencies")],-1),K=n("p",null,[s("\u0E40\u0E23\u0E34\u0E48\u0E21\u0E42\u0E14\u0E22\u0E43\u0E0A\u0E49 wallet \u0E17\u0E35\u0E48\u0E21\u0E35 dapp, \u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E25\u0E07 "),n("code",null,"@toruslabs/solana-embed"),s(". \u0E42\u0E14\u0E22\u0E43\u0E0A\u0E49 package managers \u0E15\u0E48\u0E32\u0E07\u0E46 \u0E40\u0E0A\u0E48\u0E19 yarn \u0E41\u0E25\u0E30 npm \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E15\u0E34\u0E14\u0E15\u0E31\u0E49\u0E07.")],-1),I=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token function"},"yarn"),s(),n("span",{class:"token function"},"add"),s(` @toruslabs/solana-embed `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),A=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token function"},"npm"),s(),n("span",{class:"token function"},"install"),s(` --save @toruslabs/solana-embed `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),C=n("h3",{id:"\u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49-sdk-\u0E41\u0E25\u0E30-initialize",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#\u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49-sdk-\u0E41\u0E25\u0E30-initialize","aria-hidden":"true"},"#"),s(" \u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49 SDK \u0E41\u0E25\u0E30 initialize")],-1),R=s("\u0E43\u0E19\u0E15\u0E31\u0E27\u0E2D\u0E22\u0E48\u0E32\u0E07 code \u0E2A\u0E31\u0E49\u0E19\u0E46 \u0E14\u0E49\u0E32\u0E19\u0E25\u0E48\u0E32\u0E07 \u0E40\u0E23\u0E32\u0E08\u0E30\u0E2A\u0E23\u0E49\u0E32\u0E07 instance \u0E02\u0E2D\u0E07 solana-embed \u0E41\u0E25\u0E49\u0E27 init \u0E21\u0E31\u0E19\u0E14\u0E49\u0E27\u0E22 testing environment \u0E17\u0E35\u0E48\u0E43\u0E0A\u0E49 solana testnet. \u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E2A\u0E48\u0E07\u0E04\u0E48\u0E32\u0E15\u0E31\u0E27\u0E40\u0E25\u0E37\u0E2D\u0E01\u0E40\u0E1E\u0E37\u0E48\u0E2D config \u0E43\u0E19\u0E23\u0E30\u0E2B\u0E27\u0E48\u0E32\u0E07 init wallet interface. \u0E40\u0E23\u0E32\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E2D\u0E48\u0E32\u0E19 solana-embed "),B={href:"https://docs.tor.us/solana-wallet/api-reference/class",target:"_blank",rel:"noopener noreferrer"},L=s("api-reference"),G=s(" \u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E40\u0E23\u0E35\u0E22\u0E19\u0E23\u0E39\u0E49\u0E40\u0E1E\u0E34\u0E48\u0E21\u0E40\u0E15\u0E34\u0E21"),M=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" clusterApi"),n("span",{class:"token punctuation"},","),s(" Connection "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` diff --git a/docs/.vuepress/dist/assets/web3auth.html.dde1c3ec.js b/docs/.vuepress/dist/assets/web3auth.html.345169aa.js similarity index 99% rename from docs/.vuepress/dist/assets/web3auth.html.dde1c3ec.js rename to docs/.vuepress/dist/assets/web3auth.html.345169aa.js index 4b97b65aa..8105af4da 100644 --- a/docs/.vuepress/dist/assets/web3auth.html.dde1c3ec.js +++ b/docs/.vuepress/dist/assets/web3auth.html.345169aa.js @@ -1,4 +1,4 @@ -import{_ as u,r as l,o as r,c as k,a as n,b as a,w as t,F as d,e as b,d as s}from"./app.cfdf84e7.js";var m="/assets/login-modal.dc11cad0.png";const h={},g=b('

    Wallet

    What is a wallet?

    A crypto wallet is a digital wallet used to interact with the blockchain. It allows you to sign, verify, and send transactions. There are many crypto wallet solutions present on the market, ranging from simple-to-use web apps to more complex hardware security solutions.

    Social Logins on Solana

    ',4),_={href:"https://docs.web3auth.io/",target:"_blank",rel:"noopener noreferrer"},y=n("strong",null,"Web3Auth",-1),w=s(" allows users to sign in using their existing Web2 OAuth Providers(Facebook, Google, Twitter etc.) into Web3 dapps. It provides a user-friendly and "),f={href:"https://docs.web3auth.io/key-infrastructure/overview",target:"_blank",rel:"noopener noreferrer"},v=s("non-custodial"),T=s(" approach to managing assets and identity. It removes technical barriers and reduces the learning curve for digital ownership for all users by providing a wrapper around private key management."),x=n("h2",{id:"integration-guide",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#integration-guide","aria-hidden":"true"},"#"),s(" Integration Guide")],-1),S=n("p",null,"This tutorial will guide you over a basic example to integrate social logins in your dapp.",-1),P=n("h3",{id:"installing-dependencies",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#installing-dependencies","aria-hidden":"true"},"#"),s(" Installing Dependencies")],-1),I=n("p",null,[s("To start using the wallet with a dapp, you can install "),n("code",null,"@toruslabs/solana-embed"),s(". You can use popular package managers like yarn and npm to download them.")],-1),K=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token function"},"yarn"),s(),n("span",{class:"token function"},"add"),s(` @toruslabs/solana-embed +import{_ as u,r as l,o as r,c as k,a as n,b as a,w as t,F as d,e as b,d as s}from"./app.2fbb9e96.js";var m="/assets/login-modal.dc11cad0.png";const h={},g=b('

    Wallet

    What is a wallet?

    A crypto wallet is a digital wallet used to interact with the blockchain. It allows you to sign, verify, and send transactions. There are many crypto wallet solutions present on the market, ranging from simple-to-use web apps to more complex hardware security solutions.

    Social Logins on Solana

    ',4),_={href:"https://docs.web3auth.io/",target:"_blank",rel:"noopener noreferrer"},y=n("strong",null,"Web3Auth",-1),w=s(" allows users to sign in using their existing Web2 OAuth Providers(Facebook, Google, Twitter etc.) into Web3 dapps. It provides a user-friendly and "),f={href:"https://docs.web3auth.io/key-infrastructure/overview",target:"_blank",rel:"noopener noreferrer"},v=s("non-custodial"),T=s(" approach to managing assets and identity. It removes technical barriers and reduces the learning curve for digital ownership for all users by providing a wrapper around private key management."),x=n("h2",{id:"integration-guide",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#integration-guide","aria-hidden":"true"},"#"),s(" Integration Guide")],-1),S=n("p",null,"This tutorial will guide you over a basic example to integrate social logins in your dapp.",-1),P=n("h3",{id:"installing-dependencies",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#installing-dependencies","aria-hidden":"true"},"#"),s(" Installing Dependencies")],-1),I=n("p",null,[s("To start using the wallet with a dapp, you can install "),n("code",null,"@toruslabs/solana-embed"),s(". You can use popular package managers like yarn and npm to download them.")],-1),K=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token function"},"yarn"),s(),n("span",{class:"token function"},"add"),s(` @toruslabs/solana-embed `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),A=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token function"},"npm"),s(),n("span",{class:"token function"},"install"),s(` --save @toruslabs/solana-embed `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),C=n("h3",{id:"import-the-sdk-and-initialize",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#import-the-sdk-and-initialize","aria-hidden":"true"},"#"),s(" Import the SDK and initialize")],-1),R=s("In the code snippet below, we are creating an instance of solana-embed and then initializing it with testing environment which uses solana testnet. You can pass other configuration options while initializing the wallet interface. You can refer to solana-embed "),B={href:"https://docs.tor.us/solana-wallet/api-reference/class",target:"_blank",rel:"noopener noreferrer"},G=s("api-reference"),L=s(" to know more on that."),E=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" clusterApi"),n("span",{class:"token punctuation"},","),s(" Connection "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` diff --git a/docs/.vuepress/dist/assets/web3auth.html.1e8a2baf.js b/docs/.vuepress/dist/assets/web3auth.html.a5374e0f.js similarity index 99% rename from docs/.vuepress/dist/assets/web3auth.html.1e8a2baf.js rename to docs/.vuepress/dist/assets/web3auth.html.a5374e0f.js index 2e72a4745..35a368912 100644 --- a/docs/.vuepress/dist/assets/web3auth.html.1e8a2baf.js +++ b/docs/.vuepress/dist/assets/web3auth.html.a5374e0f.js @@ -1,4 +1,4 @@ -import{_ as p,r as l,o as r,c as k,a as n,b as a,w as e,F as d,e as b,d as s}from"./app.cfdf84e7.js";var m="/assets/login-modal.dc11cad0.png";const h={},g=b('

    Wallet

    Was ist eine Brieftasche?

    Eine Krypto-Wallet ist eine digitale Geldb\xF6rse, die zur Interaktion mit der Blockchain verwendet wird. Es erm\xF6glicht Ihnen, Transaktionen zu signieren, zu verifizieren und zu senden. Es gibt viele Krypto-Wallet-L\xF6sungen auf dem Markt, die von einfach zu bedienenden Web-Apps bis hin zu komplexeren Hardware-Sicherheitsl\xF6sungen reichen.

    Soziale Logins auf Solana

    ',4),f={href:"https://docs.web3auth.io/",target:"_blank",rel:"noopener noreferrer"},_=n("strong",null,"Web3Auth",-1),w=s(" erm\xF6glicht es Benutzern, sich mit ihren bestehenden Web2-OAuth-Anbietern (Facebook, Google, Twitter usw.) bei Web3-Dapps anzumelden. Es bietet einen benutzerfreundlichen und "),y={href:"https://docs.web3auth.io/key-infrastructure/overview",target:"_blank",rel:"noopener noreferrer"},v=s("nicht verwahrungsfreien"),z=s(" Ansatz zur Verwaltung von Verm\xF6genswerten und Identit\xE4t. Es beseitigt technische Barrieren und reduziert die Lernkurve f\xFCr den digitalen Besitz f\xFCr alle Benutzer, indem es einen Wrapper f\xFCr die Verwaltung privater Schl\xFCssel bereitstellt."),S=n("h2",{id:"integrationsleitfaden",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#integrationsleitfaden","aria-hidden":"true"},"#"),s(" Integrationsleitfaden")],-1),T=n("p",null,"Dieses Tutorial f\xFChrt Sie durch ein einfaches Beispiel zur Integration von Social Logins in Ihre DApp.",-1),x=n("h3",{id:"abhangigkeiten-installieren",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#abhangigkeiten-installieren","aria-hidden":"true"},"#"),s(" Abh\xE4ngigkeiten installieren")],-1),I=n("p",null,[s("Um die Brieftasche mit einer DApp zu verwenden, k\xF6nnen Sie "),n("code",null,"@toruslabs/solana-embed"),s(" installieren. Sie k\xF6nnen g\xE4ngige Paketmanager wie Garn und npm verwenden, um sie herunterzuladen.")],-1),A=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token function"},"yarn"),s(),n("span",{class:"token function"},"add"),s(` @toruslabs/solana-embed +import{_ as p,r as l,o as r,c as k,a as n,b as a,w as e,F as d,e as b,d as s}from"./app.2fbb9e96.js";var m="/assets/login-modal.dc11cad0.png";const h={},g=b('

    Wallet

    Was ist eine Brieftasche?

    Eine Krypto-Wallet ist eine digitale Geldb\xF6rse, die zur Interaktion mit der Blockchain verwendet wird. Es erm\xF6glicht Ihnen, Transaktionen zu signieren, zu verifizieren und zu senden. Es gibt viele Krypto-Wallet-L\xF6sungen auf dem Markt, die von einfach zu bedienenden Web-Apps bis hin zu komplexeren Hardware-Sicherheitsl\xF6sungen reichen.

    Soziale Logins auf Solana

    ',4),f={href:"https://docs.web3auth.io/",target:"_blank",rel:"noopener noreferrer"},_=n("strong",null,"Web3Auth",-1),w=s(" erm\xF6glicht es Benutzern, sich mit ihren bestehenden Web2-OAuth-Anbietern (Facebook, Google, Twitter usw.) bei Web3-Dapps anzumelden. Es bietet einen benutzerfreundlichen und "),y={href:"https://docs.web3auth.io/key-infrastructure/overview",target:"_blank",rel:"noopener noreferrer"},v=s("nicht verwahrungsfreien"),z=s(" Ansatz zur Verwaltung von Verm\xF6genswerten und Identit\xE4t. Es beseitigt technische Barrieren und reduziert die Lernkurve f\xFCr den digitalen Besitz f\xFCr alle Benutzer, indem es einen Wrapper f\xFCr die Verwaltung privater Schl\xFCssel bereitstellt."),S=n("h2",{id:"integrationsleitfaden",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#integrationsleitfaden","aria-hidden":"true"},"#"),s(" Integrationsleitfaden")],-1),T=n("p",null,"Dieses Tutorial f\xFChrt Sie durch ein einfaches Beispiel zur Integration von Social Logins in Ihre DApp.",-1),x=n("h3",{id:"abhangigkeiten-installieren",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#abhangigkeiten-installieren","aria-hidden":"true"},"#"),s(" Abh\xE4ngigkeiten installieren")],-1),I=n("p",null,[s("Um die Brieftasche mit einer DApp zu verwenden, k\xF6nnen Sie "),n("code",null,"@toruslabs/solana-embed"),s(" installieren. Sie k\xF6nnen g\xE4ngige Paketmanager wie Garn und npm verwenden, um sie herunterzuladen.")],-1),A=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token function"},"yarn"),s(),n("span",{class:"token function"},"add"),s(` @toruslabs/solana-embed `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),B=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token function"},"npm"),s(),n("span",{class:"token function"},"install"),s(` --save @toruslabs/solana-embed `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),P=n("h3",{id:"importieren-sie-das-sdk-und-initialisieren-sie-es",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#importieren-sie-das-sdk-und-initialisieren-sie-es","aria-hidden":"true"},"#"),s(" Importieren Sie das SDK und initialisieren Sie es")],-1),K=s("Im folgenden Codeausschnitt erstellen wir eine Instanz von solana-embed und initialisieren sie dann mit einer Testumgebung, die solana testnet verwendet. Sie k\xF6nnen andere Konfigurationsoptionen \xFCbergeben, w\xE4hrend Sie die Wallet-Schnittstelle initialisieren. Weitere Informationen dazu finden Sie unter solana-embed "),W={href:"https://docs.tor.us/solana-wallet/api-reference/class",target:"_blank",rel:"noopener noreferrer"},E=s("api-reference"),M=s("."),C=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" clusterApi"),n("span",{class:"token punctuation"},","),s(" Connection "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` diff --git a/docs/.vuepress/dist/assets/web3auth.html.28d61b3d.js b/docs/.vuepress/dist/assets/web3auth.html.e0bca51a.js similarity index 99% rename from docs/.vuepress/dist/assets/web3auth.html.28d61b3d.js rename to docs/.vuepress/dist/assets/web3auth.html.e0bca51a.js index 714094c53..ef69cbf84 100644 --- a/docs/.vuepress/dist/assets/web3auth.html.28d61b3d.js +++ b/docs/.vuepress/dist/assets/web3auth.html.e0bca51a.js @@ -1,4 +1,4 @@ -import{_ as i,r as l,o as r,c as k,a as n,b as a,w as e,F as d,e as b,d as s}from"./app.cfdf84e7.js";var m="/assets/login-modal.dc11cad0.png";const h={},_=b('

    Portefeuille

    Qu'est-ce qu'un portefeuille ?

    Un portefeuille de crypto-monnaie est un portefeuille num\xE9rique utilis\xE9 pour interagir avec la blockchain. Il vous permet de signer, de v\xE9rifier et d'envoyer des transactions. Il existe de nombreuses solutions de portefeuille de crypto-monnaies sur le march\xE9, allant des applications web simples \xE0 utiliser aux solutions de s\xE9curit\xE9 mat\xE9rielle plus complexes.

    Connexions Sociales sur Solana

    ',4),g={href:"https://docs.web3auth.io/",target:"_blank",rel:"noopener noreferrer"},f=n("strong",null,"Web3Auth",-1),y=s(" permet aux utilisateurs de se connecter en utilisant leurs fournisseurs Web2 OAuth existants (Facebook, Google, Twitter, etc.) dans des applications Web3. Il offre une approche facile \xE0 utiliser et "),w={href:"https://docs.web3auth.io/key-infrastructure/overview",target:"_blank",rel:"noopener noreferrer"},v=s("non-custodial"),x=s(" de la gestion des actifs et de l'identit\xE9. Il supprime les obstacles techniques et r\xE9duit la courbe d'apprentissage de la propri\xE9t\xE9 num\xE9rique pour tous les utilisateurs en fournissant un cadre \xE0 la gestion des cl\xE9s priv\xE9es."),S=n("h2",{id:"guide-d-integration",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#guide-d-integration","aria-hidden":"true"},"#"),s(" Guide d'Int\xE9gration")],-1),T=n("p",null,"Ce tutoriel vous guidera \xE0 travers un exemple de base pour int\xE9grer les connexions sociales dans votre application.",-1),P=n("h3",{id:"installation-des-dependances",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#installation-des-dependances","aria-hidden":"true"},"#"),s(" Installation des D\xE9pendances")],-1),I=n("p",null,[s("Pour commencer \xE0 utiliser le portefeuille avec une dapp, vous pouvez installer "),n("code",null,"@toruslabs/solana-embed"),s(". Vous pouvez utiliser des gestionnaires de paquets connus comme yarn et npm pour les t\xE9l\xE9charger.")],-1),K=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token function"},"yarn"),s(),n("span",{class:"token function"},"add"),s(` @toruslabs/solana-embed +import{_ as i,r as l,o as r,c as k,a as n,b as a,w as e,F as d,e as b,d as s}from"./app.2fbb9e96.js";var m="/assets/login-modal.dc11cad0.png";const h={},_=b('

    Portefeuille

    Qu'est-ce qu'un portefeuille ?

    Un portefeuille de crypto-monnaie est un portefeuille num\xE9rique utilis\xE9 pour interagir avec la blockchain. Il vous permet de signer, de v\xE9rifier et d'envoyer des transactions. Il existe de nombreuses solutions de portefeuille de crypto-monnaies sur le march\xE9, allant des applications web simples \xE0 utiliser aux solutions de s\xE9curit\xE9 mat\xE9rielle plus complexes.

    Connexions Sociales sur Solana

    ',4),g={href:"https://docs.web3auth.io/",target:"_blank",rel:"noopener noreferrer"},f=n("strong",null,"Web3Auth",-1),y=s(" permet aux utilisateurs de se connecter en utilisant leurs fournisseurs Web2 OAuth existants (Facebook, Google, Twitter, etc.) dans des applications Web3. Il offre une approche facile \xE0 utiliser et "),w={href:"https://docs.web3auth.io/key-infrastructure/overview",target:"_blank",rel:"noopener noreferrer"},v=s("non-custodial"),x=s(" de la gestion des actifs et de l'identit\xE9. Il supprime les obstacles techniques et r\xE9duit la courbe d'apprentissage de la propri\xE9t\xE9 num\xE9rique pour tous les utilisateurs en fournissant un cadre \xE0 la gestion des cl\xE9s priv\xE9es."),S=n("h2",{id:"guide-d-integration",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#guide-d-integration","aria-hidden":"true"},"#"),s(" Guide d'Int\xE9gration")],-1),T=n("p",null,"Ce tutoriel vous guidera \xE0 travers un exemple de base pour int\xE9grer les connexions sociales dans votre application.",-1),P=n("h3",{id:"installation-des-dependances",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#installation-des-dependances","aria-hidden":"true"},"#"),s(" Installation des D\xE9pendances")],-1),I=n("p",null,[s("Pour commencer \xE0 utiliser le portefeuille avec une dapp, vous pouvez installer "),n("code",null,"@toruslabs/solana-embed"),s(". Vous pouvez utiliser des gestionnaires de paquets connus comme yarn et npm pour les t\xE9l\xE9charger.")],-1),K=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token function"},"yarn"),s(),n("span",{class:"token function"},"add"),s(` @toruslabs/solana-embed `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),q=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token function"},"npm"),s(),n("span",{class:"token function"},"install"),s(` --save @toruslabs/solana-embed `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),A=n("h3",{id:"importer-le-sdk-et-l-initialiser",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#importer-le-sdk-et-l-initialiser","aria-hidden":"true"},"#"),s(" Importer le SDK et l'initialiser")],-1),C=s("Dans l'extrait de code ci-dessous, nous cr\xE9ons une instance de solana-embed et l'initialisons avec l'environnement de test qui utilise le tesnet de Solana. Vous pouvez passer d'autres options de configuration lors de l'initialisation de l'interface du portefeuille. Vous pouvez vous r\xE9f\xE9rer \xE0 solana-embed "),L={href:"https://docs.tor.us/solana-wallet/api-reference/class",target:"_blank",rel:"noopener noreferrer"},R=s("api-reference"),B=s(" pour en savoir plus."),G=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" clusterApi"),n("span",{class:"token punctuation"},","),s(" Connection "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` diff --git a/docs/.vuepress/dist/assets/web3auth.html.5eb909b6.js b/docs/.vuepress/dist/assets/web3auth.html.e3fc1127.js similarity index 99% rename from docs/.vuepress/dist/assets/web3auth.html.5eb909b6.js rename to docs/.vuepress/dist/assets/web3auth.html.e3fc1127.js index 10500e3db..97f8a065f 100644 --- a/docs/.vuepress/dist/assets/web3auth.html.5eb909b6.js +++ b/docs/.vuepress/dist/assets/web3auth.html.e3fc1127.js @@ -1,4 +1,4 @@ -import{_ as u,r as l,o as r,c as k,a as n,b as a,w as t,F as d,e as b,d as s}from"./app.cfdf84e7.js";var m="/assets/login-modal.dc11cad0.png";const h={},g=b('

    Wallet

    What is a wallet?

    A crypto wallet is a digital wallet used to interact with the blockchain. It allows you to sign, verify, and send transactions. There are many crypto wallet solutions present on the market, ranging from simple-to-use web apps to more complex hardware security solutions.

    Social Logins on Solana

    ',4),_={href:"https://docs.web3auth.io/",target:"_blank",rel:"noopener noreferrer"},y=n("strong",null,"Web3Auth",-1),w=s(" allows users to sign in using their existing Web2 OAuth Providers(Facebook, Google, Twitter etc.) into Web3 dapps. It provides a user-friendly and "),f={href:"https://docs.web3auth.io/key-infrastructure/overview",target:"_blank",rel:"noopener noreferrer"},v=s("non-custodial"),T=s(" approach to managing assets and identity. It removes technical barriers and reduces the learning curve for digital ownership for all users by providing a wrapper around private key management."),x=n("h2",{id:"integration-guide",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#integration-guide","aria-hidden":"true"},"#"),s(" Integration Guide")],-1),S=n("p",null,"This tutorial will guide you over a basic example to integrate social logins in your dapp.",-1),P=n("h3",{id:"installing-dependencies",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#installing-dependencies","aria-hidden":"true"},"#"),s(" Installing Dependencies")],-1),I=n("p",null,[s("To start using the wallet with a dapp, you can install "),n("code",null,"@toruslabs/solana-embed"),s(". You can use popular package managers like yarn and npm to download them.")],-1),K=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token function"},"yarn"),s(),n("span",{class:"token function"},"add"),s(` @toruslabs/solana-embed +import{_ as u,r as l,o as r,c as k,a as n,b as a,w as t,F as d,e as b,d as s}from"./app.2fbb9e96.js";var m="/assets/login-modal.dc11cad0.png";const h={},g=b('

    Wallet

    What is a wallet?

    A crypto wallet is a digital wallet used to interact with the blockchain. It allows you to sign, verify, and send transactions. There are many crypto wallet solutions present on the market, ranging from simple-to-use web apps to more complex hardware security solutions.

    Social Logins on Solana

    ',4),_={href:"https://docs.web3auth.io/",target:"_blank",rel:"noopener noreferrer"},y=n("strong",null,"Web3Auth",-1),w=s(" allows users to sign in using their existing Web2 OAuth Providers(Facebook, Google, Twitter etc.) into Web3 dapps. It provides a user-friendly and "),f={href:"https://docs.web3auth.io/key-infrastructure/overview",target:"_blank",rel:"noopener noreferrer"},v=s("non-custodial"),T=s(" approach to managing assets and identity. It removes technical barriers and reduces the learning curve for digital ownership for all users by providing a wrapper around private key management."),x=n("h2",{id:"integration-guide",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#integration-guide","aria-hidden":"true"},"#"),s(" Integration Guide")],-1),S=n("p",null,"This tutorial will guide you over a basic example to integrate social logins in your dapp.",-1),P=n("h3",{id:"installing-dependencies",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#installing-dependencies","aria-hidden":"true"},"#"),s(" Installing Dependencies")],-1),I=n("p",null,[s("To start using the wallet with a dapp, you can install "),n("code",null,"@toruslabs/solana-embed"),s(". You can use popular package managers like yarn and npm to download them.")],-1),K=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token function"},"yarn"),s(),n("span",{class:"token function"},"add"),s(` @toruslabs/solana-embed `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),A=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token function"},"npm"),s(),n("span",{class:"token function"},"install"),s(` --save @toruslabs/solana-embed `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),C=n("h3",{id:"import-the-sdk-and-initialize",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#import-the-sdk-and-initialize","aria-hidden":"true"},"#"),s(" Import the SDK and initialize")],-1),R=s("In the code snippet below, we are creating an instance of solana-embed and then initializing it with testing enviroment which uses solana testnet. You can pass other configuration options while initializing the wallet interface. You can refer to solana-embed "),B={href:"https://docs.tor.us/solana-wallet/api-reference/class",target:"_blank",rel:"noopener noreferrer"},G=s("api-reference"),L=s(" to know more on that."),E=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" clusterApi"),n("span",{class:"token punctuation"},","),s(" Connection "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` diff --git a/docs/.vuepress/dist/assets/web3auth.html.f7f5a51b.js b/docs/.vuepress/dist/assets/web3auth.html.f6264781.js similarity index 99% rename from docs/.vuepress/dist/assets/web3auth.html.f7f5a51b.js rename to docs/.vuepress/dist/assets/web3auth.html.f6264781.js index b7787b539..e8c5fd6bc 100644 --- a/docs/.vuepress/dist/assets/web3auth.html.f7f5a51b.js +++ b/docs/.vuepress/dist/assets/web3auth.html.f6264781.js @@ -1,4 +1,4 @@ -import{_ as i,r as l,o as r,c as k,a as n,b as a,w as t,F as d,e as m,d as s}from"./app.cfdf84e7.js";var b="/assets/login-modal.dc11cad0.png";const g={},h=m('

    Wallet

    Apakah itu wallet?

    Dompet kripto (wallet) adalah dompet digital yang digunakan untuk berinteraksi dengan blockchain. Ini memungkinkan Anda untuk menandatangani, memverifikasi, dan mengirim transaksi. Ada banyak solusi wallet kripto yang ada di pasaran, mulai dari aplikasi web yang mudah digunakan hingga solusi keamanan perangkat keras yang lebih kompleks.

    Social Login di Solana

    ',4),_={href:"https://docs.web3auth.io/",target:"_blank",rel:"noopener noreferrer"},y=n("strong",null,"Web3Auth",-1),w=s(" mengizinkan pengguna untuk sign in menggunakan akun yang sudah ada dari Web2 OAuth Providers (Facebook, Google, Twitter, dan lainnya.) ke dalam aplikasi Web3. Ini menyediakan interface dan flow yang sangat memudahkan untuk user "),f={href:"https://docs.web3auth.io/key-infrastructure/overview",target:"_blank",rel:"noopener noreferrer"},v=s("overview"),S=s(" dengan pendekatkan untuk mengelola asset dan identitas user. Ini menghilangkan hambatan teknis dan mengurangi kurva pembelajaran untuk kepemilikan digital untuk semua pengguna dengan menyediakan pembungkus di sekitar manajemen kunci pribadi."),x=n("h2",{id:"panduan-integrasi",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#panduan-integrasi","aria-hidden":"true"},"#"),s(" Panduan Integrasi")],-1),T=n("p",null,"Tutorial ini akan memandu Anda tentang contoh dasar untuk mengintegrasikan social login di dapp Anda.",-1),P=n("h3",{id:"instal-dependensi",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#instal-dependensi","aria-hidden":"true"},"#"),s(" Instal Dependensi")],-1),I=n("p",null,[s("Untuk mulai menggunakan wallet dengan dapp, Anda dapat menginstal "),n("code",null,"@toruslabs/solana-embed"),s(".Anda dapat menggunakan pengelola paket populer seperti yarn dan npm untuk mengunduhnya.")],-1),A=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token function"},"yarn"),s(),n("span",{class:"token function"},"add"),s(` @toruslabs/solana-embed +import{_ as i,r as l,o as r,c as k,a as n,b as a,w as t,F as d,e as m,d as s}from"./app.2fbb9e96.js";var b="/assets/login-modal.dc11cad0.png";const g={},h=m('

    Wallet

    Apakah itu wallet?

    Dompet kripto (wallet) adalah dompet digital yang digunakan untuk berinteraksi dengan blockchain. Ini memungkinkan Anda untuk menandatangani, memverifikasi, dan mengirim transaksi. Ada banyak solusi wallet kripto yang ada di pasaran, mulai dari aplikasi web yang mudah digunakan hingga solusi keamanan perangkat keras yang lebih kompleks.

    Social Login di Solana

    ',4),_={href:"https://docs.web3auth.io/",target:"_blank",rel:"noopener noreferrer"},y=n("strong",null,"Web3Auth",-1),w=s(" mengizinkan pengguna untuk sign in menggunakan akun yang sudah ada dari Web2 OAuth Providers (Facebook, Google, Twitter, dan lainnya.) ke dalam aplikasi Web3. Ini menyediakan interface dan flow yang sangat memudahkan untuk user "),f={href:"https://docs.web3auth.io/key-infrastructure/overview",target:"_blank",rel:"noopener noreferrer"},v=s("overview"),S=s(" dengan pendekatkan untuk mengelola asset dan identitas user. Ini menghilangkan hambatan teknis dan mengurangi kurva pembelajaran untuk kepemilikan digital untuk semua pengguna dengan menyediakan pembungkus di sekitar manajemen kunci pribadi."),x=n("h2",{id:"panduan-integrasi",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#panduan-integrasi","aria-hidden":"true"},"#"),s(" Panduan Integrasi")],-1),T=n("p",null,"Tutorial ini akan memandu Anda tentang contoh dasar untuk mengintegrasikan social login di dapp Anda.",-1),P=n("h3",{id:"instal-dependensi",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#instal-dependensi","aria-hidden":"true"},"#"),s(" Instal Dependensi")],-1),I=n("p",null,[s("Untuk mulai menggunakan wallet dengan dapp, Anda dapat menginstal "),n("code",null,"@toruslabs/solana-embed"),s(".Anda dapat menggunakan pengelola paket populer seperti yarn dan npm untuk mengunduhnya.")],-1),A=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token function"},"yarn"),s(),n("span",{class:"token function"},"add"),s(` @toruslabs/solana-embed `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),K=n("div",{class:"language-bash ext-sh line-numbers-mode"},[n("pre",{class:"language-bash"},[n("code",null,[n("span",{class:"token function"},"npm"),s(),n("span",{class:"token function"},"install"),s(` --save @toruslabs/solana-embed `)])]),n("div",{class:"line-numbers","aria-hidden":"true"},[n("span",{class:"line-number"},"1"),n("br")])],-1),C=n("h3",{id:"import-sdk-dan-initialize",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#import-sdk-dan-initialize","aria-hidden":"true"},"#"),s(" Import SDK dan initialize")],-1),M=n("p",null,"Dalam cuplikan kode di bawah ini, kami membuat instance dari solana-embed dan kemudian menginisialisasinya dengan lingkungan pengujian yang menggunakan solana testnet. Anda dapat melewati opsi konfigurasi lain saat menginisialisasi antarmuka wallet. Anda dapat merujuk ke solana-embed.",-1),j=s("Rerensi untuk solana-embed "),R={href:"https://docs.tor.us/solana-wallet/api-reference/class",target:"_blank",rel:"noopener noreferrer"},B=s("api-reference"),L=s(" untuk membaca lebih lanjut."),G=n("div",{class:"language-typescript ext-ts line-numbers-mode"},[n("pre",{class:"language-typescript"},[n("code",null,[n("span",{class:"token keyword"},"import"),s(),n("span",{class:"token punctuation"},"{"),s(" clusterApi"),n("span",{class:"token punctuation"},","),s(" Connection "),n("span",{class:"token punctuation"},"}"),s(),n("span",{class:"token keyword"},"from"),s(),n("span",{class:"token string"},'"@solana/web3.js"'),n("span",{class:"token punctuation"},";"),s(` diff --git a/docs/.vuepress/dist/core-concepts/accounts.html b/docs/.vuepress/dist/core-concepts/accounts.html index a2f6a5aee..f1d7ba7a0 100644 --- a/docs/.vuepress/dist/core-concepts/accounts.html +++ b/docs/.vuepress/dist/core-concepts/accounts.html @@ -23,11 +23,11 @@ } Accounts | Solana Cookbook - + -

    Accounts

    Accounts within Solana are used to store state. They are an essential building block for developing on Solana.

    Facts

    Fact Sheet

    • Accounts are used to store data
    • Each account has a unique address
    • Accounts have a max size of 10MB (10 Mega Bytes)
    • PDA accounts have a max size of 10KB (10 Kilo Bytes)
    • PDA accounts can be used to sign on behalf of a program
    • Accounts size are fixed at creation time, but can be adjusted using reallocopen in new window
    • Account data storage is paid with rent
    • Default account owner is the System Program

    Deep Dive

    Account Model

    There are 3 kinds of accounts on Solana:

    • Data accounts store data
    • Program accounts store executable programs
    • Native accounts that indicate native programs on Solana such as System, Stake, and Vote

    Within data accounts, there are 2 types:

    • System owned accounts
    • PDA (Program Derived Address) accounts

    Each account has an address (usually a public key) and an owner (address of a program account). The full field list an account stores is found below.

    FieldDescription
    lamportsThe number of lamports owned by this account
    ownerThe program owner of this account
    executableWhether this account can process instructions
    dataThe raw data byte array stored by this account
    rent_epochThe next epoch that this account will owe rent

    There are a few important ownership rules:

    • Only a data account's owner can modify its data and debit lamports
    • Anyone is allowed to credit lamports to a data account
    • The owner of an account may assign a new owner if the account's data is zeroed out

    Program accounts do not store state.

    For example, if you have a counter program that lets you increment a counter, you must create two accounts, one account to store the program's code, and one to store the counter.

    To prevent an account from being deleted, you must pay rent.

    Rent

    Storing data on accounts costs SOL to maintain, and it is funded by what is called rent. If you maintain a minimum balance equivalent to 2 years of rent payments in an account, your account will be exempt from paying rent. You can retrieve rent by closing the account and sending the lamports back to your wallet.

    Rent is paid during two different timings:

    1. When referenced by a transaction
    2. Once an epoch

    A percentage of rent collected by accounts is destroyed, while the rest is distributed to vote accounts at the end of every slot.

    If the account does not have enough to pay rent, the account will be deallocated and the data removed.

    It is also important to note that new accounts must be rent exempt.

    Other Resources

    Credit

    This core concept is credited to Pencilflip. Follow him on Twitteropen in new window.

    Last Updated:
    - +

    Accounts

    Accounts within Solana are used to store state. They are an essential building block for developing on Solana.

    Facts

    Fact Sheet

    • Accounts are used to store data
    • Each account has a unique address
    • Accounts have a max size of 10MB (10 Mega Bytes)
    • PDA accounts have a max size of 10KB (10 Kilo Bytes)
    • PDA accounts can be used to sign on behalf of a program
    • Accounts size are fixed at creation time, but can be adjusted using reallocopen in new window
    • Account data storage is paid with rent
    • Default account owner is the System Program

    Deep Dive

    Account Model

    There are 3 kinds of accounts on Solana:

    • Data accounts store data
    • Program accounts store executable programs
    • Native accounts that indicate native programs on Solana such as System, Stake, and Vote

    Within data accounts, there are 2 types:

    • System owned accounts
    • PDA (Program Derived Address) accounts

    Each account has an address (usually a public key) and an owner (address of a program account). The full field list an account stores is found below.

    FieldDescription
    lamportsThe number of lamports owned by this account
    ownerThe program owner of this account
    executableWhether this account can process instructions
    dataThe raw data byte array stored by this account
    rent_epochThe next epoch that this account will owe rent

    There are a few important ownership rules:

    • Only a data account's owner can modify its data and debit lamports
    • Anyone is allowed to credit lamports to a data account
    • The owner of an account may assign a new owner if the account's data is zeroed out

    Program accounts do not store state.

    For example, if you have a counter program that lets you increment a counter, you must create two accounts, one account to store the program's code, and one to store the counter.

    To prevent an account from being deleted, you must pay rent.

    Rent

    Storing data on accounts costs SOL to maintain, and it is funded by what is called rent. If you maintain a minimum balance equivalent to 2 years of rent payments in an account, your account will be exempt from paying rent. You can retrieve rent by closing the account and sending the lamports back to your wallet.

    Rent is paid during two different timings:

    1. When referenced by a transaction
    2. Once an epoch

    A percentage of rent collected by accounts is destroyed, while the rest is distributed to vote accounts at the end of every slot.

    If the account does not have enough to pay rent, the account will be deallocated and the data removed.

    It is also important to note that new accounts must be rent exempt.

    Other Resources

    Credit

    This core concept is credited to Pencilflip. Follow him on Twitteropen in new window.

    Last Updated:
    + diff --git a/docs/.vuepress/dist/core-concepts/cpi.html b/docs/.vuepress/dist/core-concepts/cpi.html new file mode 100644 index 000000000..24b178209 --- /dev/null +++ b/docs/.vuepress/dist/core-concepts/cpi.html @@ -0,0 +1,97 @@ + + + + + + + + + Cross Program Invocations (CPIs) | Solana Cookbook + + + + +

    Cross Program Invocations (CPIs)

    A Cross-Program Invocation (CPI) is a direct call from one program into another, allowing for the composability of Solana programs. Just as any client can call any program using the JSON RPC, any program can call any other program via a CPI. CPIs essentially turn the entire Solana ecosystem into one giant API that is at your disposal as a developer.

    The purpose of this section is to provide a high-level overview CPIs. Please refer to the linked resources below for more detailed explanations, examples, and walkthroughs.

    Facts

    Fact Sheet

    • A Cross-Program Invocation (CPI) is a call from one program to another, targeting a specific instruction on the program being called
    • CPIs allow the calling program to extend its signer privileges to the callee program
    • Programs can execute CPIs using either invoke or invoke_signed within their instructions
    • invoke is used when all required signatures are accessible prior to invocation, without the need for PDAs to act as signers
    • invoke_signed is used when PDAs from the calling program are required as signers in the CPI
    • After a CPI is made to another program, the callee program can make further CPIs to other programs, up to a maximum depth of 4

    Deep Dive

    Cross Program Invocations (CPIs) enable the composability of Solana programs, which allow developers to utilize and build on the instruction of existing programs.

    To execute CPIs, use the invokeopen in new window or invoke_signedopen in new window function found in the solana_program crate.

    // Used when there are not signatures for PDAs needed
    +pub fn invoke(
    +    instruction: &Instruction,
    +    account_infos: &[AccountInfo<'_>]
    +) -> ProgramResult
    +
    +// Used when a program must provide a 'signature' for a PDA, hence the signer_seeds parameter
    +pub fn invoke_signed(
    +    instruction: &Instruction,
    +    account_infos: &[AccountInfo<'_>],
    +    signers_seeds: &[&[&[u8]]]
    +) -> ProgramResult
    +

    To make a CPI, you must specify and construct an instruction on the program being invoked and supply a list of accounts necessary for that instruction. If a PDA is required as a signer, the signers_seeds must also be provided when using invoke_signed.

    CPI with invoke

    The invoke function is used when making a CPI that does not require any PDAs to act as signers. When making CPIs, the Solana runtime extends the original signature passed into a program to the callee program.

    invoke(
    +    &some_instruction,                           // instruction to invoke
    +    &[account_one.clone(), account_two.clone()], // accounts required by instruction
    +)?;
    +

    CPI with invoke_signed

    To make a CPI that requires a PDA as a signer, use the invoke_signed function and provide the necessary seeds to derive the required PDA of the calling program.

    invoke_signed(
    +    &some_instruction,                   // instruction to invoke
    +    &[account_one.clone(), pda.clone()], // accounts required by instruction, where one is a pda required as signer
    +    &[signers_seeds],                    // seeds to derive pda
    +)?;
    +

    While PDAs have no private keys of their own, they can still act as a signer in an instruction via a CPI. To verify that a PDA belongs to the calling program, the seeds used to generate the PDA required as a signer must be included in as signers_seeds.

    The Solana runtime will internally call create_program_address using the seeds provided and the program_id of the calling program. The resulting PDA is then compared to the addresses supplied in the instruction. If there's a match, the PDA is considered a valid signer.

    CPI Instruction

    Depending on the program you're making the call to, there may be a crate available with helper functions for creating the Instruction. Many individuals and organizations create publicly available crates alongside their programs that expose these sorts of functions to simplify calling their programs.

    The definition of the Instruction type required for a CPI includes:

    • program_id - the public key of the program that executes the instruction
    • accounts - a list of all accounts that may be read or written to during the execution of the instruction
    • data - the instruction data required by the instruction
    pub struct Instruction {
    +    pub program_id: Pubkey,
    +    pub accounts: Vec<AccountMeta>,
    +    pub data: Vec<u8>,
    +}
    +

    The AccountMeta struct has the following definition:

    pub struct AccountMeta {
    +    pub pubkey: Pubkey,
    +    pub is_signer: bool,
    +    pub is_writable: bool,
    +}
    +

    When creating a CPI, use the following syntax to specify the AccountMeta for each account:

    • AccountMeta::new - indicates writable
    • AccountMeta::new_readonly - indicates not writable
    • (pubkey, true) - indicates account is signer
    • (pubkey, false) - indicates account is not signer

    Here is an example:

    use solana_program::instruction::AccountMeta;
    +
    +let account_metas = vec![
    +    AccountMeta::new(account1_pubkey, true),
    +    AccountMeta::new(account2_pubkey, false),
    +    AccountMeta::new_readonly(account3_pubkey, false),
    +    AccountMeta::new_readonly(account4_pubkey, true),
    +]
    +

    CPI AccountInfo

    To use invoke and invoke_signed, a list of account_infos is also required. Similar to the list of AccountMeta in the instruction, you need to include all the AccountInfo of each account that the program you're calling will read from or write to.

    For reference, the AccountInfo struct has the following definition:

    /// Account information
    +#[derive(Clone)]
    +pub struct AccountInfo<'a> {
    +    /// Public key of the account
    +    pub key: &'a Pubkey,
    +    /// Was the transaction signed by this account's public key?
    +    pub is_signer: bool,
    +    /// Is the account writable?
    +    pub is_writable: bool,
    +    /// The lamports in the account.  Modifiable by programs.
    +    pub lamports: Rc<RefCell<&'a mut u64>>,
    +    /// The data held in this account.  Modifiable by programs.
    +    pub data: Rc<RefCell<&'a mut [u8]>>,
    +    /// Program that owns this account
    +    pub owner: &'a Pubkey,
    +    /// This account's data contains a loaded program (and is now read-only)
    +    pub executable: bool,
    +    /// The epoch at which this account will next owe rent
    +    pub rent_epoch: Epoch,
    +}
    +

    You can create a copy of the AccountInfo for each required account using the Cloneopen in new window trait, which is implemented for the AccountInfoopen in new window struct in the solana_program crate.

    let accounts_infos = [
    +    account_one.clone(),
    +    account_two.clone(),
    +    account_three.clone(),
    +];
    +

    While this section has provided a high-level overview of CPIs, more detailed explanations, examples, and walkthroughs can be found in the linked resources below.

    Other Resources

    Last Updated:
    + + + diff --git a/docs/.vuepress/dist/core-concepts/pdas.html b/docs/.vuepress/dist/core-concepts/pdas.html index 13a540994..9774a7bcf 100644 --- a/docs/.vuepress/dist/core-concepts/pdas.html +++ b/docs/.vuepress/dist/core-concepts/pdas.html @@ -23,11 +23,11 @@ } Program Derived Addresses (PDAs) | Solana Cookbook - + -

    Program Derived Addresses (PDAs)

    Program Derived Addresses (PDAs) are home to accounts that are designed to be controlled by a specific program. With PDAs, programs can programmatically sign for certain addresses without needing a private key. PDAs serve as the foundation for Cross-Program Invocationopen in new window, which allows Solana apps to be composable with one another.

    Facts

    Fact Sheet

    • PDAs are 32 byte strings that look like public keys, but don’t have corresponding private keys
    • findProgramAddress will deterministically derive a PDA from a programId and seeds (collection of bytes)
    • A bump (one byte) is used to push a potential PDA off the ed25519 elliptic curve
    • Programs can sign for their PDAs by providing the seeds and bump to invoke_signedopen in new window
    • A PDA can only be signed by the program from which it was derived
    • In addition to allowing for programs to sign for different instructions, PDAs also provide a hashmap-like interface for indexing accounts

    Deep Dive

    PDAs are an essential building block for developing programs on Solana. With PDAs, programs can sign for accounts while guaranteeing that no external user could also generate a valid signature for the same account. In addition to signing for accounts, certain programs can also modify accounts held at their PDAs.

    Accounts matrix

    Image courtesy of Pencilflip

    Generating PDAs

    To understand the concept behind PDAs, it may be helpful to consider that PDAs are not technically created, but rather found. PDAs are generated from a combination of seeds (such as the string “vote_account”) and a program id. This combination of seeds and program id is then run through a sha256 hash function to see whether or not they generate a public key that lies on the ed25519 elliptic curve.

    In running our program id and seeds through a hash function, there is a ~50% chance that we actually end up with a valid public key that does lie on the elliptic curve. In this case, we simply add something to fudge our input a little bit and try again. The technical term for this fudge factor is a bump. In Solana, we start with bump = 255 and simply iterate down through bump = 254, bump = 253, etc. until we get an address that is not on the elliptic curve. This may seem rudimentary, but once found it gives us a deterministic way of deriving the same PDA over and over again.

    PDA on the ellipitic curve

    Interacting with PDAs

    When a PDA is generated, findProgramAddress will return both the address and the bump used to kick the address off of the elliptic curve. Armed with this bump, a program can then sign for any instruction that requires its PDA. In order to sign, programs should pass the instruction, the list of accounts, and the seeds and bump used to derive the PDA to invoke_signed. In addition to signing for instructions, PDAs must also sign for their own creation via invoke_signed.

    When building with PDAs, it is common to store the bump seedopen in new window in the account data itself. This allows developers to easily validate a PDA without having to pass in the bump as an instruction argument.

    Other Resources

    Last Updated:
    - +

    Program Derived Addresses (PDAs)

    Program Derived Addresses (PDAs) are home to accounts that are designed to be controlled by a specific program. With PDAs, programs can programmatically sign for certain addresses without needing a private key. PDAs serve as the foundation for Cross-Program Invocationopen in new window, which allows Solana apps to be composable with one another.

    Facts

    Fact Sheet

    • PDAs are 32 byte strings that look like public keys, but don’t have corresponding private keys
    • findProgramAddress will deterministically derive a PDA from a programId and seeds (collection of bytes)
    • A bump (one byte) is used to push a potential PDA off the ed25519 elliptic curve
    • Programs can sign for their PDAs by providing the seeds and bump to invoke_signedopen in new window
    • A PDA can only be signed by the program from which it was derived
    • In addition to allowing for programs to sign for different instructions, PDAs also provide a hashmap-like interface for indexing accounts

    Deep Dive

    PDAs are an essential building block for developing programs on Solana. With PDAs, programs can sign for accounts while guaranteeing that no external user could also generate a valid signature for the same account. In addition to signing for accounts, certain programs can also modify accounts held at their PDAs.

    Accounts matrix

    Image courtesy of Pencilflip

    Generating PDAs

    To understand the concept behind PDAs, it may be helpful to consider that PDAs are not technically created, but rather found. PDAs are generated from a combination of seeds (such as the string “vote_account”) and a program id. This combination of seeds and program id is then run through a sha256 hash function to see whether or not they generate a public key that lies on the ed25519 elliptic curve.

    In running our program id and seeds through a hash function, there is a ~50% chance that we actually end up with a valid public key that does lie on the elliptic curve. In this case, we simply add something to fudge our input a little bit and try again. The technical term for this fudge factor is a bump. In Solana, we start with bump = 255 and simply iterate down through bump = 254, bump = 253, etc. until we get an address that is not on the elliptic curve. This may seem rudimentary, but once found it gives us a deterministic way of deriving the same PDA over and over again.

    PDA on the ellipitic curve

    Interacting with PDAs

    When a PDA is generated, findProgramAddress will return both the address and the bump used to kick the address off of the elliptic curve. Armed with this bump, a program can then sign for any instruction that requires its PDA. In order to sign, programs should pass the instruction, the list of accounts, and the seeds and bump used to derive the PDA to invoke_signed. In addition to signing for instructions, PDAs must also sign for their own creation via invoke_signed.

    When building with PDAs, it is common to store the bump seedopen in new window in the account data itself. This allows developers to easily validate a PDA without having to pass in the bump as an instruction argument.

    Other Resources

    Last Updated:
    + diff --git a/docs/.vuepress/dist/core-concepts/programs.html b/docs/.vuepress/dist/core-concepts/programs.html index 80021b416..8285f100d 100644 --- a/docs/.vuepress/dist/core-concepts/programs.html +++ b/docs/.vuepress/dist/core-concepts/programs.html @@ -23,12 +23,12 @@ } Programs | Solana Cookbook - + -

    Programs

    Any developer can write and deploy programs to the Solana blockchain. Programs (known as smart contracts on other protocols) serve as the foundation for on-chain activity, powering anything from DeFi and NFTs to Social Media and Gaming.

    Facts

    Fact Sheet

    • Programs process instructions from both end users and other programs
    • All programs are stateless: any data they interact with is stored in separate accounts that are passed in via instructions
    • Programs themselves are stored in accounts marked as executable
    • All programs are owned by the BPF Loaderopen in new window and executed by the Solana Runtimeopen in new window
    • Developers most commonly write programs in Rust or C++, but can choose any language that targets the LLVMopen in new window's BPFopen in new window backend
    • All programs have a single entry point where instruction processing takes place (i.e. process_instruction); parameters always include:
      • program_id: pubkey
      • accounts: array,
      • instruction_data: byte array

    Deep Dive

    Unlike most other blockchains, Solana completely separates code from data. All data that programs interact with are stored in separate accounts and passed in as references via instructions. This model allows for a single generic program to operate across various accounts without requiring additional deployments. Common examples of this pattern are seen across the Native and SPL Programs.

    Native Programs & The Solana Program Library (SPL)

    Solana comes equipped with a number of programs that serve as core building blocks for on-chain interactions. These programs are divided into Native Programsopen in new window and Solana Program Library (SPL) Programsopen in new window.

    Native Programs provide the base functionality that is required to operate validators. Among these programs, the most well known is the System Programopen in new window which is responsible for administering new accounts and transferring SOL between two parties.

    SPL Programs support a number of on-chain activities, including creating, swapping, and lending tokens, as well as generating stake pools and maintaining an on-chain name service. The SPL Token Programopen in new window can be invoked directly via the CLI, while others like the Associated Token Account Programopen in new window are usually composed with custom programs.

    Writing Programs

    Programs are most commonly developed with Rust or C++, but can be developed with any language that targets the LLVM’s BPF backend. Recent initiatives by Neon Labsopen in new window and Solangopen in new window enable EVMopen in new window compatibility and allow developers to write programs in Solidity.

    Most Rust-based programs adhere to the following architecture:

    FileDescription
    lib.rsRegistering modules
    entrypoint.rsEntrypoint to the program
    instruction.rsProgram API, (de)serializing instruction data
    processor.rsProgram logic
    state.rsProgram objects, (de)serializing state
    error.rsProgram-specific errors

    Recently, Anchoropen in new window has emerged as a popular framework for developing programs. Anchor is an opinionated framework, akin to Ruby on Rails, that reduces boilerplate and streamlines the (de)serialization process for Rust-based development.

    Programs are usually developed and tested against Localhost and Devnet environments before being deployed to Testnet or Mainnet. Solana supports the following environments:

    Cluster EnvironmentRPC Connection URL
    Mainnet-betahttps://api.mainnet-beta.solana.com
    Testnethttps://api.testnet.solana.com
    Devnethttps://api.devnet.solana.com
    LocalhostDefault port: 8899 (e.g. http://localhost:8899, http://192.168.1.88:8899)

    Once deployed to an environment, clients can interact with on-chain programs via RPC connectionsopen in new window to the respective cluster.

    Deploying Programs

    Developers can deploy their programs via the CLIopen in new window:

    solana program deploy <PROGRAM_FILEPATH>
    +    

    Programs

    Any developer can write and deploy programs to the Solana blockchain. Programs (known as smart contracts on other protocols) serve as the foundation for on-chain activity, powering anything from DeFi and NFTs to Social Media and Gaming.

    Facts

    Fact Sheet

    • Programs process instructions from both end users and other programs
    • All programs are stateless: any data they interact with is stored in separate accounts that are passed in via instructions
    • Programs themselves are stored in accounts marked as executable
    • All programs are owned by the BPF Loaderopen in new window and executed by the Solana Runtimeopen in new window
    • Developers most commonly write programs in Rust or C++, but can choose any language that targets the LLVMopen in new window's BPFopen in new window backend
    • All programs have a single entry point where instruction processing takes place (i.e. process_instruction); parameters always include:
      • program_id: pubkey
      • accounts: array,
      • instruction_data: byte array

    Deep Dive

    Unlike most other blockchains, Solana completely separates code from data. All data that programs interact with are stored in separate accounts and passed in as references via instructions. This model allows for a single generic program to operate across various accounts without requiring additional deployments. Common examples of this pattern are seen across the Native and SPL Programs.

    Native Programs & The Solana Program Library (SPL)

    Solana comes equipped with a number of programs that serve as core building blocks for on-chain interactions. These programs are divided into Native Programsopen in new window and Solana Program Library (SPL) Programsopen in new window.

    Native Programs provide the base functionality that is required to operate validators. Among these programs, the most well known is the System Programopen in new window which is responsible for administering new accounts and transferring SOL between two parties.

    SPL Programs support a number of on-chain activities, including creating, swapping, and lending tokens, as well as generating stake pools and maintaining an on-chain name service. The SPL Token Programopen in new window can be invoked directly via the CLI, while others like the Associated Token Account Programopen in new window are usually composed with custom programs.

    Writing Programs

    Programs are most commonly developed with Rust or C++, but can be developed with any language that targets the LLVM’s BPF backend. Recent initiatives by Neon Labsopen in new window and Solangopen in new window enable EVMopen in new window compatibility and allow developers to write programs in Solidity.

    Most Rust-based programs adhere to the following architecture:

    FileDescription
    lib.rsRegistering modules
    entrypoint.rsEntrypoint to the program
    instruction.rsProgram API, (de)serializing instruction data
    processor.rsProgram logic
    state.rsProgram objects, (de)serializing state
    error.rsProgram-specific errors

    Recently, Anchoropen in new window has emerged as a popular framework for developing programs. Anchor is an opinionated framework, akin to Ruby on Rails, that reduces boilerplate and streamlines the (de)serialization process for Rust-based development.

    Programs are usually developed and tested against Localhost and Devnet environments before being deployed to Testnet or Mainnet. Solana supports the following environments:

    Cluster EnvironmentRPC Connection URL
    Mainnet-betahttps://api.mainnet-beta.solana.com
    Testnethttps://api.testnet.solana.com
    Devnethttps://api.devnet.solana.com
    LocalhostDefault port: 8899 (e.g. http://localhost:8899, http://192.168.1.88:8899)

    Once deployed to an environment, clients can interact with on-chain programs via RPC connectionsopen in new window to the respective cluster.

    Deploying Programs

    Developers can deploy their programs via the CLIopen in new window:

    solana program deploy <PROGRAM_FILEPATH>
     

    When a program is deployed, it is compiled to an ELF shared objectopen in new window (containing BPF bytecode) and uploaded to the Solana cluster. Programs live in accounts (much like everything else on Solana), except these accounts are marked as executable and assigned to the BPF Loader. The address of this account is referred to as the program_id and is used to reference the program in all future transactions.

    Solana supports multiple BPF Loaders, with the latest being the Upgradable BPF Loaderopen in new window. The BPF Loader is responsible for administering the program’s account and making it available to clients via the program_id. All programs have a single entry point where instruction processing takes place (i.e. process_instruction) and parameters always include:

    • program_id: pubkey
    • accounts: array,
    • instruction_data: byte array

    Once invoked, programs are executed by the Solana Runtime.

    Other Resources

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/core-concepts/transactions.html b/docs/.vuepress/dist/core-concepts/transactions.html index cb5229a30..05d5d64fc 100644 --- a/docs/.vuepress/dist/core-concepts/transactions.html +++ b/docs/.vuepress/dist/core-concepts/transactions.html @@ -23,11 +23,11 @@ } Transactions | Solana Cookbook - + -

    Transactions

    Clients can invoke programs by submitting a transaction to a cluster. A single transaction can include multiple instructions, each targeting its own program. When a transaction is submitted, the Solana Runtimeopen in new window will process its instructions in order and atomically. If any part of an instruction fails, the entire transaction will fail.

    Facts

    Fact Sheet

    • Instructions are the most basic operational unit on Solana
    • Each instruction contains:
      • The program_id of the intended program
      • An array of all accounts it intends to read from or write to
      • An instruction_data byte array that is specific to the intended program
    • Multiple instructions can be bundled into a single transaction
    • Each transaction contains:
      • An array of all accounts it intends to read from or write to
      • One or more instructions
      • A recent blockhash
      • One or more signatures
    • Instructions are processed in order and atomically
    • If any part of an instruction fails, the entire transaction fails.
    • Transactions are limited to 1232 bytes

    Deep Dive

    The Solana Runtime requires both instructions and transactions to specify a list of all accounts they intended to read from or write to. By requiring these accounts in advance, the runtime is able to parallelize execution across all transactions.

    When a transaction is submitted to a cluster, the runtime will process its instructions in order and atomically. For each instruction, the receiving program will interpret its data array and operate on its specified accounts. The program will either return successfully or with an error code. If an error is returned, the entire transaction will fail immediately.

    Any transaction that aims to debit an account or modify its data requires the signature of its account holder. Any account that will be modified is marked as writable. An account can be credited without the holder’s permission so long as the transaction fee payer covers the necessary rent and transaction fees.

    Before submission, all transactions must reference a recent blockhashopen in new window. The blockhash is used to prevent duplications and eliminate stale transactions. The max age of a transaction's blockhash is 150 blocks, or about ~1 minute 19 seconds as of the time of this writing.

    Fees

    The Solana network collects two types of fees:

    In Solana, transaction fees are deterministic: there is no concept of a fee market in which users can pay higher fees to increase their chances of being included in the next block. At the time of this writing, transaction fees are determined only by the number of signatures required (i.e. lamports_per_signature), not by the amount of resources used. This is because there is currently a hard cap of 1232 bytes on all transactions.

    All transactions require at least one writable account to sign the transaction. Once submitted, the writable signer account that is serialized first will be the fee payer. This account will pay for the cost of the transaction regardless of whether the transaction succeeds or fails. If the fee payer does not have a sufficient balance to pay the transaction fee, the transaction will be dropped.

    At the time of this writing, 50% of all transaction fees are collected by the validator that produces the block, while the remaining 50% are burned. This structure works to incentivize validators to process as many transactions as possible during their slots in the leader schedule.

    Other Resources

    Last Updated:
    - +

    Transactions

    Clients can invoke programs by submitting a transaction to a cluster. A single transaction can include multiple instructions, each targeting its own program. When a transaction is submitted, the Solana Runtimeopen in new window will process its instructions in order and atomically. If any part of an instruction fails, the entire transaction will fail.

    Facts

    Fact Sheet

    • Instructions are the most basic operational unit on Solana
    • Each instruction contains:
      • The program_id of the intended program
      • An array of all accounts it intends to read from or write to
      • An instruction_data byte array that is specific to the intended program
    • Multiple instructions can be bundled into a single transaction
    • Each transaction contains:
      • An array of all accounts it intends to read from or write to
      • One or more instructions
      • A recent blockhash
      • One or more signatures
    • Instructions are processed in order and atomically
    • If any part of an instruction fails, the entire transaction fails.
    • Transactions are limited to 1232 bytes

    Deep Dive

    The Solana Runtime requires both instructions and transactions to specify a list of all accounts they intended to read from or write to. By requiring these accounts in advance, the runtime is able to parallelize execution across all transactions.

    When a transaction is submitted to a cluster, the runtime will process its instructions in order and atomically. For each instruction, the receiving program will interpret its data array and operate on its specified accounts. The program will either return successfully or with an error code. If an error is returned, the entire transaction will fail immediately.

    Any transaction that aims to debit an account or modify its data requires the signature of its account holder. Any account that will be modified is marked as writable. An account can be credited without the holder’s permission so long as the transaction fee payer covers the necessary rent and transaction fees.

    Before submission, all transactions must reference a recent blockhashopen in new window. The blockhash is used to prevent duplications and eliminate stale transactions. The max age of a transaction's blockhash is 150 blocks, or about ~1 minute 19 seconds as of the time of this writing.

    Fees

    The Solana network collects two types of fees:

    In Solana, transaction fees are deterministic: there is no concept of a fee market in which users can pay higher fees to increase their chances of being included in the next block. At the time of this writing, transaction fees are determined only by the number of signatures required (i.e. lamports_per_signature), not by the amount of resources used. This is because there is currently a hard cap of 1232 bytes on all transactions.

    All transactions require at least one writable account to sign the transaction. Once submitted, the writable signer account that is serialized first will be the fee payer. This account will pay for the cost of the transaction regardless of whether the transaction succeeds or fails. If the fee payer does not have a sufficient balance to pay the transaction fee, the transaction will be dropped.

    At the time of this writing, 50% of all transaction fees are collected by the validator that produces the block, while the remaining 50% are burned. This structure works to incentivize validators to process as many transactions as possible during their slots in the leader schedule.

    Other Resources

    Last Updated:
    + diff --git a/docs/.vuepress/dist/de/core-concepts/accounts.html b/docs/.vuepress/dist/de/core-concepts/accounts.html index 9e50fd126..e9282a569 100644 --- a/docs/.vuepress/dist/de/core-concepts/accounts.html +++ b/docs/.vuepress/dist/de/core-concepts/accounts.html @@ -23,11 +23,11 @@ } Accounts | Solana Cookbook - +

    Accounts

    Accounts innerhalb von Solana werden zum Speichern des Zustands verwendet. Sie sind ein wesentlicher Baustein für die Entwicklung auf Solana.

    Fakten

    Fact Sheet

    • Accounts werden genutzt um Daten zu speichern
    • Jedes Konto hat eine eindeutige (einmalig vorhandene) Adresse
    • Accounts haben eine maximale Größe von 10MB (10 Mega Bytes)
    • PDA Accounts haben eine maximale Größe von 10KB (10 Kilo Bytes)
    • PDA Accounts können verwendet werden, um im Namen eines Programms zu signieren
    • Accountgrößen sind bei erstellung festgelegt, können aber mit reallocopen in new window angepasst werden
    • Für Accountsdatenspeicher wird "Miete" gezahlt (in SOL)
    • Der Standard-Accounts-Besitzer ist das Systemprogramm

    Deep Dive

    Accounts Model

    Auf Solana gibt es 3 Arten von Accounts:

    • Daten Accounts speichern Daten
    • Program Accounts speichern ausführbare Programme
    • Native Accounts die native Programme auf Solana angeben (wie z.B. System, Stake, und Vote )

    Es gibt 2 Arten von Daten Accounts:

    • Systemeigene Accounts
    • PDA-Accounts (Program Derived Address).

    Jedes Konto hat eine Adresse (normalerweise einen öffentlichen Schlüssel) und einen Besitzer (Adresse eines Programmkontos). Die vollständige Feldliste speichert ein Konto ist unten zu finden.

    FeldBeschreibung
    lamportsDie Anzahl der Lamports im Besitz dieses Kontos
    ownerDer Programmbesitzer dieses Kontos
    executableOb dieses Konto Anweisungen verarbeiten kann
    dataDas Rohdaten-Byte-Array, das von diesem Konto gespeichert wird
    rent_epochDie nächste Epoche, in der dieses Konto Miete schuldet

    Es gibt ein paar wichtige Eigentumsregeln:

    • Nur der Besitzer eines Datenkontos kann seine Daten ändern und Lamports belasten
    • Jeder darf Lamports auf ein Datenkonto gutschreiben
    • Der Inhaber eines Kontos kann einen neuen Inhaber zuweisen, wenn die Daten des Kontos auf Null gesetzt werden

    ProgrammAccounts speichern keinen Status.

    Wenn Du beispielsweise ein Zählerprogramm hast, mit dem Du einen Zähler erhöhen kannst, musst Du zwei Accounts erstellen - ein Konto zum Speichern des Programmcodes und eines zum Speichern der Zähler.

    Um zu verhindern, dass ein Konto gelöscht wird, müssen Sie Miete zahlen.

    Miete

    Daten auf Accounts zu speichern kostet SOL - diese Zahlung wird Miete genannt. Wenn du eine Mindesteinzahlung von 2 Jahren Miete tätigst, wird dein Account von zukünftiger Miete befreit. Du kannst vorausgezahlte Miete durch schließen von Accounts zurück in deine Wallet bekommen.

    Die Miete wird zu zwei verschiedenen Zeitpunkten gezahlt:

    1. Wenn es von einer Transaktion referenziert wird
    2. Einmal pro Epoche

    Ein Teil der über Accounts eingezogenen Miete wird vernichtet, während der Rest verteilt wird Accounts am Ende jedes Slots zu bestimmen.

    Reicht das Konto nicht aus, um die Miete zu zahlen, wird das Konto aufgelöst und die Daten ENTFERNT.

    Wichtig ist auch zu beachten, dass NeuAccounts mietfrei sein müssen.

    Andere Ressourcen

    Credit

    Dieses Kernkonzept wird Pencilflip zugeschrieben. Folgt ihm auf Twitteropen in new window.

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/de/core-concepts/pdas.html b/docs/.vuepress/dist/de/core-concepts/pdas.html index 781ec3ae5..a5729eba8 100644 --- a/docs/.vuepress/dist/de/core-concepts/pdas.html +++ b/docs/.vuepress/dist/de/core-concepts/pdas.html @@ -23,11 +23,11 @@ } Programmabgeleitete Adressen (PDAs) | Solana Cookbook - +

    Programm-eigene-Adressen (PDAs)

    Program-eigene-Adressen (PDAs) sind das zu Hause von Accounts die dazu designed sind, um von einem bestimmten Programm kontrolliert bzw. gesteuert zu werden. Mit PDAs können Programme programmgesteuert für bestimmte Adressen signieren, ohne einen privaten Schlüssel zu benötigen. PDAs dienen als Grundlage für Cross-Program Invocationopen in new window, wodurch Solana-Apps miteinander kombinierbar sind.

    Fakten

    Fact Sheet

    • PDAs sind 32-Byte-Strings, die wie öffentliche Schlüssel aussehen, aber keine entsprechenden privaten Schlüssel haben
    • findProgramAddress wird einen PDA deterministisch aus einer programId und Seeds (Sammlung von Bytes) ableiten
    • Ein Bump (ein Byte) wird verwendet, um einen potenziellen PDA von der elliptischen Kurve ed25519 zu schieben
    • Programme können für ihre PDAs signieren, indem sie die Seeds und Bump bereitstellen invoke_signedopen in new window
    • Ein PDA kann nur von dem Programm signiert werden, von dem es abgeleitet wurde
    • PDAs ermöglichen es Programmen nicht nur, verschiedene Anweisungen zu signieren, sondern bieten auch eine Hashmap-ähnliche Schnittstelle um Accounts zu indexieren

    Deep Dive

    PDAs sind ein wesentlicher Baustein für die Entwicklung von Programmen auf Solana. Mit PDAs können Programme für Accounts signieren und gleichzeitig sicherstellen, dass kein externer Benutzer auch eine gültige Signatur für dasselbe Konto erstellen kann. Zusätzlich zum Signieren von Accounts können bestimmte Programme auch Accounts ändern, die auf ihren PDAs geführt werden.

    Accounts matrix

    Bildausschnit von Pencilflip

    Generating PDAs

    Um das Konzept hinter PDAs zu verstehen, kann es hilfreich sein zu bedenken, dass PDAs nicht technisch erstellt, sondern eher gefunden werden. PDAs werden aus einer Kombination von Seeds (z. B. der Zeichenfolge „vote_account““) und einer Programm-ID generiert. Diese Kombination aus Seeds und Programm-ID wird dann durch eine sha256-Hash-Funktion geleitet, um zu sehen, ob sie einen öffentlichen Schlüssel generieren, der auf der elliptischen Kurve ed25519 liegt.

    PDA on the ellipitic curve

    Interaktion mit PDAs

    Wenn ein PDA generiert wird, gibt findProgramAddress sowohl die Adresse als auch den Bump zurück, der verwendet wird, um die Adresse aus der elliptischen Kurve zu entfernen. Mit diesem Bump bewaffnet, kann ein Programm dann für jede Anweisung, die seinen PDA erfordert, signieren. Um zu signieren, sollten Programme die Anweisung, die Liste der Accounts und die Seeds und Bump, die verwendet werden, um den PDA abzuleiten, an „invoke_signed“ übergeben. Zusätzlich zum Signieren von Anweisungen müssen PDAs auch für ihre eigene Erstellung über "invoke_signed" signieren.

    Beim Bauen mit PDAs ist es üblich, den Bump Seed in den Kontodaten selbst zu speichernopen in new window. Auf diese Weise können Entwickler einen PDA einfach validieren, ohne den Bump als Anweisungsargument übergeben zu müssen.having to pass in the bump as an instruction argument.

    Andere Quellen

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/de/core-concepts/programs.html b/docs/.vuepress/dist/de/core-concepts/programs.html index 48e65f2a1..fea070502 100644 --- a/docs/.vuepress/dist/de/core-concepts/programs.html +++ b/docs/.vuepress/dist/de/core-concepts/programs.html @@ -23,12 +23,12 @@ } Programme | Solana Cookbook - +

    Programme

    Jeder Entwickler kann Programme für die Solana-Blockchain schreiben und bereitstellen. Das Programm (in anderen Protokollen als Smart Contracts bekannt) dient als Grundlage für On-Chain-Aktivitäten und treibt alles an, von DeFi und NFTs bis hin zu Social Media und Gaming.

    Facts

    Fact Sheet

    • Programme verarbeiten Aneweisungen sowohl von Endbenutzern als auch von anderen Programmen
    • Alle Programme sind zustandslos (stateless): Alle Daten, mit denen sie interagieren, werden in separaten Konten gespeichert, die über Anweisungen gegeben werden.
    • Programme selbst werden in Konten gespeichert, die als "ausführbar" gekennzeichnet sind
    • Alle Programme gehören dem BPF Loaderopen in new window und werden von der Solana Runtimeopen in new window ausgeführt
    • Entwickler schreiben am häufigsten Programme in Rust oder C++, können aber jede Sprache wählen, die auf das LLVMopen in new window's BPFopen in new window Backend abziehlt
    • Alle Programme haben einen einzigen Einstiegspunkt, an dem die Befehlsverarbeitung stattfindet (i.e. process_instruction); Parameter beinhalten immer:
      • program_id: pubkey
      • accounts: array,
      • instruction_data: byte array

    Deep Dive

    Im Gegensatz zu den meisten anderen Blockchains trennt Solana Code vollständig von Daten. Alle Daten, mit denen Programme interagieren, werden in separaten Konten gespeichert und als Referenzen über Anweisungen weitergegeben. Dieses Modell ermöglicht es, dass ein einziges generisches Programm über verschiedene Konten läuft, ohne dass zusätzliche Bereitstellungen (Deployments) erforderlich sind. Übliche Beispiele für dieses Muster finden sich in den Native- und SPL-Programmen.

    Native Programme & Die Solana Programm Bibliothek (SPL - Solana Program Library)

    Solana ist mit einer Reihe von Programmen ausgestattet, die als Kernbausteine ​​für On-Chain-Interaktionen dienen. Diese Programme sind unterteilt in Native Programmeopen in new window und Solana Programm (SPL) Bibliothekenopen in new window.

    Native Programme stellen die Basisfunktionalität bereit, die für den Betrieb von Validatoren erforderlich ist. Unter diesen Programmen ist das bekannteste das System Programmopen in new window, welches für die Verwaltung neuer Konten und die Übertragung von SOL zwischen zwei Parteien verantwortlich ist.

    SPL-Programme unterstützen eine Reihe von On-Chain-Aktivitäten, darunter das Erstellen, Tauschen und Verleihen von Token sowie die Generierung von Stake-Pools und die Aufrechterhaltung eines On-Chain-Namensdienstes. Das SPL Token Programopen in new window an direkt über die CLI aufgerufen werden, während andere wie das verbundene Token-Kontoprogrammopen in new window werden normalerweise mit benutzerdefinierten Programmen zusammengestellt.

    Writing Programs

    Programme werden am häufigsten mit Rust oder C++ entwickelt, können aber mit jeder Sprache entwickelt werden, die auf das BPF-Backend des LLVM abzielt. Jüngste Initiativen von Neon Labsopen in new window und Solangopen in new window ermöglichen jedoch EVMopen in new window Kompatibilität und ermöglichen es Entwicklern, Programme in Solidity zu schreiben.

    Die meisten Rust-basierten Programme halten sich an die folgende Architektur:

    DateiBeschreibung
    lib.rsModule registrieren
    entrypoint.rsEinstieg ins Programm
    instruction.rsProgramm-API, (De-)Serialisierung von Befehlsdaten
    processor.rsProgrammlogik
    state.rsProgrammobjekte, (De-)Serialisierungszustand
    error.rsProgrammspezifische Fehler

    Kürzlich hat sich Anchoropen in new window zu einem beliebten Framework für die Entwicklung von Programmen entwickelt. Anchor ist ein rechthaberisches Framework, ähnlich wie Ruby on Rails, das Boilerplates reduziert und den (De-)Serialisierungsprozess für die Rust-basierte Entwicklung rationalisiert.

    Programme werden normalerweise entwickelt und in Localhost- und Devnet-Umgebungen getestet, bevor sie auf Testnet oder Mainnet bereitgestellt werden. Solana unterstützt die folgenden Umgebungen:

    Cluster-UmgebungRPC Verbindungs URL
    Mainnet-betahttps://api.mainnet-beta.solana.com
    Testnethttps://api.testnet.solana.com
    Devnethttps://api.devnet.solana.com
    LocalhostDefault port: 8899 (e.g. http://localhost:8899, http://192.168.1.88:8899)

    Nach der Bereitstellung in einer Umgebung können Clients mit On-Chain-Programmen über RPC Verbindungenopen in new window mit dem jeweiligen Cluster interagieren.

    Bereitstellen von Programmen

    Entwickler können ihre Programme über die CLIopen in new window bereitstellen:

    solana program deploy <PROGRAM_FILEPATH>
     

    Wenn ein Programm bereitgestellt wird, wird es zu einem ELF shared objectopen in new window kompiliert und in den Solana-Cluster hochgeladen. Programme befinden sich in Konten (ähnlich wie alles andere auf Solana), außer dass diese Konten als „ausführbar“ markiert und dem BPF Loader zugewiesen sind. Die Adresse dieses Kontos wird als „program_id“ bezeichnet und wird verwendet, um bei allen zukünftigen Transaktionen auf das Programm zu verweisen.

    Solana unterstützt mehrere BPF Loader, wobei der neueste der aktualisierbare BPF Laderopen in new window. Der BPF Loader ist dafür verantwortlich, das Konto des Programms zu verwalten und es den Clients über die „program_id“ zur Verfügung zu stellen. Alle Programme haben einen einzigen Einstiegspunkt, an dem die Befehlsverarbeitung stattfindet (d. h. „process_instruction“), und die Parameter beinhalten immer:

    • program_id: pubkey
    • accounts: array,
    • instruction_data: byte array

    Einmal aufgerufen, werden Programme von der Solana-Laufzeit ausgeführt.

    Weitere Quellen

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/de/core-concepts/transactions.html b/docs/.vuepress/dist/de/core-concepts/transactions.html index b715596f6..03ffb8149 100644 --- a/docs/.vuepress/dist/de/core-concepts/transactions.html +++ b/docs/.vuepress/dist/de/core-concepts/transactions.html @@ -23,11 +23,11 @@ } Transaktionen | Solana Cookbook - +

    Transaktionen

    Clients können Programme durch Senden einer Transaktion an einen Cluster aufrufen. Eine einzelne Transaktion kann mehrere Answeisungen beinhalten - jedes zielt auf sein eigenes Programm ab. Wenn eine Transaktion übermittelt wird, verarbeitet der Solana Runtimeopen in new window seine Anweisungen der Reihe nach und atomar. Wenn ein Teil einer Anweisung fehlschlägt, schlägt die gesamte Transaktion fehl.

    Fakten

    Fact Sheet

    • Anweisungen sind die grundlegendste operative Einheit auf Solana
    • Jede Anweisung enthält:
    • Die program_id des beabsichtigten Programms
      • Ein Array aller Accounts, von denen gelesen oder in die geschrieben werden soll
      • Ein "instruction_data"-Byte-Array, das für das vorgesehene Programm spezifisch ist
    • Mehrere Anweisungen können zu einer einzigen Transaktion gebündelt werden
    • Jede Transaktion enthält:
      • Ein Array aller Accounts, von denen gelesen oder in die geschrieben werden soll
      • Eine oder mehrere Anweisungen
      • Ein neuer Blockhash
      • Eine oder mehrere „Signaturen“.
    • Anweisungen werden der Reihe nach und atomar verarbeitet
    • Wenn ein Teil einer Anweisung fehlschlägt, schlägt die gesamte Transaktion fehl.
    • Transaktionen sind auf 1232 Bytes begrenzt

    Deep Dive

    Die Solana-Laufzeit erfordert sowohl Anweisungen als auch Transaktionen, um eine Liste aller Accounts anzugeben, von denen sie lesen oder in die sie schreiben möchten. Indem diese Accounts im Voraus angefordert werden, ist die Laufzeit in der Lage, die Ausführung über alle Transaktionen hinweg zu parallelisieren.

    Wenn eine Transaktion an einen Cluster übermittelt wird, verarbeitet die Laufzeitumgebung ihre Anweisungen der Reihe nach und atomar. Für jede Anweisung interpretiert das empfangende Programm sein Datenarray und verarbeitet seine angegebenen Accounts. Das Programm kehrt entweder erfolgreich oder mit einem Fehlercode zurück. Wenn ein Fehler zurückgegeben wird, schlägt die gesamte Transaktion sofort fehl.

    Jede Transaktion, die darauf abzielt, ein Konto zu belasten oder seine Daten zu ändern, erfordert die Unterschrift seines Kontoinhabers. Jedes Konto, das geändert wird, wird als „beschreibbar“ markiert. Ein Konto kann ohne Zustimmung des Inhabers gutgeschrieben werden, solange der Zahler der Transaktionsgebühr die erforderlichen Mieten und Transaktionsgebühren trägt.

    Vor der Übermittlung, müssen alle Transaktionen auf einen aktuellen blockhashopen in new window verweisen. Der Blockhash wird verwendet, um Duplizierungen zu verhindern und veraltete Transaktionen zu beseitigen. Das maximale Alter des Blockhashs einer Transaktion beträgt 150 Blöcke oder etwa 1 Minute 19 Sekunden zum Zeitpunkt des Schreibens dieses Artikels.

    Gebühren

    Das Solana-Netzwerk erhebt zwei Arten von Gebühren:

    In Solana sind Transaktionsgebühren deterministisch: Es gibt kein Konzept für einen Gebührenmarkt, auf dem Benutzer höhere Gebühren zahlen können, um ihre Chancen zu erhöhen, in den nächsten Block aufgenommen zu werden. Zum Zeitpunkt der Erstellung dieses Artikels werden die Transaktionsgebühren nur durch die Anzahl der erforderlichen Unterschriften (d. h. „lamports_per_signature“) bestimmt, nicht durch die Menge der verwendeten Ressourcen. Dies liegt daran, dass derzeit für alle Transaktionen eine feste Obergrenze von 1232 Bytes gilt.

    Alle Transaktionen erfordern mindestens ein „beschreibbares“ Konto, um die Transaktion zu signieren. Nach der Übermittlung ist das zuerst serialisierte Konto des beschreibbaren Unterzeichners der Gebührenzahler. Dieses Konto zahlt für die Kosten der Transaktion, unabhängig davon, ob die Transaktion erfolgreich ist oder fehlschlägt. Wenn der Gebührenzahler nicht über ein ausreichendes Guthaben verfügt, um die Transaktionsgebühr zu bezahlen, wird die Transaktion abgebrochen.

    Zum Zeitpunkt der Erstellung dieses Artikels werden 50 % aller Transaktionsgebühren von dem Validator eingezogen, der den Block produziert, während die restlichen 50 % verbrannt werden. Diese Struktur dient dazu, die Prüfer dazu anzuregen, so viele Transaktionen wie möglich während ihrer Slots im Leader-Zeitplan zu verarbeiten.

    Other Resources

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/de/getting-started/installation.html b/docs/.vuepress/dist/de/getting-started/installation.html index 6ca7e7053..7ec91ec1e 100644 --- a/docs/.vuepress/dist/de/getting-started/installation.html +++ b/docs/.vuepress/dist/de/getting-started/installation.html @@ -23,7 +23,7 @@ } Installation | Solana Cookbook - + @@ -71,6 +71,6 @@ export PATH=$PWD/bin:$PATH

    Sie können dann den folgenden Befehl ausführen, um das gleiche Ergebnis wie mit vorgefertigte Binärdateien zu erhalten:

    solana-install init
     
    Last Updated:
    - + diff --git a/docs/.vuepress/dist/de/guides/account-maps.html b/docs/.vuepress/dist/de/guides/account-maps.html index 77f91275b..8dc82b412 100644 --- a/docs/.vuepress/dist/de/guides/account-maps.html +++ b/docs/.vuepress/dist/de/guides/account-maps.html @@ -23,7 +23,7 @@ } Kontozuordnungen | Solana Cookbook - + @@ -1136,6 +1136,6 @@ tx.add(insertBCIx); tx.add(insertCAIx);
    Last Updated:
    - + diff --git a/docs/.vuepress/dist/de/guides/data-migration.html b/docs/.vuepress/dist/de/guides/data-migration.html index 190b57f82..15005c20a 100644 --- a/docs/.vuepress/dist/de/guides/data-migration.html +++ b/docs/.vuepress/dist/de/guides/data-migration.html @@ -23,7 +23,7 @@ } Migrieren von Programmdatenkonten | Solana Cookbook - + @@ -676,6 +676,6 @@ } }

    Nach dem Erstellen und Senden einer Anweisung: VersionProgramInstruction::SetString(String) haben wir nun das folgende 'aktualisierte' Kontodatenlayout

    Program Account v2

    Resources

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/de/guides/debugging-solana-programs.html b/docs/.vuepress/dist/de/guides/debugging-solana-programs.html index 6ae611d8a..95f8f65be 100644 --- a/docs/.vuepress/dist/de/guides/debugging-solana-programs.html +++ b/docs/.vuepress/dist/de/guides/debugging-solana-programs.html @@ -23,7 +23,7 @@ } Debuggen von Solana-Programmen | Solana Cookbook - + @@ -48,6 +48,6 @@ test test_validator_transaction ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 6.40s

    Das Debuggen hier ermöglicht es Ihnen, die im test body verwendeten Funktionen und Methoden zu debuggen, wird aber kein Haltepunkt in Ihrem Programm.

    Die Knie der Biene, oder?

    Testen lokaler Validator-Knoten von Client-Apps

    Schließlich können Sie einen lokalen Validierungsknoten starten und Ihr Programm und alle Konten mit dem solana-test-validator laden von der Kommandozeile.

    Mit dieser Methode, wirst du eine client application oder Rust benutzen Bei diesem Ansatz benötigen Sie eine Client-Anwendung, die entweder in Rust RcpClient oder in JavaScript or Typescript clients verwendet wird.

    Siehe solana-test-validator --help für weitere Details und Optionen. Für das Beispielprogramm hier ist Vanilla Setup:

    1. Öffnen Sie ein Terminal im Repo-Ordner
    2. Führen Sie solana config set -ul aus, um die Konfiguration so einzustellen, dass sie auf lokal zeigt
    3. Führen Sie „solana-test-validator --bpf-program target/deploy/bpf_program_template-keypair.json target/deploy/bpf_program_template.so“ aus
    4. Öffnen Sie ein anderes Terminal und führen Sie „solana logs“ aus, um den Log-Streamer zu starten
    5. Sie können dann Ihr Client-Programm ausführen und die Programmausgabe in dem Terminal beobachten, in dem Sie den Log-Streamer gestartet haben

    Nun, das ist der Schlafanzug der Katze YO!

    Ressourcen

    solana-program-bpf-templateopen in new window

    RcpClientopen in new window

    JavaScript/Typescript Libraryopen in new window

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/de/guides/feature-parity-testing.html b/docs/.vuepress/dist/de/guides/feature-parity-testing.html index 5286de7cb..75c61fc90 100644 --- a/docs/.vuepress/dist/de/guides/feature-parity-testing.html +++ b/docs/.vuepress/dist/de/guides/feature-parity-testing.html @@ -23,7 +23,7 @@ } Funktionsparitätstest | Solana Cookbook - + @@ -302,6 +302,6 @@ assert!(txn.is_ok()); }

    Fröhliches testen!

    Ressourcen

    scfsdopen in new window

    gadget-scfsopen in new window

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/de/guides/get-program-accounts.html b/docs/.vuepress/dist/de/guides/get-program-accounts.html index 5dc87860a..b4b2374b8 100644 --- a/docs/.vuepress/dist/de/guides/get-program-accounts.html +++ b/docs/.vuepress/dist/de/guides/get-program-accounts.html @@ -23,7 +23,7 @@ } Programmkonten Abfragen | Solana Cookbook - + @@ -444,6 +444,6 @@ # "id": 1 # }

    Durch die Kombination aller drei Parameter (dataSlice, dataSize und memcmp) können wir den Umfang unserer Abfrage begrenzen und effizient nur die Daten zurückgeben, an denen wir interessiert sind.

    Other Resources

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/de/guides/retrying-transactions.html b/docs/.vuepress/dist/de/guides/retrying-transactions.html index 77e67e61e..20972a804 100644 --- a/docs/.vuepress/dist/de/guides/retrying-transactions.html +++ b/docs/.vuepress/dist/de/guides/retrying-transactions.html @@ -23,7 +23,7 @@ } Transaktionen Wiederholen | Solana Cookbook - + @@ -89,6 +89,6 @@ blockheight = await connection.getBlockHeight(); }

    Bei der Abfrage über getLatestBlockhash sollten Anwendungen ihre beabsichtigte Commitmentopen in new window-Ebene angeben. Indem sie ihr Commitment auf „bestätigt“ (abgestimmt) oder „abgeschlossen“ (~30 Blöcke nach „bestätigt“) setzen, kann eine Anwendung vermeiden, einen Blockhash von einem Minority Fork abzufragen.

    Wenn eine Anwendung Zugriff auf RPC-Knoten hinter einem Load Balancer hat, kann sie ihre Arbeitslast auch auf bestimmte Knoten aufteilen. RPC-Knoten, die datenintensive Anfragen wie getProgramAccounts bedienen, neigen möglicherweise dazu, ins Hintertreffen zu geraten, und können auch für die Weiterleitung von Transaktionen ungeeignet sein. Für Anwendungen, die zeitkritische Transaktionen verarbeiten, kann es ratsam sein, dedizierte Knoten zu haben, die nur "sendTransaction" verarbeiten.

    Die Kosten für das Überspringen des Preflights

    Standardmäßig führt "sendTransaction" drei Preflight-Prüfungen durch, bevor eine Transaktion übermittelt wird. Insbesondere wird sendTransaction:

    • Überprüfen, ob alle Unterschriften gültig sind
    • Überprüfen, ob der referenzierte Blockhash innerhalb der letzten 150 Blöcke liegt
    • Die Transaktion mit dem durch "preflightCommitment" angegebenen Bankfach simulieren

    Für den Fall, dass eine dieser drei Preflight-Prüfungen fehlschlägt, wird sendTransaction einen Fehler auslösen, bevor die Transaktion übermittelt wird. Preflight-Prüfungen können oft den Unterschied zwischen dem Verlust einer Transaktion und der ordnungsgemäßen Behandlung eines Fehlers durch einen Client ausmachen. Um sicherzustellen, dass diese häufigen Fehler berücksichtigt werden, wird empfohlen, dass Entwickler skipPreflight auf false setzen.

    Wann Transaktionen neu signiert werden müssen

    Trotz aller Wiederholungsversuche kann es vorkommen, dass ein Kunde eine Transaktion erneut signieren muss. Bevor Sie eine Transaktion neu signieren, ist es sehr wichtig sicherzustellen, dass der Blockhash der ursprünglichen Transaktion abgelaufen ist. Wenn der anfängliche Blockhash noch gültig ist, ist es möglich, dass beide Transaktionen vom Netzwerk akzeptiert werden. Für einen Endbenutzer würde dies so aussehen, als ob er dieselbe Transaktion unbeabsichtigt zweimal gesendet hätte.

    In Solana kann eine verworfene Transaktion sicher verworfen werden, sobald der Blockhash, auf den sie verweist, älter ist als die von „getLatestBlockhash“ empfangene „lastValidBlockHeight“. Entwickler sollten diese lastValidBlockHeight im Auge behalten, indem sie getEpochInfoopen in new window abfragen und mit blockHeight in der Antwort vergleichen. Sobald ein Blockhash für ungültig erklärt wurde, können Clients mit einem neu abgefragten Blockhash erneut signieren.

    Danksagungen

    Vielen Dank an Trent Nelson, Jacob Creechopen in new window, White Tiger, Le Yafo, Buffaluopen in new window und Jito Labsopen in new window für ihre Bewertung und ihr Feedback.

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/de/guides/serialization.html b/docs/.vuepress/dist/de/guides/serialization.html index dce583b27..ba462de4d 100644 --- a/docs/.vuepress/dist/de/guides/serialization.html +++ b/docs/.vuepress/dist/de/guides/serialization.html @@ -23,7 +23,7 @@ } Serialisieren von Daten | Solana Cookbook - + @@ -253,10 +253,11 @@ }
    from borsh_construct import String, CStruct, U8
     from enum import IntEnum
    -from solana.rpc.types import RPCResponse
    -from solana.transaction import Transaction, TransactionInstruction, AccountMeta
    -from solana.publickey import PublicKey
    -from solana.keypair import Keypair
    +from solana.transaction import Transaction
    +from solders.pubkey import Pubkey
    +from solders.keypair import Keypair
    +from solders.instruction import Instruction, AccountMeta
    +from solders.rpc.responses import SendTransactionResp
     from solana.rpc.api import Client
     
     
    @@ -279,12 +280,12 @@
     
     def mint_kv(
         client: Client,
    -    program_pk: PublicKey,
    -    account_pk: PublicKey,
    +    program_pk: Pubkey,
    +    account_pk: Pubkey,
         wallet_kp: Keypair,
         mint_key: str,
         mint_value: str,
    -) -> RPCResponse:
    +) -> SendTransactionResp:
         """Mint with a key/value pair to an account"""
         # Construct the program payload for Mint invariant
         payload_ser = construct_payload(InstructionVariant.MINT, mint_key, mint_value)
    @@ -300,13 +301,13 @@
     
         # Construct the transaction with instructionVariant
         txn = Transaction().add(
    -        TransactionInstruction(
    -            [AccountMeta(account_pk, False, True)], program_pk, payload_ser
    +        Instruction(
    +            accounts=[AccountMeta(account_pk, False, True)], program_id=program_pk, data=payload_ser
             )
         )
         return client.send_transaction(txn, wallet_kp)
         # => {'jsonrpc': '2.0', 'result': '4ZdpWNdovdVaLextWSiqEBWp67k9rNTTUaX3qviHDXWY9c98bVtaRt5sasPhYzMVXHqhex78gzNKytcBnVH5CSTZ', 'id': 2}
    -
    
    +
    
     /// Instruction payload gets serialized
     #[derive(BorshSerialize)]
     pub struct Payload<'a> {
    @@ -632,10 +633,9 @@
       let nameAccount = await connection.getAccountInfo(account, "processed");
       return deserializeUnchecked(dataSchema, AccoundData, nameAccount.data);
     }
    -
    import base64
    -from borsh_construct import CStruct, U8, U32, HashMap, String
    +
    from borsh_construct import CStruct, U8, U32, HashMap, String
     from solana.rpc.commitment import Confirmed
    -from solana.publickey import PublicKey
    +from solders.pubkey import Pubkey
     from solana.rpc.api import Client
     
     
    @@ -647,14 +647,10 @@
     )
     
     
    -def get_account_info(client: Client, account_pk: PublicKey):
    +def get_account_info(client: Client, account_pk: Pubkey):
         """Fetch account information from RPC, parse out the data and deserialize"""
         res = client.get_account_info(account_pk, Confirmed, encoding='base64')
    -    data = res['result']
    -    if isinstance(data, dict):
    -        return account_schema.parse(base64.urlsafe_b64decode(data['value']['data'][0]))
    -    else:
    -        raise AttributeError(f'Unknown RPC result {data}')
    +    return account_schema.parse(res.value.data)
     
     # Results in or similar
     # => Container:
    @@ -662,7 +658,7 @@
     # =>     map_length = 109
     # =>     map = {'Happy': 'New Year!', 'newKey': 'A new value',
     # =>            'python key': 'python value', 'ts key': 'ts first value'}
    -
    use {
    +
    use {
         arrayref::*,
         borsh::{BorshDeserialize, BorshSerialize},
         std::{collections::BTreeMap, error::Error},
    @@ -766,8 +762,7 @@
     }
     
     entry();
    -
    import base64
    -from borsh_construct import U8, U16, U32, String, HashMap
    +
    from borsh_construct import U8, U16, U32, String, HashMap
     
     # Schema to deserialize various types
     primitive_schema = CStruct(
    @@ -811,7 +806,7 @@
         # =>        4
         # =>        5
         # =>    MAP_STRING_STRING = {'cookbook': 'recipe', 'recipe': 'ingredient'}
    -
    fn main() {}
    +
    fn main() {}
     
     #[cfg(test)]
     mod tests {
    @@ -1021,6 +1016,6 @@
         }
     }
     

    Ressourcen

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/de/index.html b/docs/.vuepress/dist/de/index.html index 6e92d2a9c..e132187ed 100644 --- a/docs/.vuepress/dist/de/index.html +++ b/docs/.vuepress/dist/de/index.html @@ -23,11 +23,11 @@ } Kochen mit Solana | Solana Cookbook - +

    Kochen mit Solana

    Das Solana Cookbook ist eine Ressource für Entwickler, die die wesentlichen Konzepte und Referenzen zum Entwickeln von Anwendungen auf Solana bietet. Jedes Konzept und Referenz wird sich auf bestimmte Aspekte von Solana Development konzentrieren, und zeitgleich zusätzliche Details und Beispiele zur Verwendung bereitstellt.

    Beitragen

    Das Kochbuch ist so gestaltet, dass es für neue Solana-Entwickler einfach ist zum Ökosystem beizutragen. Selbst wenn du nichts weißt, ist etwas dem Solana Kochbuch beizutragen, eine gute Lernquelle!

    Entdecke alle offenen Probleme "Issues" hieropen in new window. Beitragsrichtlinien hieropen in new window. Wenn dir etwas im Kochbuch fehlt, erstelle bitte ein neues Problem "Issue".

    Wie man das Kochbuch liest

    Das Solana Kochbuch ist in verschiedene Sektionen aufgeteilt - alle abgestimmt auf ein anderes Ziel.

    SektionBeschreibung
    Kern-PrinzipienBausteine ​​von Solana, die für die Entwicklung gut zu wissen sind
    FührerLeitfäden in Hääpchengröße zu verschiedenen Tools zum Entwickeln
    VerweiseVerweise auf häufig benötigte Codeausschnitte
    Last Updated:
    - + diff --git a/docs/.vuepress/dist/de/integrations/index.html b/docs/.vuepress/dist/de/integrations/index.html index c5cb57dba..96ebe61d2 100644 --- a/docs/.vuepress/dist/de/integrations/index.html +++ b/docs/.vuepress/dist/de/integrations/index.html @@ -23,11 +23,11 @@ } Getting Started | Solana Cookbook - +

    Getting Started with Integrations

    The Solana Cookbook integrations provides a set of examples and references for anyone to build on top of other protocols on Solana.

    The power of Solana comes from the ability to integrate with other protocols, building on top of existing infrastructure to make something better.

    Composability is Key

    Making your program easy to use and extend will grow both your program and the entire Solana ecosystem. Don't reinvent the wheel, build on top of existing protocols and bootstrap your userbase.

    Adapt and build on top of other programs or libraries and unlock new capabilities for Solana.

    Contributing

    If you are interested in contributing to integrations, please checkout the contribution guidelinesopen in new window.

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/de/integrations/jupiter.html b/docs/.vuepress/dist/de/integrations/jupiter.html index 6bfb960bc..df27cc5db 100644 --- a/docs/.vuepress/dist/de/integrations/jupiter.html +++ b/docs/.vuepress/dist/de/integrations/jupiter.html @@ -23,7 +23,7 @@ } Jupiter | Solana Cookbook - + @@ -595,6 +595,6 @@ skipPreflight: false, });

    Other Resources

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/de/integrations/mango.html b/docs/.vuepress/dist/de/integrations/mango.html index c2588b3f9..2b17ce976 100644 --- a/docs/.vuepress/dist/de/integrations/mango.html +++ b/docs/.vuepress/dist/de/integrations/mango.html @@ -23,7 +23,7 @@ } Mango Markets | Solana Cookbook - + @@ -367,6 +367,6 @@ })();

    Andere Ressourcen

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/de/integrations/orao-vrf.html b/docs/.vuepress/dist/de/integrations/orao-vrf.html index 81a4a57ce..f00833430 100644 --- a/docs/.vuepress/dist/de/integrations/orao-vrf.html +++ b/docs/.vuepress/dist/de/integrations/orao-vrf.html @@ -23,11 +23,11 @@ } - +
    - + diff --git a/docs/.vuepress/dist/de/integrations/pyth.html b/docs/.vuepress/dist/de/integrations/pyth.html index d1a80db3f..57b8ce492 100644 --- a/docs/.vuepress/dist/de/integrations/pyth.html +++ b/docs/.vuepress/dist/de/integrations/pyth.html @@ -23,7 +23,7 @@ } Pyth | Solana Cookbook - + @@ -103,6 +103,6 @@ let pyth_price_data = &pyth_price_info.try_borrow_data()?; let price_account: Price = *load_price(pyth_price_data).unwrap();

    Other Resources

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/de/integrations/react-native.html b/docs/.vuepress/dist/de/integrations/react-native.html index 1906b5c56..1cddc6bac 100644 --- a/docs/.vuepress/dist/de/integrations/react-native.html +++ b/docs/.vuepress/dist/de/integrations/react-native.html @@ -23,7 +23,7 @@ } React Native | Solana Cookbook - + @@ -70,6 +70,6 @@ ERROR Invariant Violation: Module AppRegistry is not a registered callable module (calling runApplication). A frequent cause of the error is that the application entry file path is incorrect. This can also happen when the JS bundle is corrupt or there is an early initialization error when loading React Native.

    Dies ist ein Problem, das durch die Verwendung eines Polyfill für das „URL“-Objekt in React Native behoben werden kann.

    Installieren Sie das Paket react-native-url-polyfill und importieren Sie es in die Hauptdatei Ihrer App (zB: index.js), wie oben gezeigt.

    Fehler: crypto.getRandomValues() wird nicht unterstützt

    Error: crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported
     

    Dies ist ein Problem, das durch die Verwendung eines Polyfill für das „Krypto“-Objekt in React Native behoben werden kann.

    Installieren Sie das Paket react-native-get-random-values und importieren Sie es in die Hauptdatei Ihrer App (zB: index.js), wie oben gezeigt.

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/de/integrations/serum.html b/docs/.vuepress/dist/de/integrations/serum.html index ac085966d..4602110a8 100644 --- a/docs/.vuepress/dist/de/integrations/serum.html +++ b/docs/.vuepress/dist/de/integrations/serum.html @@ -23,7 +23,7 @@ } Serum | Solana Cookbook - + @@ -105,6 +105,6 @@ })();
    Last Updated:
    - + diff --git a/docs/.vuepress/dist/de/integrations/strata.html b/docs/.vuepress/dist/de/integrations/strata.html index da4439064..624c1610a 100644 --- a/docs/.vuepress/dist/de/integrations/strata.html +++ b/docs/.vuepress/dist/de/integrations/strata.html @@ -23,7 +23,7 @@ } Strata | Solana Cookbook - + @@ -150,6 +150,6 @@ }, });

    Other Resources

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/de/integrations/switchboard.html b/docs/.vuepress/dist/de/integrations/switchboard.html index 2afd5465b..4912b55fc 100644 --- a/docs/.vuepress/dist/de/integrations/switchboard.html +++ b/docs/.vuepress/dist/de/integrations/switchboard.html @@ -23,7 +23,7 @@ } Switchboard | Solana Cookbook - + @@ -169,8 +169,8 @@ use super::*; pub fn get_result(ctx: Context<GetResult>) -> Result<()> { - let aggregator = &ctx.accounts.aggregator_feed; - let val: f64 = AggregatorAccountData::new(aggregator)? + let aggregator = &ctx.accounts.aggregator_feed.load()?; + let val:f64 = aggregator .get_result()? .try_into()?; @@ -184,12 +184,12 @@ pub struct GetResult<'info> { pub authority: Signer<'info>, /// CHECK: field is unsafe - pub aggregator_feed: AccountInfo<'info>, // pass aggregator key + pub aggregator_feed: AccountLoader<'info, AggregatorAccountData>, // pass aggregator key } -

    So erstellen Sie einen Feed vom Publisher

    Die offizielle Switchboard-Dokumentation enthält eine ausführliche Anleitung zum Erstellen eines Feeds vom Herausgeber. Sehen Sie es sich hieropen in new window an .

    Oracles

    Die einzigartige Funktion von Switchboard besteht darin, dass Sie Ihr eigenes Orakel erstellen und lokal ausführen können.

    Erstelen eines Oracle

    Press </> button to view full source
    import * as anchor from "@project-serum/anchor";
     import { Keypair } from "@solana/web3.js";
     import {
    @@ -536,6 +536,6 @@
         state_seeds,
     )?;
     

    Resources

    APIs and Libraries

    Examples

    More Information

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/de/integrations/web3auth.html b/docs/.vuepress/dist/de/integrations/web3auth.html index ec3e7bbbc..effcdc7c9 100644 --- a/docs/.vuepress/dist/de/integrations/web3auth.html +++ b/docs/.vuepress/dist/de/integrations/web3auth.html @@ -23,7 +23,7 @@ } web3Auth (Torus Wallet) | Solana Cookbook - + @@ -113,6 +113,6 @@ })();

    Ressourcen

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/de/references/accounts.html b/docs/.vuepress/dist/de/references/accounts.html index cf99fc101..de811a221 100644 --- a/docs/.vuepress/dist/de/references/accounts.html +++ b/docs/.vuepress/dist/de/references/accounts.html @@ -23,7 +23,7 @@ } Accounts | Solana Cookbook - + @@ -998,7 +998,7 @@ programId: programId, }) ); -

    So erhalten Sie den Kontostand

    Press </> button to view full source
    import {
    +

    So erhalten Sie den Kontostand

    Press </> button to view full source
    import {
       clusterApiUrl,
       Connection,
       PublicKey,
    @@ -1034,22 +1034,47 @@
         );
     }
     
    from solana.publickey import Keypair
    +
    from solders.keypair import Keypair
     from solana.rpc.api import Client
     
     client = Client("https://api.devnet.solana.com")
     
     key_pair = Keypair()
    -public_key = key_pair.public_key
    +public_key = key_pair.pubkey()
     
     print(client.get_balance(public_key))
     
    // clang++ get_balance.cpp -o get_balance -std=c++17 -lssl -lcrypto -lsodium
    +
    +#include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +  Connection connection("https://api.devnet.solana.com");
    +
    +  auto key_pair = Keypair::generate();
    +
    +  auto public_key = key_pair.public_key;
    +  std::cout << "public_key = " << public_key.to_base58() << std::endl;
    +
    +  uint64_t balance = connection.get_balance(public_key).unwrap();
    +  std::cout << "balance = " << balance << std::endl;
    +
    +  return 0;
    +}
    +

    TIP

    If you want to get a token balance, you will need to know the address of token account. For more information, see Token References

    - + diff --git a/docs/.vuepress/dist/de/references/basic-transactions.html b/docs/.vuepress/dist/de/references/basic-transactions.html index ee81f855d..17a44a3f0 100644 --- a/docs/.vuepress/dist/de/references/basic-transactions.html +++ b/docs/.vuepress/dist/de/references/basic-transactions.html @@ -23,7 +23,7 @@ } Transaktionen versenden | Solana Cookbook - + @@ -76,31 +76,31 @@ await sendAndConfirmTransaction(connection, transferTransaction, [fromKeypair]);
    from solana.rpc.api import Client
    -from solana.keypair import Keypair
    +from solders.keypair import Keypair
     from solana.transaction import Transaction
    -from solana.system_program import TransferParams, transfer
    +from solders.system_program import TransferParams, transfer
     
     LAMPORT_PER_SOL = 1000000000
     
     client: Client = Client("https://api.devnet.solana.com")
     
    -sender = Keypair.generate()
    -receiver = Keypair.generate()
    +sender = Keypair()
    +receiver = Keypair()
     
    -airdrop = client.request_airdrop(sender.public_key, 1 * LAMPORT_PER_SOL)
    -airdrop_signature = airdrop["result"]
    +airdrop = client.request_airdrop(sender.pubkey(), 1 * LAMPORT_PER_SOL)
    +airdrop_signature = airdrop.value
     client.confirm_transaction(airdrop_signature)
     
     transaction = Transaction().add(transfer(TransferParams(
    -    from_pubkey=sender.public_key,
    -    to_pubkey=receiver.public_key,
    +    from_pubkey=sender.pubkey(),
    +    to_pubkey=receiver.pubkey(),
         lamports=1_000_000)
     ))
     
     client.send_transaction(transaction, sender)
     
    - + diff --git a/docs/.vuepress/dist/de/references/keypairs-and-wallets.html b/docs/.vuepress/dist/de/references/keypairs-and-wallets.html index f2f0aea5f..15b82f0e0 100644 --- a/docs/.vuepress/dist/de/references/keypairs-and-wallets.html +++ b/docs/.vuepress/dist/de/references/keypairs-and-wallets.html @@ -23,20 +23,35 @@ } Keypairs and Wallets | Solana Cookbook - + -

    Schlüsselpaare und Brieftaschen

    So generieren Sie ein neues Schlüsselpaar

    Viele der verschiedenen Aktionen können Sie mit den verschiedenen Solana durchführen Bibliotheken erfordern ein Schlüsselpaar oder eine Brieftasche. Wenn Sie eine Verbindung zu einer Brieftasche (Wallet), müssen Sie sich keine Sorgen machen. Wenn Sie jedoch ein Schlüsselpaar benötigen, müssen Sie eines generieren.

    Press </> button to view full source
    import { Keypair } from "@solana/web3.js";
    +    

    Schlüsselpaare und Brieftaschen

    So generieren Sie ein neues Schlüsselpaar

    Viele der verschiedenen Aktionen können Sie mit den verschiedenen Solana durchführen Bibliotheken erfordern ein Schlüsselpaar oder eine Brieftasche. Wenn Sie eine Verbindung zu einer Brieftasche (Wallet), müssen Sie sich keine Sorgen machen. Wenn Sie jedoch ein Schlüsselpaar benötigen, müssen Sie eines generieren.

    Press </> button to view full source
    import { Keypair } from "@solana/web3.js";
     
     (async () => {
       let keypair = Keypair.generate();
     })();
     
    from solana.keypair import Keypair
    +
    from solders.keypair import Keypair
     
     keypair = Keypair()
     
    // clang++ generate_keypair.cpp -o generate_keypair -std=c++17 -lssl -lcrypto -lsodium
    +
    +#include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +  auto key_pair = Keypair::generate();
    +
    +  auto public_key = key_pair.public_key;
    +  std::cout << "public_key = " << public_key.to_base58() << std::endl;
    +
    +  return 0;
    +}
    +
    use solana_sdk::signature::{Keypair};
     
     fn main() {
    @@ -47,7 +62,7 @@
     
     # pubkey: 9ZNTfG4NyQgxy2SWjSiQoUyBPEvXT2xo7fKc5hPYYJ7b
     

    So stellen Sie ein Schlüsselpaar aus einem Geheimnis wieder her

    Wenn Sie Ihr Geheimnis bereits haben, können Sie Ihr Schlüsselpaar aus dem Geheimnis beziehen um Ihre dApp zu testen.

    1. Aus Bytes
    Press </> button to view full source
    import { Keypair } from "@solana/web3.js";
    +

    So stellen Sie ein Schlüsselpaar aus einem Geheimnis wieder her

    Wenn Sie Ihr Geheimnis bereits haben, können Sie Ihr Schlüsselpaar aus dem Geheimnis beziehen um Ihre dApp zu testen.

    1. Aus Bytes
    Press </> button to view full source
    import { Keypair } from "@solana/web3.js";
     
     (async () => {
       const keypair = Keypair.fromSecretKey(
    @@ -67,7 +82,7 @@
         121, 35, 172, 247, 68, 251, 226, 218, 48, 63, 176, 109, 168, 89, 238, 135,
       ])
     );
    -
    from solana.keypair import Keypair
    +
    from solders.keypair import Keypair
     
     secret_key= [
             174, 47, 154, 16, 202, 193, 206, 113, 199, 190, 53, 133, 169, 175, 31, 56, 222, 53, 138,
    @@ -76,8 +91,8 @@
             63, 176, 109, 168, 89, 238, 135,
         ]
         
    -keypair = Keypair.from_secret_key(bytes(secret_key))
    -print("Created Keypair with Public Key: {}".format(keypair.public_key))
    +keypair = Keypair.from_bytes(secret_key)
    +print("Created Keypair with Public Key: {}".format(keypair.pubkey()))
     
    use solana_sdk::signature::{Keypair, Signer};
    +keypair = Keypair.from_bytes(secret_key)
    +
    // clang++ keypair_from_seed.cpp -o keypair_from_seed -std=c++17 -lssl -lcrypto -lsodium
    +
    +#include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +  const uint8_t bytes[] = {
    +    174, 47, 154, 16, 202, 193, 206, 113, 199, 190, 53, 133, 169, 175, 31, 56, 222, 53, 138,
    +    189, 224, 216, 117, 173, 10, 149, 53, 45, 73, 251, 237, 246, 15, 185, 186, 82, 177, 240,
    +    148, 69, 241, 227, 167, 80, 141, 89, 240, 121, 121, 35, 172, 247, 68, 251, 226, 218, 48,
    +    63, 176, 109, 168, 89, 238, 135,
    +  };
    +  Keypair key_pair = Keypair::from_seed(bytes);
    +  std::cout << "Created Keypair with Public Key: " << key_pair.public_key.to_base58() << std::endl;
    +}
    +
    use solana_sdk::signature::{Keypair, Signer};
     
     fn main() {
         let secret_key: [u8; 64] = [
    @@ -126,14 +164,13 @@
         "5MaiiCavjCmn9Hs1o3eznqDEhRwxo7pXiAYez7keQUviUkauRiTMD8DrESdrNjN8zd9mTmVhRvBJeg5vhyvgrAhG"
       )
     );
    -
    import base58
    -from solana.keypair import Keypair
    +
    from solders.keypair import Keypair
     
     b58_string = "5MaiiCavjCmn9Hs1o3eznqDEhRwxo7pXiAYez7keQUviUkauRiTMD8DrESdrNjN8zd9mTmVhRvBJeg5vhyvgrAhG"
    -keypair = Keypair.from_secret_key(base58.b58decode(b58_string)
    -print("Created Keypair with Public Key: {}".format(keypair.public_key))
    -
    use solana_sdk::signature::{Keypair, Signer};
     
     fn main() {
    @@ -146,7 +183,7 @@
     

    So verifizieren Sie ein Schlüsselpaar

    Wenn Sie ein Schlüsselpaar erhalten, können Sie überprüfen, ob es das Geheimnis ist oder nicht mit dem angegebenen öffentlichen Schlüssel überein stimmt.

    Press </> button to view full source
    import { Keypair, PublicKey } from "@solana/web3.js";
    +

    So verifizieren Sie ein Schlüsselpaar

    Wenn Sie ein Schlüsselpaar erhalten, können Sie überprüfen, ob es das Geheimnis ist oder nicht mit dem angegebenen öffentlichen Schlüssel überein stimmt.

    Press </> button to view full source
    import { Keypair, PublicKey } from "@solana/web3.js";
     
     (async () => {
       const publicKey = new PublicKey(
    @@ -174,10 +211,10 @@
     );
     console.log(keypair.publicKey.toBase58() === publicKey.toBase58());
     // true
    -
    from solana.keypair import Keypair
    -from solana.publickey import PublicKey
    +
    from solders.keypair import Keypair
    +from solders.pubkey import Pubkey
     
    -public_key = PublicKey("24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p")
    +public_key = Pubkey.from_string("24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p")
     
     keys = [
             174, 47, 154, 16, 202, 193, 206, 113, 199, 190, 53, 133, 169, 175, 31, 56, 222, 53, 138,
    @@ -185,11 +222,11 @@
             148, 69, 241, 227, 167, 80, 141, 89, 240, 121, 121, 35, 172, 247, 68, 251, 226, 218, 48,
             63, 176, 109, 168, 89, 238, 135,
         ]
    -keypair = Keypair.from_secret_key(bytes(keys))
    +keypair = Keypair.from_bytes(keys)
     
    -print(keypair.public_key.to_base58() == public_key.to_base58())
    +print(keypair.pubkey() == public_key)
     # True
    -
    // clang++ verify_keypair.cpp -o verify_keypair -std=c++17 -lssl -lcrypto -lsodium
    +
    +#include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +  PublicKey public_key = PublicKey("24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p");
    +
    +  const uint8_t bytes[] = {
    +    174, 47, 154, 16, 202, 193, 206, 113, 199, 190, 53, 133, 169, 175, 31, 56, 222, 53, 138,
    +    189, 224, 216, 117, 173, 10, 149, 53, 45, 73, 251, 237, 246, 15, 185, 186, 82, 177, 240,
    +    148, 69, 241, 227, 167, 80, 141, 89, 240, 121, 121, 35, 172, 247, 68, 251, 226, 218, 48,
    +    63, 176, 109, 168, 89, 238, 135,
    +  };
    +  Keypair key_pair = Keypair::from_seed(bytes);
    +
    +  std::cout << (public_key.to_base58() == key_pair.public_key.to_base58()) << std::endl;
    +}
    +
    solana-keygen verify <PUBKEY> prompt://
     

    So überprüfen Sie, ob ein öffentlicher Schlüssel einen zugehörigen privaten Schlüssel hat

    In bestimmten Sonderfällen (z. B. einer vom Programm abgeleiteten Adresse) kann es sein, dass öffentlichen Schlüsseln kein privater Schlüssel zugeordnet ist. Sie können dies überprüfen, indem Sie nachsehen, ob der öffentliche Schlüssel auf der Kurve ed25519 liegt. Nur öffentliche Schlüssel, die auf der Kurve liegen, können von Benutzern mit Wallets kontrolliert werden.

    Press </> button to view full source
    import { PublicKey } from "@solana/web3.js";
    +

    So überprüfen Sie, ob ein öffentlicher Schlüssel einen zugehörigen privaten Schlüssel hat

    In bestimmten Sonderfällen (z. B. einer vom Programm abgeleiteten Adresse) kann es sein, dass öffentlichen Schlüsseln kein privater Schlüssel zugeordnet ist. Sie können dies überprüfen, indem Sie nachsehen, ob der öffentliche Schlüssel auf der Kurve ed25519 liegt. Nur öffentliche Schlüssel, die auf der Kurve liegen, können von Benutzern mit Wallets kontrolliert werden.

    Press </> button to view full source
    import { PublicKey } from "@solana/web3.js";
     
     (async function () {
       // Note that Keypair.generate() will always give a public key that is valid for users
    @@ -219,20 +287,31 @@
     })();
     
    from solana.keypair import Keypair
    -from solana.publickey import PublicKey
    -from solana.utils.ed25519_base import is_on_curve
    +
    from solders.pubkey import Pubkey
     
     # Note that Keypair() will always give a public key that is valid for users
    -key = PublicKey('5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY') # Valid public key
    -print(is_on_curve(key)) # Lies on the ed25519 curve and is suitable for users
    +key = Pubkey.from_string('5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY') # Valid public key
    +print(key.is_on_curve()) # Lies on the ed25519 curve and is suitable for users
    +
    +off_curve_address = Pubkey.from_string('4BJXYkfvg37zEmBbsacZjeQDpTNx91KppxFJxRqrz48e') # Valid public key
    +print(off_curve_address.is_on_curve()) # Not on the ed25519 curve, therefore not suitable for users
    +
    +error_pubkey = Pubkey.from_string("testPubkey"); # Is not a valid public key
    +
    #include <iostream>
    +#include <solana_sdk.h>
    +
    +int main()
    +{
    +    auto public_key = PublicKey("5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY");
     
    -off_curve_address = PublicKey('4BJXYkfvg37zEmBbsacZjeQDpTNx91KppxFJxRqrz48e') # Valid public key
    -print(PublicKey._is_on_curve(off_curve_address)) # Not on the ed25519 curve, therefore not suitable for users
    +    std::cout << public_key.is_on_curve() << std::endl;
     
    -error_pubkey = PublicKey("testPubkey"); # Is not a valid public key
    -
    use solana_sdk::pubkey::{Pubkey};
     use std::str::FromStr;
     
    @@ -274,16 +353,16 @@
       "pill tomorrow foster begin walnut borrow virtual kick shift mutual shoe scatter";
     const seed = bip39.mnemonicToSeedSync(mnemonic, ""); // (mnemonic, password)
     const keypair = Keypair.fromSeed(seed.slice(0, 32));
    -
    from solana.keypair import Keypair
    +
    from solders.keypair import Keypair
     from mnemonic import Mnemonic
     
     mnemo = Mnemonic("english")
     seed = mnemo.to_seed("pill tomorrow foster begin walnut borrow virtual kick shift mutual shoe scatter")
    -keypair = Keypair.from_secret_key(seed)
    -print("Created Keypair with Public Key: {}".format(keypair.public_key)
    +keypair = Keypair.from_bytes(seed)
    +print("Created Keypair with Public Key: {}".format(keypair.pubkey()))
     
    solana-keygen recover
     

    2.BIP44 (mehrere Wallets, auch HD-Wallets genannt)

    Sie können mehrere Wallets aus einem einzigen Seed erstellen – auch bekannt als „hierarchische deterministische Wallets“ oder HD-Wallets:

    Press </> button to view full source
    import { Keypair } from "@solana/web3.js";
    @@ -311,7 +390,7 @@
     }
     
    solana-keygen recover 'prompt:?key=0/0'
     

    So generieren Sie eine Vanity-Adresse

    Vanity-Publickeys oder benutzerdefinierte Adressen sind Schlüssel, die mit bestimmten Charakteren beginnen. Beispielsweise kann eine Person einen öffentlichen Schlüssel wünschen. Beginnen Sie mit "elv1s" oder vielleicht sogar mit "cook". Dies kann anderen Menschen helfen, sich zu merken, wem der Schlüssel gehört, und wodurch der Schlüssel leichter zu identifizieren ist.

    Hinweis: Je mehr Zeichen Ihre Vanity-Adresse enthält, desto länger wird sie nehmen.

    ::: Warnung Sie sollten für diese Aufgabe einfach die CLI verwenden. Die Python- und TypeScript-Beispiele dienen der Veranschaulichung und sind viel langsamer als die CLI. :::

    Press </> button to view full source
    import { Keypair } from "@solana/web3.js";
    +

    So generieren Sie eine Vanity-Adresse

    Vanity-Publickeys oder benutzerdefinierte Adressen sind Schlüssel, die mit bestimmten Charakteren beginnen. Beispielsweise kann eine Person einen öffentlichen Schlüssel wünschen. Beginnen Sie mit "elv1s" oder vielleicht sogar mit "cook". Dies kann anderen Menschen helfen, sich zu merken, wem der Schlüssel gehört, und wodurch der Schlüssel leichter zu identifizieren ist.

    Hinweis: Je mehr Zeichen Ihre Vanity-Adresse enthält, desto länger wird sie nehmen.

    ::: Warnung Sie sollten für diese Aufgabe einfach die CLI verwenden. Die Python- und TypeScript-Beispiele dienen der Veranschaulichung und sind viel langsamer als die CLI. :::

    Press </> button to view full source
    import { Keypair } from "@solana/web3.js";
     
     (async () => {
       let keypair = Keypair.generate();
    @@ -323,17 +402,36 @@
     while (!keypair.publicKey.toBase58().startsWith("elv1s")) {
       keypair = Keypair.generate();
     }
    -
    from solana.keypair import Keypair
    +
    from solders.keypair import Keypair
     
     keypair = Keypair()
    -while(str(keypair.public_key)[:5]!="elv1s") :
    +while(str(keypair.pubkey())[:5]!="elv1s") :
         keypair = Keypair()
         
    -print("Created Keypair with Public Key: {}".format(keypair.public_key))
    +print("Created Keypair with Public Key: {}".format(keypair.pubkey()))
     
    solana-keygen grind --starts-with e1v1s:1
    +
    // clang++ vanity_keypair.cpp -o vanity_keypair -std=c++17 -lssl -lcrypto -lsodium
    +
    +#include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +  auto key_pair = Keypair::generate();
    +
    +  while (key_pair.public_key.to_base58().substr(0, 5) != "elv1s") {
    +    key_pair = Keypair::generate();
    +  }
    +
    +  std::cout << "Created Keypair with Public Key: " << key_pair.public_key.to_base58() << std::endl;
    +}
    +
    solana-keygen grind --starts-with e1v1s:1
     

    So signieren und verifizieren Sie Nachrichten mit Wallets

    Die Hauptfunktion eines Schlüsselpaars besteht darin, Nachrichten zu signieren und zu aktivieren. Überprüfung einer Unterschrift ermöglicht der Empfänger sich zu vergewissern, dass die Daten vom Eigentümer signiert wurden.

    Dazu importieren wir die Kryptobibliothek TweetNaClopen in new window.

    Press </> button to view full source
    import { Keypair } from "@solana/web3.js";
     import nacl from "tweetnacl";
    @@ -372,41 +470,25 @@
     );
     
     console.log(result);
    -
    from nacl.signing import VerifyKey
    -from solana.keypair import Keypair
    +
    from solders.keypair import Keypair
     
     secret_key =  [
           174, 47, 154, 16, 202, 193, 206, 113, 199, 190, 53, 133, 169, 175, 31, 56, 222, 53, 138, 189, 224, 216, 117,
           173, 10, 149, 53, 45, 73, 251, 237, 246, 15, 185, 186, 82, 177, 240, 148, 69, 241, 227, 167, 80, 141, 89, 240,
           121, 121, 35, 172, 247, 68, 251, 226, 218, 48, 63, 176, 109, 168, 89, 238, 135,
    -    ]
    -     
    -keypair = Keypair.from_secret_key(bytes(secret_key))
    -pubkey_bytes = bytes(keypair.public_key)
    -message = "The quick brown fox jumps over the lazy dog"
    -message_bytes = bytes(message,'utf8')
    -signed_message = keypair.sign(message_bytes)
    -
    -verify_sign = VerifyKey(
    -    pubkey_bytes
    -).verify(
    -    smessage=message_bytes,  
    -    signature=signed_message.signature
    -)
    -
    -#Returns original message if the signature has not been tampered with
    -print(verify_sign)
    -

    So verbinden Sie sich mit einer Brieftasche

    Die Wallet-Adapteropen in new window-Bibliotheken von Solana machen es einfach, Wallet-Verbindungen clientseitig zu verwalten.

    React

    Führen Sie den folgenden Befehl aus, um die erforderlichen Abhängigkeiten zu installieren:

    yarn add @solana/wallet-adapter-react @solana/wallet-adapter-react-ui @solana/wallet-adapter-base @solana/wallet-adapter-wallets
    +    ] 
    +keypair = Keypair.from_bytes(secret_key)
    +message = b"The quick brown fox jumps over the lazy dog"
    +signature = keypair.sign_message(message)
    +verify_sign = signature.verify(keypair.pubkey(), message)
    +
    +print(verify_sign) # bool
    +

    So verbinden Sie sich mit einer Brieftasche

    Die Wallet-Adapteropen in new window-Bibliotheken von Solana machen es einfach, Wallet-Verbindungen clientseitig zu verwalten.

    React

    Führen Sie den folgenden Befehl aus, um die erforderlichen Abhängigkeiten zu installieren:

    yarn add @solana/wallet-adapter-react @solana/wallet-adapter-react-ui @solana/wallet-adapter-base @solana/wallet-adapter-wallets
     

    Die React-Wallet-Adapter-Bibliotheken ermöglichen es uns, Wallet-Verbindungszustände über Hooks und Kontextanbieter, nämlich useWallet, WalletProvider, useConnection und ConnectionProvider, beizubehalten und darauf zuzugreifen. Die React App muss mit WalletProvider und ConnectionProvider umschlossen werden.

    Darüber hinaus können wir Benutzer auffordern, eine Verbindung herzustellen, indem wir useWalletModal verwenden, um die Sichtbarkeit des Verbindungsmodals umzuschalten und die App auch mit WalletProvider von @solana/wallet-adapter-react-ui zu umschließen. Das Verbindungsmodal wickelt diesen Verbindungsfluss für uns ab, sodass wir einfach abhören können, wann sich eine Brieftasche verbunden hat. Wir wissen, dass eine Wallet verbunden ist, wenn die „useWallet“-Antwort eine „wallet“-Eigenschaft ungleich Null hat. Umgekehrt, wenn diese Eigenschaft null ist, wissen wir, dass die Brieftasche getrennt ist.

    Press </> button to view full source
    import React, { useMemo, FC, PropsWithChildren } from "react";
     import {
       ConnectionProvider,
    @@ -593,6 +675,6 @@
     <WalletMultiButton />
     {/if}
     
    Last Updated:
    - + diff --git a/docs/.vuepress/dist/de/references/local-development.html b/docs/.vuepress/dist/de/references/local-development.html index 111987ee3..11556e5e6 100644 --- a/docs/.vuepress/dist/de/references/local-development.html +++ b/docs/.vuepress/dist/de/references/local-development.html @@ -23,7 +23,7 @@ } Local Development | Solana Cookbook - + @@ -37,7 +37,7 @@ - Konfigurierbare Aufbewahrung des Transaktionsverlaufs (`--limit-ledger-size ...`) - Konfigurierbare Epochenlänge (`--slots-per-epoch ...`) - Zu einem beliebigen Slot springen (`--warp-slot ...`) -

    Verbindung zu Umgebungen

    Wenn Sie an der Solana-Entwicklung arbeiten, müssen Sie eine Verbindung herstellen zu einem bestimmten RPC-API-Endpunkt. Solana hat 3 öffentliche Entwicklung Umgebungen:

    Press </> button to view full source
    import { clusterApiUrl, Connection } from "@solana/web3.js";
    +

    Verbindung zu Umgebungen

    Wenn Sie an der Solana-Entwicklung arbeiten, müssen Sie eine Verbindung herstellen zu einem bestimmten RPC-API-Endpunkt. Solana hat 3 öffentliche Entwicklung Umgebungen:

    • mainnet-beta https://api.mainnet-beta.solana.com
    • devnet https://api.devnet.solana.com
    • testnet https://api.testnet.solana.com
    Press </> button to view full source
    import { clusterApiUrl, Connection } from "@solana/web3.js";
     
     (async () => {
       const connection = new Connection(clusterApiUrl("mainnet-beta"), "confirmed");
    @@ -47,6 +47,15 @@
     
     client = Client("https://api.mainnet-beta.solana.com")
     
    #include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +    Connection connection("https://api.mainnet-beta.solana.com");
    +    return 0;
    +}
    +
    use solana_client::rpc_client::RpcClient;
     use solana_sdk::commitment_config::CommitmentConfig;
     
    @@ -58,7 +67,7 @@
     let client = RpcClient::new_with_commitment(rpc_url, CommitmentConfig::confirmed());
     
    solana config set --url https://api.mainnet-beta.solana.com
     

    Schließlich können Sie sich auch mit einem privaten Cluster verbinden, entweder einem lokalen oder einem läuft remote mit folgendem:

    Press </> button to view full source
    import { Connection } from "@solana/web3.js";
    +

    Schließlich können Sie sich auch mit einem privaten Cluster verbinden, entweder einem lokalen oder einem läuft remote mit folgendem:

    Press </> button to view full source
    import { Connection } from "@solana/web3.js";
     
     (async () => {
       // This will connect you to your local validator
    @@ -69,6 +78,15 @@
     
     client = Client("http://127.0.0.1:8899")
     
    #include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +    Connection connection("http://127.0.0.1:8899");
    +    return 0;
    +}
    +
    use solana_client::rpc_client::RpcClient;
     use solana_sdk::commitment_config::CommitmentConfig;
     
    @@ -80,7 +98,7 @@
     let client = RpcClient::new_with_commitment(rpc_url, CommitmentConfig::confirmed());
     
    solana config set --url http://privaterpc.com
     

    Abonnieren von Veranstaltungen

    Websockets bieten eine Pub/Sub-Schnittstelle, auf der Sie auf bestimmte Ereignisse lauschen können. Anstatt einen typischen HTTP-Endpunkt in regelmäßigen Abständen zu pingen, um häufige Updates zu erhalten, können Sie diese Updates stattdessen nur dann erhalten, wenn sie auftreten.

    Solanas web3 Connectionopen in new window generiert unter der Haube einen Websocket-Endpunkt und registriert einen Websocket-Client, wenn Sie eine neue Connection-Instanz (siehe Quellcode hieropen in new window).

    Die Klasse „Connection“ legt Pub/Sub-Methoden offen – sie beginnen alle mit „on“, wie Event-Emitter. Wenn Sie diese Listener-Methoden aufrufen, wird ein neues Abonnement für den Websocket-Client dieser „Connection“-Instanz registriert. Die Pub/Sub-Beispielmethode, die wir unten verwenden, ist onAccountChangeopen in new window. Der Rückruf stellt die aktualisierten Zustandsdaten über Argumente bereit (siehe AccountChangeCallbackopen in new window als Beispiel).

    Press </> button to view full source
    import { clusterApiUrl, Connection, Keypair } from "@solana/web3.js";
    +

    Abonnieren von Veranstaltungen

    Websockets bieten eine Pub/Sub-Schnittstelle, auf der Sie auf bestimmte Ereignisse lauschen können. Anstatt einen typischen HTTP-Endpunkt in regelmäßigen Abständen zu pingen, um häufige Updates zu erhalten, können Sie diese Updates stattdessen nur dann erhalten, wenn sie auftreten.

    Solanas web3 Connectionopen in new window generiert unter der Haube einen Websocket-Endpunkt und registriert einen Websocket-Client, wenn Sie eine neue Connection-Instanz (siehe Quellcode hieropen in new window).

    Die Klasse „Connection“ legt Pub/Sub-Methoden offen – sie beginnen alle mit „on“, wie Event-Emitter. Wenn Sie diese Listener-Methoden aufrufen, wird ein neues Abonnement für den Websocket-Client dieser „Connection“-Instanz registriert. Die Pub/Sub-Beispielmethode, die wir unten verwenden, ist onAccountChangeopen in new window. Der Rückruf stellt die aktualisierten Zustandsdaten über Argumente bereit (siehe AccountChangeCallbackopen in new window als Beispiel).

    Press </> button to view full source
    import { clusterApiUrl, Connection, Keypair } from "@solana/web3.js";
     
     (async () => {
       // Establish new connect to devnet - websocket client connected to devnet will also be registered here
    @@ -111,7 +129,7 @@
       "confirmed"
     );
     
    import asyncio
    -from solana.keypair import Keypair
    +from solders.keypair import Keypair
     from solana.rpc.websocket_api import connect
     
     async def main():
    @@ -119,7 +137,7 @@
             # Create a Test Wallet
             wallet = Keypair()
             # Subscribe to the Test wallet to listen for events
    -        await websocket.account_subscribe(wallet.public_key)
    +        await websocket.account_subscribe(wallet.pubkey())
             # Capture response from account subscription 
             first_resp = await websocket.recv()
             print("Subscription successful with id {}, listening for events \n".format(first_resp.result))
    @@ -131,13 +149,62 @@
         # Create a Test Wallet
         wallet = Keypair()
         # Subscribe to the Test wallet to listen for events
    -    await websocket.account_subscribe(wallet.public_key)
    +    await websocket.account_subscribe(wallet.pubkey())
         # Capture response from account subscription 
         first_resp = await websocket.recv()
         print("Subscription successful with id {}, listening for events \n".format(first_resp.result))
         updated_account_info = await websocket.recv()
         print(updated_account_info)    
    -
    use solana_client::pubsub_client::PubsubClient;
    +
    // clang++ on_account_change.cpp -o on_account_change -std=c++17 -lssl -lcrypto -lsodium
    +
    +#include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +  Connection connection("https://api.devnet.solana.com");
    +
    +  auto key_pair = Keypair::generate();
    +
    +  int subscriptionId = connection.on_account_change(key_pair.public_key, [&](Result<Account> result) {
    +    Account account = result.unwrap();
    +    std::cout << "owner = " << account.owner.to_base58() << std::endl;
    +    std::cout << "lamports = " << account.lamports << std::endl;
    +    std::cout << "data = " << account.data << std::endl;
    +    std::cout << "executable = " << (account.executable ? "true" : "false") << std::endl;
    +  });
    +
    +  sleep(1);
    +
    +  std::string tx_hash = connection.request_airdrop(key_pair.public_key).unwrap();
    +  std::cout << "tx hash = " << tx_hash << std::endl;
    +
    +  for (int i = 0; i < 10; i++) {
    +    connection.poll();
    +    sleep(1);
    +  }
    +
    +  connection.remove_account_listener(subscriptionId);
    +
    +  return 0;
    +}
    +
    use solana_client::pubsub_client::PubsubClient;
     use solana_client::rpc_config::RpcAccountInfoConfig;
     use solana_sdk::commitment_config::CommitmentConfig;
     use solana_sdk::signature::{Keypair, Signer};
    @@ -186,7 +253,7 @@
     ).unwrap();
     let message = match receiver.recv().unwrap();
     println!("{:?}", message)
    -

    Test SOL erhalten

    Wenn Sie lokal arbeiten, benötigen Sie zum Senden etwas SOL Transaktionen. In Nicht-Mainnet-Umgebungen können Sie SOL per empfangen Airdrop an Ihre Adresse

    Press </> button to view full source
    import { Connection, Keypair, LAMPORTS_PER_SOL } from "@solana/web3.js";
    +

    Test SOL erhalten

    Wenn Sie lokal arbeiten, benötigen Sie zum Senden etwas SOL Transaktionen. In Nicht-Mainnet-Umgebungen können Sie SOL per empfangen Airdrop an Ihre Adresse

    Press </> button to view full source
    import { Connection, Keypair, LAMPORTS_PER_SOL } from "@solana/web3.js";
     
     (async () => {
       const keypair = Keypair.generate();
    @@ -210,7 +277,7 @@
     );
     
     await connection.confirmTransaction(airdropSignature);
    -
    from solana.keypair import Keypair
    +
    from solders.keypair import Keypair
     from solana.rpc.api import Client
     
     wallet = Keypair()
    @@ -218,14 +285,32 @@
     client = Client("https://api.devnet.solana.com")
     
     #Input Airdrop amount in LAMPORTS
    -client.request_airdrop(wallet.public_key, 1000000000)
    +client.request_airdrop(wallet.pubkey(), 1000000000)
     
     #Airdrops 1 SOL
     
    use solana_client::rpc_client::RpcClient;
    +
    // clang++ request_airdrop.cpp -o request_airdrop -std=c++17 -lssl -lcrypto -lsodium
    +
    +#include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +  Connection connection("https://api.devnet.solana.com");
    +
    +  auto key_pair = Keypair::generate();
    +
    +  std::string tx_hash = connection.request_airdrop(key_pair.public_key).unwrap();
    +
    +  std::cout << "tx hash = " << tx_hash << std::endl;
    +
    +  return 0;
    +}
    +
    use solana_client::rpc_client::RpcClient;
     use solana_sdk::commitment_config::CommitmentConfig;
     use solana_sdk::native_token::LAMPORTS_PER_SOL;
     use solana_sdk::signature::{Keypair, Signer};
    @@ -276,6 +361,6 @@
     solana-test-validator --bpf-program 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin serum_dex_v3.so --reset
     
    Last Updated:
    - + diff --git a/docs/.vuepress/dist/de/references/name-service.html b/docs/.vuepress/dist/de/references/name-service.html index 6498a92d3..850cdd4c4 100644 --- a/docs/.vuepress/dist/de/references/name-service.html +++ b/docs/.vuepress/dist/de/references/name-service.html @@ -23,7 +23,7 @@ } Name Service | Solana Cookbook - + @@ -181,7 +181,7 @@ const subDomain = "demo"; // Step 1 -const hashedParentDomain = await getHashedName(mainDomain); +const hashedParentDomain = await getHashedName(parentDomain); const parentDomainKey = await getNameAccountKey( hashedParentDomain, undefined, @@ -260,6 +260,6 @@ const registry = await getTwitterRegistry(connection, handle); - + diff --git a/docs/.vuepress/dist/de/references/nfts.html b/docs/.vuepress/dist/de/references/nfts.html index 1624107fa..e254018fe 100644 --- a/docs/.vuepress/dist/de/references/nfts.html +++ b/docs/.vuepress/dist/de/references/nfts.html @@ -23,7 +23,7 @@ } NFTs | Solana Cookbook - + @@ -271,11 +271,13 @@ const metaplex = new Metaplex(connection); metaplex.use(keypairIdentity(keypair)); - const mint = new PublicKey("Ay1U9DWphDgc7hq58Yj1yHabt91zTzvV2YJbAWkPNbaK"); + const mintAddress = new PublicKey( + "Ay1U9DWphDgc7hq58Yj1yHabt91zTzvV2YJbAWkPNbaK" + ); - const nft = await metaplex.nfts().findByMint(mint); + const nft = await metaplex.nfts().findByMint({ mintAddress }); - console.log(nft.metadata); + console.log(nft.json); /* { name: 'SMB #139', @@ -302,18 +304,20 @@ } */ })(); -

    So erhalten Sie den Besitzer eines NFT

    Wenn Sie den Münzschlüssel (Token Address) eines NFT haben, können Sie seinen aktuellen Besitzer durch Sneak-Peeking auf das größte Token-Konto für diesen Mint-Key finden.

    Denken Sie daran, dass NFTs einen Vorrat von 1 haben und unteilbar sind. was bedeutet, dass nur ein Token-Konto dieses Token zu einem beliebigen Zeitpunkt halten wird, während alle anderen Token-Konten für diesen Münzschlüssel, die dies tun einen Saldo von 0 haben.

    Sobald das größte Token-Konto identifiziert ist, können wir seinen Besitzer abrufen.

    Press </> button to view full source
    import { Connection, PublicKey } from "@solana/web3.js";
    +console.log(nft.json);
    +

    So erhalten Sie den Besitzer eines NFT

    Wenn Sie den Münzschlüssel (Token Address) eines NFT haben, können Sie seinen aktuellen Besitzer durch Sneak-Peeking auf das größte Token-Konto für diesen Mint-Key finden.

    Denken Sie daran, dass NFTs einen Vorrat von 1 haben und unteilbar sind. was bedeutet, dass nur ein Token-Konto dieses Token zu einem beliebigen Zeitpunkt halten wird, während alle anderen Token-Konten für diesen Münzschlüssel, die dies tun einen Saldo von 0 haben.

    Sobald das größte Token-Konto identifiziert ist, können wir seinen Besitzer abrufen.

    Press </> button to view full source
    import { Connection, PublicKey } from "@solana/web3.js";
     
     (async () => {
       const connection = new Connection("https://api.mainnet-beta.solana.com");
    @@ -540,7 +544,7 @@
       metaplex.use(keypairIdentity(keypair));
     
       const owner = new PublicKey("2R4bHmSBHkHAskerTHE6GE1Fxbn31kaD5gHqpsPySVd7");
    -  const allNFTs = await metaplex.nfts().findAllByOwner(owner);
    +  const allNFTs = await metaplex.nfts().findAllByOwner({ owner });
     
       console.log(allNFTs);
     })();
    @@ -551,7 +555,7 @@
     metaplex.use(keypairIdentity(keypair));
     
     const owner = new PublicKey("2R4bHmSBHkHAskerTHE6GE1Fxbn31kaD5gHqpsPySVd7");
    -const allNFTs = await metaplex.nfts().findAllByOwner(owner);
    +const allNFTs = await metaplex.nfts().findAllByOwner({ owner });
     
     console.log(allNFTs);
     

    Candy Machine v2

    Das Metaplex JS SDK unterstützt jetzt das Erstellen und Aktualisieren von Candy Machine v2 per Code. Es ermöglicht den Entwicklern, mit dem Candy Machine v2-Programm zu interagieren und Candy Machines zu erstellen, zu aktualisieren und zu löschen sowie NFTs mit ihnen zu prägen.

    Wie erstelle ich eine Candy Machine?

    Press </> button to view full source
    import {
    @@ -834,6 +838,6 @@
       // newOwner: new PublicKey("some-other-public-key");
     });
     
    - + diff --git a/docs/.vuepress/dist/de/references/offline-transactions.html b/docs/.vuepress/dist/de/references/offline-transactions.html index 6881d71b8..62b97db1f 100644 --- a/docs/.vuepress/dist/de/references/offline-transactions.html +++ b/docs/.vuepress/dist/de/references/offline-transactions.html @@ -23,7 +23,7 @@ } Senden von Offline-Transaktionen | Solana Cookbook - + @@ -457,6 +457,6 @@ console.log(`txhash: ${await connection.sendRawTransaction(tx.serialize())}`); - + diff --git a/docs/.vuepress/dist/de/references/programs.html b/docs/.vuepress/dist/de/references/programs.html index 0706ac779..b289af48f 100644 --- a/docs/.vuepress/dist/de/references/programs.html +++ b/docs/.vuepress/dist/de/references/programs.html @@ -23,7 +23,7 @@ } Programme schreiben | Solana Cookbook - + @@ -1496,6 +1496,6 @@ } - + diff --git a/docs/.vuepress/dist/de/references/staking.html b/docs/.vuepress/dist/de/references/staking.html index 0ff271b87..d1df81944 100644 --- a/docs/.vuepress/dist/de/references/staking.html +++ b/docs/.vuepress/dist/de/references/staking.html @@ -23,7 +23,7 @@ } Staking | Solana Cookbook - + @@ -641,6 +641,6 @@ stakeBalance = await connection.getBalance(stakeAccount.publicKey); console.log(`Stake account balance: ${stakeBalance / LAMPORTS_PER_SOL} SOL`); - + diff --git a/docs/.vuepress/dist/de/references/token.html b/docs/.vuepress/dist/de/references/token.html index 5290f3917..7ca13b980 100644 --- a/docs/.vuepress/dist/de/references/token.html +++ b/docs/.vuepress/dist/de/references/token.html @@ -23,7 +23,7 @@ } Interaktion mit Tokens | Solana Cookbook - + @@ -1273,6 +1273,6 @@ mint: mint, }); - + diff --git a/docs/.vuepress/dist/es/core-concepts/accounts.html b/docs/.vuepress/dist/es/core-concepts/accounts.html index 6c8d0bb63..cffb64b26 100644 --- a/docs/.vuepress/dist/es/core-concepts/accounts.html +++ b/docs/.vuepress/dist/es/core-concepts/accounts.html @@ -23,11 +23,11 @@ } Cuentas | Solana Cookbook - +

    Cuentas

    Las Cuentas en Solana son usadas para almacenar el estado. Son una pieza fundamental en el desarrollo de programas en Solana.

    Hechos

    Lista de hechos

    • Las cuentas son usadas para almacenar estado
    • Cada cuenta tiene una dirección única
    • Las cuentas tienen un tamaño máximo de 10MB (10 Mega Bytes)
    • Las cuentas de direcciones derivadas de programa (PDA) tienen un tamaño máximo de 10KB (10 Kilo Bytes)
    • Las cuentas de direcciones derivadas de programa (PDA) pueden ser usadas para firmar a nombre de un programa
    • Los tamaños de las cuentas son definidos al momento de la creación, pero pueden ser ajustados usando reallocopen in new window
    • El almacenamiento de datos en una cuenta es pagado con la renta
    • El dueño por defecto de una cuenta es el programa del sistema (System Program)

    Un vistazo más profundo

    El modelo de una cuenta

    Hay 3 tipos de cuentas en Solana:

    • Cuentas de datos para almacenar datos
    • Cuentas de programas para almacenar programas ejecutables
    • Cuentas nativas para los programas nativos de Solana como System, Stake, y Vote

    En las cuentas de datos hay 2 tipos:

    • Cuentas de propiedad del sistema (System owned accounts)
    • Cuentas de direcciones derivadas de programa o PDA (Program Derived Address)

    Cada cuenta tiene una dirección (usualmente una llave pública) y un dueño (dirección de la cuenta del programa). La lista completa de los campos que tiene una cuenta se encuentra a continuación.

    FieldDescription
    lamportsEl número de lamports que tiene la cuenta
    ownerEl programa dueño de esa cuenta
    executableIndica si la cuenta procesa transacciones
    dataEl array de bytes de datos que tiene la cuenta
    rent_epochLa siguiente época que esta cuenta deberá renta

    Hay algunos reglas importantes de propiedad de la cuenta:

    • Solo el dueño de la cuenta de datos puede modificar sus datos y debitar lamports
    • Cualquier puede enviar lamports a una cuenta de datos
    • El duseño de la cuenta puede asignar un nuevo dueño si la cuenta no tiene datos

    Las cuentas de programa no almacenan datos.

    Por ejemplo, si existiera un programa que cuenta que permite incrementar el contador, debes crear 2 cuentas, una para almacenar el código del programa (ejecutable) y otra para almacenar el contador (no ejecutable).

    Para evitar que las cuentas sean elmininadas se debe pagar renta.

    Renta

    Almacenar datos en las cuentas cuesta SOL para mantenerlas y es pagado a través de las rentas. Si mantienes un balance mínimo equivalente a 2 años de renta en la cuenta, la cuenta no tendrá que pagar renta, como un depósito de garantía. Luego puedes obtener de vuelta el valor de la renta al cerrar la cuenta y enviar los lamports hacia tu wallet.

    La renta es pagada en dos momentos:

    1. Cuando es iniciado por una transacción
    2. Una vez por época (cantidad de slots)

    Un porcentaje de las rentas es eliminado y el resto es distribuido para votar al final de cada slot.

    Si la cuenta no tiene suficiente renta para pagar, la cuenta será eliminada junto con sus datos.

    Otros recursos

    Creditos

    El concepto de cuentas es gracias a Pencilflip. Pueden seguir a Penciflip en Twitteropen in new window.

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/es/core-concepts/pdas.html b/docs/.vuepress/dist/es/core-concepts/pdas.html index 4476ae213..2741d2c85 100644 --- a/docs/.vuepress/dist/es/core-concepts/pdas.html +++ b/docs/.vuepress/dist/es/core-concepts/pdas.html @@ -23,11 +23,11 @@ } Direcciones derivadas de programa (PDAs) | Solana Cookbook - +

    Direcciones derivadas de programa (PDAs)

    Direcciones derivadas de programa (PDAs) son cuentas diseñadas específicamente para ser controladas por programas. Con PDAs, los programas puede firmar para ciertas direcciones sin la necesidad de una llave privada. PDAs sirven como la base para la Invocación entre programasopen in new window, que permite la composición entre apps de Solana.

    Hechos

    Hola de hechos

    • PDAs son cadenas de 32 bytes que lucen como llaves públicas pero no tienen una llave privada relacionada
    • findProgramAddress deriva de forma determinista un PDA de un programId y unas semillas (colección de bytes)
    • Un bump (un byte) es usado para empujar a un potencial PDA fuera de la curva elíptica ed25519
    • Los programas pueden firmar por sus PDAs usando sus seeds y bump invoke_signedopen in new window
    • Un PDA solo puede ser firmado por el programa del cual ha sido derivada
    • Además de permitir a los programas firmar diferentes instrucciones, PDAs también brindan una interfaz tipo hashmap para indexar cuentas

    Un vistazo más profundo

    Los PDA son un componente esencial para desarrollar programas en Solana. Con las PDA, los programas pueden firmar cuentas mientras garantizan que ningún usuario externo pueda generar una firma válida para la misma. Además de firmar cuentas, ciertos programas también pueden modificar cuentas en sus PDA.

    Accounts matrix

    Image courtesy of Pencilflip

    Generando PDAs

    Para entender el concepto detrás de las PDA, puede ser útil considerar que las PDA no se crean técnicamente, sino que se encuentran. Los PDA se generan a partir de una combinación de semillas (como la cadena “vote_account”) y un id de programa. Esta combinación de semillas y de un id de programa luego se ejecuta a través de una función hash sha256 para ver si generan o no una clave pública que se encuentra en la curva elíptica ed25519.

    Al ejecutar el id del programa y las semillas de nuestro programa a través de una función hash, hay una probabilidad de ~50% de que en realidad terminemos con una clave pública válida que se encuentre en la curva elíptica. En este caso, simplemente agregamos algo para modificar un poco nuestra entrada y lo intentamos de nuevo. El término técnico para este algo es un bump. En Solana, comenzamos con bump = 255 y simplemente iteramos hacia abajo, bump = 254, bump = 253, etc. hasta que obtengamos una dirección que no esté en la curva elíptica. Esto puede parecer rudimentario, pero una vez encontrado nos da una forma determinista de derivar el mismo PDA una y otra vez.

    PDA en la curva elíptica

    Interactuando con PDAs

    Cuando un PDA es generado, findProgramAddress retorna la dirección y el bump usado para sacar la dirección fuera de la curva elíptica. Con el bump, un programa puede firmar por cualquier transacción que requiera el PDA. Para firmar, los programas deben pasar la instrucción, la lista de las cuentas, las semillas y el bump usado para derivar el PDA a la función invoke_signed. Además de firmar para instrucciones, PDAs también deben firmar su propia creación con invoke_signed.

    Cuando se crean PDAs, es común guardar el bump y los seedsopen in new window en los datos de la misma cuenta. Esto permite a los desarrolladores validar fácilmente un PDA sin tener que enviar el bump como argumento en la instrucción.

    Other Resources

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/es/core-concepts/programs.html b/docs/.vuepress/dist/es/core-concepts/programs.html index c6ba6d018..922fbfbab 100644 --- a/docs/.vuepress/dist/es/core-concepts/programs.html +++ b/docs/.vuepress/dist/es/core-concepts/programs.html @@ -23,12 +23,12 @@ } Programas | Solana Cookbook - +

    Programas

    Cualquier desarrollador puede escribir e implementar programas en la cadena de bloques de Solana. Los programas (conocidos como contratos inteligentes en otros protocolos) sirven como base para la actividad dentro de la cadena de bloques, potenciando desde DeFi y NFTs hasta redes sociales y juegos.

    Hechos

    Hoja de hechos

    • Los programas procesan instrucciones de otros programas y de usuarios finales
    • Todos los programas son stateless (sin estado): Los datos con los que interactúan son almacenados en cuentas que son enviadas al programa en instrucciones
    • Los mismos programas son almacenadas en cuentas marcadas como executable (ejecutables)
    • El dueño de todos los programas es BPF Loaderopen in new window y es ejectuado por el Runtime de Solanaopen in new window
    • Los programadores comunmente utilizan Rust y C++ para escribir programas, pero pueden elegir cualquier lenguaje que compile con el backend de BPFopen in new window para LLVMopen in new window
    • Todos los programas tienen un punto único de entrada donde se procesan las instrucciones (i.e. process_instruction); los parámetros siempre incluyen:
      • program_id: pubkey
      • accounts: array,
      • instruction_data: byte array

    Un vistazo más profundo

    A diferencia de la mayoría de cadenas de bloques, Solana separa completamente el código de los datos. Todos los datos con los que interactúan los programas se almacenan en cuentas separadas y se envían a través de instrucciones. Este modelo permite que un único programa genérico funcione en varias cuentas sin necesidad de implementaciones adicionales. Se ven ejemplos comunes de este patrón en los programas nativos y SPL.

    Programas nativos & La librería de Programas de Solana (SPL)

    Solana viene equipado con programas que sirven como bloques de construcción para interactuar con la cadena de bloques. Estos programas están dividos en Programas nativosopen in new window y Programas de la librería de programas (SPL)open in new window.

    Los programas nativos brindan la funcionalidad base que es requerida para operar validadores. Entre estos programas el más conocido es el Programa del sistema (System Program)open in new window que es responsable de administrar las cuentas y transferir SOL.

    Los programas de la librería de programas soportan otras actividades dentro de la cadena de bloques como crear tokens, intercambiarlos, prestar tokens, así como generar pools de staking y mantener el servicio de nombres dentro de la cadena de bloques. El Programa de Token (SPL Token Program)open in new window puede ser invocado directamente desde el CLI (Command Line Interface), mientras que otros como el Programa de cuentas asociadas a token (Associated Token Account Program)open in new window son usados dentro de otros programas.

    Escribiendo programas

    Los Programas están escritos comunmente en Rust o C++, pero pueden ser desarrollado con cualquier lenguaje que compile al backend BPF de LLVM. Iniciativas recientes de Neon Labsopen in new window y Solangopen in new window habilitan la compatibilidad con EVMopen in new window para permitir a desarrolladores escribir programas con Solidity.

    La mayoría de programas de Rust siguen la siguiente arquitectura:

    ArcguviDescripción
    lib.rsRegistro de módulos
    entrypoint.rsPunto de entrada para el programa
    instruction.rsAPI del programa, deserializa las instrucciones
    processor.rsLógica del programa
    state.rsObjetos del programa, deserializa el estado
    error.rsErrores específicos del programa

    Recientemente, Anchoropen in new window se ha convertido en el framework más popular para desarrollar programas. Anchor es un framework que reduce el boilerplate y facilita la deserialización para los programas desarrollados en Rust.

    Los programas normalmente son desarrollados y testeados en los entornos Localhost y Devnet antes de ser desplegados a Testnet y Mainnet. Solana soporta los siguientes entornos:

    Entorno del clusterURL de conexión RPC
    Mainnet-betahttps://api.mainnet-beta.solana.com
    Testnethttps://api.testnet.solana.com
    Devnethttps://api.devnet.solana.com
    LocalhostDefault port: 8899 (e.g. http://localhost:8899, http://192.168.1.88:8899)

    Una vez desplegado a un entorno, los clientes pueden interactuar con el programa dentro de la cadena de bloques utilizando Conexiones RPCopen in new window apuntando al cluster correspondiente.

    Desplegando Programas

    Los desarrolladores pueden desplegar sus programas utilizando el CLIopen in new window:

    solana program deploy <PROGRAM_FILEPATH>
     

    Cuando un programa es desplegado, es compilado a un ELF shared objectopen in new window (conteniendo el bytecode de BPF) y subido al cluster de Solana. Los Programas viven en cuentas (como casi todo en Solana), con la excepción de aquellas marcadas como executable y asignadas al BPF Loader. La dirección del programa desplegada se llama program_id y es usada para llamar al programa.

    Solana soporta múltiples BPF Loaders, siendo el último el Upgradable BPF Loaderopen in new window. El BPF Loader es responsable de administrar las cuentas del programa y hacerlas accesibles a los clientes a través del program_id. Todos los programas tienen un único punto de entrada donde se procesan las instrucciones (i.e. process_instruction) y los parámetros siempre incluyen:

    • program_id: pubkey
    • accounts: array,
    • instruction_data: byte array

    Una vez llamado, los Programas son ejecutados por el Runtime de Solana.

    Other Resources

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/es/core-concepts/transactions.html b/docs/.vuepress/dist/es/core-concepts/transactions.html index e07521541..462e9390c 100644 --- a/docs/.vuepress/dist/es/core-concepts/transactions.html +++ b/docs/.vuepress/dist/es/core-concepts/transactions.html @@ -23,11 +23,11 @@ } Transacciones | Solana Cookbook - +

    Transacciones

    Los clientes pueden invocar programas enviando una transacción a un cluster. Una transacción puede incluir múltiples instrucciones, cada una de ellas apuntando a un programa diferente. Cuando una transacción es enviada, el Runtimeopen in new window de Solana procesará sus instrucciones en orden y de forma atómica. Si una parte de la transacción falla, toda la transacción fallará.

    Hechos

    Hoja de hechos

    • Las instrucciones son la unidad de operación más básica en Solana
    • Cada instrucción contiene:
      • El program_id (id del programa) del programa al que apunta
      • Un arreglo de todas accounts (cuentas) donde va a leer o escribir
      • Un instruction_data (datos de la instrucción) que es un byte array para el programa específico
    • Varias instrucciones pueden estar contenidas en una Transacción
    • Cada transacción consiste de:
      • Un arreglo de todas accounts (cuentas) donde va a leer o escribir
      • Una o más instructions (instrucciones)
      • Un blockhash (hash de bloque) reciente
      • Una o más signatures (firmas)
    • Las instrucciones son procesadas en orden y de forma atómica
    • Si una parte de la transacción falla, toda la transacción fallará
    • Las transacciones están limitadas a un máximo de 1232 bytes

    Un vistazo más profundo

    El Runtime de Solana requiere tanto de instrucciones como de transacciones para especificar una lista de todas las cuentas de las que va a leer o escribir. Al requerir estas cuentas por adelantado, el Runtime de Solana es capaz de paralelizar la ejecución en todas las transacciones.

    Cuando se envía una transacción a un clúster, el Runtime de Solana procesará sus instrucciones en orden y de forma atómica. Para cada instrucción, el programa al que se invoca interpretará el arreglo de datos y operará en las cuentas especificadas. El programa retornará con éxito o un código de error. Si se devuelve un error, toda la transacción fallará inmediatamente.

    Toda transacción que debite de una cuenta o modique sus datos requiere la firma del titular de la cuenta. Cualquier cuenta que se modificará será marcada como writable. Una cuenta puede recibir fondos sin el permiso del titular siempre que el pagador del cargo (fee) cubra la renta y las tarifas de transacción.

    Antes de enviar una transacción se debe enviar un hash de bloque recienteopen in new window. El hash de bloque reciente es usado para prevenir duplicados y eliminar transacciones obsoletas. El tiempo máximo del hash de bloque reciente de una transacción es de 150 bloques, o aproximadamente ~1 minuto 19 segundos al momento de escribir este artículo.

    Cargos (fees)

    La red de Solana colecta 2 tipos de cargos:

    En Solana, los cargos son deterministas: no existe el concepto de un mercado de cargos en el que los usuarios puedan pagar tarifas más altas para aumentar sus posibilidades de ser incluidos en el siguiente bloque. Al momento de redactar este documento, las tarifas de transacción están determinadas únicamente por la cantidad de firmas requeridas (es decir, lamports_per_signature), no por la cantidad de recursos utilizados. Esto se debe a que actualmente existe un límite máximo de 1232 bytes en todas las transacciones.

    Todas las transacciones requieren al menos una cuenta sea writable (escribible) para firmar la transacción. Una vez enviada, la cuenta del firmante que se serializa primero será el pagador del cargo (fee). Esta cuenta pagará el costo de la transacción sin importar si la transacción tiene éxito o falla. Si el pagador del cargo no tiene saldo suficiente para pagar la tarifa de transacción, la transacción se cancelará.

    Al momento de escribir este artículo, el validador que produce el bloque cobra el 50% de todas las tarifas de transacción, mientras que el 50% restante se quema. Esta estructura funciona para incentivar a los validadores a procesar tantas transacciones como sea posible durante sus espacios en el programa líder.

    Other Resources

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/es/getting-started/installation.html b/docs/.vuepress/dist/es/getting-started/installation.html index 67c780623..ab2dc5a37 100644 --- a/docs/.vuepress/dist/es/getting-started/installation.html +++ b/docs/.vuepress/dist/es/getting-started/installation.html @@ -23,7 +23,7 @@ } Instalación | Solana Cookbook - + @@ -71,6 +71,6 @@ export PATH=$PWD/bin:$PATH

    Puedes ejecutar el siguiente comando para obtener el mismo resultado que con los binarios pre-armados.

    solana-install init
     
    - + diff --git a/docs/.vuepress/dist/es/guides/account-maps.html b/docs/.vuepress/dist/es/guides/account-maps.html index 050bc8458..e74554295 100644 --- a/docs/.vuepress/dist/es/guides/account-maps.html +++ b/docs/.vuepress/dist/es/guides/account-maps.html @@ -23,7 +23,7 @@ } Cómo usar Map en cuentas | Solana Cookbook - + @@ -1136,6 +1136,6 @@ tx.add(insertBCIx); tx.add(insertCAIx); - + diff --git a/docs/.vuepress/dist/es/guides/data-migration.html b/docs/.vuepress/dist/es/guides/data-migration.html index 0a9a99268..8295e4f5b 100644 --- a/docs/.vuepress/dist/es/guides/data-migration.html +++ b/docs/.vuepress/dist/es/guides/data-migration.html @@ -23,7 +23,7 @@ } Migrando cuentas de datos de programas | Solana Cookbook - + @@ -676,6 +676,6 @@ } }

    Después de crear y enviar una instrucción: VersionProgramInstruction::SetString(String) ahora tenemos el siguiente diseño de datos de cuenta 'actualizado'

    Program Account v2

    Resources

    - + diff --git a/docs/.vuepress/dist/es/guides/debugging-solana-programs.html b/docs/.vuepress/dist/es/guides/debugging-solana-programs.html index bc3a20221..af055d9fa 100644 --- a/docs/.vuepress/dist/es/guides/debugging-solana-programs.html +++ b/docs/.vuepress/dist/es/guides/debugging-solana-programs.html @@ -23,7 +23,7 @@ } Depurando Programas en Solana | Solana Cookbook - + @@ -48,6 +48,6 @@ test test_validator_transaction ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 6.40s

    La depuración aquí le permitirá depurar las funciones y los métodos utilizados en el cuerpo de prueba, pero no un punto de interrupción en su programa.

    Pruebas de nodos de validadores locales desde aplicaciones cliente

    Por último, puede iniciar un nodo de validación local y cargar su programa y cualquier cuenta usando solana-test-validator desde la línea de comandos.

    En este enfoque, necesitará una aplicación cliente usando Rust RcpClient o en Clientes JavaScript o Typescript

    Consulte solana-test-validator --help para obtener más detalles y opciones. Para el programa de ejemplo aquí está la configuración:

    1. Abra una terminal en la carpeta repo
    2. Ejecute solana config set -ul para configurar la configuración para que apunte a local
    3. Ejecute solana-test-validator --bpf-program target/deploy/bpf_program_template-keypair.json target/deploy/bpf_program_template.so
    4. Abra otra terminal y ejecute solana logs para iniciar el transmisor de registros
    5. Luego puede ejecutar su programa cliente y observar la salida del programa en la terminal donde inició el transmisor de registros.

    Recursos

    solana-program-bpf-templateopen in new window

    RcpClientopen in new window

    Librería JavaScript/Typescriptopen in new window

    - + diff --git a/docs/.vuepress/dist/es/guides/feature-parity-testing.html b/docs/.vuepress/dist/es/guides/feature-parity-testing.html index a6398787e..b995a4bc4 100644 --- a/docs/.vuepress/dist/es/guides/feature-parity-testing.html +++ b/docs/.vuepress/dist/es/guides/feature-parity-testing.html @@ -23,7 +23,7 @@ } Prueba de paridad de características | Solana Cookbook - + @@ -302,6 +302,6 @@ assert!(txn.is_ok()); }

    Happy Testing!

    Recursos

    scfsdopen in new window

    gadget-scfsopen in new window

    - + diff --git a/docs/.vuepress/dist/es/guides/get-program-accounts.html b/docs/.vuepress/dist/es/guides/get-program-accounts.html index 62b19066c..ddd9e7566 100644 --- a/docs/.vuepress/dist/es/guides/get-program-accounts.html +++ b/docs/.vuepress/dist/es/guides/get-program-accounts.html @@ -23,7 +23,7 @@ } Obtener cuentas de programa | Solana Cookbook - + @@ -444,6 +444,6 @@ # "id": 1 # }

    Al combinar los tres parámetros (dataSlice, dataSize y memcmp) podemos limitar el alcance de nuestra consulta y devolver de manera eficiente solo los datos que nos interesan.

    Otros recursos

    - + diff --git a/docs/.vuepress/dist/es/guides/retrying-transactions.html b/docs/.vuepress/dist/es/guides/retrying-transactions.html index 2b016ce3d..55a1c18dc 100644 --- a/docs/.vuepress/dist/es/guides/retrying-transactions.html +++ b/docs/.vuepress/dist/es/guides/retrying-transactions.html @@ -23,7 +23,7 @@ } Reintentando Transacciones | Solana Cookbook - + @@ -89,6 +89,6 @@ blockheight = await connection.getBlockHeight(); }

    Al consultar datos a través de getLatestBlockhash, las aplicaciones deben especificar su nivel de commitment (compromiso)open in new window. Al establecer su compromiso en confirmado (votado) o finalizado (~30 bloques después de confirmado), una aplicación puede evitar consultar un blockhash de una bifurcación minoritaria.

    Si una aplicación tiene acceso a nodos RPC detrás de un balanceador de carga, también puede optar por dividir su carga de trabajo entre nodos específicos. Los nodos RPC que atienden solicitudes de datos intensivos como getProgramAccounts pueden ser propensos a quedarse atrás y pueden no ser adecuados para reenviar transacciones. Para las aplicaciones que manejan transacciones sensibles al tiempo, puede ser prudente tener nodos dedicados que solo manejen sendTransaction.

    El costo de omitir la verificación previa

    De forma predeterminada, sendTransaction realizará tres comprobaciones previas antes de enviar una transacción. Específicamente, sendTransaction hará lo siguiente:

    En el caso de que cualquiera de estas tres verificaciones previas falle, sendTransaction generará un error antes de enviar la transacción. Las comprobaciones previas a menudo pueden ser la diferencia entre perder una transacción y permitir que un cliente maneje correctamente un error. Para garantizar que se tengan en cuenta estos errores comunes, se recomienda que los desarrolladores mantengan skipPreflight establecido en false.

    Cuándo volver a firmar transacciones

    A pesar de todos los intentos de retransmisión, puede haber momentos en los que un cliente deba volver a firmar una transacción. Antes de volver a firmar cualquier transacción, es muy importante asegurarse de que el blockhash de la transacción inicial haya expirado. Si el blockhash inicial aún es válido, es posible que la red acepte ambas transacciones. Para un usuario final, esto parecería como si sin querer enviara la misma transacción dos veces.

    En Solana, una transacción descartada por la red puede ser descartada de manera segura una vez que el blockhash al que hace referencia es más antiguo que el lastValidBlock recibido de getRecentBlockhash. Los desarrolladores pueden verificar esto convenientemente para un blockhash dado a través de isBlockhashValidopen in new window. Una vez que se invalida un blockhash, los clientes pueden volver a firmar con un blockhash recién consultado.

    Agradecimientos

    Muchas gracias a Trent Nelson, Jacob Creechopen in new window, White Tiger, Le Yafo, Buffaluopen in new window y Jito Labsopen in new window por su revisión y comentarios.

    - + diff --git a/docs/.vuepress/dist/es/guides/serialization.html b/docs/.vuepress/dist/es/guides/serialization.html index 0643cb58a..7b29973dd 100644 --- a/docs/.vuepress/dist/es/guides/serialization.html +++ b/docs/.vuepress/dist/es/guides/serialization.html @@ -23,7 +23,7 @@ } Serializando datos | Solana Cookbook - + @@ -253,10 +253,11 @@ }
    from borsh_construct import String, CStruct, U8
     from enum import IntEnum
    -from solana.rpc.types import RPCResponse
    -from solana.transaction import Transaction, TransactionInstruction, AccountMeta
    -from solana.publickey import PublicKey
    -from solana.keypair import Keypair
    +from solana.transaction import Transaction
    +from solders.pubkey import Pubkey
    +from solders.keypair import Keypair
    +from solders.instruction import Instruction, AccountMeta
    +from solders.rpc.responses import SendTransactionResp
     from solana.rpc.api import Client
     
     
    @@ -279,12 +280,12 @@
     
     def mint_kv(
         client: Client,
    -    program_pk: PublicKey,
    -    account_pk: PublicKey,
    +    program_pk: Pubkey,
    +    account_pk: Pubkey,
         wallet_kp: Keypair,
         mint_key: str,
         mint_value: str,
    -) -> RPCResponse:
    +) -> SendTransactionResp:
         """Mint with a key/value pair to an account"""
         # Construct the program payload for Mint invariant
         payload_ser = construct_payload(InstructionVariant.MINT, mint_key, mint_value)
    @@ -300,13 +301,13 @@
     
         # Construct the transaction with instructionVariant
         txn = Transaction().add(
    -        TransactionInstruction(
    -            [AccountMeta(account_pk, False, True)], program_pk, payload_ser
    +        Instruction(
    +            accounts=[AccountMeta(account_pk, False, True)], program_id=program_pk, data=payload_ser
             )
         )
         return client.send_transaction(txn, wallet_kp)
         # => {'jsonrpc': '2.0', 'result': '4ZdpWNdovdVaLextWSiqEBWp67k9rNTTUaX3qviHDXWY9c98bVtaRt5sasPhYzMVXHqhex78gzNKytcBnVH5CSTZ', 'id': 2}
    -
    
    +
    
     /// Instruction payload gets serialized
     #[derive(BorshSerialize)]
     pub struct Payload<'a> {
    @@ -632,10 +633,9 @@
       let nameAccount = await connection.getAccountInfo(account, "processed");
       return deserializeUnchecked(dataSchema, AccoundData, nameAccount.data);
     }
    -
    import base64
    -from borsh_construct import CStruct, U8, U32, HashMap, String
    +
    from borsh_construct import CStruct, U8, U32, HashMap, String
     from solana.rpc.commitment import Confirmed
    -from solana.publickey import PublicKey
    +from solders.pubkey import Pubkey
     from solana.rpc.api import Client
     
     
    @@ -647,14 +647,10 @@
     )
     
     
    -def get_account_info(client: Client, account_pk: PublicKey):
    +def get_account_info(client: Client, account_pk: Pubkey):
         """Fetch account information from RPC, parse out the data and deserialize"""
         res = client.get_account_info(account_pk, Confirmed, encoding='base64')
    -    data = res['result']
    -    if isinstance(data, dict):
    -        return account_schema.parse(base64.urlsafe_b64decode(data['value']['data'][0]))
    -    else:
    -        raise AttributeError(f'Unknown RPC result {data}')
    +    return account_schema.parse(res.value.data)
     
     # Results in or similar
     # => Container:
    @@ -662,7 +658,7 @@
     # =>     map_length = 109
     # =>     map = {'Happy': 'New Year!', 'newKey': 'A new value',
     # =>            'python key': 'python value', 'ts key': 'ts first value'}
    -
    use {
    +
    use {
         arrayref::*,
         borsh::{BorshDeserialize, BorshSerialize},
         std::{collections::BTreeMap, error::Error},
    @@ -766,8 +762,7 @@
     }
     
     entry();
    -
    import base64
    -from borsh_construct import U8, U16, U32, String, HashMap
    +
    from borsh_construct import U8, U16, U32, String, HashMap
     
     # Schema to deserialize various types
     primitive_schema = CStruct(
    @@ -811,7 +806,7 @@
         # =>        4
         # =>        5
         # =>    MAP_STRING_STRING = {'cookbook': 'recipe', 'recipe': 'ingredient'}
    -
    fn main() {}
    +
    fn main() {}
     
     #[cfg(test)]
     mod tests {
    @@ -1021,6 +1016,6 @@
         }
     }
     

    Recursos

    - + diff --git a/docs/.vuepress/dist/es/index.html b/docs/.vuepress/dist/es/index.html index a0e7742c7..d0b556168 100644 --- a/docs/.vuepress/dist/es/index.html +++ b/docs/.vuepress/dist/es/index.html @@ -23,11 +23,11 @@ } Libro de recetas de Solana | Solana Cookbook - +

    Libro de recetas de Solana

    Solana Cookbook es un recurso para desarrolladores. Brinda conceptos esenciales y referencias para desarrollar aplicaciones en Solana. Cada concepto y referencia se enfocará en aspectos específicos del desarrollo en Solana brindando detalles adicionales y ejemplos de uso.

    Contribuyendo

    Solana Cookbook esta diseñado de tal forma que hace fácil que nuevos desarrolladores de Solana puedan contribuir. Incluso si no sabes cómo hacer algo ¡contribuir al Cookbook es una gran manera de aprender!

    Revisa todos los issues abiertos acáopen in new window. Las guías de contribución acáopen in new window. Si encuentras que el Cookbook le falta una sugerencia, por favor agrega un issue.

    Como Leer el Cookbook

    El Cookbok de Solana esta dividido en diferentes secciones, cada una con un objetivo diferente.

    seccióndescripción
    Conceptos BaseLos fundamentos de Solana que son buenos conocer para desarrollar
    GuíasPequeñas guías sobre diferentes herramientas para desarrollar
    ReferenciasReferencias a snippets de código comunmente necesarios
    Last Updated:
    - + diff --git a/docs/.vuepress/dist/es/references/accounts.html b/docs/.vuepress/dist/es/references/accounts.html index 69d5e785e..2c4c8ff93 100644 --- a/docs/.vuepress/dist/es/references/accounts.html +++ b/docs/.vuepress/dist/es/references/accounts.html @@ -23,7 +23,7 @@ } Cuentas | Solana Cookbook - + @@ -998,7 +998,7 @@ programId: programId, }) ); -

    Cómo obtener el balance de una cuenta

    Press </> button to view full source
    import {
    +

    Cómo obtener el balance de una cuenta

    Press </> button to view full source
    import {
       clusterApiUrl,
       Connection,
       PublicKey,
    @@ -1034,22 +1034,47 @@
         );
     }
     
    from solana.publickey import Keypair
    +
    from solders.keypair import Keypair
     from solana.rpc.api import Client
     
     client = Client("https://api.devnet.solana.com")
     
     key_pair = Keypair()
    -public_key = key_pair.public_key
    +public_key = key_pair.pubkey()
     
     print(client.get_balance(public_key))
     
    // clang++ get_balance.cpp -o get_balance -std=c++17 -lssl -lcrypto -lsodium
    +
    +#include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +  Connection connection("https://api.devnet.solana.com");
    +
    +  auto key_pair = Keypair::generate();
    +
    +  auto public_key = key_pair.public_key;
    +  std::cout << "public_key = " << public_key.to_base58() << std::endl;
    +
    +  uint64_t balance = connection.get_balance(public_key).unwrap();
    +  std::cout << "balance = " << balance << std::endl;
    +
    +  return 0;
    +}
    +

    TIP

    Si deseas obtener el saldo de un token, deberás conocer la dirección de la cuenta de token. Para obtener más información, consulte Referencias de tokens

    - + diff --git a/docs/.vuepress/dist/es/references/basic-transactions.html b/docs/.vuepress/dist/es/references/basic-transactions.html index fb60edbb7..94d6bdbc4 100644 --- a/docs/.vuepress/dist/es/references/basic-transactions.html +++ b/docs/.vuepress/dist/es/references/basic-transactions.html @@ -23,7 +23,7 @@ } Enviando transacciones | Solana Cookbook - + @@ -76,31 +76,31 @@ await sendAndConfirmTransaction(connection, transferTransaction, [fromKeypair]);
    from solana.rpc.api import Client
    -from solana.keypair import Keypair
    +from solders.keypair import Keypair
     from solana.transaction import Transaction
    -from solana.system_program import TransferParams, transfer
    +from solders.system_program import TransferParams, transfer
     
     LAMPORT_PER_SOL = 1000000000
     
     client: Client = Client("https://api.devnet.solana.com")
     
    -sender = Keypair.generate()
    -receiver = Keypair.generate()
    +sender = Keypair()
    +receiver = Keypair()
     
    -airdrop = client.request_airdrop(sender.public_key, 1 * LAMPORT_PER_SOL)
    -airdrop_signature = airdrop["result"]
    +airdrop = client.request_airdrop(sender.pubkey(), 1 * LAMPORT_PER_SOL)
    +airdrop_signature = airdrop.value
     client.confirm_transaction(airdrop_signature)
     
     transaction = Transaction().add(transfer(TransferParams(
    -    from_pubkey=sender.public_key,
    -    to_pubkey=receiver.public_key,
    +    from_pubkey=sender.pubkey(),
    +    to_pubkey=receiver.pubkey(),
         lamports=1_000_000)
     ))
     
     client.send_transaction(transaction, sender)
     
    - + diff --git a/docs/.vuepress/dist/es/references/keypairs-and-wallets.html b/docs/.vuepress/dist/es/references/keypairs-and-wallets.html index df8d0d20a..5984d0eba 100644 --- a/docs/.vuepress/dist/es/references/keypairs-and-wallets.html +++ b/docs/.vuepress/dist/es/references/keypairs-and-wallets.html @@ -23,20 +23,35 @@ } Pares de llaves y billeteras | Solana Cookbook - + -

    Pares de llaves y billeteras

    Cómo generar un nuevo Keypair (par de llaves)

    Muchas de las acciones que vas a realizar con las librerías de Solana requieren un par de llaves o una billetera. Si te conectas con una billetera, no tienes que preocuparte, sin embargo, si necesitas un par de llaves, deberás de generarlas.

    Press </> button to view full source
    import { Keypair } from "@solana/web3.js";
    +    

    Pares de llaves y billeteras

    Cómo generar un nuevo Keypair (par de llaves)

    Muchas de las acciones que vas a realizar con las librerías de Solana requieren un par de llaves o una billetera. Si te conectas con una billetera, no tienes que preocuparte, sin embargo, si necesitas un par de llaves, deberás de generarlas.

    Press </> button to view full source
    import { Keypair } from "@solana/web3.js";
     
     (async () => {
       let keypair = Keypair.generate();
     })();
     
    from solana.keypair import Keypair
    +
    from solders.keypair import Keypair
     
     keypair = Keypair()
     
    // clang++ generate_keypair.cpp -o generate_keypair -std=c++17 -lssl -lcrypto -lsodium
    +
    +#include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +  auto key_pair = Keypair::generate();
    +
    +  auto public_key = key_pair.public_key;
    +  std::cout << "public_key = " << public_key.to_base58() << std::endl;
    +
    +  return 0;
    +}
    +
    use solana_sdk::signature::{Keypair};
     
     fn main() {
    @@ -47,7 +62,7 @@
     
     # pubkey: 9ZNTfG4NyQgxy2SWjSiQoUyBPEvXT2xo7fKc5hPYYJ7b
     

    Cómo restaurar un par de llaves a partir de una llave privada

    Si ya tienes tu llave privada, puedes generar un Keypair a partir de la llave privada para probar tu dApp.

    1. Con Bytes
    Press </> button to view full source
    import { Keypair } from "@solana/web3.js";
    +

    Cómo restaurar un par de llaves a partir de una llave privada

    Si ya tienes tu llave privada, puedes generar un Keypair a partir de la llave privada para probar tu dApp.

    1. Con Bytes
    Press </> button to view full source
    import { Keypair } from "@solana/web3.js";
     
     (async () => {
       const keypair = Keypair.fromSecretKey(
    @@ -67,7 +82,7 @@
         121, 35, 172, 247, 68, 251, 226, 218, 48, 63, 176, 109, 168, 89, 238, 135,
       ])
     );
    -
    from solana.keypair import Keypair
    +
    from solders.keypair import Keypair
     
     secret_key= [
             174, 47, 154, 16, 202, 193, 206, 113, 199, 190, 53, 133, 169, 175, 31, 56, 222, 53, 138,
    @@ -76,8 +91,8 @@
             63, 176, 109, 168, 89, 238, 135,
         ]
         
    -keypair = Keypair.from_secret_key(bytes(secret_key))
    -print("Created Keypair with Public Key: {}".format(keypair.public_key))
    +keypair = Keypair.from_bytes(secret_key)
    +print("Created Keypair with Public Key: {}".format(keypair.pubkey()))
     
    use solana_sdk::signature::{Keypair, Signer};
    +keypair = Keypair.from_bytes(secret_key)
    +
    // clang++ keypair_from_seed.cpp -o keypair_from_seed -std=c++17 -lssl -lcrypto -lsodium
    +
    +#include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +  const uint8_t bytes[] = {
    +    174, 47, 154, 16, 202, 193, 206, 113, 199, 190, 53, 133, 169, 175, 31, 56, 222, 53, 138,
    +    189, 224, 216, 117, 173, 10, 149, 53, 45, 73, 251, 237, 246, 15, 185, 186, 82, 177, 240,
    +    148, 69, 241, 227, 167, 80, 141, 89, 240, 121, 121, 35, 172, 247, 68, 251, 226, 218, 48,
    +    63, 176, 109, 168, 89, 238, 135,
    +  };
    +  Keypair key_pair = Keypair::from_seed(bytes);
    +  std::cout << "Created Keypair with Public Key: " << key_pair.public_key.to_base58() << std::endl;
    +}
    +
    use solana_sdk::signature::{Keypair, Signer};
     
     fn main() {
         let secret_key: [u8; 64] = [
    @@ -126,14 +164,13 @@
         "5MaiiCavjCmn9Hs1o3eznqDEhRwxo7pXiAYez7keQUviUkauRiTMD8DrESdrNjN8zd9mTmVhRvBJeg5vhyvgrAhG"
       )
     );
    -
    import base58
    -from solana.keypair import Keypair
    +
    from solders.keypair import Keypair
     
     b58_string = "5MaiiCavjCmn9Hs1o3eznqDEhRwxo7pXiAYez7keQUviUkauRiTMD8DrESdrNjN8zd9mTmVhRvBJeg5vhyvgrAhG"
    -keypair = Keypair.from_secret_key(base58.b58decode(b58_string)
    -print("Created Keypair with Public Key: {}".format(keypair.public_key))
    -
    use solana_sdk::signature::{Keypair, Signer};
     
     fn main() {
    @@ -146,7 +183,7 @@
     

    Cómo verificar un par de llaves

    Si cuentas con un par de llaves, puedes verificar si la llave privada coincide con la llave pública

    Press </> button to view full source
    import { Keypair, PublicKey } from "@solana/web3.js";
    +

    Cómo verificar un par de llaves

    Si cuentas con un par de llaves, puedes verificar si la llave privada coincide con la llave pública

    Press </> button to view full source
    import { Keypair, PublicKey } from "@solana/web3.js";
     
     (async () => {
       const publicKey = new PublicKey(
    @@ -174,10 +211,10 @@
     );
     console.log(keypair.publicKey.toBase58() === publicKey.toBase58());
     // true
    -
    from solana.keypair import Keypair
    -from solana.publickey import PublicKey
    +
    from solders.keypair import Keypair
    +from solders.pubkey import Pubkey
     
    -public_key = PublicKey("24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p")
    +public_key = Pubkey.from_string("24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p")
     
     keys = [
             174, 47, 154, 16, 202, 193, 206, 113, 199, 190, 53, 133, 169, 175, 31, 56, 222, 53, 138,
    @@ -185,11 +222,11 @@
             148, 69, 241, 227, 167, 80, 141, 89, 240, 121, 121, 35, 172, 247, 68, 251, 226, 218, 48,
             63, 176, 109, 168, 89, 238, 135,
         ]
    -keypair = Keypair.from_secret_key(bytes(keys))
    +keypair = Keypair.from_bytes(keys)
     
    -print(keypair.public_key.to_base58() == public_key.to_base58())
    +print(keypair.pubkey() == public_key)
     # True
    -
    // clang++ verify_keypair.cpp -o verify_keypair -std=c++17 -lssl -lcrypto -lsodium
    +
    +#include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +  PublicKey public_key = PublicKey("24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p");
    +
    +  const uint8_t bytes[] = {
    +    174, 47, 154, 16, 202, 193, 206, 113, 199, 190, 53, 133, 169, 175, 31, 56, 222, 53, 138,
    +    189, 224, 216, 117, 173, 10, 149, 53, 45, 73, 251, 237, 246, 15, 185, 186, 82, 177, 240,
    +    148, 69, 241, 227, 167, 80, 141, 89, 240, 121, 121, 35, 172, 247, 68, 251, 226, 218, 48,
    +    63, 176, 109, 168, 89, 238, 135,
    +  };
    +  Keypair key_pair = Keypair::from_seed(bytes);
    +
    +  std::cout << (public_key.to_base58() == key_pair.public_key.to_base58()) << std::endl;
    +}
    +
    solana-keygen verify <PUBKEY> prompt://
     

    Cómo comprobar si una llave pública tiene una llave privada asociada

    En ciertos casos especiales (por ejemplo, una dirección derivada de un programa), es posible que las claves públicas no tengan una clave privada asociada. Puedes verificar esto observando si la llave pública se encuentra en la curva ed25519. Solo las claves públicas que se encuentran en la curva pueden ser controladas por usuarios con billeteras.

    Press </> button to view full source
    import { PublicKey } from "@solana/web3.js";
    +

    Cómo comprobar si una llave pública tiene una llave privada asociada

    En ciertos casos especiales (por ejemplo, una dirección derivada de un programa), es posible que las claves públicas no tengan una clave privada asociada. Puedes verificar esto observando si la llave pública se encuentra en la curva ed25519. Solo las claves públicas que se encuentran en la curva pueden ser controladas por usuarios con billeteras.

    Press </> button to view full source
    import { PublicKey } from "@solana/web3.js";
     
     (async function () {
       // Note that Keypair.generate() will always give a public key that is valid for users
    @@ -219,20 +287,31 @@
     })();
     
    from solana.keypair import Keypair
    -from solana.publickey import PublicKey
    -from solana.utils.ed25519_base import is_on_curve
    +
    from solders.pubkey import Pubkey
     
     # Note that Keypair() will always give a public key that is valid for users
    -key = PublicKey('5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY') # Valid public key
    -print(is_on_curve(key)) # Lies on the ed25519 curve and is suitable for users
    +key = Pubkey.from_string('5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY') # Valid public key
    +print(key.is_on_curve()) # Lies on the ed25519 curve and is suitable for users
    +
    +off_curve_address = Pubkey.from_string('4BJXYkfvg37zEmBbsacZjeQDpTNx91KppxFJxRqrz48e') # Valid public key
    +print(off_curve_address.is_on_curve()) # Not on the ed25519 curve, therefore not suitable for users
    +
    +error_pubkey = Pubkey.from_string("testPubkey"); # Is not a valid public key
    +
    #include <iostream>
    +#include <solana_sdk.h>
    +
    +int main()
    +{
    +    auto public_key = PublicKey("5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY");
     
    -off_curve_address = PublicKey('4BJXYkfvg37zEmBbsacZjeQDpTNx91KppxFJxRqrz48e') # Valid public key
    -print(PublicKey._is_on_curve(off_curve_address)) # Not on the ed25519 curve, therefore not suitable for users
    +    std::cout << public_key.is_on_curve() << std::endl;
     
    -error_pubkey = PublicKey("testPubkey"); # Is not a valid public key
    -
    use solana_sdk::pubkey::{Pubkey};
     use std::str::FromStr;
     
    @@ -274,16 +353,16 @@
       "pill tomorrow foster begin walnut borrow virtual kick shift mutual shoe scatter";
     const seed = bip39.mnemonicToSeedSync(mnemonic, ""); // (mnemonic, password)
     const keypair = Keypair.fromSeed(seed.slice(0, 32));
    -
    from solana.keypair import Keypair
    +
    from solders.keypair import Keypair
     from mnemonic import Mnemonic
     
     mnemo = Mnemonic("english")
     seed = mnemo.to_seed("pill tomorrow foster begin walnut borrow virtual kick shift mutual shoe scatter")
    -keypair = Keypair.from_secret_key(seed)
    -print("Created Keypair with Public Key: {}".format(keypair.public_key)
    +keypair = Keypair.from_bytes(seed)
    +print("Created Keypair with Public Key: {}".format(keypair.pubkey()))
     
    solana-keygen recover
     
    1. BIP44 (varios wallets, también conocido como HD wallets)

    Puede crear varias carteras a partir de una sola semilla, también conocidas como "carteras deterministas jerárquicas" o carteras HD:

    Press </> button to view full source
    import { Keypair } from "@solana/web3.js";
    @@ -311,7 +390,7 @@
     }
     
    solana-keygen recover 'prompt:?key=0/0'
     

    Cómo generar una dirección personalizada

    Vanity publickeys o direcciones personalizadas son llaves que comienzan con caracteres específicos. Por ejemplo, una persona puede querer que una llave pública comience con "elv1s", o tal vez incluso "cook". Estos pueden ayudar a otras personas. Recordar a quién pertenece la llave, haciendo que la llave sea más fácilmente identificable.

    Nota: Cuantos más caracteres haya en su dirección personalizada, más tiempo durará. tomar.

    ::: advertencia Solo debe usar la CLI para esta tarea. Los ejemplos de Python y TypeScript tienen fines ilustrativos y son mucho más lentos que la CLI. :::

    Press </> button to view full source
    import { Keypair } from "@solana/web3.js";
    +

    Cómo generar una dirección personalizada

    Vanity publickeys o direcciones personalizadas son llaves que comienzan con caracteres específicos. Por ejemplo, una persona puede querer que una llave pública comience con "elv1s", o tal vez incluso "cook". Estos pueden ayudar a otras personas. Recordar a quién pertenece la llave, haciendo que la llave sea más fácilmente identificable.

    Nota: Cuantos más caracteres haya en su dirección personalizada, más tiempo durará. tomar.

    ::: advertencia Solo debe usar la CLI para esta tarea. Los ejemplos de Python y TypeScript tienen fines ilustrativos y son mucho más lentos que la CLI. :::

    Press </> button to view full source
    import { Keypair } from "@solana/web3.js";
     
     (async () => {
       let keypair = Keypair.generate();
    @@ -323,17 +402,36 @@
     while (!keypair.publicKey.toBase58().startsWith("elv1s")) {
       keypair = Keypair.generate();
     }
    -
    from solana.keypair import Keypair
    +
    from solders.keypair import Keypair
     
     keypair = Keypair()
    -while(str(keypair.public_key)[:5]!="elv1s") :
    +while(str(keypair.pubkey())[:5]!="elv1s") :
         keypair = Keypair()
         
    -print("Created Keypair with Public Key: {}".format(keypair.public_key))
    +print("Created Keypair with Public Key: {}".format(keypair.pubkey()))
     
    solana-keygen grind --starts-with e1v1s:1
    +
    // clang++ vanity_keypair.cpp -o vanity_keypair -std=c++17 -lssl -lcrypto -lsodium
    +
    +#include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +  auto key_pair = Keypair::generate();
    +
    +  while (key_pair.public_key.to_base58().substr(0, 5) != "elv1s") {
    +    key_pair = Keypair::generate();
    +  }
    +
    +  std::cout << "Created Keypair with Public Key: " << key_pair.public_key.to_base58() << std::endl;
    +}
    +
    solana-keygen grind --starts-with e1v1s:1
     

    Cómo firmar y verificar mensajes con wallets

    La función principal de un par de llaves es firmar mensajes y habilitar la verificación de la firma. La verificación de una firma permite el destinatario asegurarse de que los datos fueron firmados por el propietario de un clave privada específica.

    Para hacerlo vamos a importar la librería crypto TweetNaClopen in new window.

    Press </> button to view full source
    import { Keypair } from "@solana/web3.js";
     import nacl from "tweetnacl";
    @@ -372,41 +470,25 @@
     );
     
     console.log(result);
    -
    from nacl.signing import VerifyKey
    -from solana.keypair import Keypair
    +
    from solders.keypair import Keypair
     
     secret_key =  [
           174, 47, 154, 16, 202, 193, 206, 113, 199, 190, 53, 133, 169, 175, 31, 56, 222, 53, 138, 189, 224, 216, 117,
           173, 10, 149, 53, 45, 73, 251, 237, 246, 15, 185, 186, 82, 177, 240, 148, 69, 241, 227, 167, 80, 141, 89, 240,
           121, 121, 35, 172, 247, 68, 251, 226, 218, 48, 63, 176, 109, 168, 89, 238, 135,
    -    ]
    -     
    -keypair = Keypair.from_secret_key(bytes(secret_key))
    -pubkey_bytes = bytes(keypair.public_key)
    -message = "The quick brown fox jumps over the lazy dog"
    -message_bytes = bytes(message,'utf8')
    -signed_message = keypair.sign(message_bytes)
    -
    -verify_sign = VerifyKey(
    -    pubkey_bytes
    -).verify(
    -    smessage=message_bytes,  
    -    signature=signed_message.signature
    -)
    -
    -#Returns original message if the signature has not been tampered with
    -print(verify_sign)
    -

    Cómo conectar una wallet

    La librereia de Solana wallet-adapteropen in new window hace más fácil el manejo de conexiones de wallets del lado cliente.

    React

    Ejecute el siguiente comando para instalar las dependencias requeridas:

    yarn add @solana/wallet-adapter-react @solana/wallet-adapter-react-ui @solana/wallet-adapter-base @solana/wallet-adapter-wallets
    +    ] 
    +keypair = Keypair.from_bytes(secret_key)
    +message = b"The quick brown fox jumps over the lazy dog"
    +signature = keypair.sign_message(message)
    +verify_sign = signature.verify(keypair.pubkey(), message)
    +
    +print(verify_sign) # bool
    +

    Cómo conectar una wallet

    La librereia de Solana wallet-adapteropen in new window hace más fácil el manejo de conexiones de wallets del lado cliente.

    React

    Ejecute el siguiente comando para instalar las dependencias requeridas:

    yarn add @solana/wallet-adapter-react @solana/wallet-adapter-react-ui @solana/wallet-adapter-base @solana/wallet-adapter-wallets
     

    Las librería wallet-adapter de React te permite persistir y acceder a los estados de conexión de una billetera a través de hooks y proveedores de contexto llamados, useWallet, WalletProvider, useConnection y ConnectionProvider. La aplicación React debe estar envuelta con WalletProvider y ConnectionProvider.

    Además, podemos solicitar a los usuarios que se conecten usando useWalletModal para alternar la visibilidad del modal de conexión y también envolver la aplicación con WalletModalProvider de @solana/wallet-adapter-react-ui. El modal de conexión manejará ese flujo de conexión por nosotros, por lo que solo necesitamos escuchar cuándo se ha conectado una billetera. Sabemos que una billetera está conectada cuando la respuesta useWallet tiene una propiedad wallet no nula. Viceversa, si esa propiedad es nula, sabemos que la billetera está desconectada.

    Press </> button to view full source
    import React, { useMemo, FC, PropsWithChildren } from "react";
     import {
       ConnectionProvider,
    @@ -593,6 +675,6 @@
     <WalletMultiButton />
     {/if}
     
    Last Updated:
    - + diff --git a/docs/.vuepress/dist/es/references/local-development.html b/docs/.vuepress/dist/es/references/local-development.html index a338bd891..b168ffc53 100644 --- a/docs/.vuepress/dist/es/references/local-development.html +++ b/docs/.vuepress/dist/es/references/local-development.html @@ -23,12 +23,12 @@ } Desarrollo en entorno local | Solana Cookbook - +

    Desarrollo en un entorno local

    Iniciando un validador

    Probar el código de tu programa localmente puede ser mucho más confiable que probarlo en devnet, y puede ayudarte con las pruebas previas a devnet.

    Puedes configurar un validador de prueba local instalando solana tool suite y ejecutando

    solana-test-validator
    -

    Beneficios de usar local-test-validator incluyen:

    • No tener limites en el número de llamadas RPC
    • No tener límites de airdrop
    • Despliegue directo de un programa on-chain (--bpf-program ...)
    • Conar cuentas de un cluster público, incluyendo programas (--clone ...)
    • La posibilidad de configurar el historial de retención de transacciones (--limit-ledger-size ...)
    • Poder configurar los slots por epoch (--slots-per-epoch ...)
    • Saltar a un slot específico (--warp-slot ...)

    Conectándote con los diferentes entornos

    Cuando desarrollas en Solana, debes conectarte a un API de RPC específico. Solana cuenta con 3 entornos distintos para desarrollo:

    • mainnet-beta https://api.mainnet-beta.solana.com
    • devnet https://api.devnet.solana.com
    • testnet https://api.testnet.solana.com
    Press </> button to view full source
    import { clusterApiUrl, Connection } from "@solana/web3.js";
    +

    Beneficios de usar local-test-validator incluyen:

    • No tener limites en el número de llamadas RPC
    • No tener límites de airdrop
    • Despliegue directo de un programa on-chain (--bpf-program ...)
    • Conar cuentas de un cluster público, incluyendo programas (--clone ...)
    • La posibilidad de configurar el historial de retención de transacciones (--limit-ledger-size ...)
    • Poder configurar los slots por epoch (--slots-per-epoch ...)
    • Saltar a un slot específico (--warp-slot ...)

    Conectándote con los diferentes entornos

    Cuando desarrollas en Solana, debes conectarte a un API de RPC específico. Solana cuenta con 3 entornos distintos para desarrollo:

    • mainnet-beta https://api.mainnet-beta.solana.com
    • devnet https://api.devnet.solana.com
    • testnet https://api.testnet.solana.com
    Press </> button to view full source
    import { clusterApiUrl, Connection } from "@solana/web3.js";
     
     (async () => {
       const connection = new Connection(clusterApiUrl("mainnet-beta"), "confirmed");
    @@ -38,6 +38,15 @@
     
     client = Client("https://api.mainnet-beta.solana.com")
     
    #include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +    Connection connection("https://api.mainnet-beta.solana.com");
    +    return 0;
    +}
    +
    use solana_client::rpc_client::RpcClient;
     use solana_sdk::commitment_config::CommitmentConfig;
     
    @@ -49,7 +58,7 @@
     let client = RpcClient::new_with_commitment(rpc_url, CommitmentConfig::confirmed());
     
    solana config set --url https://api.mainnet-beta.solana.com
     

    Finalmente, también te puedes conectar con un cluster privado, sea local o remoto con lo siguiente:

    Press </> button to view full source
    import { Connection } from "@solana/web3.js";
    +

    Finalmente, también te puedes conectar con un cluster privado, sea local o remoto con lo siguiente:

    Press </> button to view full source
    import { Connection } from "@solana/web3.js";
     
     (async () => {
       // This will connect you to your local validator
    @@ -60,6 +69,15 @@
     
     client = Client("http://127.0.0.1:8899")
     
    #include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +    Connection connection("http://127.0.0.1:8899");
    +    return 0;
    +}
    +
    use solana_client::rpc_client::RpcClient;
     use solana_sdk::commitment_config::CommitmentConfig;
     
    @@ -71,7 +89,7 @@
     let client = RpcClient::new_with_commitment(rpc_url, CommitmentConfig::confirmed());
     
    solana config set --url http://privaterpc.com
     

    Suscripción a eventos

    Websockets proporciona una interfaz pub/sub donde puedes escuchar ciertos eventos. En lugar de hacer ping a un endpoint HTTP de forma recurrente para obtener actualizaciones frecuentes, puede recibir esas actualizaciones solo cuando sucedan.

    Solana web3 Connectionopen in new window por debajo genera un endpoint de websocket y registra a un cliente websocket cuando creas una nueva instancia de conexión (Connection) (puedes ver el código fuente aquíopen in new window).

    La clase Connection expone methods pub/sub - todos empiezan con on, como emisores de eventos. Cuando llamas a estos métodos de escucha, se registra una nueva suscripción al cliente de websocket de esa instancia de conexión (Connection). El ejemplo de método pub/sub que utilizamos abajo es onAccountChangeopen in new window. El callback brindará información actualizada a través de los argumentos (ver AccountChangeCallbackopen in new window como un ejemplo).

    Press </> button to view full source
    import { clusterApiUrl, Connection, Keypair } from "@solana/web3.js";
    +

    Suscripción a eventos

    Websockets proporciona una interfaz pub/sub donde puedes escuchar ciertos eventos. En lugar de hacer ping a un endpoint HTTP de forma recurrente para obtener actualizaciones frecuentes, puede recibir esas actualizaciones solo cuando sucedan.

    Solana web3 Connectionopen in new window por debajo genera un endpoint de websocket y registra a un cliente websocket cuando creas una nueva instancia de conexión (Connection) (puedes ver el código fuente aquíopen in new window).

    La clase Connection expone methods pub/sub - todos empiezan con on, como emisores de eventos. Cuando llamas a estos métodos de escucha, se registra una nueva suscripción al cliente de websocket de esa instancia de conexión (Connection). El ejemplo de método pub/sub que utilizamos abajo es onAccountChangeopen in new window. El callback brindará información actualizada a través de los argumentos (ver AccountChangeCallbackopen in new window como un ejemplo).

    Press </> button to view full source
    import { clusterApiUrl, Connection, Keypair } from "@solana/web3.js";
     
     (async () => {
       // Establish new connect to devnet - websocket client connected to devnet will also be registered here
    @@ -102,7 +120,7 @@
       "confirmed"
     );
     
    import asyncio
    -from solana.keypair import Keypair
    +from solders.keypair import Keypair
     from solana.rpc.websocket_api import connect
     
     async def main():
    @@ -110,7 +128,7 @@
             # Create a Test Wallet
             wallet = Keypair()
             # Subscribe to the Test wallet to listen for events
    -        await websocket.account_subscribe(wallet.public_key)
    +        await websocket.account_subscribe(wallet.pubkey())
             # Capture response from account subscription 
             first_resp = await websocket.recv()
             print("Subscription successful with id {}, listening for events \n".format(first_resp.result))
    @@ -122,13 +140,62 @@
         # Create a Test Wallet
         wallet = Keypair()
         # Subscribe to the Test wallet to listen for events
    -    await websocket.account_subscribe(wallet.public_key)
    +    await websocket.account_subscribe(wallet.pubkey())
         # Capture response from account subscription 
         first_resp = await websocket.recv()
         print("Subscription successful with id {}, listening for events \n".format(first_resp.result))
         updated_account_info = await websocket.recv()
         print(updated_account_info)    
    -
    use solana_client::pubsub_client::PubsubClient;
    +
    // clang++ on_account_change.cpp -o on_account_change -std=c++17 -lssl -lcrypto -lsodium
    +
    +#include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +  Connection connection("https://api.devnet.solana.com");
    +
    +  auto key_pair = Keypair::generate();
    +
    +  int subscriptionId = connection.on_account_change(key_pair.public_key, [&](Result<Account> result) {
    +    Account account = result.unwrap();
    +    std::cout << "owner = " << account.owner.to_base58() << std::endl;
    +    std::cout << "lamports = " << account.lamports << std::endl;
    +    std::cout << "data = " << account.data << std::endl;
    +    std::cout << "executable = " << (account.executable ? "true" : "false") << std::endl;
    +  });
    +
    +  sleep(1);
    +
    +  std::string tx_hash = connection.request_airdrop(key_pair.public_key).unwrap();
    +  std::cout << "tx hash = " << tx_hash << std::endl;
    +
    +  for (int i = 0; i < 10; i++) {
    +    connection.poll();
    +    sleep(1);
    +  }
    +
    +  connection.remove_account_listener(subscriptionId);
    +
    +  return 0;
    +}
    +
    use solana_client::pubsub_client::PubsubClient;
     use solana_client::rpc_config::RpcAccountInfoConfig;
     use solana_sdk::commitment_config::CommitmentConfig;
     use solana_sdk::signature::{Keypair, Signer};
    @@ -177,7 +244,7 @@
     ).unwrap();
     let message = match receiver.recv().unwrap();
     println!("{:?}", message)
    -

    Obteniendo SOL para pruebas

    Cuando trabajas localmente, necesitas SOL para enviar transacciones. En entornos que no son de red principal (mainnet), puedes recibir SOL haciendo airdrop a tu dirección

    Press </> button to view full source
    import { Connection, Keypair, LAMPORTS_PER_SOL } from "@solana/web3.js";
    +

    Obteniendo SOL para pruebas

    Cuando trabajas localmente, necesitas SOL para enviar transacciones. En entornos que no son de red principal (mainnet), puedes recibir SOL haciendo airdrop a tu dirección

    Press </> button to view full source
    import { Connection, Keypair, LAMPORTS_PER_SOL } from "@solana/web3.js";
     
     (async () => {
       const keypair = Keypair.generate();
    @@ -201,7 +268,7 @@
     );
     
     await connection.confirmTransaction(airdropSignature);
    -
    from solana.keypair import Keypair
    +
    from solders.keypair import Keypair
     from solana.rpc.api import Client
     
     wallet = Keypair()
    @@ -209,14 +276,32 @@
     client = Client("https://api.devnet.solana.com")
     
     #Input Airdrop amount in LAMPORTS
    -client.request_airdrop(wallet.public_key, 1000000000)
    +client.request_airdrop(wallet.pubkey(), 1000000000)
     
     #Airdrops 1 SOL
     
    use solana_client::rpc_client::RpcClient;
    +
    // clang++ request_airdrop.cpp -o request_airdrop -std=c++17 -lssl -lcrypto -lsodium
    +
    +#include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +  Connection connection("https://api.devnet.solana.com");
    +
    +  auto key_pair = Keypair::generate();
    +
    +  std::string tx_hash = connection.request_airdrop(key_pair.public_key).unwrap();
    +
    +  std::cout << "tx hash = " << tx_hash << std::endl;
    +
    +  return 0;
    +}
    +
    use solana_client::rpc_client::RpcClient;
     use solana_sdk::commitment_config::CommitmentConfig;
     use solana_sdk::native_token::LAMPORTS_PER_SOL;
     use solana_sdk::signature::{Keypair, Signer};
    @@ -267,6 +352,6 @@
     solana-test-validator --bpf-program 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin serum_dex_v3.so --reset
     
    Last Updated:
    - + diff --git a/docs/.vuepress/dist/es/references/name-service.html b/docs/.vuepress/dist/es/references/name-service.html index e7d278074..0ef51e290 100644 --- a/docs/.vuepress/dist/es/references/name-service.html +++ b/docs/.vuepress/dist/es/references/name-service.html @@ -23,7 +23,7 @@ } Servicio de nombres | Solana Cookbook - + @@ -181,7 +181,7 @@ const subDomain = "demo"; // Step 1 -const hashedParentDomain = await getHashedName(mainDomain); +const hashedParentDomain = await getHashedName(parentDomain); const parentDomainKey = await getNameAccountKey( hashedParentDomain, undefined, @@ -260,6 +260,6 @@ const registry = await getTwitterRegistry(connection, handle);
    - + diff --git a/docs/.vuepress/dist/es/references/nfts.html b/docs/.vuepress/dist/es/references/nfts.html index 63590059d..dcee258c7 100644 --- a/docs/.vuepress/dist/es/references/nfts.html +++ b/docs/.vuepress/dist/es/references/nfts.html @@ -23,7 +23,7 @@ } NFTs | Solana Cookbook - + @@ -271,11 +271,13 @@ const metaplex = new Metaplex(connection); metaplex.use(keypairIdentity(keypair)); - const mint = new PublicKey("Ay1U9DWphDgc7hq58Yj1yHabt91zTzvV2YJbAWkPNbaK"); + const mintAddress = new PublicKey( + "Ay1U9DWphDgc7hq58Yj1yHabt91zTzvV2YJbAWkPNbaK" + ); - const nft = await metaplex.nfts().findByMint(mint); + const nft = await metaplex.nfts().findByMint({ mintAddress }); - console.log(nft.metadata); + console.log(nft.json); /* { name: 'SMB #139', @@ -302,18 +304,20 @@ } */ })(); -

    ¿Cómo obtener el dueño de un NFT?

    Si tiene la clave de mint de un NFT, puede encontrar su propietario actual echando un vistazo a la cuenta de token más grande para ese mint.

    Recuerde que los NFT tienen un suministro de 1 y son indivisibles, lo que significa que solo una cuenta de token mantendrá ese token en cualquier punto en el tiempo, mientras que todas las demás cuentas de token para esa clave de mint tienen un saldo de 0.

    Una vez que se identifica la cuenta de token más grande, podemos recuperar a su propietario.

    Press </> button to view full source
    import { Connection, PublicKey } from "@solana/web3.js";
    +console.log(nft.json);
    +

    ¿Cómo obtener el dueño de un NFT?

    Si tiene la clave de mint de un NFT, puede encontrar su propietario actual echando un vistazo a la cuenta de token más grande para ese mint.

    Recuerde que los NFT tienen un suministro de 1 y son indivisibles, lo que significa que solo una cuenta de token mantendrá ese token en cualquier punto en el tiempo, mientras que todas las demás cuentas de token para esa clave de mint tienen un saldo de 0.

    Una vez que se identifica la cuenta de token más grande, podemos recuperar a su propietario.

    Press </> button to view full source
    import { Connection, PublicKey } from "@solana/web3.js";
     
     (async () => {
       const connection = new Connection("https://api.mainnet-beta.solana.com");
    @@ -540,7 +544,7 @@
       metaplex.use(keypairIdentity(keypair));
     
       const owner = new PublicKey("2R4bHmSBHkHAskerTHE6GE1Fxbn31kaD5gHqpsPySVd7");
    -  const allNFTs = await metaplex.nfts().findAllByOwner(owner);
    +  const allNFTs = await metaplex.nfts().findAllByOwner({ owner });
     
       console.log(allNFTs);
     })();
    @@ -551,10 +555,10 @@
     metaplex.use(keypairIdentity(keypair));
     
     const owner = new PublicKey("2R4bHmSBHkHAskerTHE6GE1Fxbn31kaD5gHqpsPySVd7");
    -const allNFTs = await metaplex.nfts().findAllByOwner(owner);
    +const allNFTs = await metaplex.nfts().findAllByOwner({ owner });
     
     console.log(allNFTs);
     
    - + diff --git a/docs/.vuepress/dist/es/references/offline-transactions.html b/docs/.vuepress/dist/es/references/offline-transactions.html index cf2ca2012..2f8c7ec4f 100644 --- a/docs/.vuepress/dist/es/references/offline-transactions.html +++ b/docs/.vuepress/dist/es/references/offline-transactions.html @@ -23,7 +23,7 @@ } Enviando transacciones offline | Solana Cookbook - + @@ -457,6 +457,6 @@ console.log(`txhash: ${await connection.sendRawTransaction(tx.serialize())}`); - + diff --git a/docs/.vuepress/dist/es/references/programs.html b/docs/.vuepress/dist/es/references/programs.html index 5aa359cf4..f497a109f 100644 --- a/docs/.vuepress/dist/es/references/programs.html +++ b/docs/.vuepress/dist/es/references/programs.html @@ -23,7 +23,7 @@ } Escribiendo Programas | Solana Cookbook - + @@ -1496,6 +1496,6 @@ } - + diff --git a/docs/.vuepress/dist/es/references/staking.html b/docs/.vuepress/dist/es/references/staking.html index 2cbe5b696..d442b5cdc 100644 --- a/docs/.vuepress/dist/es/references/staking.html +++ b/docs/.vuepress/dist/es/references/staking.html @@ -23,7 +23,7 @@ } Staking | Solana Cookbook - + @@ -641,6 +641,6 @@ stakeBalance = await connection.getBalance(stakeAccount.publicKey); console.log(`Stake account balance: ${stakeBalance / LAMPORTS_PER_SOL} SOL`); - + diff --git a/docs/.vuepress/dist/es/references/token.html b/docs/.vuepress/dist/es/references/token.html index 937f2fb7e..c8e51497d 100644 --- a/docs/.vuepress/dist/es/references/token.html +++ b/docs/.vuepress/dist/es/references/token.html @@ -23,7 +23,7 @@ } Interactuando con tokens | Solana Cookbook - + @@ -1273,6 +1273,6 @@ mint: mint, }); - + diff --git a/docs/.vuepress/dist/fr/core-concepts/accounts.html b/docs/.vuepress/dist/fr/core-concepts/accounts.html index 3ee20a4b3..f9804dbd4 100644 --- a/docs/.vuepress/dist/fr/core-concepts/accounts.html +++ b/docs/.vuepress/dist/fr/core-concepts/accounts.html @@ -23,11 +23,11 @@ } Comptes | Solana Cookbook - +

    Comptes

    Les comptes dans Solana sont utilisés pour stocker des états. Ils constituent un élément essentiel pour le développement sur Solana.

    Faits

    Fiche d'Information

    • Les comptes sont utilisés pour stocker des données
    • Chaque compte a une adresse unique
    • Les comptes ont une taille maximale de 10MB (10 Mega Bytes)
    • Les comptes des adresses dérivées d'un programme (PDA) ont une taille maximale de 10KB (10 Kilo Bytes)
    • Les comptes des adresses dérivées d'un programme (PDA) peuvent être utilisés pour signer au nom d'un programme
    • La taille des comptes est fixée au moment de leur création, mais elle peut être ajustée en utilisant la fonctionnalité reallocopen in new window
    • Le stockage des données sur un compte est payé par une rente
    • Le propriétaire par défaut d'un compte est le programme système (System Program)

    Examen plus approfondi

    Le modèle d'un compte

    Il existe 3 types de comptes sur Solana :

    • Les comptes de données pour le stockage des données
    • Les comptes de programmes pour le stockage des programmes exécutables
    • Les comptes natifs pour les programmes natifs de Solana tels que System, Stake, et Vote

    Il existe deux types de comptes de données :

    • Les comptes appartenant au système
    • Les comptes PDA (adresse dérivée du programme)

    Chaque compte a une adresse (généralement une clé publique) et un propriétaire (adresse d'un compte de programme). La liste complète des champs qu'un compte stocke est énuméré ci-dessous.

    ChampsDescription
    lamportsLe nombre de lamports appartenant à ce compte
    ownerLe programme propriétaire de ce compte
    executableIndique si ce compte peut traiter des instructions
    dataLe tableau d'octets de données brutes stocké par ce compte
    rent_epochLa prochaine époque à laquelle ce compte doit payer une rente

    Il existe quelques règles importantes concernant la propriété des comptes :

    • Seul le propriétaire d'un compte de données peut modifier ses données et débiter les lamports
    • Tout le monde est autorisé à envoyer des lamports sur un compte de données
    • Le propriétaire d'un compte peut désigner un nouveau propriétaire si les données de celui-ci sont mises à zéro

    Les comptes de programme ne stockent pas d'état.

    Par exemple, si vous avez un programme de comptage qui permet d'incrémenter un compteur, vous devez créer deux comptes, un compte pour stocker le code du programme, et un autre pour stocker le compteur.

    Pour éviter qu'un compte soit supprimé, vous devez payer une rente.

    Rente

    Le stockage des données sur les comptes coûte des SOL, et il est financé par ce qu'on appelle une rente. Si vous maintenez un solde minimum équivalent à deux années de rente sur un compte, celui-ci sera exempté du paiement de cette rente. Vous pouvez récupérer la rente en fermant le compte et en renvoyant les lamports dans votre portefeuille.

    La rente est payée à deux moments différents :

    1. Lorsqu'il est référencé par une transaction
    2. Une fois par époque

    Un pourcentage des rentes collectées par les comptes est détruit, tandis que le reste est distribué aux comptes de vote à la fin de chaque slot.

    Si le compte ne dispose pas d'assez d'argent pour payer la rente, le compte sera supprimé ainsi que ses données.

    Il est également important de noter que les nouveaux comptes doivent être exempts de rente.

    Autres Ressources

    Crédit

    Ce concept de base est attribué à Pencilflip. Suivez-le sur Twitteropen in new window.

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/fr/core-concepts/pdas.html b/docs/.vuepress/dist/fr/core-concepts/pdas.html index 269bb06f6..d27c54249 100644 --- a/docs/.vuepress/dist/fr/core-concepts/pdas.html +++ b/docs/.vuepress/dist/fr/core-concepts/pdas.html @@ -23,11 +23,11 @@ } Adresses dérivées de programmes (PDAs) | Solana Cookbook - +

    Adresses dérivées de programmes (PDAs)

    Les adresses dérivées de programmes (PDA) sont des comptes qui sont conçus pour être contrôlés par un programme spécifique. Avec les PDAs, les programmes peuvent signer, de manière programmée, pour certaines adresses sans avoir besoin d'une clé privée. Les PDAs servent de base à l'invocation inter-programmesopen in new window, qui permet aux applications de Solana d'être composables les unes avec les autres.

    Faits

    Fiche d'Information

    • Les PDAs sont des chaînes de caractères de 32 bytes qui ressemblent à des clés publiques, mais qui n'ont pas de clés privées correspondantes
    • findProgramAddress dérivera de manière déterministe un PDA à partir d'un programId et de seeds (collection de bytes)
    • Un bump (un byte) est utilisé pour déplacer un PDA potentiel hors de la courbe elliptique ed25519
    • Les programmes peuvent signer pour leurs PDAs en fournissant les seeds et le bump à l'invoke_signedopen in new window
    • Un PDA ne peut être signé que par le programme dont il est dérivé
    • En plus de permettre aux programmes de signer pour différentes instructions, les PDAs fournissent aussi une interface de type hashmap pour les indexing accounts

    Examen plus approfondi

    Les PDAs sont un élément essentiel pour le développement de programmes sur Solana. Avec les PDAs, les programmes peuvent signer pour des comptes tout en garantissant qu'aucun utilisateur externe ne pourrait également générer une signature valide pour le même compte. En plus de la signature des comptes, certains programmes peuvent également modifier les comptes détenus par leurs PDAs.

    Accounts matrix

    Image courtesy of Pencilflip

    Génération des PDAs

    Pour comprendre le concept des PDAs, il peut être utile de considérer que les PDAs ne sont pas techniquement créés, mais plutôt trouvés. Les PDAs sont générés à partir d'une combinaison de seeds (telles que la chaîne “vote_account”) et d'un identifiant de programme. Cette combinaison de seeds et d'identifiant de programme est ensuite exécutée par une fonction de hachage sha256 pour voir si elle génère ou non une clé publique qui se trouve sur la courbe elliptique ed25519.

    En faisant passer notre identifiant de programme et nos seeds à travers une fonction de hachage, il y a environ 50 % de chances que nous obtenions une clé publique valide qui se trouve sur la courbe elliptique. Dans ce cas, nous ajoutons simplement quelque chose pour modifier un peu notre entrée et nous réessayons. Le terme technique pour le quelque chose que nous rajoutons est un "bump". Dans Solana, nous commençons par bump = 255 et itérons simplement en soustrayant 1 à chaque fois, nous utilisons ainsi bump = 254, bump = 253, etc. jusqu'à ce que nous obtenions une adresse qui n'est pas sur la courbe elliptique. Cela peut sembler rudimentaire, mais une fois trouvé, cela nous donne un moyen déterministe de dériver le même PDA encore et encore.

    Le PDA sur la courbe elliptique

    Interaction avec les PDAs

    Quand un PDA est généré, findProgramAddress retournera à la fois l'adresse et le bump utilisé pour déplacer celle-ci hors de la courbe elliptique. Avec ce bump, un programme peut alors signer pour toute instruction qui requiert son PDA. Afin de signer, les programmes doivent passer l'instruction, la liste des comptes, ainsi que les seeds et le bump utilisés pour dériver le PDA à invoke_signed. En plus de signer pour les instructions, les PDAs doivent également signer leur propre création avec invoke_signed.

    Lors de la création de PDAs, il est courant de stocker le bump et les seedsopen in new window dans les données du compte lui-même. Cela permet ainsi aux développeurs de valider facilement un PDA sans avoir à transmettre en argument de l'instruction le bump.

    Autres Ressources

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/fr/core-concepts/programs.html b/docs/.vuepress/dist/fr/core-concepts/programs.html index 38e2ec7ea..b60580259 100644 --- a/docs/.vuepress/dist/fr/core-concepts/programs.html +++ b/docs/.vuepress/dist/fr/core-concepts/programs.html @@ -23,12 +23,12 @@ } Programmes | Solana Cookbook - +

    Programmes

    N'importe quel développeur peut écrire et déployer des programmes sur la blockchain Solana. Les programmes (connus sous le nom de contrats intelligents sur d'autres protocoles) servent de base à l'activité sur la blockchain, permettant tout, partant de la DeFi et des NFTs jusqu'aux médias sociaux tout en passant par les jeux.

    Faits

    Fiche d'Information

    • Les programmes traitent les instructions des utilisateurs finaux mais aussi d'autres programmes
    • Tous les programmes sont stateless (sans état): toutes les données avec lesquelles ils interagissent sont stockées dans des comptes séparés qui sont transmis par des instructions.
    • Les programmes eux-mêmes sont stockés dans des comptes marqués comme executable
    • Tous les programmes appartiennent au BPF Loaderopen in new window et sont exécutés par le Solana Runtimeopen in new window
    • Les développeurs écrivent le plus souvent des programmes en Rust ou en C++, mais ils peuvent choisir n'importe quel langage qui cible le backend BPFopen in new window de LLVMopen in new window
    • Tous les programmes ont un point d'entrée unique où le traitement des instructions a lieu (i.e. process_instruction); et dont les paramètres incluent toujours:
      • program_id: pubkey
      • accounts: array,
      • instruction_data: byte array

    Examen plus approfondi

    Contrairement à la plupart des autres blockchains, Solana sépare complètement le code des données. Toutes les données avec lesquelles les programmes interagissent sont stockées dans des comptes séparés et sont transmises, en tant que références, via des instructions. Ce modèle permet à un seul programme générique de fonctionner sur plusieurs comptes sans nécessiter de déploiements supplémentaires. Des exemples communs de ce modèle sont observés dans les programmes natifs et les programmes SPL.

    Programmes Natifs & La Bibliothèque des Programmes de Solana (SPL)

    Solana est équipé d'un certain nombre de programmes qui servent d'éléments de base pour les interactions sur la blockchain. Ces programmes sont divisés en Programmes Natifsopen in new window et en Programmes de la Bibliothèque des Programmes de Solana (SPL)open in new window.

    Les Programmes Natifs fournissent les fonctions de base nécessaires au fonctionnement des validateurs. Parmi ces programmes, le plus connu est le Programme Système (System Program)open in new window qui est responsable de l'administration des nouveaux comptes et de transférer des SOL entre deux parties.

    Les programmes de la Bibliothèque des Programmes de Solana (SPL) prennent en charge d'autres activités au sein de la blockchain, telles que, par exemple, la création de jetons, l'échange de jetons ainsi ou encore le prêt de jetons, ainsi que la création de pools de staking et le maintien on-chain du service de noms de domaine. Le Programme de Jeton SPL (SPL Token Program)open in new window peut être invoqué directement via l'interface CLI, tandis que d'autres, comme le Programme de Compte de Jeton Associé (Associated Token Account Program)open in new window sont généralement utilisés par d'autres programmes.

    Ecrire des programmes

    Les programmes sont le plus souvent développés avec Rust ou C++, mais peuvent être développés avec n'importe quel langage qui cible le backend BPF de LLVM. Les initiatives récentes de Neon Labsopen in new window et Solangopen in new window permettent la compatibilité EVMopen in new window et permettent donc aux développeurs d'écrire des programmes en Solidity.

    La plupart des programmes Rust suivent l'architecture suivante :

    FichierDescription
    lib.rsRegistre des modules
    entrypoint.rsPoint d'entrée du programme
    instruction.rsAPI du programme, (dé)sérialisation des instructions
    processor.rsLogique du programme
    state.rsObjets du programme, (dé)sérialisation des états
    error.rsErreurs spécifiques au programme

    Récemment, Anchoropen in new window est devenu le framework le plus populaire pour le développement de programmes. Anchor est un framework, semblable à Ruby on Rails, qui réduit le boilerplate (code passe-partout) et facilite la (dé)sérialisation pour les programmes développés en Rust.

    Les programmes sont généralement développés et testés dans les environnements appelés Localhost et Devnet avant d'être déployés sur le Testnet ou le Mainnet. Solana supporte les environnements suivants :

    Environnement du clusterURL de Connexion RPC
    Mainnet-betahttps://api.mainnet-beta.solana.com
    Testnethttps://api.testnet.solana.com
    Devnethttps://api.devnet.solana.com
    LocalhostDefault port: 8899 (e.g. http://localhost:8899, http://192.168.1.88:8899)

    Une fois déployés dans un environnement, les clients peuvent interagir avec les programmes de la blockchain via les Connexions RPCopen in new window du cluster correspondant.

    Déployer des programmes

    Les développeurs peuvent déployer leurs programmes via le CLIopen in new window:

    solana program deploy <PROGRAM_FILEPATH>
     

    Lorsqu'un programme est déployé, il est compilé en un objet partagé ELF (ELF shared object)open in new window (contenant le bytecode du BPF) et téléchargé sur le cluster Solana. Les programmes vivent dans des comptes (comme à peu près tout ce qui se trouve sur Solana), sauf que ceux-ci sont marqués comme executable et assigné au BPF Loader. L'adresse de ce compte est appelée program_id et est utilisée pour référencer le programme dans toutes les transactions futures.

    Solana supporte plusieurs BPF Loaders, dont le dernier en date est le Upgradable BPF Loaderopen in new window. Le BPF Loader est chargé de gérer les comptes du programme et de les rendre accessibles aux clients via le program_id. Tous les programmes ont un point d'entrée unique où le traitement des instructions a lieu (i.e. process_instruction) et dont les paramètres incluent toujours:

    • program_id: pubkey
    • accounts: array,
    • instruction_data: byte array

    Une fois invoqués, les programmes sont exécutés par le Runtime de Solana.

    Autres Ressources

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/fr/core-concepts/transactions.html b/docs/.vuepress/dist/fr/core-concepts/transactions.html index ee0ff907d..33206ce9e 100644 --- a/docs/.vuepress/dist/fr/core-concepts/transactions.html +++ b/docs/.vuepress/dist/fr/core-concepts/transactions.html @@ -23,11 +23,11 @@ } Transactions | Solana Cookbook - +

    Transactions

    Les clients peuvent invoquer des programmes en soumettant une transaction à un cluster. Une seule transaction peut comprendre plusieurs instructions, chacune ciblant son propre programme. Lorsqu'une transaction est soumise, Le Runtimeopen in new window de Solana va traiter ses instructions dans l'ordre et de manière atomique. Si le traitement d'au moins une instruction échoue, c'est l'ensemble de la transaction qui échouera.

    Faits

    Fiche d'Information

    • Les instructions sont l'unité de base du fonctionnement de Solana
    • Chaque instruction contient :
      • Le program_id du programme visé
      • Un tableau de tous les accounts (comptes) dans lesquels il a l'intention de lire ou d'écrire
      • Un tableau d'octets instruction_data qui est spécifique au programme visé
    • Plusieurs instructions peuvent être regroupées en une seule transaction
    • Chaque transaction contient :
      • Un tableau de tous les accounts (comptes) dans lesquels il a l'intention de lire ou d'écrire
      • Une ou plusieurs instructions
      • Un blockhash (hash de blocs) récent
      • Une ou plusieurs signatures
    • Les instructions sont traitées dans l'ordre et de manière atomique
    • Si le traitement d'au moins une instruction échoue, c'est l'ensemble de la transaction qui échouera.
    • Les transactions sont limitées à 1232 octets

    Examen plus approfondi

    Le Runtime de Solana nécessite que les instructions et les transactions spécifient une liste de tous les comptes dans lesquels elles ont l'intention de lire ou d'écrire. En exigeant ces comptes à l'avance, le runtime est capable de paralléliser l'exécution de toutes les transactions.

    Lorsqu'une transaction est soumise à un cluster, le runtime traite ses instructions dans l'ordre et de manière atomique. Pour chaque instruction, le programme utilisé interprète le tableau de données et opère sur les comptes spécifiés. Le programme retournera soit un message de succès, soit un code d'erreur. Si une erreur est retournée, l'ensemble de la transaction échoue instantanément.

    Toute transaction visant à débiter un compte ou à modifier ses données nécessite la signature de son propriétaire. Tout compte qui sera modifié sera marqué comme writable. Un compte peut être crédité sans l'autorisation de son propriétaire à condition que le payeur des frais de transaction couvre les frais de rente et les frais de transaction nécessaires.

    Avant d'être soumises, toutes les transactions doivent faire référence à un hash de blocs récentopen in new window. Le hash de blocs récent est utilisé pour éviter les doublons et éliminer les transactions obsolètes. L'âge maximal que peut avoir le hash de blocs d'une transaction est de 150 blocs ou environ 1 minute et 19 secondes au moment où nous écrivons ces lignes.

    Frais

    Le réseau Solana perçoit deux types de frais :

    Dans Solana, les frais de transaction sont déterministes : il n'existe pas de concept de marché des frais dans lequel les utilisateurs peuvent payer des frais plus élevés pour augmenter leurs chances d'être inclus dans le bloc suivant. Au moment où nous écrivons ces lignes, les frais de transaction sont déterminés uniquement par le nombre de signatures requises (i.e. lamports_per_signature), et non par la quantité de ressources utilisées. Cela est dû au fait qu'il existe actuellement une limite maximale de 1232 bytes pour toutes les transactions.

    Toutes les transactions nécessitent qu'il y ait au moins un compte writable (accessible en écriture) pour signer la transaction. Une fois soumise, le compte signataire accessible en écriture qui est sérialisé en premier sera le payeur des frais. Ce compte paiera le coût de la transaction, que celle-ci réussisse ou échoue. Si le payeur des frais ne dispose pas d'un solde suffisant pour payer les frais de transaction, la transaction sera abandonnée.

    Au moment où nous écrivons ces lignes, 50 % de tous les frais de transaction sont perçus par le validateur qui produit le bloc, tandis que les 50 % restants sont brûlés. Ce mécanisme a pour but d'inciter les validateurs à traiter le plus grand nombre possible de transactions pendant les créneaux qui leur sont attribués dans le calendrier des leaders.

    Autres Ressources

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/fr/getting-started/installation.html b/docs/.vuepress/dist/fr/getting-started/installation.html index 39a06b4c2..fe8d7bb38 100644 --- a/docs/.vuepress/dist/fr/getting-started/installation.html +++ b/docs/.vuepress/dist/fr/getting-started/installation.html @@ -23,7 +23,7 @@ } Installation | Solana Cookbook - + @@ -64,13 +64,13 @@ export PATH=$PWD/bin:$PATH

    Windows

    Ouvrez un invite de commandes (cmd.exe) en tant qu'Administrateur.

    Recherchez Invite de commandes dans la barre de recherche de Windows. Lorsque l'application Invite de commandes apparaît, faites un clic droit et sélectionnez "Exécuter en tant qu'administrateur". Si une fenêtre contextuelle vous demande "Voulez-vous autoriser cette application à apporter des modifications à votre appareil ?", cliquez sur "Oui".

    Copiez et collez la commande suivante, puis appuyez sur Entrée pour télécharger le programme d'installation de Solana dans un répertoire temporaire :

    curl https://release.solana.com/v1.9.16/solana-install-init-x86_64-pc-windows-msvc.exe --output C:\solana-install-tmp\solana-install-init.exe --create-dirs
     

    Si v1.9.16 n'est pas la version que vous souhaitez, trouver la dernière version iciopen in new window.

    Copiez et collez la commande suivante, puis appuyez sur Entrée pour installer la dernière version de Solana. Si vous voyez un pop-up de sécurité de votre système, veuillez sélectionner l'autorisation de l'exécution du programme.

    C:\solana-install-tmp\solana-install-init.exe v1.9.16
    -

    Pour trouver la dernière version, vérifiez les versions disponibles [ici].(https://github.com/solana-labs/solana/releases).

    Lorsque le programme d'installation est terminé, appuyez sur Entrée.

    Fermez l'invite de commandes et réouvrez-en une en tant qu'utilisateur normal.

    Recherchez Invite de commandes dans la barre de recherche de Windows,faites un clic gauche sur l'icone de l'application (pas besoin de l'éxécuter en tant qu'Administrateur).

    Confirmez que vous avez installé la version désirée de Solana en exécutant :

    solana --version
    +

    Pour trouver la dernière version, vérifiez les versions disponibles iciopen in new window.

    Lorsque le programme d'installation est terminé, appuyez sur Entrée.

    Fermez l'invite de commandes et réouvrez-en une en tant qu'utilisateur normal.

    Recherchez Invite de commandes dans la barre de recherche de Windows,faites un clic gauche sur l'icone de l'application (pas besoin de l'éxécuter en tant qu'Administrateur).

    Confirmez que vous avez installé la version désirée de Solana en exécutant :

    solana --version
     

    Après une installation réussie, solana-install update peut être utilisé à tout moment pour facilement mettre à jour le logiciel de Solana vers une version plus récente.

    Téléchargement des fichiers binaires

    Alternativement, vous pouvez installer à partir des fichiers binaires au lieu d'utiliser solana-install.

    Téléchargez les fichiers binaires en vous rendant sur https://github.com/solana-labs/solana/releases/latestopen in new window, téléchargez solana-release-x86_64-pc-windows-msvc.tar.bz2, puis extrayez l'archive en utilisant WinZip ou similaire.

    Ouvrez un Invite de commandes et naviguez vers le réportoire dans lequel vous avez extrait les fichiers binaires et éxécutez la commande suivante :

    cd solana-release/
     set PATH=%cd%/bin;%PATH%
     

    Compiler à partir du code source

    Si vous ne pouvez pas utiliser les fichiers binaires pré-construits ou que vous préférez le construire vous-même à partir du code source, rendez-vous sur https://github.com/solana-labs/solana/releases/latestopen in new window, et téléchargez l'archive Source Code. Extrayez le code et compilez les fichiers binaires avec la commande suivante :

    ./scripts/cargo-install-all.sh .
     export PATH=$PWD/bin:$PATH
     

    Vous pouvez alors lancer la commande suivante pour obtenir le même résultat qu'avec les fichiers binaires préconstruits :

    solana-install init
     
    - + diff --git a/docs/.vuepress/dist/fr/guides/account-maps.html b/docs/.vuepress/dist/fr/guides/account-maps.html index 3466f9aec..56156234c 100644 --- a/docs/.vuepress/dist/fr/guides/account-maps.html +++ b/docs/.vuepress/dist/fr/guides/account-maps.html @@ -23,7 +23,7 @@ } Maps de Comptes | Solana Cookbook - + @@ -1136,6 +1136,6 @@ tx.add(insertBCIx); tx.add(insertCAIx); - + diff --git a/docs/.vuepress/dist/fr/guides/data-migration.html b/docs/.vuepress/dist/fr/guides/data-migration.html index b37a1547f..7fd9abed9 100644 --- a/docs/.vuepress/dist/fr/guides/data-migration.html +++ b/docs/.vuepress/dist/fr/guides/data-migration.html @@ -23,7 +23,7 @@ } Migration des Comptes de Données de Programmes | Solana Cookbook - + @@ -676,6 +676,6 @@ } }

    Après avoir construit et soumis une instruction : VersionProgramInstruction::SetString(String) nous avons maintenant la structure de données de compte "mise à jour" suivante

    Program Account v2

    Ressources

    - + diff --git a/docs/.vuepress/dist/fr/guides/debugging-solana-programs.html b/docs/.vuepress/dist/fr/guides/debugging-solana-programs.html index 8d423f5cf..e0fea5736 100644 --- a/docs/.vuepress/dist/fr/guides/debugging-solana-programs.html +++ b/docs/.vuepress/dist/fr/guides/debugging-solana-programs.html @@ -23,7 +23,7 @@ } Débogage des Programmes Solana | Solana Cookbook - + @@ -48,6 +48,6 @@ test test_validator_transaction ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 6.40s

    Le débogage ici vous permettra de déboguer les fonctions et méthodes utilisées dans le test body mais ne fera pas de point d'arrêt dans votre programme.

    Test avec un Nœud de Validation Local à partir des Applications Clients

    Enfin, vous pouvez démarrer un nœud de validation local et charger votre programme et tous les comptes en utilisant le solana-test-validator depuis la ligne de commande.

    Dans cette approche, vous aurez besoin d'une application client, soit en utilisant Rust RcpClient ou en utilisant les clients JavaScript ou Typescript

    Voir solana-test-validator --help pour plus de détails et d'options. Pour le programme d'exemple, voici la configuration :

    1. Ouvrez un terminal dans le dossier repo
    2. Exécutez solana config set -ul pour définir la configuration pour pointer vers le local
    3. Exécutez solana-test-validator --bpf-program target/deploy/bpf_program_template-keypair.json target/deploy/bpf_program_template.so
    4. Ouvrez un autre terminal et lancez solana logs pour démarrer le flux des logs
    5. Vous pouvez alors exécuter votre programme client et observer la sortie du programme dans le terminal où vous avez démarré le flux de logs

    Ressources

    solana-program-bpf-templateopen in new window

    RcpClientopen in new window

    Bibliothèque JavaScript/Typescriptopen in new window

    - + diff --git a/docs/.vuepress/dist/fr/guides/feature-parity-testing.html b/docs/.vuepress/dist/fr/guides/feature-parity-testing.html index 4a5619f20..91330be50 100644 --- a/docs/.vuepress/dist/fr/guides/feature-parity-testing.html +++ b/docs/.vuepress/dist/fr/guides/feature-parity-testing.html @@ -23,7 +23,7 @@ } Test de Conformité des Fonctionnalités | Solana Cookbook - + @@ -302,6 +302,6 @@ assert!(txn.is_ok()); }

    Bon test !

    Ressources

    scfsdopen in new window

    gadget-scfsopen in new window

    - + diff --git a/docs/.vuepress/dist/fr/guides/get-program-accounts.html b/docs/.vuepress/dist/fr/guides/get-program-accounts.html index 5c3df6ba0..b6854e74b 100644 --- a/docs/.vuepress/dist/fr/guides/get-program-accounts.html +++ b/docs/.vuepress/dist/fr/guides/get-program-accounts.html @@ -23,7 +23,7 @@ } Obtenir les comptes d'un programme | Solana Cookbook - + @@ -444,6 +444,6 @@ # "id": 1 # }

    En combinant ces trois paramètres (dataSlice, dataSize, et memcmp), nous pouvons limiter la portée de notre requête et ne renvoyer efficacement que les données qui nous intéressent.

    Autres Ressources

    - + diff --git a/docs/.vuepress/dist/fr/guides/retrying-transactions.html b/docs/.vuepress/dist/fr/guides/retrying-transactions.html index d284ff684..30f99ecc6 100644 --- a/docs/.vuepress/dist/fr/guides/retrying-transactions.html +++ b/docs/.vuepress/dist/fr/guides/retrying-transactions.html @@ -23,7 +23,7 @@ } Réessayer des Transactions | Solana Cookbook - + @@ -89,6 +89,6 @@ blockheight = await connection.getBlockHeight(); }

    Lors de l'interrogation via getLatestBlockhash, les applications doivent spécifier leur niveau d'engagement (commitment)open in new window prévu. En définissant son engagement sur confirmed (voté) ou finalized (~30 blocs après confirmed), une application peut éviter d'interroger un blockhash d'un fork minoritaire.

    Si une application a accès aux nœuds RPC derrière un équilibreur de charge, elle peut également choisir de répartir sa charge de travail entre des nœuds spécifiques. Les nœuds RPC qui servent des requêtes à forte intensité de données telles que getProgramAccounts peuvent être enclins à prendre du retard et ne sont pas adaptés à la transmission des transactions. Pour les applications qui gèrent des transactions sensibles au temps, il peut être prudent d'avoir des noeuds dédiés qui ne gèrent que sendTransaction.

    Le Coût de l'Omission Du Contrôle Préalable

    Par défaut, sendTransaction effectue trois contrôles préalables avant de soumettre une transaction. Plus précisément, sendTransaction va :

    Si l'un de ces trois contrôles préalables échoue, sendTransaction déclenchera une erreur avant de soumettre la transaction. Les contrôles préalables peuvent souvent faire la différence entre le rejet d'une transaction et la possibilité pour un client de gérer gracieusement une erreur. Pour s'assurer que ces erreurs courantes sont prises en compte, il est recommandé aux développeurs de laisser la valeur skipPreflight sur false.

    Quand Re-Signer Des Transactions

    Malgré toutes les tentatives de retransmission, il peut arriver qu'un client soit obligé de re-signer une transaction. Avant de resigner une transaction, il est très important de s'assurer que le blockhash de la transaction initiale a expiré. Si le blockhash initial est toujours valide, il est possible que les deux transactions soient acceptées par le réseau. Pour un utilisateur final, cela donnerait l'impression qu'il a involontairement envoyé deux fois la même transaction.

    Sur Solana, une transaction rejetée peut être éliminée en toute sécurité lorsque le blockhash qu'elle référence est plus ancien que le lastValidBlockHeight reçu de getLatestBlockhash. Les développeurs doivent garder la trace de ce lastValidBlockHeight en interrogeant getEpochInfoopen in new window et en le comparant avec blockHeight de la réponse. Une fois qu'un blockhash est invalidé, les clients peuvent resigner avec un nouveau blockhash.

    Remerciements

    Un grand merci à Trent Nelson, Jacob Creechopen in new window, White Tiger, Le Yafo, Buffaluopen in new window, and Jito Labsopen in new window pour leur examen et leurs commentaires.

    - + diff --git a/docs/.vuepress/dist/fr/guides/serialization.html b/docs/.vuepress/dist/fr/guides/serialization.html index 57d59de1e..9d12070f7 100644 --- a/docs/.vuepress/dist/fr/guides/serialization.html +++ b/docs/.vuepress/dist/fr/guides/serialization.html @@ -23,7 +23,7 @@ } Sérialisation des données | Solana Cookbook - + @@ -253,10 +253,11 @@ }
    from borsh_construct import String, CStruct, U8
     from enum import IntEnum
    -from solana.rpc.types import RPCResponse
    -from solana.transaction import Transaction, TransactionInstruction, AccountMeta
    -from solana.publickey import PublicKey
    -from solana.keypair import Keypair
    +from solana.transaction import Transaction
    +from solders.pubkey import Pubkey
    +from solders.keypair import Keypair
    +from solders.instruction import Instruction, AccountMeta
    +from solders.rpc.responses import SendTransactionResp
     from solana.rpc.api import Client
     
     
    @@ -279,12 +280,12 @@
     
     def mint_kv(
         client: Client,
    -    program_pk: PublicKey,
    -    account_pk: PublicKey,
    +    program_pk: Pubkey,
    +    account_pk: Pubkey,
         wallet_kp: Keypair,
         mint_key: str,
         mint_value: str,
    -) -> RPCResponse:
    +) -> SendTransactionResp:
         """Mint with a key/value pair to an account"""
         # Construct the program payload for Mint invariant
         payload_ser = construct_payload(InstructionVariant.MINT, mint_key, mint_value)
    @@ -300,13 +301,13 @@
     
         # Construct the transaction with instructionVariant
         txn = Transaction().add(
    -        TransactionInstruction(
    -            [AccountMeta(account_pk, False, True)], program_pk, payload_ser
    +        Instruction(
    +            accounts=[AccountMeta(account_pk, False, True)], program_id=program_pk, data=payload_ser
             )
         )
         return client.send_transaction(txn, wallet_kp)
         # => {'jsonrpc': '2.0', 'result': '4ZdpWNdovdVaLextWSiqEBWp67k9rNTTUaX3qviHDXWY9c98bVtaRt5sasPhYzMVXHqhex78gzNKytcBnVH5CSTZ', 'id': 2}
    -
    
    +
    
     /// Instruction payload gets serialized
     #[derive(BorshSerialize)]
     pub struct Payload<'a> {
    @@ -632,10 +633,9 @@
       let nameAccount = await connection.getAccountInfo(account, "processed");
       return deserializeUnchecked(dataSchema, AccoundData, nameAccount.data);
     }
    -
    import base64
    -from borsh_construct import CStruct, U8, U32, HashMap, String
    +
    from borsh_construct import CStruct, U8, U32, HashMap, String
     from solana.rpc.commitment import Confirmed
    -from solana.publickey import PublicKey
    +from solders.pubkey import Pubkey
     from solana.rpc.api import Client
     
     
    @@ -647,14 +647,10 @@
     )
     
     
    -def get_account_info(client: Client, account_pk: PublicKey):
    +def get_account_info(client: Client, account_pk: Pubkey):
         """Fetch account information from RPC, parse out the data and deserialize"""
         res = client.get_account_info(account_pk, Confirmed, encoding='base64')
    -    data = res['result']
    -    if isinstance(data, dict):
    -        return account_schema.parse(base64.urlsafe_b64decode(data['value']['data'][0]))
    -    else:
    -        raise AttributeError(f'Unknown RPC result {data}')
    +    return account_schema.parse(res.value.data)
     
     # Results in or similar
     # => Container:
    @@ -662,7 +658,7 @@
     # =>     map_length = 109
     # =>     map = {'Happy': 'New Year!', 'newKey': 'A new value',
     # =>            'python key': 'python value', 'ts key': 'ts first value'}
    -
    use {
    +
    use {
         arrayref::*,
         borsh::{BorshDeserialize, BorshSerialize},
         std::{collections::BTreeMap, error::Error},
    @@ -766,8 +762,7 @@
     }
     
     entry();
    -
    import base64
    -from borsh_construct import U8, U16, U32, String, HashMap
    +
    from borsh_construct import U8, U16, U32, String, HashMap
     
     # Schema to deserialize various types
     primitive_schema = CStruct(
    @@ -811,7 +806,7 @@
         # =>        4
         # =>        5
         # =>    MAP_STRING_STRING = {'cookbook': 'recipe', 'recipe': 'ingredient'}
    -
    fn main() {}
    +
    fn main() {}
     
     #[cfg(test)]
     mod tests {
    @@ -1021,6 +1016,6 @@
         }
     }
     

    Ressources

    - + diff --git a/docs/.vuepress/dist/fr/guides/versioned-transactions.html b/docs/.vuepress/dist/fr/guides/versioned-transactions.html new file mode 100644 index 000000000..760378d34 --- /dev/null +++ b/docs/.vuepress/dist/fr/guides/versioned-transactions.html @@ -0,0 +1,60 @@ + + + + + + + + + Transactions Versionnées | Solana Cookbook + + + + +

    Transactions Versionnées

    Solana a récemment sorti les Transactions Versionnées. Les changements proposés sont les suivants :

    1. Introduction d'un nouveau programme qui gère les tables de consultation d'adresses sur la chaîne

    2. Ajout d'un nouveau format de transaction qui peut utiliser les tables de consultation d'adresses sur la chaîne

    Faits

    Fiche d'Information

    • Les transactions héritées ont un problème majeur : La taille maximale autorisée est de 1232 octets ce qui fait que le nombre de comptes qui peuvent tenir dans une transaction atomique est de maximum 35 adresses.
    • Tables de Consultation d'Adresses (Address Lookup Tables, LUTs): Une fois que les comptes sont stockés dans cette table, l'adresse de la table peut être référencée dans un message de transaction utilisant des indices u8 de 1 octet.
    • createLookupTable() de solana/web3.js peut être utilisé pour construire une nouvelle table de consultation, ainsi que pour déterminer son adresse.
    • Une fois qu'une Table de Consultation d'Adresses est créée, elle peut être étendue, c'est-à-dire que des comptes peuvent être ajoutés à la table.
    • Transactions Versionnées : La structure des transactions héritées doit être modifiée pour intégrer les Tables de Consultation d'Adresses
    • Avant l'introduction du versionnage, les transactions avaient un bit supérieur inutilisé dans le premier octet de leur en-tête. Celui-ci peut être utilisé pour déclarer explicitement la version des transactions.

    Nous parlerons plus en détail des changements introduits ci-dessus et de ce qu'ils signifient pour les développeurs. Toutefois, pour mieux comprendre les changements, nous devons d'abord comprendre l'anatomie d'une transaction classique (ou héritée).

    Transaction Héritée

    Le réseau Solana utilise une taille d'unité transactionnelle maximale (MTU) de 1280 octets, conformément aux contraintes de taille de l'IPv6 MTUopen in new window afin de garantir la vitesse et la fiabilité. Cela laisse 1232 octets pour les paquets de données comme les transactions sérialisées.

    Une transaction est composée de :

    1. Un tableau compact de signatures, où chaque signature est un ed25519open in new window de 64 octets.
    2. Un message (hérité)

    Transaction Format

    Le format Tableau Compact

    Un tableau compact est un tableau sérialisé de manière à avoir les composants suivants :

    1. Une taille de tableau dans un encodage multi-octet appelé Compact-u16open in new window
    2. Suivi de chaque élément du tableau

    Compact array format

    Message Hérité

    Un message hérité comporte les éléments suivants :

    1. Un en-tête
    2. Un tableau compact d'adresses de comptes, où chaque adresse de compte occupe 32 octets
    3. Un hash de bloc récent
    • un hachage SHA-256 de 32 octets utilisé pour indiquer quand le registre a été observé pour la dernière fois. Si un hash de bloc est trop vieux, les validateurs le rejettent.
    1. Un tableau compact d'instructions

    Legacy Message

    En-tête

    L'en-tête du message a une taille de 3 octets et contient 3 entiers u8 :

    1. Le nombre de signatures requises : le runtime de Solana vérifie ce nombre avec la taille du tableau compact des signatures de la transaction.
    2. Le nombre d'adresses de comptes en lecture seule qui nécessitent une signature.
    3. Le nombre d'adresses de comptes en lecture seule qui ne nécessitent pas de signature.

    Message Header

    Tableau compact d'adresses de comptes

    Ce tableau compact commence par un encodage compact-u16 du nombre d'adresses de comptes, suivi par :

    1. Adresses de compte nécessitant une signature: Les adresses qui demandent un accès en lecture et en écriture sont listées en premier, suivies de celles qui demandent un accès en lecture seule
    2. Adresses de comptes qui ne nécessitent pas de signature: Comme ci-dessus, les adresses qui demandent un accès en lecture et en écriture sont listées en premier, suivies de celles qui demandent un accès en lecture seule

    Compact array of account addresses

    Tableau compact d'instructions

    Tout comme le tableau d'adresses de comptes, ce tableau compact commence par un encodage compact-u16 du nombre d'instructions, suivi d'un tableau d'instructions. Chaque instruction du tableau comporte les éléments suivants :

    1. Identifiant du programme: identifie un programme on-chain qui traitera l'instruction. Il est représenté par un index u8 vers une adresse dans le tableau compact d'adresses de comptes dans le message.
    2. Tableau compact d'index d'adresses de compte: index u8 vers un sous-ensemble d'adresses de comptes dans le tableau compact des adresses de comptes qui nécessitent une signature.
    3. Tableau compact de données opaques u8: un tableau d'octets d'usage général qui est spécifique à l'identifiant du programme mentionné précédemment. Ce tableau de données spécifie toutes les opérations que le programme doit effectuer et toute information supplémentaire que les comptes pourraient ne pas contenir.

    Compact array of Instructions

    Problèmes liés aux Transactions Héritées

    Quel est le problème avec le modèle de transaction ci-dessus ?

    La taille maximale d'une transaction, et donc le nombre de comptes qui peuvent tenir dans une seule transaction atomique.

    Comme nous l'avons vu précédemment, la taille maximale autorisée pour une transaction est de 1232 octets. La taille d'une adresse de compte est de 32 octets. Ainsi, une transaction peut au mieux stocker 35 comptes, en tenant compte d'un certain espace pour les en-têtes, les signatures et autres métadonnées.

    Issue with legacy transactions

    Cela pose problème car il existe plusieurs cas où les développeurs doivent inclure des centaines de comptes sans signature dans une seule transaction. Cela n'est actuellement pas possible avec le modèle de transaction héritée. La solution actuellement utilisée consiste à stocker temporairement l'état sur la chaîne et à le réutiliser ultérieurement dans des transactions. Cette solution de fortune ne fonctionne pas lorsque plusieurs programmes doivent être composés en une seule transaction. Chaque programme nécessite plusieurs comptes en entrée et nous tombons donc dans le même problème que précédemment.

    C'est là que les Tables de Consultation d'Adresses (LUT) sont utilisées.

    Tables de Consultation d'Adresses (LUT)

    L'idée derrière les Tables de Consultation d'Adresses est de stocker les adresses de comptes dans une structure de données de type table (tableau) sur la chaîne. Une fois que les comptes sont stockés dans cette table, l'adresse de la table peut être référencée dans un message de transaction. Pour pointer vers un compte en particulier dans la table, un index u8 de 1 octet est nécessaire.

    LUTs

    Cela permet de gagner de l'espace car les adresses ne doivent plus être stockées dans le message de transaction. Ils doivent seulement être référencés sous la forme d'un index dans le tableau. Cela conduit à la possibilité de référencer 2^8=256 comptes, car les comptes sont référencés en utilisant un index u8.

    Les Tables de Consultation d'Adresses doivent être exemptes de rente lors de leur initialisation ou chaque fois qu'une nouvelle adresse est ajoutée à la table. Les adresses peuvent être ajoutées à cette table soit par un buffer on-chain, soit en les ajoutant directement à la table par l'instruction Extension. De plus, les Tables de Consultation d'Adresses peuvent stocker les métadonnées associées suivies d'un tableau compact de comptes. Vous pouvez voir ci-dessous la structure d'une Table de Consultation d'Adresses standard.

    LUT Format

    L'un des principaux inconvénients des Tables de Consultation d'Adresses est que, comme les recherches d'adresses nécessitent une charge supplémentaire pendant le traitement des transactions, elles entraînent généralement des coûts plus élevés pour une transaction.

    Transactions Versionnées : TransactionV0

    La structure des transactions héritées doit être modifiée pour intégrer les consultations de la table d'adresses. Ces changements ne doivent pas perturber le traitement des transactions sur Solana, et ne doivent pas provoquer de changement de format des programmes invoqués.

    Pour garantir cela, il est important de mentionner explicitement le type de transaction : legacy or versioned. Comment inclure ces informations dans une transaction ?

    Avant l'introduction du versionnage, les transactions avaient un bit supérieur inutilisé dans le premier octet de leur en-tête : num_required_signatures. Nous pouvons maintenant utiliser ce bit pour déclarer explicitement la version de nos transactions.

    pub enum VersionedMessage {
    +    Legacy(Message),
    +    V0(v0::Message),
    +}
    +

    Si le premier bit est fixé, les autres bits du premier octet codent un numéro de version. Solana commence avec la "Version 0", qui est la version requise pour commencer à utiliser les Tables de Consultation d'Adresses.

    Si le premier bit n'est pas fixé, la transaction sera considérée comme une "transaction héritée" et le reste du premier octet sera traité comme le premier octet d'un message hérité codé.

    MessageV0

    La structure du nouveau MessageV0 est plus ou moins la même, à l'exception de deux petits mais importants changements :

    1. En-tête du Message: inchangé par rapport à celui du message hérité
    2. Tableau compact de clés de compte: inchangé par rapport à celui du message hérité. Nous désignerons le tableau d'indices pointant vers les éléments de ce tableau par tableau d'indices A (vous verrez bientôt pourquoi nous le désignons ainsi)
    3. Hash de bloc récent: inchangé par rapport à celui du message hérité
    4. Tableau compact d'instructions: différent de celui du message hérité
    5. Tableau compact de consultations de tables d'adresses: introduit dans v0

    Message v0

    Nous allons d'abord discuter de la structure du tableau compact de consultation de la table d'adresses avant de voir ce qui a changé dans le tableau d'instructions.

    Tableau compact de consultations de tables d'adresses

    Cette structure introduit les Tables de Consultation d'Adresses (LUTs) dans les transactions versionnées, ce qui permet d'utiliser les LUTs pour intégrer plus de comptes en lecture seule et en écriture dans une seule transaction.

    Le tableau compact commence par un encodage compact-u16 du nombre de consultations de la table d'adresses, suivi d'un tableau de consultations de la table d'adresses. Chaque consultation a la structure suivante :

    1. Clé de compte: clé de compte de la table de consultation d'adresses
    2. Index modifiables en écriture: tableau compact d'index utilisés pour intégrer les adresses de comptes modifiables en écriture. Nous désignerons ce tableau par tableau d'indices B.
    3. Index en lecture seule: tableau compact d'index utilisés pour intégrer les adresses de comptes en lecture seule. Nous désignerons ce tableau par tableau d'indices C

    Compact array of LUTs

    Voyons maintenant quels changements ont été apportés dans le tableau compact d'instructions

    Tableau compact d'instructions

    Comme indiqué précédemment, le tableau compact d'instructions héritées stocke des instructions héritées individuelles qui, à leur tour, stockent les éléments suivants :

    1. Index de l'identifiant du programme
    2. Tableau compact d'index d'adresses de comptes
    3. Tableau compact de données opaques de 8 bits

    Le changement dans la nouvelle instruction n'est pas dans la structure de l'instruction elle-même, mais dans le tableau utilisé pour obtenir les indices de 1 et 2. Dans les transactions héritées, un sous-ensemble du tableau d'indices A est utilisé, tandis que dans les transactions versionnées, un sous-ensemble du tableau combiné des éléments suivants est utilisé :

    1. tableau d'indices A: Tableau compact des comptes stockés dans le message
    2. tableau d'indices B: Index modifiables en écriture dans la consultation de la table d'adresses
    3. tableau d'indices C: Index en lecture seule dans la consultation de la table d'adresses

    New Compact array of Instructions

    Modifications du RPC

    Les réponses des transactions nécessiteront un nouveau champ correspondant à la version : maxSupportedTransactionVersion pour indiquer aux clients quelle structure de transaction doit être utilisée pour la désérialisation.

    Les méthodes suivantes doivent être mises à jour pour éviter les erreurs :

    • getTransaction
    • getBlock

    Le paramètre suivant doit être ajouté aux requêtes :

    maxSupportedTransactionVersion: 0

    Si maxSupportedTransactionVersion n'est pas explicitement ajouté à la requête, la version de la transaction sera fixée à legacy. Tout bloc qui contient une transaction versionnée sera retourné avec une erreur par le client dans le cas d'une transaction héritée.

    Vous pouvez définir ces paramètres via des requêtes au format JSON adressées au point de terminaison RPC, comme ci-dessous :

    curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d \
    +'{"jsonrpc": "2.0", "id":1, "method": "getBlock", "params": [430, {
    +  "encoding":"json",
    +  "maxSupportedTransactionVersion":0,
    +  "transactionDetails":"full",
    +  "rewards":false
    +}]}'
    +

    Vous pouvez également faire de même en utilisant la bibliothèque @solana/web3.jsopen in new window.

    // connect to the `devnet` cluster and get the current `slot`
    +const connection = new web3.Connection(web3.clusterApiUrl("devnet"));
    +const slot = await connection.getSlot();
    +
    +// get the latest block (allowing for v0 transactions)
    +const block = await connection.getBlock(slot, {
    +  maxSupportedTransactionVersion: 0,
    +});
    +
    +// get a specific transaction (allowing for v0 transactions)
    +const getTx = await connection.getTransaction(
    +  "3jpoANiFeVGisWRY5UP648xRXs3iQasCHABPWRWnoEjeA93nc79WrnGgpgazjq4K9m8g2NJoyKoWBV1Kx5VmtwHQ",
    +  {
    +    maxSupportedTransactionVersion: 0,
    +  },
    +);
    +

    Autres Ressources

    Références

    Last Updated:
    + + + diff --git a/docs/.vuepress/dist/fr/index.html b/docs/.vuepress/dist/fr/index.html index 994682d2a..bc56b4158 100644 --- a/docs/.vuepress/dist/fr/index.html +++ b/docs/.vuepress/dist/fr/index.html @@ -23,11 +23,11 @@ } Solana Cookbook | Solana Cookbook - +

    Solana Cookbook

    Solana Cookbook une ressource pour les développeurs qui fournit les concepts et références essentiels pour créer des applications sur Solana. Chaque concept et référence vont se concentrer sur des aspects spécifiques du développement de Solana tout en fournissant des détails supplémentaires et des exemples d'utilisation.

    Contribution

    Solana Cookbook est conçu de manière à permettre aux nouveaux développeurs de Solana de contribuer facilement. Même si vous ne savez pas comment faire quelque chose, contribuer au Cookbook est un excellent moyen d'apprendre !

    Consultez toutes les questions ouvertes iciopen in new window. Lignes directrices pour les contributions iciopen in new window. Si vous trouvez qu'il manque une suggestion dans le Cookbook, veuillez ajouter une question.

    Comment lire le Cookbook

    Le Solana Cookbook est divisé en différentes sections, chacune visant un objectif différent.

    SectionDescription
    Concepts FondamentauxLes éléments de base de Solana qu'il est bon de connaître pour le développement
    GuidesPetits guides sur les différents outils de développement
    RéférencesRéférences aux extraits de code les plus couramment utilisés
    Last Updated:
    - + diff --git a/docs/.vuepress/dist/fr/integrations/index.html b/docs/.vuepress/dist/fr/integrations/index.html index 0968698b4..b74904b5c 100644 --- a/docs/.vuepress/dist/fr/integrations/index.html +++ b/docs/.vuepress/dist/fr/integrations/index.html @@ -23,11 +23,11 @@ } Pour Commencer | Solana Cookbook - +

    Démarrer avec les Intégrations

    Les intégrations du Solana Cookbook propose un ensemble d'exemples et de références permettant à quiconque de s'appuyer sur d'autres protocoles pour développer sur Solana.

    La puissance de Solana provient de sa capacité à intégrer d'autres protocoles, en s'appuyant sur l'infrastructure existante pour améliorer les choses.

    La composabilité est Essentielle

    En rendant votre programme facile à utiliser et à étendre, vous développerez à la fois votre programme et l'ensemble de l'écosystème Solana. Ne réinventez pas la roue, fondez-vous sur les protocoles existants et créez votre propre base d'utilisateurs.

    Adaptez et construisez sur d'autres programmes ou bibliothèques et débloquez de nouvelles capacités pour Solana.

    Contribution

    Si vous souhaitez contribuer aux intégrations, veuillez consulter les lignes directrices pour les contributionsopen in new window.

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/fr/integrations/jupiter.html b/docs/.vuepress/dist/fr/integrations/jupiter.html index f7a0889c4..749b17287 100644 --- a/docs/.vuepress/dist/fr/integrations/jupiter.html +++ b/docs/.vuepress/dist/fr/integrations/jupiter.html @@ -23,7 +23,7 @@ } Jupiter | Solana Cookbook - + @@ -48,7 +48,7 @@ })();

    Chargement de l'instance Jupiter

    L'instance de Jupiter est créée avec les configurations fournies. Il existe de nombreux paramètres optionnels que l'instance peut prendre, pour en savoir plus allez [ici].(https://docs.jup.ag/jupiter-core/full-guide)

    Press </> button to view full source
    import { Jupiter, RouteInfo, TOKEN_LIST_URL } from "@jup-ag/core";
    +

    Chargement de l'instance Jupiter

    L'instance de Jupiter est créée avec les configurations fournies. Il existe de nombreux paramètres optionnels que l'instance peut prendre, pour en savoir plus allez iciopen in new window

    Press </> button to view full source
    import { Jupiter, RouteInfo, TOKEN_LIST_URL } from "@jup-ag/core";
     import { Connection, PublicKey, Keypair } from "@solana/web3.js";
     
     interface Token {
    @@ -595,6 +595,6 @@
       skipPreflight: false,
     });
     

    Autres Ressources

    - + diff --git a/docs/.vuepress/dist/fr/integrations/mango.html b/docs/.vuepress/dist/fr/integrations/mango.html index 9142fa6ad..51066a50e 100644 --- a/docs/.vuepress/dist/fr/integrations/mango.html +++ b/docs/.vuepress/dist/fr/integrations/mango.html @@ -23,7 +23,7 @@ } Mango Markets | Solana Cookbook - + @@ -367,6 +367,6 @@ })();

    Autres Ressources

    - + diff --git a/docs/.vuepress/dist/fr/integrations/orao-vrf.html b/docs/.vuepress/dist/fr/integrations/orao-vrf.html new file mode 100644 index 000000000..d9c0ed7d8 --- /dev/null +++ b/docs/.vuepress/dist/fr/integrations/orao-vrf.html @@ -0,0 +1,33 @@ + + + + + + + + + + + + + +
    + + + diff --git a/docs/.vuepress/dist/fr/integrations/pyth.html b/docs/.vuepress/dist/fr/integrations/pyth.html index 579991db9..20fd2f2fb 100644 --- a/docs/.vuepress/dist/fr/integrations/pyth.html +++ b/docs/.vuepress/dist/fr/integrations/pyth.html @@ -23,7 +23,7 @@ } Pyth | Solana Cookbook - + @@ -103,6 +103,6 @@ let pyth_price_data = &pyth_price_info.try_borrow_data()?; let price_account: Price = *load_price(pyth_price_data).unwrap();

    Autres Ressources

    - + diff --git a/docs/.vuepress/dist/fr/integrations/react-native.html b/docs/.vuepress/dist/fr/integrations/react-native.html index 87cf9534a..d00570e2b 100644 --- a/docs/.vuepress/dist/fr/integrations/react-native.html +++ b/docs/.vuepress/dist/fr/integrations/react-native.html @@ -23,7 +23,7 @@ } React Native | Solana Cookbook - + @@ -70,6 +70,6 @@ ERROR Invariant Violation: Module AppRegistry is not a registered callable module (calling runApplication). A frequent cause of the error is that the application entry file path is incorrect. This can also happen when the JS bundle is corrupt or there is an early initialization error when loading React Native.

    Ce problème peut être résolu en utilisant un polyfill pour l'objet URL dans React Native.

    Installez le paquet react-native-url-polyfill et importez-le dans le fichier principal de votre application (ex : index.js), comme indiqué ci-dessus.

    Erreur: crypto.getRandomValues() not supported

    Error: crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported
     

    Ce problème peut être résolu en utilisant un polyfill pour l'objet crypto dans React Native.

    Installez le paquet react-native-get-random-values et importez-le dans le fichier principal de votre application (ex : index.js), comme indiqué ci-dessus.

    - + diff --git a/docs/.vuepress/dist/fr/integrations/serum.html b/docs/.vuepress/dist/fr/integrations/serum.html index fab2e1872..8d9ed75ae 100644 --- a/docs/.vuepress/dist/fr/integrations/serum.html +++ b/docs/.vuepress/dist/fr/integrations/serum.html @@ -23,7 +23,7 @@ } Serum | Solana Cookbook - + @@ -105,6 +105,6 @@ })(); - + diff --git a/docs/.vuepress/dist/fr/integrations/strata.html b/docs/.vuepress/dist/fr/integrations/strata.html index b999b3de1..656659b9a 100644 --- a/docs/.vuepress/dist/fr/integrations/strata.html +++ b/docs/.vuepress/dist/fr/integrations/strata.html @@ -23,7 +23,7 @@ } Strata | Solana Cookbook - + @@ -150,6 +150,6 @@ }, });

    Autres Ressources

    - + diff --git a/docs/.vuepress/dist/fr/integrations/switchboard.html b/docs/.vuepress/dist/fr/integrations/switchboard.html index cdb4c34ed..9a0102931 100644 --- a/docs/.vuepress/dist/fr/integrations/switchboard.html +++ b/docs/.vuepress/dist/fr/integrations/switchboard.html @@ -23,7 +23,7 @@ } Switchboard | Solana Cookbook - + @@ -169,8 +169,8 @@ use super::*; pub fn get_result(ctx: Context<GetResult>) -> Result<()> { - let aggregator = &ctx.accounts.aggregator_feed; - let val: f64 = AggregatorAccountData::new(aggregator)? + let aggregator = &ctx.accounts.aggregator_feed.load()?; + let val:f64 = aggregator .get_result()? .try_into()?; @@ -184,12 +184,12 @@ pub struct GetResult<'info> { pub authority: Signer<'info>, /// CHECK: field is unsafe - pub aggregator_feed: AccountInfo<'info>, // pass aggregator key + pub aggregator_feed: AccountLoader<'info, AggregatorAccountData>, // pass aggregator key } -

    Comment Créer un Flux à partir du Publisher

    La documentation officielle de Switchboard explique en détail comment créer un flux à partir du Publisher. Découvrez-la iciopen in new window.

    Oracles

    La caractéristique unique de Switchboard est qu'il vous permet de créer votre propre oracle et de l'exécuter localement.

    Créer un oracle

    Press </> button to view full source
    import * as anchor from "@project-serum/anchor";
     import { Keypair } from "@solana/web3.js";
     import {
    @@ -536,6 +536,6 @@
         state_seeds,
     )?;
     

    Ressources

    API et Bibliothèques

    Exemples

    Plus d'Informations

    - + diff --git a/docs/.vuepress/dist/fr/integrations/web3auth.html b/docs/.vuepress/dist/fr/integrations/web3auth.html index 790df4155..ff3f15a07 100644 --- a/docs/.vuepress/dist/fr/integrations/web3auth.html +++ b/docs/.vuepress/dist/fr/integrations/web3auth.html @@ -23,7 +23,7 @@ } web3Auth (Torus Wallet) | Solana Cookbook - + @@ -113,6 +113,6 @@ })();

    Ressources

    - + diff --git a/docs/.vuepress/dist/fr/references/accounts.html b/docs/.vuepress/dist/fr/references/accounts.html index f76b873d8..8f6b02b42 100644 --- a/docs/.vuepress/dist/fr/references/accounts.html +++ b/docs/.vuepress/dist/fr/references/accounts.html @@ -23,7 +23,7 @@ } Comptes | Solana Cookbook - + @@ -998,7 +998,7 @@ programId: programId, }) ); -

    Comment obtenir le solde d'un compte

    Press </> button to view full source
    import {
    +

    Comment obtenir le solde d'un compte

    Press </> button to view full source
    import {
       clusterApiUrl,
       Connection,
       PublicKey,
    @@ -1034,22 +1034,47 @@
         );
     }
     
    from solana.publickey import Keypair
    +
    from solders.keypair import Keypair
     from solana.rpc.api import Client
     
     client = Client("https://api.devnet.solana.com")
     
     key_pair = Keypair()
    -public_key = key_pair.public_key
    +public_key = key_pair.pubkey()
     
     print(client.get_balance(public_key))
     
    // clang++ get_balance.cpp -o get_balance -std=c++17 -lssl -lcrypto -lsodium
    +
    +#include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +  Connection connection("https://api.devnet.solana.com");
    +
    +  auto key_pair = Keypair::generate();
    +
    +  auto public_key = key_pair.public_key;
    +  std::cout << "public_key = " << public_key.to_base58() << std::endl;
    +
    +  uint64_t balance = connection.get_balance(public_key).unwrap();
    +  std::cout << "balance = " << balance << std::endl;
    +
    +  return 0;
    +}
    +

    TIP

    Si vous voulez obtenir un solde de jetons, vous devez connaître l'adresse du compte de jetons. Pour plus d'informations, voir Références des Jetons

    - + diff --git a/docs/.vuepress/dist/fr/references/basic-transactions.html b/docs/.vuepress/dist/fr/references/basic-transactions.html index 82a25dc71..eeaebac6f 100644 --- a/docs/.vuepress/dist/fr/references/basic-transactions.html +++ b/docs/.vuepress/dist/fr/references/basic-transactions.html @@ -23,11 +23,11 @@ } Envoyer des Transactions | Solana Cookbook - + -

    Envoyer des Transactions

    Comment envoyer des SOL

    Pour envoyer des SOL, vous devez interagir avec le SystemProgramopen in new window.

    Press </> button to view full source
    import {
    +    

    Envoyer des Transactions

    Comment envoyer des SOL

    Pour envoyer des SOL, vous devez interagir avec le SystemProgramopen in new window.

    Press </> button to view full source
    import {
       Connection,
       Keypair,
       SystemProgram,
    @@ -76,31 +76,31 @@
     
     await sendAndConfirmTransaction(connection, transferTransaction, [fromKeypair]);
     
    from solana.rpc.api import Client
    -from solana.keypair import Keypair
    +from solders.keypair import Keypair
     from solana.transaction import Transaction
    -from solana.system_program import TransferParams, transfer
    +from solders.system_program import TransferParams, transfer
     
     LAMPORT_PER_SOL = 1000000000
     
     client: Client = Client("https://api.devnet.solana.com")
     
    -sender = Keypair.generate()
    -receiver = Keypair.generate()
    +sender = Keypair()
    +receiver = Keypair()
     
    -airdrop = client.request_airdrop(sender.public_key, 1 * LAMPORT_PER_SOL)
    -airdrop_signature = airdrop["result"]
    +airdrop = client.request_airdrop(sender.pubkey(), 1 * LAMPORT_PER_SOL)
    +airdrop_signature = airdrop.value
     client.confirm_transaction(airdrop_signature)
     
     transaction = Transaction().add(transfer(TransferParams(
    -    from_pubkey=sender.public_key,
    -    to_pubkey=receiver.public_key,
    +    from_pubkey=sender.pubkey(),
    +    to_pubkey=receiver.pubkey(),
         lamports=1_000_000)
     ))
     
     client.send_transaction(transaction, sender)
     
    solana transfer --from <KEYPAIR> <RECIPIENT_ACCOUNT_ADDRESS> 0.5 --allow-unfunded-recipient --url https://api.devnet.solana.com --fee-payer <KEYPAIR> --with-memo <MEMO>
     

    Comment changer le budget de calcul, les frais, &amp ; la priorisation d'une transaction

    La priorisation d'une transaction (TX) est obtenue en payant des Frais de Priorisation en plus des Frais de Base. Par défaut, le budget de calcul est le produit de 200 000 unités de calcul (UC) * le nombre d'instructions, avec un maximum de 1,4 million d'UC. Les Frais de Base sont de 5 000 Lamports. Un microLamport est 0.000001 Lamports.

    Le budget total de calcul ou les Frais de Priorisation pour une seule TX peuvent être modifiés en ajoutant des instructions du programme ComputeBudgetProgram.

    ComputeBudgetProgram.setComputeUnitPrice({ microLamports: number }) ajoutera des Frais de Priorisation en plus des Frais de Base (5 000 Lamports). La valeur fournie en microLamports sera multipliée par le budget de l'UC pour déterminer les Frais de Priorisation en Lamports. Par exemple, si votre budget de l'UC est de 1M d'UC, et que vous ajoutez 1 microLamport/UC, les Frais de Priorisation seront de 1 Lamport (1M * 0,000001). Les frais totaux seront alors de 5001 Lamports.

    Utilisez ComputeBudgetProgram.setComputeUnitLimit({ units: number }) pour définir le nouveau budget de calcul. La valeur fournie remplacera la valeur par défaut. Les transactions doivent demander la quantité minimale d'UC nécessaire à l'exécution afin de maximiser le débit ou de minimiser les frais.

    Press </> button to view full source
    import { BN } from "@project-serum/anchor";
    +

    Comment changer le budget de calcul, les frais, & la priorisation d'une transaction

    La priorisation d'une transaction (TX) est obtenue en payant des Frais de Priorisation en plus des Frais de Base. Par défaut, le budget de calcul est le produit de 200 000 unités de calcul (UC) * le nombre d'instructions, avec un maximum de 1,4 million d'UC. Les Frais de Base sont de 5 000 Lamports. Un microLamport est 0.000001 Lamports.

    Le budget total de calcul ou les Frais de Priorisation pour une seule TX peuvent être modifiés en ajoutant des instructions du programme ComputeBudgetProgram.

    ComputeBudgetProgram.setComputeUnitPrice({ microLamports: number }) ajoutera des Frais de Priorisation en plus des Frais de Base (5 000 Lamports). La valeur fournie en microLamports sera multipliée par le budget de l'UC pour déterminer les Frais de Priorisation en Lamports. Par exemple, si votre budget de l'UC est de 1M d'UC, et que vous ajoutez 1 microLamport/UC, les Frais de Priorisation seront de 1 Lamport (1M * 0,000001). Les frais totaux seront alors de 5001 Lamports.

    Utilisez ComputeBudgetProgram.setComputeUnitLimit({ units: number }) pour définir le nouveau budget de calcul. La valeur fournie remplacera la valeur par défaut. Les transactions doivent demander la quantité minimale d'UC nécessaire à l'exécution afin de maximiser le débit ou de minimiser les frais.

    Press </> button to view full source
    import { BN } from "@project-serum/anchor";
     import {
       Keypair,
       Connection,
    @@ -727,6 +727,6 @@
     [ 4] Program ComputeBudget111111111111111111111111111111 invoke [1]
     [ 5] Program ComputeBudget111111111111111111111111111111 success
     
    Last Updated:
    - + diff --git a/docs/.vuepress/dist/fr/references/keypairs-and-wallets.html b/docs/.vuepress/dist/fr/references/keypairs-and-wallets.html index 061c7a4c7..26dfc0d92 100644 --- a/docs/.vuepress/dist/fr/references/keypairs-and-wallets.html +++ b/docs/.vuepress/dist/fr/references/keypairs-and-wallets.html @@ -23,20 +23,35 @@ } Paires de Clés et Portefeuilles | Solana Cookbook - + -

    Paires de Clés (Keypair) et Portefeuilles

    Comment générer une nouvelle Paire de Clés

    La plupart des actions que vous pouvez effectuer avec les diverses bibliothèques de Solana nécessitent une Paire de Clés ou un Portefeuille. Si vous vous connectez à un portefeuille, vous n'avez pas à vous inquiéter. Cependant, si vous avez besoin d'une paire de clés, vous devrez en générer une.

    Press </> button to view full source
    import { Keypair } from "@solana/web3.js";
    +    

    Paires de Clés (Keypair) et Portefeuilles

    Comment générer une nouvelle Paire de Clés

    La plupart des actions que vous pouvez effectuer avec les diverses bibliothèques de Solana nécessitent une Paire de Clés ou un Portefeuille. Si vous vous connectez à un portefeuille, vous n'avez pas à vous inquiéter. Cependant, si vous avez besoin d'une paire de clés, vous devrez en générer une.

    Press </> button to view full source
    import { Keypair } from "@solana/web3.js";
     
     (async () => {
       let keypair = Keypair.generate();
     })();
     
    from solana.keypair import Keypair
    +
    from solders.keypair import Keypair
     
     keypair = Keypair()
     
    // clang++ generate_keypair.cpp -o generate_keypair -std=c++17 -lssl -lcrypto -lsodium
    +
    +#include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +  auto key_pair = Keypair::generate();
    +
    +  auto public_key = key_pair.public_key;
    +  std::cout << "public_key = " << public_key.to_base58() << std::endl;
    +
    +  return 0;
    +}
    +
    use solana_sdk::signature::{Keypair};
     
     fn main() {
    @@ -47,7 +62,7 @@
     
     # pubkey: 9ZNTfG4NyQgxy2SWjSiQoUyBPEvXT2xo7fKc5hPYYJ7b
     

    Comment restaurer une Paire de clés à partir d'une clé privée

    Si vous disposez déjà de votre clé privée, vous pouvez générer une Paire de Clés à partir de celle-ci pour tester votre dApp.

    1. À partir des Bytes
    Press </> button to view full source
    import { Keypair } from "@solana/web3.js";
    +

    Comment restaurer une Paire de clés à partir d'une clé privée

    Si vous disposez déjà de votre clé privée, vous pouvez générer une Paire de Clés à partir de celle-ci pour tester votre dApp.

    1. À partir des Bytes
    Press </> button to view full source
    import { Keypair } from "@solana/web3.js";
     
     (async () => {
       const keypair = Keypair.fromSecretKey(
    @@ -67,7 +82,7 @@
         121, 35, 172, 247, 68, 251, 226, 218, 48, 63, 176, 109, 168, 89, 238, 135,
       ])
     );
    -
    from solana.keypair import Keypair
    +
    from solders.keypair import Keypair
     
     secret_key= [
             174, 47, 154, 16, 202, 193, 206, 113, 199, 190, 53, 133, 169, 175, 31, 56, 222, 53, 138,
    @@ -76,8 +91,8 @@
             63, 176, 109, 168, 89, 238, 135,
         ]
         
    -keypair = Keypair.from_secret_key(bytes(secret_key))
    -print("Created Keypair with Public Key: {}".format(keypair.public_key))
    +keypair = Keypair.from_bytes(secret_key)
    +print("Created Keypair with Public Key: {}".format(keypair.pubkey()))
     
    use solana_sdk::signature::{Keypair, Signer};
    +keypair = Keypair.from_bytes(secret_key)
    +
    // clang++ keypair_from_seed.cpp -o keypair_from_seed -std=c++17 -lssl -lcrypto -lsodium
    +
    +#include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +  const uint8_t bytes[] = {
    +    174, 47, 154, 16, 202, 193, 206, 113, 199, 190, 53, 133, 169, 175, 31, 56, 222, 53, 138,
    +    189, 224, 216, 117, 173, 10, 149, 53, 45, 73, 251, 237, 246, 15, 185, 186, 82, 177, 240,
    +    148, 69, 241, 227, 167, 80, 141, 89, 240, 121, 121, 35, 172, 247, 68, 251, 226, 218, 48,
    +    63, 176, 109, 168, 89, 238, 135,
    +  };
    +  Keypair key_pair = Keypair::from_seed(bytes);
    +  std::cout << "Created Keypair with Public Key: " << key_pair.public_key.to_base58() << std::endl;
    +}
    +
    use solana_sdk::signature::{Keypair, Signer};
     
     fn main() {
         let secret_key: [u8; 64] = [
    @@ -126,14 +164,13 @@
         "5MaiiCavjCmn9Hs1o3eznqDEhRwxo7pXiAYez7keQUviUkauRiTMD8DrESdrNjN8zd9mTmVhRvBJeg5vhyvgrAhG"
       )
     );
    -
    import base58
    -from solana.keypair import Keypair
    +
    from solders.keypair import Keypair
     
     b58_string = "5MaiiCavjCmn9Hs1o3eznqDEhRwxo7pXiAYez7keQUviUkauRiTMD8DrESdrNjN8zd9mTmVhRvBJeg5vhyvgrAhG"
    -keypair = Keypair.from_secret_key(base58.b58decode(b58_string)
    -print("Created Keypair with Public Key: {}".format(keypair.public_key))
    -
    use solana_sdk::signature::{Keypair, Signer};
     
     fn main() {
    @@ -146,7 +183,7 @@
     

    Comment vérifier une Paire de Clés

    Si on vous donne une paire de clés, vous pouvez vérifier si, oui ou non, la clé privée correspond à la clé publique donnée

    Press </> button to view full source
    import { Keypair, PublicKey } from "@solana/web3.js";
    +

    Comment vérifier une Paire de Clés

    Si on vous donne une paire de clés, vous pouvez vérifier si, oui ou non, la clé privée correspond à la clé publique donnée

    Press </> button to view full source
    import { Keypair, PublicKey } from "@solana/web3.js";
     
     (async () => {
       const publicKey = new PublicKey(
    @@ -174,10 +211,10 @@
     );
     console.log(keypair.publicKey.toBase58() === publicKey.toBase58());
     // true
    -
    from solana.keypair import Keypair
    -from solana.publickey import PublicKey
    +
    from solders.keypair import Keypair
    +from solders.pubkey import Pubkey
     
    -public_key = PublicKey("24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p")
    +public_key = Pubkey.from_string("24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p")
     
     keys = [
             174, 47, 154, 16, 202, 193, 206, 113, 199, 190, 53, 133, 169, 175, 31, 56, 222, 53, 138,
    @@ -185,11 +222,11 @@
             148, 69, 241, 227, 167, 80, 141, 89, 240, 121, 121, 35, 172, 247, 68, 251, 226, 218, 48,
             63, 176, 109, 168, 89, 238, 135,
         ]
    -keypair = Keypair.from_secret_key(bytes(keys))
    +keypair = Keypair.from_bytes(keys)
     
    -print(keypair.public_key.to_base58() == public_key.to_base58())
    +print(keypair.pubkey() == public_key)
     # True
    -
    // clang++ verify_keypair.cpp -o verify_keypair -std=c++17 -lssl -lcrypto -lsodium
    +
    +#include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +  PublicKey public_key = PublicKey("24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p");
    +
    +  const uint8_t bytes[] = {
    +    174, 47, 154, 16, 202, 193, 206, 113, 199, 190, 53, 133, 169, 175, 31, 56, 222, 53, 138,
    +    189, 224, 216, 117, 173, 10, 149, 53, 45, 73, 251, 237, 246, 15, 185, 186, 82, 177, 240,
    +    148, 69, 241, 227, 167, 80, 141, 89, 240, 121, 121, 35, 172, 247, 68, 251, 226, 218, 48,
    +    63, 176, 109, 168, 89, 238, 135,
    +  };
    +  Keypair key_pair = Keypair::from_seed(bytes);
    +
    +  std::cout << (public_key.to_base58() == key_pair.public_key.to_base58()) << std::endl;
    +}
    +
    solana-keygen verify <PUBKEY> prompt://
     

    Comment vérifier si une clé publique a une clé privée associée

    Dans certains cas particuliers (par exemple, une Adresse Dérivée d'un Programme), les clés publiques peuvent ne pas être associées à une clé privée. Vous pouvez le vérifier en regardant si la clé publique se trouve sur la courbe ed25519. Seules les clés publiques qui se trouvent sur la courbe peuvent être contrôlées par les utilisateurs possédant un portefeuille.

    Press </> button to view full source
    import { PublicKey } from "@solana/web3.js";
    +

    Comment vérifier si une clé publique a une clé privée associée

    Dans certains cas particuliers (par exemple, une Adresse Dérivée d'un Programme), les clés publiques peuvent ne pas être associées à une clé privée. Vous pouvez le vérifier en regardant si la clé publique se trouve sur la courbe ed25519. Seules les clés publiques qui se trouvent sur la courbe peuvent être contrôlées par les utilisateurs possédant un portefeuille.

    Press </> button to view full source
    import { PublicKey } from "@solana/web3.js";
     
     (async function () {
       // Note that Keypair.generate() will always give a public key that is valid for users
    @@ -219,20 +287,31 @@
     })();
     
    from solana.keypair import Keypair
    -from solana.publickey import PublicKey
    -from solana.utils.ed25519_base import is_on_curve
    +
    from solders.pubkey import Pubkey
     
     # Note that Keypair() will always give a public key that is valid for users
    -key = PublicKey('5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY') # Valid public key
    -print(is_on_curve(key)) # Lies on the ed25519 curve and is suitable for users
    +key = Pubkey.from_string('5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY') # Valid public key
    +print(key.is_on_curve()) # Lies on the ed25519 curve and is suitable for users
    +
    +off_curve_address = Pubkey.from_string('4BJXYkfvg37zEmBbsacZjeQDpTNx91KppxFJxRqrz48e') # Valid public key
    +print(off_curve_address.is_on_curve()) # Not on the ed25519 curve, therefore not suitable for users
    +
    +error_pubkey = Pubkey.from_string("testPubkey"); # Is not a valid public key
    +
    #include <iostream>
    +#include <solana_sdk.h>
    +
    +int main()
    +{
    +    auto public_key = PublicKey("5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY");
     
    -off_curve_address = PublicKey('4BJXYkfvg37zEmBbsacZjeQDpTNx91KppxFJxRqrz48e') # Valid public key
    -print(PublicKey._is_on_curve(off_curve_address)) # Not on the ed25519 curve, therefore not suitable for users
    +    std::cout << public_key.is_on_curve() << std::endl;
     
    -error_pubkey = PublicKey("testPubkey"); # Is not a valid public key
    -
    use solana_sdk::pubkey::{Pubkey};
     use std::str::FromStr;
     
    @@ -274,16 +353,16 @@
       "pill tomorrow foster begin walnut borrow virtual kick shift mutual shoe scatter";
     const seed = bip39.mnemonicToSeedSync(mnemonic, ""); // (mnemonic, password)
     const keypair = Keypair.fromSeed(seed.slice(0, 32));
    -
    from solana.keypair import Keypair
    +
    from solders.keypair import Keypair
     from mnemonic import Mnemonic
     
     mnemo = Mnemonic("english")
     seed = mnemo.to_seed("pill tomorrow foster begin walnut borrow virtual kick shift mutual shoe scatter")
    -keypair = Keypair.from_secret_key(seed)
    -print("Created Keypair with Public Key: {}".format(keypair.public_key)
    +keypair = Keypair.from_bytes(seed)
    +print("Created Keypair with Public Key: {}".format(keypair.pubkey()))
     
    solana-keygen recover
     
    1. BIP44 (portefeuilles multiples, également appelés HD wallets)

    Vous pouvez créer plusieurs portefeuilles à partir d'une seule seed, également appelés "Portefeuilles Déterministes Hiérarchiques" ou portefeuilles HD :

    Press </> button to view full source
    import { Keypair } from "@solana/web3.js";
    @@ -311,7 +390,7 @@
     }
     
    solana-keygen recover 'prompt:?key=0/0'
     

    Comment générer une adresse personnalisée

    Les adresses personnalisées (vanity publickeys) sont des clés qui commencent par des caractères spécifiques. Par exemple, une personne peut vouloir que sa clé publique commence par "elv1s", ou peut-être même "cook". Elles peuvent aider les autres personnes à se rappeler à qui appartient la clé, ce qui la rend plus facilement identifiable.

    Remarque: Plus il y a de caractères spécifiques dans votre adresse personnalisée, plus la procédure sera longue.

    WARNING

    Vous devez utiliser le CLI pour cette tâche. Les exemples Python et TypeScript sont donnés à titre d'illustration et sont beaucoup plus lents que le CLI.

    Press </> button to view full source
    import { Keypair } from "@solana/web3.js";
    +

    Comment générer une adresse personnalisée

    Les adresses personnalisées (vanity publickeys) sont des clés qui commencent par des caractères spécifiques. Par exemple, une personne peut vouloir que sa clé publique commence par "elv1s", ou peut-être même "cook". Elles peuvent aider les autres personnes à se rappeler à qui appartient la clé, ce qui la rend plus facilement identifiable.

    Remarque: Plus il y a de caractères spécifiques dans votre adresse personnalisée, plus la procédure sera longue.

    WARNING

    Vous devez utiliser le CLI pour cette tâche. Les exemples Python et TypeScript sont donnés à titre d'illustration et sont beaucoup plus lents que le CLI.

    Press </> button to view full source
    import { Keypair } from "@solana/web3.js";
     
     (async () => {
       let keypair = Keypair.generate();
    @@ -323,17 +402,36 @@
     while (!keypair.publicKey.toBase58().startsWith("elv1s")) {
       keypair = Keypair.generate();
     }
    -
    from solana.keypair import Keypair
    +
    from solders.keypair import Keypair
     
     keypair = Keypair()
    -while(str(keypair.public_key)[:5]!="elv1s") :
    +while(str(keypair.pubkey())[:5]!="elv1s") :
         keypair = Keypair()
         
    -print("Created Keypair with Public Key: {}".format(keypair.public_key))
    +print("Created Keypair with Public Key: {}".format(keypair.pubkey()))
     
    solana-keygen grind --starts-with e1v1s:1
    +
    // clang++ vanity_keypair.cpp -o vanity_keypair -std=c++17 -lssl -lcrypto -lsodium
    +
    +#include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +  auto key_pair = Keypair::generate();
    +
    +  while (key_pair.public_key.to_base58().substr(0, 5) != "elv1s") {
    +    key_pair = Keypair::generate();
    +  }
    +
    +  std::cout << "Created Keypair with Public Key: " << key_pair.public_key.to_base58() << std::endl;
    +}
    +
    solana-keygen grind --starts-with e1v1s:1
     

    Comment signer et vérifier des messages avec les portefeuilles

    La fonction première d'une paire de clés est de signer des messages et de permettre la vérification de la signature. La vérification d'une signature permet au destinataire d'être sûr que les données ont été signées par le propriétaire d'une clé privée spécifique.

    Pour ce faire, nous allons importer la bibliothèque cryptographique TweetNaClopen in new window.

    Press </> button to view full source
    import { Keypair } from "@solana/web3.js";
     import nacl from "tweetnacl";
    @@ -372,41 +470,25 @@
     );
     
     console.log(result);
    -
    from nacl.signing import VerifyKey
    -from solana.keypair import Keypair
    +
    from solders.keypair import Keypair
     
     secret_key =  [
           174, 47, 154, 16, 202, 193, 206, 113, 199, 190, 53, 133, 169, 175, 31, 56, 222, 53, 138, 189, 224, 216, 117,
           173, 10, 149, 53, 45, 73, 251, 237, 246, 15, 185, 186, 82, 177, 240, 148, 69, 241, 227, 167, 80, 141, 89, 240,
           121, 121, 35, 172, 247, 68, 251, 226, 218, 48, 63, 176, 109, 168, 89, 238, 135,
    -    ]
    -     
    -keypair = Keypair.from_secret_key(bytes(secret_key))
    -pubkey_bytes = bytes(keypair.public_key)
    -message = "The quick brown fox jumps over the lazy dog"
    -message_bytes = bytes(message,'utf8')
    -signed_message = keypair.sign(message_bytes)
    -
    -verify_sign = VerifyKey(
    -    pubkey_bytes
    -).verify(
    -    smessage=message_bytes,  
    -    signature=signed_message.signature
    -)
    -
    -#Returns original message if the signature has not been tampered with
    -print(verify_sign)
    -

    Comment se connecter à un portefeuille

    Les bibliothèques wallet-adapteropen in new window de Solana permettent de gérer facilement les connexions de portefeuilles côté client.

    React

    Exécutez la commande suivante pour installer les dépendances requises :

    yarn add @solana/wallet-adapter-react @solana/wallet-adapter-react-ui @solana/wallet-adapter-base @solana/wallet-adapter-wallets
    +    ] 
    +keypair = Keypair.from_bytes(secret_key)
    +message = b"The quick brown fox jumps over the lazy dog"
    +signature = keypair.sign_message(message)
    +verify_sign = signature.verify(keypair.pubkey(), message)
    +
    +print(verify_sign) # bool
    +

    Comment se connecter à un portefeuille

    Les bibliothèques wallet-adapteropen in new window de Solana permettent de gérer facilement les connexions de portefeuilles côté client.

    React

    Exécutez la commande suivante pour installer les dépendances requises :

    yarn add @solana/wallet-adapter-react @solana/wallet-adapter-react-ui @solana/wallet-adapter-base @solana/wallet-adapter-wallets
     

    Les bibliothèques wallet-adapter de React nous permettent de conserver et d'accéder aux états de connexion du portefeuille par le biais de hooks et de fournisseurs de Contexte, à savoir, useWallet, WalletProvider, useConnection, et ConnectionProvider. L'Application React doit être encapsulée avec WalletProvider et ConnectionProvider.

    De plus, nous pouvons inviter les utilisateurs à se connecter en utilisant useWalletModal pour activer la visibilité de la modale de connexion et en enveloppant l'Application avec WalletModalProvider de @solana/wallet-adapter-react-ui. La modale de connexion gérera ce flux de connexion pour nous, de sorte que nous pouvons simplement surveiller la connexion d'un portefeuille. Nous savons qu'un portefeuille est connecté lorsque la réponse useWallet a une propriété wallet non nulle. Inversement, si cette propriété est nulle, nous savons que le portefeuille est déconnecté.

    Press </> button to view full source
    import React, { useMemo, FC, PropsWithChildren } from "react";
     import {
       ConnectionProvider,
    @@ -593,6 +675,6 @@
     <WalletMultiButton />
     {/if}
     
    Last Updated:
    - + diff --git a/docs/.vuepress/dist/fr/references/local-development.html b/docs/.vuepress/dist/fr/references/local-development.html index 2f0d0f9b6..25bb0b250 100644 --- a/docs/.vuepress/dist/fr/references/local-development.html +++ b/docs/.vuepress/dist/fr/references/local-development.html @@ -23,12 +23,12 @@ } Développement Local | Solana Cookbook - +

    Développement Local

    Démarrer un Validateur Local

    Tester le code de votre programme localement peut être beaucoup plus fiable que de le tester sur le devnet, et peut vous aider à faire des tests avant de l'essayer sur le devnet.

    Vous pouvez configurer votre validateur de test local (local-test-validator) en installant la suite d'outils de solana (solana tool suite) et en exécutant

    solana-test-validator
    -

    Les avantages de l'utilisation de local-test-validator sont les suivants :

    • Pas de limites de débit RPC
    • Pas de limites d'airdrop
    • Déploiement direct de programme sur la blockchain (--bpf-program ...)
    • Clonage de comptes à partir d'un cluster public, y compris les programmes (--clone ...)
    • Possibilité de configurer l'historique de conservation des transactions (--limit-ledger-size ...)
    • Possibilité de configurer la durée des époques (--slots-per-epoch ...)
    • Sauter à un slot précis (--warp-slot ...)

    Connexion aux Environnements

    Lorsque vous développez sur Solana, vous devez vous connecter à un point de terminaison API de RPC en particulier. Solana dispose de 3 environnements de développement publics :

    • mainnet-beta https://api.mainnet-beta.solana.com
    • devnet https://api.devnet.solana.com
    • testnet https://api.testnet.solana.com
    Press </> button to view full source
    import { clusterApiUrl, Connection } from "@solana/web3.js";
    +

    Les avantages de l'utilisation de local-test-validator sont les suivants :

    • Pas de limites de débit RPC
    • Pas de limites d'airdrop
    • Déploiement direct de programme sur la blockchain (--bpf-program ...)
    • Clonage de comptes à partir d'un cluster public, y compris les programmes (--clone ...)
    • Possibilité de configurer l'historique de conservation des transactions (--limit-ledger-size ...)
    • Possibilité de configurer la durée des époques (--slots-per-epoch ...)
    • Sauter à un slot précis (--warp-slot ...)

    Connexion aux Environnements

    Lorsque vous développez sur Solana, vous devez vous connecter à un point de terminaison API de RPC en particulier. Solana dispose de 3 environnements de développement publics :

    • mainnet-beta https://api.mainnet-beta.solana.com
    • devnet https://api.devnet.solana.com
    • testnet https://api.testnet.solana.com
    Press </> button to view full source
    import { clusterApiUrl, Connection } from "@solana/web3.js";
     
     (async () => {
       const connection = new Connection(clusterApiUrl("mainnet-beta"), "confirmed");
    @@ -38,6 +38,15 @@
     
     client = Client("https://api.mainnet-beta.solana.com")
     
    #include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +    Connection connection("https://api.mainnet-beta.solana.com");
    +    return 0;
    +}
    +
    use solana_client::rpc_client::RpcClient;
     use solana_sdk::commitment_config::CommitmentConfig;
     
    @@ -49,7 +58,7 @@
     let client = RpcClient::new_with_commitment(rpc_url, CommitmentConfig::confirmed());
     
    solana config set --url https://api.mainnet-beta.solana.com
     

    Enfin, vous pouvez également vous connecter à un cluster privé, qu'il soit local ou fonctionnant à distance avec l'élément suivant :

    Press </> button to view full source
    import { Connection } from "@solana/web3.js";
    +

    Enfin, vous pouvez également vous connecter à un cluster privé, qu'il soit local ou fonctionnant à distance avec l'élément suivant :

    Press </> button to view full source
    import { Connection } from "@solana/web3.js";
     
     (async () => {
       // This will connect you to your local validator
    @@ -60,6 +69,15 @@
     
     client = Client("http://127.0.0.1:8899")
     
    #include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +    Connection connection("http://127.0.0.1:8899");
    +    return 0;
    +}
    +
    use solana_client::rpc_client::RpcClient;
     use solana_sdk::commitment_config::CommitmentConfig;
     
    @@ -71,7 +89,7 @@
     let client = RpcClient::new_with_commitment(rpc_url, CommitmentConfig::confirmed());
     
    solana config set --url http://privaterpc.com
     

    Inscription à des Evénements

    Les Websockets fournissent une interface pub/sub où vous pouvez écouter certains événements. Au lieu d'envoyer une requête à un point de terminaison HTTP classique à intervalles réguliers pour obtenir des mises à jour fréquentes, vous pouvez recevoir ces mises à jour uniquement lorsqu'elles se produisent.

    La classe web3 Connectionopen in new window de Solana génère un point de terminaison websocket et enregistre un client websocket lorsque vous créez une nouvelle instance Connection (voir le code source iciopen in new window).

    La classe Connection présente des méthodes pub/sub - elles commencent toutes par on, comme les émetteurs d'événements. Lorsque vous appelez ces méthodes d'écoute, un nouvel enregistrement est effectué auprès du client websocket de l'instance Connection. L'exemple de méthode pub/sub que nous utilisons ci-dessous est onAccountChangeopen in new window. Le callback fournira les données d'état mises à jour par le biais d'arguments (voir AccountChangeCallbackopen in new window en guise d'exemple).

    Press </> button to view full source
    import { clusterApiUrl, Connection, Keypair } from "@solana/web3.js";
    +

    Inscription à des Evénements

    Les Websockets fournissent une interface pub/sub où vous pouvez écouter certains événements. Au lieu d'envoyer une requête à un point de terminaison HTTP classique à intervalles réguliers pour obtenir des mises à jour fréquentes, vous pouvez recevoir ces mises à jour uniquement lorsqu'elles se produisent.

    La classe web3 Connectionopen in new window de Solana génère un point de terminaison websocket et enregistre un client websocket lorsque vous créez une nouvelle instance Connection (voir le code source iciopen in new window).

    La classe Connection présente des méthodes pub/sub - elles commencent toutes par on, comme les émetteurs d'événements. Lorsque vous appelez ces méthodes d'écoute, un nouvel enregistrement est effectué auprès du client websocket de l'instance Connection. L'exemple de méthode pub/sub que nous utilisons ci-dessous est onAccountChangeopen in new window. Le callback fournira les données d'état mises à jour par le biais d'arguments (voir AccountChangeCallbackopen in new window en guise d'exemple).

    Press </> button to view full source
    import { clusterApiUrl, Connection, Keypair } from "@solana/web3.js";
     
     (async () => {
       // Establish new connect to devnet - websocket client connected to devnet will also be registered here
    @@ -102,7 +120,7 @@
       "confirmed"
     );
     
    import asyncio
    -from solana.keypair import Keypair
    +from solders.keypair import Keypair
     from solana.rpc.websocket_api import connect
     
     async def main():
    @@ -110,7 +128,7 @@
             # Create a Test Wallet
             wallet = Keypair()
             # Subscribe to the Test wallet to listen for events
    -        await websocket.account_subscribe(wallet.public_key)
    +        await websocket.account_subscribe(wallet.pubkey())
             # Capture response from account subscription 
             first_resp = await websocket.recv()
             print("Subscription successful with id {}, listening for events \n".format(first_resp.result))
    @@ -122,13 +140,62 @@
         # Create a Test Wallet
         wallet = Keypair()
         # Subscribe to the Test wallet to listen for events
    -    await websocket.account_subscribe(wallet.public_key)
    +    await websocket.account_subscribe(wallet.pubkey())
         # Capture response from account subscription 
         first_resp = await websocket.recv()
         print("Subscription successful with id {}, listening for events \n".format(first_resp.result))
         updated_account_info = await websocket.recv()
         print(updated_account_info)    
    -
    use solana_client::pubsub_client::PubsubClient;
    +
    // clang++ on_account_change.cpp -o on_account_change -std=c++17 -lssl -lcrypto -lsodium
    +
    +#include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +  Connection connection("https://api.devnet.solana.com");
    +
    +  auto key_pair = Keypair::generate();
    +
    +  int subscriptionId = connection.on_account_change(key_pair.public_key, [&](Result<Account> result) {
    +    Account account = result.unwrap();
    +    std::cout << "owner = " << account.owner.to_base58() << std::endl;
    +    std::cout << "lamports = " << account.lamports << std::endl;
    +    std::cout << "data = " << account.data << std::endl;
    +    std::cout << "executable = " << (account.executable ? "true" : "false") << std::endl;
    +  });
    +
    +  sleep(1);
    +
    +  std::string tx_hash = connection.request_airdrop(key_pair.public_key).unwrap();
    +  std::cout << "tx hash = " << tx_hash << std::endl;
    +
    +  for (int i = 0; i < 10; i++) {
    +    connection.poll();
    +    sleep(1);
    +  }
    +
    +  connection.remove_account_listener(subscriptionId);
    +
    +  return 0;
    +}
    +
    use solana_client::pubsub_client::PubsubClient;
     use solana_client::rpc_config::RpcAccountInfoConfig;
     use solana_sdk::commitment_config::CommitmentConfig;
     use solana_sdk::signature::{Keypair, Signer};
    @@ -177,7 +244,7 @@
     ).unwrap();
     let message = match receiver.recv().unwrap();
     println!("{:?}", message)
    -

    Obtention de SOL pour les Tests

    Lorsque vous travaillez localement, vous avez besoin d'un certain nombre de SOL pour envoyer des transactions. Dans les environnements non-mainnet, vous pouvez recevoir des SOL en les airdroppant à votre adresse.

    Press </> button to view full source
    import { Connection, Keypair, LAMPORTS_PER_SOL } from "@solana/web3.js";
    +

    Obtention de SOL pour les Tests

    Lorsque vous travaillez localement, vous avez besoin d'un certain nombre de SOL pour envoyer des transactions. Dans les environnements non-mainnet, vous pouvez recevoir des SOL en les airdroppant à votre adresse.

    Press </> button to view full source
    import { Connection, Keypair, LAMPORTS_PER_SOL } from "@solana/web3.js";
     
     (async () => {
       const keypair = Keypair.generate();
    @@ -201,7 +268,7 @@
     );
     
     await connection.confirmTransaction(airdropSignature);
    -
    from solana.keypair import Keypair
    +
    from solders.keypair import Keypair
     from solana.rpc.api import Client
     
     wallet = Keypair()
    @@ -209,14 +276,32 @@
     client = Client("https://api.devnet.solana.com")
     
     #Input Airdrop amount in LAMPORTS
    -client.request_airdrop(wallet.public_key, 1000000000)
    +client.request_airdrop(wallet.pubkey(), 1000000000)
     
     #Airdrops 1 SOL
     
    use solana_client::rpc_client::RpcClient;
    +
    // clang++ request_airdrop.cpp -o request_airdrop -std=c++17 -lssl -lcrypto -lsodium
    +
    +#include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +  Connection connection("https://api.devnet.solana.com");
    +
    +  auto key_pair = Keypair::generate();
    +
    +  std::string tx_hash = connection.request_airdrop(key_pair.public_key).unwrap();
    +
    +  std::cout << "tx hash = " << tx_hash << std::endl;
    +
    +  return 0;
    +}
    +
    use solana_client::rpc_client::RpcClient;
     use solana_sdk::commitment_config::CommitmentConfig;
     use solana_sdk::native_token::LAMPORTS_PER_SOL;
     use solana_sdk::signature::{Keypair, Signer};
    @@ -267,6 +352,6 @@
     solana-test-validator --bpf-program 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin serum_dex_v3.so --reset
     
    Last Updated:
    - + diff --git a/docs/.vuepress/dist/fr/references/name-service.html b/docs/.vuepress/dist/fr/references/name-service.html index 18485fb84..265b7bed2 100644 --- a/docs/.vuepress/dist/fr/references/name-service.html +++ b/docs/.vuepress/dist/fr/references/name-service.html @@ -23,7 +23,7 @@ } Service de Noms | Solana Cookbook - + @@ -181,7 +181,7 @@ const subDomain = "demo"; // Step 1 -const hashedParentDomain = await getHashedName(mainDomain); +const hashedParentDomain = await getHashedName(parentDomain); const parentDomainKey = await getNameAccountKey( hashedParentDomain, undefined, @@ -260,6 +260,6 @@ const registry = await getTwitterRegistry(connection, handle);
    Last Updated:
    - + diff --git a/docs/.vuepress/dist/fr/references/nfts.html b/docs/.vuepress/dist/fr/references/nfts.html index 68170cbe7..6dddba4f8 100644 --- a/docs/.vuepress/dist/fr/references/nfts.html +++ b/docs/.vuepress/dist/fr/references/nfts.html @@ -23,7 +23,7 @@ } NFTs | Solana Cookbook - + @@ -271,11 +271,13 @@ const metaplex = new Metaplex(connection); metaplex.use(keypairIdentity(keypair)); - const mint = new PublicKey("Ay1U9DWphDgc7hq58Yj1yHabt91zTzvV2YJbAWkPNbaK"); + const mintAddress = new PublicKey( + "Ay1U9DWphDgc7hq58Yj1yHabt91zTzvV2YJbAWkPNbaK" + ); - const nft = await metaplex.nfts().findByMint(mint); + const nft = await metaplex.nfts().findByMint({ mintAddress }); - console.log(nft.metadata); + console.log(nft.json); /* { name: 'SMB #139', @@ -302,18 +304,20 @@ } */ })(); -

    Comment obtenir le propriétaire d'un NFT

    Si vous avez la clé de création (mint key) d'un NFT, vous pouvez trouver son propriétaire actuel en regardant le plus grand compte de jetons pour ce mint.

    Rappelez-vous que les NFTs ont une offre de 1, et qu'ils sont indivisibles, ce qui signifie qu'un seul compte de jetons détiendra ce jeton à un moment donné, tandis que tous les autres comptes de jetons pour cette clé de création auront un solde de 0.

    Une fois que le plus grand compte de jeton est identifié, nous pouvons retrouver son propriétaire.

    Press </> button to view full source
    import { Connection, PublicKey } from "@solana/web3.js";
    +console.log(nft.json);
    +

    Comment obtenir le propriétaire d'un NFT

    Si vous avez la clé de création (mint key) d'un NFT, vous pouvez trouver son propriétaire actuel en regardant le plus grand compte de jetons pour ce mint.

    Rappelez-vous que les NFTs ont une offre de 1, et qu'ils sont indivisibles, ce qui signifie qu'un seul compte de jetons détiendra ce jeton à un moment donné, tandis que tous les autres comptes de jetons pour cette clé de création auront un solde de 0.

    Une fois que le plus grand compte de jeton est identifié, nous pouvons retrouver son propriétaire.

    Press </> button to view full source
    import { Connection, PublicKey } from "@solana/web3.js";
     
     (async () => {
       const connection = new Connection("https://api.mainnet-beta.solana.com");
    @@ -540,7 +544,7 @@
       metaplex.use(keypairIdentity(keypair));
     
       const owner = new PublicKey("2R4bHmSBHkHAskerTHE6GE1Fxbn31kaD5gHqpsPySVd7");
    -  const allNFTs = await metaplex.nfts().findAllByOwner(owner);
    +  const allNFTs = await metaplex.nfts().findAllByOwner({ owner });
     
       console.log(allNFTs);
     })();
    @@ -551,10 +555,10 @@
     metaplex.use(keypairIdentity(keypair));
     
     const owner = new PublicKey("2R4bHmSBHkHAskerTHE6GE1Fxbn31kaD5gHqpsPySVd7");
    -const allNFTs = await metaplex.nfts().findAllByOwner(owner);
    +const allNFTs = await metaplex.nfts().findAllByOwner({ owner });
     
     console.log(allNFTs);
     
    - + diff --git a/docs/.vuepress/dist/fr/references/offline-transactions.html b/docs/.vuepress/dist/fr/references/offline-transactions.html index 05d5cc074..b8d38c32d 100644 --- a/docs/.vuepress/dist/fr/references/offline-transactions.html +++ b/docs/.vuepress/dist/fr/references/offline-transactions.html @@ -23,7 +23,7 @@ } Envoi de transactions hors connexion | Solana Cookbook - + @@ -457,6 +457,6 @@ console.log(`txhash: ${await connection.sendRawTransaction(tx.serialize())}`); - + diff --git a/docs/.vuepress/dist/fr/references/programs.html b/docs/.vuepress/dist/fr/references/programs.html index 06f225a9e..6c235d851 100644 --- a/docs/.vuepress/dist/fr/references/programs.html +++ b/docs/.vuepress/dist/fr/references/programs.html @@ -23,7 +23,7 @@ } Écrire des Programmes | Solana Cookbook - + @@ -1496,6 +1496,6 @@ } - + diff --git a/docs/.vuepress/dist/fr/references/staking.html b/docs/.vuepress/dist/fr/references/staking.html index 1e99c6ac9..6a92f5859 100644 --- a/docs/.vuepress/dist/fr/references/staking.html +++ b/docs/.vuepress/dist/fr/references/staking.html @@ -23,7 +23,7 @@ } Staking | Solana Cookbook - + @@ -641,6 +641,6 @@ stakeBalance = await connection.getBalance(stakeAccount.publicKey); console.log(`Stake account balance: ${stakeBalance / LAMPORTS_PER_SOL} SOL`); - + diff --git a/docs/.vuepress/dist/fr/references/token.html b/docs/.vuepress/dist/fr/references/token.html index 540aab08c..11f091238 100644 --- a/docs/.vuepress/dist/fr/references/token.html +++ b/docs/.vuepress/dist/fr/references/token.html @@ -23,7 +23,7 @@ } Interaction avec les Jetons | Solana Cookbook - + @@ -1273,6 +1273,6 @@ mint: mint, }); - + diff --git a/docs/.vuepress/dist/getting-started/installation.html b/docs/.vuepress/dist/getting-started/installation.html index 24f11bf39..27b030ee9 100644 --- a/docs/.vuepress/dist/getting-started/installation.html +++ b/docs/.vuepress/dist/getting-started/installation.html @@ -23,11 +23,11 @@ } Installation | Solana Cookbook - + -

    Install Web3.js

    There are a few libraries that you can use to get started with javascript or typescript on Solana.

    Web3.js

    @solana/web3.jsopen in new window is a library that has a lot of the basic Solana tools to interact, send transactions, and read from the blockchain.

    You can install with the following:

    yarn add @solana/web3.js
    +    

    Install Web3.js

    There are a few libraries that you can use to get started with javascript or typescript on Solana.

    Web3.js

    @solana/web3.jsopen in new window is a library that has a lot of the basic Solana tools to interact, send transactions, and read from the blockchain.

    You can install with the following:

    yarn add @solana/web3.js
     
    npm install --save @solana/web3.js
     
    <!-- Development (un-minified) -->
     <script src="https://unpkg.com/@solana/web3.js@latest/lib/index.iife.js"></script>
    @@ -71,6 +71,6 @@
     export PATH=$PWD/bin:$PATH
     

    You can then run the following command to obtain the same result as with prebuilt binaries:

    solana-install init
     
    Last Updated:
    - + diff --git a/docs/.vuepress/dist/guides/account-maps.html b/docs/.vuepress/dist/guides/account-maps.html index dbcd4ea00..99abc5267 100644 --- a/docs/.vuepress/dist/guides/account-maps.html +++ b/docs/.vuepress/dist/guides/account-maps.html @@ -23,11 +23,11 @@ } Account Maps | Solana Cookbook - + -

    Account Maps

    Maps are data structures we frequently use in programming to associate a key with a value of some kind. The key and value could be any arbitrary type and the key acts as an identifier for a given value that is being saved. It then, given its key, allows us to efficiently insert, retrieve and update these values efficiently.

    Solana's Account model, as we know, requires program data and its relevant state data to be stored in different accounts. These accounts have an address associated with them. This, in itself, acts as a map! Learn more about Solana's Account mode hereopen in new window.

    So, it would make sense to store your values in separate accounts, with its address being the key required to retrieve the value. But this brings up a few issues, such as,

    • The addresses mentioned above are most probably not going to be ideal keys, which you could remember and retrieve the required value.

    • The addresses mentioned above, referred to public keys of different Keypairs, where each public key (or address) would have a private key associated with it as well. This private key would be required to sign different instructions if and when needed, requiring us to store the private key somewhere, which is most definitely not recommended!

    This presents a problem many Solana developers face, which is implementing a Map-like logic into their programs. Let's look at a couple of way how we would go about this problem,

    Deriving PDAs

    PDA stands for Program Derived Addressopen in new window, and are in short, addresses derived from a set of seeds, and a program id (or address).

    The unique thing about PDAs is that, these addresses are not associated with any private key. This is because these addresses do not lie on the ED25519 curve. Hence, only the program, from which this address was derived, can sign an instruction with the key, provided the seeds as well. Learn more about this hereopen in new window.

    Now that we have an idea about what PDAs are, let's use them to map some accounts! We'll take an example of a Blog program to demonstrate how this would be implemented.

    In this Blog program, we would like each User to have a single Blog. This blog could have any number of Posts. That would mean that we are mapping each user to a blog, and each post is mapped to a certain blog.

    In short, there is a 1:1 mapping between a user and his/her blog, whereas a 1:N mapping between a blog and its posts.

    For the 1:1 mapping, we would want a blog's address to be derived only from its user, which would allow us to retrieve a blog, given its authority (or user). Hence, the seeds for a blog would consist of its authority's key, and possibly a prefix of "blog", to act as a type identifier.

    For the 1:N mapping, we would want each post's address to be derived not only from the blog which it is associated with, but also another identifier, allowing us to differentiate between the N number of posts in the blog. In the example below, each post's address is derived from the blog's key, a slug to identify each post, and a prefix of "post", to act as a type identifier.

    The code is as shown below,

    Press </> button to view full source
    use anchor_lang::prelude::*;
    +    

    Account Maps

    Maps are data structures we frequently use in programming to associate a key with a value of some kind. The key and value could be any arbitrary type and the key acts as an identifier for a given value that is being saved. It then, given its key, allows us to efficiently insert, retrieve and update these values efficiently.

    Solana's Account model, as we know, requires program data and its relevant state data to be stored in different accounts. These accounts have an address associated with them. This, in itself, acts as a map! Learn more about Solana's Account mode hereopen in new window.

    So, it would make sense to store your values in separate accounts, with its address being the key required to retrieve the value. But this brings up a few issues, such as,

    • The addresses mentioned above are most probably not going to be ideal keys, which you could remember and retrieve the required value.

    • The addresses mentioned above, referred to public keys of different Keypairs, where each public key (or address) would have a private key associated with it as well. This private key would be required to sign different instructions if and when needed, requiring us to store the private key somewhere, which is most definitely not recommended!

    This presents a problem many Solana developers face, which is implementing a Map-like logic into their programs. Let's look at a couple of way how we would go about this problem,

    Deriving PDAs

    PDA stands for Program Derived Addressopen in new window, and are in short, addresses derived from a set of seeds, and a program id (or address).

    The unique thing about PDAs is that, these addresses are not associated with any private key. This is because these addresses do not lie on the ED25519 curve. Hence, only the program, from which this address was derived, can sign an instruction with the key, provided the seeds as well. Learn more about this hereopen in new window.

    Now that we have an idea about what PDAs are, let's use them to map some accounts! We'll take an example of a Blog program to demonstrate how this would be implemented.

    In this Blog program, we would like each User to have a single Blog. This blog could have any number of Posts. That would mean that we are mapping each user to a blog, and each post is mapped to a certain blog.

    In short, there is a 1:1 mapping between a user and his/her blog, whereas a 1:N mapping between a blog and its posts.

    For the 1:1 mapping, we would want a blog's address to be derived only from its user, which would allow us to retrieve a blog, given its authority (or user). Hence, the seeds for a blog would consist of its authority's key, and possibly a prefix of "blog", to act as a type identifier.

    For the 1:N mapping, we would want each post's address to be derived not only from the blog which it is associated with, but also another identifier, allowing us to differentiate between the N number of posts in the blog. In the example below, each post's address is derived from the blog's key, a slug to identify each post, and a prefix of "post", to act as a type identifier.

    The code is as shown below,

    Press </> button to view full source
    use anchor_lang::prelude::*;
     
     declare_id!("2vD2HBhLnkcYcKxnxLjFYXokHdcsgJnyEXGnSpAX376e");
     
    @@ -1136,6 +1136,6 @@
     tx.add(insertBCIx);
     tx.add(insertCAIx);
     
    Last Updated:
    - + diff --git a/docs/.vuepress/dist/guides/data-migration.html b/docs/.vuepress/dist/guides/data-migration.html index fa92cee7b..8b9b62bb3 100644 --- a/docs/.vuepress/dist/guides/data-migration.html +++ b/docs/.vuepress/dist/guides/data-migration.html @@ -23,11 +23,11 @@ } Migrating Program Data Accounts | Solana Cookbook - + -

    Migrating a Programs Data Accounts

    How can you migrate a program's data accounts?

    When you create a program, each data account associated with that program will have a specific data structure. If you ever need to upgrade a program derived account, you end up having a bunch of leftover program derived accounts with the old structure.

    With account versioning, you can upgrade your old accounts to the new structure.

    Note

    This is only one of many ways to migrate data in Program Owned Accounts (POA).

    Scenario

    To version and migrate our account data, we will be providing an id for each account. This id will allow us to identify the account version when we pass it to the program, and thus handle the account correctly.

    Take the following account state and program:

    Program Account v1
    Press </> button to view full source
    //! @brief account_state manages account data
    +    

    Migrating a Programs Data Accounts

    How can you migrate a program's data accounts?

    When you create a program, each data account associated with that program will have a specific data structure. If you ever need to upgrade a program derived account, you end up having a bunch of leftover program derived accounts with the old structure.

    With account versioning, you can upgrade your old accounts to the new structure.

    Note

    This is only one of many ways to migrate data in Program Owned Accounts (POA).

    Scenario

    To version and migrate our account data, we will be providing an id for each account. This id will allow us to identify the account version when we pass it to the program, and thus handle the account correctly.

    Take the following account state and program:

    Program Account v1
    Press </> button to view full source
    //! @brief account_state manages account data
     
     use arrayref::{array_ref, array_refs};
     use borsh::{BorshDeserialize, BorshSerialize};
    @@ -676,6 +676,6 @@
         }
     }
     

    After building and submitting an instruction: VersionProgramInstruction::SetString(String) we now have the following 'upgraded' account data layout

    Program Account v2

    Resources

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/guides/debugging-solana-programs.html b/docs/.vuepress/dist/guides/debugging-solana-programs.html index 4d58650f2..9328a2ed2 100644 --- a/docs/.vuepress/dist/guides/debugging-solana-programs.html +++ b/docs/.vuepress/dist/guides/debugging-solana-programs.html @@ -23,11 +23,11 @@ } Debugging Solana Programs | Solana Cookbook - + -

    Debugging Solana Programs

    There are a number of options and supporting tools for testing and debugging a Solana program.

    Facts

    Fact Sheet

    • The crate solana-program-test enables use of bare bones local runtime where you can test and debug your program interactively (e.g. in vscode).
    • The crate solana-validator enables use of the solana-test-validator implementation for more robust testing that occurs on a local validator node. You can run from the editor but breakpoints in the program are ignored.
    • The CLI tool solana-test-validator runs and loads your program and processes transaction execution from command line Rust applications or Javascript/Typescript applications using web3.
    • For all the above, liberal use of msg! macro in your program is recommended at the start and then removing them as you test and ensure rock solid behavior. Remember that msg! consumes Compute Units which can eventually fail your program by hitting the Compute Unit budget caps.

    The steps in the following sections use the solana-program-bpf-template. Clone that to your machine:

    git clone git@github.com:mvines/solana-bpf-program-template.git
    +    

    Debugging Solana Programs

    There are a number of options and supporting tools for testing and debugging a Solana program.

    Facts

    Fact Sheet

    • The crate solana-program-test enables use of bare bones local runtime where you can test and debug your program interactively (e.g. in vscode).
    • The crate solana-validator enables use of the solana-test-validator implementation for more robust testing that occurs on a local validator node. You can run from the editor but breakpoints in the program are ignored.
    • The CLI tool solana-test-validator runs and loads your program and processes transaction execution from command line Rust applications or Javascript/Typescript applications using web3.
    • For all the above, liberal use of msg! macro in your program is recommended at the start and then removing them as you test and ensure rock solid behavior. Remember that msg! consumes Compute Units which can eventually fail your program by hitting the Compute Unit budget caps.

    The steps in the following sections use the solana-program-bpf-template. Clone that to your machine:

    git clone git@github.com:mvines/solana-bpf-program-template.git
     cd solana-bpf-program-template
     code .
     

    Runtime Testing and Debugging in editor

    Open the file src/lib.rs

    You'll see that the program is a pretty simple and basically just logs the content received by the program entrypoint function: process_instruction

    1. Go to the #[cfg(test)] section and click Run Tests. This will build the program and then execute the async fn test_transaction() test. You will see the log messages (simplified) in the vscode terminal below the source.
    running 1 test
    @@ -48,6 +48,6 @@
     test test_validator_transaction ... ok
     test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 6.40s
     

    Debugging here will allow you to debug the functions and methods used in the test body but will not breakpoint in your program.

    The bee's knees eh?

    Local Validator Node Testing from Client Apps

    Lastly, you can start a local validating node and load your program and any accounts using the solana-test-validator from the command line.

    In this approach, you will need a client application either using Rust RcpClient or in JavaScript or Typescript clients

    See solana-test-validator --help for more details and options. For the example program here is vanilla setup:

    1. Open a terminal in the repo folder
    2. Run solana config set -ul to set the configuration to point to local
    3. Run solana-test-validator --bpf-program target/deploy/bpf_program_template-keypair.json target/deploy/bpf_program_template.so
    4. Open another terminal and run solana logs to start the log streamer
    5. You can then run your client program and observe program output in the terminal where you started the log streamer

    Now that is the cat's pajamas YO!

    Resources

    solana-program-bpf-templateopen in new window

    RcpClientopen in new window

    JavaScript/Typescript Libraryopen in new window

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/guides/feature-parity-testing.html b/docs/.vuepress/dist/guides/feature-parity-testing.html index bc0c5a282..1e0c28d3e 100644 --- a/docs/.vuepress/dist/guides/feature-parity-testing.html +++ b/docs/.vuepress/dist/guides/feature-parity-testing.html @@ -23,11 +23,11 @@ } Feature Parity Testing | Solana Cookbook - + -

    Feature Parity Testing

    When testing your program, assurances that it will run the same in various clusters is essential to both quality and producing expected outcomes.

    Facts

    Fact Sheet

    • Features are capabilities that are introduced to Solana validators and require activation to be used.
    • Features may be activated in one cluster (e.g. testnet) but not so in another (e.g. mainnet-beta).
    • However; when running default solana-test-validator locally, all available features in your Solana version are automagically activated. The result is that when testing locally, the capabilities and results of your testing may not be the same when deploying and running in a different cluster!

    Scenario

    Assume you have a Transaction that contained three (3) instructions and each instruction consumes approximately 100_000 Compute Units (CU). When running in a Solana 1.8.x version, you would observe your instruction CU consumption similar to:

    InstructionStarting CUExecutionRemaining CU
    1200_000-100_000100_000
    2200_000-100_000100_000
    3200_000-100_000100_000

    In Solana 1.9.2 a feature called 'transaction wide compute cap' was introduced where a Transaction, by default, has a 200_000 CU budget and the encapsulated instructions draw down from that Transaction budget. Running the same transaction as noted above would have very different behavior:

    InstructionStarting CUExecutionRemaining CU
    1200_000-100_000100_000
    2100_000-100_0000
    30FAIL!!!FAIL!!!

    Yikes! If you were unaware of this you'd likely be frustrated as there was no change to your instruction behavior that would cause this. In devnet it worked fine, but locally it was failing?!?

    There is the ability to increase the overall Transaction budget, to lets say 300_000 CU, and salvage your sanity but this demonstrates why testing with Feature Parity provides a proactive way to avoid any confusion.

    Feature Status

    It is fairly easy to check what features are enabled for a particular cluster with the solana feature status command.

    solana feature status -ud   // Displays by feature status for devnet
    +    

    Feature Parity Testing

    When testing your program, assurances that it will run the same in various clusters is essential to both quality and producing expected outcomes.

    Facts

    Fact Sheet

    • Features are capabilities that are introduced to Solana validators and require activation to be used.
    • Features may be activated in one cluster (e.g. testnet) but not so in another (e.g. mainnet-beta).
    • However; when running default solana-test-validator locally, all available features in your Solana version are automagically activated. The result is that when testing locally, the capabilities and results of your testing may not be the same when deploying and running in a different cluster!

    Scenario

    Assume you have a Transaction that contained three (3) instructions and each instruction consumes approximately 100_000 Compute Units (CU). When running in a Solana 1.8.x version, you would observe your instruction CU consumption similar to:

    InstructionStarting CUExecutionRemaining CU
    1200_000-100_000100_000
    2200_000-100_000100_000
    3200_000-100_000100_000

    In Solana 1.9.2 a feature called 'transaction wide compute cap' was introduced where a Transaction, by default, has a 200_000 CU budget and the encapsulated instructions draw down from that Transaction budget. Running the same transaction as noted above would have very different behavior:

    InstructionStarting CUExecutionRemaining CU
    1200_000-100_000100_000
    2100_000-100_0000
    30FAIL!!!FAIL!!!

    Yikes! If you were unaware of this you'd likely be frustrated as there was no change to your instruction behavior that would cause this. In devnet it worked fine, but locally it was failing?!?

    There is the ability to increase the overall Transaction budget, to lets say 300_000 CU, and salvage your sanity but this demonstrates why testing with Feature Parity provides a proactive way to avoid any confusion.

    Feature Status

    It is fairly easy to check what features are enabled for a particular cluster with the solana feature status command.

    solana feature status -ud   // Displays by feature status for devnet
     solana feature status -ut   // Displays for testnet
     solana feature status -um   // Displays for mainnet-beta
     solana feature status -ul   // Displays for local, requires running solana-test-validator
    @@ -302,6 +302,6 @@
         assert!(txn.is_ok());
     }
     

    Happy Testing!

    Resources

    scfsdopen in new window

    gadget-scfsopen in new window

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/guides/get-program-accounts.html b/docs/.vuepress/dist/guides/get-program-accounts.html index 47279846b..19c26569d 100644 --- a/docs/.vuepress/dist/guides/get-program-accounts.html +++ b/docs/.vuepress/dist/guides/get-program-accounts.html @@ -23,11 +23,11 @@ } Get Program Accounts | Solana Cookbook - + -

    Get Program Accounts

    An RPC method that returns all accounts owned by a program. Currently pagination is not supported. Requests to getProgramAccounts should include the dataSlice and/or filters parameters to improve response time and return only intended results.

    Facts

    Parameters

    • programId: string - Pubkey of the program to query, provided as a base58 encoded string
    • (optional) configOrCommitment: object - Configuration parameters containing the following optional fields:
      • (optional) commitment: string - State commitmentopen in new window
      • (optional) encoding: string - Encoding for account data, either: base58, base64, or jsonParsed. Note, web3js users should instead use getParsedProgramAccountsopen in new window
      • (optional) dataSlice: object - Limit the returned account data based on:
        • offset: number - Number of bytes into account data to begin returning
        • length: number - Number of bytes of account data to return
      • (optional) filters: array - Filter results using the following filter objects:
        • memcmp: object - Match a series of bytes to account data:
          • offset: number - Number of bytes into account data to begin comparing
          • bytes: string - Data to match, as base58 encoded string limited to 129 bytes
        • dataSize: number - Compares the account data length with the provided data size
      • (optional) withContext: boolean - Wrap the result in an RpcResponse JSON objectopen in new window
    Response

    By default getProgramAccounts will return an array of JSON objects with the following structure:

    • pubkey: string - The account pubkey as a base58 encoded string
    • account: object - a JSON object, with the following sub fields:
      • lamports: number, number of lamports assigned to the account
      • owner: string, The base58 encoded pubkey of the program the account has been assigned to
      • data: string | object - data associated with the account, either as encoded binary data or JSON format depending on the provided encoding parameter
      • executable: boolean, Indication if the account contains a program
      • rentEpoch: number, The epoch at which this account will next owe rent

    Deep Dive

    getProgramAccounts is a versatile RPC method that returns all accounts owned by a program. We can use getProgramAccounts for a number of useful queries, such as finding:

    Despite its usefulness, getProgramAccounts is often misunderstood due to its current constraints. Many of the queries supported by getProgramAccounts require RPC nodes to scan large sets of data. These scans are both memory and resource intensive. As a result, calls that are too frequent or too large in scope can result in connection timeouts. Furthermore, at the time of this writing, the getProgramAccounts endpoint does not support pagination. If the results of a query are too large, the response will be truncated.

    To get around these current constraints, getProgramAccounts offers a number of useful parameters: namely, dataSlice and the filters options memcmp and dataSize. By providing combinations of these parameters, we can reduce the scope of our queries down to manageable and predictable sizes.

    A common example of getProgramAccounts involves interacting with the SPL-Token Programopen in new window. Requesting all accounts owned by the Token Program with a basic call would involve an enormous amount of data. By providing parameters, however, we can efficiently request just the data we intend to use.

    filters

    The most common parameter to use with getProgramAccounts is the filters array. This array accepts two types of filters,dataSize and memcmp. Before using either of these filters, we should be familiar with how the data we are requesting is laid out and serialized.

    dataSize

    In the case of the Token Program, we can see that token accounts are 165 bytes in lengthopen in new window. Specifically, a token account has eight different fields, with each field requiring a predictable number of bytes. We can visualize how this data is laid out using the below illustration.

    Account Size

    If we wanted to find all token accounts owned by our wallet address, we could add { dataSize: 165 } to our filters array to narrow the scope of our query to just accounts that are exactly 165 bytes in length. This alone, however, would be insufficient. We would also need to add a filter that looks for accounts owned by our address. We can achieve this with the memcmp filter.

    memcmp

    The memcmp filter, or "memory comparison" filter, allows us to compare data at any field stored on our account. Specifically, we can query only for accounts that match a particular set of bytes at a particular position. memcmp requires two arguments:

    • offset: The position at which to begin comparing data. This position is measured in bytes and is expressed as an integer.
    • bytes: The data that should match the account's data. This is represented as a base-58 encoded string should be limited to less than 129 bytes.

    It's important to note that memcmp will only return results that are an exact match on bytes. Currently, it does not support comparisons for values that are less than or greater than the bytes we provide.

    In keeping with our Token Program example, we can amend our query to only return token accounts that are owned by our wallet address. When looking at a token account, we can see the first two fields stored on a token account are both pubkeys, and that each pubkey is 32 bytes in length. Given that owner is the second field, we should begin our memcmp at an offset of 32 bytes. From here, we’ll be looking for accounts whose owner field matches our wallet address.

    Account Size

    We can invoke this query via the following example:

    import { TOKEN_PROGRAM_ID } from "@solana/spl-token";
    +    

    Get Program Accounts

    An RPC method that returns all accounts owned by a program. Currently pagination is not supported. Requests to getProgramAccounts should include the dataSlice and/or filters parameters to improve response time and return only intended results.

    Facts

    Parameters

    • programId: string - Pubkey of the program to query, provided as a base58 encoded string
    • (optional) configOrCommitment: object - Configuration parameters containing the following optional fields:
      • (optional) commitment: string - State commitmentopen in new window
      • (optional) encoding: string - Encoding for account data, either: base58, base64, or jsonParsed. Note, web3js users should instead use getParsedProgramAccountsopen in new window
      • (optional) dataSlice: object - Limit the returned account data based on:
        • offset: number - Number of bytes into account data to begin returning
        • length: number - Number of bytes of account data to return
      • (optional) filters: array - Filter results using the following filter objects:
        • memcmp: object - Match a series of bytes to account data:
          • offset: number - Number of bytes into account data to begin comparing
          • bytes: string - Data to match, as base58 encoded string limited to 129 bytes
        • dataSize: number - Compares the account data length with the provided data size
      • (optional) withContext: boolean - Wrap the result in an RpcResponse JSON objectopen in new window
    Response

    By default getProgramAccounts will return an array of JSON objects with the following structure:

    • pubkey: string - The account pubkey as a base58 encoded string
    • account: object - a JSON object, with the following sub fields:
      • lamports: number, number of lamports assigned to the account
      • owner: string, The base58 encoded pubkey of the program the account has been assigned to
      • data: string | object - data associated with the account, either as encoded binary data or JSON format depending on the provided encoding parameter
      • executable: boolean, Indication if the account contains a program
      • rentEpoch: number, The epoch at which this account will next owe rent

    Deep Dive

    getProgramAccounts is a versatile RPC method that returns all accounts owned by a program. We can use getProgramAccounts for a number of useful queries, such as finding:

    Despite its usefulness, getProgramAccounts is often misunderstood due to its current constraints. Many of the queries supported by getProgramAccounts require RPC nodes to scan large sets of data. These scans are both memory and resource intensive. As a result, calls that are too frequent or too large in scope can result in connection timeouts. Furthermore, at the time of this writing, the getProgramAccounts endpoint does not support pagination. If the results of a query are too large, the response will be truncated.

    To get around these current constraints, getProgramAccounts offers a number of useful parameters: namely, dataSlice and the filters options memcmp and dataSize. By providing combinations of these parameters, we can reduce the scope of our queries down to manageable and predictable sizes.

    A common example of getProgramAccounts involves interacting with the SPL-Token Programopen in new window. Requesting all accounts owned by the Token Program with a basic call would involve an enormous amount of data. By providing parameters, however, we can efficiently request just the data we intend to use.

    filters

    The most common parameter to use with getProgramAccounts is the filters array. This array accepts two types of filters,dataSize and memcmp. Before using either of these filters, we should be familiar with how the data we are requesting is laid out and serialized.

    dataSize

    In the case of the Token Program, we can see that token accounts are 165 bytes in lengthopen in new window. Specifically, a token account has eight different fields, with each field requiring a predictable number of bytes. We can visualize how this data is laid out using the below illustration.

    Account Size

    If we wanted to find all token accounts owned by our wallet address, we could add { dataSize: 165 } to our filters array to narrow the scope of our query to just accounts that are exactly 165 bytes in length. This alone, however, would be insufficient. We would also need to add a filter that looks for accounts owned by our address. We can achieve this with the memcmp filter.

    memcmp

    The memcmp filter, or "memory comparison" filter, allows us to compare data at any field stored on our account. Specifically, we can query only for accounts that match a particular set of bytes at a particular position. memcmp requires two arguments:

    • offset: The position at which to begin comparing data. This position is measured in bytes and is expressed as an integer.
    • bytes: The data that should match the account's data. This is represented as a base-58 encoded string should be limited to less than 129 bytes.

    It's important to note that memcmp will only return results that are an exact match on bytes. Currently, it does not support comparisons for values that are less than or greater than the bytes we provide.

    In keeping with our Token Program example, we can amend our query to only return token accounts that are owned by our wallet address. When looking at a token account, we can see the first two fields stored on a token account are both pubkeys, and that each pubkey is 32 bytes in length. Given that owner is the second field, we should begin our memcmp at an offset of 32 bytes. From here, we’ll be looking for accounts whose owner field matches our wallet address.

    Account Size

    We can invoke this query via the following example:

    import { TOKEN_PROGRAM_ID } from "@solana/spl-token";
     import { clusterApiUrl, Connection } from "@solana/web3.js";
     
     (async () => {
    @@ -444,6 +444,6 @@
     #   "id": 1
     # }
     

    By combining all three parameters (dataSlice, dataSize, and memcmp) we can limit the scope of our query and efficiently return only the data we’re interested in.

    Other Resources

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/guides/retrying-transactions.html b/docs/.vuepress/dist/guides/retrying-transactions.html index bb43e892b..df5b1a1f9 100644 --- a/docs/.vuepress/dist/guides/retrying-transactions.html +++ b/docs/.vuepress/dist/guides/retrying-transactions.html @@ -23,11 +23,11 @@ } Retrying Transactions | Solana Cookbook - + -

    Retrying Transactions

    On some occasions, a seemingly valid transaction may be dropped before it is included in a block. This most often occurs during periods of network congestion, when an RPC node fails to rebroadcast the transaction to the leaderopen in new window. To an end-user, it may appear as if their transaction disappears entirely. While RPC nodes are equipped with a generic rebroadcasting algorithm, application developers are also capable of developing their own custom rebroadcasting logic.

    Facts

    Fact Sheet

    • RPC nodes will attempt to rebroadcast transactions using a generic algorithm
    • Application developers can implement their own custom rebroadcasting logic
    • Developers should take advantage of the maxRetries parameter on the sendTransaction JSON-RPC method
    • Developers should enable preflight checks to raise errors before transactions are submitted
    • Before re-signing any transaction, it is very important to ensure that the initial transaction’s blockhash has expired

    The Journey of a Transaction

    How Clients Submit Transactions

    In Solana, there is no concept of a mempool. All transactions, whether they are initiated programmatically or by an end-user, are efficiently routed to leaders so that they can be processed into a block. There are two main ways in which a transaction can be sent to leaders:

    1. By proxy via an RPC server and the sendTransactionopen in new window JSON-RPC method
    2. Directly to leaders via a TPU Clientopen in new window

    The vast majority of end-users will submit transactions via an RPC server. When a client submits a transaction, the receiving RPC node will in turn attempt to broadcast the transaction to both the current and next leaders. Until the transaction is processed by a leader, there is no record of the transaction outside of what the client and the relaying RPC nodes are aware of. In the case of a TPU client, rebroadcast and leader forwarding is handled entirely by the client software.

    Transaction Journey

    How RPC Nodes Broadcast Transactions

    After an RPC node receives a transaction via sendTransaction, it will convert the transaction into a UDPopen in new window packet before forwarding it to the relevant leaders. UDP allows validators to quickly communicate with one another, but does not provide any guarantees regarding transaction delivery.

    Because Solana’s leader schedule is known in advance of every epochopen in new window (~2 days), an RPC node will broadcast its transaction directly to the current and next leaders. This is in contrast to other gossip protocols such as Ethereum that propagate transactions randomly and broadly across the entire network. By default, RPC nodes will try to forward transactions to leaders every two seconds until either the transaction is finalized or the transaction’s blockhash expires (150 blocks or ~1 minute 19 seconds as of the time of this writing). If the outstanding rebroadcast queue size is greater than 10,000 transactionsopen in new window, newly submitted transactions are dropped. There are command-line argumentsopen in new window that RPC operators can adjust to change the default behavior of this retry logic.

    When an RPC node broadcasts a transaction, it will attempt to forward the transaction to a leader’s Transaction Processing Unit (TPU)open in new window. The TPU processes transactions in five distinct phases:

    TPU OverviewImage Courtesy of Jito Labs

    Of these five phases, the Fetch Stage is responsible for receiving transactions. Within the Fetch Stage, validators will categorize incoming transactions according to three ports:

    For more information on the TPU, please refer to this excellent writeup by Jito Labsopen in new window.

    How Transactions Get Dropped

    Throughout a transaction’s journey, there are a few scenarios in which the transaction can be unintentionally dropped from the network.

    Before a transaction is processed

    If the network drops a transaction, it will most likely do so before the transaction is processed by a leader. UDP packet lossopen in new window is the simplest reason why this might occur. During times of intense network load, it’s also possible for validators to become overwhelmed by the sheer number of transactions required for processing. While validators are equipped to forward surplus transactions via tpu_forwards, there is a limit to the amount of data that can be forwardedopen in new window. Furthermore, each forward is limited to a single hop between validators. That is, transactions received on the tpu_forwards port are not forwarded on to other validators.

    There are also two lesser known reasons why a transaction may be dropped before it is processed. The first scenario involves transactions that are submitted via an RPC pool. Occasionally, part of the RPC pool can be sufficiently ahead of the rest of the pool. This can cause issues when nodes within the pool are required to work together. In this example, the transaction’s recentBlockhashopen in new window is queried from the advanced part of the pool (Backend A). When the transaction is submitted to the lagging part of the pool (Backend B), the nodes will not recognize the advanced blockhash and will drop the transaction. This can be detected upon transaction submission if developers enable preflight checksopen in new window on sendTransaction.

    Dropped via RPC Pool

    Temporarily network forks can also result in dropped transactions. If a validator is slow to replay its blocks within the Banking Stage, it may end up creating a minority fork. When a client builds a transaction, it’s possible for the transaction to reference a recentBlockhash that only exists on the minority fork. After the transaction is submitted, the cluster can then switch away from its minority fork before the transaction is processed. In this scenario, the transaction is dropped due to the blockhash not being found.

    Dropped due to Minority Fork (Before Processed)

    After a transaction is processed and before it is finalized

    In the event a transaction references a recentBlockhash from a minority fork, it’s still possible for the transaction to be processed. In this case, however, it would be processed by the leader on the minority fork. When this leader attempts to share its processed transactions with the rest of the network, it would fail to reach consensus with the majority of validators that do not recognize the minority fork. At this time, the transaction would be dropped before it could be finalized.

    Dropped due to Minority Fork (After Processed)

    Handling Dropped Transactions

    While RPC nodes will attempt to rebroadcast transactions, the algorithm they employ is generic and often ill-suited for the needs of specific applications. To prepare for times of network congestion, application developers should customize their own rebroadcasting logic.

    An In-Depth Look at sendTransaction

    When it comes to submitting transactions, the sendTransaction RPC method is the primary tool available to developers. sendTransaction is only responsible for relaying a transaction from a client to an RPC node. If the node receives the transaction, sendTransaction will return the transaction id that can be used to track the transaction. A successful response does not indicate whether the transaction will be processed or finalized by the cluster.

    TIP

    Request Parameters

    • transaction: string - fully-signed Transaction, as encoded string
    • (optional) configuration object: object
      • skipPreflight: boolean - if true, skip the preflight transaction checks (default: false)
      • (optional) preflightCommitment: string - Commitmentopen in new window level to use for preflight simulations against the bank slot (default: "finalized").
      • (optional) encoding: string - Encoding used for the transaction data. Either "base58" (slow), or "base64". (default: "base58").
      • (optional) maxRetries: usize - Maximum number of times for the RPC node to retry sending the transaction to the leader. If this parameter is not provided, the RPC node will retry the transaction until it is finalized or until the blockhash expires.

    Response

    • transaction id: string - First transaction signature embedded in the transaction, as base-58 encoded string. This transaction id can be used with getSignatureStatusesopen in new window to poll for status updates.

    Customizing Rebroadcast Logic

    In order to develop their own rebroadcasting logic, developers should take advantage of sendTransaction’s maxRetries parameter. If provided, maxRetries will override an RPC node’s default retry logic, allowing developers to manually control the retry process within reasonable boundsopen in new window.

    A common pattern for manually retrying transactions involves temporarily storing the lastValidBlockHeight that comes from getLatestBlockhashopen in new window. Once stashed, an application can then poll the cluster’s blockheightopen in new window and manually retry the transaction at an appropriate interval. In times of network congestion, it’s advantageous to set maxRetries to 0 and manually rebroadcast via a custom algorithm. While some applications may employ an exponential backoffopen in new window algorithm, others such as Mangoopen in new window opt to continuously resubmitopen in new window transactions at a constant interval until some timeout has occurred.

    Press </> button to view full source
    import {
    +    

    Retrying Transactions

    On some occasions, a seemingly valid transaction may be dropped before it is included in a block. This most often occurs during periods of network congestion, when an RPC node fails to rebroadcast the transaction to the leaderopen in new window. To an end-user, it may appear as if their transaction disappears entirely. While RPC nodes are equipped with a generic rebroadcasting algorithm, application developers are also capable of developing their own custom rebroadcasting logic.

    Facts

    Fact Sheet

    • RPC nodes will attempt to rebroadcast transactions using a generic algorithm
    • Application developers can implement their own custom rebroadcasting logic
    • Developers should take advantage of the maxRetries parameter on the sendTransaction JSON-RPC method
    • Developers should enable preflight checks to raise errors before transactions are submitted
    • Before re-signing any transaction, it is very important to ensure that the initial transaction’s blockhash has expired

    The Journey of a Transaction

    How Clients Submit Transactions

    In Solana, there is no concept of a mempool. All transactions, whether they are initiated programmatically or by an end-user, are efficiently routed to leaders so that they can be processed into a block. There are two main ways in which a transaction can be sent to leaders:

    1. By proxy via an RPC server and the sendTransactionopen in new window JSON-RPC method
    2. Directly to leaders via a TPU Clientopen in new window

    The vast majority of end-users will submit transactions via an RPC server. When a client submits a transaction, the receiving RPC node will in turn attempt to broadcast the transaction to both the current and next leaders. Until the transaction is processed by a leader, there is no record of the transaction outside of what the client and the relaying RPC nodes are aware of. In the case of a TPU client, rebroadcast and leader forwarding is handled entirely by the client software.

    Transaction Journey

    How RPC Nodes Broadcast Transactions

    After an RPC node receives a transaction via sendTransaction, it will convert the transaction into a UDPopen in new window packet before forwarding it to the relevant leaders. UDP allows validators to quickly communicate with one another, but does not provide any guarantees regarding transaction delivery.

    Because Solana’s leader schedule is known in advance of every epochopen in new window (~2 days), an RPC node will broadcast its transaction directly to the current and next leaders. This is in contrast to other gossip protocols such as Ethereum that propagate transactions randomly and broadly across the entire network. By default, RPC nodes will try to forward transactions to leaders every two seconds until either the transaction is finalized or the transaction’s blockhash expires (150 blocks or ~1 minute 19 seconds as of the time of this writing). If the outstanding rebroadcast queue size is greater than 10,000 transactionsopen in new window, newly submitted transactions are dropped. There are command-line argumentsopen in new window that RPC operators can adjust to change the default behavior of this retry logic.

    When an RPC node broadcasts a transaction, it will attempt to forward the transaction to a leader’s Transaction Processing Unit (TPU)open in new window. The TPU processes transactions in five distinct phases:

    TPU OverviewImage Courtesy of Jito Labs

    Of these five phases, the Fetch Stage is responsible for receiving transactions. Within the Fetch Stage, validators will categorize incoming transactions according to three ports:

    For more information on the TPU, please refer to this excellent writeup by Jito Labsopen in new window.

    How Transactions Get Dropped

    Throughout a transaction’s journey, there are a few scenarios in which the transaction can be unintentionally dropped from the network.

    Before a transaction is processed

    If the network drops a transaction, it will most likely do so before the transaction is processed by a leader. UDP packet lossopen in new window is the simplest reason why this might occur. During times of intense network load, it’s also possible for validators to become overwhelmed by the sheer number of transactions required for processing. While validators are equipped to forward surplus transactions via tpu_forwards, there is a limit to the amount of data that can be forwardedopen in new window. Furthermore, each forward is limited to a single hop between validators. That is, transactions received on the tpu_forwards port are not forwarded on to other validators.

    There are also two lesser known reasons why a transaction may be dropped before it is processed. The first scenario involves transactions that are submitted via an RPC pool. Occasionally, part of the RPC pool can be sufficiently ahead of the rest of the pool. This can cause issues when nodes within the pool are required to work together. In this example, the transaction’s recentBlockhashopen in new window is queried from the advanced part of the pool (Backend A). When the transaction is submitted to the lagging part of the pool (Backend B), the nodes will not recognize the advanced blockhash and will drop the transaction. This can be detected upon transaction submission if developers enable preflight checksopen in new window on sendTransaction.

    Dropped via RPC Pool

    Temporarily network forks can also result in dropped transactions. If a validator is slow to replay its blocks within the Banking Stage, it may end up creating a minority fork. When a client builds a transaction, it’s possible for the transaction to reference a recentBlockhash that only exists on the minority fork. After the transaction is submitted, the cluster can then switch away from its minority fork before the transaction is processed. In this scenario, the transaction is dropped due to the blockhash not being found.

    Dropped due to Minority Fork (Before Processed)

    After a transaction is processed and before it is finalized

    In the event a transaction references a recentBlockhash from a minority fork, it’s still possible for the transaction to be processed. In this case, however, it would be processed by the leader on the minority fork. When this leader attempts to share its processed transactions with the rest of the network, it would fail to reach consensus with the majority of validators that do not recognize the minority fork. At this time, the transaction would be dropped before it could be finalized.

    Dropped due to Minority Fork (After Processed)

    Handling Dropped Transactions

    While RPC nodes will attempt to rebroadcast transactions, the algorithm they employ is generic and often ill-suited for the needs of specific applications. To prepare for times of network congestion, application developers should customize their own rebroadcasting logic.

    An In-Depth Look at sendTransaction

    When it comes to submitting transactions, the sendTransaction RPC method is the primary tool available to developers. sendTransaction is only responsible for relaying a transaction from a client to an RPC node. If the node receives the transaction, sendTransaction will return the transaction id that can be used to track the transaction. A successful response does not indicate whether the transaction will be processed or finalized by the cluster.

    TIP

    Request Parameters

    • transaction: string - fully-signed Transaction, as encoded string
    • (optional) configuration object: object
      • skipPreflight: boolean - if true, skip the preflight transaction checks (default: false)
      • (optional) preflightCommitment: string - Commitmentopen in new window level to use for preflight simulations against the bank slot (default: "finalized").
      • (optional) encoding: string - Encoding used for the transaction data. Either "base58" (slow), or "base64". (default: "base58").
      • (optional) maxRetries: usize - Maximum number of times for the RPC node to retry sending the transaction to the leader. If this parameter is not provided, the RPC node will retry the transaction until it is finalized or until the blockhash expires.

    Response

    • transaction id: string - First transaction signature embedded in the transaction, as base-58 encoded string. This transaction id can be used with getSignatureStatusesopen in new window to poll for status updates.

    Customizing Rebroadcast Logic

    In order to develop their own rebroadcasting logic, developers should take advantage of sendTransaction’s maxRetries parameter. If provided, maxRetries will override an RPC node’s default retry logic, allowing developers to manually control the retry process within reasonable boundsopen in new window.

    A common pattern for manually retrying transactions involves temporarily storing the lastValidBlockHeight that comes from getLatestBlockhashopen in new window. Once stashed, an application can then poll the cluster’s blockheightopen in new window and manually retry the transaction at an appropriate interval. In times of network congestion, it’s advantageous to set maxRetries to 0 and manually rebroadcast via a custom algorithm. While some applications may employ an exponential backoffopen in new window algorithm, others such as Mangoopen in new window opt to continuously resubmitopen in new window transactions at a constant interval until some timeout has occurred.

    Press </> button to view full source
    import {
       Keypair,
       Connection,
       LAMPORTS_PER_SOL,
    @@ -89,6 +89,6 @@
       blockheight = await connection.getBlockHeight();
     }
     

    When polling via getLatestBlockhash, applications should specify their intended commitmentopen in new window level. By setting its commitment to confirmed (voted on) or finalized (~30 blocks after confirmed), an application can avoid polling a blockhash from a minority fork.

    If an application has access to RPC nodes behind a load balancer, it can also choose to divide its workload amongst specific nodes. RPC nodes that serve data-intensive requests such as getProgramAccounts may be prone to falling behind and can be ill-suited for also forwarding transactions. For applications that handle time-sensitive transactions, it may be prudent to have dedicated nodes that only handle sendTransaction.

    The Cost of Skipping Preflight

    By default, sendTransaction will perform three preflight checks prior to submitting a transaction. Specifically, sendTransaction will:

    • Verify that all signatures are valid
    • Check that the referenced blockhash is within the last 150 blocks
    • Simulate the transaction against the bank slot specified by the preflightCommitment

    In the event that any of these three preflight checks fail, sendTransaction will raise an error prior to submitting the transaction. Preflight checks can often be the difference between losing a transaction and allowing a client to gracefully handle an error. To ensure that these common errors are accounted for, it is recommended that developers keep skipPreflight set to false.

    When to Re-Sign Transactions

    Despite all attempts to rebroadcast, there may be times in which a client is required to re-sign a transaction. Before re-signing any transaction, it is very important to ensure that the initial transaction’s blockhash has expired. If the initial blockhash is still valid, it is possible for both transactions to be accepted by the network. To an end-user, this would appear as if they unintentionally sent the same transaction twice.

    In Solana, a dropped transaction can be safely discarded once the blockhash it references is older than the lastValidBlockHeight received from getLatestBlockhash. Developers should keep track of this lastValidBlockHeight by querying getEpochInfoopen in new window and comparing with blockHeight in the response. Once a blockhash is invalidated, clients may re-sign with a newly-queried blockhash.

    Acknowledgements

    Many thanks to Trent Nelson, Jacob Creechopen in new window, White Tiger, Le Yafo, Buffaluopen in new window, and Jito Labsopen in new window for their review and feedback.

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/guides/serialization.html b/docs/.vuepress/dist/guides/serialization.html index d3779680c..8db39654c 100644 --- a/docs/.vuepress/dist/guides/serialization.html +++ b/docs/.vuepress/dist/guides/serialization.html @@ -23,11 +23,11 @@ } Serializing Data | Solana Cookbook - + -

    Serializing Data

    When we talk about serialization we mean both serializing data as well as deserialization of data.

    Serialization comes into play at a few points along Solana program and program accounts lifecycle:

    1. Serializing instruction data on to client
    2. Deserializing instruction data on the program
    3. Serializing Account data on the program
    4. Deserializing Account Data on the client

    It is important that the above actions are all supported by the same serialization approach. The included snippets are demonstrating serialization using Borsh.

    The samples in the remainder of this document are excerpts as taken from the Solana CLI Program Template

    Setting up for Borsh Serialization

    Libraries for Borsh must be setup for the Rust program, Rust client, Node and/or Python client.

    [package]
    +    

    Serializing Data

    When we talk about serialization we mean both serializing data as well as deserialization of data.

    Serialization comes into play at a few points along Solana program and program accounts lifecycle:

    1. Serializing instruction data on to client
    2. Deserializing instruction data on the program
    3. Serializing Account data on the program
    4. Deserializing Account Data on the client

    It is important that the above actions are all supported by the same serialization approach. The included snippets are demonstrating serialization using Borsh.

    The samples in the remainder of this document are excerpts as taken from the Solana CLI Program Template

    Setting up for Borsh Serialization

    Libraries for Borsh must be setup for the Rust program, Rust client, Node and/or Python client.

    [package]
     name = "solana-cli-template-program-bpf"
     version = "0.1.0"
     edition = "2018"
    @@ -253,10 +253,11 @@
     }
     
    from borsh_construct import String, CStruct, U8
     from enum import IntEnum
    -from solana.rpc.types import RPCResponse
    -from solana.transaction import Transaction, TransactionInstruction, AccountMeta
    -from solana.publickey import PublicKey
    -from solana.keypair import Keypair
    +from solana.transaction import Transaction
    +from solders.pubkey import Pubkey
    +from solders.keypair import Keypair
    +from solders.instruction import Instruction, AccountMeta
    +from solders.rpc.responses import SendTransactionResp
     from solana.rpc.api import Client
     
     
    @@ -279,12 +280,12 @@
     
     def mint_kv(
         client: Client,
    -    program_pk: PublicKey,
    -    account_pk: PublicKey,
    +    program_pk: Pubkey,
    +    account_pk: Pubkey,
         wallet_kp: Keypair,
         mint_key: str,
         mint_value: str,
    -) -> RPCResponse:
    +) -> SendTransactionResp:
         """Mint with a key/value pair to an account"""
         # Construct the program payload for Mint invariant
         payload_ser = construct_payload(InstructionVariant.MINT, mint_key, mint_value)
    @@ -300,13 +301,13 @@
     
         # Construct the transaction with instructionVariant
         txn = Transaction().add(
    -        TransactionInstruction(
    -            [AccountMeta(account_pk, False, True)], program_pk, payload_ser
    +        Instruction(
    +            accounts=[AccountMeta(account_pk, False, True)], program_id=program_pk, data=payload_ser
             )
         )
         return client.send_transaction(txn, wallet_kp)
         # => {'jsonrpc': '2.0', 'result': '4ZdpWNdovdVaLextWSiqEBWp67k9rNTTUaX3qviHDXWY9c98bVtaRt5sasPhYzMVXHqhex78gzNKytcBnVH5CSTZ', 'id': 2}
    -
    
    +
    
     /// Instruction payload gets serialized
     #[derive(BorshSerialize)]
     pub struct Payload<'a> {
    @@ -632,10 +633,9 @@
       let nameAccount = await connection.getAccountInfo(account, "processed");
       return deserializeUnchecked(dataSchema, AccoundData, nameAccount.data);
     }
    -
    import base64
    -from borsh_construct import CStruct, U8, U32, HashMap, String
    +
    from borsh_construct import CStruct, U8, U32, HashMap, String
     from solana.rpc.commitment import Confirmed
    -from solana.publickey import PublicKey
    +from solders.pubkey import Pubkey
     from solana.rpc.api import Client
     
     
    @@ -647,14 +647,10 @@
     )
     
     
    -def get_account_info(client: Client, account_pk: PublicKey):
    +def get_account_info(client: Client, account_pk: Pubkey):
         """Fetch account information from RPC, parse out the data and deserialize"""
         res = client.get_account_info(account_pk, Confirmed, encoding='base64')
    -    data = res['result']
    -    if isinstance(data, dict):
    -        return account_schema.parse(base64.urlsafe_b64decode(data['value']['data'][0]))
    -    else:
    -        raise AttributeError(f'Unknown RPC result {data}')
    +    return account_schema.parse(res.value.data)
     
     # Results in or similar
     # => Container:
    @@ -662,7 +658,7 @@
     # =>     map_length = 109
     # =>     map = {'Happy': 'New Year!', 'newKey': 'A new value',
     # =>            'python key': 'python value', 'ts key': 'ts first value'}
    -
    use {
    +
    use {
         arrayref::*,
         borsh::{BorshDeserialize, BorshSerialize},
         std::{collections::BTreeMap, error::Error},
    @@ -766,8 +762,7 @@
     }
     
     entry();
    -
    import base64
    -from borsh_construct import U8, U16, U32, String, HashMap
    +
    from borsh_construct import U8, U16, U32, String, HashMap
     
     # Schema to deserialize various types
     primitive_schema = CStruct(
    @@ -811,7 +806,7 @@
         # =>        4
         # =>        5
         # =>    MAP_STRING_STRING = {'cookbook': 'recipe', 'recipe': 'ingredient'}
    -
    fn main() {}
    +
    fn main() {}
     
     #[cfg(test)]
     mod tests {
    @@ -1021,6 +1016,6 @@
         }
     }
     

    Resources

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/guides/versioned-transactions.html b/docs/.vuepress/dist/guides/versioned-transactions.html index a8768bc9b..5361c1ea2 100644 --- a/docs/.vuepress/dist/guides/versioned-transactions.html +++ b/docs/.vuepress/dist/guides/versioned-transactions.html @@ -23,11 +23,11 @@ } Versioned Transactions | Solana Cookbook - + -

    Versioned Transactions

    Solana recently released Versioned Transactions. The proposed changes are as follows:

    1. Introduce a new program which manages on-chain address lookup tables

    2. Add a new transaction format which can make use of on-chain address lookup tables

    Facts

    Fact Sheet

    • Legacy transactions have a major issue: Maximum allowed size of 1232 bytes, and hence the number of accounts that can fit in an atomic transaction: 35 addresses.
    • Address Lookup Tables (LUTs): Once accounts are stored in this table, the address of the table can be referenced in a transaction message using 1-byte u8 indices.
    • solana/web3.js's createLookupTable() can be used to construct a new lookup table, as well as determine its address.
    • Once an LUT is created, it can be extended, ie., accounts can be appended to the table.
    • Versioned Transactions: The structure of legacy transaction needs to be modified to incorporate LUTs
    • Before versioning was introduced, txs left an unused upper bit in the first byte of their headers, which can be used to explicitly declare the version of txs

    We'll talk more about the above introduced changes and what they mean for developers. To understand the changes better, however, we need to first understand the anatomy of a regular (or legacy) transaction.

    Legacy Transaction

    The Solana network uses a maximum transactional unit (MTU) size of 1280 bytes, adherent to the IPv6 MTUopen in new window size constraints to ensure speed and reliability. This leaves 1232 bytes for packet data like serialised transactions.

    A transaction is comprised of:

    1. A compact array of signatures, where each signature is a 64 byte ed25519open in new window.
    2. A (legacy) message

    Transaction Format

    Compact-Array format

    A compact array is an array serialised to have the following components:

    1. An array length in a multi-byte encoding called Compact-u16open in new window
    2. Followed by each array item

    Compact array format

    Legacy Message

    A Legacy Message has the following components:

    1. A header
    2. A compact-array of account addresses, where each account address takes 32 bytes
    3. A recent blockhash
    • a 32-byte SHA-256 hash used to indicate when ledger was last observed. If a blockhash is too old, validators reject it.
    1. A compact-array of Instructions

    Legacy Message

    The message header is 3 bytes in length and contains 3 u8 integers:

    1. The number of required signatures: the Solana runtime verifies this number with the length of the compact array of signatures in the transaction.
    2. The number of read-only account addresses that require signatures.
    3. The number of read-only account addresses that do not require signatures.

    Message Header

    Compact-array of account addresses

    This compact array starts with a compact-u16 encoding of the number of account addresses, followed by:

    1. Account addresses that require signatures: The addresses that request read and write access are listed first, followed by the ones that request for read-only access
    2. Account addresses that do not require signatures: Same as above, the addresses that request read and write access are listed first, followed by the ones that request for read-only access

    Compact array of account addresses

    Compact array of instructions

    Much like the array of account addresses, this compact array starts with a compact-u16 encoding of the number of instructions, followed by an array of instructions. Each instruction in the array has the following components:

    1. Program ID: identifies an on-chain program that will process the instruction. This is represented as a u8 index to an address in the compact array of account addresses inside the message.
    2. Compact array of account address indexes: u8 indexes to a subset of account addresses in the compact array of account addresses, that require signatures.
    3. Compact array of opaque u8 data: a general purpose byte array that is specific to the program ID mentioned before. This array of data specifies any operations that the program should perform and any additional information that the accounts might not contain.

    Compact array of Instructions

    Issues with Legacy Transactions

    What is the issue with the above Transaction model?

    The max size of a transaction, and hence the number of accounts that can fit in a single atomic transaction.

    As discussed earlier, the maximum allowed size of a transaction is 1232 bytes. The size of an account address is 32 bytes. Thus, a transaction can at the very best store 35 accounts, taking into account some space for headers, signatures and other metadata.

    Issue with legacy transactions

    This is problematic as there are several cases where developers need to include 100s of signature-free accounts in a single transaction. This is currently not possible with the legacy transaction model. The solution currently being used is to temporarily store state on-chain and consume it later in transactions. This workaround does not work when multiple programs need to be composed in a single transaction. Each program requires multiple accounts as input and hence we fall into the same problem as before.

    This is where Address Lookup Tables (LUT) are introduced.

    Address Lookup Tables (LUT)

    The idea behind Address Lookup Tables is to store account addresses in a table-like (array) data structure on-chain. Once accounts are stored in this table, the address of the table can be referenced in a transaction message. To point to an individual account within the table, a 1-byte u8 index is needed.

    LUTs

    This opens up space as addresses need not be stored inside the transaction message anymore. They only need to be referenced in the form of an index within the array like table. This leads to a possibility of referencing 2^8=256 accounts, as accounts are referenced using a u8 index.

    LUTs need to be rent-exempt when initialised or whenever a new address is added to the table. Addresses can be added to this table either by an on-chain buffer, or by directly appending them to the table through the Extension instruction. Furthermore, LUTs can store associated metadata followed by a compact-array of accounts. Below you can see the structure of a typical Address Lookup Table.

    LUT Format

    One important pitfall of LUTs is that since address lookups require extra overhead during transaction processing, they usually incur higher costs for a transaction.

    Versioned Transactions: TransactionV0

    The structure of legacy transaction needs to be modified to incorporate address table lookups. These changes should not break transaction processing on Solana, nor should they indicate any format changes to the invoked programs.

    To ensure the above, it is important to explicitly mention the transaction type: legacy or versioned. How do we include this information in a transaction?

    Before versioning was introduced, transactions left an unused upper bit in the first byte of their message headers: num_required_signatures. We can now use this bit to explicitly declare the version of our transactions.

    pub enum VersionedMessage {
    +    

    Versioned Transactions

    Solana recently released Versioned Transactions. The proposed changes are as follows:

    1. Introduce a new program which manages on-chain address lookup tables

    2. Add a new transaction format which can make use of on-chain address lookup tables

    Facts

    Fact Sheet

    • Legacy transactions have a major issue: Maximum allowed size of 1232 bytes, and hence the number of accounts that can fit in an atomic transaction: 35 addresses.
    • Address Lookup Tables (LUTs): Once accounts are stored in this table, the address of the table can be referenced in a transaction message using 1-byte u8 indices.
    • solana/web3.js's createLookupTable() can be used to construct a new lookup table, as well as determine its address.
    • Once an LUT is created, it can be extended, ie., accounts can be appended to the table.
    • Versioned Transactions: The structure of legacy transaction needs to be modified to incorporate LUTs
    • Before versioning was introduced, txs left an unused upper bit in the first byte of their headers, which can be used to explicitly declare the version of txs

    We'll talk more about the above introduced changes and what they mean for developers. To understand the changes better, however, we need to first understand the anatomy of a regular (or legacy) transaction.

    Legacy Transaction

    The Solana network uses a maximum transactional unit (MTU) size of 1280 bytes, adherent to the IPv6 MTUopen in new window size constraints to ensure speed and reliability. This leaves 1232 bytes for packet data like serialised transactions.

    A transaction is comprised of:

    1. A compact array of signatures, where each signature is a 64 byte ed25519open in new window.
    2. A (legacy) message

    Transaction Format

    Compact-Array format

    A compact array is an array serialised to have the following components:

    1. An array length in a multi-byte encoding called Compact-u16open in new window
    2. Followed by each array item

    Compact array format

    Legacy Message

    A Legacy Message has the following components:

    1. A header
    2. A compact-array of account addresses, where each account address takes 32 bytes
    3. A recent blockhash
    • a 32-byte SHA-256 hash used to indicate when ledger was last observed. If a blockhash is too old, validators reject it.
    1. A compact-array of Instructions

    Legacy Message

    The message header is 3 bytes in length and contains 3 u8 integers:

    1. The number of required signatures: the Solana runtime verifies this number with the length of the compact array of signatures in the transaction.
    2. The number of read-only account addresses that require signatures.
    3. The number of read-only account addresses that do not require signatures.

    Message Header

    Compact-array of account addresses

    This compact array starts with a compact-u16 encoding of the number of account addresses, followed by:

    1. Account addresses that require signatures: The addresses that request read and write access are listed first, followed by the ones that request for read-only access
    2. Account addresses that do not require signatures: Same as above, the addresses that request read and write access are listed first, followed by the ones that request for read-only access

    Compact array of account addresses

    Compact array of instructions

    Much like the array of account addresses, this compact array starts with a compact-u16 encoding of the number of instructions, followed by an array of instructions. Each instruction in the array has the following components:

    1. Program ID: identifies an on-chain program that will process the instruction. This is represented as a u8 index to an address in the compact array of account addresses inside the message.
    2. Compact array of account address indexes: u8 indexes to a subset of account addresses in the compact array of account addresses, that require signatures.
    3. Compact array of opaque u8 data: a general purpose byte array that is specific to the program ID mentioned before. This array of data specifies any operations that the program should perform and any additional information that the accounts might not contain.

    Compact array of Instructions

    Issues with Legacy Transactions

    What is the issue with the above Transaction model?

    The max size of a transaction, and hence the number of accounts that can fit in a single atomic transaction.

    As discussed earlier, the maximum allowed size of a transaction is 1232 bytes. The size of an account address is 32 bytes. Thus, a transaction can at the very best store 35 accounts, taking into account some space for headers, signatures and other metadata.

    Issue with legacy transactions

    This is problematic as there are several cases where developers need to include 100s of signature-free accounts in a single transaction. This is currently not possible with the legacy transaction model. The solution currently being used is to temporarily store state on-chain and consume it later in transactions. This workaround does not work when multiple programs need to be composed in a single transaction. Each program requires multiple accounts as input and hence we fall into the same problem as before.

    This is where Address Lookup Tables (LUT) are introduced.

    Address Lookup Tables (LUT)

    The idea behind Address Lookup Tables is to store account addresses in a table-like (array) data structure on-chain. Once accounts are stored in this table, the address of the table can be referenced in a transaction message. To point to an individual account within the table, a 1-byte u8 index is needed.

    LUTs

    This opens up space as addresses need not be stored inside the transaction message anymore. They only need to be referenced in the form of an index within the array like table. This leads to a possibility of referencing 2^8=256 accounts, as accounts are referenced using a u8 index.

    LUTs need to be rent-exempt when initialised or whenever a new address is added to the table. Addresses can be added to this table either by an on-chain buffer, or by directly appending them to the table through the Extension instruction. Furthermore, LUTs can store associated metadata followed by a compact-array of accounts. Below you can see the structure of a typical Address Lookup Table.

    LUT Format

    One important pitfall of LUTs is that since address lookups require extra overhead during transaction processing, they usually incur higher costs for a transaction.

    Versioned Transactions: TransactionV0

    The structure of legacy transaction needs to be modified to incorporate address table lookups. These changes should not break transaction processing on Solana, nor should they indicate any format changes to the invoked programs.

    To ensure the above, it is important to explicitly mention the transaction type: legacy or versioned. How do we include this information in a transaction?

    Before versioning was introduced, transactions left an unused upper bit in the first byte of their message headers: num_required_signatures. We can now use this bit to explicitly declare the version of our transactions.

    pub enum VersionedMessage {
         Legacy(Message),
         V0(v0::Message),
     }
    @@ -55,6 +55,6 @@
       },
     );
     

    Other Resources

    References

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/id/core-concepts/accounts.html b/docs/.vuepress/dist/id/core-concepts/accounts.html index 3122f7366..1c9893f03 100644 --- a/docs/.vuepress/dist/id/core-concepts/accounts.html +++ b/docs/.vuepress/dist/id/core-concepts/accounts.html @@ -23,11 +23,11 @@ } Akun | Buku Panduan Solana - +

    Akun

    Akun-akun di dalam solana digunakan untuk menyimpan status. Akun-akun itu adalah blok yang sangat penting dalam pengembangan di Solana.

    Fakta-Fakta

    Fakta

    • Akun-akun digunakan untuk menyimpan data
    • Setiap akun memiliki alamat unik
    • Akun-akun memiliki ukuran maksimal yaitu 10MB (10 Mega Bytes)
    • Akun-akun PDA memiliki ukuran maksimal yaitu 10KB (10 Kilo Bytes)
    • Akun-akun PDA bisa digunakan untuk menandatangani atas nama program
    • Ukuran akun-akun sudah ditetapkan pada waktu pembuatan, tapi bisa dilakukan penyesuaian menggunakan reallocopen in new window
    • Penyimpanan data akun dibayarkan dengan sewa
    • Pemilik akun bawaan adalah Program Sistem

    Lebih Dalam

    Model Akun

    Ada 3 macam akun di Solana :

    • Data akun penyimpan data
    • Akun program menyimpan program yang dapat dieksekusi
    • Akun Bawaan (native) yang menunjukkan program bawaan di solana seperti Sistem, Stake, dan Vote

    Dalam data akun, ada 2 jenis yaitu:

    • Akun-akun yang dimiliki sistem
    • Akun PDA (Program Derived Address)

    Setiap akun memiliki sebuah alamat (biasanya disebut public key) dan seorang pemilik (alamat dari akun program). Daftar lengkap tipe apa saja yang disimpan oleh akun dapat ditemukan di bawah ini.

    TipeDeskripsi
    lamportsJumlah lamports yang dimiliki oleh akun ini
    ownerPemilik program akun ini
    executableApakah akun ini bisa untuk memproses intruksi
    dataArray byte data mentah yang disimpan oleh akun ini
    rent_epochDi epoch berikutnya, akun ini akan berutang sewa

    Berikut ini beberapa aturan penting kepemilikan :

    • Hanya pemilik data akun yang bisa mengubah datanya dan data lamports
    • Siapapun diizinkan untuk mengkreditkan lamports ke data akun
    • Pemilik akun dapat menetapkan pemilik baru jika data akun tidak ada

    Akun program tidak menyimpan status.

    Sebagai contoh, jika anda memiliki program penghitung yang memungkinkan anda menambah penghitung, anda harus membuat dua akun, satu akun untuk menyimpan kode program, dan satu untuk menyimpan konter.

    Untuk mencegah sebuah akun dihapus, anda harus membayar sewa.

    Menyewa

    Menyimpan data pada akun membutuhkan biaya berupa SOL untuk pemeliharaan, dan itu didanai oleh apa yang disebut dengan sewa. Jika anda menyediakan biaya pemeliharaan minimum yang setara untuk 2 tahun pembayaran sewa di akun, akun anda akan dibebaskan dari pembayaran sewa. Anda bisa mengambil sewa dengan menutup akun dan mengirimkan lamports kembali ke wallet anda.

    Sewa dibayarkan selama dua waktu yang berbeda:

    1. Ketika dirujuk oleh suatu transaksi
    2. Sekali dalam satu masa epoch

    Persentase sewa yang dikumpulkan oleh akun-akun akan dihancurkan, sementara sisanya didistribusikan untuk memilih akun di akhir setiap slot.

    Jika akun tidak punya saldo yang cukup untuk membayar seewa, akun akan dibatalkan alokasinya dan datanya akan dihapus.

    Sumber Lainnya

    Credit

    Konsep dasar ini dikreditkan ke Pencilflip. Follow him on Twitteropen in new window.

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/id/core-concepts/pdas.html b/docs/.vuepress/dist/id/core-concepts/pdas.html index 24c195c80..a436c2d01 100644 --- a/docs/.vuepress/dist/id/core-concepts/pdas.html +++ b/docs/.vuepress/dist/id/core-concepts/pdas.html @@ -23,11 +23,11 @@ } Program Derived Addresses (PDAs) | Buku Panduan Solana - +

    Program Derived Addresses (PDA)

    Program Derived Addresses (PDA) adalah tempat seperti rumah untuk akun-akun yang di desain untuk dikendalikan oleh suatu program tertentu. Dengan PDA, program bisa memverifikasi alamat tertentu secara terprogram tanpa membutuhkan private key. PDA berfungsi sebagai fondasi untuk Cross-Program Invocationopen in new window, yang memungkinkan aplikasi Solana dapat disusun satu sama lain.

    Fakta-Fakta

    Fakta

    • PDA adalah string 32 byte yang mirip seperti public key, namun tidak memiliki private key
    • findProgramAddress akan menurunkan sebuah PDA dari programld dan seeds (kumpulan byte) secara deterministik
    • Satu byte (bump) digunakan untuk mendorong sebuah potential PDA dari ed25519 elliptic curve
    • Program bisa memverifikasi PDA-nya dengan menyediakan seeds dan bump untuk invoke_signedopen in new window
    • Sebuah PDA hanya bisa diverifikasi oleh program asalnya
    • Selain untuk mengizinkan program diverifikasi dengan instruksi lain, PDA juga menyediakan antarmuka (interface) seperti hashmap untuk Mengindeks Akun

    Lebih Dalam

    PDA adalah bahan penting untuk mengembangkan program di Solana. Dengan PDA, program-program dapat memverifikasi akun sambil menjamin tidak ada pengguna dari luar yang bisa memverifikasi akun yang sama. Selain memverifikasi akun, program tertentu juga dapat memodifikasi akun dalam PDA masing-masing.

    Accounts matrix

    Image courtesy of Pencilflip

    Membuat PDA

    Untuk memahami konsep PDA, akan sangat membantu untuk memandang PDA sebagai sesuatu yang “ditemukan” dan bukan “diciptakan”. PDA dihasilkan dari kombinasi seeds (seperti string “vote_account”) dan sebuah program id. Kombinasi seeds ini kemudian dijalankan melalui sebuah fungsi sha256 hash untuk melihat bahwa mereka menghasilkan sebuah public key yang berdasarkan pada ed25519 elliptic curve atau tidak.

    Dalam menjalankan program id dan seeds dengan sebuah fungsi hash, ada 50% kemungkinan menghasilkan sebuah public key yang valid namun tidak tepat di kurva ekliptik. Dalam kasus ini, yang dapat dilakukan adalah menambahkan sesuatu (fudge) untuk mendorong input dan uji coba ulang. Istilah teknis dari fudge ini adalah bump. Dalam Solana, dimulai dengan bump = 255 dan secara perlahan turunkan nilainya bump = 254, bump = 253 dan seterusnya. Sampai kita mendapatkan alamat (address) yang tidak ada di elliptic curve. Cara ini memang belum sempurna, namun ketika membuahkan hasil, ini memberikan kita cara deterministik untuk menurunkan PDA yang sama berulang kali.

    PDA on the ellipitic curve

    Berinteraksi dengan PDAs

    Ketika sebuah PDA dihasilkan, findProgramAddress akan mengembalikan alamat dan juga bump yang digunakan untuk mengeluarkannya dari elliptic curve. Dilengkapi dengan bump ini, sebuah program dapat memverifikasi instruksi apapun yang dibutuhkan oleh PDA tersebut. Untuk memverifikasi, program harus meloloskan instruksi, sejumlah akun, dan seeds yang digunakan untuk menurunkan PDA ke invoke_signed. Selain memverifikasi instruksi, PDA juga harus memverifikasi hasilnya via invoke_signed.

    Ketika pembuatan dangan PDA, sangatlah umum untuk menyimpan bump seedopen in new window di data akun tersebut. Hal ini mengizinkan pada developer untuk memvalidasi sebuah PDA tanpa harus melewati bump sebagai argumen instruksi.

    Sumber lainnya

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/id/core-concepts/programs.html b/docs/.vuepress/dist/id/core-concepts/programs.html index 4c4ade605..997768ada 100644 --- a/docs/.vuepress/dist/id/core-concepts/programs.html +++ b/docs/.vuepress/dist/id/core-concepts/programs.html @@ -23,12 +23,12 @@ } Program | Buku Panduan Solana - +

    Program

    Setiap developer bisa menulis dan memasukan programnya ke Solana Blockchain. Program (diketahui sebagai smart contracts di protokol lain) berfungsi sebagai dasar untuk aktivitas on-chain, mendukung apa pun mulai dari DeFi dan NFT hingga ke Media Sosial dan Game.

    Fakta-Fakta

    Fakta

    • Program Memproses instruksi dari pengguna akhir dan program lain
    • Semua program adalah stateless / tidak memiliki status: semua data apa pun yang berinteraksi dengannya disimpan di Akun terpisah yang diteruskan melalui intruksi
    • Program itu sendiri disimpan dalam akun yang ditandai sebagai 'executable'
    • Semua program merupakan milik BPF Loaderopen in new window dan dieksekusi oleh Solana Runtimeopen in new window
    • Pengembang paling sering menulis program dalam bahasa Rust atau C++, tetapi bisa memilih bahasa lain yang menargetkan LLVMopen in new window's BPFopen in new window backend
    • Semua program memiliki satu titik masuk dimana pemrosessan instruksi berlangsung (i.e. process_instruction); parameternya selalu meliputi:
      • program_id: pubkey
      • accounts: array,
      • instruction_data: byte array

    Lebih Dalam

    Tidak seperti kebanyakan blockchain lainnya, Solana benar-benar memisahkan kode dari data. Semua data yang berinteraksi dengan program disimpan dalam akun terpisah dan diteruskan sebagai referensi via instruksi. Model ini memungkinkan satu program generik untuk beroperasi di berbagai akun tanpa memerlukan penerapan tambahan. Contoh umum dari pola ini terlihat di seluruh program bawaan (Native) dan Program SPL.

    Native Program & Solana Program Library (SPL)

    Solana dilengkapi dengan sejumlah program yang berfungsi sebagai blok bangunan inti untuk interaksi dalam on-chain. Program ini dibagi menjadi Native Programsopen in new window dan Solana Program Library (SPL) Programsopen in new window.

    Program bawaan (native) menyediakan fungsionalitas dasar yang yang diperlukan untuk mengoperasikan validator. Di antara program-program ini, yang paling terkenal adalah System Programopen in new window yang bertanggung jawab untuk mengelola akun baru dan mentransfer SOL antara dua belah pihak.

    Program SPL mendukung sejumlah aktivitas on-chain, termasuk membuat, menukar, dan meminjamkan token, serta membuat Stake Pools dan memelihara layanan nama (name service) sebuah on-chain. SPL Token Programopen in new window dapat dipanggil langsung melalui CLI, sementara yang lain seperti Associated Token Account Programopen in new window biasanya dibuat dengan program khusus.

    Program paling sering dikembangkan dengan bahasa Rust atau C++, tetapi bisa juga dikembangkan dengan berbagai bahasa yang menargetkan backend BPF LLVM. Inisiatif terbaru oleh Neon Labsopen in new window dan Solangopen in new window mengaktifkan EVMopen in new window kompatibilitas dan memungkinkan para pengembang untuk menulis program dalam Solidity.

    Sebagian besar program berbasis Rust mengikuti arsitektur berikut:

    FileDeskripsi
    lib.rsMendaftarkan modul
    entrypoint.rsTitik masuk ke program
    instruction.rsProgram API, deserialisasi data instruksi
    processor.rsLogika program
    state.rsObjek program, status deserialisasi
    error.rsKesalahan (error) khusus program

    Baru-baru ini, Anchoropen in new window telah muncul sebagai framework yang populer untuk mengembangkan program. Anchor adalah sebuah framework, mirip dengan Ruby on Rails, yang mengurangi boilerplate dan mempermudah proses deserialisasi untuk pengembangan berbasis Rust.

    Program pada umumnya dikembangkan dan diuji di localhost dan devnet sebelum di deploy ke testnet atau mainnet. Solana mendukung environment berikut:

    Kluster EnvironmentURL Koneksi RPC
    Mainnet-betahttps://api.mainnet-beta.solana.com
    Testnethttps://api.testnet.solana.com
    Devnethttps://api.devnet.solana.com
    Localhostport bawaan: 8899 (contoh http://localhost:8899, http://192.168.1.88:8899)

    Setelah di deploy ke environment, klien dapat berinteraksi dengan program on-chain melalui RPC connectionsopen in new window ke masing-masing kluster.

    Deploy Program

    Pengembang dapat men-deploy program mereka melalui CLIopen in new window:

    solana program deploy <PROGRAM_FILEPATH>
     

    Ketika program telah di deploy, program tersebut dikompilasi ke ELF shared objectopen in new window (berisi BPF bytecode) dan diunggah ke kluster Solana. Program berjalan di akun (seperti semua yang lain di Solana), kecuali akun-akun itu telah ditandai sebagai executable dan ditugaskan ke BPF loader. Alamat akun ini disebut sebagai program_id dan digunakan untuk merujuk program dalam semua transaksi.

    Solana mendukung beberapa BPF Loaders, dengan yang terbaru adalah Upgradable BPF Loaderopen in new window. BPF Loader bertanggung jawab untuk mengelola akun program dan membuatnya tersedia untuk klien melalui program_id. Semua program mempunyai satu titik masuk dimana semua pemrosesan instruksi berlangsung (i.e. process_instruction) dan parameternya selalu menyertakan :

    • program_id: pubkey
    • accounts: array,
    • instruction_data: byte array

    Setelah dipanggil, program akan dijalankan oleh Solana Runtime.

    Sumber Lainnya

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/id/core-concepts/transactions.html b/docs/.vuepress/dist/id/core-concepts/transactions.html index 1d926af41..341f8424f 100644 --- a/docs/.vuepress/dist/id/core-concepts/transactions.html +++ b/docs/.vuepress/dist/id/core-concepts/transactions.html @@ -23,11 +23,11 @@ } Transaksi | Buku Panduan Solana - +

    Transaksi

    Klien dapat menjalankan programs dengan mengirimkan sebuah transaksi ke cluster. Sebuah transaksi tunggal dapat berisikan berbagai macam instruksi terhadap masing-masing program. Ketika sebuah transaksi dikirimkan, Solana Runtimeopen in new window akan menjalankan setiap instruksi sesuai dengan urutan dan secara atomic. Jika ada instruksi yang gagal, maka keseluruhan transaksi akan gagal.

    Fakta-Fakta

    Fakta

    • Dalam Solana, instruksi adalah unit operasional yang paling dasar
    • Setiap instruksi mengandung:
      • program_id program yang ingin dijalankan
      • Kumpulan semua accounts yang ingin di baca atau di tulis
      • Sebuah instruction_data byte array yang spesifik terhadap suatu program tertentu
    • Beberapa instruksi dapat disatukan dalam sebuah transaksi
    • Setiap transaksi mengandung:
      • Kumpulan semua accounts yang ingin di baca atau di tulis
      • Satu atau lebih instructions
      • blockhash terkini
      • Satu atau lebih signatures
    • Instruksi secara berurutan dan bersifatatomic
    • Jika ada instruksi yang gagal, maka seluruh transaksi akan gagal.
    • Transaksi dibatasi sampai dengan 1232 bytes

    Lebih Dalam

    Solana Runtime membutuhkan instruksi dan transaksi untuk menentukan kumpulan akun yang akan dibaca dan ditulis. Dengan mempersiapkan akun terlebih dahulu, runtime dapat menjalankan eksekusinya terhadap semua transaksi bersamaan.

    Ketika sebutah transaksi dikirimkan ke cluster, runtime akan memproses setiap instruksi sesuai urutan dan atomic. Program yang menerima instruksi akan menginterpretasi kumpulan data dan menjalankannya di akun yang ditentukan. Program akan berhasil menjalankan instruksi atau gagal karena adanya error. Jika ada ditemukannya error, maka keseluruhan transaksi akan gagal.

    Setiap transaksi yang bertujuan untuk meng-debet suatu akun atau mengubah data, memerlukan verifikasi dari si pemilik akun. Setiap akun yang akan dimodifikasi akan ditandai dengan writable. Sebuah akun dapat dikreditkan tanpa persetujuan pemiliknya asalkan biaya transaksi dibayarkan menutupi biaya yang dibutuhkan untuk rent dan biaya transaksi itu sendiri.

    Sebelum pengiriman, semua transaksi harus mengacu kepada sebuah blockhash terbaruopen in new window. Blockhash digunakan untuk mencegah duplikasi dan menghapus transaksi gagal. Batas waktu sebuah blockhash transaksi adalah sekitar 1 menit 19 detik atau 150 blocks saat ini ditulis.

    Biaya

    Jaringan Solana mengambil dua jenis biaya:

    Di Solana, Biaya Transaksi itu determistik: tidak ada konsep dimana pengguna dapat membayar lebih demi meningkatkan kesempatan untuk dimasukkan ke block berikutnya. Pada waktu penulisan, biaya transaksi hanya ditentukan oleh jumlah verifikasi yang dibutuhkan (seperti lamports_per_signature), bukan dari jumlah sumber daya yang digunakan. Hal ini dikarenakan adanya batas maksimal 1232 bytes untuk semua transaksi.

    Semua transaksi membutuhkan setidaknya sebuah akun writable untuk memverifikasi transaksi. Ketika transaksi sudah dikirim, akun writable pemverifikasi yang di-serialisasi pertama harus membayar biaya transaksi. Akun ini akan membayar biaya dari transaksi tanpa mempedulikan transaksinya berhasil atau gagal. Jika pihak pembayar tidak memiliki saldo yang cukup, maka transaksi akan dihentikan.

    Pada waktu penulisan, 50% dari semua transaction fee dibayarkan kepada validator yang membuat block dan sisa setengahnya hangus. Struktur ini berguna untuk mendorong validator memproses transaksi sebanyak mungkin.

    Sumber lainnya

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/id/getting-started/installation.html b/docs/.vuepress/dist/id/getting-started/installation.html index f358d3f40..aba874092 100644 --- a/docs/.vuepress/dist/id/getting-started/installation.html +++ b/docs/.vuepress/dist/id/getting-started/installation.html @@ -23,7 +23,7 @@ } Instalasi | Buku Panduan Solana - + @@ -71,6 +71,6 @@ export PATH=$PWD/bin:$PATH

    Kemudian Anda bisa menjalankan perintah berikut untuk mendapatkan hasil yang sama seperti dengan binari bawaan:

    solana-install init
     
    Last Updated:
    - + diff --git a/docs/.vuepress/dist/id/guides/account-maps.html b/docs/.vuepress/dist/id/guides/account-maps.html index 60d0e8e20..647282f9d 100644 --- a/docs/.vuepress/dist/id/guides/account-maps.html +++ b/docs/.vuepress/dist/id/guides/account-maps.html @@ -23,7 +23,7 @@ } Peta Akun | Buku Panduan Solana - + @@ -1136,6 +1136,6 @@ tx.add(insertBCIx); tx.add(insertCAIx);
    Last Updated:
    - + diff --git a/docs/.vuepress/dist/id/guides/data-migration.html b/docs/.vuepress/dist/id/guides/data-migration.html index cb37c003a..7700a6cbe 100644 --- a/docs/.vuepress/dist/id/guides/data-migration.html +++ b/docs/.vuepress/dist/id/guides/data-migration.html @@ -23,7 +23,7 @@ } Migrasi Akun Data Program | Buku Panduan Solana - + @@ -676,6 +676,6 @@ } }

    Setelah membuat dan mengirimkan instruksi: VersionProgramInstruction::SetString(String) sekarang kita memiliki layout dari data akun yang telah di 'upgrade' berikut

    Program Account v2

    Resource

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/id/guides/debugging-solana-programs.html b/docs/.vuepress/dist/id/guides/debugging-solana-programs.html index ce7a9f512..ce87e4820 100644 --- a/docs/.vuepress/dist/id/guides/debugging-solana-programs.html +++ b/docs/.vuepress/dist/id/guides/debugging-solana-programs.html @@ -23,7 +23,7 @@ } Debug Program Solana | Buku Panduan Solana - + @@ -48,6 +48,6 @@ test test_validator_transaction ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 6.40s

    Debug di sini akan memungkinkan Anda untuk men-debug fungsi dan metode yang digunakan di test body tetapi tidak akan menyebabkan breakpoint dalam program Anda.

    Seperti Lutut lebah, ya?

    Uji Node Validator Lokal dari Aplikasi Klien

    Terakhir, Anda dapat memulai node validasi lokal dan memuat program Anda dan akun apa pun menggunakan solana-test-validator dari CLI.

    Dalam pendekatan ini, Anda akan memerlukan aplikasi klien baik menggunakan Rust RcpClient atau di Klien JavaScript atau TypeScript

    Lihat solana-test-validator --help untuk detail dan opsi lebih lanjut. Untuk contoh program di sini adalah pengaturan dasar:

    1. Buka terminal di folder repo
    2. Jalankan solana config set -ul untuk mengatur konfigurasi agar mengarah ke lokal
    3. Jalankan solana-test-validator --bpf-program target/deploy/bpf_program_template-keypair.json target/deploy/bpf_program_template.so
    4. Buka terminal lain dan jalankan solana logs untuk memulai streamer log
    5. Anda kemudian dapat menjalankan program klien Anda dan mengamati keluaran program di terminal tempat Anda memulai log streamer

    Nah itu seperti piyama kucing YO!

    Resources

    solana-program-bpf-templateopen in new window

    RcpClientopen in new window

    JavaScript/Typescript Libraryopen in new window

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/id/guides/feature-parity-testing.html b/docs/.vuepress/dist/id/guides/feature-parity-testing.html index 18d52f0af..c6da7d4a7 100644 --- a/docs/.vuepress/dist/id/guides/feature-parity-testing.html +++ b/docs/.vuepress/dist/id/guides/feature-parity-testing.html @@ -23,7 +23,7 @@ } Pengujian Paritas Fitur | Buku Panduan Solana - + @@ -302,6 +302,6 @@ assert!(txn.is_ok()); }

    Selamat menguji!

    Resources

    scfsdopen in new window

    gadget-scfsopen in new window

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/id/guides/get-program-accounts.html b/docs/.vuepress/dist/id/guides/get-program-accounts.html index 02b1dcf4b..4b30f5269 100644 --- a/docs/.vuepress/dist/id/guides/get-program-accounts.html +++ b/docs/.vuepress/dist/id/guides/get-program-accounts.html @@ -23,7 +23,7 @@ } Mendapatkan Akun Program | Buku Panduan Solana - + @@ -444,6 +444,6 @@ # "id": 1 # }

    Dengan menggabungkan ketiga parameter (dataSlice, dataSize, dan memcmp), kita dapat membatasi batasan query kita dan hanya mengambil data yang kita perlukan secara efisien.

    Resource lainnya

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/id/guides/retrying-transactions.html b/docs/.vuepress/dist/id/guides/retrying-transactions.html index 2105f3fa2..8db953fd7 100644 --- a/docs/.vuepress/dist/id/guides/retrying-transactions.html +++ b/docs/.vuepress/dist/id/guides/retrying-transactions.html @@ -23,7 +23,7 @@ } Mengulang Kembali transaksi | Buku Panduan Solana - + @@ -89,6 +89,6 @@ blockheight = await connection.getBlockHeight(); }

    Saat melakukan polling melalui getLatestBlockhash, aplikasi harus menentukan level commitmentopen in new window yang diinginkan. Dengan menetapkan commitmentnya ke confirmed (diberi suara) atau finalized (~30 blok setelah confirmed), aplikasi dapat menghindari polling blockhash dari cabang kecil/fork minoritas.

    Jika aplikasi memiliki akses ke node RPC di belakang load balancer, aplikasi juga dapat memilih untuk membagi beban kerjanya di antara node tertentu. Node RPC yang melayani permintaan data yang intensif seperti getProgramAccounts mungkin cenderung tertinggal dan tidak cocok untuk juga meneruskan transaksi. Untuk aplikasi yang menangani transaksi yang time-sensitive, mungkin lebih bijaksana untuk memiliki node khusus yang hanya menangani sendTransaction.

    Dampak apabila Melewatkan Preflight

    Secara default, sendTransaction akan melakukan tiga pemeriksaan preflight sebelum mengirimkan transaksi. Secara khusus, sendTransaction akan:

    • Verifikasi apabila semua tanda tangan valid
    • Periksa apakah blockhash yang direferensikan berada dalam 150 blok terakhir
    • Simulasikan transaksi terhadap slot bank yang ditentukan oleh preflightCommitment

    Jika salah satu dari tiga pemeriksaan preflight ini gagal, sendTransaction akan memunculkan error sebelum mengirimkan transaksi. Pemeriksaan preflight sering kali dapat menjadi perbedaan antara kehilangan transaksi dan memungkinkan klien menangani kesalahan dengan baik. Untuk memastikan bahwa kesalahan umum ini telah diperhitungkan, sebaiknya pengembang tetap mengatur skipPreflight ke false.

    Kapan Menandatangani Ulang (Re-Sign) Transaksi

    Terlepas dari semua upaya untuk rebroadcast, mungkin ada saat-saat di mana klien perlu menandatangani ulang (re-sign) transaksi. Sebelum menandatangani ulang transaksi apa pun, sangat penting untuk memastikan bahwa blockhash transaksi awal telah kedaluwarsa. Jika blockhash awal masih valid, ada kemungkinan kedua transaksi tersebut diterima oleh jaringan. Bagi end-user, ini akan tampak seolah-olah mereka secara tidak sengaja mengirim transaksi yang sama dua kali.

    Di Solana, transaksi yang dibatalkan dapat dibuang dengan aman setelah blockhash yang dirujuknya lebih lama dari lastValidBlockHeight yang diterima dari getLatestBlockhash. Pengembang harus melacak lastValidBlockHeight ini dengan menjalankan getEpochInfoopen in new window dan membandingkan dengan blockHeight dari respons yang diterima. Setelah blockhash tidak valid, klien dapat masuk kembali dengan blockhash yang baru dibuat.

    Ucapan Terima Kasih

    Terima kasih banyak kepada Trent Nelson, Jacob Creechopen in new window, White Tiger, Le Yafo, Buffaluopen in new window, dan Jito Labsopen in new window atas ulasan dan umpan balik mereka.

    - + diff --git a/docs/.vuepress/dist/id/guides/serialization.html b/docs/.vuepress/dist/id/guides/serialization.html index 7a905d341..0ae3c6a3e 100644 --- a/docs/.vuepress/dist/id/guides/serialization.html +++ b/docs/.vuepress/dist/id/guides/serialization.html @@ -23,7 +23,7 @@ } Serialisasi Data | Buku Panduan Solana - + @@ -253,10 +253,11 @@ }
    from borsh_construct import String, CStruct, U8
     from enum import IntEnum
    -from solana.rpc.types import RPCResponse
    -from solana.transaction import Transaction, TransactionInstruction, AccountMeta
    -from solana.publickey import PublicKey
    -from solana.keypair import Keypair
    +from solana.transaction import Transaction
    +from solders.pubkey import Pubkey
    +from solders.keypair import Keypair
    +from solders.instruction import Instruction, AccountMeta
    +from solders.rpc.responses import SendTransactionResp
     from solana.rpc.api import Client
     
     
    @@ -279,12 +280,12 @@
     
     def mint_kv(
         client: Client,
    -    program_pk: PublicKey,
    -    account_pk: PublicKey,
    +    program_pk: Pubkey,
    +    account_pk: Pubkey,
         wallet_kp: Keypair,
         mint_key: str,
         mint_value: str,
    -) -> RPCResponse:
    +) -> SendTransactionResp:
         """Mint with a key/value pair to an account"""
         # Construct the program payload for Mint invariant
         payload_ser = construct_payload(InstructionVariant.MINT, mint_key, mint_value)
    @@ -300,13 +301,13 @@
     
         # Construct the transaction with instructionVariant
         txn = Transaction().add(
    -        TransactionInstruction(
    -            [AccountMeta(account_pk, False, True)], program_pk, payload_ser
    +        Instruction(
    +            accounts=[AccountMeta(account_pk, False, True)], program_id=program_pk, data=payload_ser
             )
         )
         return client.send_transaction(txn, wallet_kp)
         # => {'jsonrpc': '2.0', 'result': '4ZdpWNdovdVaLextWSiqEBWp67k9rNTTUaX3qviHDXWY9c98bVtaRt5sasPhYzMVXHqhex78gzNKytcBnVH5CSTZ', 'id': 2}
    -
    
    +
    
     /// Instruction payload gets serialized
     #[derive(BorshSerialize)]
     pub struct Payload<'a> {
    @@ -632,10 +633,9 @@
       let nameAccount = await connection.getAccountInfo(account, "processed");
       return deserializeUnchecked(dataSchema, AccoundData, nameAccount.data);
     }
    -
    import base64
    -from borsh_construct import CStruct, U8, U32, HashMap, String
    +
    from borsh_construct import CStruct, U8, U32, HashMap, String
     from solana.rpc.commitment import Confirmed
    -from solana.publickey import PublicKey
    +from solders.pubkey import Pubkey
     from solana.rpc.api import Client
     
     
    @@ -647,14 +647,10 @@
     )
     
     
    -def get_account_info(client: Client, account_pk: PublicKey):
    +def get_account_info(client: Client, account_pk: Pubkey):
         """Fetch account information from RPC, parse out the data and deserialize"""
         res = client.get_account_info(account_pk, Confirmed, encoding='base64')
    -    data = res['result']
    -    if isinstance(data, dict):
    -        return account_schema.parse(base64.urlsafe_b64decode(data['value']['data'][0]))
    -    else:
    -        raise AttributeError(f'Unknown RPC result {data}')
    +    return account_schema.parse(res.value.data)
     
     # Results in or similar
     # => Container:
    @@ -662,7 +658,7 @@
     # =>     map_length = 109
     # =>     map = {'Happy': 'New Year!', 'newKey': 'A new value',
     # =>            'python key': 'python value', 'ts key': 'ts first value'}
    -
    use {
    +
    use {
         arrayref::*,
         borsh::{BorshDeserialize, BorshSerialize},
         std::{collections::BTreeMap, error::Error},
    @@ -766,8 +762,7 @@
     }
     
     entry();
    -
    import base64
    -from borsh_construct import U8, U16, U32, String, HashMap
    +
    from borsh_construct import U8, U16, U32, String, HashMap
     
     # Schema to deserialize various types
     primitive_schema = CStruct(
    @@ -811,7 +806,7 @@
         # =>        4
         # =>        5
         # =>    MAP_STRING_STRING = {'cookbook': 'recipe', 'recipe': 'ingredient'}
    -
    fn main() {}
    +
    fn main() {}
     
     #[cfg(test)]
     mod tests {
    @@ -1021,6 +1016,6 @@
         }
     }
     

    Resource

    - + diff --git a/docs/.vuepress/dist/id/index.html b/docs/.vuepress/dist/id/index.html index f83f19143..ac087ae26 100644 --- a/docs/.vuepress/dist/id/index.html +++ b/docs/.vuepress/dist/id/index.html @@ -23,11 +23,11 @@ } Buku Panduan Solana | Buku Panduan Solana - +

    Menggunakan buku panduan Solana

    Buku panduan Solana adalah sumber daya pengembang yang memberikan konsep penting dan referensi untuk membangun aplikasi di Solana. Setiap konsep dan referensi akan fokus kepada aspek spesifik pada bidang pengembangan Solana sekaligus memberikan detail-detail dan contoh cara penggunaannya.

    Cara untuk berkontribusi

    Buku panduan Solana dirancang dengan cara yang bertujuan untuk memudahkan pengembang solana yang baru untuk berkontribusi. Bahkan jika anda ingin tahu cara untuk melakukan sesuatu, berkontribusi pada buku panduan Solana adalah cara yang baik untuk belajar.

    Cek link berikut untuk lihat semua issue yang masih aktifhereopen in new window. Pedoman untuk berkontribusi hereopen in new window. Jika kamu menemukan saran yang tidak ada di buku panduan, tolong untuk menambahkan laporan isu terkait.

    Cara untuk membaca Buku Panduan

    Buku Panduan Solana dibagi menjadi beberapa bagian yang berbeda, masing-masing ditujukan untuk tujuan yang berbeda.

    SectionDescription
    Konsep UtamaMembangun blocks Solana yang bagus untuk diketahui untuk pengembangan
    PanduanPanduan detail tentang beragam tools yang berbeda untuk pengembangan
    ReferensiReferensi untuk cuplikan kode yang umum dibutuhkan untuk pengembangan
    Last Updated:
    - + diff --git a/docs/.vuepress/dist/id/integrations/index.html b/docs/.vuepress/dist/id/integrations/index.html index f5c5c1dfd..6de08fcf3 100644 --- a/docs/.vuepress/dist/id/integrations/index.html +++ b/docs/.vuepress/dist/id/integrations/index.html @@ -23,11 +23,11 @@ } Memulai | Buku Panduan Solana - +

    Memulai dengan Integrasi

    Buku Panduan Solana bagian Integrasi menyediakan contoh dan referensi untuk siapapun membangun aplikasi di atas protokol lain yang berjalan di Solana.

    Kekuatan Solana berasal dari kemampuan untuk berintegrasi dengan protokol lain, membangun di atas infrastruktur yang ada untuk membuat sesuatu yang lebih baik.

    Composability Adalah Kunci

    Membuat program Anda mudah digunakan dan diperluas akan menumbuhkan program Anda dan seluruh ekosistem Solana. Jangan mengulang kembali apa yang sudah ada dari awal, bangun di atas protokol yang ada dan bootstrap basis pengguna Anda.

    Beradaptasi dan bangun di atas program atau librari lain dan buka kemampuan baru untuk Solana.

    Kontribusi

    Jika Anda tertarik untuk berkontribusi pada integrasi, silakan periksa contribution guidelinesopen in new window.

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/id/integrations/jupiter.html b/docs/.vuepress/dist/id/integrations/jupiter.html index f9c634791..551073deb 100644 --- a/docs/.vuepress/dist/id/integrations/jupiter.html +++ b/docs/.vuepress/dist/id/integrations/jupiter.html @@ -23,7 +23,7 @@ } Jupiter | Buku Panduan Solana - + @@ -595,6 +595,6 @@ skipPreflight: false, });

    Sumber Lainnya

    - + diff --git a/docs/.vuepress/dist/id/integrations/mango.html b/docs/.vuepress/dist/id/integrations/mango.html index fceb255a6..bf26ac482 100644 --- a/docs/.vuepress/dist/id/integrations/mango.html +++ b/docs/.vuepress/dist/id/integrations/mango.html @@ -23,7 +23,7 @@ } Mango Markets | Buku Panduan Solana - + @@ -367,6 +367,6 @@ })();

    Sumber Lainnya

    - + diff --git a/docs/.vuepress/dist/id/integrations/pyth.html b/docs/.vuepress/dist/id/integrations/pyth.html index 94cb8557e..965eb170c 100644 --- a/docs/.vuepress/dist/id/integrations/pyth.html +++ b/docs/.vuepress/dist/id/integrations/pyth.html @@ -23,7 +23,7 @@ } Pyth | Buku Panduan Solana - + @@ -103,6 +103,6 @@ let pyth_price_data = &pyth_price_info.try_borrow_data()?; let price_account: Price = *load_price(pyth_price_data).unwrap();

    Sumber Lainnya

    - + diff --git a/docs/.vuepress/dist/id/integrations/react-native.html b/docs/.vuepress/dist/id/integrations/react-native.html index 4952f0f5a..046ed289d 100644 --- a/docs/.vuepress/dist/id/integrations/react-native.html +++ b/docs/.vuepress/dist/id/integrations/react-native.html @@ -23,7 +23,7 @@ } React Native | Buku Panduan Solana - + @@ -80,6 +80,6 @@ ERROR Invariant Violation: Module AppRegistry is not a registered callable module (calling runApplication). A frequent cause of the error is that the application entry file path is incorrect. This can also happen when the JS bundle is corrupt or there is an early initialization error when loading React Native.

    Ini adalah masalah yang dapat diperbaiki dengan menggunakan polyfill untuk objek URL di React Native.

    Instal paket react-native-url-polyfill dan impor dalam file utama aplikasi Anda (misalnya: index.js), seperti yang ditunjukkan di atas.

    Error: crypto.getRandomValues() not supported

    Error: crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported
     

    Ini adalah masalah yang dapat diperbaiki dengan menggunakan polyfill untuk objek crypto di React Native.

    Instal paket react-native-get-random-values dan impor dalam file utama aplikasi Anda (misalnya: index.js), seperti yang ditunjukkan.

    - + diff --git a/docs/.vuepress/dist/id/integrations/serum.html b/docs/.vuepress/dist/id/integrations/serum.html index 8d0f3d278..28bf83efa 100644 --- a/docs/.vuepress/dist/id/integrations/serum.html +++ b/docs/.vuepress/dist/id/integrations/serum.html @@ -23,7 +23,7 @@ } Serum | Buku Panduan Solana - + @@ -105,6 +105,6 @@ })(); - + diff --git a/docs/.vuepress/dist/id/integrations/strata.html b/docs/.vuepress/dist/id/integrations/strata.html index acd8203eb..7f3db5b11 100644 --- a/docs/.vuepress/dist/id/integrations/strata.html +++ b/docs/.vuepress/dist/id/integrations/strata.html @@ -23,7 +23,7 @@ } Strata | Buku Panduan Solana - + @@ -150,6 +150,6 @@ }, });

    Sumber Lainnya

    - + diff --git a/docs/.vuepress/dist/id/integrations/switchboard.html b/docs/.vuepress/dist/id/integrations/switchboard.html index f1af59c75..1cb3e1529 100644 --- a/docs/.vuepress/dist/id/integrations/switchboard.html +++ b/docs/.vuepress/dist/id/integrations/switchboard.html @@ -23,7 +23,7 @@ } Switchboard | Buku Panduan Solana - + @@ -169,8 +169,8 @@ use super::*; pub fn get_result(ctx: Context<GetResult>) -> Result<()> { - let aggregator = &ctx.accounts.aggregator_feed; - let val: f64 = AggregatorAccountData::new(aggregator)? + let aggregator = &ctx.accounts.aggregator_feed.load()?; + let val:f64 = aggregator .get_result()? .try_into()?; @@ -184,12 +184,12 @@ pub struct GetResult<'info> { pub authority: Signer<'info>, /// CHECK: field is unsafe - pub aggregator_feed: AccountInfo<'info>, // pass aggregator key + pub aggregator_feed: AccountLoader<'info, AggregatorAccountData>, // pass aggregator key } -

    Cara Membuat a Feeds Dari Publisher

    Dokumentasi Switchboard resmi memiliki panduan mendalam tentang cara membuat feeds dari penerbit. Cek lebih lanjut hereopen in new window.

    Oracles

    Fitur unik Switchboard adalah memungkinkan Anda membuat oracle Anda sendiri dan menjalankannya secara lokal.

    Create an oracle

    Press </> button to view full source
    import * as anchor from "@project-serum/anchor";
     import { Keypair } from "@solana/web3.js";
     import {
    @@ -536,6 +536,6 @@
         state_seeds,
     )?;
     

    Sumber

    API dan Librari

    Contoh

    Informasi Lebih Lanjut

    - + diff --git a/docs/.vuepress/dist/id/integrations/web3auth.html b/docs/.vuepress/dist/id/integrations/web3auth.html index cc61b80ca..638d09a08 100644 --- a/docs/.vuepress/dist/id/integrations/web3auth.html +++ b/docs/.vuepress/dist/id/integrations/web3auth.html @@ -23,7 +23,7 @@ } web3Auth (Torus Wallet) | Buku Panduan Solana - + @@ -113,6 +113,6 @@ })();

    Sumber

    - + diff --git a/docs/.vuepress/dist/id/references/accounts.html b/docs/.vuepress/dist/id/references/accounts.html index ccb14abe0..bff7c8765 100644 --- a/docs/.vuepress/dist/id/references/accounts.html +++ b/docs/.vuepress/dist/id/references/accounts.html @@ -23,7 +23,7 @@ } Akun | Buku Panduan Solana - + @@ -998,7 +998,7 @@ programId: programId, }) ); -

    Bagaimana Cara Mendapatkan Balance Akun

    Press </> button to view full source
    import {
    +

    Bagaimana Cara Mendapatkan Balance Akun

    Press </> button to view full source
    import {
       clusterApiUrl,
       Connection,
       PublicKey,
    @@ -1034,22 +1034,47 @@
         );
     }
     
    from solana.publickey import Keypair
    +
    from solders.keypair import Keypair
     from solana.rpc.api import Client
     
     client = Client("https://api.devnet.solana.com")
     
     key_pair = Keypair()
    -public_key = key_pair.public_key
    +public_key = key_pair.pubkey()
     
     print(client.get_balance(public_key))
     
    // clang++ get_balance.cpp -o get_balance -std=c++17 -lssl -lcrypto -lsodium
    +
    +#include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +  Connection connection("https://api.devnet.solana.com");
    +
    +  auto key_pair = Keypair::generate();
    +
    +  auto public_key = key_pair.public_key;
    +  std::cout << "public_key = " << public_key.to_base58() << std::endl;
    +
    +  uint64_t balance = connection.get_balance(public_key).unwrap();
    +  std::cout << "balance = " << balance << std::endl;
    +
    +  return 0;
    +}
    +

    TIP

    Jika kita mau mendapatkan token balance, kita harus mengetahui alamat dari sebuah token akun. Untuk info lebih lanjut, lihat Token References

    - + diff --git a/docs/.vuepress/dist/id/references/basic-transactions.html b/docs/.vuepress/dist/id/references/basic-transactions.html index 88197f6fc..25680293b 100644 --- a/docs/.vuepress/dist/id/references/basic-transactions.html +++ b/docs/.vuepress/dist/id/references/basic-transactions.html @@ -23,7 +23,7 @@ } Mengirim Transaksi | Buku Panduan Solana - + @@ -76,31 +76,31 @@ await sendAndConfirmTransaction(connection, transferTransaction, [fromKeypair]);
    from solana.rpc.api import Client
    -from solana.keypair import Keypair
    +from solders.keypair import Keypair
     from solana.transaction import Transaction
    -from solana.system_program import TransferParams, transfer
    +from solders.system_program import TransferParams, transfer
     
     LAMPORT_PER_SOL = 1000000000
     
     client: Client = Client("https://api.devnet.solana.com")
     
    -sender = Keypair.generate()
    -receiver = Keypair.generate()
    +sender = Keypair()
    +receiver = Keypair()
     
    -airdrop = client.request_airdrop(sender.public_key, 1 * LAMPORT_PER_SOL)
    -airdrop_signature = airdrop["result"]
    +airdrop = client.request_airdrop(sender.pubkey(), 1 * LAMPORT_PER_SOL)
    +airdrop_signature = airdrop.value
     client.confirm_transaction(airdrop_signature)
     
     transaction = Transaction().add(transfer(TransferParams(
    -    from_pubkey=sender.public_key,
    -    to_pubkey=receiver.public_key,
    +    from_pubkey=sender.pubkey(),
    +    to_pubkey=receiver.pubkey(),
         lamports=1_000_000)
     ))
     
     client.send_transaction(transaction, sender)
     
    - + diff --git a/docs/.vuepress/dist/id/references/keypairs-and-wallets.html b/docs/.vuepress/dist/id/references/keypairs-and-wallets.html index 962eaa3ed..161c56c81 100644 --- a/docs/.vuepress/dist/id/references/keypairs-and-wallets.html +++ b/docs/.vuepress/dist/id/references/keypairs-and-wallets.html @@ -23,20 +23,35 @@ } Keypairs & Wallets | Buku Panduan Solana - + -

    Keypairs & Wallets

    Bagaimana cara membuat sebuah Keypair baru

    Banyak action-action yang dapat anda ambil dari beragam Solana libaries memerlukan sebuah Keypair atau Wallet. Jika anda terhubung dengan sebuah wallet, anda tidak perlu khawatir. Namun, jika anda memerlukan sebuah keypair, and perlu meng-generatenya.

    Press </> button to view full source
    import { Keypair } from "@solana/web3.js";
    +    

    Keypairs & Wallets

    Bagaimana cara membuat sebuah Keypair baru

    Banyak action-action yang dapat anda ambil dari beragam Solana libaries memerlukan sebuah Keypair atau Wallet. Jika anda terhubung dengan sebuah wallet, anda tidak perlu khawatir. Namun, jika anda memerlukan sebuah keypair, and perlu meng-generatenya.

    Press </> button to view full source
    import { Keypair } from "@solana/web3.js";
     
     (async () => {
       let keypair = Keypair.generate();
     })();
     
    from solana.keypair import Keypair
    +
    from solders.keypair import Keypair
     
     keypair = Keypair()
     
    // clang++ generate_keypair.cpp -o generate_keypair -std=c++17 -lssl -lcrypto -lsodium
    +
    +#include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +  auto key_pair = Keypair::generate();
    +
    +  auto public_key = key_pair.public_key;
    +  std::cout << "public_key = " << public_key.to_base58() << std::endl;
    +
    +  return 0;
    +}
    +
    use solana_sdk::signature::{Keypair};
     
     fn main() {
    @@ -47,7 +62,7 @@
     
     # pubkey: 9ZNTfG4NyQgxy2SWjSiQoUyBPEvXT2xo7fKc5hPYYJ7b
     

    Bagaimana cara me-restore sebuah Keypair dari sebuah secret

    Jika anda sudah mempunyai sebuah secret, anda dapat mendapatkan Keypair dari sebuah secret untuk mentest dApp anda.

    1. Dari Bytes
    Press </> button to view full source
    import { Keypair } from "@solana/web3.js";
    +

    Bagaimana cara me-restore sebuah Keypair dari sebuah secret

    Jika anda sudah mempunyai sebuah secret, anda dapat mendapatkan Keypair dari sebuah secret untuk mentest dApp anda.

    1. Dari Bytes
    Press </> button to view full source
    import { Keypair } from "@solana/web3.js";
     
     (async () => {
       const keypair = Keypair.fromSecretKey(
    @@ -67,7 +82,7 @@
         121, 35, 172, 247, 68, 251, 226, 218, 48, 63, 176, 109, 168, 89, 238, 135,
       ])
     );
    -
    from solana.keypair import Keypair
    +
    from solders.keypair import Keypair
     
     secret_key= [
             174, 47, 154, 16, 202, 193, 206, 113, 199, 190, 53, 133, 169, 175, 31, 56, 222, 53, 138,
    @@ -76,8 +91,8 @@
             63, 176, 109, 168, 89, 238, 135,
         ]
         
    -keypair = Keypair.from_secret_key(bytes(secret_key))
    -print("Created Keypair with Public Key: {}".format(keypair.public_key))
    +keypair = Keypair.from_bytes(secret_key)
    +print("Created Keypair with Public Key: {}".format(keypair.pubkey()))
     
    use solana_sdk::signature::{Keypair, Signer};
    +keypair = Keypair.from_bytes(secret_key)
    +
    // clang++ keypair_from_seed.cpp -o keypair_from_seed -std=c++17 -lssl -lcrypto -lsodium
    +
    +#include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +  const uint8_t bytes[] = {
    +    174, 47, 154, 16, 202, 193, 206, 113, 199, 190, 53, 133, 169, 175, 31, 56, 222, 53, 138,
    +    189, 224, 216, 117, 173, 10, 149, 53, 45, 73, 251, 237, 246, 15, 185, 186, 82, 177, 240,
    +    148, 69, 241, 227, 167, 80, 141, 89, 240, 121, 121, 35, 172, 247, 68, 251, 226, 218, 48,
    +    63, 176, 109, 168, 89, 238, 135,
    +  };
    +  Keypair key_pair = Keypair::from_seed(bytes);
    +  std::cout << "Created Keypair with Public Key: " << key_pair.public_key.to_base58() << std::endl;
    +}
    +
    use solana_sdk::signature::{Keypair, Signer};
     
     fn main() {
         let secret_key: [u8; 64] = [
    @@ -126,14 +164,13 @@
         "5MaiiCavjCmn9Hs1o3eznqDEhRwxo7pXiAYez7keQUviUkauRiTMD8DrESdrNjN8zd9mTmVhRvBJeg5vhyvgrAhG"
       )
     );
    -
    import base58
    -from solana.keypair import Keypair
    +
    from solders.keypair import Keypair
     
     b58_string = "5MaiiCavjCmn9Hs1o3eznqDEhRwxo7pXiAYez7keQUviUkauRiTMD8DrESdrNjN8zd9mTmVhRvBJeg5vhyvgrAhG"
    -keypair = Keypair.from_secret_key(base58.b58decode(b58_string)
    -print("Created Keypair with Public Key: {}".format(keypair.public_key))
    -
    use solana_sdk::signature::{Keypair, Signer};
     
     fn main() {
    @@ -146,7 +183,7 @@
     

    Bagaimana cara menverifikasi sebuah Keypair

    Jika anda diberikan sebuah keypair, anda dapat menverifikasi apakah secret sesuai dengan public key yang diberikan.

    Press </> button to view full source
    import { Keypair, PublicKey } from "@solana/web3.js";
    +

    Bagaimana cara menverifikasi sebuah Keypair

    Jika anda diberikan sebuah keypair, anda dapat menverifikasi apakah secret sesuai dengan public key yang diberikan.

    Press </> button to view full source
    import { Keypair, PublicKey } from "@solana/web3.js";
     
     (async () => {
       const publicKey = new PublicKey(
    @@ -174,10 +211,10 @@
     );
     console.log(keypair.publicKey.toBase58() === publicKey.toBase58());
     // true
    -
    from solana.keypair import Keypair
    -from solana.publickey import PublicKey
    +
    from solders.keypair import Keypair
    +from solders.pubkey import Pubkey
     
    -public_key = PublicKey("24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p")
    +public_key = Pubkey.from_string("24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p")
     
     keys = [
             174, 47, 154, 16, 202, 193, 206, 113, 199, 190, 53, 133, 169, 175, 31, 56, 222, 53, 138,
    @@ -185,11 +222,11 @@
             148, 69, 241, 227, 167, 80, 141, 89, 240, 121, 121, 35, 172, 247, 68, 251, 226, 218, 48,
             63, 176, 109, 168, 89, 238, 135,
         ]
    -keypair = Keypair.from_secret_key(bytes(keys))
    +keypair = Keypair.from_bytes(keys)
     
    -print(keypair.public_key.to_base58() == public_key.to_base58())
    +print(keypair.pubkey() == public_key)
     # True
    -
    // clang++ verify_keypair.cpp -o verify_keypair -std=c++17 -lssl -lcrypto -lsodium
    +
    +#include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +  PublicKey public_key = PublicKey("24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p");
    +
    +  const uint8_t bytes[] = {
    +    174, 47, 154, 16, 202, 193, 206, 113, 199, 190, 53, 133, 169, 175, 31, 56, 222, 53, 138,
    +    189, 224, 216, 117, 173, 10, 149, 53, 45, 73, 251, 237, 246, 15, 185, 186, 82, 177, 240,
    +    148, 69, 241, 227, 167, 80, 141, 89, 240, 121, 121, 35, 172, 247, 68, 251, 226, 218, 48,
    +    63, 176, 109, 168, 89, 238, 135,
    +  };
    +  Keypair key_pair = Keypair::from_seed(bytes);
    +
    +  std::cout << (public_key.to_base58() == key_pair.public_key.to_base58()) << std::endl;
    +}
    +
    solana-keygen verify <PUBKEY> prompt://
     

    Bagaimana cara untuk check jika sebuah public key telah terhubung dengan sebuah private key

    Dalam beberapa kasus khusus (contohnya sebuah Program Derived Address), public key mungkin tidak mempunyai sebuah private key yang terhubung. Anda dapat check hal ini dengan melihat apakah public key terdapat dalam kurva ed25519. Hanya public key yang terdapat dalam kurva yang bisa dikontrol oleh user dengan menggunakan wallet.

    Press </> button to view full source
    import { PublicKey } from "@solana/web3.js";
    +

    Bagaimana cara untuk check jika sebuah public key telah terhubung dengan sebuah private key

    Dalam beberapa kasus khusus (contohnya sebuah Program Derived Address), public key mungkin tidak mempunyai sebuah private key yang terhubung. Anda dapat check hal ini dengan melihat apakah public key terdapat dalam kurva ed25519. Hanya public key yang terdapat dalam kurva yang bisa dikontrol oleh user dengan menggunakan wallet.

    Press </> button to view full source
    import { PublicKey } from "@solana/web3.js";
     
     (async function () {
       // Note that Keypair.generate() will always give a public key that is valid for users
    @@ -219,20 +287,31 @@
     })();
     
    from solana.keypair import Keypair
    -from solana.publickey import PublicKey
    -from solana.utils.ed25519_base import is_on_curve
    +
    from solders.pubkey import Pubkey
     
     # Note that Keypair() will always give a public key that is valid for users
    -key = PublicKey('5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY') # Valid public key
    -print(is_on_curve(key)) # Lies on the ed25519 curve and is suitable for users
    +key = Pubkey.from_string('5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY') # Valid public key
    +print(key.is_on_curve()) # Lies on the ed25519 curve and is suitable for users
    +
    +off_curve_address = Pubkey.from_string('4BJXYkfvg37zEmBbsacZjeQDpTNx91KppxFJxRqrz48e') # Valid public key
    +print(off_curve_address.is_on_curve()) # Not on the ed25519 curve, therefore not suitable for users
    +
    +error_pubkey = Pubkey.from_string("testPubkey"); # Is not a valid public key
    +
    #include <iostream>
    +#include <solana_sdk.h>
    +
    +int main()
    +{
    +    auto public_key = PublicKey("5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY");
     
    -off_curve_address = PublicKey('4BJXYkfvg37zEmBbsacZjeQDpTNx91KppxFJxRqrz48e') # Valid public key
    -print(PublicKey._is_on_curve(off_curve_address)) # Not on the ed25519 curve, therefore not suitable for users
    +    std::cout << public_key.is_on_curve() << std::endl;
     
    -error_pubkey = PublicKey("testPubkey"); # Is not a valid public key
    -
    use solana_sdk::pubkey::{Pubkey};
     use std::str::FromStr;
     
    @@ -274,16 +353,16 @@
       "pill tomorrow foster begin walnut borrow virtual kick shift mutual shoe scatter";
     const seed = bip39.mnemonicToSeedSync(mnemonic, ""); // (mnemonic, password)
     const keypair = Keypair.fromSeed(seed.slice(0, 32));
    -
    from solana.keypair import Keypair
    +
    from solders.keypair import Keypair
     from mnemonic import Mnemonic
     
     mnemo = Mnemonic("english")
     seed = mnemo.to_seed("pill tomorrow foster begin walnut borrow virtual kick shift mutual shoe scatter")
    -keypair = Keypair.from_secret_key(seed)
    -print("Created Keypair with Public Key: {}".format(keypair.public_key)
    +keypair = Keypair.from_bytes(seed)
    +print("Created Keypair with Public Key: {}".format(keypair.pubkey()))
     
    solana-keygen recover
     
    1. BIP44 (multiple wallets, also known HD wallets)

    You can make multiple wallets from a single seed - also known as 'Hierarchical Deterministic wallets' or HD wallets:

    Press </> button to view full source
    import { Keypair } from "@solana/web3.js";
    @@ -311,7 +390,7 @@
     }
     
    solana-keygen recover 'prompt:?key=0/0'
     

    Bagaimana cara membuat sebuah vanity address

    Vanity publickeys, atau custom address adalah keys yang dimulai dengan character spesifik. Sebagai contoh, jika seseorang ingin publickey dimulai dengan "elv1s", atau mungkin juga "cook". Ini dapat membantu orang lain untuk mengingat siapa yang mempunyai key itu, membuat key lebih mudah untuk diidentifikasi.

    Catatan: Semakin banyak character di dalam vanity address anda, semakin lama prosesnya.

    ::: peringatan Anda harus menggunakan CLI untuk task ini. Python dan TypeScript hanyalah contoh untuk ilustrasi saja dan lebih lambat dibandingkan dengan CLI.

    :::

    Press </> button to view full source
    import { Keypair } from "@solana/web3.js";
    +

    Bagaimana cara membuat sebuah vanity address

    Vanity publickeys, atau custom address adalah keys yang dimulai dengan character spesifik. Sebagai contoh, jika seseorang ingin publickey dimulai dengan "elv1s", atau mungkin juga "cook". Ini dapat membantu orang lain untuk mengingat siapa yang mempunyai key itu, membuat key lebih mudah untuk diidentifikasi.

    Catatan: Semakin banyak character di dalam vanity address anda, semakin lama prosesnya.

    ::: peringatan Anda harus menggunakan CLI untuk task ini. Python dan TypeScript hanyalah contoh untuk ilustrasi saja dan lebih lambat dibandingkan dengan CLI.

    :::

    Press </> button to view full source
    import { Keypair } from "@solana/web3.js";
     
     (async () => {
       let keypair = Keypair.generate();
    @@ -323,17 +402,36 @@
     while (!keypair.publicKey.toBase58().startsWith("elv1s")) {
       keypair = Keypair.generate();
     }
    -
    from solana.keypair import Keypair
    +
    from solders.keypair import Keypair
     
     keypair = Keypair()
    -while(str(keypair.public_key)[:5]!="elv1s") :
    +while(str(keypair.pubkey())[:5]!="elv1s") :
         keypair = Keypair()
         
    -print("Created Keypair with Public Key: {}".format(keypair.public_key))
    +print("Created Keypair with Public Key: {}".format(keypair.pubkey()))
     
    solana-keygen grind --starts-with e1v1s:1
    +
    // clang++ vanity_keypair.cpp -o vanity_keypair -std=c++17 -lssl -lcrypto -lsodium
    +
    +#include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +  auto key_pair = Keypair::generate();
    +
    +  while (key_pair.public_key.to_base58().substr(0, 5) != "elv1s") {
    +    key_pair = Keypair::generate();
    +  }
    +
    +  std::cout << "Created Keypair with Public Key: " << key_pair.public_key.to_base58() << std::endl;
    +}
    +
    solana-keygen grind --starts-with e1v1s:1
     

    Bagaimana cara untuk sign dan menverifikasi messages dalam wallet

    Fungsi utama dari sebuah keypair adalah untuk sign messages dan mengaktifkan verifikasi dari signature. Verifikasi signature menyakinkan recipient bahwa data telah disign oleh pemilik dengan spesifik private key.

    Untuk melakukan itu, kita perlu import TweetNaClopen in new window crypto library.

    Press </> button to view full source
    import { Keypair } from "@solana/web3.js";
     import nacl from "tweetnacl";
    @@ -372,41 +470,25 @@
     );
     
     console.log(result);
    -
    from nacl.signing import VerifyKey
    -from solana.keypair import Keypair
    +
    from solders.keypair import Keypair
     
     secret_key =  [
           174, 47, 154, 16, 202, 193, 206, 113, 199, 190, 53, 133, 169, 175, 31, 56, 222, 53, 138, 189, 224, 216, 117,
           173, 10, 149, 53, 45, 73, 251, 237, 246, 15, 185, 186, 82, 177, 240, 148, 69, 241, 227, 167, 80, 141, 89, 240,
           121, 121, 35, 172, 247, 68, 251, 226, 218, 48, 63, 176, 109, 168, 89, 238, 135,
    -    ]
    -     
    -keypair = Keypair.from_secret_key(bytes(secret_key))
    -pubkey_bytes = bytes(keypair.public_key)
    -message = "The quick brown fox jumps over the lazy dog"
    -message_bytes = bytes(message,'utf8')
    -signed_message = keypair.sign(message_bytes)
    -
    -verify_sign = VerifyKey(
    -    pubkey_bytes
    -).verify(
    -    smessage=message_bytes,  
    -    signature=signed_message.signature
    -)
    -
    -#Returns original message if the signature has not been tampered with
    -print(verify_sign)
    -

    Bagaimana cara mengkoneksi ke sebuah wallet

    Solana wallet-adapteropen in new window libraries mempermudah untuk mengatur koneksi wallet di client-side.

    React

    Run command berikut untuk menginstall dependencies yang diperlukan:

    yarn add @solana/wallet-adapter-react @solana/wallet-adapter-react-ui @solana/wallet-adapter-base @solana/wallet-adapter-wallets
    +    ] 
    +keypair = Keypair.from_bytes(secret_key)
    +message = b"The quick brown fox jumps over the lazy dog"
    +signature = keypair.sign_message(message)
    +verify_sign = signature.verify(keypair.pubkey(), message)
    +
    +print(verify_sign) # bool
    +

    Bagaimana cara mengkoneksi ke sebuah wallet

    Solana wallet-adapteropen in new window libraries mempermudah untuk mengatur koneksi wallet di client-side.

    React

    Run command berikut untuk menginstall dependencies yang diperlukan:

    yarn add @solana/wallet-adapter-react @solana/wallet-adapter-react-ui @solana/wallet-adapter-base @solana/wallet-adapter-wallets
     

    React wallet-adapter libraries mengijinkan kita untuk mempertahankan dan mengakses states koneksi wallet melalui hooks dan Context providers bernama, useWallet, WalletProvider, useConnection, dan ConnectionProvider. React App harus di-wrap dengan WalletProvider dan ConnectionProvider.

    Sebagai tambahan, kita dapat memperingatkan user untuk terhubung dengan menggunakan useWalletModal untuk mengganti visibility dari connection modal dan men-wrap App dengan WalletModalProvider dari @solana/wallet-adapter-react-ui. Connection modal akan menghandle arus koneksi untuk kita, jadi kita cukup untuk listen kapan sebuah wallet terkoneksi. Kita dapat mengetahui sebuah wallet terkoneksi ketika useWallet response menjadi non-null di property wallet. Sebaliknya, jika property tersebut null, kita tahu bahwa wallet itu tidak terkoneksi.

    Press </> button to view full source
    import React, { useMemo, FC, PropsWithChildren } from "react";
     import {
       ConnectionProvider,
    @@ -593,6 +675,6 @@
     <WalletMultiButton />
     {/if}
     
    Last Updated:
    - + diff --git a/docs/.vuepress/dist/id/references/local-development.html b/docs/.vuepress/dist/id/references/local-development.html index 5a7135c20..df3fe6820 100644 --- a/docs/.vuepress/dist/id/references/local-development.html +++ b/docs/.vuepress/dist/id/references/local-development.html @@ -23,12 +23,12 @@ } Development Lokal | Buku Panduan Solana - +

    Development Lokal

    Memulai Validator Lokal

    Menguji kode program anda secara lokal bisa jauh lebih andal daripada pengujian di devnet, dan bisa membantu anda menguji sebelum mencobanya di devnet.

    Anda bisa mengatur validator pengujian lokal anda dengan menginstal solana tool suite dan menjalankannya.

    solana-test-validator
    -

    Keuntungan menggunakan validator uji lokal meliputi:

    • Tidak ada batas kecepatan RPC
    • Tidak ada batasan airdrop
    • Penyebaran program on-chain langsung (--bpf-program ...)
    • Mengkloning akun dari cluster publik, termasuk program (--clone ...)
    • Retensi riwayat transaksi yang dapat dikonfigurasi (--limit-ledger-size ...)
    • Panjang zaman yang dapat dikonfigurasi (--slots-per-epoch ...)
    • Lompat ke slot arbitrer (--warp-slot ...)

    Menghubungkan Ke Environment

    Saat anda mengerjakan pengembangan Solana, anda harus terhubung ke titik akhir API RPC tertentu. Solana memiliki 3 alamat environment:

    • mainnet-beta https://api.mainnet-beta.solana.com
    • devnet https://api.devnet.solana.com
    • testnet https://api.testnet.solana.com
    Press </> button to view full source
    import { clusterApiUrl, Connection } from "@solana/web3.js";
    +

    Keuntungan menggunakan validator uji lokal meliputi:

    • Tidak ada batas kecepatan RPC
    • Tidak ada batasan airdrop
    • Penyebaran program on-chain langsung (--bpf-program ...)
    • Mengkloning akun dari cluster publik, termasuk program (--clone ...)
    • Retensi riwayat transaksi yang dapat dikonfigurasi (--limit-ledger-size ...)
    • Panjang zaman yang dapat dikonfigurasi (--slots-per-epoch ...)
    • Lompat ke slot arbitrer (--warp-slot ...)

    Menghubungkan Ke Environment

    Saat anda mengerjakan pengembangan Solana, anda harus terhubung ke titik akhir API RPC tertentu. Solana memiliki 3 alamat environment:

    • mainnet-beta https://api.mainnet-beta.solana.com
    • devnet https://api.devnet.solana.com
    • testnet https://api.testnet.solana.com
    Press </> button to view full source
    import { clusterApiUrl, Connection } from "@solana/web3.js";
     
     (async () => {
       const connection = new Connection(clusterApiUrl("mainnet-beta"), "confirmed");
    @@ -38,6 +38,15 @@
     
     client = Client("https://api.mainnet-beta.solana.com")
     
    #include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +    Connection connection("https://api.mainnet-beta.solana.com");
    +    return 0;
    +}
    +
    use solana_client::rpc_client::RpcClient;
     use solana_sdk::commitment_config::CommitmentConfig;
     
    @@ -49,7 +58,7 @@
     let client = RpcClient::new_with_commitment(rpc_url, CommitmentConfig::confirmed());
     
    solana config set --url https://api.mainnet-beta.solana.com
     

    Terakhir, anda juga dapat terhubung ke cluster pribadi, baik satu lokal atau berjalan dari jarak jauh sebagai berikut:

    Press </> button to view full source
    import { Connection } from "@solana/web3.js";
    +

    Terakhir, anda juga dapat terhubung ke cluster pribadi, baik satu lokal atau berjalan dari jarak jauh sebagai berikut:

    Press </> button to view full source
    import { Connection } from "@solana/web3.js";
     
     (async () => {
       // This will connect you to your local validator
    @@ -60,6 +69,15 @@
     
     client = Client("http://127.0.0.1:8899")
     
    #include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +    Connection connection("http://127.0.0.1:8899");
    +    return 0;
    +}
    +
    use solana_client::rpc_client::RpcClient;
     use solana_sdk::commitment_config::CommitmentConfig;
     
    @@ -71,7 +89,7 @@
     let client = RpcClient::new_with_commitment(rpc_url, CommitmentConfig::confirmed());
     
    solana config set --url http://privaterpc.com
     

    Subskripsi Event

    Soket web menyediakan antarmuka pub/sub dimana anda bisa mendengarkan event tertentu. Alih-alih melakukan ping ke titik akhir HTTP biasa pada suatu interval untuk mendapatkan pembaruan yang sering, Anda dapat menerima pembaruan tersebut hanya ketika itu terjadi.

    Web3 Solana Connectionopen in new window di bawah tenda menghasilkan titik akhir websocket dan mendaftarkan klien websocket saat anda membuat instansi Connection baru. (see source code hereopen in new window).

    Kelas Connection mengekspos metode pub/sub - semuanya dimulai dengan on, seperti pemancar peristiwa. Saat anda memanggil metode pendengar ini, itu mendaftarkan langganan baru ke klien websocket dari instansi Connection itu. Contoh metode pub/sub yang kami gunakan di bawah ini adalah onAccountChangeopen in new window. Panggilan balik akan memberikan data status yang diperbarui melalui argumen (see AccountChangeCallbackopen in new window as an example).

    Press </> button to view full source
    import { clusterApiUrl, Connection, Keypair } from "@solana/web3.js";
    +

    Subskripsi Event

    Soket web menyediakan antarmuka pub/sub dimana anda bisa mendengarkan event tertentu. Alih-alih melakukan ping ke titik akhir HTTP biasa pada suatu interval untuk mendapatkan pembaruan yang sering, Anda dapat menerima pembaruan tersebut hanya ketika itu terjadi.

    Web3 Solana Connectionopen in new window di bawah tenda menghasilkan titik akhir websocket dan mendaftarkan klien websocket saat anda membuat instansi Connection baru. (see source code hereopen in new window).

    Kelas Connection mengekspos metode pub/sub - semuanya dimulai dengan on, seperti pemancar peristiwa. Saat anda memanggil metode pendengar ini, itu mendaftarkan langganan baru ke klien websocket dari instansi Connection itu. Contoh metode pub/sub yang kami gunakan di bawah ini adalah onAccountChangeopen in new window. Panggilan balik akan memberikan data status yang diperbarui melalui argumen (see AccountChangeCallbackopen in new window as an example).

    Press </> button to view full source
    import { clusterApiUrl, Connection, Keypair } from "@solana/web3.js";
     
     (async () => {
       // Establish new connect to devnet - websocket client connected to devnet will also be registered here
    @@ -102,7 +120,7 @@
       "confirmed"
     );
     
    import asyncio
    -from solana.keypair import Keypair
    +from solders.keypair import Keypair
     from solana.rpc.websocket_api import connect
     
     async def main():
    @@ -110,7 +128,7 @@
             # Create a Test Wallet
             wallet = Keypair()
             # Subscribe to the Test wallet to listen for events
    -        await websocket.account_subscribe(wallet.public_key)
    +        await websocket.account_subscribe(wallet.pubkey())
             # Capture response from account subscription 
             first_resp = await websocket.recv()
             print("Subscription successful with id {}, listening for events \n".format(first_resp.result))
    @@ -122,13 +140,62 @@
         # Create a Test Wallet
         wallet = Keypair()
         # Subscribe to the Test wallet to listen for events
    -    await websocket.account_subscribe(wallet.public_key)
    +    await websocket.account_subscribe(wallet.pubkey())
         # Capture response from account subscription 
         first_resp = await websocket.recv()
         print("Subscription successful with id {}, listening for events \n".format(first_resp.result))
         updated_account_info = await websocket.recv()
         print(updated_account_info)    
    -
    use solana_client::pubsub_client::PubsubClient;
    +
    // clang++ on_account_change.cpp -o on_account_change -std=c++17 -lssl -lcrypto -lsodium
    +
    +#include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +  Connection connection("https://api.devnet.solana.com");
    +
    +  auto key_pair = Keypair::generate();
    +
    +  int subscriptionId = connection.on_account_change(key_pair.public_key, [&](Result<Account> result) {
    +    Account account = result.unwrap();
    +    std::cout << "owner = " << account.owner.to_base58() << std::endl;
    +    std::cout << "lamports = " << account.lamports << std::endl;
    +    std::cout << "data = " << account.data << std::endl;
    +    std::cout << "executable = " << (account.executable ? "true" : "false") << std::endl;
    +  });
    +
    +  sleep(1);
    +
    +  std::string tx_hash = connection.request_airdrop(key_pair.public_key).unwrap();
    +  std::cout << "tx hash = " << tx_hash << std::endl;
    +
    +  for (int i = 0; i < 10; i++) {
    +    connection.poll();
    +    sleep(1);
    +  }
    +
    +  connection.remove_account_listener(subscriptionId);
    +
    +  return 0;
    +}
    +
    use solana_client::pubsub_client::PubsubClient;
     use solana_client::rpc_config::RpcAccountInfoConfig;
     use solana_sdk::commitment_config::CommitmentConfig;
     use solana_sdk::signature::{Keypair, Signer};
    @@ -177,7 +244,7 @@
     ).unwrap();
     let message = match receiver.recv().unwrap();
     println!("{:?}", message)
    -

    Mendapatkan Tes SOL

    Saat anda bekerja secara lokal, anda memerlukan beberapa SOL untuk mengirim transaksi. Di lingkungan non-mainnet anda dapat menerima SOL dengan mengirimkannya ke alamat anda.

    Press </> button to view full source
    import { Connection, Keypair, LAMPORTS_PER_SOL } from "@solana/web3.js";
    +

    Mendapatkan Tes SOL

    Saat anda bekerja secara lokal, anda memerlukan beberapa SOL untuk mengirim transaksi. Di lingkungan non-mainnet anda dapat menerima SOL dengan mengirimkannya ke alamat anda.

    Press </> button to view full source
    import { Connection, Keypair, LAMPORTS_PER_SOL } from "@solana/web3.js";
     
     (async () => {
       const keypair = Keypair.generate();
    @@ -201,7 +268,7 @@
     );
     
     await connection.confirmTransaction(airdropSignature);
    -
    from solana.keypair import Keypair
    +
    from solders.keypair import Keypair
     from solana.rpc.api import Client
     
     wallet = Keypair()
    @@ -209,14 +276,32 @@
     client = Client("https://api.devnet.solana.com")
     
     #Input Airdrop amount in LAMPORTS
    -client.request_airdrop(wallet.public_key, 1000000000)
    +client.request_airdrop(wallet.pubkey(), 1000000000)
     
     #Airdrops 1 SOL
     
    use solana_client::rpc_client::RpcClient;
    +
    // clang++ request_airdrop.cpp -o request_airdrop -std=c++17 -lssl -lcrypto -lsodium
    +
    +#include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +  Connection connection("https://api.devnet.solana.com");
    +
    +  auto key_pair = Keypair::generate();
    +
    +  std::string tx_hash = connection.request_airdrop(key_pair.public_key).unwrap();
    +
    +  std::cout << "tx hash = " << tx_hash << std::endl;
    +
    +  return 0;
    +}
    +
    use solana_client::rpc_client::RpcClient;
     use solana_sdk::commitment_config::CommitmentConfig;
     use solana_sdk::native_token::LAMPORTS_PER_SOL;
     use solana_sdk::signature::{Keypair, Signer};
    @@ -267,6 +352,6 @@
     solana-test-validator --bpf-program 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin serum_dex_v3.so --reset
     
    Last Updated:
    - + diff --git a/docs/.vuepress/dist/id/references/name-service.html b/docs/.vuepress/dist/id/references/name-service.html index 3d5713dcd..9cc5bbfd3 100644 --- a/docs/.vuepress/dist/id/references/name-service.html +++ b/docs/.vuepress/dist/id/references/name-service.html @@ -23,7 +23,7 @@ } Name Service | Buku Panduan Solana - + @@ -181,7 +181,7 @@ const subDomain = "demo"; // Step 1 -const hashedParentDomain = await getHashedName(mainDomain); +const hashedParentDomain = await getHashedName(parentDomain); const parentDomainKey = await getNameAccountKey( hashedParentDomain, undefined, @@ -260,6 +260,6 @@ const registry = await getTwitterRegistry(connection, handle);
    - + diff --git a/docs/.vuepress/dist/id/references/nfts.html b/docs/.vuepress/dist/id/references/nfts.html index 4cde9680f..f8e4c3d3d 100644 --- a/docs/.vuepress/dist/id/references/nfts.html +++ b/docs/.vuepress/dist/id/references/nfts.html @@ -23,7 +23,7 @@ } NFT | Buku Panduan Solana - + @@ -271,11 +271,13 @@ const metaplex = new Metaplex(connection); metaplex.use(keypairIdentity(keypair)); - const mint = new PublicKey("Ay1U9DWphDgc7hq58Yj1yHabt91zTzvV2YJbAWkPNbaK"); + const mintAddress = new PublicKey( + "Ay1U9DWphDgc7hq58Yj1yHabt91zTzvV2YJbAWkPNbaK" + ); - const nft = await metaplex.nfts().findByMint(mint); + const nft = await metaplex.nfts().findByMint({ mintAddress }); - console.log(nft.metadata); + console.log(nft.json); /* { name: 'SMB #139', @@ -302,18 +304,20 @@ } */ })(); -

    Cara Mengetahui Pemilik Sebuah NFT

    Jika kamu memiliki mint key dari sebuah NFT, kamu bisa mencari pemilik terkini dengan mengintip di token account terbesar untuk mint key tersebut.

    Mengingat bahwa NFTs memiliki 1 supply, dan mereka tidak dapat dibagi, yang artinya suatu token hanya dapat dimiliki oleh satu token account setiap kalinya, sementara itu semua token account lainnya untuk mint key tersebut memiliki saldo 0.

    Ketika token account terbesar sudah diidentifikasi, kita bisa mengambil pemiliknya.

    Press </> button to view full source
    import { Connection, PublicKey } from "@solana/web3.js";
    +console.log(nft.json);
    +

    Cara Mengetahui Pemilik Sebuah NFT

    Jika kamu memiliki mint key dari sebuah NFT, kamu bisa mencari pemilik terkini dengan mengintip di token account terbesar untuk mint key tersebut.

    Mengingat bahwa NFTs memiliki 1 supply, dan mereka tidak dapat dibagi, yang artinya suatu token hanya dapat dimiliki oleh satu token account setiap kalinya, sementara itu semua token account lainnya untuk mint key tersebut memiliki saldo 0.

    Ketika token account terbesar sudah diidentifikasi, kita bisa mengambil pemiliknya.

    Press </> button to view full source
    import { Connection, PublicKey } from "@solana/web3.js";
     
     (async () => {
       const connection = new Connection("https://api.mainnet-beta.solana.com");
    @@ -540,7 +544,7 @@
       metaplex.use(keypairIdentity(keypair));
     
       const owner = new PublicKey("2R4bHmSBHkHAskerTHE6GE1Fxbn31kaD5gHqpsPySVd7");
    -  const allNFTs = await metaplex.nfts().findAllByOwner(owner);
    +  const allNFTs = await metaplex.nfts().findAllByOwner({ owner });
     
       console.log(allNFTs);
     })();
    @@ -551,10 +555,10 @@
     metaplex.use(keypairIdentity(keypair));
     
     const owner = new PublicKey("2R4bHmSBHkHAskerTHE6GE1Fxbn31kaD5gHqpsPySVd7");
    -const allNFTs = await metaplex.nfts().findAllByOwner(owner);
    +const allNFTs = await metaplex.nfts().findAllByOwner({ owner });
     
     console.log(allNFTs);
     
    - + diff --git a/docs/.vuepress/dist/id/references/offline-transactions.html b/docs/.vuepress/dist/id/references/offline-transactions.html index 2072d5581..d0be1f2af 100644 --- a/docs/.vuepress/dist/id/references/offline-transactions.html +++ b/docs/.vuepress/dist/id/references/offline-transactions.html @@ -23,7 +23,7 @@ } Mengirim Transaksi Offline | Buku Panduan Solana - + @@ -457,6 +457,6 @@ console.log(`txhash: ${await connection.sendRawTransaction(tx.serialize())}`); - + diff --git a/docs/.vuepress/dist/id/references/programs.html b/docs/.vuepress/dist/id/references/programs.html index 002e3dd25..71978117a 100644 --- a/docs/.vuepress/dist/id/references/programs.html +++ b/docs/.vuepress/dist/id/references/programs.html @@ -23,7 +23,7 @@ } Menulis Program | Buku Panduan Solana - + @@ -1496,6 +1496,6 @@ } - + diff --git a/docs/.vuepress/dist/id/references/staking.html b/docs/.vuepress/dist/id/references/staking.html index 3338a2bb5..724d0a704 100644 --- a/docs/.vuepress/dist/id/references/staking.html +++ b/docs/.vuepress/dist/id/references/staking.html @@ -23,7 +23,7 @@ } Staking | Buku Panduan Solana - + @@ -641,6 +641,6 @@ stakeBalance = await connection.getBalance(stakeAccount.publicKey); console.log(`Stake account balance: ${stakeBalance / LAMPORTS_PER_SOL} SOL`); - + diff --git a/docs/.vuepress/dist/id/references/token.html b/docs/.vuepress/dist/id/references/token.html index ccd70d1c5..5b38db71a 100644 --- a/docs/.vuepress/dist/id/references/token.html +++ b/docs/.vuepress/dist/id/references/token.html @@ -23,7 +23,7 @@ } Interaksi dengan Token | Buku Panduan Solana - + @@ -1273,6 +1273,6 @@ mint: mint, }); - + diff --git a/docs/.vuepress/dist/index.html b/docs/.vuepress/dist/index.html index 1c0ef3b7f..7bda11ca6 100644 --- a/docs/.vuepress/dist/index.html +++ b/docs/.vuepress/dist/index.html @@ -23,11 +23,11 @@ } Cooking with Solana | Solana Cookbook - + -

    Cooking with Solana

    The Solana Cookbook is a developer resource that provides the essential concepts and references for building applications on Solana. Each concept and reference will focus on specific aspects of Solana development while providing additional details and usage examples.

    Contributing

    The Cookbook is designed in a way that makes it easy for new Solana developers to contribute. Even if you don't know how to do something, contributing to the cookbook is a great way to learn!

    Check out all open issues hereopen in new window. Contribution guidelines hereopen in new window. If you find the cookbook is missing a suggestion, please add an issue.

    How to Read the Cookbook

    The Solana Cookbook is split into different sections, each aimed at a different goal.

    SectionDescription
    Core ConceptsBuilding blocks of Solana that are good to know for development
    GuidesSnack-sized guides about different tools for development
    ReferencesReferences to commonly needed code snippets
    Last Updated:
    - +

    Cooking with Solana

    The Solana Cookbook is a developer resource that provides the essential concepts and references for building applications on Solana. Each concept and reference will focus on specific aspects of Solana development while providing additional details and usage examples.

    Contributing

    The Cookbook is designed in a way that makes it easy for new Solana developers to contribute. Even if you don't know how to do something, contributing to the cookbook is a great way to learn!

    Check out all open issues hereopen in new window. Contribution guidelines hereopen in new window. If you find the cookbook is missing a suggestion, please add an issue.

    How to Read the Cookbook

    The Solana Cookbook is split into different sections, each aimed at a different goal.

    SectionDescription
    Core ConceptsBuilding blocks of Solana that are good to know for development
    GuidesSnack-sized guides about different tools for development
    ReferencesReferences to commonly needed code snippets
    Last Updated:
    + diff --git a/docs/.vuepress/dist/integrations/index.html b/docs/.vuepress/dist/integrations/index.html index dedf9f9ad..80911a2d4 100644 --- a/docs/.vuepress/dist/integrations/index.html +++ b/docs/.vuepress/dist/integrations/index.html @@ -23,11 +23,11 @@ } Getting Started | Solana Cookbook - +

    Getting Started with Integrations

    The Solana Cookbook integrations provides a set of examples and references for anyone to build on top of other protocols on Solana.

    The power of Solana comes from the ability to integrate with other protocols, building on top of existing infrastructure to make something better.

    Composability is Key

    Making your program easy to use and extend will grow both your program and the entire Solana ecosystem. Don't reinvent the wheel, build on top of existing protocols and bootstrap your userbase.

    Adapt and build on top of other programs or libraries and unlock new capabilities for Solana.

    Contributing

    If you are interested in contributing to integrations, please checkout the contribution guidelinesopen in new window.

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/integrations/jupiter.html b/docs/.vuepress/dist/integrations/jupiter.html index da230a717..6d1fdb9af 100644 --- a/docs/.vuepress/dist/integrations/jupiter.html +++ b/docs/.vuepress/dist/integrations/jupiter.html @@ -23,7 +23,7 @@ } Jupiter | Solana Cookbook - + @@ -595,6 +595,6 @@ skipPreflight: false, });

    Other Resources

    - + diff --git a/docs/.vuepress/dist/integrations/mango.html b/docs/.vuepress/dist/integrations/mango.html index 668f6c2d5..2ada07afb 100644 --- a/docs/.vuepress/dist/integrations/mango.html +++ b/docs/.vuepress/dist/integrations/mango.html @@ -23,7 +23,7 @@ } Mango Markets | Solana Cookbook - + @@ -367,6 +367,6 @@ })();

    Other Resources

    - + diff --git a/docs/.vuepress/dist/integrations/orao-vrf.html b/docs/.vuepress/dist/integrations/orao-vrf.html index 79033a216..e136777d9 100644 --- a/docs/.vuepress/dist/integrations/orao-vrf.html +++ b/docs/.vuepress/dist/integrations/orao-vrf.html @@ -23,11 +23,11 @@ } - +
    - + diff --git a/docs/.vuepress/dist/integrations/pyth.html b/docs/.vuepress/dist/integrations/pyth.html index f41cfd778..ab6460227 100644 --- a/docs/.vuepress/dist/integrations/pyth.html +++ b/docs/.vuepress/dist/integrations/pyth.html @@ -23,7 +23,7 @@ } Pyth | Solana Cookbook - + @@ -103,6 +103,6 @@ let pyth_price_data = &pyth_price_info.try_borrow_data()?; let price_account: Price = *load_price(pyth_price_data).unwrap();

    Other Resources

    - + diff --git a/docs/.vuepress/dist/integrations/react-native.html b/docs/.vuepress/dist/integrations/react-native.html index 15d1508e5..0497d3dfc 100644 --- a/docs/.vuepress/dist/integrations/react-native.html +++ b/docs/.vuepress/dist/integrations/react-native.html @@ -23,7 +23,7 @@ } React Native | Solana Cookbook - + @@ -70,6 +70,6 @@ ERROR Invariant Violation: Module AppRegistry is not a registered callable module (calling runApplication). A frequent cause of the error is that the application entry file path is incorrect. This can also happen when the JS bundle is corrupt or there is an early initialization error when loading React Native.

    This is an issue that can be fixed by using a polyfill for the URL object in React Native.

    Install the package react-native-url-polyfill and import it in the main file of your app (eg: index.js), as shown above.

    Error: crypto.getRandomValues() not supported

    Error: crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported
     

    This is an issue that can be fixed by using a polyfill for the crypto object in React Native.

    Install the package react-native-get-random-values and import it in the main file of your app (eg: index.js), as shown above.

    - + diff --git a/docs/.vuepress/dist/integrations/serum.html b/docs/.vuepress/dist/integrations/serum.html index 09ea4e44a..7e5baef37 100644 --- a/docs/.vuepress/dist/integrations/serum.html +++ b/docs/.vuepress/dist/integrations/serum.html @@ -23,7 +23,7 @@ } Serum | Solana Cookbook - + @@ -105,6 +105,6 @@ })(); - + diff --git a/docs/.vuepress/dist/integrations/strata.html b/docs/.vuepress/dist/integrations/strata.html index 3b15e9ed6..ded560b60 100644 --- a/docs/.vuepress/dist/integrations/strata.html +++ b/docs/.vuepress/dist/integrations/strata.html @@ -23,7 +23,7 @@ } Strata | Solana Cookbook - + @@ -150,6 +150,6 @@ }, });

    Other Resources

    - + diff --git a/docs/.vuepress/dist/integrations/switchboard.html b/docs/.vuepress/dist/integrations/switchboard.html index 5a63953a6..b2cec6d33 100644 --- a/docs/.vuepress/dist/integrations/switchboard.html +++ b/docs/.vuepress/dist/integrations/switchboard.html @@ -23,7 +23,7 @@ } Switchboard | Solana Cookbook - + @@ -169,8 +169,8 @@ use super::*; pub fn get_result(ctx: Context<GetResult>) -> Result<()> { - let aggregator = &ctx.accounts.aggregator_feed; - let val: f64 = AggregatorAccountData::new(aggregator)? + let aggregator = &ctx.accounts.aggregator_feed.load()?; + let val:f64 = aggregator .get_result()? .try_into()?; @@ -184,12 +184,12 @@ pub struct GetResult<'info> { pub authority: Signer<'info>, /// CHECK: field is unsafe - pub aggregator_feed: AccountInfo<'info>, // pass aggregator key + pub aggregator_feed: AccountLoader<'info, AggregatorAccountData>, // pass aggregator key } -

    How to Create a Feed from the Publisher

    The official Switchboard documentation has an in-depth walk-through of how to create a feed from the publisher. Check it out hereopen in new window.

    Oracles

    Switchboard's unique feature is that it allows you to create your own oracle and run it locally.

    Create an oracle

    Press </> button to view full source
    import * as anchor from "@project-serum/anchor";
     import { Keypair } from "@solana/web3.js";
     import {
    @@ -536,6 +536,6 @@
         state_seeds,
     )?;
     

    Resources

    APIs and Libraries

    Examples

    More Information

    - + diff --git a/docs/.vuepress/dist/integrations/web3auth.html b/docs/.vuepress/dist/integrations/web3auth.html index 2b948b281..b45902d06 100644 --- a/docs/.vuepress/dist/integrations/web3auth.html +++ b/docs/.vuepress/dist/integrations/web3auth.html @@ -23,7 +23,7 @@ } web3Auth (Torus Wallet) | Solana Cookbook - + @@ -113,6 +113,6 @@ })();

    Resources

    - + diff --git a/docs/.vuepress/dist/kr/core-concepts/accounts.html b/docs/.vuepress/dist/kr/core-concepts/accounts.html index 1d5b27e06..7f62fcc3d 100644 --- a/docs/.vuepress/dist/kr/core-concepts/accounts.html +++ b/docs/.vuepress/dist/kr/core-concepts/accounts.html @@ -23,11 +23,11 @@ } Accounts | Solana Cookbook - +

    Accounts

    Solana에서 Account는 상태를 저장하기 위해 사용됩니다.
    Account는 Solana에서 개발을 위한 가장 필수적인 구성 요소입니다.

    Facts

    Fact Sheet

    • Account는 데이터를 저장하기 위해 사용됩니다.
    • 각 Account는 유일한 address를 갖고 있습니다.
    • Account는 10MB의 최대 크기를 가집니다.
    • PDA Account는 10KB의 최대 크기를 가집니다.
    • PDA Account는 Program을 대신해 서명하기 위해 사용될 수 있습니다.
    • Account 크기는 생성 시점에 고정됩니다. 하지만 reallocopen in new window을 사용해서 조정될 수 있습니다.
    • Account 데이터 저장은 rent라는 비용이 발생합니다.
    • 기본적으로 Account의 소유자는 System Program입니다.

    Deep Dive

    Account Model

    솔라나에는 3가지 종류의 Accounts가 있습니다:

    • Data Account는 데이터를 저장합니다.
    • Program Account는 실행 가능한 프로그램들을 저장합니다.
    • Native Account는 솔라나에 있는 System, Stake, Vote 같은 Native 프로그램입니다.

    Data Account에는 2가지 타입이 있습니다:

    • System이 소유한 Account
    • PDA (Program Derived Address) Account

    각 Account는 주소(보통 public key)와 소유자(프로그램 Account의 주소)를 갖고 있습니다.
    한 Account가 저장하는 전체 필드 리스트는 아래와 같습니다.

    FieldDescription
    lamportsAccount가 소유하고 있는 lamport의 개수
    ownerAccount를 소유하고 있는 Program
    executableAccount가 Instruction들을 처리할 수 있는지 여부
    dataAccount가 저장한 byte array 원본 데이터
    rent_epochAccount가 rent를 할 다음 epoch

    ownership에 대한 중요한 몇 가지 규칙이 있습니다.:

    • Data Account의 소유자만 오직 이 Account의 데이터를 수정할 수 있고, lamports를 인출할 수 있습니다.
    • 누구나 Data Account에 lamports들을 입금할 수 있습니다.
    • Account의 소유자는 이 Account의 데이터가 비어있다면 새로운 소유자에게 이 Account를 할당할 수 있습니다.

    Program Account는 상태를 저장하지 않습니다.

    예를 들어, 만약 counter를 증가시킬 수 있는 counter program을 가지고 있다면, 두 개의 Account를 생성해야 합니다.
    하나는 Program의 Code를 저장하는 Account이고, 다른 하나는 counter 데이터를 저장하는 Account입니다.

    Account가 삭제되는 것을 막기 위해서는 rent를 지불해야 합니다.

    Rent

    Account에 데이터를 저장하는 것은 메인넷에 SOL 비용을 발생시키고, rent라고 불리는 것에 의해 걷어집니다.
    만약 한 Account에 2년 치의 rent 지불과 동등한 balance를 유지한다면, Account는 rent를 지불하는 것이 면제됩니다.
    Account 사용을 마치면 rent를 되찾을 수 있고 lamports를 지갑에 보낼 수 있습니다.

    Rent는 두 가지 타이밍에 지불됩니다:

    1. Transaction에 의해 참조될 때
    2. 매 epoch 마다

    A percentage of rent collected by accounts is destroyed, while the rest is distributed to vote accounts at the end of every slot.

    만약 Account가 rent를 지불하기 위한 충분한 lamports를 갖고 있지 않다면, Account는 할당 해제되며 데이터는 지워집니다.

    새로운 Account들은 rent 면제되도록 하는 것이 중요합니다.

    Other Resources

    Credit

    This core concept is credited to Pencilflip. Follow him on Twitteropen in new window.

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/kr/core-concepts/pdas.html b/docs/.vuepress/dist/kr/core-concepts/pdas.html index b02a0156e..18d9fc091 100644 --- a/docs/.vuepress/dist/kr/core-concepts/pdas.html +++ b/docs/.vuepress/dist/kr/core-concepts/pdas.html @@ -23,11 +23,11 @@ } Program Derived Addresses (PDAs) | Solana Cookbook - +

    Program Derived Addresses (PDAs)

    Program Derived Addresses (PDAs)는 특정 Program에 의해 작동되도록 설계된 Account들입니다. Program들은 PDA들을 통해 Private Key 없이 특정 Addresse에 대해 서명할 수 있습니다. PDA는 Solana App이 다른 App들과 함께 구성될 수 있도록 하는 Cross-Program Invocationopen in new window를 위한 기반으로써의 기능을 합니다.

    Facts

    Fact Sheet

    • PDAs are 32 byte strings that look like public keys, but don’t have corresponding private keys
    • PDA는 Public Key 처럼 보이는 32 byte의 String 이지만, 대응되는 Private Key는 없습니다.
    • findProgramAddress는 programId와 seeds(collection of bytes) 값으로부터 정확한 PDA를 조회할 것입니다.
    • bump (one byte) 는 ed25519 타원 곡선에서 잠재적인 PDA를 밀어내는 데 사용됩니다.
    • Program은 seeds와 bump 값을 invoke_signedopen in new window에 제공해서 PDA들에 서명할 수 있습니다.
    • PDA는 자신을 만든 Program에 의해서만 서명될 수 있습니다.
    • PDA는 Program이 다른 Instruction들에 서명하도록 하는 것 뿐만 아니라, indexing accounts를 위한 hashmap과 같은 interface 또한 제공합니다.

    Deep Dive

    PDA는 Solana에서 Program들을 개발하기 위한 필수적인 구성 요소입니다. Program들은 PDA들을 가지고 Account들에 서명할 수 있고, 다른 사용자들이 같은 Account에 유효한 서명을 만들 수 없다는 것을 보장합니다. 어떤 Program들은 Account들에 서명하는 것과 더불어 그들의 PDA들에 의해 만들어진 Account들을 수정할 수도 있습니다.

    Accounts matrix

    Image courtesy of Pencilflip

    Generating PDAs

    PDA에 대한 개념을 이해하기 위해서, PDA는 기술적으로 창조된 것이 아니라 발견된 것이라고 생각하는 것이 좀 더 도움이 될 수 있습니다. PDA들은 seed (문자열 “vote_account”와 같은)들과 Program ID의 조합으로 만들어집니다. 그러고 나서, 이 seed들과 Program ID의 조합은 ed25519 타원 곡선 상에서 Public Key를 만들어내는지 여부를 확인하기 위해 sha256 해시 함수로 보내집니다.

    Program ID와 seeds를 해시 함수로 돌리는 동안, 타원 곡선상에 있는 유효한 Public Key를 50% 확률로 발견합니다. 이런 경우, 우리는 input 값들을 조금 다르게 하기 위해 단순히 어떤 값을 추가합니다. 이 작업을 위해 추가하는 것의 기술적인 용어는 bump입니다. 솔라나에서 bump 값은 255로 시작해서 bum=254, bump=253, etc... 와 같이 타원 곡선 상에 존재하지 않는 Address를 얻을 때까지 단순하게 값을 하나씩 내리며 반복합니다. 이것은 초보적으로 보일지 모르지만, 일단 한번 발견되면 확실히 우리는 같은 PDA를 계속해서 얻을 수 있습니다.

    PDA on the ellipitic curve

    Interacting with PDAs

    PDA가 생성됐을 때, findProgramAddress는 Address를 타원 곡선 밖으로 보내기 위해 사용되도록 Address와 bump 값을 반환할 것입니다. 이 bump 값으로 무장한 Program은 PDA를 요구하는 어떤 Instruction에도 sign할 수 있습니다. 서명을 위해 Program들은 Instruction들과 Account들의 목록 그리고 invoked_signed하기 위해 PDA를 얻기 위한 seeds와 bump값들을 보내야 합니다. PDA들은 Instuction에 서명하는 것과 더불어 invoke_signed를 통해 자신의 생성을 위한 서명도 해야 합니다.

    PDA들을 만들 때, Account Data 자체적으로 store the bump seedopen in new window 하는 것은 흔한 방법입니다. 이것은 개발자들이 bump를 Instruction 인자로써 전송하지 않고 쉽게 PDA를 검증하도록 해줍니다.

    Other Resources

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/kr/core-concepts/programs.html b/docs/.vuepress/dist/kr/core-concepts/programs.html index 338736901..f402b4673 100644 --- a/docs/.vuepress/dist/kr/core-concepts/programs.html +++ b/docs/.vuepress/dist/kr/core-concepts/programs.html @@ -23,12 +23,12 @@ } Programs | Solana Cookbook - +

    Programs

    어떤 개발자든 Solana 블록체인에 Program을 작성하고 배포할 수 있습니다. Program(다른 프로토콜들에서 smart contract로 알려진)들은 DeFi, NFTs부터 소셜 미디어와 게임까지 모든 것을 가능하게 하는 on-chain 활동을 위한 기반 역할을 수행합니다.

    Facts

    Fact Sheet

    • Program은 사용자나 다른 Program으로부터 받은 instructions을 처리합니다.
    • 모든 Program들은 상태를 보존하지 않습니다. 즉, Program들이 사용하는 모든 데이터는 Instruction들을 거쳐 분리된 Account들로 보내집니다.
    • Program 그 자체는 executable 표시된 Account에 저장됩니다.
    • 모든 Program은 BPF Loaderopen in new window에 의해 소유되고 Solana Runtimeopen in new window에 의해 실행됩니다.
    • 개발자들은 보통 Rust나 C++로 Program을 작성합니다. 하지만, LLVMopen in new windowBPFopen in new window backend로 빌드되는 어떤 언어도 선택 가능합니다.
    • 모든 Program은 Instruction 처리가 일어나는 단일 entry point를 갖고 있습니다.(i.e. process_instructio);
      아래는 항상 포함되는 파라미터들입니다.
      • program_id: pubkey
      • accounts: array,
      • instruction_data: byte array

    Deep Dive

    대부분의 다른 블록체인들과 다르게, Solana는 데이터와 코드를 완벽하게 분리합니다. Program이 상호 작용하는 모든 데이터들은 분리된 Account들에 저장되며, Instruction들을 거쳐 호출됩니다. 이러한 모델은 단일 Generic Program이 추가적인 배포 없이 다양한 Account들을 거쳐 동작하는 것을 가능하게 합니다. 이러한 패턴의 흔한 예는 Native와 SPL Program 들에서 볼 수 있습니다.

    Native Programs & The Solana Program Library (SPL)

    Solana는 on-chain 상호 작용을 위해 행식 구성 요소로써 기능하는 다수의 Program들을 갖고 있습니다. 이 Program들은 Native Programopen in new window들과 Solana Program Library (SPL) Programopen in new window들로 나뉩니다.

    Native Program들은 validator들을 운영하기 위해 요구되는 기반 기능을 제공합니다. 이 Program들 중에 가장 잘 알려진 것이 System Programopen in new window입니다. System Program은 새로운 Account들을 관리하는 것과 두 집단 사이에서 SOL을 전송하는 것을 책임집니다.

    SLP Program은 토큰 생성, 교환, 대여하는 것에 더해 stake pool을 발생시키고, on-chain name service를 유지하는 것 포함해 다수의 on-chain 활동을 지원합니다. SPL Token Programopen in new window들은 CLI를 거쳐 직접 호출될 수 있습니다. 반면에 Associated Token Account Programopen in new window 같은 다른 것들은 보통 Custom Program들로 구성됩니다.

    Writing Programs

    Program들은 보통 Rust와 C++로 개발됩니다. 하지만, LLVM의 BPF backend로 빌드되는 어떤 언어로도 개발 가능합니다. Neon Labsopen in new windowSolangopen in new window은 최근 EVMopen in new window 호환을 가능하게 하고 개발자들이 Program을 Solidity에서 작성할 수 있게 하는 시도를 하고 있습니다.

    대부분의 Rust 기반 Program들은 아래와 같은 아키텍처를 사용합니다.:

    FileDescription
    lib.rsRegistering modules
    entrypoint.rsEntrypoint to the program
    instruction.rsProgram API, (de)serializing instruction data
    processor.rsProgram logic
    state.rsProgram objects, (de)serializing state
    error.rsProgram-specific errors

    최근에는, Anchoropen in new window가 Program을 개발하기 위한 프레임워크로 뜨고 있습니다. Anchor는 boilerplate를 줄이고 (de)serialization 처리를 간소화하는 Ruby on Rails와 비슷한 Rust 기반 프레임워크입니다.

    Program들은 보통 Testnet과 Mainnet에 배포되기 전에 Localhost와 Devnet 환경에서 개발되고 테스트됩니다. Solana는 아래 환경들을 지원합니다.

    Cluster EnvironmentRPC Connection URL
    Mainnet-betahttps://api.mainnet-beta.solana.com
    Testnethttps://api.testnet.solana.com
    Devnethttps://api.devnet.solana.com
    LocalhostDefault port: 8899 (e.g. http://localhost:8899, http://192.168.1.88:8899)

    일단 환경에 배포되고 나면, Client들은 각각의 Cluster로의 RPC 연결을 통해 On-chain Program들과 상호작용 할 수 있습니다.

    Deploying Programs

    개발자들은 다음과 같이 CLIopen in new window를 통해 Program을 배포할 수 있습니다.

    solana program deploy <PROGRAM_FILEPATH>
     

    Program이 배포될 때, ELF shared objectopen in new window(BPF bytecode를 포함하는)로 컴파일되고 Solana Cluster로 업로드됩니다. Program들은 그들의 Account가 execuable 표시되고 BPF Loader에 할당될 때를 제외하고 Account 안에 존재합니다. 이 Account의 주소는 program_id로써 모든 Transaction에서 Program을 참조하기 위해 사용됩니다.

    Solana는 최근 Upgradable BPF Loaderopen in new window를 포함해 multiple BPF Loader를 지원합니다. BPF Loader는 Program의 Account를 관리하는데 Client들이 program_id를 통해 이것을 가능하게 만들 책임이 있습니다. 모든 Program들은 Instruction에 대한 처리가 일어나는 하나의 Entry Point를 갖고 있습니다. (i.e. process_instruction)
    아래는 항상 포함되는 파라미터들입니다.

    • program_id: pubkey
    • accounts: array,
    • instruction_data: byte array

    일단 호출되고 나면, Program들은 Solana Runtime에 의해 실행됩니다.

    Other Resources

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/kr/core-concepts/transactions.html b/docs/.vuepress/dist/kr/core-concepts/transactions.html index 96c522bb9..deebe8162 100644 --- a/docs/.vuepress/dist/kr/core-concepts/transactions.html +++ b/docs/.vuepress/dist/kr/core-concepts/transactions.html @@ -23,11 +23,11 @@ } Transactions | Solana Cookbook - +

    Transactions

    Client들은 Cluster에 Transaction을 보냄으로써 programs들을 호출합니다. 하나의 Transaction은 각자의 Program을 대상으로 하는 다수의 Instruction들을 포함할 수 있습니다. Transaction이 보내졌을 때, Solana Runtimeopen in new window은 Transaction의 Instruction들을 순서대로 처리할 것입니다. 만약 한 Instruction의 어떤 부분이라도 실패한다면, 전체 Transaction은 실패할 것입니다.

    Facts

    Fact Sheet

    • Instruction은 Solana에서 가장 기본적인 연산 단위입니다.
    • 각 Instruction은 아래 내용을 포함합니다:
      • 대상 Program의 program_id
      • 읽거나 쓸려고 하는 모든 accounts를 담은 하나의 Array
      • 대상 Program에 명시된 byte array 형태의 instruction_data
    • 다수의 Instruction들은 하나의 Transaction으로 묶일 수 있습니다.
    • 각 Transaction은 아래 내용을 포함합니다:
      • 읽거나 쓸려고 하는 모든 accounts를 담은 하나의 Array
      • 하나 이상의 instructions
      • 최근 blockhash
      • 하나 이상의 signatures
    • Instruction들은 순서대로 처리된다.
    • 만약 Instuction의 한 부분이라도 실패한다면, 전체 Transaction은 실패한다.
    • Transaction은 1232 바이트로 제한된다.

    Deep Dive

    Solana Runtime은 Instruction과 Transaction 둘 모두에게 읽거나 쓸 모든 Account의 목록을 명시하도록 요구합니다. 사전에 Account들의 목록을 요구함으로써, Runtime은 모든 Transaction들을 병렬로 실행할 수 있습니다.

    한 Transaction이 Cluster로 보내지면, Runtime은 이 Transaction의 Instruction들을 순차로 처리할 것입니다. 각 Instruction을 받는 Program은 Instruction의 데이터를 해석하고 명시된 Account들을 동작시킬 것입니다. Program은 성공을 반환할 수도 있고 에러 코드를 반환할 수도 있습니다. 만약 에러가 반환되면, Transaction은 즉시 실패할 것입니다.

    Account의 데이터를 변경하거나 출금하려고 하는 Transaction에는 해당 Account 소유자의 서명이 요구됩니다. 변경될 Account는 wriable 표시됩니다. Transaction 요금 지불자가 필요한 rent와 Transaction 요금을 지불한다면, Account에 입금하는 데에는 소유자의 서명이 필요하지 않습니다.

    모든 Transaction들은 전송 전에 recent blockhashopen in new window를 참조해야 합니다. Blockhash는 중복을 방지하고 오래된 Transaction을 제거하기 위해 사용됩니다. Transaction Blockhash는 최대 150 blocks까지, 혹은 최대 1분 19초까지 허용됩니다.

    Fees

    Solana 네트워크는 두 종류의 요금을 걷습니다.

    Solana의 Transaction fees에는 사용자들이 다음 block에 포함될 기회를 증가시키기 위해 더 높은 요금을 지불할 수 있는 fee market 개념이 없습니다. 이 글을 쓰는 시점에, Transaction fees는 사용되는 자원의 양에 의해서가 아니라 오직 요구된 서명들(i.e. lamports_per_signature)의 개수에 의해 결정됩니다. 이것은 현재 모든 Transaction들에 대한 1232 바이트의 엄격한 한도가 존재하기 때문입니다.

    모든 Transaction은 Transaction에 서명하기 위해 최소 하나의 writable Account를 요구합니다. 전송될 때, 처음 직력화된 수정 가능한 서명자 Account가 요금 지불자가 될 것입니다. 이 Account는 Transaction이 성공하는지 실패하는지와 상관없이 Transaction에 대한 비용을 지불합니다. 만약 요금 지불자가 Transaction 요금을 지불하기 위한 충분한 Balance를 갖고 있지 않다면, 이 Transaction은 거절됩니다.

    이 글을 작성하는 시점에는, 모든 Transaction 요금의 50 퍼센트는 Block을 생산하는 Validator가 가져가고, 나머지 50 퍼센트는 소멸됩니다. 이러한 구조는 Validator들이 가능한 많은 Transaction들을 처리하도록 보상하기 위함입니다.

    Other Resources

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/kr/getting-started/installation.html b/docs/.vuepress/dist/kr/getting-started/installation.html index a95e5706a..ec49dceea 100644 --- a/docs/.vuepress/dist/kr/getting-started/installation.html +++ b/docs/.vuepress/dist/kr/getting-started/installation.html @@ -23,7 +23,7 @@ } Installation | Solana Cookbook - + @@ -71,6 +71,6 @@ export PATH=$PWD/bin:$PATH

    그러고 나서 아래 명령어를 실행하면 빌드된 바이너리를 이용한 것과 같은 결과를 얻을 수 있습니다:

    solana-install init
     
    - + diff --git a/docs/.vuepress/dist/kr/guides/account-maps.html b/docs/.vuepress/dist/kr/guides/account-maps.html index 85f84df36..202b891c7 100644 --- a/docs/.vuepress/dist/kr/guides/account-maps.html +++ b/docs/.vuepress/dist/kr/guides/account-maps.html @@ -23,7 +23,7 @@ } Account Maps | Solana Cookbook - + @@ -1136,6 +1136,6 @@ tx.add(insertBCIx); tx.add(insertCAIx); - + diff --git a/docs/.vuepress/dist/kr/guides/data-migration.html b/docs/.vuepress/dist/kr/guides/data-migration.html index 44edde61c..7eb716f40 100644 --- a/docs/.vuepress/dist/kr/guides/data-migration.html +++ b/docs/.vuepress/dist/kr/guides/data-migration.html @@ -23,7 +23,7 @@ } Migrating Program Data Accounts | Solana Cookbook - + @@ -676,6 +676,6 @@ } }

    VersionProgramInstruction::SetString(String)이라는 Instruction을 빌드하고 제출한 후, 이제 우리는 아래의 '업그레이드된' Account Data 구조를 갖습니다.

    Program Account v2

    Resources

    - + diff --git a/docs/.vuepress/dist/kr/guides/debugging-solana-programs.html b/docs/.vuepress/dist/kr/guides/debugging-solana-programs.html index 0b060e655..cd7efe34e 100644 --- a/docs/.vuepress/dist/kr/guides/debugging-solana-programs.html +++ b/docs/.vuepress/dist/kr/guides/debugging-solana-programs.html @@ -23,7 +23,7 @@ } Debugging Solana Programs | Solana Cookbook - + @@ -48,6 +48,6 @@ test test_validator_transaction ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 6.40s

    디버깅하는것은 당신이 test body 에서 사용되는 함수와 메소드들을 디버그하도록 해줄것 이지만 breakpoint는 동작하지 않을 것입니다.

    Local Validator Node Testing from Client Apps

    마지막으로, 당신은 comman line의 solana-test-validator를 사용해 local validating node를 실행할 수 있고 당신의 프로그램과 Account들을 로드할 수 있습니다.

    여기에서 당신은 Rust의 RcpClient를 사용하거나 JavaScript or Typescript clients에 있는 client application이 필요할 것입니다.

    solana-test-validator --help를 사용하면 더 자세한 내용과 옵션들을 볼 수 있습니다. 예제 프로그램을 위한 단계는 여기있습니다:

    1. 프로젝트 경로에서 터미널을 엽니다.
    2. local로 설정하기 위해 solana config set -ul을 실행합니다.
    3. solana-test-validator --bpf-program target/deploy/bpf_program_template-keypair.json target/deploy/bpf_program_template.so을 실행합니다.
    4. 또 다른 터미널을 열고 log streamer를 시작하기 위해 solana logs를 실행합니다.
    5. 당신은 이제 Client Program을 실행할 수 있고 프로그램 결과를 log streamer를 실행한 터미널에서 확인할 수 있습니다.

    Resources

    solana-program-bpf-templateopen in new window

    RcpClientopen in new window

    JavaScript/Typescript Libraryopen in new window

    - + diff --git a/docs/.vuepress/dist/kr/guides/feature-parity-testing.html b/docs/.vuepress/dist/kr/guides/feature-parity-testing.html index 8643bab4a..4512398c1 100644 --- a/docs/.vuepress/dist/kr/guides/feature-parity-testing.html +++ b/docs/.vuepress/dist/kr/guides/feature-parity-testing.html @@ -23,7 +23,7 @@ } Feature Parity Testing | Solana Cookbook - + @@ -302,6 +302,6 @@ assert!(txn.is_ok()); }

    Happy Testing!

    Resources

    scfsdopen in new window

    gadget-scfsopen in new window

    - + diff --git a/docs/.vuepress/dist/kr/guides/get-program-accounts.html b/docs/.vuepress/dist/kr/guides/get-program-accounts.html index e8d9c0648..3fb26ed73 100644 --- a/docs/.vuepress/dist/kr/guides/get-program-accounts.html +++ b/docs/.vuepress/dist/kr/guides/get-program-accounts.html @@ -23,7 +23,7 @@ } Get Program Accounts | Solana Cookbook - + @@ -444,6 +444,6 @@ # "id": 1 # }

    세 가지 파라미터(dataSlice, dataSize, and memcmp)들을 조합함으로써 우리는 질의할 영역을 제한할 수 있고 우리가 관심 있는 데이터만 효과적으로 리턴할 수 있습니다.

    Other Resources

    - + diff --git a/docs/.vuepress/dist/kr/guides/retrying-transactions.html b/docs/.vuepress/dist/kr/guides/retrying-transactions.html index 7d06760b3..2d49a5103 100644 --- a/docs/.vuepress/dist/kr/guides/retrying-transactions.html +++ b/docs/.vuepress/dist/kr/guides/retrying-transactions.html @@ -23,7 +23,7 @@ } Retrying Transactions | Solana Cookbook - + @@ -89,6 +89,6 @@ blockheight = await connection.getBlockHeight(); }

    getLastestBlockhash를 통해 가져올 때, Application들은 그들의 의도된 commitmentopen in new window level을 명시해야 합니다. commitment를 confirmed (voted on) 또는 finalized (~30 blocks after confirmed)으로 세팅함으로써, Application은 minority fork로 부터 blockhash를 가져오는 것을 피할 수 있습니다.

    Application이 만약 load balancer 뒤의 RPC node들에 접근할 수 있다면, 특정 노드들 사이에서 작업량을 나누도록 선택할 수 있습니다. getProgramAccounts와 같은 data 집중적인 요청들을 제공하는 RPC 노드들 뒤떨어지기 쉽고 Transaction들을 보내기 또한 적절하지 않을 수 있습니다. 시간에 민감한 Transaction들을 다루는 Application들에게, sendTransaction만을 다루는 node들을 선택하는 것은 prudent할지 모릅니다.

    The Cost of Skipping Preflight

    기본적으로 sendTransaction은 Transaction을 보내기에 앞서 세 가지 preflight checks를 수행합니다. 구체적으로:

    만약 이 세 가지 preflight check가 실패하는 경우, sendTransaction은 Transaction을 보내기 전에 에러를 일으킬 것입니다. Preflight checks는 Transaction을 잃어버리는 것과 client가 우아하게 error를 다루도록 하는 것 사이의 차이를 만들어 낼 수 있습니다. 이런 흔한 에러들이 설명되도록 하고 싶다면, 개발자들이 skipPreflightfalse 값으로 유지하는 것을 추천합니다.

    When to Re-Sign Transactions

    모든 rebroadcast 시도에도 불구하고, Client가 Transaction에 다시 서명하도록 요구되는 시점들이 있을 수 있습니다. Transaction에 재서명하기 전에, 첫 번째 Transaction의 blockhash가 만료되었다는 것을 확인하는 것은 매우 중요합니다. 만약 첫 번째 blockhash가 여전히 유효하다면, 이 두 Transaction들이 network에 받아들여질 수도 있습니다. 이것은 end-user에게 의도치 않게 동일한 Transaction을 두 번 보내는 결과를 보여줄 것입니다.

    Solana에서 드랍된 Transaction은 이 Transaction이 참조하는 blockhash가 getLatestBlockhash로부터 수신된 lastValidBlockHeight보다 오래된 상태가 됬을 때 안전하게 버려질 수 있습니다. 개발자들은 getEpochInfoopen in new window를 질의하는 것과 응답 값에 있는 blockHeight와 비교하는 것으로 lastValidBlockHeight를 추적해야 합니다. blockhash가 유효하지 않게 되면 Client들은 새롭게 질의한 blockhash를 가지고 다시 서명해야 할 것입니다.

    Acknowledgements

    Trent Nelson, Jacob Creechopen in new window, White Tiger, Le Yafo, Buffaluopen in new window, and Jito Labsopen in new window. 이 모든 분들의 리뷰와 피드백에 감사드립니다.

    - + diff --git a/docs/.vuepress/dist/kr/guides/serialization.html b/docs/.vuepress/dist/kr/guides/serialization.html index c3ec2710b..ad91fb0ac 100644 --- a/docs/.vuepress/dist/kr/guides/serialization.html +++ b/docs/.vuepress/dist/kr/guides/serialization.html @@ -23,7 +23,7 @@ } Serializing Data | Solana Cookbook - + @@ -253,10 +253,11 @@ }
    from borsh_construct import String, CStruct, U8
     from enum import IntEnum
    -from solana.rpc.types import RPCResponse
    -from solana.transaction import Transaction, TransactionInstruction, AccountMeta
    -from solana.publickey import PublicKey
    -from solana.keypair import Keypair
    +from solana.transaction import Transaction
    +from solders.pubkey import Pubkey
    +from solders.keypair import Keypair
    +from solders.instruction import Instruction, AccountMeta
    +from solders.rpc.responses import SendTransactionResp
     from solana.rpc.api import Client
     
     
    @@ -279,12 +280,12 @@
     
     def mint_kv(
         client: Client,
    -    program_pk: PublicKey,
    -    account_pk: PublicKey,
    +    program_pk: Pubkey,
    +    account_pk: Pubkey,
         wallet_kp: Keypair,
         mint_key: str,
         mint_value: str,
    -) -> RPCResponse:
    +) -> SendTransactionResp:
         """Mint with a key/value pair to an account"""
         # Construct the program payload for Mint invariant
         payload_ser = construct_payload(InstructionVariant.MINT, mint_key, mint_value)
    @@ -300,13 +301,13 @@
     
         # Construct the transaction with instructionVariant
         txn = Transaction().add(
    -        TransactionInstruction(
    -            [AccountMeta(account_pk, False, True)], program_pk, payload_ser
    +        Instruction(
    +            accounts=[AccountMeta(account_pk, False, True)], program_id=program_pk, data=payload_ser
             )
         )
         return client.send_transaction(txn, wallet_kp)
         # => {'jsonrpc': '2.0', 'result': '4ZdpWNdovdVaLextWSiqEBWp67k9rNTTUaX3qviHDXWY9c98bVtaRt5sasPhYzMVXHqhex78gzNKytcBnVH5CSTZ', 'id': 2}
    -
    
    +
    
     /// Instruction payload gets serialized
     #[derive(BorshSerialize)]
     pub struct Payload<'a> {
    @@ -632,10 +633,9 @@
       let nameAccount = await connection.getAccountInfo(account, "processed");
       return deserializeUnchecked(dataSchema, AccoundData, nameAccount.data);
     }
    -
    import base64
    -from borsh_construct import CStruct, U8, U32, HashMap, String
    +
    from borsh_construct import CStruct, U8, U32, HashMap, String
     from solana.rpc.commitment import Confirmed
    -from solana.publickey import PublicKey
    +from solders.pubkey import Pubkey
     from solana.rpc.api import Client
     
     
    @@ -647,14 +647,10 @@
     )
     
     
    -def get_account_info(client: Client, account_pk: PublicKey):
    +def get_account_info(client: Client, account_pk: Pubkey):
         """Fetch account information from RPC, parse out the data and deserialize"""
         res = client.get_account_info(account_pk, Confirmed, encoding='base64')
    -    data = res['result']
    -    if isinstance(data, dict):
    -        return account_schema.parse(base64.urlsafe_b64decode(data['value']['data'][0]))
    -    else:
    -        raise AttributeError(f'Unknown RPC result {data}')
    +    return account_schema.parse(res.value.data)
     
     # Results in or similar
     # => Container:
    @@ -662,7 +658,7 @@
     # =>     map_length = 109
     # =>     map = {'Happy': 'New Year!', 'newKey': 'A new value',
     # =>            'python key': 'python value', 'ts key': 'ts first value'}
    -
    use {
    +
    use {
         arrayref::*,
         borsh::{BorshDeserialize, BorshSerialize},
         std::{collections::BTreeMap, error::Error},
    @@ -766,8 +762,7 @@
     }
     
     entry();
    -
    import base64
    -from borsh_construct import U8, U16, U32, String, HashMap
    +
    from borsh_construct import U8, U16, U32, String, HashMap
     
     # Schema to deserialize various types
     primitive_schema = CStruct(
    @@ -811,7 +806,7 @@
         # =>        4
         # =>        5
         # =>    MAP_STRING_STRING = {'cookbook': 'recipe', 'recipe': 'ingredient'}
    -
    fn main() {}
    +
    fn main() {}
     
     #[cfg(test)]
     mod tests {
    @@ -1021,6 +1016,6 @@
         }
     }
     

    Resources

    - + diff --git a/docs/.vuepress/dist/kr/index.html b/docs/.vuepress/dist/kr/index.html index fc195ec82..d096e69de 100644 --- a/docs/.vuepress/dist/kr/index.html +++ b/docs/.vuepress/dist/kr/index.html @@ -23,11 +23,11 @@ } Cooking with Solana | Solana Cookbook - +

    Cooking with Solana

    Solana Cookbook은 Solana 앱을 만들기 위한 필수적인 개념들과 자료들을 제공하는 개발자 문서입니다. 각 개념과 참고 자료는 추가 상세한 내용들과 사용 예를 제공하며 Solana 개발 측면에 초점을 둡니다.

    Contributing

    Cookbook은 새로운 Solana 개발자들이 기여하기 쉬운 방향으로 설계되었습니다. 만약 무엇을 어떻게 해야 할지 모르겠다면 솔라나를 배우기 위해 이 Cookbook에 기여해보세요!.

    모든 열린 이슈는 여기open in new window, Contribution 가이드는 여기open in new window에서 확인할 수 있습니다. 만약, Cookbook이 제안을 놓치고 있다면, 부디 이슈를 추가해주세요.

    How to Read the Cookbook

    Solana Cookbook은 각각 다른 목적의 섹션들로 나뉘어있습니다.

    섹션설명
    Core Concepts개발을 위해 알기 좋은 Solana의 기본 구성 요소들
    Guides개발 방법들에 대한 간단한 가이드들
    References흔히 사용되는 코드들에 대한 자료
    Last Updated:
    - + diff --git a/docs/.vuepress/dist/kr/references/accounts.html b/docs/.vuepress/dist/kr/references/accounts.html index 352d08b34..ef082636a 100644 --- a/docs/.vuepress/dist/kr/references/accounts.html +++ b/docs/.vuepress/dist/kr/references/accounts.html @@ -23,7 +23,7 @@ } Accounts | Solana Cookbook - + @@ -998,7 +998,7 @@ programId: programId, }) ); -

    How to get account balance

    Press </> button to view full source
    import {
    +

    How to get account balance

    Press </> button to view full source
    import {
       clusterApiUrl,
       Connection,
       PublicKey,
    @@ -1034,22 +1034,47 @@
         );
     }
     
    from solana.publickey import Keypair
    +
    from solders.keypair import Keypair
     from solana.rpc.api import Client
     
     client = Client("https://api.devnet.solana.com")
     
     key_pair = Keypair()
    -public_key = key_pair.public_key
    +public_key = key_pair.pubkey()
     
     print(client.get_balance(public_key))
     
    // clang++ get_balance.cpp -o get_balance -std=c++17 -lssl -lcrypto -lsodium
    +
    +#include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +  Connection connection("https://api.devnet.solana.com");
    +
    +  auto key_pair = Keypair::generate();
    +
    +  auto public_key = key_pair.public_key;
    +  std::cout << "public_key = " << public_key.to_base58() << std::endl;
    +
    +  uint64_t balance = connection.get_balance(public_key).unwrap();
    +  std::cout << "balance = " << balance << std::endl;
    +
    +  return 0;
    +}
    +

    TIP

    만약 Token balance를 얻고 싶다면 당신은 Token Account의 address를 알 필요가 있습니다. 더 자세한 정보는 Token References를 참조하세요.

    - + diff --git a/docs/.vuepress/dist/kr/references/basic-transactions.html b/docs/.vuepress/dist/kr/references/basic-transactions.html index 2521a82b6..c9c7427d7 100644 --- a/docs/.vuepress/dist/kr/references/basic-transactions.html +++ b/docs/.vuepress/dist/kr/references/basic-transactions.html @@ -23,7 +23,7 @@ } Sending Transactions | Solana Cookbook - + @@ -76,31 +76,31 @@ await sendAndConfirmTransaction(connection, transferTransaction, [fromKeypair]);
    from solana.rpc.api import Client
    -from solana.keypair import Keypair
    +from solders.keypair import Keypair
     from solana.transaction import Transaction
    -from solana.system_program import TransferParams, transfer
    +from solders.system_program import TransferParams, transfer
     
     LAMPORT_PER_SOL = 1000000000
     
     client: Client = Client("https://api.devnet.solana.com")
     
    -sender = Keypair.generate()
    -receiver = Keypair.generate()
    +sender = Keypair()
    +receiver = Keypair()
     
    -airdrop = client.request_airdrop(sender.public_key, 1 * LAMPORT_PER_SOL)
    -airdrop_signature = airdrop["result"]
    +airdrop = client.request_airdrop(sender.pubkey(), 1 * LAMPORT_PER_SOL)
    +airdrop_signature = airdrop.value
     client.confirm_transaction(airdrop_signature)
     
     transaction = Transaction().add(transfer(TransferParams(
    -    from_pubkey=sender.public_key,
    -    to_pubkey=receiver.public_key,
    +    from_pubkey=sender.pubkey(),
    +    to_pubkey=receiver.pubkey(),
         lamports=1_000_000)
     ))
     
     client.send_transaction(transaction, sender)
     
    - + diff --git a/docs/.vuepress/dist/kr/references/keypairs-and-wallets.html b/docs/.vuepress/dist/kr/references/keypairs-and-wallets.html index 245562ef8..0a40dad65 100644 --- a/docs/.vuepress/dist/kr/references/keypairs-and-wallets.html +++ b/docs/.vuepress/dist/kr/references/keypairs-and-wallets.html @@ -23,20 +23,35 @@ } Keypairs and Wallets | Solana Cookbook - + -

    Keypairs and Wallets

    How to generate a new Keypair

    Keypair 또는 Wallet을 요구하는 다양한 Solana 라이브러리들에 대해 당신은 많은 다른 액션들을 취할 수 있습니다. 만약 당신이 wallet에 연결하고 있다면 걱정할 필요가 없습니다. 하지만 당신이 keypair가 필요하다면, 하나를 생성할 필요가 있습니다.

    Press </> button to view full source
    import { Keypair } from "@solana/web3.js";
    +    

    Keypairs and Wallets

    How to generate a new Keypair

    Keypair 또는 Wallet을 요구하는 다양한 Solana 라이브러리들에 대해 당신은 많은 다른 액션들을 취할 수 있습니다. 만약 당신이 wallet에 연결하고 있다면 걱정할 필요가 없습니다. 하지만 당신이 keypair가 필요하다면, 하나를 생성할 필요가 있습니다.

    Press </> button to view full source
    import { Keypair } from "@solana/web3.js";
     
     (async () => {
       let keypair = Keypair.generate();
     })();
     
    from solana.keypair import Keypair
    +
    from solders.keypair import Keypair
     
     keypair = Keypair()
     
    // clang++ generate_keypair.cpp -o generate_keypair -std=c++17 -lssl -lcrypto -lsodium
    +
    +#include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +  auto key_pair = Keypair::generate();
    +
    +  auto public_key = key_pair.public_key;
    +  std::cout << "public_key = " << public_key.to_base58() << std::endl;
    +
    +  return 0;
    +}
    +
    use solana_sdk::signature::{Keypair};
     
     fn main() {
    @@ -47,7 +62,7 @@
     
     # pubkey: 9ZNTfG4NyQgxy2SWjSiQoUyBPEvXT2xo7fKc5hPYYJ7b
     

    How to restore a Keypair from a secret

    만약 당신이 secret을 이미 가지고 있다면, 당신은 dApp을 테스트하기 위해 secret으로부터 Keypair를 얻을 수 있습니다.

    1. Bytes로부터
    Press </> button to view full source
    import { Keypair } from "@solana/web3.js";
    +

    How to restore a Keypair from a secret

    만약 당신이 secret을 이미 가지고 있다면, 당신은 dApp을 테스트하기 위해 secret으로부터 Keypair를 얻을 수 있습니다.

    1. Bytes로부터
    Press </> button to view full source
    import { Keypair } from "@solana/web3.js";
     
     (async () => {
       const keypair = Keypair.fromSecretKey(
    @@ -67,7 +82,7 @@
         121, 35, 172, 247, 68, 251, 226, 218, 48, 63, 176, 109, 168, 89, 238, 135,
       ])
     );
    -
    from solana.keypair import Keypair
    +
    from solders.keypair import Keypair
     
     secret_key= [
             174, 47, 154, 16, 202, 193, 206, 113, 199, 190, 53, 133, 169, 175, 31, 56, 222, 53, 138,
    @@ -76,8 +91,8 @@
             63, 176, 109, 168, 89, 238, 135,
         ]
         
    -keypair = Keypair.from_secret_key(bytes(secret_key))
    -print("Created Keypair with Public Key: {}".format(keypair.public_key))
    +keypair = Keypair.from_bytes(secret_key)
    +print("Created Keypair with Public Key: {}".format(keypair.pubkey()))
     
    use solana_sdk::signature::{Keypair, Signer};
    +keypair = Keypair.from_bytes(secret_key)
    +
    // clang++ keypair_from_seed.cpp -o keypair_from_seed -std=c++17 -lssl -lcrypto -lsodium
    +
    +#include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +  const uint8_t bytes[] = {
    +    174, 47, 154, 16, 202, 193, 206, 113, 199, 190, 53, 133, 169, 175, 31, 56, 222, 53, 138,
    +    189, 224, 216, 117, 173, 10, 149, 53, 45, 73, 251, 237, 246, 15, 185, 186, 82, 177, 240,
    +    148, 69, 241, 227, 167, 80, 141, 89, 240, 121, 121, 35, 172, 247, 68, 251, 226, 218, 48,
    +    63, 176, 109, 168, 89, 238, 135,
    +  };
    +  Keypair key_pair = Keypair::from_seed(bytes);
    +  std::cout << "Created Keypair with Public Key: " << key_pair.public_key.to_base58() << std::endl;
    +}
    +
    use solana_sdk::signature::{Keypair, Signer};
     
     fn main() {
         let secret_key: [u8; 64] = [
    @@ -126,14 +164,13 @@
         "5MaiiCavjCmn9Hs1o3eznqDEhRwxo7pXiAYez7keQUviUkauRiTMD8DrESdrNjN8zd9mTmVhRvBJeg5vhyvgrAhG"
       )
     );
    -
    import base58
    -from solana.keypair import Keypair
    +
    from solders.keypair import Keypair
     
     b58_string = "5MaiiCavjCmn9Hs1o3eznqDEhRwxo7pXiAYez7keQUviUkauRiTMD8DrESdrNjN8zd9mTmVhRvBJeg5vhyvgrAhG"
    -keypair = Keypair.from_secret_key(base58.b58decode(b58_string)
    -print("Created Keypair with Public Key: {}".format(keypair.public_key))
    -
    use solana_sdk::signature::{Keypair, Signer};
     
     fn main() {
    @@ -146,7 +183,7 @@
     

    How to verify a Keypair

    keypair가 주어졌다면 당신은 secret이 주어진 public key와 일치하는지 검증할 수 있습니다.

    Press </> button to view full source
    import { Keypair, PublicKey } from "@solana/web3.js";
    +

    How to verify a Keypair

    keypair가 주어졌다면 당신은 secret이 주어진 public key와 일치하는지 검증할 수 있습니다.

    Press </> button to view full source
    import { Keypair, PublicKey } from "@solana/web3.js";
     
     (async () => {
       const publicKey = new PublicKey(
    @@ -174,10 +211,10 @@
     );
     console.log(keypair.publicKey.toBase58() === publicKey.toBase58());
     // true
    -
    from solana.keypair import Keypair
    -from solana.publickey import PublicKey
    +
    from solders.keypair import Keypair
    +from solders.pubkey import Pubkey
     
    -public_key = PublicKey("24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p")
    +public_key = Pubkey.from_string("24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p")
     
     keys = [
             174, 47, 154, 16, 202, 193, 206, 113, 199, 190, 53, 133, 169, 175, 31, 56, 222, 53, 138,
    @@ -185,11 +222,11 @@
             148, 69, 241, 227, 167, 80, 141, 89, 240, 121, 121, 35, 172, 247, 68, 251, 226, 218, 48,
             63, 176, 109, 168, 89, 238, 135,
         ]
    -keypair = Keypair.from_secret_key(bytes(keys))
    +keypair = Keypair.from_bytes(keys)
     
    -print(keypair.public_key.to_base58() == public_key.to_base58())
    +print(keypair.pubkey() == public_key)
     # True
    -
    // clang++ verify_keypair.cpp -o verify_keypair -std=c++17 -lssl -lcrypto -lsodium
    +
    +#include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +  PublicKey public_key = PublicKey("24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p");
    +
    +  const uint8_t bytes[] = {
    +    174, 47, 154, 16, 202, 193, 206, 113, 199, 190, 53, 133, 169, 175, 31, 56, 222, 53, 138,
    +    189, 224, 216, 117, 173, 10, 149, 53, 45, 73, 251, 237, 246, 15, 185, 186, 82, 177, 240,
    +    148, 69, 241, 227, 167, 80, 141, 89, 240, 121, 121, 35, 172, 247, 68, 251, 226, 218, 48,
    +    63, 176, 109, 168, 89, 238, 135,
    +  };
    +  Keypair key_pair = Keypair::from_seed(bytes);
    +
    +  std::cout << (public_key.to_base58() == key_pair.public_key.to_base58()) << std::endl;
    +}
    +
    solana-keygen verify <PUBKEY> prompt://
     

    How to check if a public key has an associated private key

    특별한 케이스 (e.g. a Program Derived Address)에서, public key들은 연관된 private key를 가지고 있지 않을지 모릅니다. 당신은 이 public key가 ed25519 곡선에 놓여있는지를 확인함으로써 이것을 체크할 수 있습니다. 이 곡선에 놓여있는 public key들은 지갑을 갖고 있는 사용자들에 의해서만 다뤄질 수 있습니다.

    Press </> button to view full source
    import { PublicKey } from "@solana/web3.js";
    +

    How to check if a public key has an associated private key

    특별한 케이스 (e.g. a Program Derived Address)에서, public key들은 연관된 private key를 가지고 있지 않을지 모릅니다. 당신은 이 public key가 ed25519 곡선에 놓여있는지를 확인함으로써 이것을 체크할 수 있습니다. 이 곡선에 놓여있는 public key들은 지갑을 갖고 있는 사용자들에 의해서만 다뤄질 수 있습니다.

    Press </> button to view full source
    import { PublicKey } from "@solana/web3.js";
     
     (async function () {
       // Note that Keypair.generate() will always give a public key that is valid for users
    @@ -219,20 +287,31 @@
     })();
     
    from solana.keypair import Keypair
    -from solana.publickey import PublicKey
    -from solana.utils.ed25519_base import is_on_curve
    +
    from solders.pubkey import Pubkey
     
     # Note that Keypair() will always give a public key that is valid for users
    -key = PublicKey('5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY') # Valid public key
    -print(is_on_curve(key)) # Lies on the ed25519 curve and is suitable for users
    +key = Pubkey.from_string('5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY') # Valid public key
    +print(key.is_on_curve()) # Lies on the ed25519 curve and is suitable for users
    +
    +off_curve_address = Pubkey.from_string('4BJXYkfvg37zEmBbsacZjeQDpTNx91KppxFJxRqrz48e') # Valid public key
    +print(off_curve_address.is_on_curve()) # Not on the ed25519 curve, therefore not suitable for users
    +
    +error_pubkey = Pubkey.from_string("testPubkey"); # Is not a valid public key
    +
    #include <iostream>
    +#include <solana_sdk.h>
    +
    +int main()
    +{
    +    auto public_key = PublicKey("5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY");
     
    -off_curve_address = PublicKey('4BJXYkfvg37zEmBbsacZjeQDpTNx91KppxFJxRqrz48e') # Valid public key
    -print(PublicKey._is_on_curve(off_curve_address)) # Not on the ed25519 curve, therefore not suitable for users
    +    std::cout << public_key.is_on_curve() << std::endl;
     
    -error_pubkey = PublicKey("testPubkey"); # Is not a valid public key
    -
    use solana_sdk::pubkey::{Pubkey};
     use std::str::FromStr;
     
    @@ -274,16 +353,16 @@
       "pill tomorrow foster begin walnut borrow virtual kick shift mutual shoe scatter";
     const seed = bip39.mnemonicToSeedSync(mnemonic, ""); // (mnemonic, password)
     const keypair = Keypair.fromSeed(seed.slice(0, 32));
    -
    from solana.keypair import Keypair
    +
    from solders.keypair import Keypair
     from mnemonic import Mnemonic
     
     mnemo = Mnemonic("english")
     seed = mnemo.to_seed("pill tomorrow foster begin walnut borrow virtual kick shift mutual shoe scatter")
    -keypair = Keypair.from_secret_key(seed)
    -print("Created Keypair with Public Key: {}".format(keypair.public_key)
    +keypair = Keypair.from_bytes(seed)
    +print("Created Keypair with Public Key: {}".format(keypair.pubkey()))
     
    solana-keygen recover
     
    1. BIP44 (HD 지갑으로도 알려진 다중 지갑)

    당신은 하나의 seed로부터 다중 지갑을 만들 수 있습니다. - 'Hierarchical Deterministic wallets' or HD wallets으로도 알려진:

    Press </> button to view full source
    import { Keypair } from "@solana/web3.js";
    @@ -311,7 +390,7 @@
     }
     
    solana-keygen recover 'prompt:?key=0/0'
     

    How to generate a vanity address

    Vanity publickeys 또는 custom addresses는 특별한 문자들로 시작하는 key들입니다. 예를들어, 어떤 사람은 publickey가 "elv1s" 또는 "cook"으로 시작하길 원할 수도 있습니다. 이것들은 다른 사람들이 이 key가 누구의 것인지 기억할 수 있게 도와줍니다. 즉 이 key를 더 쉽게 식별 가능하게 만들어 줍니다.

    Note: 당신의 vanity address에 문자들이 많을수록 더 오래 걸립니다.

    WARNING

    이 작업을 위해서는 CLI를 사용해야 합니다. Python 과 TypeScript 예제들은 보여주기 위한 목적으로 CLI보다 훨씬 느립니다.

    Press </> button to view full source
    import { Keypair } from "@solana/web3.js";
    +

    How to generate a vanity address

    Vanity publickeys 또는 custom addresses는 특별한 문자들로 시작하는 key들입니다. 예를들어, 어떤 사람은 publickey가 "elv1s" 또는 "cook"으로 시작하길 원할 수도 있습니다. 이것들은 다른 사람들이 이 key가 누구의 것인지 기억할 수 있게 도와줍니다. 즉 이 key를 더 쉽게 식별 가능하게 만들어 줍니다.

    Note: 당신의 vanity address에 문자들이 많을수록 더 오래 걸립니다.

    WARNING

    이 작업을 위해서는 CLI를 사용해야 합니다. Python 과 TypeScript 예제들은 보여주기 위한 목적으로 CLI보다 훨씬 느립니다.

    Press </> button to view full source
    import { Keypair } from "@solana/web3.js";
     
     (async () => {
       let keypair = Keypair.generate();
    @@ -323,17 +402,36 @@
     while (!keypair.publicKey.toBase58().startsWith("elv1s")) {
       keypair = Keypair.generate();
     }
    -
    from solana.keypair import Keypair
    +
    from solders.keypair import Keypair
     
     keypair = Keypair()
    -while(str(keypair.public_key)[:5]!="elv1s") :
    +while(str(keypair.pubkey())[:5]!="elv1s") :
         keypair = Keypair()
         
    -print("Created Keypair with Public Key: {}".format(keypair.public_key))
    +print("Created Keypair with Public Key: {}".format(keypair.pubkey()))
     
    solana-keygen grind --starts-with e1v1s:1
    +
    // clang++ vanity_keypair.cpp -o vanity_keypair -std=c++17 -lssl -lcrypto -lsodium
    +
    +#include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +  auto key_pair = Keypair::generate();
    +
    +  while (key_pair.public_key.to_base58().substr(0, 5) != "elv1s") {
    +    key_pair = Keypair::generate();
    +  }
    +
    +  std::cout << "Created Keypair with Public Key: " << key_pair.public_key.to_base58() << std::endl;
    +}
    +
    solana-keygen grind --starts-with e1v1s:1
     

    How to sign and verify messages with wallets

    keypair의 주된 기능은 message들에 서명하고 이 서명을 검증 가능하게 만드는 것입니다. 서명에 대한 검증은 수신자가 이 데이터가 특정 private key의 소유자에 의해 서명되었다는 것을 확신할 수 있게 해 줍니다.

    이걸 하기 위해 우리는 TweetNaClopen in new window 라이브러리를 import 할 것입니다.

    Press </> button to view full source
    import { Keypair } from "@solana/web3.js";
     import nacl from "tweetnacl";
    @@ -372,41 +470,25 @@
     );
     
     console.log(result);
    -
    from nacl.signing import VerifyKey
    -from solana.keypair import Keypair
    +
    from solders.keypair import Keypair
     
     secret_key =  [
           174, 47, 154, 16, 202, 193, 206, 113, 199, 190, 53, 133, 169, 175, 31, 56, 222, 53, 138, 189, 224, 216, 117,
           173, 10, 149, 53, 45, 73, 251, 237, 246, 15, 185, 186, 82, 177, 240, 148, 69, 241, 227, 167, 80, 141, 89, 240,
           121, 121, 35, 172, 247, 68, 251, 226, 218, 48, 63, 176, 109, 168, 89, 238, 135,
    -    ]
    -     
    -keypair = Keypair.from_secret_key(bytes(secret_key))
    -pubkey_bytes = bytes(keypair.public_key)
    -message = "The quick brown fox jumps over the lazy dog"
    -message_bytes = bytes(message,'utf8')
    -signed_message = keypair.sign(message_bytes)
    -
    -verify_sign = VerifyKey(
    -    pubkey_bytes
    -).verify(
    -    smessage=message_bytes,  
    -    signature=signed_message.signature
    -)
    -
    -#Returns original message if the signature has not been tampered with
    -print(verify_sign)
    -

    How to connect to a wallet

    Solana의 wallet-adapteropen in new window 라이브러리들은 client-side에서 wallet 연결 관리를 쉽게 해 줍니다.

    React

    요구되는 의존성들을 설치하기 위해 아래의 명령어를 실행하세요:

    yarn add @solana/wallet-adapter-react @solana/wallet-adapter-react-ui @solana/wallet-adapter-base @solana/wallet-adapter-wallets
    +    ] 
    +keypair = Keypair.from_bytes(secret_key)
    +message = b"The quick brown fox jumps over the lazy dog"
    +signature = keypair.sign_message(message)
    +verify_sign = signature.verify(keypair.pubkey(), message)
    +
    +print(verify_sign) # bool
    +

    How to connect to a wallet

    Solana의 wallet-adapteropen in new window 라이브러리들은 client-side에서 wallet 연결 관리를 쉽게 해 줍니다.

    React

    요구되는 의존성들을 설치하기 위해 아래의 명령어를 실행하세요:

    yarn add @solana/wallet-adapter-react @solana/wallet-adapter-react-ui @solana/wallet-adapter-base @solana/wallet-adapter-wallets
     

    React의 wallet-adapter 라이브러리들은 hook들과 useWallet, WalletProvider, useConnection, 그리고 ConnectionProvider로 불리는 Context provider들을 통해 지갑 연결 상태를 지속하고 접근할 수 있게 해 줍니다.

    추가적으로, 우리는 연결 modal의 껐다 켰다하는 useWalletModal을 사용해 유저들이 연결하도록 유도할 수 있습니다. useWalletModal@solana/wallet-adapter-react-ui에 있는 WalletModalProvider를 가진 앱을 감싸고 있습니다. 연결 modal은 우리가 연결 흐름을 다룰 수 있게 해 줄 것입니다. 그래서 우리는 지갑이 연결되었을 때 동안 단지 수신하면 됩니다. 우리는 userWallet 응답이 null이 아닌 wallet 속성을 가질 때, 지갑이 연결된 것을 알 수 있습니다. 반대로, 만약 이 속성이 null이라면 지갑이 연결되지 않은 것을 알 수 있습니다.

    Press </> button to view full source
    import React, { useMemo, FC, PropsWithChildren } from "react";
     import {
       ConnectionProvider,
    @@ -593,6 +675,6 @@
     <WalletMultiButton />
     {/if}
     
    Last Updated:
    - + diff --git a/docs/.vuepress/dist/kr/references/local-development.html b/docs/.vuepress/dist/kr/references/local-development.html index e856289ef..fa2b06279 100644 --- a/docs/.vuepress/dist/kr/references/local-development.html +++ b/docs/.vuepress/dist/kr/references/local-development.html @@ -23,12 +23,12 @@ } Local Development | Solana Cookbook - +

    Local Development

    Starting a Local Validator

    당신의 Program 코드를 로컬에서 테스트하는 것은 devnet에서 테스트하는 것보다 더 신뢰할 수 있습니다. 그리고 devnet에 보내기 전에 테스트할 수 있습니다.

    solana tool suite를 설치하고 실행함으로써 local-test-validator를 구축할 수 있습니다.

    solana-test-validator
    -

    local-test-validator를 사용하는 것은 아래의 이점들을 가지고 있습니다:

    • RPC 제한이 없음
    • airdrop 제한이 없음
    • 직접적인 on-chain 프로그램 배포 (--bpf-program ...)
    • public cluster로부터 Program들을 포함한 Account들에 대한 복사 (--clone ...)
    • Transaction 히스토리 유지에 대한 설정 가능 (--limit-ledger-size ...)
    • epoch 길이에 대한 설정 가능 (--slots-per-epoch ...)
    • 임의의 slot으로 건너뛰기 (--warp-slot ...)

    Connecting to Environments

    Solana에서 개발할 때 우리는 특저 RPC API endpoint에 연결할 필요가 있을 것입니다. Solana는 3 개의 public 개발 환경을 가지고 있습니다.

    • mainnet-beta https://api.mainnet-beta.solana.com
    • devnet https://api.devnet.solana.com
    • testnet https://api.testnet.solana.com
    Press </> button to view full source
    import { clusterApiUrl, Connection } from "@solana/web3.js";
    +

    local-test-validator를 사용하는 것은 아래의 이점들을 가지고 있습니다:

    • RPC 제한이 없음
    • airdrop 제한이 없음
    • 직접적인 on-chain 프로그램 배포 (--bpf-program ...)
    • public cluster로부터 Program들을 포함한 Account들에 대한 복사 (--clone ...)
    • Transaction 히스토리 유지에 대한 설정 가능 (--limit-ledger-size ...)
    • epoch 길이에 대한 설정 가능 (--slots-per-epoch ...)
    • 임의의 slot으로 건너뛰기 (--warp-slot ...)

    Connecting to Environments

    Solana에서 개발할 때 우리는 특저 RPC API endpoint에 연결할 필요가 있을 것입니다. Solana는 3 개의 public 개발 환경을 가지고 있습니다.

    • mainnet-beta https://api.mainnet-beta.solana.com
    • devnet https://api.devnet.solana.com
    • testnet https://api.testnet.solana.com
    Press </> button to view full source
    import { clusterApiUrl, Connection } from "@solana/web3.js";
     
     (async () => {
       const connection = new Connection(clusterApiUrl("mainnet-beta"), "confirmed");
    @@ -38,6 +38,15 @@
     
     client = Client("https://api.mainnet-beta.solana.com")
     
    #include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +    Connection connection("https://api.mainnet-beta.solana.com");
    +    return 0;
    +}
    +
    use solana_client::rpc_client::RpcClient;
     use solana_sdk::commitment_config::CommitmentConfig;
     
    @@ -49,7 +58,7 @@
     let client = RpcClient::new_with_commitment(rpc_url, CommitmentConfig::confirmed());
     
    solana config set --url https://api.mainnet-beta.solana.com
     

    아래 내용에 따라, 당신은 로컬이거나 원격에서 실행하는 사설 cluster에도 연결할 수 있습니다.

    Press </> button to view full source
    import { Connection } from "@solana/web3.js";
    +

    아래 내용에 따라, 당신은 로컬이거나 원격에서 실행하는 사설 cluster에도 연결할 수 있습니다.

    Press </> button to view full source
    import { Connection } from "@solana/web3.js";
     
     (async () => {
       // This will connect you to your local validator
    @@ -60,6 +69,15 @@
     
     client = Client("http://127.0.0.1:8899")
     
    #include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +    Connection connection("http://127.0.0.1:8899");
    +    return 0;
    +}
    +
    use solana_client::rpc_client::RpcClient;
     use solana_sdk::commitment_config::CommitmentConfig;
     
    @@ -71,7 +89,7 @@
     let client = RpcClient::new_with_commitment(rpc_url, CommitmentConfig::confirmed());
     
    solana config set --url http://privaterpc.com
     

    Subscribing to Events

    Websocket들은 당신이 특정 이벤트들을 구독할 수 있는 pub/sub 인터페이스를 제공합니다. 잦은 업데이트를 위해 주기적으로 HTTP endpoint에 핑을 보내는 것 대신에, 당신은 업데이트가 발생했을 때 바로 수신할 수 있습니다.

    Solana의 web3 Connectionopen in new window은 websocket endpoint를 만들어낼 수 있고 당신이 Connection 인스턴스를 생성할 때 websocket client를 등록할 수 있습니다. (see source code hereopen in new window)

    Connection 클래스는 이벤트 emmitter와 같이 on으로 시작하는 pub/sub 메소드를 노출한다. 당신이 이 listener 메소드들을 호출할 때, 이것은 Connection 인스턴스의 websocket client에 새로운 구독을 등록합니다. 아래에서 우리가 사용하는 pub/sub 예제는 onAccountChangeopen in new window입니다. 이 callbacck은 인자들을 통해 업데이트된 상태 데이터를 제공할 것입니다. (see AccountChangeCallbackopen in new window as an example).

    Press </> button to view full source
    import { clusterApiUrl, Connection, Keypair } from "@solana/web3.js";
    +

    Subscribing to Events

    Websocket들은 당신이 특정 이벤트들을 구독할 수 있는 pub/sub 인터페이스를 제공합니다. 잦은 업데이트를 위해 주기적으로 HTTP endpoint에 핑을 보내는 것 대신에, 당신은 업데이트가 발생했을 때 바로 수신할 수 있습니다.

    Solana의 web3 Connectionopen in new window은 websocket endpoint를 만들어낼 수 있고 당신이 Connection 인스턴스를 생성할 때 websocket client를 등록할 수 있습니다. (see source code hereopen in new window)

    Connection 클래스는 이벤트 emmitter와 같이 on으로 시작하는 pub/sub 메소드를 노출한다. 당신이 이 listener 메소드들을 호출할 때, 이것은 Connection 인스턴스의 websocket client에 새로운 구독을 등록합니다. 아래에서 우리가 사용하는 pub/sub 예제는 onAccountChangeopen in new window입니다. 이 callbacck은 인자들을 통해 업데이트된 상태 데이터를 제공할 것입니다. (see AccountChangeCallbackopen in new window as an example).

    Press </> button to view full source
    import { clusterApiUrl, Connection, Keypair } from "@solana/web3.js";
     
     (async () => {
       // Establish new connect to devnet - websocket client connected to devnet will also be registered here
    @@ -102,7 +120,7 @@
       "confirmed"
     );
     
    import asyncio
    -from solana.keypair import Keypair
    +from solders.keypair import Keypair
     from solana.rpc.websocket_api import connect
     
     async def main():
    @@ -110,7 +128,7 @@
             # Create a Test Wallet
             wallet = Keypair()
             # Subscribe to the Test wallet to listen for events
    -        await websocket.account_subscribe(wallet.public_key)
    +        await websocket.account_subscribe(wallet.pubkey())
             # Capture response from account subscription 
             first_resp = await websocket.recv()
             print("Subscription successful with id {}, listening for events \n".format(first_resp.result))
    @@ -122,13 +140,62 @@
         # Create a Test Wallet
         wallet = Keypair()
         # Subscribe to the Test wallet to listen for events
    -    await websocket.account_subscribe(wallet.public_key)
    +    await websocket.account_subscribe(wallet.pubkey())
         # Capture response from account subscription 
         first_resp = await websocket.recv()
         print("Subscription successful with id {}, listening for events \n".format(first_resp.result))
         updated_account_info = await websocket.recv()
         print(updated_account_info)    
    -
    use solana_client::pubsub_client::PubsubClient;
    +
    // clang++ on_account_change.cpp -o on_account_change -std=c++17 -lssl -lcrypto -lsodium
    +
    +#include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +  Connection connection("https://api.devnet.solana.com");
    +
    +  auto key_pair = Keypair::generate();
    +
    +  int subscriptionId = connection.on_account_change(key_pair.public_key, [&](Result<Account> result) {
    +    Account account = result.unwrap();
    +    std::cout << "owner = " << account.owner.to_base58() << std::endl;
    +    std::cout << "lamports = " << account.lamports << std::endl;
    +    std::cout << "data = " << account.data << std::endl;
    +    std::cout << "executable = " << (account.executable ? "true" : "false") << std::endl;
    +  });
    +
    +  sleep(1);
    +
    +  std::string tx_hash = connection.request_airdrop(key_pair.public_key).unwrap();
    +  std::cout << "tx hash = " << tx_hash << std::endl;
    +
    +  for (int i = 0; i < 10; i++) {
    +    connection.poll();
    +    sleep(1);
    +  }
    +
    +  connection.remove_account_listener(subscriptionId);
    +
    +  return 0;
    +}
    +
    use solana_client::pubsub_client::PubsubClient;
     use solana_client::rpc_config::RpcAccountInfoConfig;
     use solana_sdk::commitment_config::CommitmentConfig;
     use solana_sdk::signature::{Keypair, Signer};
    @@ -177,7 +244,7 @@
     ).unwrap();
     let message = match receiver.recv().unwrap();
     println!("{:?}", message)
    -

    Getting Test SOL

    로컬에서 작업할 때 당신은 Transaction을 보내기 위해 SOL이 필요합니다. non-mainnet 환경에서 당신은 airdrop 해서 당신의 Address에 SOL을 받을 수 있습니다.

    Press </> button to view full source
    import { Connection, Keypair, LAMPORTS_PER_SOL } from "@solana/web3.js";
    +

    Getting Test SOL

    로컬에서 작업할 때 당신은 Transaction을 보내기 위해 SOL이 필요합니다. non-mainnet 환경에서 당신은 airdrop 해서 당신의 Address에 SOL을 받을 수 있습니다.

    Press </> button to view full source
    import { Connection, Keypair, LAMPORTS_PER_SOL } from "@solana/web3.js";
     
     (async () => {
       const keypair = Keypair.generate();
    @@ -201,7 +268,7 @@
     );
     
     await connection.confirmTransaction(airdropSignature);
    -
    from solana.keypair import Keypair
    +
    from solders.keypair import Keypair
     from solana.rpc.api import Client
     
     wallet = Keypair()
    @@ -209,14 +276,32 @@
     client = Client("https://api.devnet.solana.com")
     
     #Input Airdrop amount in LAMPORTS
    -client.request_airdrop(wallet.public_key, 1000000000)
    +client.request_airdrop(wallet.pubkey(), 1000000000)
     
     #Airdrops 1 SOL
     
    use solana_client::rpc_client::RpcClient;
    +
    // clang++ request_airdrop.cpp -o request_airdrop -std=c++17 -lssl -lcrypto -lsodium
    +
    +#include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +  Connection connection("https://api.devnet.solana.com");
    +
    +  auto key_pair = Keypair::generate();
    +
    +  std::string tx_hash = connection.request_airdrop(key_pair.public_key).unwrap();
    +
    +  std::cout << "tx hash = " << tx_hash << std::endl;
    +
    +  return 0;
    +}
    +
    use solana_client::rpc_client::RpcClient;
     use solana_sdk::commitment_config::CommitmentConfig;
     use solana_sdk::native_token::LAMPORTS_PER_SOL;
     use solana_sdk::signature::{Keypair, Signer};
    @@ -267,6 +352,6 @@
     solana-test-validator --bpf-program 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin serum_dex_v3.so --reset
     
    Last Updated:
    - + diff --git a/docs/.vuepress/dist/kr/references/name-service.html b/docs/.vuepress/dist/kr/references/name-service.html index de88cc09b..614f391fa 100644 --- a/docs/.vuepress/dist/kr/references/name-service.html +++ b/docs/.vuepress/dist/kr/references/name-service.html @@ -23,7 +23,7 @@ } Name Service | Solana Cookbook - + @@ -181,7 +181,7 @@ const subDomain = "demo"; // Step 1 -const hashedParentDomain = await getHashedName(mainDomain); +const hashedParentDomain = await getHashedName(parentDomain); const parentDomainKey = await getNameAccountKey( hashedParentDomain, undefined, @@ -260,6 +260,6 @@ const registry = await getTwitterRegistry(connection, handle);
    - + diff --git a/docs/.vuepress/dist/kr/references/nfts.html b/docs/.vuepress/dist/kr/references/nfts.html index 1b5552527..45eaf9317 100644 --- a/docs/.vuepress/dist/kr/references/nfts.html +++ b/docs/.vuepress/dist/kr/references/nfts.html @@ -23,7 +23,7 @@ } NFTs | Solana Cookbook - + @@ -271,11 +271,13 @@ const metaplex = new Metaplex(connection); metaplex.use(keypairIdentity(keypair)); - const mint = new PublicKey("Ay1U9DWphDgc7hq58Yj1yHabt91zTzvV2YJbAWkPNbaK"); + const mintAddress = new PublicKey( + "Ay1U9DWphDgc7hq58Yj1yHabt91zTzvV2YJbAWkPNbaK" + ); - const nft = await metaplex.nfts().findByMint(mint); + const nft = await metaplex.nfts().findByMint({ mintAddress }); - console.log(nft.metadata); + console.log(nft.json); /* { name: 'SMB #139', @@ -302,18 +304,20 @@ } */ })(); -

    How to get the owner of an NFT

    만약 당신이 NFT의 mint key를 갖고 있다면, 그 mint key에 대한 가장 큰 Token Account를 몰래 엿봐서 이 NFT의 현재 소유자를 찾을 수 있습니다.

    NFT들은 1개의 Token을 가진다는 것과 나눌 수 없다는 것을 기억하세요. 이것은 오직 하나의 Token Account만이 그 Token을 가진다는 것을 의미합니다. 그리고 해당 mint key에 대한 모든 다른 Token Account들은 0 balance를 가질 것입니다.

    가장 큰 Token Account가 식별된다면 우리는 이 Account의 소유자를 조회할 수 있습니다.

    Press </> button to view full source
    import { Connection, PublicKey } from "@solana/web3.js";
    +console.log(nft.json);
    +

    How to get the owner of an NFT

    만약 당신이 NFT의 mint key를 갖고 있다면, 그 mint key에 대한 가장 큰 Token Account를 몰래 엿봐서 이 NFT의 현재 소유자를 찾을 수 있습니다.

    NFT들은 1개의 Token을 가진다는 것과 나눌 수 없다는 것을 기억하세요. 이것은 오직 하나의 Token Account만이 그 Token을 가진다는 것을 의미합니다. 그리고 해당 mint key에 대한 모든 다른 Token Account들은 0 balance를 가질 것입니다.

    가장 큰 Token Account가 식별된다면 우리는 이 Account의 소유자를 조회할 수 있습니다.

    Press </> button to view full source
    import { Connection, PublicKey } from "@solana/web3.js";
     
     (async () => {
       const connection = new Connection("https://api.mainnet-beta.solana.com");
    @@ -540,7 +544,7 @@
       metaplex.use(keypairIdentity(keypair));
     
       const owner = new PublicKey("2R4bHmSBHkHAskerTHE6GE1Fxbn31kaD5gHqpsPySVd7");
    -  const allNFTs = await metaplex.nfts().findAllByOwner(owner);
    +  const allNFTs = await metaplex.nfts().findAllByOwner({ owner });
     
       console.log(allNFTs);
     })();
    @@ -551,10 +555,10 @@
     metaplex.use(keypairIdentity(keypair));
     
     const owner = new PublicKey("2R4bHmSBHkHAskerTHE6GE1Fxbn31kaD5gHqpsPySVd7");
    -const allNFTs = await metaplex.nfts().findAllByOwner(owner);
    +const allNFTs = await metaplex.nfts().findAllByOwner({ owner });
     
     console.log(allNFTs);
     
    - + diff --git a/docs/.vuepress/dist/kr/references/offline-transactions.html b/docs/.vuepress/dist/kr/references/offline-transactions.html index 40627ef8a..26384f829 100644 --- a/docs/.vuepress/dist/kr/references/offline-transactions.html +++ b/docs/.vuepress/dist/kr/references/offline-transactions.html @@ -23,7 +23,7 @@ } Sending Offline Transactions | Solana Cookbook - + @@ -157,7 +157,7 @@ `txhash: ${await connection.sendRawTransaction(recoverTx.serialize())}` ); } -

    Partial Sign Transaction

    Transaction이 다수의 서명을 요구할 때, 당신은 부분적으로 서명할 수 있습니다. 그러면 다른 서명자들이 서명한 후에 이것을 network에 브로드캐스팅할 것입니다.

    이것이 유용한 몇 가지 예제들:

    이번 예제에서는 Bob이 Alice에게 그녀의 지불에 대한 응답으로 SPL Token을 보냅니다:

    Press </> button to view full source
    import {
    +

    Partial Sign Transaction

    Transaction이 다수의 서명을 요구할 때, 당신은 부분적으로 서명할 수 있습니다. 그러면 다른 서명자들이 서명한 후에 이것을 network에 브로드캐스팅할 것입니다.

    이것이 유용한 몇 가지 예제들:

    이번 예제에서는 Bob이 Alice에게 그녀의 지불에 대한 응답으로 SPL Token을 보냅니다:

    Press </> button to view full source
    import {
       createTransferCheckedInstruction,
       getAssociatedTokenAddress,
       getMint,
    @@ -457,6 +457,6 @@
     
     console.log(`txhash: ${await connection.sendRawTransaction(tx.serialize())}`);
     
    - + diff --git a/docs/.vuepress/dist/kr/references/programs.html b/docs/.vuepress/dist/kr/references/programs.html index 5cbafb192..006bfc7f8 100644 --- a/docs/.vuepress/dist/kr/references/programs.html +++ b/docs/.vuepress/dist/kr/references/programs.html @@ -23,7 +23,7 @@ } Writing Programs | Solana Cookbook - + @@ -1496,6 +1496,6 @@ } - + diff --git a/docs/.vuepress/dist/kr/references/staking.html b/docs/.vuepress/dist/kr/references/staking.html index 991a5aaf0..c5b0bdb04 100644 --- a/docs/.vuepress/dist/kr/references/staking.html +++ b/docs/.vuepress/dist/kr/references/staking.html @@ -23,7 +23,7 @@ } Staking | Solana Cookbook - + @@ -641,6 +641,6 @@ stakeBalance = await connection.getBalance(stakeAccount.publicKey); console.log(`Stake account balance: ${stakeBalance / LAMPORTS_PER_SOL} SOL`); - + diff --git a/docs/.vuepress/dist/kr/references/token.html b/docs/.vuepress/dist/kr/references/token.html index e96ece354..e544b14c7 100644 --- a/docs/.vuepress/dist/kr/references/token.html +++ b/docs/.vuepress/dist/kr/references/token.html @@ -23,7 +23,7 @@ } Interacting with Tokens | Solana Cookbook - + @@ -1273,6 +1273,6 @@ mint: mint, }); - + diff --git a/docs/.vuepress/dist/references/accounts.html b/docs/.vuepress/dist/references/accounts.html index 75c615553..85a5ba126 100644 --- a/docs/.vuepress/dist/references/accounts.html +++ b/docs/.vuepress/dist/references/accounts.html @@ -23,11 +23,11 @@ } Accounts | Solana Cookbook - + -

    Accounts

    How to create a system account

    Create an account that the System Programopen in new window owns. The Solana runtime will grant the owner of an account, access to write to its data or transfer lamports. When creating an account, we have to preallocate a fixed storage space in bytes (space) and enough lamports to cover the rent. Rentopen in new window is a cost incurred to keep accounts alive on Solana.

    Press </> button to view full source
    import {
    +    

    Accounts

    How to create a system account

    Create an account that the System Programopen in new window owns. The Solana runtime will grant the owner of an account, access to write to its data or transfer lamports. When creating an account, we have to preallocate a fixed storage space in bytes (space) and enough lamports to cover the rent. Rentopen in new window is a cost incurred to keep accounts alive on Solana.

    Press </> button to view full source
    import {
       SystemProgram,
       Keypair,
       Transaction,
    @@ -998,7 +998,7 @@
         programId: programId,
       })
     );
    -

    How to get account balance

    Press </> button to view full source
    import {
    +

    How to get account balance

    Press </> button to view full source
    import {
       clusterApiUrl,
       Connection,
       PublicKey,
    @@ -1034,22 +1034,47 @@
         );
     }
     
    from solana.publickey import Keypair
    +
    from solders.keypair import Keypair
     from solana.rpc.api import Client
     
     client = Client("https://api.devnet.solana.com")
     
     key_pair = Keypair()
    -public_key = key_pair.public_key
    +public_key = key_pair.pubkey()
     
     print(client.get_balance(public_key))
     
    // clang++ get_balance.cpp -o get_balance -std=c++17 -lssl -lcrypto -lsodium
    +
    +#include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +  Connection connection("https://api.devnet.solana.com");
    +
    +  auto key_pair = Keypair::generate();
    +
    +  auto public_key = key_pair.public_key;
    +  std::cout << "public_key = " << public_key.to_base58() << std::endl;
    +
    +  uint64_t balance = connection.get_balance(public_key).unwrap();
    +  std::cout << "balance = " << balance << std::endl;
    +
    +  return 0;
    +}
    +

    TIP

    If you want to get a token balance, you will need to know the address of token account. For more information, see Token References

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/references/basic-transactions.html b/docs/.vuepress/dist/references/basic-transactions.html index 048fbe9be..4da126c99 100644 --- a/docs/.vuepress/dist/references/basic-transactions.html +++ b/docs/.vuepress/dist/references/basic-transactions.html @@ -23,11 +23,11 @@ } Sending Transactions | Solana Cookbook - + -

    Sending Transactions

    How to send SOL

    To send SOL, you will need to interact with the SystemProgramopen in new window.

    Press </> button to view full source
    import {
    +    

    Sending Transactions

    How to send SOL

    To send SOL, you will need to interact with the SystemProgramopen in new window.

    Press </> button to view full source
    import {
       Connection,
       Keypair,
       SystemProgram,
    @@ -76,31 +76,31 @@
     
     await sendAndConfirmTransaction(connection, transferTransaction, [fromKeypair]);
     
    from solana.rpc.api import Client
    -from solana.keypair import Keypair
    +from solders.keypair import Keypair
     from solana.transaction import Transaction
    -from solana.system_program import TransferParams, transfer
    +from solders.system_program import TransferParams, transfer
     
     LAMPORT_PER_SOL = 1000000000
     
     client: Client = Client("https://api.devnet.solana.com")
     
    -sender = Keypair.generate()
    -receiver = Keypair.generate()
    +sender = Keypair()
    +receiver = Keypair()
     
    -airdrop = client.request_airdrop(sender.public_key, 1 * LAMPORT_PER_SOL)
    -airdrop_signature = airdrop["result"]
    +airdrop = client.request_airdrop(sender.pubkey(), 1 * LAMPORT_PER_SOL)
    +airdrop_signature = airdrop.value
     client.confirm_transaction(airdrop_signature)
     
     transaction = Transaction().add(transfer(TransferParams(
    -    from_pubkey=sender.public_key,
    -    to_pubkey=receiver.public_key,
    +    from_pubkey=sender.pubkey(),
    +    to_pubkey=receiver.pubkey(),
         lamports=1_000_000)
     ))
     
     client.send_transaction(transaction, sender)
     
    Last Updated:
    - + diff --git a/docs/.vuepress/dist/references/keypairs-and-wallets.html b/docs/.vuepress/dist/references/keypairs-and-wallets.html index 5e288ca04..d384895d3 100644 --- a/docs/.vuepress/dist/references/keypairs-and-wallets.html +++ b/docs/.vuepress/dist/references/keypairs-and-wallets.html @@ -23,20 +23,35 @@ } Keypairs and Wallets | Solana Cookbook - + -

    Keypairs and Wallets

    How to generate a new Keypair

    Many of the different actions you can take with the various Solana libraries require a Keypair or Wallet. If you are connecting to a wallet, you do not have to worry. However, if you are in need of a keypair, you will need to generate one.

    Press </> button to view full source
    import { Keypair } from "@solana/web3.js";
    +    

    Keypairs and Wallets

    How to generate a new Keypair

    Many of the different actions you can take with the various Solana libraries require a Keypair or Wallet. If you are connecting to a wallet, you do not have to worry. However, if you are in need of a keypair, you will need to generate one.

    Press </> button to view full source
    import { Keypair } from "@solana/web3.js";
     
     (async () => {
       let keypair = Keypair.generate();
     })();
     
    from solana.keypair import Keypair
    +
    from solders.keypair import Keypair
     
     keypair = Keypair()
     
    // clang++ generate_keypair.cpp -o generate_keypair -std=c++17 -lssl -lcrypto -lsodium
    +
    +#include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +  auto key_pair = Keypair::generate();
    +
    +  auto public_key = key_pair.public_key;
    +  std::cout << "public_key = " << public_key.to_base58() << std::endl;
    +
    +  return 0;
    +}
    +
    use solana_sdk::signature::{Keypair};
     
     fn main() {
    @@ -47,7 +62,7 @@
     
     # pubkey: 9ZNTfG4NyQgxy2SWjSiQoUyBPEvXT2xo7fKc5hPYYJ7b
     

    How to restore a Keypair from a secret

    If you already have your secret, you can get your Keypair from the secret to test out your dApp.

    1. From Bytes
    Press </> button to view full source
    import { Keypair } from "@solana/web3.js";
    +

    How to restore a Keypair from a secret

    If you already have your secret, you can get your Keypair from the secret to test out your dApp.

    1. From Bytes
    Press </> button to view full source
    import { Keypair } from "@solana/web3.js";
     
     (async () => {
       const keypair = Keypair.fromSecretKey(
    @@ -67,7 +82,7 @@
         121, 35, 172, 247, 68, 251, 226, 218, 48, 63, 176, 109, 168, 89, 238, 135,
       ])
     );
    -
    from solana.keypair import Keypair
    +
    from solders.keypair import Keypair
     
     secret_key= [
             174, 47, 154, 16, 202, 193, 206, 113, 199, 190, 53, 133, 169, 175, 31, 56, 222, 53, 138,
    @@ -76,8 +91,8 @@
             63, 176, 109, 168, 89, 238, 135,
         ]
         
    -keypair = Keypair.from_secret_key(bytes(secret_key))
    -print("Created Keypair with Public Key: {}".format(keypair.public_key))
    +keypair = Keypair.from_bytes(secret_key)
    +print("Created Keypair with Public Key: {}".format(keypair.pubkey()))
     
    use solana_sdk::signature::{Keypair, Signer};
    +keypair = Keypair.from_bytes(secret_key)
    +
    // clang++ keypair_from_seed.cpp -o keypair_from_seed -std=c++17 -lssl -lcrypto -lsodium
    +
    +#include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +  const uint8_t bytes[] = {
    +    174, 47, 154, 16, 202, 193, 206, 113, 199, 190, 53, 133, 169, 175, 31, 56, 222, 53, 138,
    +    189, 224, 216, 117, 173, 10, 149, 53, 45, 73, 251, 237, 246, 15, 185, 186, 82, 177, 240,
    +    148, 69, 241, 227, 167, 80, 141, 89, 240, 121, 121, 35, 172, 247, 68, 251, 226, 218, 48,
    +    63, 176, 109, 168, 89, 238, 135,
    +  };
    +  Keypair key_pair = Keypair::from_seed(bytes);
    +  std::cout << "Created Keypair with Public Key: " << key_pair.public_key.to_base58() << std::endl;
    +}
    +
    use solana_sdk::signature::{Keypair, Signer};
     
     fn main() {
         let secret_key: [u8; 64] = [
    @@ -126,14 +164,13 @@
         "5MaiiCavjCmn9Hs1o3eznqDEhRwxo7pXiAYez7keQUviUkauRiTMD8DrESdrNjN8zd9mTmVhRvBJeg5vhyvgrAhG"
       )
     );
    -
    import base58
    -from solana.keypair import Keypair
    +
    from solders.keypair import Keypair
     
     b58_string = "5MaiiCavjCmn9Hs1o3eznqDEhRwxo7pXiAYez7keQUviUkauRiTMD8DrESdrNjN8zd9mTmVhRvBJeg5vhyvgrAhG"
    -keypair = Keypair.from_secret_key(base58.b58decode(b58_string)
    -print("Created Keypair with Public Key: {}".format(keypair.public_key))
    -
    use solana_sdk::signature::{Keypair, Signer};
     
     fn main() {
    @@ -146,7 +183,7 @@
     

    How to verify a Keypair

    If you are given a keypair, you can verify whether or not the secret matches the given public key

    Press </> button to view full source
    import { Keypair, PublicKey } from "@solana/web3.js";
    +

    How to verify a Keypair

    If you are given a keypair, you can verify whether or not the secret matches the given public key

    Press </> button to view full source
    import { Keypair, PublicKey } from "@solana/web3.js";
     
     (async () => {
       const publicKey = new PublicKey(
    @@ -174,10 +211,10 @@
     );
     console.log(keypair.publicKey.toBase58() === publicKey.toBase58());
     // true
    -
    from solana.keypair import Keypair
    -from solana.publickey import PublicKey
    +
    from solders.keypair import Keypair
    +from solders.pubkey import Pubkey
     
    -public_key = PublicKey("24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p")
    +public_key = Pubkey.from_string("24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p")
     
     keys = [
             174, 47, 154, 16, 202, 193, 206, 113, 199, 190, 53, 133, 169, 175, 31, 56, 222, 53, 138,
    @@ -185,11 +222,11 @@
             148, 69, 241, 227, 167, 80, 141, 89, 240, 121, 121, 35, 172, 247, 68, 251, 226, 218, 48,
             63, 176, 109, 168, 89, 238, 135,
         ]
    -keypair = Keypair.from_secret_key(bytes(keys))
    +keypair = Keypair.from_bytes(keys)
     
    -print(keypair.public_key.to_base58() == public_key.to_base58())
    +print(keypair.pubkey() == public_key)
     # True
    -
    // clang++ verify_keypair.cpp -o verify_keypair -std=c++17 -lssl -lcrypto -lsodium
    +
    +#include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +  PublicKey public_key = PublicKey("24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p");
    +
    +  const uint8_t bytes[] = {
    +    174, 47, 154, 16, 202, 193, 206, 113, 199, 190, 53, 133, 169, 175, 31, 56, 222, 53, 138,
    +    189, 224, 216, 117, 173, 10, 149, 53, 45, 73, 251, 237, 246, 15, 185, 186, 82, 177, 240,
    +    148, 69, 241, 227, 167, 80, 141, 89, 240, 121, 121, 35, 172, 247, 68, 251, 226, 218, 48,
    +    63, 176, 109, 168, 89, 238, 135,
    +  };
    +  Keypair key_pair = Keypair::from_seed(bytes);
    +
    +  std::cout << (public_key.to_base58() == key_pair.public_key.to_base58()) << std::endl;
    +}
    +
    solana-keygen verify <PUBKEY> prompt://
     

    How to check if a public key has an associated private key

    In certain special cases (e.g. a Program Derived Address), public keys may not have a private key associated with them. You can check this by looking to see if the public key lies on the ed25519 curve. Only public keys that lie on the curve can be controlled by users with wallets.

    Press </> button to view full source
    import { PublicKey } from "@solana/web3.js";
    +

    How to check if a public key has an associated private key

    In certain special cases (e.g. a Program Derived Address), public keys may not have a private key associated with them. You can check this by looking to see if the public key lies on the ed25519 curve. Only public keys that lie on the curve can be controlled by users with wallets.

    Press </> button to view full source
    import { PublicKey } from "@solana/web3.js";
     
     (async function () {
       // Note that Keypair.generate() will always give a public key that is valid for users
    @@ -219,20 +287,31 @@
     })();
     
    from solana.keypair import Keypair
    -from solana.publickey import PublicKey
    -from solana.utils.ed25519_base import is_on_curve
    +
    from solders.pubkey import Pubkey
     
     # Note that Keypair() will always give a public key that is valid for users
    -key = PublicKey('5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY') # Valid public key
    -print(is_on_curve(key)) # Lies on the ed25519 curve and is suitable for users
    +key = Pubkey.from_string('5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY') # Valid public key
    +print(key.is_on_curve()) # Lies on the ed25519 curve and is suitable for users
    +
    +off_curve_address = Pubkey.from_string('4BJXYkfvg37zEmBbsacZjeQDpTNx91KppxFJxRqrz48e') # Valid public key
    +print(off_curve_address.is_on_curve()) # Not on the ed25519 curve, therefore not suitable for users
    +
    +error_pubkey = Pubkey.from_string("testPubkey"); # Is not a valid public key
    +
    #include <iostream>
    +#include <solana_sdk.h>
    +
    +int main()
    +{
    +    auto public_key = PublicKey("5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY");
     
    -off_curve_address = PublicKey('4BJXYkfvg37zEmBbsacZjeQDpTNx91KppxFJxRqrz48e') # Valid public key
    -print(PublicKey._is_on_curve(off_curve_address)) # Not on the ed25519 curve, therefore not suitable for users
    +    std::cout << public_key.is_on_curve() << std::endl;
     
    -error_pubkey = PublicKey("testPubkey"); # Is not a valid public key
    -
    use solana_sdk::pubkey::{Pubkey};
     use std::str::FromStr;
     
    @@ -274,16 +353,16 @@
       "pill tomorrow foster begin walnut borrow virtual kick shift mutual shoe scatter";
     const seed = bip39.mnemonicToSeedSync(mnemonic, ""); // (mnemonic, password)
     const keypair = Keypair.fromSeed(seed.slice(0, 32));
    -
    from solana.keypair import Keypair
    +
    from solders.keypair import Keypair
     from mnemonic import Mnemonic
     
     mnemo = Mnemonic("english")
     seed = mnemo.to_seed("pill tomorrow foster begin walnut borrow virtual kick shift mutual shoe scatter")
    -keypair = Keypair.from_secret_key(seed)
    -print("Created Keypair with Public Key: {}".format(keypair.public_key)
    +keypair = Keypair.from_bytes(seed)
    +print("Created Keypair with Public Key: {}".format(keypair.pubkey()))
     
    solana-keygen recover
     
    1. BIP44 (multiple wallets, also known HD wallets)

    You can make multiple wallets from a single seed - also known as 'Hierarchical Deterministic wallets' or HD wallets:

    Press </> button to view full source
    import { Keypair } from "@solana/web3.js";
    @@ -311,7 +390,7 @@
     }
     
    solana-keygen recover 'prompt:?key=0/0'
     

    How to generate a vanity address

    Vanity publickeys, or custom addresses are keys that have start with specific characters. For example, a person may want a publickey to start with "elv1s", or maybe even "cook". These can help other people remember who the key belongs to, making the key more easily identifiable.

    Note: The more characters in your vanity address, the longer it will take.

    WARNING

    You should just use the CLI for this task. The Python and TypeScript examples are for illustrative purposes and are much slower than the CLI.

    Press </> button to view full source
    import { Keypair } from "@solana/web3.js";
    +

    How to generate a vanity address

    Vanity publickeys, or custom addresses are keys that have start with specific characters. For example, a person may want a publickey to start with "elv1s", or maybe even "cook". These can help other people remember who the key belongs to, making the key more easily identifiable.

    Note: The more characters in your vanity address, the longer it will take.

    WARNING

    You should just use the CLI for this task. The Python and TypeScript examples are for illustrative purposes and are much slower than the CLI.

    Press </> button to view full source
    import { Keypair } from "@solana/web3.js";
     
     (async () => {
       let keypair = Keypair.generate();
    @@ -323,17 +402,36 @@
     while (!keypair.publicKey.toBase58().startsWith("elv1s")) {
       keypair = Keypair.generate();
     }
    -
    from solana.keypair import Keypair
    +
    from solders.keypair import Keypair
     
     keypair = Keypair()
    -while(str(keypair.public_key)[:5]!="elv1s") :
    +while(str(keypair.pubkey())[:5]!="elv1s") :
         keypair = Keypair()
         
    -print("Created Keypair with Public Key: {}".format(keypair.public_key))
    +print("Created Keypair with Public Key: {}".format(keypair.pubkey()))
     
    solana-keygen grind --starts-with e1v1s:1
    +
    // clang++ vanity_keypair.cpp -o vanity_keypair -std=c++17 -lssl -lcrypto -lsodium
    +
    +#include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +  auto key_pair = Keypair::generate();
    +
    +  while (key_pair.public_key.to_base58().substr(0, 5) != "elv1s") {
    +    key_pair = Keypair::generate();
    +  }
    +
    +  std::cout << "Created Keypair with Public Key: " << key_pair.public_key.to_base58() << std::endl;
    +}
    +
    solana-keygen grind --starts-with e1v1s:1
     

    How to sign and verify messages with wallets

    The primary function of a keypair is to sign messages and enable verification of the signature. Verification of a signature allows the recipient to be sure that the data was signed by the owner of a specific private key.

    To do so we will import the TweetNaClopen in new window crypto library.

    Press </> button to view full source
    import { Keypair } from "@solana/web3.js";
     import nacl from "tweetnacl";
    @@ -372,41 +470,25 @@
     );
     
     console.log(result);
    -
    from nacl.signing import VerifyKey
    -from solana.keypair import Keypair
    +
    from solders.keypair import Keypair
     
     secret_key =  [
           174, 47, 154, 16, 202, 193, 206, 113, 199, 190, 53, 133, 169, 175, 31, 56, 222, 53, 138, 189, 224, 216, 117,
           173, 10, 149, 53, 45, 73, 251, 237, 246, 15, 185, 186, 82, 177, 240, 148, 69, 241, 227, 167, 80, 141, 89, 240,
           121, 121, 35, 172, 247, 68, 251, 226, 218, 48, 63, 176, 109, 168, 89, 238, 135,
    -    ]
    -     
    -keypair = Keypair.from_secret_key(bytes(secret_key))
    -pubkey_bytes = bytes(keypair.public_key)
    -message = "The quick brown fox jumps over the lazy dog"
    -message_bytes = bytes(message,'utf8')
    -signed_message = keypair.sign(message_bytes)
    -
    -verify_sign = VerifyKey(
    -    pubkey_bytes
    -).verify(
    -    smessage=message_bytes,  
    -    signature=signed_message.signature
    -)
    -
    -#Returns original message if the signature has not been tampered with
    -print(verify_sign)
    -

    How to connect to a wallet

    Solana's wallet-adapteropen in new window libraries make it easy to manage wallet connections client-side.

    React

    Run the following command to install the required dependencies:

    yarn add @solana/wallet-adapter-react @solana/wallet-adapter-react-ui @solana/wallet-adapter-base @solana/wallet-adapter-wallets
    +    ] 
    +keypair = Keypair.from_bytes(secret_key)
    +message = b"The quick brown fox jumps over the lazy dog"
    +signature = keypair.sign_message(message)
    +verify_sign = signature.verify(keypair.pubkey(), message)
    +
    +print(verify_sign) # bool
    +

    How to connect to a wallet

    Solana's wallet-adapteropen in new window libraries make it easy to manage wallet connections client-side.

    React

    Run the following command to install the required dependencies:

    yarn add @solana/wallet-adapter-react @solana/wallet-adapter-react-ui @solana/wallet-adapter-base @solana/wallet-adapter-wallets
     

    The React wallet-adapter libraries allow us to persist and access wallet connection states through hooks and Context providers, namely, useWallet, WalletProvider, useConnection, and ConnectionProvider. The React App must be wrapped with WalletProvider and ConnectionProvider.

    Additionally, we can prompt users to connect by using useWalletModal to toggle visibility of the connection modal and wrapping the App with WalletModalProvider from @solana/wallet-adapter-react-ui, as well. The connection modal will handle that connection flow for us, so we can just listen for when a wallet has connected. We know a wallet is connected when the useWallet response has a non-null wallet property. Vice versa, if that property is null, we know the wallet is disconnected.

    Press </> button to view full source
    import React, { useMemo, FC, PropsWithChildren } from "react";
     import {
       ConnectionProvider,
    @@ -593,6 +675,6 @@
     <WalletMultiButton />
     {/if}
     
    Last Updated:
    - + diff --git a/docs/.vuepress/dist/references/local-development.html b/docs/.vuepress/dist/references/local-development.html index cddc5a28f..54ac7735a 100644 --- a/docs/.vuepress/dist/references/local-development.html +++ b/docs/.vuepress/dist/references/local-development.html @@ -23,12 +23,12 @@ } Local Development | Solana Cookbook - + -

    Local Development

    Starting a Local Validator

    Testing your program code locally can be a lot more reliable than testing on devnet, and can help you test before trying it out on devnet.

    You can setup your local-test-validator by installing the solana tool suite and running

    solana-test-validator
    -

    Benefits of using local-test-validator include:

    • No RPC rate-limits
    • No airdrop limits
    • Direct on-chain program deployment (--bpf-program ...)
    • Clone accounts from a public cluster, including programs (--clone ...)
    • Configurable transaction history retention (--limit-ledger-size ...)
    • Configurable epoch length (--slots-per-epoch ...)
    • Jump to an arbitrary slot (--warp-slot ...)

    Connecting to Environments

    When you are working on Solana development, you will need to connect to a specific RPC API endpoint. Solana has 3 public development environments:

    • mainnet-beta https://api.mainnet-beta.solana.com
    • devnet https://api.devnet.solana.com
    • testnet https://api.testnet.solana.com
    Press </> button to view full source
    import { clusterApiUrl, Connection } from "@solana/web3.js";
    +    

    Local Development

    Starting a Local Validator

    Testing your program code locally can be a lot more reliable than testing on devnet, and can help you test before trying it out on devnet.

    You can setup your local-test-validator by installing the solana tool suite and running

    solana-test-validator
    +

    Benefits of using local-test-validator include:

    • No RPC rate-limits
    • No airdrop limits
    • Direct on-chain program deployment (--bpf-program ...)
    • Clone accounts from a public cluster, including programs (--clone ...)
    • Configurable transaction history retention (--limit-ledger-size ...)
    • Configurable epoch length (--slots-per-epoch ...)
    • Jump to an arbitrary slot (--warp-slot ...)

    Connecting to Environments

    When you are working on Solana development, you will need to connect to a specific RPC API endpoint. Solana has 3 public development environments:

    • mainnet-beta https://api.mainnet-beta.solana.com
    • devnet https://api.devnet.solana.com
    • testnet https://api.testnet.solana.com
    Press </> button to view full source
    import { clusterApiUrl, Connection } from "@solana/web3.js";
     
     (async () => {
       const connection = new Connection(clusterApiUrl("mainnet-beta"), "confirmed");
    @@ -38,6 +38,15 @@
     
     client = Client("https://api.mainnet-beta.solana.com")
     
    #include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +    Connection connection("https://api.mainnet-beta.solana.com");
    +    return 0;
    +}
    +
    use solana_client::rpc_client::RpcClient;
     use solana_sdk::commitment_config::CommitmentConfig;
     
    @@ -49,7 +58,7 @@
     let client = RpcClient::new_with_commitment(rpc_url, CommitmentConfig::confirmed());
     
    solana config set --url https://api.mainnet-beta.solana.com
     

    Finally, you can also connect to a private cluster, either one local or running remotely with the following:

    Press </> button to view full source
    import { Connection } from "@solana/web3.js";
    +

    Finally, you can also connect to a private cluster, either one local or running remotely with the following:

    Press </> button to view full source
    import { Connection } from "@solana/web3.js";
     
     (async () => {
       // This will connect you to your local validator
    @@ -60,6 +69,15 @@
     
     client = Client("http://127.0.0.1:8899")
     
    #include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +    Connection connection("http://127.0.0.1:8899");
    +    return 0;
    +}
    +
    use solana_client::rpc_client::RpcClient;
     use solana_sdk::commitment_config::CommitmentConfig;
     
    @@ -71,7 +89,7 @@
     let client = RpcClient::new_with_commitment(rpc_url, CommitmentConfig::confirmed());
     
    solana config set --url http://privaterpc.com
     

    Subscribing to Events

    Websockets provide a pub/sub interface where you can listen for certain events. Instead of pinging a typical HTTP endpoint at an interval to get frequent updates, you can instead receive those updates only when they happen.

    Solana's web3 Connectionopen in new window under the hood generates a websocket endpoint and registers a websocket client when you create a new Connection instance (see source code hereopen in new window).

    The Connection class exposes pub/sub methods - they all start with on, like event emitters. When you call these listener methods, it registers a new subscription to the websocket client of that Connection instance. The example pub/sub method we use below is onAccountChangeopen in new window. The callback will provide the updated state data through arguments (see AccountChangeCallbackopen in new window as an example).

    Press </> button to view full source
    import { clusterApiUrl, Connection, Keypair } from "@solana/web3.js";
    +

    Subscribing to Events

    Websockets provide a pub/sub interface where you can listen for certain events. Instead of pinging a typical HTTP endpoint at an interval to get frequent updates, you can instead receive those updates only when they happen.

    Solana's web3 Connectionopen in new window under the hood generates a websocket endpoint and registers a websocket client when you create a new Connection instance (see source code hereopen in new window).

    The Connection class exposes pub/sub methods - they all start with on, like event emitters. When you call these listener methods, it registers a new subscription to the websocket client of that Connection instance. The example pub/sub method we use below is onAccountChangeopen in new window. The callback will provide the updated state data through arguments (see AccountChangeCallbackopen in new window as an example).

    Press </> button to view full source
    import { clusterApiUrl, Connection, Keypair } from "@solana/web3.js";
     
     (async () => {
       // Establish new connect to devnet - websocket client connected to devnet will also be registered here
    @@ -102,7 +120,7 @@
       "confirmed"
     );
     
    import asyncio
    -from solana.keypair import Keypair
    +from solders.keypair import Keypair
     from solana.rpc.websocket_api import connect
     
     async def main():
    @@ -110,7 +128,7 @@
             # Create a Test Wallet
             wallet = Keypair()
             # Subscribe to the Test wallet to listen for events
    -        await websocket.account_subscribe(wallet.public_key)
    +        await websocket.account_subscribe(wallet.pubkey())
             # Capture response from account subscription 
             first_resp = await websocket.recv()
             print("Subscription successful with id {}, listening for events \n".format(first_resp.result))
    @@ -122,13 +140,62 @@
         # Create a Test Wallet
         wallet = Keypair()
         # Subscribe to the Test wallet to listen for events
    -    await websocket.account_subscribe(wallet.public_key)
    +    await websocket.account_subscribe(wallet.pubkey())
         # Capture response from account subscription 
         first_resp = await websocket.recv()
         print("Subscription successful with id {}, listening for events \n".format(first_resp.result))
         updated_account_info = await websocket.recv()
         print(updated_account_info)    
    -
    use solana_client::pubsub_client::PubsubClient;
    +
    // clang++ on_account_change.cpp -o on_account_change -std=c++17 -lssl -lcrypto -lsodium
    +
    +#include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +  Connection connection("https://api.devnet.solana.com");
    +
    +  auto key_pair = Keypair::generate();
    +
    +  int subscriptionId = connection.on_account_change(key_pair.public_key, [&](Result<Account> result) {
    +    Account account = result.unwrap();
    +    std::cout << "owner = " << account.owner.to_base58() << std::endl;
    +    std::cout << "lamports = " << account.lamports << std::endl;
    +    std::cout << "data = " << account.data << std::endl;
    +    std::cout << "executable = " << (account.executable ? "true" : "false") << std::endl;
    +  });
    +
    +  sleep(1);
    +
    +  std::string tx_hash = connection.request_airdrop(key_pair.public_key).unwrap();
    +  std::cout << "tx hash = " << tx_hash << std::endl;
    +
    +  for (int i = 0; i < 10; i++) {
    +    connection.poll();
    +    sleep(1);
    +  }
    +
    +  connection.remove_account_listener(subscriptionId);
    +
    +  return 0;
    +}
    +
    use solana_client::pubsub_client::PubsubClient;
     use solana_client::rpc_config::RpcAccountInfoConfig;
     use solana_sdk::commitment_config::CommitmentConfig;
     use solana_sdk::signature::{Keypair, Signer};
    @@ -177,7 +244,7 @@
     ).unwrap();
     let message = match receiver.recv().unwrap();
     println!("{:?}", message)
    -

    Getting Test SOL

    When you're working locally, you need some SOL in order to send transactions. In non-mainnet environments you can receive SOL by airdropping it to your address

    Press </> button to view full source
    import { Connection, Keypair, LAMPORTS_PER_SOL } from "@solana/web3.js";
    +

    Getting Test SOL

    When you're working locally, you need some SOL in order to send transactions. In non-mainnet environments you can receive SOL by airdropping it to your address

    Press </> button to view full source
    import { Connection, Keypair, LAMPORTS_PER_SOL } from "@solana/web3.js";
     
     (async () => {
       const keypair = Keypair.generate();
    @@ -201,7 +268,7 @@
     );
     
     await connection.confirmTransaction(airdropSignature);
    -
    from solana.keypair import Keypair
    +
    from solders.keypair import Keypair
     from solana.rpc.api import Client
     
     wallet = Keypair()
    @@ -209,14 +276,32 @@
     client = Client("https://api.devnet.solana.com")
     
     #Input Airdrop amount in LAMPORTS
    -client.request_airdrop(wallet.public_key, 1000000000)
    +client.request_airdrop(wallet.pubkey(), 1000000000)
     
     #Airdrops 1 SOL
     
    use solana_client::rpc_client::RpcClient;
    +
    // clang++ request_airdrop.cpp -o request_airdrop -std=c++17 -lssl -lcrypto -lsodium
    +
    +#include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +  Connection connection("https://api.devnet.solana.com");
    +
    +  auto key_pair = Keypair::generate();
    +
    +  std::string tx_hash = connection.request_airdrop(key_pair.public_key).unwrap();
    +
    +  std::cout << "tx hash = " << tx_hash << std::endl;
    +
    +  return 0;
    +}
    +
    use solana_client::rpc_client::RpcClient;
     use solana_sdk::commitment_config::CommitmentConfig;
     use solana_sdk::native_token::LAMPORTS_PER_SOL;
     use solana_sdk::signature::{Keypair, Signer};
    @@ -267,6 +352,6 @@
     solana-test-validator --bpf-program 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin serum_dex_v3.so --reset
     
    Last Updated:
    - + diff --git a/docs/.vuepress/dist/references/name-service.html b/docs/.vuepress/dist/references/name-service.html index 0ca460b5c..81d23b16a 100644 --- a/docs/.vuepress/dist/references/name-service.html +++ b/docs/.vuepress/dist/references/name-service.html @@ -23,11 +23,11 @@ } Name Service | Solana Cookbook - + -

    Name Service

    Name registry

    The name registry stores information about the domain name. It is made of two things:

    • The header
    • The data

    The data for a domain name is always prefixed by the header, below is the structure of the header in JS:

    Press </> button to view full source
    import { PublicKey } from "@solana/web3.js";
    +    

    Name Service

    Name registry

    The name registry stores information about the domain name. It is made of two things:

    • The header
    • The data

    The data for a domain name is always prefixed by the header, below is the structure of the header in JS:

    Press </> button to view full source
    import { PublicKey } from "@solana/web3.js";
     import { Schema } from "borsh";
     
     export class NameRegistryState {
    @@ -181,7 +181,7 @@
     const subDomain = "demo";
     
     // Step 1
    -const hashedParentDomain = await getHashedName(mainDomain);
    +const hashedParentDomain = await getHashedName(parentDomain);
     const parentDomainKey = await getNameAccountKey(
       hashedParentDomain,
       undefined,
    @@ -260,6 +260,6 @@
     
     const registry = await getTwitterRegistry(connection, handle);
     
    Last Updated:
    - + diff --git a/docs/.vuepress/dist/references/nfts.html b/docs/.vuepress/dist/references/nfts.html index 9e805a0f3..190af057c 100644 --- a/docs/.vuepress/dist/references/nfts.html +++ b/docs/.vuepress/dist/references/nfts.html @@ -23,11 +23,11 @@ } NFTs | Solana Cookbook - + -

    Non Fungible Tokens (NFTs)

    How to create an NFT

    To create an NFT you have to:

    1. Upload the image to IPFS like Arweave
    2. Upload the json metadata to IPFS like Arweave
    3. Call metaplex to create an account for the NFT

    Upload to Arweave

    Press </> button to view full source
    import fs from "fs";
    +    

    Non Fungible Tokens (NFTs)

    How to create an NFT

    To create an NFT you have to:

    1. Upload the image to IPFS like Arweave
    2. Upload the json metadata to IPFS like Arweave
    3. Call metaplex to create an account for the NFT

    Upload to Arweave

    Press </> button to view full source
    import fs from "fs";
     import Arweave from "arweave";
     
     (async () => {
    @@ -271,11 +271,13 @@
       const metaplex = new Metaplex(connection);
       metaplex.use(keypairIdentity(keypair));
     
    -  const mint = new PublicKey("Ay1U9DWphDgc7hq58Yj1yHabt91zTzvV2YJbAWkPNbaK");
    +  const mintAddress = new PublicKey(
    +    "Ay1U9DWphDgc7hq58Yj1yHabt91zTzvV2YJbAWkPNbaK"
    +  );
     
    -  const nft = await metaplex.nfts().findByMint(mint);
    +  const nft = await metaplex.nfts().findByMint({ mintAddress });
     
    -  console.log(nft.metadata);
    +  console.log(nft.json);
       /*
       {
         name: 'SMB #139',
    @@ -302,18 +304,20 @@
       }
       */
     })();
    -

    How to get the owner of an NFT

    If you have the mint key of an NFT, you can find its current owner by sneak-peeking at the largest token account for that mint key.

    Remember that NFTs have a supply of 1, and they are indivisible, meaning that only one token account will hold that token at any point in time, whilst all other token accounts for that mint key will have a balance of 0.

    Once the largest token account is identified, we can retrieve its owner.

    Press </> button to view full source
    import { Connection, PublicKey } from "@solana/web3.js";
    +console.log(nft.json);
    +

    How to get the owner of an NFT

    If you have the mint key of an NFT, you can find its current owner by sneak-peeking at the largest token account for that mint key.

    Remember that NFTs have a supply of 1, and they are indivisible, meaning that only one token account will hold that token at any point in time, whilst all other token accounts for that mint key will have a balance of 0.

    Once the largest token account is identified, we can retrieve its owner.

    Press </> button to view full source
    import { Connection, PublicKey } from "@solana/web3.js";
     
     (async () => {
       const connection = new Connection("https://api.mainnet-beta.solana.com");
    @@ -540,7 +544,7 @@
       metaplex.use(keypairIdentity(keypair));
     
       const owner = new PublicKey("2R4bHmSBHkHAskerTHE6GE1Fxbn31kaD5gHqpsPySVd7");
    -  const allNFTs = await metaplex.nfts().findAllByOwner(owner);
    +  const allNFTs = await metaplex.nfts().findAllByOwner({ owner });
     
       console.log(allNFTs);
     })();
    @@ -551,7 +555,7 @@
     metaplex.use(keypairIdentity(keypair));
     
     const owner = new PublicKey("2R4bHmSBHkHAskerTHE6GE1Fxbn31kaD5gHqpsPySVd7");
    -const allNFTs = await metaplex.nfts().findAllByOwner(owner);
    +const allNFTs = await metaplex.nfts().findAllByOwner({ owner });
     
     console.log(allNFTs);
     

    Candy Machine v2

    Metaplex JS SDK now supports creating and updating Candy Machine v2 via code. It enable the developers to interact with the Candy Machine v2 program and create, update, and delete Candy Machines as well as mint NFTs from them.

    How to create a Candy Machine

    Press </> button to view full source
    import {
    @@ -834,6 +838,6 @@
       // newOwner: new PublicKey("some-other-public-key");
     });
     
    Last Updated:
    - + diff --git a/docs/.vuepress/dist/references/offline-transactions.html b/docs/.vuepress/dist/references/offline-transactions.html index ef691b7c5..5fecc5667 100644 --- a/docs/.vuepress/dist/references/offline-transactions.html +++ b/docs/.vuepress/dist/references/offline-transactions.html @@ -23,11 +23,11 @@ } Sending Offline Transactions | Solana Cookbook - + -

    Offline Transaction

    Sign Transaction

    To create an offline transaction, you have to sign the transaction and then anyone can broadcast it on the network.

    Press </> button to view full source
    import {
    +    
    -    
    +    
       
     
    diff --git a/docs/.vuepress/dist/references/programs.html b/docs/.vuepress/dist/references/programs.html
    index a7898afad..8c85dedcd 100644
    --- a/docs/.vuepress/dist/references/programs.html
    +++ b/docs/.vuepress/dist/references/programs.html
    @@ -23,11 +23,11 @@
     			}
         
         Writing Programs | Solana Cookbook
    -    
    +    
         
       
       
    -    

    Writing Programs

    How to transfer SOL in a program

    Your Solana Program can transfer lamports from one account to another without 'invoking' the System program. The fundamental rule is that your program can transfer lamports from any account owned by your program to any account at all.

    The recipient account does not have to be an account owned by your program.

    /// Transfers lamports from one account (must be program owned)
    +    

    Writing Programs

    How to transfer SOL in a program

    Your Solana Program can transfer lamports from one account to another without 'invoking' the System program. The fundamental rule is that your program can transfer lamports from any account owned by your program to any account at all.

    The recipient account does not have to be an account owned by your program.

    /// Transfers lamports from one account (must be program owned)
     /// to another account. The recipient can by any account
     fn transfer_service_fee_lamports(
         from_account: &AccountInfo,
    @@ -1496,6 +1496,6 @@
     
     }
     
    Last Updated:
    - + diff --git a/docs/.vuepress/dist/references/staking.html b/docs/.vuepress/dist/references/staking.html index 637191531..155a6a467 100644 --- a/docs/.vuepress/dist/references/staking.html +++ b/docs/.vuepress/dist/references/staking.html @@ -23,11 +23,11 @@ } Staking | Solana Cookbook - + -

    Staking

    Get Current Validators

    We can stake SOL and earn rewards for helping secure the network. To stake, we delegate SOL to validators who in turn process transactions.

    import { clusterApiUrl, Connection } from "@solana/web3.js";
    +    
    Last Updated:
    - + diff --git a/docs/.vuepress/dist/references/token.html b/docs/.vuepress/dist/references/token.html index 3b2ca6568..a945443da 100644 --- a/docs/.vuepress/dist/references/token.html +++ b/docs/.vuepress/dist/references/token.html @@ -23,11 +23,11 @@ } Interacting with Tokens | Solana Cookbook - + -

    Token

    What do I need to get started with SPL-Tokens?

    Every time you interact with tokens on Solana, you are actually interacting with the Solana Program Library Token, or SPL-Token standard. The SPL-Token standard requires a specific library to be used, which you can find below based on your language.

    "@solana/spl-token": "^0.2.0"
    +    

    Token

    What do I need to get started with SPL-Tokens?

    Every time you interact with tokens on Solana, you are actually interacting with the Solana Program Library Token, or SPL-Token standard. The SPL-Token standard requires a specific library to be used, which you can find below based on your language.

    "@solana/spl-token": "^0.2.0"
     

    How to create a new Token

    Creating tokens is done by creating what is called a "mint account". This mint account is later used to mint tokens to a user's token account.

    Press </> button to view full source
    import {
       clusterApiUrl,
       Connection,
    @@ -1273,6 +1273,6 @@
       mint: mint,
     });
     
    Last Updated:
    - + diff --git a/docs/.vuepress/dist/th/core-concepts/accounts.html b/docs/.vuepress/dist/th/core-concepts/accounts.html index de1a4ec43..dc9074c9d 100644 --- a/docs/.vuepress/dist/th/core-concepts/accounts.html +++ b/docs/.vuepress/dist/th/core-concepts/accounts.html @@ -23,11 +23,11 @@ } Accounts | คู่มือ Solana - + -

    Accounts

    Accounts ใน Solana จะเอาไว้เก็บ state และเป็นส่วนสำคัญในการพัฒนาบน Solana.

    เรื่องน่ารู้

    Fact Sheet

    • Accounts เอาไว้เก็บข้อมูล (data)
    • แต่ละ account มี address ที่ไม่ซ้ำกัน
    • Accounts มีขนาดได้ไม่เกิน 10MB (10 Mega Bytes)
    • PDA accounts มีขนาดได้ไม่เกิน 10KB (10 Kilo Bytes)
    • PDA accounts สามารถใช้ sign แทน program ได้
    • ขนาดของ Accounts จะถูกกำหนดตั้งแต่ตอนสร้าง แต่สามารถเปลี่ยนได้ทีหลังด้วยการ reallocopen in new window
    • พื้นที่เก็บ data ใน Account ต้องจ่ายยค่าเช่า (rent)
    • เจ้าของ account ตาม default คือ System Program

    ลงลึก

    Account Model

    accounts บน Solana จะมี 3 แบบ:

    • Data accounts เอาไว้เก็บ data
    • Program accounts เอาไว้เก็บ executable programs
    • Native accounts คือพวก native programs บน Solana เช่น System, Stake, และ Vote

    data accounts มี 2 ประเภท:

    • accounts ที่มี System เป็นเจ้าของ
    • PDA (Program Derived Address) accounts

    แต่ละ account จะมี address (ก็คือ public key) และมี owner (address ของ program account). โดย account จะมี field ตามด้านล่างนี้

    Fieldคำอธิบาย
    lamportsจำนวน lamports ที่ account มีอยู่
    ownerprogram ที่เป็นเจ้าของ account นี้
    executableaccount นี้สามารถประมวลผล instructions ได้หรือไม่
    dataข้อมูลดิบเป็น byte array ที่เก็บอยู่ใน account นี้
    rent_epochepoch ถัดไปที่ account นี้จะเป็นหนี้ค่าเช่า rent

    กฏที่สำคัญเกี่ยวกับ ownership:

    • เฉพาะเจ้าของ data account ที่สามารถแก้ไขข้อมูลของตัวเองได้ และถอน lamports ออกมาได้
    • ทุกคนสามารถฝาก lamports เข้า data account ได้
    • เจ้าของ account สามารถโอนเปลี่ยนเจ้าของใหม่ได้ ถ้า data ใน account ไม่มีแล้ว (zeroed out)

    Program accounts ไม่เก็บ state.

    ตัวอย่างเช่น ถ้าเรามี counter program ที่ให้เราเพิ่มจำนวน counter ได้, เราต้องสร้าง 2 accounts โดยที่ account แรกจะเอาไว้เก็บ code ของ program และอีกอันเอาไว้เก็บจำนวน counter

    คุณต้องจ่าย Rent (ค่าเช่า) เพื่อป้องกัน account จากการถูกลบ

    Rent (ค่าเช่า)

    การเก็บข้อมูลบน account จะเสีย SOL ในการดูแล และมันจะถูกจ่ายโดยเรียกว่า rent (ค่าเช่า) ถ้าคุณจ่ายทิ้งไว้ให้ครอบคลุมขั้นต่ำ 2 ปี คุณก็จะได้รับการยกเว้นค่าเช่า (rent exempt) และคุณยังสามารถเอา lamports คืนได้ด้วยการปิด (close) account และส่ง lamports คืนสู่ wallet

    Rent จะถูกจ่ายเมื่อ 2 เหตุการณ์นี้เกิดขึ้น:

    1. เมื่อถูกอ้างอิงด้วย transaction
    2. เมื่อจบรอบ epoch

    จำนวน % ของ rent ที่ถูกเก็บจาก accounts จะถูกทำลาย ในขณะที่จำนวนที่เหลือจะถูกแจกจ่ายไปให้ vote account เมื่อจบรอบของทุก slot

    ถ้า account ไม่มี lamports เพียงพอที่จะจ่าย rent จะทำให้ account ถูกจัดสรรคืน deallocated และข้อมูลก็จะหายไป

    และเราต้องจำไว้ด้วยว่า account ใหม่จะต้องจ่ายค่า rent exempt สำรองไว้เพื่อยกเว้นค่าเช่าเสมอ

    แหล่งข้อมูลอื่น

    Credit

    หลักการนี้เป็น credit ของ Pencilflip. ติดตามเค้าได้ทาง Twitteropen in new window.

    Last Updated:
    - +

    Accounts

    Accounts ใน Solana จะเอาไว้เก็บ state และเป็นส่วนสำคัญในการพัฒนาบน Solana.

    เรื่องน่ารู้

    Fact Sheet

    • Accounts เอาไว้เก็บข้อมูล (data)
    • แต่ละ account มี address ที่ไม่ซ้ำกัน
    • Accounts มีขนาดได้ไม่เกิน 10MB (10 Mega Bytes)
    • PDA accounts มีขนาดได้ไม่เกิน 10KB (10 Kilo Bytes)
    • PDA accounts สามารถใช้ sign แทน program ได้
    • ขนาดของ Accounts จะถูกกำหนดตั้งแต่ตอนสร้าง แต่สามารถเปลี่ยนได้ทีหลังด้วยการ reallocopen in new window
    • พื้นที่เก็บ data ใน Account ต้องจ่ายยค่าเช่า (rent)
    • เจ้าของ account ตาม default คือ System Program

    ลงลึก

    Account Model

    accounts บน Solana จะมี 3 แบบ:

    • Data accounts เอาไว้เก็บ data
    • Program accounts เอาไว้เก็บ executable programs
    • Native accounts คือพวก native programs บน Solana เช่น System, Stake, และ Vote

    data accounts มี 2 ประเภท:

    • accounts ที่มี System เป็นเจ้าของ
    • PDA (Program Derived Address) accounts

    แต่ละ account จะมี address (ก็คือ public key) และมี owner (address ของ program account). โดย account จะมี field ตามด้านล่างนี้

    Fieldคำอธิบาย
    lamportsจำนวน lamports ที่ account มีอยู่
    ownerprogram ที่เป็นเจ้าของ account นี้
    executableaccount นี้สามารถประมวลผล instructions ได้หรือไม่
    dataข้อมูลดิบเป็น byte array ที่เก็บอยู่ใน account นี้
    rent_epochepoch ถัดไปที่ account นี้จะเป็นหนี้ค่าเช่า rent

    กฏที่สำคัญเกี่ยวกับ ownership:

    • เฉพาะเจ้าของ data account ที่สามารถแก้ไขข้อมูลของตัวเองได้ และถอน lamports ออกมาได้
    • ทุกคนสามารถฝาก lamports เข้า data account ได้
    • เจ้าของ account สามารถโอนเปลี่ยนเจ้าของใหม่ได้ ถ้า data ใน account ไม่มีแล้ว (zeroed out)

    Program accounts ไม่เก็บ state.

    ตัวอย่างเช่น ถ้าเรามี counter program ที่ให้เราเพิ่มจำนวน counter ได้, เราต้องสร้าง 2 accounts โดยที่ account แรกจะเอาไว้เก็บ code ของ program และอีกอันเอาไว้เก็บจำนวน counter

    คุณต้องจ่าย Rent (ค่าเช่า) เพื่อป้องกัน account จากการถูกลบ

    Rent (ค่าเช่า)

    การเก็บข้อมูลบน account จะเสีย SOL ในการดูแล และมันจะถูกจ่ายโดยเรียกว่า rent (ค่าเช่า) ถ้าคุณจ่ายทิ้งไว้ให้ครอบคลุมขั้นต่ำ 2 ปี คุณก็จะได้รับการยกเว้นค่าเช่า (rent exempt) และคุณยังสามารถเอา lamports คืนได้ด้วยการปิด (close) account และส่ง lamports คืนสู่ wallet

    Rent จะถูกจ่ายเมื่อ 2 เหตุการณ์นี้เกิดขึ้น:

    1. เมื่อถูกอ้างอิงด้วย transaction
    2. เมื่อจบรอบ epoch

    จำนวน % ของ rent ที่ถูกเก็บจาก accounts จะถูกทำลาย ในขณะที่จำนวนที่เหลือจะถูกแจกจ่ายไปให้ vote account เมื่อจบรอบของทุก slot

    ถ้า account ไม่มี lamports เพียงพอที่จะจ่าย rent จะทำให้ account ถูกจัดสรรคืน deallocated และข้อมูลก็จะหายไป

    และเราต้องจำไว้ด้วยว่า account ใหม่จะต้องจ่ายค่า rent exempt สำรองไว้เพื่อยกเว้นค่าเช่าเสมอ

    แหล่งข้อมูลอื่น

    Credit

    หลักการนี้เป็น credit ของ Pencilflip. ติดตามเค้าได้ทาง Twitteropen in new window.

    Last Updated:
    + diff --git a/docs/.vuepress/dist/th/core-concepts/pdas.html b/docs/.vuepress/dist/th/core-concepts/pdas.html index 41b71acc9..28bcdaf0f 100644 --- a/docs/.vuepress/dist/th/core-concepts/pdas.html +++ b/docs/.vuepress/dist/th/core-concepts/pdas.html @@ -23,11 +23,11 @@ } Program Derived Addresses (PDAs) | คู่มือ Solana - + -

    Program Derived Addresses (PDAs)

    Program Derived Addresses (PDAs) คือสิ่งที่เชื่อมโยงกับ accounts ที่ออกแบบมาให้ถูกควบคุมโดย program ที่ระบุไว้. ถ้ามี PDAs ตัว programs ก็จะสามารถ sign ได้ด้วย program (programmatically sign) สำหรับ addresses ที่เจาะจงไว้โดยไม่ต้องใช้ private key. PDAs มีไว้เพื่อทำ CPI Cross-Program Invocationopen in new window, โดยจะอนุญาต Solana apps ให้สามารถ ใช้งานร่วมกัน (composable) ​กับ program อื่นๆ ได้.

    เรื่องน่ารู้

    Fact Sheet

    • PDAs คือ 32 byte strings ที่ดูเหมือน public keys, แต่จะไม่มี private keys
    • findProgramAddress จะสามารถสืบทอด(derive) แบบ deterministic เป็น PDA จาก programId และ seeds (ชุดของ bytes)
    • bump (1 byte) จะเอาไว้เพิ่มโอกาสที่ PDA จะหลุดจาก ed25519 elliptic curve
    • Programs สามารถ sign ให้ PDAs ได้ด้วยการเตรียม seeds และ bump ไว้เพื่อใช้ในการ invoke_signedopen in new window
    • PDA สามารถ sign ด้วย program ที่มัน derived มาเท่านั้น
    • ในการที่จะทำให้ programs สามารถ sign ใน instructions ที่ต่างกัน, PDAs จะต้องเตรียม interface คล้ายๆ hashmap สำหรับ indexing accounts

    ลงลึก

    PDAs คือส่วนสำคัญในการพัฒนา programs บน Solana. ถ้ามี PDAs, programs ก็จะสามารถ sign แทน accounts ในขณะที่รับประกันได้ว่าจะไม่มี user อื่นมาสร้าง signature ที่เหมือนกันได้. นอกจากที่จะ sign แทน account ได้แล้ว บาง programs ยังสามารถเปลี่ยนแปลง accounts ที่มันถือ PDAs ไว้ได้ด้วย

    Accounts matrix

    Image courtesy of Pencilflip

    การสร้าง PDAs

    เพื่อที่จะเข้าใจหลักการเบื้องหลัง PDAs, เราอาจจะต้องเข้าใจก่อนว่า PDAs จริงๆ แล้วไม่ได้ถูกสร้างขึ้นมาแต่เป็นการค้นหาจนเจอ. PDAs เกิดจากการผสม seeds (เช่น “vote_account”) และ program id. การผสมกันของ seeds และ program id จะ run ผ่าน sha256 hash function เพื่อดูว่า public key นั้นตกอยู่บน ed25519 elliptic curve หรือไม่.

    ในการ run program id และ seeds ผ่าน hash function จะมีความเป็นไปได้ประมาณ ~50% ที่จะได้ valid public key ที่ตกอยู่บน elliptic curve. ในกรณีนี้ จะเพิ่มอะไรบางอย่างเพื่อแกล้ง (fudge) ให้ input ขยับไปนิดหน่อยแล้วก็ลองใหม่อีกครั้ง. ศัพท์ทางเทคนิคของการ fudge นี้ก็คือ bump. ใน Solana, เราจะเริ่มด้วย bump = 255 และค่อยๆ ลดลงเป็น bump = 254, bump = 253, เรื่อยๆ จนเราได้ address ที่ไม่อยู่บน elliptic curve. นี่อาจจะฟังดูง่ายๆ แต่เมื่อมันเจอ address มันก็จะเป็นวิธีในแบบ deterministic ที่จะสามารถ derive PDA เดิมออกมาได้.

    PDA on the ellipitic curve

    ใช้งาน PDAs

    เมื่อ PDA ถูกสร้างมาแล้ว, findProgramAddress จะคืน address และ bump ที่ใช้เตะ address ออกจาก elliptic curve. ถ้ามี bump นี้, program ก็จะสามารถ sign instruction ใดๆที่ต้องการ PDA. ในการที่จะ sign, ตัว programs ต้องส่ง instruction, list ของ accounts, และ seeds กับ bump ที่ใช้ derive ตัว PDA ไป invoke_signed. นอกจากนี้ในการ sign สำหรับ instructions, PDAs จะต้อง sign ผ่าน invoke_signed ด้วย.

    เมื่อจะใช้ PDAs, มันเป็นเรื่องปกติที่จะต้อง เก็บ bump seedopen in new window ไว้ใน account data นั้นๆ ด้วย. มันจะทำให้นักพัฒนาสามารถตรวจสอบ PDA ได้ง่ายขึ้นโดยไม่ต้องส่ง bump มาใน instruction argument.

    แหล่งข้อมูลอื่น

    Last Updated:
    - +

    Program Derived Addresses (PDAs)

    Program Derived Addresses (PDAs) คือสิ่งที่เชื่อมโยงกับ accounts ที่ออกแบบมาให้ถูกควบคุมโดย program ที่ระบุไว้. ถ้ามี PDAs ตัว programs ก็จะสามารถ sign ได้ด้วย program (programmatically sign) สำหรับ addresses ที่เจาะจงไว้โดยไม่ต้องใช้ private key. PDAs มีไว้เพื่อทำ CPI Cross-Program Invocationopen in new window, โดยจะอนุญาต Solana apps ให้สามารถ ใช้งานร่วมกัน (composable) ​กับ program อื่นๆ ได้.

    เรื่องน่ารู้

    Fact Sheet

    • PDAs คือ 32 byte strings ที่ดูเหมือน public keys, แต่จะไม่มี private keys
    • findProgramAddress จะสามารถสืบทอด(derive) แบบ deterministic เป็น PDA จาก programId และ seeds (ชุดของ bytes)
    • bump (1 byte) จะเอาไว้เพิ่มโอกาสที่ PDA จะหลุดจาก ed25519 elliptic curve
    • Programs สามารถ sign ให้ PDAs ได้ด้วยการเตรียม seeds และ bump ไว้เพื่อใช้ในการ invoke_signedopen in new window
    • PDA สามารถ sign ด้วย program ที่มัน derived มาเท่านั้น
    • ในการที่จะทำให้ programs สามารถ sign ใน instructions ที่ต่างกัน, PDAs จะต้องเตรียม interface คล้ายๆ hashmap สำหรับ indexing accounts

    ลงลึก

    PDAs คือส่วนสำคัญในการพัฒนา programs บน Solana. ถ้ามี PDAs, programs ก็จะสามารถ sign แทน accounts ในขณะที่รับประกันได้ว่าจะไม่มี user อื่นมาสร้าง signature ที่เหมือนกันได้. นอกจากที่จะ sign แทน account ได้แล้ว บาง programs ยังสามารถเปลี่ยนแปลง accounts ที่มันถือ PDAs ไว้ได้ด้วย

    Accounts matrix

    Image courtesy of Pencilflip

    การสร้าง PDAs

    เพื่อที่จะเข้าใจหลักการเบื้องหลัง PDAs, เราอาจจะต้องเข้าใจก่อนว่า PDAs จริงๆ แล้วไม่ได้ถูกสร้างขึ้นมาแต่เป็นการค้นหาจนเจอ. PDAs เกิดจากการผสม seeds (เช่น “vote_account”) และ program id. การผสมกันของ seeds และ program id จะ run ผ่าน sha256 hash function เพื่อดูว่า public key นั้นตกอยู่บน ed25519 elliptic curve หรือไม่.

    ในการ run program id และ seeds ผ่าน hash function จะมีความเป็นไปได้ประมาณ ~50% ที่จะได้ valid public key ที่ตกอยู่บน elliptic curve. ในกรณีนี้ จะเพิ่มอะไรบางอย่างเพื่อแกล้ง (fudge) ให้ input ขยับไปนิดหน่อยแล้วก็ลองใหม่อีกครั้ง. ศัพท์ทางเทคนิคของการ fudge นี้ก็คือ bump. ใน Solana, เราจะเริ่มด้วย bump = 255 และค่อยๆ ลดลงเป็น bump = 254, bump = 253, เรื่อยๆ จนเราได้ address ที่ไม่อยู่บน elliptic curve. นี่อาจจะฟังดูง่ายๆ แต่เมื่อมันเจอ address มันก็จะเป็นวิธีในแบบ deterministic ที่จะสามารถ derive PDA เดิมออกมาได้.

    PDA on the ellipitic curve

    ใช้งาน PDAs

    เมื่อ PDA ถูกสร้างมาแล้ว, findProgramAddress จะคืน address และ bump ที่ใช้เตะ address ออกจาก elliptic curve. ถ้ามี bump นี้, program ก็จะสามารถ sign instruction ใดๆที่ต้องการ PDA. ในการที่จะ sign, ตัว programs ต้องส่ง instruction, list ของ accounts, และ seeds กับ bump ที่ใช้ derive ตัว PDA ไป invoke_signed. นอกจากนี้ในการ sign สำหรับ instructions, PDAs จะต้อง sign ผ่าน invoke_signed ด้วย.

    เมื่อจะใช้ PDAs, มันเป็นเรื่องปกติที่จะต้อง เก็บ bump seedopen in new window ไว้ใน account data นั้นๆ ด้วย. มันจะทำให้นักพัฒนาสามารถตรวจสอบ PDA ได้ง่ายขึ้นโดยไม่ต้องส่ง bump มาใน instruction argument.

    แหล่งข้อมูลอื่น

    Last Updated:
    + diff --git a/docs/.vuepress/dist/th/core-concepts/programs.html b/docs/.vuepress/dist/th/core-concepts/programs.html index 2a18c1b72..8cce61939 100644 --- a/docs/.vuepress/dist/th/core-concepts/programs.html +++ b/docs/.vuepress/dist/th/core-concepts/programs.html @@ -23,12 +23,12 @@ } Programs | คู่มือ Solana - + -

    Programs

    นักพัฒนาสามารถเขียน และปล่อย (deploy) programs บน Solana blockchain. Programs (ซึ่งก็คือ smart contracts บน protocols อื่นๆ) เป็นส่วนรากฐานของการทำงาน on-chain, ทำได้ทุกอย่างตั้งแต่ DeFi และ NFTs จนไปถึง Social Media และ Gaming.

    เรื่องน่ารู้

    Fact Sheet

    • Programs ประมวลผล instructions ทั้งที่มาจาก end users และมาจาก programs อื่นๆ
    • ทุกๆ programs จะเป็น stateless: และ data ที่มันทำงานด้วยจะถูกเก็บแยกไว้ที่ accounts ที่ส่งผ่านมาทาง instructions
    • Programs จะถูกเก็บใน accounts ที่ระบุไว้ว่า executable
    • ทุกๆ programs จะมีเจ้าของคือ BPF Loaderopen in new window และจะถูกดำเนินการ (executed) โดย Solana Runtimeopen in new window
    • นักพัฒนาจะเขียน programs ด้วยภาษา Rust หรือ C++, แต่ก็สามารถเลือกภาษาใดๆ ก็ได้ที่ target LLVMopen in new window's BPFopen in new window ได้
    • ทุกๆ programs จะมีทางเข้า (entry point) ทางเดียว ซึ่งเป็นที่ที่ instruction จะถูกดำเนินการ(process_instruction); parameters จะต้องมีสิ่งเหล่านี้เสมอ:
      • program_id: pubkey
      • accounts: array,
      • instruction_data: byte array

    ลงลึก

    Solana ไม่เหมือน blockchains อื่นๆ ตรงที่เราจะแยก code กับ data ออกจากกัน ทุกๆ data ที่ programs จะใช้จะถูกเก็บไว้ใน account อีกตัวแยกกัน และ programs จะรับเป็นชุดข้อมูลอ้างอิง (references) ไปถึง account เหล่านั้นผ่านรูปแบบชุดคำสั่ง (instructions) การทำแบบนี้จะทำให้ program สามารถทำงานข้าม หรือเรียกใช้ accounts ต่างๆ โดยไม่ต้อง deploy ใหม่ ตัวอย่างรูปแบบ (pattern) เหล่านี้สามารถเห็นได้ในทั้ง Native และ SPL Programs

    Native Programs และ The Solana Program Library (SPL)

    Solana มาพร้อมกับ programs หลายตัวที่ใช้สำหรับการทำงาน on-chain. โดยที่ programs จะแบ่งเป็น Native Programsopen in new window และ Solana Program Library (SPL) Programsopen in new window.

    Native Programs มีไว้สำหรับการทำงานของ validators โดยตัวที่รู้จักกันมากคือ System Programopen in new window ที่จะคอยรับผิดชอบดูแล accounts ใหม่ และส่ง(transfer) SOL ไปมา.

    SPL Programs มีไว้ทำงาน on-chain หลายอย่าง, ทั้งสร้าง (creating), สลับ (swapping), และเช่า (lending) โทเคน (tokens), และยังมีไว้สร้าง stake pools และดูแล on-chain name service อีกด้วย โดย SPL Token Programopen in new window จะสามารถเรียกใช้ (invoke) ได้โดยตรงผ่าน CLI, ในขณะที่ Associated Token Account Programopen in new window จะถูกประกอบขึ้นมาด้วย programs ที่ทำขึ้นมาเอง.

    เขียน Programs

    Programs ส่วนใหญ่จะเขียนด้วย Rust หรือ C++, แต่ก็สามารถเลือกภาษาใดๆ ก็ได้ที่ target LLVM’s BPF ได้ นอกจากนี้จากความร่วมมือของ Neon Labsopen in new window และ Solangopen in new window ทำให้สามารถสนับสนุน EVMopen in new window ซึ่งทำให้นักพัฒนาสามารถเขียน programs ด้วย Solidity ได้.

    programs ที่เขียนด้วย Rust จะยึดโครงสร้างนี้:

    ไฟล์ (File)คำอธิบาย
    lib.rsลงทะเบียน modules
    entrypoint.rsทางเข้า (Entrypoint) ของ program
    instruction.rsProgram API, (de)serializing instruction data
    processor.rsProgram logic
    state.rsProgram objects, (de)serializing state
    error.rsProgram-specific errors

    ในตอนนี้, Anchoropen in new window เป็น framework ที่นิยมสำหรับพัฒนา programs. Anchor คือ framework ที่มีแนวทางชัดเจน (opinionated), คล้ายกับ Ruby on Rails ที่ลดการเขียนอะไรซ้ำๆ และช่วยให้การแกะ (de)serialization สะดวกขึ้นสำหรับการพัฒนาด้วย Rust.

    Programs ปกติแล้วจะถูกพัฒนา (dev) และทดสอบ(test) บนสิ่งแวดล้อม(environments) Localhost และ Devnet ก่อนที่จะ deploy ไปบน Testnet หรือ Mainnet. Solana จะสนับสนุน environments ต่อไปนี้:

    Cluster EnvironmentRPC Connection URL
    Mainnet-betahttps://api.mainnet-beta.solana.com
    Testnethttps://api.testnet.solana.com
    Devnethttps://api.devnet.solana.com
    LocalhostDefault port: 8899 (e.g. http://localhost:8899, http://192.168.1.88:8899)

    เมื่อ deployed ไปบน environment แล้วผู้ใช้ (clients) จะสามารถใช้งาน on-chain programs ผ่าน RPC connectionsopen in new window ไปที่ cluster ตามที่เลือกไว้.

    Deploying Programs

    นักพัฒนาสามารถ deploy programs ผ่าน CLIopen in new window:

    solana program deploy <PROGRAM_FILEPATH>
    +    

    Programs

    นักพัฒนาสามารถเขียน และปล่อย (deploy) programs บน Solana blockchain. Programs (ซึ่งก็คือ smart contracts บน protocols อื่นๆ) เป็นส่วนรากฐานของการทำงาน on-chain, ทำได้ทุกอย่างตั้งแต่ DeFi และ NFTs จนไปถึง Social Media และ Gaming.

    เรื่องน่ารู้

    Fact Sheet

    • Programs ประมวลผล instructions ทั้งที่มาจาก end users และมาจาก programs อื่นๆ
    • ทุกๆ programs จะเป็น stateless: และ data ที่มันทำงานด้วยจะถูกเก็บแยกไว้ที่ accounts ที่ส่งผ่านมาทาง instructions
    • Programs จะถูกเก็บใน accounts ที่ระบุไว้ว่า executable
    • ทุกๆ programs จะมีเจ้าของคือ BPF Loaderopen in new window และจะถูกดำเนินการ (executed) โดย Solana Runtimeopen in new window
    • นักพัฒนาจะเขียน programs ด้วยภาษา Rust หรือ C++, แต่ก็สามารถเลือกภาษาใดๆ ก็ได้ที่ target LLVMopen in new window's BPFopen in new window ได้
    • ทุกๆ programs จะมีทางเข้า (entry point) ทางเดียว ซึ่งเป็นที่ที่ instruction จะถูกดำเนินการ(process_instruction); parameters จะต้องมีสิ่งเหล่านี้เสมอ:
      • program_id: pubkey
      • accounts: array,
      • instruction_data: byte array

    ลงลึก

    Solana ไม่เหมือน blockchains อื่นๆ ตรงที่เราจะแยก code กับ data ออกจากกัน ทุกๆ data ที่ programs จะใช้จะถูกเก็บไว้ใน account อีกตัวแยกกัน และ programs จะรับเป็นชุดข้อมูลอ้างอิง (references) ไปถึง account เหล่านั้นผ่านรูปแบบชุดคำสั่ง (instructions) การทำแบบนี้จะทำให้ program สามารถทำงานข้าม หรือเรียกใช้ accounts ต่างๆ โดยไม่ต้อง deploy ใหม่ ตัวอย่างรูปแบบ (pattern) เหล่านี้สามารถเห็นได้ในทั้ง Native และ SPL Programs

    Native Programs และ The Solana Program Library (SPL)

    Solana มาพร้อมกับ programs หลายตัวที่ใช้สำหรับการทำงาน on-chain. โดยที่ programs จะแบ่งเป็น Native Programsopen in new window และ Solana Program Library (SPL) Programsopen in new window.

    Native Programs มีไว้สำหรับการทำงานของ validators โดยตัวที่รู้จักกันมากคือ System Programopen in new window ที่จะคอยรับผิดชอบดูแล accounts ใหม่ และส่ง(transfer) SOL ไปมา.

    SPL Programs มีไว้ทำงาน on-chain หลายอย่าง, ทั้งสร้าง (creating), สลับ (swapping), และเช่า (lending) โทเคน (tokens), และยังมีไว้สร้าง stake pools และดูแล on-chain name service อีกด้วย โดย SPL Token Programopen in new window จะสามารถเรียกใช้ (invoke) ได้โดยตรงผ่าน CLI, ในขณะที่ Associated Token Account Programopen in new window จะถูกประกอบขึ้นมาด้วย programs ที่ทำขึ้นมาเอง.

    เขียน Programs

    Programs ส่วนใหญ่จะเขียนด้วย Rust หรือ C++, แต่ก็สามารถเลือกภาษาใดๆ ก็ได้ที่ target LLVM’s BPF ได้ นอกจากนี้จากความร่วมมือของ Neon Labsopen in new window และ Solangopen in new window ทำให้สามารถสนับสนุน EVMopen in new window ซึ่งทำให้นักพัฒนาสามารถเขียน programs ด้วย Solidity ได้.

    programs ที่เขียนด้วย Rust จะยึดโครงสร้างนี้:

    ไฟล์ (File)คำอธิบาย
    lib.rsลงทะเบียน modules
    entrypoint.rsทางเข้า (Entrypoint) ของ program
    instruction.rsProgram API, (de)serializing instruction data
    processor.rsProgram logic
    state.rsProgram objects, (de)serializing state
    error.rsProgram-specific errors

    ในตอนนี้, Anchoropen in new window เป็น framework ที่นิยมสำหรับพัฒนา programs. Anchor คือ framework ที่มีแนวทางชัดเจน (opinionated), คล้ายกับ Ruby on Rails ที่ลดการเขียนอะไรซ้ำๆ และช่วยให้การแกะ (de)serialization สะดวกขึ้นสำหรับการพัฒนาด้วย Rust.

    Programs ปกติแล้วจะถูกพัฒนา (dev) และทดสอบ(test) บนสิ่งแวดล้อม(environments) Localhost และ Devnet ก่อนที่จะ deploy ไปบน Testnet หรือ Mainnet. Solana จะสนับสนุน environments ต่อไปนี้:

    Cluster EnvironmentRPC Connection URL
    Mainnet-betahttps://api.mainnet-beta.solana.com
    Testnethttps://api.testnet.solana.com
    Devnethttps://api.devnet.solana.com
    LocalhostDefault port: 8899 (e.g. http://localhost:8899, http://192.168.1.88:8899)

    เมื่อ deployed ไปบน environment แล้วผู้ใช้ (clients) จะสามารถใช้งาน on-chain programs ผ่าน RPC connectionsopen in new window ไปที่ cluster ตามที่เลือกไว้.

    Deploying Programs

    นักพัฒนาสามารถ deploy programs ผ่าน CLIopen in new window:

    solana program deploy <PROGRAM_FILEPATH>
     

    เมื่อ program ถูก deploy ไปแล้ว, มันจะถูกแปลง (compile) เป็น ELF shared objectopen in new window (ประกอบไปด้วย BPF bytecode) และถูก upload ไปที่ Solana cluster. Programs จะอยู่ใน accounts (บน Solana ทุกอย่างอยุ่ใน accounts), ต่างตรงที่ accounts นี้จะมีสถานะ executable และถูกมอบหมายให้ BPF Loader. ที่อยู่ (address) ของ account เหล่านี้จะถูกเรียกว่า program_id และจะเอาไว้อ้างอิงในการทำ transactions ต่อไป.

    Solana สนับสนุน BPF Loaders หลายแบบ, เช่น Upgradable BPF Loaderopen in new window. The BPF Loader จะรับผิดชอบดูแล program’s account และทำให้ clients ใช้ได้ผ่าน program_id. ทุก programs มี entry point ทางเดียว และเป็นที่ประมวลผล instruction (process_instruction) และ parameters ที่จะต้องมีเสมอคือ:

    • program_id: pubkey
    • accounts: array,
    • instruction_data: byte array

    เมื่อเกิดการเรียกใช้ (invoke) programs มันจะถูกดำเนินการ (execute) โดย Solana Runtime.

    แหล่งข้อมูลอื่น

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/th/core-concepts/transactions.html b/docs/.vuepress/dist/th/core-concepts/transactions.html index fbf23cdfa..1ef743827 100644 --- a/docs/.vuepress/dist/th/core-concepts/transactions.html +++ b/docs/.vuepress/dist/th/core-concepts/transactions.html @@ -23,11 +23,11 @@ } Transactions | คู่มือ Solana - + -

    Transactions

    Clients สามารถ invoke programs ด้วยการส่ง (submitting) transaction ไปที่ cluster. transaction จะประกอบไปด้วย instructions, โดยแต่ละอันจะมีเป้าหมายไปที่ program ของตัวเอง. เมื่อ transaction submit ไปแล้ว, Solana Runtimeopen in new window จะ process instructions ตามลำดับ และทำในระดับ atomic. ถ้ามีส่วนไหนของ instruction ล้มเหลว (fail), ทั้ง transaction จะ fail ทั้งหมด.

    เรื่องน่ารู้

    Fact Sheet

    • Instructions คือหน่วยการทำงานพื้นฐานที่สุดของ Solana
    • แต่ละ instruction จะมี:
      • program_id ของ program
      • ชุดของ accounts ทั้งหมดที่ต้องอ่าน (read) หรือเขียน (write)
      • instruction_data byte array ที่จำเพาะเจาะจงสำหรับแต่บะ program
    • สามารถใส่เ instructions ได้มากกว่าหนึ่งตัว เข้าไปในหนึ่ง transaction
    • แต่ละ transaction จะมี:
      • ชุดของ accounts ทั้งหมดที่ต้องอ่าน (read) หรือเขียน (write)
      • instructions หนึ่งตัว หรือมากกว่า
      • blockhash ล่าสุด (recent)
      • signatures หนึ่งตัว หรือมากกว่า
    • Instructions จะ process instructions ตามลำดับ และทำในระดับ atomic
    • ถ้ามีส่วนไหนของ instruction ล้มเหลว (fail), ทั้ง transaction จะ fail ทั้งหมด
    • ขนาดของ Transactions จำกัดอยู่ที่ 1232 bytes

    ลงลึก

    Solana Runtime ต้องการให้ทั้ง instructions และ transactions ระบุ accounts ทั้งหมดที่จะอ่าน หรือเขียน การที่เราเตรียม accounts ไว้ก่อนแบบนี้จะทำให้ runtime สามารถทำงานขนานกัน (parallelize execution) ได้ทั้ง transactions.

    เมื่อ transaction ถูก submit ไปที่ cluster แล้ว, ตัว runtime จะ process instructions ตามลำดับ และทำในระดับ atomic. สำหรับแต่ละ instruction, program ที่รับไปจะแปล (interpret) data array และทำงานบน accounts ที่กำหนดไว้. program จะส่งผลสำเร็จ หรือความผิดพลาด (error code) กลับมา. ถ้าส่ง error กลับมา ทั้ง transaction จะ fail ทันที.

    transaction ที่เป็นการถอนเงิน (debit) จาก account หรือจะแก้ไข data จะต้องมี signature ของเจ้าของ account นั้นส่งมาด้วย. account ไหนที่สามารถเขียนได้ จะถูกระบุไว้ว่า writable. account สามารถรับเงิน (credited) โดยไม่ต้องได้รับอนุญาตจากเจ้าของ ทั้งนี้คนจ่าย (payer)ได้จ่ายครอบคลุมค่า rent และ transaction fees ไปแล้ว.

    ก่อนการ submission, ทุก transactions จะต้องอ้างไปที่ recent blockhashopen in new window. โดยที่ blockhash จะใช้ในการป้องกันการส่ง transactions ซ้ำ และ transactions ที่เก่าเกินไป. จำนวนสูงสุดของ transaction's blockhash คือ 150 blocks, หรือประมาณ ~1 นาที 19 วินาที ในเวลาตอนที่เขียนนี้.

    ค่าธรรมเนียม (Fees)

    Solana จะเก็บ fee 2 แบบ:

    สำหรับ Solana, transaction fees จะเป็น deterministic (ทุกเหตุการณ์ที่เกิดขึ้น มีปัจจัยที่สามารถกำหนดได้โดยสมบูรณ์): จะยังไม่มี fee market ที่ผู้ใช้ สามารถ จ่าย fees สูงกว่าเพื่อเพิ่มโอกาสในการถูกประมวลผลใน block ถัดไปในเวลาตอนที่เขียนนี้, transaction fees จะเก็บตามจำนวนของ signatures ที่ต้องการใช้ (lamports_per_signature), ไม่ใช่ตามจำนวน resources ที่ใช้ไป ทั้งนี้เป็นเพราะมี hard cap 1232 bytes ในทุกๆ transactions อยู่.

    ทุกๆ transactions จะต้องมี writable account อย่างน้อยหนึงตัวสำหรับ sign transaction. เมื่อ submitted แล้ว writable signer account ที่ถูก serialized เป็นตัวแรกจะเป็น fee payer และ account นี้จะจ่ายค่า transaction โดยไม่สนใจว่า transaction จะสำเร็จหรือไม่. ถ้า fee payer ไม่มี balance พอที่จะจ่าย transaction fee ได้ transaction ก็จะถูกทิ้งไป (dropped).

    ในเวลาตอนที่เขียนนี้, 50% ของทุก transaction fees จะถูกเก็บไปโดย validator ที่เป็นคนสร้าง block, ในขณะที่ 50% ที่เหลือจะถูกเผาทิ้ง (burn). โครงสร้างแบบนี้มีขึ้นเพื่อเป็นแรงจูงใจให้ validators ประมวณผล transactions ให้มากที่สุดเท่าที่จะเป็นไปได้ในช่วง slots ในขณะที่เป็นผู้นำ (leader)

    แหล่งข้อมูลอื่น

    Last Updated:
    - +

    Transactions

    Clients สามารถ invoke programs ด้วยการส่ง (submitting) transaction ไปที่ cluster. transaction จะประกอบไปด้วย instructions, โดยแต่ละอันจะมีเป้าหมายไปที่ program ของตัวเอง. เมื่อ transaction submit ไปแล้ว, Solana Runtimeopen in new window จะ process instructions ตามลำดับ และทำในระดับ atomic. ถ้ามีส่วนไหนของ instruction ล้มเหลว (fail), ทั้ง transaction จะ fail ทั้งหมด.

    เรื่องน่ารู้

    Fact Sheet

    • Instructions คือหน่วยการทำงานพื้นฐานที่สุดของ Solana
    • แต่ละ instruction จะมี:
      • program_id ของ program
      • ชุดของ accounts ทั้งหมดที่ต้องอ่าน (read) หรือเขียน (write)
      • instruction_data byte array ที่จำเพาะเจาะจงสำหรับแต่บะ program
    • สามารถใส่เ instructions ได้มากกว่าหนึ่งตัว เข้าไปในหนึ่ง transaction
    • แต่ละ transaction จะมี:
      • ชุดของ accounts ทั้งหมดที่ต้องอ่าน (read) หรือเขียน (write)
      • instructions หนึ่งตัว หรือมากกว่า
      • blockhash ล่าสุด (recent)
      • signatures หนึ่งตัว หรือมากกว่า
    • Instructions จะ process instructions ตามลำดับ และทำในระดับ atomic
    • ถ้ามีส่วนไหนของ instruction ล้มเหลว (fail), ทั้ง transaction จะ fail ทั้งหมด
    • ขนาดของ Transactions จำกัดอยู่ที่ 1232 bytes

    ลงลึก

    Solana Runtime ต้องการให้ทั้ง instructions และ transactions ระบุ accounts ทั้งหมดที่จะอ่าน หรือเขียน การที่เราเตรียม accounts ไว้ก่อนแบบนี้จะทำให้ runtime สามารถทำงานขนานกัน (parallelize execution) ได้ทั้ง transactions.

    เมื่อ transaction ถูก submit ไปที่ cluster แล้ว, ตัว runtime จะ process instructions ตามลำดับ และทำในระดับ atomic. สำหรับแต่ละ instruction, program ที่รับไปจะแปล (interpret) data array และทำงานบน accounts ที่กำหนดไว้. program จะส่งผลสำเร็จ หรือความผิดพลาด (error code) กลับมา. ถ้าส่ง error กลับมา ทั้ง transaction จะ fail ทันที.

    transaction ที่เป็นการถอนเงิน (debit) จาก account หรือจะแก้ไข data จะต้องมี signature ของเจ้าของ account นั้นส่งมาด้วย. account ไหนที่สามารถเขียนได้ จะถูกระบุไว้ว่า writable. account สามารถรับเงิน (credited) โดยไม่ต้องได้รับอนุญาตจากเจ้าของ ทั้งนี้คนจ่าย (payer)ได้จ่ายครอบคลุมค่า rent และ transaction fees ไปแล้ว.

    ก่อนการ submission, ทุก transactions จะต้องอ้างไปที่ recent blockhashopen in new window. โดยที่ blockhash จะใช้ในการป้องกันการส่ง transactions ซ้ำ และ transactions ที่เก่าเกินไป. จำนวนสูงสุดของ transaction's blockhash คือ 150 blocks, หรือประมาณ ~1 นาที 19 วินาที ในเวลาตอนที่เขียนนี้.

    ค่าธรรมเนียม (Fees)

    Solana จะเก็บ fee 2 แบบ:

    สำหรับ Solana, transaction fees จะเป็น deterministic (ทุกเหตุการณ์ที่เกิดขึ้น มีปัจจัยที่สามารถกำหนดได้โดยสมบูรณ์): จะยังไม่มี fee market ที่ผู้ใช้ สามารถ จ่าย fees สูงกว่าเพื่อเพิ่มโอกาสในการถูกประมวลผลใน block ถัดไปในเวลาตอนที่เขียนนี้, transaction fees จะเก็บตามจำนวนของ signatures ที่ต้องการใช้ (lamports_per_signature), ไม่ใช่ตามจำนวน resources ที่ใช้ไป ทั้งนี้เป็นเพราะมี hard cap 1232 bytes ในทุกๆ transactions อยู่.

    ทุกๆ transactions จะต้องมี writable account อย่างน้อยหนึงตัวสำหรับ sign transaction. เมื่อ submitted แล้ว writable signer account ที่ถูก serialized เป็นตัวแรกจะเป็น fee payer และ account นี้จะจ่ายค่า transaction โดยไม่สนใจว่า transaction จะสำเร็จหรือไม่. ถ้า fee payer ไม่มี balance พอที่จะจ่าย transaction fee ได้ transaction ก็จะถูกทิ้งไป (dropped).

    ในเวลาตอนที่เขียนนี้, 50% ของทุก transaction fees จะถูกเก็บไปโดย validator ที่เป็นคนสร้าง block, ในขณะที่ 50% ที่เหลือจะถูกเผาทิ้ง (burn). โครงสร้างแบบนี้มีขึ้นเพื่อเป็นแรงจูงใจให้ validators ประมวณผล transactions ให้มากที่สุดเท่าที่จะเป็นไปได้ในช่วง slots ในขณะที่เป็นผู้นำ (leader)

    แหล่งข้อมูลอื่น

    Last Updated:
    + diff --git a/docs/.vuepress/dist/th/getting-started/installation.html b/docs/.vuepress/dist/th/getting-started/installation.html index 36119b354..876d32710 100644 --- a/docs/.vuepress/dist/th/getting-started/installation.html +++ b/docs/.vuepress/dist/th/getting-started/installation.html @@ -23,11 +23,11 @@ } การติดตั้ง | คู่มือ Solana - + -

    ติดตั้ง Web3.js

    จะมี libraries บางตัวที่คุณสามารถใช้มันเริ่มเขียน javascript หรือ typescript บน Solana.

    Web3.js

    @solana/web3.jsopen in new window คือ library ที่มีเครื่องมือพื้นฐานมากมายสำหรับการทำงานเบื้องต้น, ส่ง transactions, หรือเอาไว้อ่านข้อมูลจาก blockchain.

    คุณสามาถติดตั้งได้ตามนี้:

    yarn add @solana/web3.js
    +    

    ติดตั้ง Web3.js

    จะมี libraries บางตัวที่คุณสามารถใช้มันเริ่มเขียน javascript หรือ typescript บน Solana.

    Web3.js

    @solana/web3.jsopen in new window คือ library ที่มีเครื่องมือพื้นฐานมากมายสำหรับการทำงานเบื้องต้น, ส่ง transactions, หรือเอาไว้อ่านข้อมูลจาก blockchain.

    คุณสามาถติดตั้งได้ตามนี้:

    yarn add @solana/web3.js
     
    npm install --save @solana/web3.js
     
    <!-- Development (un-minified) -->
     <script src="https://unpkg.com/@solana/web3.js@latest/lib/index.iife.js"></script>
    @@ -71,6 +71,6 @@
     export PATH=$PWD/bin:$PATH
     

    คุณสามารถ run คำสั่งด้านล่างเพื่อให้ได้ผลแบบเดียวกับ prebuilt binaries:

    solana-install init
     
    Last Updated:
    - + diff --git a/docs/.vuepress/dist/th/guides/account-maps.html b/docs/.vuepress/dist/th/guides/account-maps.html index 8f3a0fca0..708c0250e 100644 --- a/docs/.vuepress/dist/th/guides/account-maps.html +++ b/docs/.vuepress/dist/th/guides/account-maps.html @@ -23,11 +23,11 @@ } Account Maps | คู่มือ Solana - + -

    Account Maps

    Maps คือ data structures ที่เราใช้บ่อยๆ ตอนเขียน program ที่เกี่ยวกับ key และ value ของอะไรบางอย่าง.ซึ่ง value อาจจะเป็น type อะไรก็ได้ ส่วน key จะเป็นเหมือน identifier สำหรับ value นั้นๆ การมี key ก็จะทำให้เราสามารถแทรก (insert), อ่านค่ามา (retrieve) และ เปลี่ยนแปลง (update) values เหล่านี้ได้สะดวก

    อย่างที่เรารู้ รูปแบบของ Solana's Account ต้องการ program data และ state data ที่เกี่ยวข้องเก็บอยู่ใน accounts แยกกัน ซึ่งการที่ accounts เหล่านี้มี address associated อยู่ทำให้มันมีลักษณะเหมือน map นั่นเอง! เรียนรู้เกี่ยวกับ Solana's Account mode ที่นี่open in new window.

    ดังนั้นมันก็เหมาะสมแล้วที่เราจะเก็บ values ไว้ใน accounts แยก โดยต้องมี address เป็น key ในการดึง value ออกมา. แต่มันก็มีปัญหาตามมาอยู่บ้างเหมือนกัน เช่น,

    • พอใช้ addresses เป็น keys แล้วทำให้จำยาก

    • พอใช้ addresses ก็อย่างที่เรารู้ว่า public keys ของ Keypairs จะมี public key (หรือ address) และ private key เข้ามาเกี่ยวข้องด้วย ซึ่ง private key จะต้องมีเอาไว้ sign instructions ต่างๆ เวลาที่ต้องการ, ทำให้เราต้องเก็บ private key ไว้ด้วย ซึ่ง ไม่ใช่ทางที่ดี แน่ๆ!

    ปัญหาเหล่าน้ีเป็นปัญหาที่นักพัฒนา Solana จะต้องเจอเวลาที่ต้องใช้ Map ใน programs เราลองมาดูทางแก้กันดีกว่า

    Deriving PDAs

    PDA ย่อมาจาก Program Derived Addressopen in new window, และสั้นๆ คือ addresses จะได้รับสืบทอด (derived) จาก seeds และ a program id (หรือ address).

    ที่พิเศษสำหรับ PDAs คือ addresses เหล่านี้จะไม่เกี่ยวข้องกับ private key ใดๆ ทั้งนี้เพราะ addresses เหล่านี้ไม่ได้อยู่บน ED25519 curve ดังนั้นจะมี เฉพาะ program ที่ address นี้ได้รับสืบทอดมาเท่านั้นถึงจะสามารถ sign instruction นี้ด้วย key ได้ ร่วมกับ seeds ที่เตรียมไว้ เรียนรู้เกี่ยวกับเรื่องนี้ได้ ที่นี่open in new window.

    ตอนนี้เราก็ได้รู้จักกับ PDAs แล้วว่ามันคืออะไร, มาลองใช้พวกมันในการ map accounts กันเถอะ! เราจะใช้ตัวอย่างจาก Blog program เพื่อแสดงให้เห็นว่าเราจะใช้งานมันได้ยังไง

    ใน Blog program เราต้องการให้แต่ละ User มี Blog คนละตัว และ blog นี้จะมีได้หลาย Posts นั่นหมายความว่าเราต้องทำการ mapping แต่ละ user ไปที่ blog และแต่ละ post จะมีตัวชี้คอย mapped ไปที่ blog

    พูดสั้นๆ ก็คือ, มี 1:1 mapping ระหว่าง user กับ blog และ 1:N mapping ระหว่าง blog กับ posts.

    สำหรับ 1:1 mapping, เราต้องการให้ blog address สืบทอดมาจาก user เท่านั้น, จะได้ทำให้เราดึง blog ได้ตาม authority (หรือตาม user นั่นเอง). ดังนั้น seed จึงต้องมี authority's key และควรจะขึ้นต้นด้วย "blog" เพื่อใช้เป็นตัวแยกประเภท (type identifier)

    สำหรับ 1:N mapping, เราต้องการให้แต่ละ post address สืบทอดได้จาก หลายๆ blog ที่เกี่ยวข้อง แต่ใช้คนละ identifier, เพื่อจะได้มีความแตกต่างระหว่าง posts สำหรับทุกๆ N posts ใน blog ลองดูตัวอย่างด้านล่างจะเห็นว่าในแต่ละ post address จะถูกสืบทอด (derived from) ​มาจาก blog's key, slug เพื่อจำแนกแต่่ละ post, และขึ้นต้นด้วย "post" เพื่อใช้เป็นตัวแยกประเภท (type identifier) อีกทีนึง.

    ตัวอย่าง code อยู่ด้านล่าง,

    Press </> button to view full source
    use anchor_lang::prelude::*;
    +    

    Account Maps

    Maps คือ data structures ที่เราใช้บ่อยๆ ตอนเขียน program ที่เกี่ยวกับ key และ value ของอะไรบางอย่าง.ซึ่ง value อาจจะเป็น type อะไรก็ได้ ส่วน key จะเป็นเหมือน identifier สำหรับ value นั้นๆ การมี key ก็จะทำให้เราสามารถแทรก (insert), อ่านค่ามา (retrieve) และ เปลี่ยนแปลง (update) values เหล่านี้ได้สะดวก

    อย่างที่เรารู้ รูปแบบของ Solana's Account ต้องการ program data และ state data ที่เกี่ยวข้องเก็บอยู่ใน accounts แยกกัน ซึ่งการที่ accounts เหล่านี้มี address associated อยู่ทำให้มันมีลักษณะเหมือน map นั่นเอง! เรียนรู้เกี่ยวกับ Solana's Account mode ที่นี่open in new window.

    ดังนั้นมันก็เหมาะสมแล้วที่เราจะเก็บ values ไว้ใน accounts แยก โดยต้องมี address เป็น key ในการดึง value ออกมา. แต่มันก็มีปัญหาตามมาอยู่บ้างเหมือนกัน เช่น,

    • พอใช้ addresses เป็น keys แล้วทำให้จำยาก

    • พอใช้ addresses ก็อย่างที่เรารู้ว่า public keys ของ Keypairs จะมี public key (หรือ address) และ private key เข้ามาเกี่ยวข้องด้วย ซึ่ง private key จะต้องมีเอาไว้ sign instructions ต่างๆ เวลาที่ต้องการ, ทำให้เราต้องเก็บ private key ไว้ด้วย ซึ่ง ไม่ใช่ทางที่ดี แน่ๆ!

    ปัญหาเหล่าน้ีเป็นปัญหาที่นักพัฒนา Solana จะต้องเจอเวลาที่ต้องใช้ Map ใน programs เราลองมาดูทางแก้กันดีกว่า

    Deriving PDAs

    PDA ย่อมาจาก Program Derived Addressopen in new window, และสั้นๆ คือ addresses จะได้รับสืบทอด (derived) จาก seeds และ a program id (หรือ address).

    ที่พิเศษสำหรับ PDAs คือ addresses เหล่านี้จะไม่เกี่ยวข้องกับ private key ใดๆ ทั้งนี้เพราะ addresses เหล่านี้ไม่ได้อยู่บน ED25519 curve ดังนั้นจะมี เฉพาะ program ที่ address นี้ได้รับสืบทอดมาเท่านั้นถึงจะสามารถ sign instruction นี้ด้วย key ได้ ร่วมกับ seeds ที่เตรียมไว้ เรียนรู้เกี่ยวกับเรื่องนี้ได้ ที่นี่open in new window.

    ตอนนี้เราก็ได้รู้จักกับ PDAs แล้วว่ามันคืออะไร, มาลองใช้พวกมันในการ map accounts กันเถอะ! เราจะใช้ตัวอย่างจาก Blog program เพื่อแสดงให้เห็นว่าเราจะใช้งานมันได้ยังไง

    ใน Blog program เราต้องการให้แต่ละ User มี Blog คนละตัว และ blog นี้จะมีได้หลาย Posts นั่นหมายความว่าเราต้องทำการ mapping แต่ละ user ไปที่ blog และแต่ละ post จะมีตัวชี้คอย mapped ไปที่ blog

    พูดสั้นๆ ก็คือ, มี 1:1 mapping ระหว่าง user กับ blog และ 1:N mapping ระหว่าง blog กับ posts.

    สำหรับ 1:1 mapping, เราต้องการให้ blog address สืบทอดมาจาก user เท่านั้น, จะได้ทำให้เราดึง blog ได้ตาม authority (หรือตาม user นั่นเอง). ดังนั้น seed จึงต้องมี authority's key และควรจะขึ้นต้นด้วย "blog" เพื่อใช้เป็นตัวแยกประเภท (type identifier)

    สำหรับ 1:N mapping, เราต้องการให้แต่ละ post address สืบทอดได้จาก หลายๆ blog ที่เกี่ยวข้อง แต่ใช้คนละ identifier, เพื่อจะได้มีความแตกต่างระหว่าง posts สำหรับทุกๆ N posts ใน blog ลองดูตัวอย่างด้านล่างจะเห็นว่าในแต่ละ post address จะถูกสืบทอด (derived from) ​มาจาก blog's key, slug เพื่อจำแนกแต่่ละ post, และขึ้นต้นด้วย "post" เพื่อใช้เป็นตัวแยกประเภท (type identifier) อีกทีนึง.

    ตัวอย่าง code อยู่ด้านล่าง,

    Press </> button to view full source
    use anchor_lang::prelude::*;
     
     declare_id!("2vD2HBhLnkcYcKxnxLjFYXokHdcsgJnyEXGnSpAX376e");
     
    @@ -1136,6 +1136,6 @@
     tx.add(insertBCIx);
     tx.add(insertCAIx);
     
    Last Updated:
    - + diff --git a/docs/.vuepress/dist/th/guides/data-migration.html b/docs/.vuepress/dist/th/guides/data-migration.html index 032d9ba70..96429acb3 100644 --- a/docs/.vuepress/dist/th/guides/data-migration.html +++ b/docs/.vuepress/dist/th/guides/data-migration.html @@ -23,11 +23,11 @@ } Migrating Program Data Accounts | คู่มือ Solana - + -

    Migrating a Programs Data Accounts

    เราสามารถ migrate program's data accounts ได้ยังไง?

    เวลาที่เราสร้าง program ขึ้นมา แต่ละ data account ที่เกี่ยวข้อง (associated) กับ program จะมี data structure ที่ตายตัว. แล้วถ้าเราต้องการที่จะ upgrade program derived account สุดท้ายเราจะมี program derived accounts ที่เป็น structure เก่าเหลือทิ้งไว้อยู่จำนวนหนึ่ง

    แต่ถ้าเราใช้วิธี account versioning, เราจะสามารถ upgrade accounts เก่าไปเป็น structure ใหม่ได้

    Note

    นี่เป็นเพียงหนึ่งในหลายวิธีในการทำ migration สำหรับ Program Owned Accounts (POA).

    สถานการณ์ (Scenario)

    การจะทำ version และ migrate account data เราจะต้องเตรียม id สำหรับแต่ละ account. ซึ่ง id เหล่านี้จะช่วยให้เราสามารถบ่งบอก account version ได้เวลาที่เราส่งมันเข้าไปใน program, และทำให้เราสามารถจัดการ account ได้อย่างถูกต้อง

    ลองดู account state และ program ด้านล่างนี้:

    Program Account v1
    Press </> button to view full source
    //! @brief account_state manages account data
    +    

    Migrating a Programs Data Accounts

    เราสามารถ migrate program's data accounts ได้ยังไง?

    เวลาที่เราสร้าง program ขึ้นมา แต่ละ data account ที่เกี่ยวข้อง (associated) กับ program จะมี data structure ที่ตายตัว. แล้วถ้าเราต้องการที่จะ upgrade program derived account สุดท้ายเราจะมี program derived accounts ที่เป็น structure เก่าเหลือทิ้งไว้อยู่จำนวนหนึ่ง

    แต่ถ้าเราใช้วิธี account versioning, เราจะสามารถ upgrade accounts เก่าไปเป็น structure ใหม่ได้

    Note

    นี่เป็นเพียงหนึ่งในหลายวิธีในการทำ migration สำหรับ Program Owned Accounts (POA).

    สถานการณ์ (Scenario)

    การจะทำ version และ migrate account data เราจะต้องเตรียม id สำหรับแต่ละ account. ซึ่ง id เหล่านี้จะช่วยให้เราสามารถบ่งบอก account version ได้เวลาที่เราส่งมันเข้าไปใน program, และทำให้เราสามารถจัดการ account ได้อย่างถูกต้อง

    ลองดู account state และ program ด้านล่างนี้:

    Program Account v1
    Press </> button to view full source
    //! @brief account_state manages account data
     
     use arrayref::{array_ref, array_refs};
     use borsh::{BorshDeserialize, BorshSerialize};
    @@ -676,6 +676,6 @@
         }
     }
     

    หลัวจาก build และ submit instruction แล้ว: VersionProgramInstruction::SetString(String) ตอนนี้เราจะมี 'upgraded' account data layout ตามภาพ

    Program Account v2

    Resources

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/th/guides/debugging-solana-programs.html b/docs/.vuepress/dist/th/guides/debugging-solana-programs.html index fefefc812..8aa0b3c20 100644 --- a/docs/.vuepress/dist/th/guides/debugging-solana-programs.html +++ b/docs/.vuepress/dist/th/guides/debugging-solana-programs.html @@ -23,11 +23,11 @@ } Debugging Solana Programs | คู่มือ Solana - + -

    Debugging Solana Programs

    มีทางเลือก และเครื่องมือสนับสนุนมากมายสำหรับทดสอบ และ debugging Solana BPF program.

    เรื่องน่ารู้

    Fact Sheet

    • crate solana-program-test จะทำให้ local runtime ของเราสามารถ test และ debug program ได้ (ด้วย vscode).
    • crate solana-validator จะทำให้ solana-test-validator การ test บน local validator node ทำได้ดีขึ้น เราสามารถ run จาก editor ได้ แต่ breakpoints ใน program จะถูกมองข้ามไป.
    • เครื่องมือ CLI solana-test-validator runs, loads program และประมวลผล transaction โดยทำงานผ่าน command line กับ Rust applications หรือ Javascript/Typescript app โดยใช้ web3.
    • ทั้งหมดที่ว่ามา เราแนะนำให้ใช้ macro msg! ใน program ในตอนเริ่ม และเอาอออกเมื่อ test และมั่นใจว่าทำงานถูกแล้วแล้ว จำไว้ว่า msg! ใช้ Compute Units ที่ทำให้ program ล้มเหลวได้ถ้าใช้ Compute Unit เกินค่าที่กำหนดไว้.

    ขั้นตอนต่อไปเราจะใช้ solana-program-bpf-template. Clone ไปที่เครื่องของเรา:

    git clone git@github.com:mvines/solana-bpf-program-template.git
    +    

    Debugging Solana Programs

    มีทางเลือก และเครื่องมือสนับสนุนมากมายสำหรับทดสอบ และ debugging Solana BPF program.

    เรื่องน่ารู้

    Fact Sheet

    • crate solana-program-test จะทำให้ local runtime ของเราสามารถ test และ debug program ได้ (ด้วย vscode).
    • crate solana-validator จะทำให้ solana-test-validator การ test บน local validator node ทำได้ดีขึ้น เราสามารถ run จาก editor ได้ แต่ breakpoints ใน program จะถูกมองข้ามไป.
    • เครื่องมือ CLI solana-test-validator runs, loads program และประมวลผล transaction โดยทำงานผ่าน command line กับ Rust applications หรือ Javascript/Typescript app โดยใช้ web3.
    • ทั้งหมดที่ว่ามา เราแนะนำให้ใช้ macro msg! ใน program ในตอนเริ่ม และเอาอออกเมื่อ test และมั่นใจว่าทำงานถูกแล้วแล้ว จำไว้ว่า msg! ใช้ Compute Units ที่ทำให้ program ล้มเหลวได้ถ้าใช้ Compute Unit เกินค่าที่กำหนดไว้.

    ขั้นตอนต่อไปเราจะใช้ solana-program-bpf-template. Clone ไปที่เครื่องของเรา:

    git clone git@github.com:mvines/solana-bpf-program-template.git
     cd solana-bpf-program-template
     code .
     

    Runtime Testing และ Debugging ใน editor

    เปิด file src/lib.rs

    เราจะเห็นว่า program นั้นง่ายและ แค่ logs ตัว content ที่ได้รับมาจาก program entrypoint function: process_instruction

    1. ไปตรงที่ #[cfg(test)] และกด Run Tests มันก็จะ build program และทำการ test async fn test_transaction() เราจะเห็น log messages (แบบย่อ)ใน vscode terminal ตามข้างล่างนี้:
    running 1 test
    @@ -48,6 +48,6 @@
     test test_validator_transaction ... ok
     test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 6.40s
     

    การ Debugging แบบนี้จะทำให้เราสามารถ debug functions และ methods ใน test body ได้แต่จะไม่มี breakpoint ใน program.

    มันเจ๋งมากใช่มั้ยล่ะ?

    Local Validator Node Testing from Client Apps

    และสุดท้ายเราสามารถเปิด local validating node และ load program ของเรา และ accounts ใดๆ เข้าไปโดยใช้ solana-test-validator จาก command line.

    จะทำวิธีนี้ได้เราจะต้องใช้ client application โดยใช้ Rust RcpClient หรือใช้ JavaScript or Typescript clients

    ลอง solana-test-validator --help สำหรับรายละเอียดเพิ่มเติม และตัวเลือกอื่นๆ สำหรับ program ตัวอย่างด้านล่างนี่คือขั้นตอนติดตั้ง:

    1. เปิด terminal ใน repo folder
    2. Run solana config set -ul เพื่อตั้งค่าตัวเลือกให้ชี้ไปที่ local
    3. Run solana-test-validator --bpf-program target/deploy/bpf_program_template-keypair.json target/deploy/bpf_program_template.so
    4. เปิด terminal และ run solana logs เพื่อเปิด log streamer
    5. เราสามารถ run client program ของเรา และดู program output ใน terminal ที่เราเปิด log streamer ไว้

    นี่มันดีมากเลยนะ!

    Resources

    solana-program-bpf-templateopen in new window

    RcpClientopen in new window

    JavaScript/Typescript Libraryopen in new window

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/th/guides/feature-parity-testing.html b/docs/.vuepress/dist/th/guides/feature-parity-testing.html index d40162305..9198cbc6d 100644 --- a/docs/.vuepress/dist/th/guides/feature-parity-testing.html +++ b/docs/.vuepress/dist/th/guides/feature-parity-testing.html @@ -23,17 +23,17 @@ } Feature Parity Testing | คู่มือ Solana - + -

    การทดสอบให้เหมือนกัน (Parity Testing)

    การทดสอบ program จะทำให้เรามั่นใจได้ในทั้งคุณภาพ และผลลัพทธ์ที่ได้

    เรื่องน่ารู้

    Fact Sheet

    • คุณสมบัติเฉพาะ (Features) คือความสามารถ (capabilities) ที่มีมากับ Solana validators และต้องเปิดถึงจะสามารถใช้งานได้
    • Features อาจจะถูกเปิดเพียง cluster เดียว (เช่นบน testnet) แต่ไม่ได้เปิดให้ใช้ที่อื่น (เช่น mainnet-beta).
    • อย่างไรก็ตามเมื่อใช้งาน solana-test-validator ด้วยค่าตั้งต้นปกติที่ local, ทุกๆ features จะถูกเปิดให้ใช้งานได้ทั้งหมดตาม Solana version ทำให้ผลที่ได้เวลา testing ที่ local กับ capabilities และผลของการทดสอบอาจจะไม่ตรงกันเวลาที่ deploying และ running ใน cluster อื่นๆ!

    Scenario

    สมมติว่าเรามี transaction ที่มี (3) instructions และแต่ละ instruction ใช้ประมาณ 100_000 Compute Units (CU) บน Solana 1.8.x, เราจะเห็น instruction CU consumption คล้ายๆ แบบนี้:

    InstructionStarting CUExecutionRemaining CU
    1200_000-100_000100_000
    2200_000-100_000100_000
    3200_000-100_000100_000

    บน Solana 1.9.2 จะมี feature 'transaction wide compute cap' ที่เพิ่มเข้ามาในเรื่อง transaction โดยค่าปกติจะมี budget ให้ 200_000 CU และ instructions ที่ติดไป จะหัก budget มาจาก transaction นั้นด้วย. การใช้ transaction ที่เคยใช้ไปก่อนหน้าจะได้ผลที่แตกต่างเป็นอย่างมาก:

    InstructionStarting CUExecutionRemaining CU
    1200_000-100_000100_000
    2100_000-100_0000
    30FAIL!!!FAIL!!!

    มุแง! ถ้าเราไม่รู้มาก่อนคงตกใจแย่ เพราะเราไม่ได้เปลี่ยน instruction อะไรเลยแล้วใน devnet ก็ใช้ได้แต่ที่ local ทำไมพัง?!?

    เราสามารถเพิ่ม Transaction budget โดยรวมได้ประมาณ 300_000 CU เผื่อเราจะได้รู้สึกดีขึ้น ตัวอย่างด้านบนพยายามแสดงให้เราเห็นว่าทำไมการทดสอบด้วย Feature Parity ถึงเป็นเรื่องที่ดีที่จะเตรียมตัวไว้ก่อนเพื่อหลีกเลี่ยงความสับสนในภายหลัง

    Feature Status

    มันง่ายมากที่จะตรวจสอบว่า features ไหนเปิดให้ใช้สำหรับแต่ละ cluster ด้วยคำสั่ง solana feature status

    solana feature status -ud   // Displays by feature status for devnet
    +    

    การทดสอบให้เหมือนกัน (Parity Testing)

    การทดสอบ program จะทำให้เรามั่นใจได้ในทั้งคุณภาพ และผลลัพทธ์ที่ได้

    เรื่องน่ารู้

    Fact Sheet

    • คุณสมบัติเฉพาะ (Features) คือความสามารถ (capabilities) ที่มีมากับ Solana validators และต้องเปิดถึงจะสามารถใช้งานได้
    • Features อาจจะถูกเปิดเพียง cluster เดียว (เช่นบน testnet) แต่ไม่ได้เปิดให้ใช้ที่อื่น (เช่น mainnet-beta).
    • อย่างไรก็ตามเมื่อใช้งาน solana-test-validator ด้วยค่าตั้งต้นปกติที่ local, ทุกๆ features จะถูกเปิดให้ใช้งานได้ทั้งหมดตาม Solana version ทำให้ผลที่ได้เวลา testing ที่ local กับ capabilities และผลของการทดสอบอาจจะไม่ตรงกันเวลาที่ deploying และ running ใน cluster อื่นๆ!

    Scenario

    สมมติว่าเรามี transaction ที่มี (3) instructions และแต่ละ instruction ใช้ประมาณ 100_000 Compute Units (CU) บน Solana 1.8.x, เราจะเห็น instruction CU consumption คล้ายๆ แบบนี้:

    InstructionStarting CUExecutionRemaining CU
    1200_000-100_000100_000
    2200_000-100_000100_000
    3200_000-100_000100_000

    บน Solana 1.9.2 จะมี feature 'transaction wide compute cap' ที่เพิ่มเข้ามาในเรื่อง transaction โดยค่าปกติจะมี budget ให้ 200_000 CU และ instructions ที่ติดไป จะหัก budget มาจาก transaction นั้นด้วย. การใช้ transaction ที่เคยใช้ไปก่อนหน้าจะได้ผลที่แตกต่างเป็นอย่างมาก:

    InstructionStarting CUExecutionRemaining CU
    1200_000-100_000100_000
    2100_000-100_0000
    30FAIL!!!FAIL!!!

    มุแง! ถ้าเราไม่รู้มาก่อนคงตกใจแย่ เพราะเราไม่ได้เปลี่ยน instruction อะไรเลยแล้วใน devnet ก็ใช้ได้แต่ที่ local ทำไมพัง?!?

    เราสามารถเพิ่ม Transaction budget โดยรวมได้ประมาณ 300_000 CU เผื่อเราจะได้รู้สึกดีขึ้น ตัวอย่างด้านบนพยายามแสดงให้เราเห็นว่าทำไมการทดสอบด้วย Feature Parity ถึงเป็นเรื่องที่ดีที่จะเตรียมตัวไว้ก่อนเพื่อหลีกเลี่ยงความสับสนในภายหลัง

    Feature Status

    มันง่ายมากที่จะตรวจสอบว่า features ไหนเปิดให้ใช้สำหรับแต่ละ cluster ด้วยคำสั่ง solana feature status

    solana feature status -ud   // Displays by feature status for devnet
     solana feature status -ut   // Displays for testnet
     solana feature status -um   // Displays for mainnet-beta
     solana feature status -ul   // Displays for local, requires running solana-test-validator
     

    นอกจากนี้เรายังสามารถใช้ scfsd เพื่อติดตามดูทุกๆ feature ในทุกๆ clusters ตามภามบางส่วนข้างล่าง และมันยังไม่ต้องใช้ solana-test-validator ในการทำงานด้วย:

    Feature Status Heatmap

    Parity Testing

    ตามที่บอกไปแล้วว่า solana-test-validator จะเปิด ทุกๆ features อัตโนมัติ ดังนั้นเพื่อที่จะตอบคำถามที่ว่า "เราจะสามารถทดสอบที่ local ด้วย environment ที่เหมือน devnet, testnet หรือแม้แต่ mainnet-beta ได้ยังไง?".

    ทางแก้ไข: PRs ที่เพิ่มเข้ามาใน Solana 1.9.6 สามารถทำให้เราปิด features ต่างๆ ได้:

    solana-test-validator --deactivate-feature <FEATURE_PUBKEY> ...
     

    ตัวอย่างง่ายๆ

    สมมติว่าคุณมี program ง่ายๆ ที่ log ข้อมูลที่ได้รับใน entry-point และเราจะทดสอบ transaction ที่เพิ่ม (2) instructions สำหรับ program ของเรา.

    เปิดทุก features

    1. เราจะเปิด test validator ใน terminal:
    solana config set -ul
    -solana-test-validator -l ./ledger --bpf-program target/deploy/PROGNAME.so --reset`
    +solana-test-validator -l ./ledger --bpf-program ADDRESS target/deploy/PROGNAME.so --reset`
     
    1. ใน terminal อีกอันให้เปิด log streamer:
    solana logs
     
    1. แล้วก็ run transaction เราจะเห็น log ที่คุ้นเคยใน terminal (มีปรับให้ดูง่าย):
    Program PWDnx8LkjJUn9bAVzG6Fp6BuvB41x7DkBZdo9YLMGcc invoke [1]
     Program log: process_instruction: PWDnx8LkjJUn9bAVzG6Fp6BuvB41x7DkBZdo9YLMGcc: 0 accounts, data=[0]
    @@ -301,7 +301,7 @@
         );
         assert!(txn.is_ok());
     }
    -

    ทดสอบกันให้สนุกนะ!

    Resources

    scfsdopen in new window

    gadget-scfsopen in new window

    Last Updated:
    - +

    ทดสอบกันให้สนุกนะ!

    Resources

    scfsdopen in new window

    gadget-scfsopen in new window

    Last Updated:
    + diff --git a/docs/.vuepress/dist/th/guides/get-program-accounts.html b/docs/.vuepress/dist/th/guides/get-program-accounts.html index 16e62b019..325edecda 100644 --- a/docs/.vuepress/dist/th/guides/get-program-accounts.html +++ b/docs/.vuepress/dist/th/guides/get-program-accounts.html @@ -23,11 +23,11 @@ } Get Program Accounts | คู่มือ Solana - + -

    Get Program Accounts

    นี่ตือ RPC method ที่จะคืนค่า accounts ที่ program เป็นเจ้าของ. ในตอนนี้ยังไม่สนับสนุน pagination. การ requests ไปที่ getProgramAccounts จะต้องส่ง parameters dataSlice และ/หรือ filters ไปด้วยเพื่อลด response time และจะได้ส่งกลับมาเฉพาะผลลัพท์ที่ต้องการ.

    เรื่องน่ารู้

    Parameters

    • programId: string - Pubkey ของ program ที่จะ query, เตรียมในรูปแบบ base58 encoded string
    • (optional) configOrCommitment: object - Configuration parameters ที่มี optional fields ตามนี้:
      • (optional) commitment: string - State commitmentopen in new window
      • (optional) encoding: string - Encoding สำหรับ account data, ทั้ง: base58, base64, หรือ jsonParsed. Note, web3js ต้องใช้ getParsedProgramAccountsopen in new window แทน
      • (optional) dataSlice: object - จำกัดผลลัพท์ account data โดยขึ้นอยู่กับ:
        • offset: number - จำนวนของ bytes เริ่มต้นของ account data ที่จะเริ่มคืนค่ามา
        • length: number - จำนวนของ bytes ของ account data ที่จะส่งกลับมา
      • (optional) filters: array - คัดกรอง results โดยใช้ filter objects ข้างล่าง:
        • memcmp: object - ตรงกับ series ของ bytes ของ account data:
          • offset: number - จำนวนของ bytes เริ่มต้นของ account data ที่จะเทียบ
          • bytes: string - Data ที่จะเทียบด้วย, ในรูปแบบ base58 encoded string จำกัดที่ 129 bytes
        • dataSize: number - เทียบ account data length ด้วย data size ที่ระบุไว้
      • (optional) withContext: boolean - ครอบ (wrap)​ ผลลัพท์ในรูปแบบ RpcResponse JSON objectopen in new window
    Response

    ตามปกติแล้ว getProgramAccounts จะคืนค่า array ของ JSON objects ที่มีโครงสร้างตามนี้:

    • pubkey: string - account pubkey ในรูปแบบของ base58 encoded string
    • account: object - JSON object ที่มี fields:
      • lamports: number, ตัวเลขของ lamports ที่มีใน account
      • owner: string, base58 encoded pubkey ของ program ที่ account ได้ assigned ไว้
      • data: string | object - data ที่เกี่ยวข้องกับ account อาจจะเป็นได้ทั้ง encoded binary data หรือ JSON format ขึ้นอยู่กับ encoding parameter
      • executable: boolean, ตัวบ่งชี้ว่า account นี้มี program
      • rentEpoch: number, epoch ที่ account นี้จะต้องจ่าย rent

    ลงลึก

    getProgramAccounts คือ RPC method ที่จะคืนค่าทุก accounts ที่ program เป็นเจ้าของ. เราสามารถใช้ getProgramAccounts สำหรับดึงข้อมูลได้หลายแบบ เช่น:

    • หาทุกๆ token accounts ของ wallet
    • หาทุกๆ token accounts ที่มี mint เดียวกัน(เช่น ทุกๆ คนที่ถือ token SRMopen in new window ไว้)
    • หาทุกๆ custom accounts ที่ใช้ program นี้(เช่น ทุกๆ คนที่ใช้ Mangoopen in new window)

    นอกจากจะมีประโยชน์แล้ว, getProgramAccounts ยังถูกเข้าใจผิดอยู่บ้าง เพราะด้วยข้อจำกัดของมัน การดึงข้อมูลที่ใช้ getProgramAccounts จะทำให้ RPC nodes ค้นหา data ขนาดใหญ่. การค้นหานั้นกินทั้ง memory และ resource มากๆ. ผลที่เกิดขึ้นคือถ้าเรียกใช้บ่อยเกินไป หรือใหญ่เกินไปจะทำให้เกิด connection timeouts ได้. ในตอนนี้ getProgramAccounts endpoint ยังไม่สนับสนุน pagination. ถ้าผลการค้นหาใหญ่เกินไปผลลัพท์จะถูกตัดทิ้ง.

    เพื่อหลีกหนีข้อจำกัดนี้, getProgramAccounts เลยมี parameters ให้ใช้: ชื่อ, dataSlice และ filters options memcmp และ dataSize. ถ้าใช้ parameters เหล่านี้, เราจะสามารถลดขอบเขตของการค้นหาให้แคบลงเพื่อควบคุม และประมาณขนาดของผลลัพท์ได้.

    ตัวอย่างทั่วไปของ getProgramAccounts ที่เกี่ยวข้องกับ SPL-Token Programopen in new window เช่น การค้นหาทุกๆ accounts ที่ Token Program เป็นเจ้าของโดยใช้ การค้นหาแบบปกติ จะทำให้ต้องไปค้นหาข้อมูลมากมาย แต่ถ้าเราใส่ parameters เข้าไปด้วยเราจะสามารถ request ได้อย่างประสิทธิภาพ และได้ data เฉพาะที่เราจะใช้.

    filters

    parameter ที่ใช้บ่อยๆ สำหรับ getProgramAccounts คือ filters array. ซึ่ง array นี้จะรับ filters 2 แบบคือ dataSize และ memcmp ก่อนที่จะใช้ filters นี้เราต้องรู้ก่อนว่า data ที่เราจะร้องขอมีรูปแบบยังไง และจัดเรียงไว้ยังไง.

    dataSize

    ในกรณีของ Token Program, เราจะเห็นว่า token accounts มีขนาด 165 bytesopen in new window. และ token account จะมี 8 fields ที่แตกต่างกันโดยแต่ละ field จะมีขนาด bytes ที่แน่นอน เราสามารถแสดง visualize ว่า data มีการวางรูปแบบยังไงโดยใช้รูปด้านล่าง.

    Account Size

    ถ้าเราต้องการหาทุกๆ token accounts โดยมี wallet address ของเราเป็นเจ้าของ, เราสามารถใส่ { dataSize: 165 } ใน filters เพื่อลดขอบเขตการค้นหาของเราให้เหลือเฉพาะ accounts ที่ขนาด 165 bytes เท่านั้น แต่เท่านี้ก็ยังไม่ดีพอ เราต้องต้องใส่ filter เข้าไปด้วยว่าเราเป็นเจ้าของ (owner) มันด้วย เราสามารถทำได้ด้วยการเพิ่ม memcmp filter เข้าไป.

    memcmp

    memcmp filter หรือ "memory comparison" filter, จะทำให้เราสามารถเปรียบเทียบ data ใน field ไหนก็ได้ที่เก็บอยู่ใน​ account ของเรา. โดยเฉพาะเราสามารถค้นหาเฉพาะ accounts ที่ตรงกับ bytes ที่ตำแหน่งใดๆ. memcmp ต้องการ 2 arguments:

    • offset: ตำแหน่งที่จะเริ่มเทียบ data มีขนาดเป็น bytes และแสดงเป็นจำนวนเต็ม.
    • bytes: คือ data ตรงกับ account's data. จะใช้ base-58 encoded string ขนาดไม่เกิน 129 bytes.

    แต่ต้องระวังไว้ว่า memcmp จะคืนค่ามาก็ต่อเมื่อเจอ bytes ตรงกันเท่านั้น ซึ่งในตอนนี้เรายังไม่สามารถเทียบหาค่าที่น้อยกว่า หรือมากกว่า bytes ที่เราใส่ไปได้

    ในตัวอย่าง Token Program อันต่อไป, เราสามารถกำหนดการค้นหาให้คืนค่ามาเฉพาะ token account ที่ตรงกับ wallet address ของเรา ถ้าเราลองดูที่ token account จะเห็นว่า 2 fields แรกบน token account คือ pubkeys, และแต่ละ pubkey จะมีขนาด 32 bytes โดยที่ owner จะอยู่ที่ field ที่ 2 เราจึงสามารถเริ่ม memcmp ที่ offset ที่ 32 bytes จากตรงนั้นเราก็สามารถมองหา account ที่ ower ตรงกับ wallet address ของเรา

    Account Size

    เราสามารถลอง query ได้ด้วยตัวอย่างด้านล่าง:

    import { TOKEN_PROGRAM_ID } from "@solana/spl-token";
    +    

    Get Program Accounts

    นี่ตือ RPC method ที่จะคืนค่า accounts ที่ program เป็นเจ้าของ. ในตอนนี้ยังไม่สนับสนุน pagination. การ requests ไปที่ getProgramAccounts จะต้องส่ง parameters dataSlice และ/หรือ filters ไปด้วยเพื่อลด response time และจะได้ส่งกลับมาเฉพาะผลลัพท์ที่ต้องการ.

    เรื่องน่ารู้

    Parameters

    • programId: string - Pubkey ของ program ที่จะ query, เตรียมในรูปแบบ base58 encoded string
    • (optional) configOrCommitment: object - Configuration parameters ที่มี optional fields ตามนี้:
      • (optional) commitment: string - State commitmentopen in new window
      • (optional) encoding: string - Encoding สำหรับ account data, ทั้ง: base58, base64, หรือ jsonParsed. Note, web3js ต้องใช้ getParsedProgramAccountsopen in new window แทน
      • (optional) dataSlice: object - จำกัดผลลัพท์ account data โดยขึ้นอยู่กับ:
        • offset: number - จำนวนของ bytes เริ่มต้นของ account data ที่จะเริ่มคืนค่ามา
        • length: number - จำนวนของ bytes ของ account data ที่จะส่งกลับมา
      • (optional) filters: array - คัดกรอง results โดยใช้ filter objects ข้างล่าง:
        • memcmp: object - ตรงกับ series ของ bytes ของ account data:
          • offset: number - จำนวนของ bytes เริ่มต้นของ account data ที่จะเทียบ
          • bytes: string - Data ที่จะเทียบด้วย, ในรูปแบบ base58 encoded string จำกัดที่ 129 bytes
        • dataSize: number - เทียบ account data length ด้วย data size ที่ระบุไว้
      • (optional) withContext: boolean - ครอบ (wrap)​ ผลลัพท์ในรูปแบบ RpcResponse JSON objectopen in new window
    Response

    ตามปกติแล้ว getProgramAccounts จะคืนค่า array ของ JSON objects ที่มีโครงสร้างตามนี้:

    • pubkey: string - account pubkey ในรูปแบบของ base58 encoded string
    • account: object - JSON object ที่มี fields:
      • lamports: number, ตัวเลขของ lamports ที่มีใน account
      • owner: string, base58 encoded pubkey ของ program ที่ account ได้ assigned ไว้
      • data: string | object - data ที่เกี่ยวข้องกับ account อาจจะเป็นได้ทั้ง encoded binary data หรือ JSON format ขึ้นอยู่กับ encoding parameter
      • executable: boolean, ตัวบ่งชี้ว่า account นี้มี program
      • rentEpoch: number, epoch ที่ account นี้จะต้องจ่าย rent

    ลงลึก

    getProgramAccounts คือ RPC method ที่จะคืนค่าทุก accounts ที่ program เป็นเจ้าของ. เราสามารถใช้ getProgramAccounts สำหรับดึงข้อมูลได้หลายแบบ เช่น:

    • หาทุกๆ token accounts ของ wallet
    • หาทุกๆ token accounts ที่มี mint เดียวกัน(เช่น ทุกๆ คนที่ถือ token SRMopen in new window ไว้)
    • หาทุกๆ custom accounts ที่ใช้ program นี้(เช่น ทุกๆ คนที่ใช้ Mangoopen in new window)

    นอกจากจะมีประโยชน์แล้ว, getProgramAccounts ยังถูกเข้าใจผิดอยู่บ้าง เพราะด้วยข้อจำกัดของมัน การดึงข้อมูลที่ใช้ getProgramAccounts จะทำให้ RPC nodes ค้นหา data ขนาดใหญ่. การค้นหานั้นกินทั้ง memory และ resource มากๆ. ผลที่เกิดขึ้นคือถ้าเรียกใช้บ่อยเกินไป หรือใหญ่เกินไปจะทำให้เกิด connection timeouts ได้. ในตอนนี้ getProgramAccounts endpoint ยังไม่สนับสนุน pagination. ถ้าผลการค้นหาใหญ่เกินไปผลลัพท์จะถูกตัดทิ้ง.

    เพื่อหลีกหนีข้อจำกัดนี้, getProgramAccounts เลยมี parameters ให้ใช้: ชื่อ, dataSlice และ filters options memcmp และ dataSize. ถ้าใช้ parameters เหล่านี้, เราจะสามารถลดขอบเขตของการค้นหาให้แคบลงเพื่อควบคุม และประมาณขนาดของผลลัพท์ได้.

    ตัวอย่างทั่วไปของ getProgramAccounts ที่เกี่ยวข้องกับ SPL-Token Programopen in new window เช่น การค้นหาทุกๆ accounts ที่ Token Program เป็นเจ้าของโดยใช้ การค้นหาแบบปกติ จะทำให้ต้องไปค้นหาข้อมูลมากมาย แต่ถ้าเราใส่ parameters เข้าไปด้วยเราจะสามารถ request ได้อย่างประสิทธิภาพ และได้ data เฉพาะที่เราจะใช้.

    filters

    parameter ที่ใช้บ่อยๆ สำหรับ getProgramAccounts คือ filters array. ซึ่ง array นี้จะรับ filters 2 แบบคือ dataSize และ memcmp ก่อนที่จะใช้ filters นี้เราต้องรู้ก่อนว่า data ที่เราจะร้องขอมีรูปแบบยังไง และจัดเรียงไว้ยังไง.

    dataSize

    ในกรณีของ Token Program, เราจะเห็นว่า token accounts มีขนาด 165 bytesopen in new window. และ token account จะมี 8 fields ที่แตกต่างกันโดยแต่ละ field จะมีขนาด bytes ที่แน่นอน เราสามารถแสดง visualize ว่า data มีการวางรูปแบบยังไงโดยใช้รูปด้านล่าง.

    Account Size

    ถ้าเราต้องการหาทุกๆ token accounts โดยมี wallet address ของเราเป็นเจ้าของ, เราสามารถใส่ { dataSize: 165 } ใน filters เพื่อลดขอบเขตการค้นหาของเราให้เหลือเฉพาะ accounts ที่ขนาด 165 bytes เท่านั้น แต่เท่านี้ก็ยังไม่ดีพอ เราต้องต้องใส่ filter เข้าไปด้วยว่าเราเป็นเจ้าของ (owner) มันด้วย เราสามารถทำได้ด้วยการเพิ่ม memcmp filter เข้าไป.

    memcmp

    memcmp filter หรือ "memory comparison" filter, จะทำให้เราสามารถเปรียบเทียบ data ใน field ไหนก็ได้ที่เก็บอยู่ใน​ account ของเรา. โดยเฉพาะเราสามารถค้นหาเฉพาะ accounts ที่ตรงกับ bytes ที่ตำแหน่งใดๆ. memcmp ต้องการ 2 arguments:

    • offset: ตำแหน่งที่จะเริ่มเทียบ data มีขนาดเป็น bytes และแสดงเป็นจำนวนเต็ม.
    • bytes: คือ data ตรงกับ account's data. จะใช้ base-58 encoded string ขนาดไม่เกิน 129 bytes.

    แต่ต้องระวังไว้ว่า memcmp จะคืนค่ามาก็ต่อเมื่อเจอ bytes ตรงกันเท่านั้น ซึ่งในตอนนี้เรายังไม่สามารถเทียบหาค่าที่น้อยกว่า หรือมากกว่า bytes ที่เราใส่ไปได้

    ในตัวอย่าง Token Program อันต่อไป, เราสามารถกำหนดการค้นหาให้คืนค่ามาเฉพาะ token account ที่ตรงกับ wallet address ของเรา ถ้าเราลองดูที่ token account จะเห็นว่า 2 fields แรกบน token account คือ pubkeys, และแต่ละ pubkey จะมีขนาด 32 bytes โดยที่ owner จะอยู่ที่ field ที่ 2 เราจึงสามารถเริ่ม memcmp ที่ offset ที่ 32 bytes จากตรงนั้นเราก็สามารถมองหา account ที่ ower ตรงกับ wallet address ของเรา

    Account Size

    เราสามารถลอง query ได้ด้วยตัวอย่างด้านล่าง:

    import { TOKEN_PROGRAM_ID } from "@solana/spl-token";
     import { clusterApiUrl, Connection } from "@solana/web3.js";
     
     (async () => {
    @@ -444,6 +444,6 @@
     #   "id": 1
     # }
     

    โดนการที่เราผสม 3 parameters (dataSlice, dataSize, และ memcmp) เราก็จะสามารถจำกัดการค้นหาให้มีประสิทธิภาพ และส่งค่ากลับมาเฉพาะที่เราต้องการได้

    แหล่งข้อมูลอื่น

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/th/guides/retrying-transactions.html b/docs/.vuepress/dist/th/guides/retrying-transactions.html index f24069f67..80f933831 100644 --- a/docs/.vuepress/dist/th/guides/retrying-transactions.html +++ b/docs/.vuepress/dist/th/guides/retrying-transactions.html @@ -23,11 +23,11 @@ } Retrying Transactions | คู่มือ Solana - + -

    Retrying Transactions

    ในบางที transaction อาจจะถูกทิ้งไปก่อนที่จะเข้าไปใน block สิ่งนี้เกิดขึ้นบ่อยในช่วงที่มีการใช้งานเยอะจนการทำงานติดขัด (network congestion) ในตอนที่ RPC node ไม่สามารถส่ง transaction ไปที่ ผู้นำ (leader)open in new window ได้ ฝั่ง end-user จะเห็นว่า transaction ได้หายไปเลย ถึง RPC nodes จะมี rebroadcasting algorithm เพื่อส่งซ้ำทั่วไปอยู่แล้ว แต่นักพัฒนา app ก็สามารทำ custom rebroadcasting logic เองได้.

    เรื่องน่ารู้

    Fact Sheet

    • RPC nodes จะพยายาม rebroadcast transactions โดยใช้ algorithm ทั่วไป
    • นักพัฒนา app สามารถทำ custom rebroadcasting logic เองได้
    • นักพัฒนา ควรใช้ maxRetries parameter ตอน sendTransaction JSON-RPC method
    • นักพัฒนา ควรใช้ preflight เพื่อให้เห็นปัญหาก่อนที่จะ submit transactions
    • ก่อนจะ re-signing transaction ใดๆ มันสำคัญมาก ที่จะแน่ใจว่า blockhash ตัวก่อนหน้าได้ expired ไปแล้ว

    การเดินทางของ Transaction

    Clients Submit Transactions ยังไง

    บน Solana จะไม่มี mempool ทุกๆ transactions ไม่ว่าจะมาจาก program หรือ end-user ก็จะถูกส่งไปที่ leaders เพื่อจะได้ไปลง block โดนจะมีอยู่ 2 ทางที่ transaction จะส่งไปถึง leaders:

    1. ผ่าน RPC server ด้วย method sendTransactionopen in new window JSON-RPC
    2. ส่งไปตรงๆ ผ่าน TPU Clientopen in new window

    end-users ส่วนใหญ่จะ submit transactions ผ่าน RPC server เมื่อ client ได้ submits transaction ไปแล้วตัว RPC node จะพยายาม broadcast transaction ไปหาทั้ง leaders ปัจจุบัน และ leaders ถัดไป จนกระทั่ง transaction ได้รับการประมวลผลจาก leader และมันจะไม่มีบันทึกของ transaction อื่นใดนอกเหนือไปจากที่ client และ RPC nodes รับรู้. ในกรณีของ TPU client, การ rebroadcast และส่งต่อไปที่ leader จะขึ้นอยู่กับ client ทั้งหมด.

    การเดินทางของ Transaction

    RPC Nodes Broadcast Transactions ยังไง

    หลังจาก RPC node รับ transaction ผ่าน sendTransaction ตัว transaction ก็จะถูกเปลี่ยนไปเป็น UDPopen in new window packet ก่อนจะส่งต่อไปที่ leaders ที่เกี่ยวข้อง การใช้ UDP จะทำให้ validators สามารถติดต่อกันได้อย่างรวดเร็ว แต่จะไม่รับประกันว่า transaction จะส่งถึงแน่นอน.

    เนื่องจากการทำงานของ Solana leader จะรู้ก่อนอยู่แล้วในทุกๆ epochopen in new window (~2 วัน) ตัว RPC node จะกระจาย transaction ไปหาทั้ง leaders ตัวปัจจุบัน และตัวถัดไป ตรงจุดนี้จะไม่เหมือน gossip protocols อื่นเช่น Ethereum ที่เผยแพร่ transactions แบบสุ่ม และส่งไปทั้ง network ตามปกติแล้ว RPC nodes จะพยายามส่ง transactions ไปหา leaders ทุกๆ 2 วินาที จนกระทั่ง transaction ถูก finalized หรือ blockhash หมดอายุ (150 blocks หรือ ~1 นาที 19 วินาที ณ. ตอนที่เขียนนี้). ถ้ามีคิวในการ rebroadcast ตกค้างอยู่เกิน 10,000 transactionsopen in new window จะทำให้ transactions ใหม่ถูกทิ้งไป ซึ่งจะมีคำสั่ง command-line argumentsopen in new window ที่คนดูแล RPC สามารถปรับเพื่อเปลี่ยนค่าเริ่มต้นของการ retry นี้ได้

    เวลาที่ RPC node จะทำการเผยแพร่ transaction มันจะพยายามส่งต่ไปที่ transaction leader’s Transaction Processing Unit (TPU)open in new window การประมวลผล transactions ของ TPU จะแบ่งเป็น 5 ขั้นตอน:

    TPU OverviewImage Courtesy of Jito Labs

    จาก 5 ขั้นตอนนี้ช่วง Fetch Stage จะรับผิดชอบการรับ transactions ตอน Fetch Stage, validators จะจัดหมวดหมู่ transactions ออกเป็น 3 ช่องทางดังนี้:

    • tpuopen in new window จัดการ transactions พวก token transfers, NFT mints, และ program instructions
    • tpu_voteopen in new window จัดการเฉพาะ transactions ที่เกี่ยวกับการ vote
    • tpu_forwardsopen in new window ส่งต่อ packets ที่ยังไม่ได้ดำเนินการไปยัง leader ถัดไปถ้า leader ปัจจุบัน ไม่สามารถ process ทุก transactions ได้แล้ว

    สำหรับเรื่อง TPU, หาอ่านเพิ่มเติมได้ที่ this excellent writeup by Jito Labsopen in new window.

    Transactions ถูกทิ้งไปได้ยังไง

    ตลอดการเดินทางของ transaction, อาจจะมีเหตุการณ์บางอย่างที่ทำให้ transaction ถูกทิ้งไปจาก network ได้แบบไม่ตั้งใจ.

    ก่อน transaction จะประมวลผลเสร็จ

    ถ้า transaction ถูกทิ้ง ส่วนใหญ่จะเกิดก่อนที่ transaction จะถูกประมวลผลโดย leader เรื่อง UDP packet lossopen in new window เหตุผลว่าทำไมเรื่องนี้อาจจะเกิดขึ้นได้ในช่วงที่การใช้งาน network สูง, และมันยังเป็นไปได้ว่า validators กำลังประมวลผล transactions ที่มากเกินกว่าที่จะดำเนินการได้. ในขณะที่ validators พร้อมที่จะส่ง transactions ส่วนเกินผ่าน tpu_forwards, มันจะมีข้อจำกัดในการ ส่งต่อopen in new window อยู่ด้วย โดยในการส่งต่อจะถูกจำกัดให้ข้ามระหว่าง validators ได้ครั้งเดียว ดังนั้น transactions ที่ได้รับผ่าน tpu_forwards มาแล้ว จะไม่ถูกส่งต่อไปยัง validators อื่นอีก.

    ยังมีอีก 2 เหตุผลว่าทำไม transaction อาจจะถูกทิ้งก่อนที่มันจะถูกประมวลผล. กรณีแรกมีความเกี่ยวข้องกับ transactions ที่ส่งผ่าน RPC pool ในบางครั้งบางส่วนของ RPC pool จะนำ pool อื่นๆ อยู่. เหตุการณ์นี้จะทำให้เกิดปัญหาได้ถ้า nodes ใน pool ต้องทำงานไปพร้อมๆ กัน ในตัวอย่างนี้ transaction’s recentBlockhashopen in new window มีการดึงข้อมูลลำดับถัดไปจาก pool (Backend A) แต่เมื่อ transaction ส่งไปในส่วนที่ pool ตามหลังอยู่ (Backend B) nodes นั้นก็จะไม่รู้จัก blockhash ถัดไป และจะทิ้ง transaction นั้นไป กรณีแบบนี้สามารถตรวจจับได้ในระหว่างการส่ง transaction ถ้านักพัฒนาเปิดใช้ preflight checksopen in new window เวลาที่เรียกใช้ sendTransaction.

    Dropped via RPC Pool

    การ fork network ชั่วคราวก็เป็นอีกสาเหตุที่ทำให้ transactions ถูกทิ้งถ้า validator replay blocks ไม่ทัน Banking Stage, มันอาจจะจบลงตรงที่เกิดการสร้าง minority fork ขึ้นมา เมื่อ client สร้าง transaction มันก็เป็นไปได้ว่า transaction จะถูกอ้างไปที่ recentBlockhash ที่มีอยู่เฉพาะใน minority fork ดังกล่าว หลังจากส่ง transaction แล้ว cluster สามารถเปลี่ยนจาก minority fork ก่อนที่ transaction จะถูกประมวลผล ในกรณีนี้ transaction จะถูกทิ้งเนื่องจาก blockhash หาไม่เจอ

    Dropped due to Minority Fork (Before Processed)

    หลังจาก transaction ประมวลผลเสร็จ และก่อนจะ finalized

    ในกรณีที่ transaction อ้างอิง recentBlockhash ไปที่ minority fork, มันก็ยังเป็นไปได้ที่ transaction จะถูกประมวลผล แต่อย่าสงไรก็ตามมันจะต้องถูกประมวลผลโดย leader บน minority fork. เมื่อ leader พยายามเผยแพร่ transactions นี้ไปทั้ง network มันก็จะล้มเหลว fail ที่จะไปถึงการ consensus ด้วย validators อื่นๆ ที่ไม่รู้จัก minority fork นั้นอยู่ดี ถึงจุดนี้ transaction ก็จะถูกทิ้งก่อนที่มันจะไปถึงขั้น finalized

    Dropped due to Minority Fork (After Processed)

    จัดการ Transactions ที่ถูกทิ้ง

    ตอนที่ RPC nodes พยายาม rebroadcast transactions จะใช้ algorithm ทั่วไปและ มักจะไม่ตรงกับความต้องการของ app แต่ละตัว เพื่อเตรียมตัวรับมือในช่วง network congestion นักพัฒนา app ควรออกแบบการทำงาน rebroadcasting เอง

    sendTransaction เชิงลึก

    เมื่อพูดถึงการส่ง transactions เราจะใช้ RPC method sendTransaction โดย sendTransaction จะรับผิดชอบในการส่ง transaction จาก client ไป RPC node ถ้า node ได้รับ transaction แล้ว, sendTransaction จะคืน transaction id ที่สามารถใช้ติดตาม transaction ซึ่งการที่เราได้รับ response ไม่ได้หมายความว่า transaction นั้นจะถูกประมวลผลหรือถูก finalized ด้วย cluster.

    TIP

    Request Parameters

    • transaction: string - Transaction ที่ sign เรียบร้อยแล้วในรูปแบบ encoded string
    • (optional) configuration object: object
      • skipPreflight: boolean - ถ้าเป็น true, จะข้ามการทำ preflight ไป (ค่าปกติคือ: false)
      • (optional) preflightCommitment: string - Commitmentopen in new window ระดับในการจำลอง preflight กับ bank slot (ค่าปกติคือ: "finalized").
      • (optional) encoding: string - Encoding ที่ใช้สำหรับ transaction data. อาจจะเป็น "base58" (ช้า) หรือ "base64" (ค่าปกติคือ: "base58").
      • (optional) maxRetries: usize - เลขมากที่สุดของของเวลาที่ RPC node จะพยายามส่ง transaction ไปถึง leader. ถ้าไม่กำหนด RPC node จะ retry transaction จนกระทั่งถูก finalized หรือจนกระทั่ง blockhash หมดอายุ

    Response

    • transaction id: string - transaction signature แรกจะถูกเก็บอยู่ใน transaction ในรูปแบบ base-58 encoded string ซึ่ง transaction id นี้สามารถใช้กับ getSignatureStatusesopen in new window เพื่อดึงสถานะมาดูได้.

    ทำ Rebroadcast Logic เอง

    ในการที่จะพัฒนา rebroadcasting logic ด้วยตัวเอง นักพัฒนาควรใช้ sendTransaction, maxRetries parameter. ถ้ากำหนดค่า maxRetries มันก็จะกำหนดทับค่าปกติของ RPC node retry logic, ทำให้นักพัฒนาสามารถกำหนดช่วงการ retry ได้ตามความเหมาะสมopen in new window.

    pattern ปกติสำหรับการ retrying transactions จะเกี่ยวข้องกับการเก็บ lastValidBlockHeight ที่มาจาก getLatestBlockhashopen in new window เมื่อเก็บไว้แล้ว app ก็สามารถ ดึง cluster’s blockheightopen in new window และ retry transaction ในช่วงเวลาที่แหมาะสม. หากเกิด network congestion ก็ให้ปรับ maxRetries เป็น 0 ก็จะดีกว่า และ rebroadcast เองอีกที บาง app อาจจะใช้ exponential backoffopen in new window algorithm หรือวิธีแบบ Mangoopen in new window เพื่อ ส่ง transactions เรื่อยๆopen in new window ในเวลาที่เหมาะสมจนเกิด timeout

    Press </> button to view full source
    import {
    +    

    Retrying Transactions

    ในบางที transaction อาจจะถูกทิ้งไปก่อนที่จะเข้าไปใน block สิ่งนี้เกิดขึ้นบ่อยในช่วงที่มีการใช้งานเยอะจนการทำงานติดขัด (network congestion) ในตอนที่ RPC node ไม่สามารถส่ง transaction ไปที่ ผู้นำ (leader)open in new window ได้ ฝั่ง end-user จะเห็นว่า transaction ได้หายไปเลย ถึง RPC nodes จะมี rebroadcasting algorithm เพื่อส่งซ้ำทั่วไปอยู่แล้ว แต่นักพัฒนา app ก็สามารทำ custom rebroadcasting logic เองได้.

    เรื่องน่ารู้

    Fact Sheet

    • RPC nodes จะพยายาม rebroadcast transactions โดยใช้ algorithm ทั่วไป
    • นักพัฒนา app สามารถทำ custom rebroadcasting logic เองได้
    • นักพัฒนา ควรใช้ maxRetries parameter ตอน sendTransaction JSON-RPC method
    • นักพัฒนา ควรใช้ preflight เพื่อให้เห็นปัญหาก่อนที่จะ submit transactions
    • ก่อนจะ re-signing transaction ใดๆ มันสำคัญมาก ที่จะแน่ใจว่า blockhash ตัวก่อนหน้าได้ expired ไปแล้ว

    การเดินทางของ Transaction

    Clients Submit Transactions ยังไง

    บน Solana จะไม่มี mempool ทุกๆ transactions ไม่ว่าจะมาจาก program หรือ end-user ก็จะถูกส่งไปที่ leaders เพื่อจะได้ไปลง block โดนจะมีอยู่ 2 ทางที่ transaction จะส่งไปถึง leaders:

    1. ผ่าน RPC server ด้วย method sendTransactionopen in new window JSON-RPC
    2. ส่งไปตรงๆ ผ่าน TPU Clientopen in new window

    end-users ส่วนใหญ่จะ submit transactions ผ่าน RPC server เมื่อ client ได้ submits transaction ไปแล้วตัว RPC node จะพยายาม broadcast transaction ไปหาทั้ง leaders ปัจจุบัน และ leaders ถัดไป จนกระทั่ง transaction ได้รับการประมวลผลจาก leader และมันจะไม่มีบันทึกของ transaction อื่นใดนอกเหนือไปจากที่ client และ RPC nodes รับรู้. ในกรณีของ TPU client, การ rebroadcast และส่งต่อไปที่ leader จะขึ้นอยู่กับ client ทั้งหมด.

    การเดินทางของ Transaction

    RPC Nodes Broadcast Transactions ยังไง

    หลังจาก RPC node รับ transaction ผ่าน sendTransaction ตัว transaction ก็จะถูกเปลี่ยนไปเป็น UDPopen in new window packet ก่อนจะส่งต่อไปที่ leaders ที่เกี่ยวข้อง การใช้ UDP จะทำให้ validators สามารถติดต่อกันได้อย่างรวดเร็ว แต่จะไม่รับประกันว่า transaction จะส่งถึงแน่นอน.

    เนื่องจากการทำงานของ Solana leader จะรู้ก่อนอยู่แล้วในทุกๆ epochopen in new window (~2 วัน) ตัว RPC node จะกระจาย transaction ไปหาทั้ง leaders ตัวปัจจุบัน และตัวถัดไป ตรงจุดนี้จะไม่เหมือน gossip protocols อื่นเช่น Ethereum ที่เผยแพร่ transactions แบบสุ่ม และส่งไปทั้ง network ตามปกติแล้ว RPC nodes จะพยายามส่ง transactions ไปหา leaders ทุกๆ 2 วินาที จนกระทั่ง transaction ถูก finalized หรือ blockhash หมดอายุ (150 blocks หรือ ~1 นาที 19 วินาที ณ. ตอนที่เขียนนี้). ถ้ามีคิวในการ rebroadcast ตกค้างอยู่เกิน 10,000 transactionsopen in new window จะทำให้ transactions ใหม่ถูกทิ้งไป ซึ่งจะมีคำสั่ง command-line argumentsopen in new window ที่คนดูแล RPC สามารถปรับเพื่อเปลี่ยนค่าเริ่มต้นของการ retry นี้ได้

    เวลาที่ RPC node จะทำการเผยแพร่ transaction มันจะพยายามส่งต่ไปที่ transaction leader’s Transaction Processing Unit (TPU)open in new window การประมวลผล transactions ของ TPU จะแบ่งเป็น 5 ขั้นตอน:

    TPU OverviewImage Courtesy of Jito Labs

    จาก 5 ขั้นตอนนี้ช่วง Fetch Stage จะรับผิดชอบการรับ transactions ตอน Fetch Stage, validators จะจัดหมวดหมู่ transactions ออกเป็น 3 ช่องทางดังนี้:

    • tpuopen in new window จัดการ transactions พวก token transfers, NFT mints, และ program instructions
    • tpu_voteopen in new window จัดการเฉพาะ transactions ที่เกี่ยวกับการ vote
    • tpu_forwardsopen in new window ส่งต่อ packets ที่ยังไม่ได้ดำเนินการไปยัง leader ถัดไปถ้า leader ปัจจุบัน ไม่สามารถ process ทุก transactions ได้แล้ว

    สำหรับเรื่อง TPU, หาอ่านเพิ่มเติมได้ที่ this excellent writeup by Jito Labsopen in new window.

    Transactions ถูกทิ้งไปได้ยังไง

    ตลอดการเดินทางของ transaction, อาจจะมีเหตุการณ์บางอย่างที่ทำให้ transaction ถูกทิ้งไปจาก network ได้แบบไม่ตั้งใจ.

    ก่อน transaction จะประมวลผลเสร็จ

    ถ้า transaction ถูกทิ้ง ส่วนใหญ่จะเกิดก่อนที่ transaction จะถูกประมวลผลโดย leader เรื่อง UDP packet lossopen in new window เหตุผลว่าทำไมเรื่องนี้อาจจะเกิดขึ้นได้ในช่วงที่การใช้งาน network สูง, และมันยังเป็นไปได้ว่า validators กำลังประมวลผล transactions ที่มากเกินกว่าที่จะดำเนินการได้. ในขณะที่ validators พร้อมที่จะส่ง transactions ส่วนเกินผ่าน tpu_forwards, มันจะมีข้อจำกัดในการ ส่งต่อopen in new window อยู่ด้วย โดยในการส่งต่อจะถูกจำกัดให้ข้ามระหว่าง validators ได้ครั้งเดียว ดังนั้น transactions ที่ได้รับผ่าน tpu_forwards มาแล้ว จะไม่ถูกส่งต่อไปยัง validators อื่นอีก.

    ยังมีอีก 2 เหตุผลว่าทำไม transaction อาจจะถูกทิ้งก่อนที่มันจะถูกประมวลผล. กรณีแรกมีความเกี่ยวข้องกับ transactions ที่ส่งผ่าน RPC pool ในบางครั้งบางส่วนของ RPC pool จะนำ pool อื่นๆ อยู่. เหตุการณ์นี้จะทำให้เกิดปัญหาได้ถ้า nodes ใน pool ต้องทำงานไปพร้อมๆ กัน ในตัวอย่างนี้ transaction’s recentBlockhashopen in new window มีการดึงข้อมูลลำดับถัดไปจาก pool (Backend A) แต่เมื่อ transaction ส่งไปในส่วนที่ pool ตามหลังอยู่ (Backend B) nodes นั้นก็จะไม่รู้จัก blockhash ถัดไป และจะทิ้ง transaction นั้นไป กรณีแบบนี้สามารถตรวจจับได้ในระหว่างการส่ง transaction ถ้านักพัฒนาเปิดใช้ preflight checksopen in new window เวลาที่เรียกใช้ sendTransaction.

    Dropped via RPC Pool

    การ fork network ชั่วคราวก็เป็นอีกสาเหตุที่ทำให้ transactions ถูกทิ้งถ้า validator replay blocks ไม่ทัน Banking Stage, มันอาจจะจบลงตรงที่เกิดการสร้าง minority fork ขึ้นมา เมื่อ client สร้าง transaction มันก็เป็นไปได้ว่า transaction จะถูกอ้างไปที่ recentBlockhash ที่มีอยู่เฉพาะใน minority fork ดังกล่าว หลังจากส่ง transaction แล้ว cluster สามารถเปลี่ยนจาก minority fork ก่อนที่ transaction จะถูกประมวลผล ในกรณีนี้ transaction จะถูกทิ้งเนื่องจาก blockhash หาไม่เจอ

    Dropped due to Minority Fork (Before Processed)

    หลังจาก transaction ประมวลผลเสร็จ และก่อนจะ finalized

    ในกรณีที่ transaction อ้างอิง recentBlockhash ไปที่ minority fork, มันก็ยังเป็นไปได้ที่ transaction จะถูกประมวลผล แต่อย่าสงไรก็ตามมันจะต้องถูกประมวลผลโดย leader บน minority fork. เมื่อ leader พยายามเผยแพร่ transactions นี้ไปทั้ง network มันก็จะล้มเหลว fail ที่จะไปถึงการ consensus ด้วย validators อื่นๆ ที่ไม่รู้จัก minority fork นั้นอยู่ดี ถึงจุดนี้ transaction ก็จะถูกทิ้งก่อนที่มันจะไปถึงขั้น finalized

    Dropped due to Minority Fork (After Processed)

    จัดการ Transactions ที่ถูกทิ้ง

    ตอนที่ RPC nodes พยายาม rebroadcast transactions จะใช้ algorithm ทั่วไปและ มักจะไม่ตรงกับความต้องการของ app แต่ละตัว เพื่อเตรียมตัวรับมือในช่วง network congestion นักพัฒนา app ควรออกแบบการทำงาน rebroadcasting เอง

    sendTransaction เชิงลึก

    เมื่อพูดถึงการส่ง transactions เราจะใช้ RPC method sendTransaction โดย sendTransaction จะรับผิดชอบในการส่ง transaction จาก client ไป RPC node ถ้า node ได้รับ transaction แล้ว, sendTransaction จะคืน transaction id ที่สามารถใช้ติดตาม transaction ซึ่งการที่เราได้รับ response ไม่ได้หมายความว่า transaction นั้นจะถูกประมวลผลหรือถูก finalized ด้วย cluster.

    TIP

    Request Parameters

    • transaction: string - Transaction ที่ sign เรียบร้อยแล้วในรูปแบบ encoded string
    • (optional) configuration object: object
      • skipPreflight: boolean - ถ้าเป็น true, จะข้ามการทำ preflight ไป (ค่าปกติคือ: false)
      • (optional) preflightCommitment: string - Commitmentopen in new window ระดับในการจำลอง preflight กับ bank slot (ค่าปกติคือ: "finalized").
      • (optional) encoding: string - Encoding ที่ใช้สำหรับ transaction data. อาจจะเป็น "base58" (ช้า) หรือ "base64" (ค่าปกติคือ: "base58").
      • (optional) maxRetries: usize - เลขมากที่สุดของของเวลาที่ RPC node จะพยายามส่ง transaction ไปถึง leader. ถ้าไม่กำหนด RPC node จะ retry transaction จนกระทั่งถูก finalized หรือจนกระทั่ง blockhash หมดอายุ

    Response

    • transaction id: string - transaction signature แรกจะถูกเก็บอยู่ใน transaction ในรูปแบบ base-58 encoded string ซึ่ง transaction id นี้สามารถใช้กับ getSignatureStatusesopen in new window เพื่อดึงสถานะมาดูได้.

    ทำ Rebroadcast Logic เอง

    ในการที่จะพัฒนา rebroadcasting logic ด้วยตัวเอง นักพัฒนาควรใช้ sendTransaction, maxRetries parameter. ถ้ากำหนดค่า maxRetries มันก็จะกำหนดทับค่าปกติของ RPC node retry logic, ทำให้นักพัฒนาสามารถกำหนดช่วงการ retry ได้ตามความเหมาะสมopen in new window.

    pattern ปกติสำหรับการ retrying transactions จะเกี่ยวข้องกับการเก็บ lastValidBlockHeight ที่มาจาก getLatestBlockhashopen in new window เมื่อเก็บไว้แล้ว app ก็สามารถ ดึง cluster’s blockheightopen in new window และ retry transaction ในช่วงเวลาที่แหมาะสม. หากเกิด network congestion ก็ให้ปรับ maxRetries เป็น 0 ก็จะดีกว่า และ rebroadcast เองอีกที บาง app อาจจะใช้ exponential backoffopen in new window algorithm หรือวิธีแบบ Mangoopen in new window เพื่อ ส่ง transactions เรื่อยๆopen in new window ในเวลาที่เหมาะสมจนเกิด timeout

    Press </> button to view full source
    import {
       Keypair,
       Connection,
       LAMPORTS_PER_SOL,
    @@ -89,6 +89,6 @@
       blockheight = await connection.getBlockHeight();
     }
     

    เมื่อดึงข้อมูลผ่าน getLatestBlockhash ตัว app ควรจะระบุ commitmentopen in new window level ที่ต้องการไว้ด้วย เช่นถ้าเรากำหนดไว้เป็น confirmed (รอจบการโหวต) หรือ finalized (~30 blocks หลังจาก confirmed) app จะสามารถเลี่ยงกรณีได้ blockhash จาก minority fork ไปได้

    ถ้า app เข้าถึง RPC nodes หลัง load balancer มันจะสามารถเลือกที่จะกระจาย workload ไปที่ nodes ที่ต้องการได้ด้วย ซึ่ง RPC nodes ที่ให้รองรับการร้องขอ data ที่ต้องประมวลผลหนักๆ เช่น getProgramAccounts อาจจะทำให้ node นี้ทำงานช้ากว่า node อื่นๆ และ จะไม่สามารถส่ง transactions ต่อได้. สำหรับ applications ที่จัดการ transactions ที่ต้องการความเร็วสูง อาจจะเป็นการดีกว่าถ้าใช้ node ที่รองรับ sendTransaction อย่างเดียว

    จะเกิดอะไรขึ้นถ้า Skip Preflight

    โดยค่าเริ่มต้น sendTransaction จะทำการตรวจสอบล่วงหน้าสามครั้งก่อนที่จะส่ง transaction. โดยเฉพาะ sendTransaction จะ:

    • ตรวจสอบว่าทุกๆ signatures ถูกต้องหรือไม่
    • ตรวจสอบว่า blockhash ที่ใส่มาอยุ่ในช่วงไม่เกิน 150 blocks
    • จำลอง transaction กับ bank slot ตามที่ระบุไว้ที่ preflightCommitment

    ในกรณีที่การตรวจสอบล่วงหน้าสามครั้งล้มเหลว sendTransaction จะแสดง error ก่อนจะส่ง transaction. Preflight checks สามารถบอกได้ว่า transaction จะถูกทิ้งหรือไม่ และทำให้ client สามารถจัดการกับ error นั้นๆ ได้ เพื่อให้ error ที่อาจจะเกิดขึ้นได้ ได้รับการจัดการเราแนะนำว่านักพัฒนาควร ตั้งค่า skipPreflight เป็น false

    Re-Sign Transactions เมื่อไหร่ดี

    ถึงเราจะพยายาม rebroadcast แล้วก็ตามแต่ก็จะมีบางเวลาที่ client จะต้อง sign transaction อีกครั้ง ซึ่งก่อนที่จะ sign transaction ใหม่นั้น มันสำคัญมาก ทีี่เราจะต้องมั่นใจว่า transaction’s blockhash ได้หมดอายุไปแล้ว ถ้า blockhash ยังไม่หมดอายุมันก็เป็นไปได้ที่ transactions ทั้งคู่จะผ่านเข้า network ไปได้ และในส่วนของ end-user จะเห็นว่าส่ง transaction เดิมไป 2 รอบ.

    บน Solana นั้นการทิ้ง transaction สามารถทำได้อย่างปลอดภัยถ้า blockhash เก่ากว่า lastValidBlockHeight ที่ได้จากการ getLatestBlockhash นักพัฒนาต้องคอยดู lastValidBlockHeight ด้วยการ getEpochInfoopen in new window และเทียบกับ blockHeight ที่ได้คืนมา เมื่อ blockhash หมดอายุแล้ว clients ก็สามารถ sign อีกครั้งได้ด้วย blockhash ที่ไปดึงมาใหม่.

    Acknowledgements

    ขอขอบคุณ Trent Nelson, Jacob Creechopen in new window, White Tiger, Le Yafo, Buffaluopen in new window, และ Jito Labsopen in new window ที่ช่วย review และแนะนำ

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/th/guides/serialization.html b/docs/.vuepress/dist/th/guides/serialization.html index ae20e00d1..2a7ecd848 100644 --- a/docs/.vuepress/dist/th/guides/serialization.html +++ b/docs/.vuepress/dist/th/guides/serialization.html @@ -23,11 +23,11 @@ } Serializing Data | คู่มือ Solana - + -

    Serializing Data

    เวลาที่เราจะทำ serialization เราจะหมายถึงทั้งการ serialize data และการ deserialize data.

    Serialization เข้ามามีส่วนทั้งใน Solana program และใน program accounts:

    1. Serializing instruction data ที่ client
    2. Deserializing instruction data ใน program
    3. Serializing Account data ใน program
    4. Deserializing Account Data ที่ client

    การ serialization ในแต่ละที่สามารถทำได้เหมือนๆ กัน โดย code สั้นๆ (snippets) จะแสดงให้เห็นตัวอย่างของการ serialization โดยใช้ Borsh.

    ตัวอย่างใน document นำมาจาก Solana CLI Program Template

    การติดตั้งสำหรับ Borsh Serialization

    Libraries สำหรับ Borsh ที่ต้องติดตั้งสำหรับ Rust program, Rust client, Node and/or Python client.

    [package]
    +    

    Serializing Data

    เวลาที่เราจะทำ serialization เราจะหมายถึงทั้งการ serialize data และการ deserialize data.

    Serialization เข้ามามีส่วนทั้งใน Solana program และใน program accounts:

    1. Serializing instruction data ที่ client
    2. Deserializing instruction data ใน program
    3. Serializing Account data ใน program
    4. Deserializing Account Data ที่ client

    การ serialization ในแต่ละที่สามารถทำได้เหมือนๆ กัน โดย code สั้นๆ (snippets) จะแสดงให้เห็นตัวอย่างของการ serialization โดยใช้ Borsh.

    ตัวอย่างใน document นำมาจาก Solana CLI Program Template

    การติดตั้งสำหรับ Borsh Serialization

    Libraries สำหรับ Borsh ที่ต้องติดตั้งสำหรับ Rust program, Rust client, Node and/or Python client.

    [package]
     name = "solana-cli-template-program-bpf"
     version = "0.1.0"
     edition = "2018"
    @@ -253,10 +253,11 @@
     }
     
    from borsh_construct import String, CStruct, U8
     from enum import IntEnum
    -from solana.rpc.types import RPCResponse
    -from solana.transaction import Transaction, TransactionInstruction, AccountMeta
    -from solana.publickey import PublicKey
    -from solana.keypair import Keypair
    +from solana.transaction import Transaction
    +from solders.pubkey import Pubkey
    +from solders.keypair import Keypair
    +from solders.instruction import Instruction, AccountMeta
    +from solders.rpc.responses import SendTransactionResp
     from solana.rpc.api import Client
     
     
    @@ -279,12 +280,12 @@
     
     def mint_kv(
         client: Client,
    -    program_pk: PublicKey,
    -    account_pk: PublicKey,
    +    program_pk: Pubkey,
    +    account_pk: Pubkey,
         wallet_kp: Keypair,
         mint_key: str,
         mint_value: str,
    -) -> RPCResponse:
    +) -> SendTransactionResp:
         """Mint with a key/value pair to an account"""
         # Construct the program payload for Mint invariant
         payload_ser = construct_payload(InstructionVariant.MINT, mint_key, mint_value)
    @@ -300,13 +301,13 @@
     
         # Construct the transaction with instructionVariant
         txn = Transaction().add(
    -        TransactionInstruction(
    -            [AccountMeta(account_pk, False, True)], program_pk, payload_ser
    +        Instruction(
    +            accounts=[AccountMeta(account_pk, False, True)], program_id=program_pk, data=payload_ser
             )
         )
         return client.send_transaction(txn, wallet_kp)
         # => {'jsonrpc': '2.0', 'result': '4ZdpWNdovdVaLextWSiqEBWp67k9rNTTUaX3qviHDXWY9c98bVtaRt5sasPhYzMVXHqhex78gzNKytcBnVH5CSTZ', 'id': 2}
    -
    
    +
    
     /// Instruction payload gets serialized
     #[derive(BorshSerialize)]
     pub struct Payload<'a> {
    @@ -632,10 +633,9 @@
       let nameAccount = await connection.getAccountInfo(account, "processed");
       return deserializeUnchecked(dataSchema, AccoundData, nameAccount.data);
     }
    -
    import base64
    -from borsh_construct import CStruct, U8, U32, HashMap, String
    +
    from borsh_construct import CStruct, U8, U32, HashMap, String
     from solana.rpc.commitment import Confirmed
    -from solana.publickey import PublicKey
    +from solders.pubkey import Pubkey
     from solana.rpc.api import Client
     
     
    @@ -647,14 +647,10 @@
     )
     
     
    -def get_account_info(client: Client, account_pk: PublicKey):
    +def get_account_info(client: Client, account_pk: Pubkey):
         """Fetch account information from RPC, parse out the data and deserialize"""
         res = client.get_account_info(account_pk, Confirmed, encoding='base64')
    -    data = res['result']
    -    if isinstance(data, dict):
    -        return account_schema.parse(base64.urlsafe_b64decode(data['value']['data'][0]))
    -    else:
    -        raise AttributeError(f'Unknown RPC result {data}')
    +    return account_schema.parse(res.value.data)
     
     # Results in or similar
     # => Container:
    @@ -662,7 +658,7 @@
     # =>     map_length = 109
     # =>     map = {'Happy': 'New Year!', 'newKey': 'A new value',
     # =>            'python key': 'python value', 'ts key': 'ts first value'}
    -
    use {
    +
    use {
         arrayref::*,
         borsh::{BorshDeserialize, BorshSerialize},
         std::{collections::BTreeMap, error::Error},
    @@ -766,8 +762,7 @@
     }
     
     entry();
    -
    import base64
    -from borsh_construct import U8, U16, U32, String, HashMap
    +
    from borsh_construct import U8, U16, U32, String, HashMap
     
     # Schema to deserialize various types
     primitive_schema = CStruct(
    @@ -811,7 +806,7 @@
         # =>        4
         # =>        5
         # =>    MAP_STRING_STRING = {'cookbook': 'recipe', 'recipe': 'ingredient'}
    -
    fn main() {}
    +
    fn main() {}
     
     #[cfg(test)]
     mod tests {
    @@ -1021,6 +1016,6 @@
         }
     }
     

    Resources

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/th/guides/versioned-transactions.html b/docs/.vuepress/dist/th/guides/versioned-transactions.html new file mode 100644 index 000000000..5874f5528 --- /dev/null +++ b/docs/.vuepress/dist/th/guides/versioned-transactions.html @@ -0,0 +1,60 @@ + + + + + + + + + Versioned Transactions | คู่มือ Solana + + + + +

    Versioned Transactions

    Solana เพิ่งจะปล่อย Versioned Transactions ออกมาโดยมีสิ่งที่เปลี่ยนไปก็คือ:

    1. มี program ที่เอาไว้จัดการ on-chain address lookup tables

    2. มี transaction รูปแบบใหม่สำหรับใช้งาน on-chain address lookup tables ได้

    Facts (เรื่องน่ารู้)

    Fact Sheet

    • Transaction แบบเก่าจะมีข้อจำกัดอยู่: ขนาดจำกัดอยู่ที่ 1232 bytes, ดังนั้นจำนวน accounts ที่สามารถจัดเก็บได้ใน atomic transaction คือ: 35 addresses.
    • Address Lookup Tables (LUTs): เมื่อ accounts ถูกจัดเก็บในตารางนี้ ที่อยู่ของตารางสามารถอ้างอิงใน transaction message โดยใช้ดัชนี(index) u8 ขนาด 1 ไบต์
    • createLookupTable() ใน solana/web3.js สามารถใช้สร้างตารางค้นหาใหม่ได้ และหาที่อยู่ของตารางได้
    • เมื่อ LUT ถูกสร้างแล้ว สามารถขยายได้ กล่าวคือสามารถเพิ่มบัญชีในตารางได้
    • Versioned Transactions: โครงสร้างของธุรกรรมเก่าต้องถูกปรับเปลี่ยนเพื่อรวม LUTs เข้าไป
    • ก่อนที่จะมีการเปลี่ยนมาใช้ version ใหม่นี้ ใน Transactions จะมี bit บนสุดของ byte แรกใน header ที่สามารถเอามาใช้เพื่อในการระบุ version ของ Transactions ได้

    เราจะพูดถึงการเปลี่ยนแปลง และ developers ต้องเข้าใจอะไรบ้างอย่างละเอียดมากขึ้น อย่างไรก็ตาม เราต้องเข้าใจโครงสร้าง (anatomy)​ของ transaction ปกติ (หรือเก่า) ก่อนเพื่อเข้าใจการเปลี่ยนแปลงได้อย่างชัดเจน

    Legacy Transaction

    The Solana network ใช้ขนาด maximum transactional unit (MTU) อยู่ที่ 1280 bytes, ตามข้อจำกัดขนาดของ IPv6 MTUopen in new window เพื่อให้มีความเร็ว และเชื่อถือได้ ซึ่งทำให้เหลือ 1232 bytes สำหรับ packet data เช่น serialised transactions.

    Transaction ประกอบด้วย:

    1. Array ของ signatures, ตัวละ 64 byte ในแบบ ed25519open in new window.
    2. Message (แบบเก่า)

    Transaction Format

    Compact-Array format

    Compact array คือ array ที่ถูก serialised ตามนี้:

    1. ความยาว Array ในรูปแบบ multi-byte encoding ที่เรียกว่า Compact-u16open in new window
    2. ตามด้วยแต่ละรายการของ array item

    Compact array format

    Legacy Message

    Legacy Message แบบเก่าจะประกอบด้วยส่วนต่อไปนี้:

    1. ส่วนหัวเรื่อง (header)
    2. compact-array ของ account addresses, ที่แต่ละ account address จะมีขนาด 32 bytes
    3. blockhash ล่าสุด (recent blockhash)
    • คือ 32-byte SHA-256 hash เพื่อบอกเวลาล่าสุดที่ล็อคบัญชีถูกตรวจพบ ถ้า blockhash เก่าเกินไป validator จะปฏิเสธ.
    1. compact-array ของ Instructions

    Legacy Message

    หัวของข้อความ (message header) จะมีขนาด 3 bytes และมี u8 integers 3 ตัว:

    1. จำนวนลายเซ็นที่จำเป็น (required signatures): Solana runtime จะตรวจสอบจำนวนนี้กับความยาวของ compact array ของ signatures ใน transaction.
    2. จำนวนของที่อยู่บัญชีสำหรับการอ่านอย่างเดียว (read-only account addresses) ที่ต้องการ signatures
    3. จำนวนของที่อยู่บัญชีสำหรับการอ่านอย่างเดียว (read-only account addresses) ที่ไม่ต้องการ signatures

    Message Header

    Compact-array ของ account addresses

    Compact array นี้จะเริ่มต้นด้วยการเข้ารหัสตัวเลขจำนวนของ account addresses โดยใช้ Compact-u16 ตามด้วย:

    1. Account addresses ที่ต้องการ signatures: แสดงรายการของที่อยู่บัญชีที่ต้องการสิทธิ์การอ่าน และเขียนก่อน แล้วตามด้วยอ่านอย่างเดียว
    2. Account addresses ที่ไม่ต้องการ signatures: เหมือนข้างบนคือ แสดงรายการของที่อยู่บัญชีที่ต้องการสิทธิ์การอ่าน และเขียนก่อน แล้วตามด้วยอ่านอย่างเดียว

    Compact array ของ account addresses

    Compact array ของ instructions

    เหมือนกับ compact array ของ account addresses, compact array จะเริ่มต้นด้วยการ encode จำนวนของ instructions โดยใช้ Compact-u16 แล้วตามด้วย array ของ instructions แต่ละตัวที่มีส่วนประกอบดังนี้:

    1. Program ID: ระบุโปรแกรม on-chain ที่จะดำเนินการ instruction นี้ ซึ่งจะแทนด้วย index ของ u8 ใน compact array ของ account addresses ภายใน message.
    2. Compact array ของ account address indexes: u8 indexes ของ account addresses ใน compact array ของ account addresses ที่ต้องการ signatures.
    3. Compact array ของ opaque u8 data: array ของ byte สำหรับใช้งานทั่วไปสำหรับ program ID ที่เคยพูดถึงก่อนหน้านี้. array ของ data นี้จะระบุสิ่งที่โปรแกรมควรดำเนินการ และข้อมูลเพิ่มเติมอื่นๆ ที่อาจไม่มีบอกไว้ใน account.

    Compact array ของ Instructions

    ข้อจำกัดของ Legacy Transactions

    ปัญหาใน Legacy Transactions คืออะไร?

    ขนาดของ transaction ซึ่งหมายถึงจำนวนบัญชีที่จะใช้ได้ใน atomic transaction ได้.

    เหมือนที่อธิบายไว้ก่อนหน้านี้ ขนาดของ Transaction ที่อนุญาตสูงสุดคือ 1232 bytes. ขนาดของ account address คือ 32 bytes. ดังนั้น transaction จะสามารถเก็บ accounts ได้มากที่สุด 35 accounts โดยต้องมีพื้นที่สำหรับ headers signatures และข้อมูล metadata ด้วย.

    ข้อจำกัดของ legacy transactions

    นี่เป็นปัญหาเพราะมีกรณีหลายกรณีที่ developers ต้องการใส่ 100 signature-free accounts ใน transaction เดียว. ซึ่ง legacy transaction เดิมนั้นจะไม่สามารถรองรับได้. วิธีการแก้ไขปัจจุบันที่กำลังถูกนำมาใช้คือการเก็บสถานะ (state) ชั่วคราว on-chain และนำไปใช้ใน transactions ทีหลัง. ซึ่ง workaround นี้จะใช้ไม่ได้เวลาใช้ multiple programs ที่ต้อง compose ใน transaction เดียว. ซึ่งแต่ละ program ก็จะต้องการ accounts หลายตัวเป็น input ทำให้เราเจอกับข้อจำกัดเดิมที่เคยเจอก่อนหน้าอยู่ดี.

    เพื่อแก้ไขปัญหานี้จึงมีการนำเสนอ Address Lookup Tables (LUT) ขึ้นมา

    Address Lookup Tables (LUT)

    แนวคิดของ Address Lookup Tables คือการเก็บ account addresses ในรูปแบบ table-like (array) data structure บน on-chain. หลังจากที่ accounts ถูกเก็บในตารางนี้แล้ว เราจะสามารถอ้างอิงถึงที่อยู่ของตารางนั้นใน transaction message ได้ โดยใช้ 1-byte u8 เป็น index ชี้ไปที่แต่ละ account.

    LUTs

    เพราะแบบนั้นเราเลยไม่ต้องเก็บ addresses ใน transaction message อีกต่อไป เราแค่ต้องการเก็บ u8 ไว้อ้างอิง index ทำให้เราจะเก็บได้มากถึง 2^8=256 accounts

    LUTs ต้องทำ rent-exempt เวลาเริ่มใช้ (initialised) หรือทุกครั้งที่ address ใหม่ถูกเพิ่มเข้าไปในตาราง. Addresses สามารถเพิ่มได้โดยใช้ on-chain buffer หรือเพิ่มโดยตรงในตารางผ่านคำสั่ง Extension ใน instruction. นอกจากนี้ LUTs ยังสามารถเก็บ metadata ที่เกี่ยวข้องตามด้วย compact-array ของ accounts ได้ ด้านล่างนี้คือโครงสร้างของ Address Lookup Table ทั่วไป

    LUT Format

    เรื่องที่ต้องระวังของ LUTs คือเนื่องจาก address lookups จะมี overhead ระหว่างประมวลผล transaction, ซึ่งจะทำให้ค่า fee สูงขึ้นตามไปด้วย

    Versioned Transactions: TransactionV0

    โครงสร้างของ legacy transaction ต้องมีการปรับเปลี่ยนเพื่อให้ใช้ address table lookups ได้. การเปลี่ยนแปลงเหล่านี้ไม่ควรไปทำให้การประมวลผล transaction บน Solana พัง, และก็ไม่ควรไปเปลี่ยนรูปแบบการเรียก program แบบเดิมด้วย

    เพื่อให้มั่นใจว่าจะไม่มีอะไรพัง เราจึงจำเป็นต้องระบุชนิดของ transaction ไว้อย่างชัดเจนว่ามันเป็น legacy หรือ versioned. แล้วเราจะใส่ version ไปตรงไหนของ transaction ดีล่ะ?

    ก่อนหน้านี้ transactions จะเหลือ upper bit ที่ไม่ได้ใช้อยู่ที่ byte แรกของ message headers: num_required_signatures. เราสามารถใช้ bit นี้ในการประกาศ version ของ transactions ของเราได้.

    pub enum VersionedMessage {
    +    Legacy(Message),
    +    V0(v0::Message),
    +}
    +

    ถ้า bit แรกใน byte แรกถูกตั้งค่า จะทำให้ bit ต่อไปจะหมายถึงหมายเลข version ซึ่ง Solana เริ่มต้นด้วย “Version 0” ซึ่งต้องกำหนดไว้ ถ้าจะเริ่มใช้ LUTs

    If the first bit is not set, the transaction will be considered a “Legacy Transaction” and the remainder of the first byte will be treated as the first byte of an encoded legacy message.

    หาก bit แรกไม่ถูกตั้งค่า transaction นั้นจะถือว่าเป็น "Legacy Transaction" และส่วนที่เหลือของ byte แรกจะถูกจัดการเหมือนเป็น byte แรกของ message ตามเดิม

    MessageV0

    โครงสร้างของ MessageV0 ค่อนข้างเหมือนเดิม เพิ่มเติมคือ...

    1. Message Header: เหมือนเดิม
    2. Compact array of account keys: เหมือนเดิม แต่เราจะใช้แต่ละ byte ไปทำ index แทนเรียกว่า index array A (จะมีอธิบายอีกที)
    3. Recent blockhash: เหมือนเดิม
    4. Compact array of instructions: เปลี่ยน
    5. Compact array of address table lookups: เพิ่มมาใน v0

    Message v0

    เราจะมาดูเรื่องโครงสร้างของ compact array ของ address table lookups ก่อนที่จะไปดูว่ามีอะไรเปลี่ยนไปใน instruction array บ้าง

    Compact array ของ address table lookups

    โครงสร้างนี้นำเสนอ Address Lookup Tables (LUT) ในการทำ Versioned Transactions ซึ่งทำให้เป็นไปได้ที่จะโหลด accounts ที่สามารถอ่าน และเขียนได้มากขึ้นในธุรกรรมเดียว

    ส่วน compact array จะเริ่มด้วย compact-u16 encoding ของจำนวนของ address table lookups, ตามด้วย array ของ address table lookups. แต่ละ lookup จะมีโครงสร้างตามนี้:

    1. Account key: account key ของ address lookup table
    2. Writable indexes: compact array ของ indexes เอาไว้โหลด account addresses ที่เขียนได้อย่างเดียว. เราจะเรียกมันว่า index array B.
    3. Readonly indexes: compact array ของ indexes เอาไว้โหลด account addresses ที่อ่านได้อย่างเดียว. เราจะเรียกมันว่า index array C.

    Compact array of LUTs

    ทีนี้เราลองมาดูกันว่ามีอะไรเปลี่ยนแปลงใน instructions compact array กันบ้าง

    Compact array ของ instructions

    เหมือนกับที่ได้พูดไว้ก่อนหน้านี้ คือ compact array ของ legacy instruction ที่จัดเก็บ legacy instruction แต่ละคำสั่งซึ่งในลักษณะเบื้องต้นจะเก็บข้อมูลต่อไปนี้:

    1. index ของ Program ID
    2. Compact array ของ account address indexes
    3. Compact array ของข้อมูล opaque 8-bit

    การเปลี่ยนแปลงใน instruction ใหม่ไม่ได้อยู่ในโครงสร้างของ instruction แต่จะอยู่ใน array ที่เราใช้เก็บ index ของ 1 กับ 2. ซึ่งใน legacy transactions จะใช้บางส่วนของ index array A แต่ใน versioned transactions เราจะใช้บางส่วนที่ได้จากการรวม array ต่อไปนี้แทน:

    1. index array A: Compact array ของ accounts ที่เก็บไว้ใน message
    2. index array B: Writable indexes ใน address table lookup
    3. index array C: Readonly indexes ใน address table lookup

    New Compact array of Instructions

    RPC Changes

    Transaction ที่ตอบกลับมา (responses)จะต้องระบุ version field: maxSupportedTransactionVersion เพื่อบอก clients ว่าจะแกะ(deserialisation) transaction ยังไง.

    methods ต่อไปนี้จำเป็นต้อง update เพื่อหลีกเลี่ยงข้อผิดพลาด:

    • getTransaction
    • getBlock

    และต้องเพิ่ม parameter นี้เข้าไปตอนเรียกขอข้อมูล (requests):

    maxSupportedTransactionVersion: 0

    ถ้า maxSupportedTransactionVersion ไม่ได้ใส่มาใน request, transaction version จะถือว่าเป็นเป็น legacy. และถ้า block ไหนมี versioned transaction จะทำให้เกิด error ได้.

    เราสามารถใส่ค่านี้เพิ่มเป็น JSON formatted requests ไปหา RPC endpoint ได้ตามตัวอย่างข้างล่าง:

    curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d \
    +'{"jsonrpc": "2.0", "id":1, "method": "getBlock", "params": [430, {
    +  "encoding":"json",
    +  "maxSupportedTransactionVersion":0,
    +  "transactionDetails":"full",
    +  "rewards":false
    +}]}'
    +

    หรือใช้ผ่าน library @solana/web3.jsopen in new window ก็ได้เหมือนกัน.

    // connect to the `devnet` cluster and get the current `slot`
    +const connection = new web3.Connection(web3.clusterApiUrl("devnet"));
    +const slot = await connection.getSlot();
    +
    +// get the latest block (allowing for v0 transactions)
    +const block = await connection.getBlock(slot, {
    +  maxSupportedTransactionVersion: 0,
    +});
    +
    +// get a specific transaction (allowing for v0 transactions)
    +const getTx = await connection.getTransaction(
    +  "3jpoANiFeVGisWRY5UP648xRXs3iQasCHABPWRWnoEjeA93nc79WrnGgpgazjq4K9m8g2NJoyKoWBV1Kx5VmtwHQ",
    +  {
    +    maxSupportedTransactionVersion: 0,
    +  },
    +);
    +

    แหล่งข้อมูลอื่นๆ

    อ้างอิง

    Last Updated:
    + + + diff --git a/docs/.vuepress/dist/th/index.html b/docs/.vuepress/dist/th/index.html index 36fd543a3..28a5a1b68 100644 --- a/docs/.vuepress/dist/th/index.html +++ b/docs/.vuepress/dist/th/index.html @@ -23,11 +23,11 @@ } Cooking กับ Solana | คู่มือ Solana - + -

    Cooking กับ Solana

    คู่มือ Solana คือแหล่งข้อมูลสำหรับนักพัฒนา ที่จะให้แนวความคิดหลักๆ และข้อมูลอ้างอิงสำหรับสร้าง applications บน Solana โดยแต่ละแนวความคิด และข้อมูลอ้างอิงจะเน้นในแต่ละมุมมองของการพัฒนา Solana โดยจะให้รายละเอียดเพิ่มเติม รวมไปถึงตัวอย่างการใช้งานอีกด้วย

    ร่วมกันเขียน

    คู่มือนี้ออกแบบมาให้ง่ายสำหรับนักพัฒนา Solana ที่จะร่วมกันเขียน ถึงแม้ว่าคุณจะยังไม่รู้ว่าจะทำอะไรยังไง การเริ่มจากช่วยกันเขียนก็เป็นการเริ่มต้นที่ดีนะ!

    ลองดู issues ที่เปิดอยู่ ที่นี่open in new window. แนวทางการช่วยกัน ที่นี่open in new window. ถ้าคุณเจอว่าคู่มือเราขาดอะไรไป ก็เปิด issue ได้เลย

    วิธีอ่านคู่มือ

    คู่มือ Solana แบ่งเป็นหลายส่วน โดยแต่ละส่วนจะเน้นคนละเป้าหมายกัน

    ส่วนคำอธิบาย
    แนวความคิดหลักสร้างความรู้ที่ควรจะรู้สำหรับการพัฒนาบน Solana
    แนวทางแนวทางของแต่ละเครื่องมือสำหรับการพัฒนา
    อ้างอิงส่วนอ้างอิงที่มักจะมี code สั้นๆ อยู่ด้วย
    Last Updated:
    - +

    Cooking กับ Solana

    คู่มือ Solana คือแหล่งข้อมูลสำหรับนักพัฒนา ที่จะให้แนวความคิดหลักๆ และข้อมูลอ้างอิงสำหรับสร้าง applications บน Solana โดยแต่ละแนวความคิด และข้อมูลอ้างอิงจะเน้นในแต่ละมุมมองของการพัฒนา Solana โดยจะให้รายละเอียดเพิ่มเติม รวมไปถึงตัวอย่างการใช้งานอีกด้วย

    ร่วมกันเขียน

    คู่มือนี้ออกแบบมาให้ง่ายสำหรับนักพัฒนา Solana ที่จะร่วมกันเขียน ถึงแม้ว่าคุณจะยังไม่รู้ว่าจะทำอะไรยังไง การเริ่มจากช่วยกันเขียนก็เป็นการเริ่มต้นที่ดีนะ!

    ลองดู issues ที่เปิดอยู่ ที่นี่open in new window. แนวทางการช่วยกัน ที่นี่open in new window. ถ้าคุณเจอว่าคู่มือเราขาดอะไรไป ก็เปิด issue ได้เลย

    วิธีอ่านคู่มือ

    คู่มือ Solana แบ่งเป็นหลายส่วน โดยแต่ละส่วนจะเน้นคนละเป้าหมายกัน

    ส่วนคำอธิบาย
    แนวความคิดหลักสร้างความรู้ที่ควรจะรู้สำหรับการพัฒนาบน Solana
    แนวทางแนวทางของแต่ละเครื่องมือสำหรับการพัฒนา
    อ้างอิงส่วนอ้างอิงที่มักจะมี code สั้นๆ อยู่ด้วย
    Last Updated:
    + diff --git a/docs/.vuepress/dist/th/integrations/index.html b/docs/.vuepress/dist/th/integrations/index.html index f5c09f6e0..d02a4fcfb 100644 --- a/docs/.vuepress/dist/th/integrations/index.html +++ b/docs/.vuepress/dist/th/integrations/index.html @@ -23,11 +23,11 @@ } เริ่มต้น | คู่มือ Solana - +

    เริ่มต้นการใช้งาน (Integrations)

    คู่มือ Solana integrations จะมีตัวอย่าง และข้อมูลอ้างอิงที่จะใช้ในการพัฒนา protocols บน Solana

    ข้อดีของ Solana มาจากการที่มันสามารถ integrate กับ protocols อื่นๆ ได้บน infrastructure ที่มีอยู่แล้วเพื่อสิ่งที่ดีกว่า

    Composability คือหัวใจ

    การสร้าง program ให้ใช้งานง่าย และขยายตามความต้องการได้จะทำให้ทั้ง program และ Solana ecosystem โตขึ้น อย่าหาทำอะไรที่มันใช้ได้ดีอยู่แล้ว มาพัฒนาบน protocols ที่มีอยู่แล้วเพื่อขยายฐานผู้ใช้ของเรากันดีกว่า

    ดัดแปลง และสร้างบน programs อื่นๆ หรือบน libraries ร่วมกันปลดปล่อยความสามารถใหม่ๆ เพื่อ Solana กันดีกว่า

    Contributing

    ถ้าสนใจที่จะช่วยกันทำ integrations ให้ลองไปดูที่ contribution guidelinesopen in new window.

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/th/integrations/jupiter.html b/docs/.vuepress/dist/th/integrations/jupiter.html index 977e7de91..2f49b38c4 100644 --- a/docs/.vuepress/dist/th/integrations/jupiter.html +++ b/docs/.vuepress/dist/th/integrations/jupiter.html @@ -23,7 +23,7 @@ } Jupiter | คู่มือ Solana - + @@ -595,6 +595,6 @@ skipPreflight: false, });

    แหล่งข้อมูลอื่น

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/th/integrations/mango.html b/docs/.vuepress/dist/th/integrations/mango.html index f99bad86c..5450f6dff 100644 --- a/docs/.vuepress/dist/th/integrations/mango.html +++ b/docs/.vuepress/dist/th/integrations/mango.html @@ -23,7 +23,7 @@ } Mango Markets | คู่มือ Solana - + @@ -367,6 +367,6 @@ })();

    แหล่งข้อมูลอื่น

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/th/integrations/pyth.html b/docs/.vuepress/dist/th/integrations/pyth.html index 25c18d822..a09f576df 100644 --- a/docs/.vuepress/dist/th/integrations/pyth.html +++ b/docs/.vuepress/dist/th/integrations/pyth.html @@ -23,7 +23,7 @@ } Pyth | คู่มือ Solana - + @@ -103,6 +103,6 @@ let pyth_price_data = &pyth_price_info.try_borrow_data()?; let price_account: Price = *load_price(pyth_price_data).unwrap();

    แหล่งข้อมูลอื่น

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/th/integrations/react-native.html b/docs/.vuepress/dist/th/integrations/react-native.html index 7ce3f22e0..0b0dea44a 100644 --- a/docs/.vuepress/dist/th/integrations/react-native.html +++ b/docs/.vuepress/dist/th/integrations/react-native.html @@ -23,7 +23,7 @@ } React Native | คู่มือ Solana - + @@ -80,6 +80,6 @@ ERROR Invariant Violation: Module AppRegistry is not a registered callable module (calling runApplication). A frequent cause of the error is that the application entry file path is incorrect. This สามารถ also happen when the JS bundle is corrupt or there is an early initialization error when loading React Native.

    ปัญหานี้สามารถแก้ได้โดยใช้ polyfill สำหรับ URL object ใน React Native.

    ติดตั้ง package react-native-url-polyfill และ import มันใน file ของ app (เช่น: index.js), เหมือนที่เคยแสดงไว้ก่อนหน้านี้

    Error: crypto.getRandomValues() not supported

    Error: crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported
     

    ปัญหานี้สามารถแก้ได้โดยใช้ polyfill สำหรับ crypto object ใน React Native.

    ติดตั้ง package react-native-get-random-values และ import มันใน file ของ app (เช่น: index.js), เหมือนที่เคยแสดงไว้ก่อนหน้านี้

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/th/integrations/serum.html b/docs/.vuepress/dist/th/integrations/serum.html index 1fd04ad00..dd309bfa1 100644 --- a/docs/.vuepress/dist/th/integrations/serum.html +++ b/docs/.vuepress/dist/th/integrations/serum.html @@ -23,7 +23,7 @@ } Serum | คู่มือ Solana - + @@ -105,6 +105,6 @@ })();
    Last Updated:
    - + diff --git a/docs/.vuepress/dist/th/integrations/strata.html b/docs/.vuepress/dist/th/integrations/strata.html index 1b3f1ebb3..69935daee 100644 --- a/docs/.vuepress/dist/th/integrations/strata.html +++ b/docs/.vuepress/dist/th/integrations/strata.html @@ -23,7 +23,7 @@ } Strata | คู่มือ Solana - + @@ -150,6 +150,6 @@ }, });

    แหล่งข้อมูลอื่น

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/th/integrations/switchboard.html b/docs/.vuepress/dist/th/integrations/switchboard.html index 0d0ba5f28..792031485 100644 --- a/docs/.vuepress/dist/th/integrations/switchboard.html +++ b/docs/.vuepress/dist/th/integrations/switchboard.html @@ -23,7 +23,7 @@ } Switchboard | คู่มือ Solana - + @@ -169,8 +169,8 @@ use super::*; pub fn get_result(ctx: Context<GetResult>) -> Result<()> { - let aggregator = &ctx.accounts.aggregator_feed; - let val: f64 = AggregatorAccountData::new(aggregator)? + let aggregator = &ctx.accounts.aggregator_feed.load()?; + let val:f64 = aggregator .get_result()? .try_into()?; @@ -184,12 +184,12 @@ pub struct GetResult<'info> { pub authority: Signer<'info>, /// CHECK: field is unsafe - pub aggregator_feed: AccountInfo<'info>, // pass aggregator key + pub aggregator_feed: AccountLoader<'info, AggregatorAccountData>, // pass aggregator key } -

    วิธีสร้าง Feed จาก Publisher

    ใน Switchboard documentation จะมีวิธีสร้าง feed จาก publisher อย่างละเอียด ลองไปดูได้ ที่นี่open in new window.

    Oracles

    คุณสมบัติพิเศษของ Switchboard คือเราสามารถสร้าง oracle ของเราเองได้ที่ local

    สร้าง oracle

    Press </> button to view full source
    import * as anchor from "@project-serum/anchor";
     import { Keypair } from "@solana/web3.js";
     import {
    @@ -536,6 +536,6 @@
         state_seeds,
     )?;
     

    แหล่งความรู้

    APIs และ Libraries

    ตัวอย่าง

    ข้อมูลอื่นๆ

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/th/integrations/web3auth.html b/docs/.vuepress/dist/th/integrations/web3auth.html index e3b14f416..71c13687d 100644 --- a/docs/.vuepress/dist/th/integrations/web3auth.html +++ b/docs/.vuepress/dist/th/integrations/web3auth.html @@ -23,7 +23,7 @@ } web3Auth (Torus Wallet) | คู่มือ Solana - + @@ -113,6 +113,6 @@ })();

    Resources

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/th/references/accounts.html b/docs/.vuepress/dist/th/references/accounts.html index 82de5f984..d38ef2e5e 100644 --- a/docs/.vuepress/dist/th/references/accounts.html +++ b/docs/.vuepress/dist/th/references/accounts.html @@ -23,11 +23,11 @@ } Accounts | คู่มือ Solana - + -

    Accounts

    วิธีสร้าง system account

    ในการสร้าง account ที่ System Programopen in new window เป็นเจ้าของ Solana runtime จะให้สิทธิ์เจ้าของ account สามารถเข้าถึงได้เพื่อเขียน data หรือ transfer lamports เมื่อสร้าง account เราจะต้องจองพื้นที่ storage space เป็น bytes ไว้ก่อนจำนวนหนึ่ง (พื้นที่) และ lamports ที่เพียงพอสำหรับค่า rent ซึ่ง Rentopen in new window นี้คือค่า cost ที่มีไว้เพื่อทำให้เรา accounts คงอยู่บน Solana

    Press </> button to view full source
    import {
    +    

    Accounts

    วิธีสร้าง system account

    ในการสร้าง account ที่ System Programopen in new window เป็นเจ้าของ Solana runtime จะให้สิทธิ์เจ้าของ account สามารถเข้าถึงได้เพื่อเขียน data หรือ transfer lamports เมื่อสร้าง account เราจะต้องจองพื้นที่ storage space เป็น bytes ไว้ก่อนจำนวนหนึ่ง (พื้นที่) และ lamports ที่เพียงพอสำหรับค่า rent ซึ่ง Rentopen in new window นี้คือค่า cost ที่มีไว้เพื่อทำให้เรา accounts คงอยู่บน Solana

    Press </> button to view full source
    import {
       SystemProgram,
       Keypair,
       Transaction,
    @@ -998,7 +998,7 @@
         programId: programId,
       })
     );
    -

    วิธีดึงข้อมูล account balance

    Press </> button to view full source
    import {
    +

    วิธีดึงข้อมูล account balance

    Press </> button to view full source
    import {
       clusterApiUrl,
       Connection,
       PublicKey,
    @@ -1034,22 +1034,47 @@
         );
     }
     
    from solana.publickey import Keypair
    +
    from solders.keypair import Keypair
     from solana.rpc.api import Client
     
     client = Client("https://api.devnet.solana.com")
     
     key_pair = Keypair()
    -public_key = key_pair.public_key
    +public_key = key_pair.pubkey()
     
     print(client.get_balance(public_key))
     
    // clang++ get_balance.cpp -o get_balance -std=c++17 -lssl -lcrypto -lsodium
    +
    +#include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +  Connection connection("https://api.devnet.solana.com");
    +
    +  auto key_pair = Keypair::generate();
    +
    +  auto public_key = key_pair.public_key;
    +  std::cout << "public_key = " << public_key.to_base58() << std::endl;
    +
    +  uint64_t balance = connection.get_balance(public_key).unwrap();
    +  std::cout << "balance = " << balance << std::endl;
    +
    +  return 0;
    +}
    +

    TIP

    ถ้าเราต้องการเรียกดู token balance เราต้องรู้ address ของ token account นั้นๆ สำหรับรายเอียดเพิ่มเติมไปดูได้ที่ Token References

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/th/references/basic-transactions.html b/docs/.vuepress/dist/th/references/basic-transactions.html index 9820b354a..71dbaf4dc 100644 --- a/docs/.vuepress/dist/th/references/basic-transactions.html +++ b/docs/.vuepress/dist/th/references/basic-transactions.html @@ -23,11 +23,11 @@ } Sending Transactions | คู่มือ Solana - + -

    Sending Transactions

    วิธี send SOL

    การที่เราจะส่ง SOL ได้นั้นเราต้องใช้ SystemProgramopen in new window.

    Press </> button to view full source
    import {
    +    

    Sending Transactions

    วิธี send SOL

    การที่เราจะส่ง SOL ได้นั้นเราต้องใช้ SystemProgramopen in new window.

    Press </> button to view full source
    import {
       Connection,
       Keypair,
       SystemProgram,
    @@ -76,31 +76,31 @@
     
     await sendAndConfirmTransaction(connection, transferTransaction, [fromKeypair]);
     
    from solana.rpc.api import Client
    -from solana.keypair import Keypair
    +from solders.keypair import Keypair
     from solana.transaction import Transaction
    -from solana.system_program import TransferParams, transfer
    +from solders.system_program import TransferParams, transfer
     
     LAMPORT_PER_SOL = 1000000000
     
     client: Client = Client("https://api.devnet.solana.com")
     
    -sender = Keypair.generate()
    -receiver = Keypair.generate()
    +sender = Keypair()
    +receiver = Keypair()
     
    -airdrop = client.request_airdrop(sender.public_key, 1 * LAMPORT_PER_SOL)
    -airdrop_signature = airdrop["result"]
    +airdrop = client.request_airdrop(sender.pubkey(), 1 * LAMPORT_PER_SOL)
    +airdrop_signature = airdrop.value
     client.confirm_transaction(airdrop_signature)
     
     transaction = Transaction().add(transfer(TransferParams(
    -    from_pubkey=sender.public_key,
    -    to_pubkey=receiver.public_key,
    +    from_pubkey=sender.pubkey(),
    +    to_pubkey=receiver.pubkey(),
         lamports=1_000_000)
     ))
     
     client.send_transaction(transaction, sender)
     
    Last Updated:
    - + diff --git a/docs/.vuepress/dist/th/references/keypairs-and-wallets.html b/docs/.vuepress/dist/th/references/keypairs-and-wallets.html index 7a0400144..784e91034 100644 --- a/docs/.vuepress/dist/th/references/keypairs-and-wallets.html +++ b/docs/.vuepress/dist/th/references/keypairs-and-wallets.html @@ -23,20 +23,35 @@ } Keypairs และ Wallets | คู่มือ Solana - + -

    Keypairs และ Wallets

    วิธีสร้าง Keypair ใหม่

    actions ต่างๆ บน Solana libraries ต้องการ Keypair หรือ Wallet ถ้าเราเชื่อมกับ wallet อยู่แล้ว เราก็ไม่ต้องห่วงอะไร หรือถ้าเราต้องการ keypair เราก็แค่ต้องสร้างมันขึ้นมา

    Press </> button to view full source
    import { Keypair } from "@solana/web3.js";
    +    

    Keypairs และ Wallets

    วิธีสร้าง Keypair ใหม่

    actions ต่างๆ บน Solana libraries ต้องการ Keypair หรือ Wallet ถ้าเราเชื่อมกับ wallet อยู่แล้ว เราก็ไม่ต้องห่วงอะไร หรือถ้าเราต้องการ keypair เราก็แค่ต้องสร้างมันขึ้นมา

    Press </> button to view full source
    import { Keypair } from "@solana/web3.js";
     
     (async () => {
       let keypair = Keypair.generate();
     })();
     
    from solana.keypair import Keypair
    +
    from solders.keypair import Keypair
     
     keypair = Keypair()
     
    // clang++ generate_keypair.cpp -o generate_keypair -std=c++17 -lssl -lcrypto -lsodium
    +
    +#include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +  auto key_pair = Keypair::generate();
    +
    +  auto public_key = key_pair.public_key;
    +  std::cout << "public_key = " << public_key.to_base58() << std::endl;
    +
    +  return 0;
    +}
    +
    use solana_sdk::signature::{Keypair};
     
     fn main() {
    @@ -47,7 +62,7 @@
     
     # pubkey: 9ZNTfG4NyQgxy2SWjSiQoUyBPEvXT2xo7fKc5hPYYJ7b
     

    วิธี restore a Keypair from a secret

    ถ้าเรามี secret อยู่แล้วเราก็จะสามารถสร้าง Keypair จาก secret นั้นเพื่อทดสอบ dApp ของเราได้เลย

    1. สร้างจาก Bytes
    Press </> button to view full source
    import { Keypair } from "@solana/web3.js";
    +

    วิธี restore a Keypair from a secret

    ถ้าเรามี secret อยู่แล้วเราก็จะสามารถสร้าง Keypair จาก secret นั้นเพื่อทดสอบ dApp ของเราได้เลย

    1. สร้างจาก Bytes
    Press </> button to view full source
    import { Keypair } from "@solana/web3.js";
     
     (async () => {
       const keypair = Keypair.fromSecretKey(
    @@ -67,7 +82,7 @@
         121, 35, 172, 247, 68, 251, 226, 218, 48, 63, 176, 109, 168, 89, 238, 135,
       ])
     );
    -
    from solana.keypair import Keypair
    +
    from solders.keypair import Keypair
     
     secret_key= [
             174, 47, 154, 16, 202, 193, 206, 113, 199, 190, 53, 133, 169, 175, 31, 56, 222, 53, 138,
    @@ -76,8 +91,8 @@
             63, 176, 109, 168, 89, 238, 135,
         ]
         
    -keypair = Keypair.from_secret_key(bytes(secret_key))
    -print("Created Keypair with Public Key: {}".format(keypair.public_key))
    +keypair = Keypair.from_bytes(secret_key)
    +print("Created Keypair with Public Key: {}".format(keypair.pubkey()))
     
    use solana_sdk::signature::{Keypair, Signer};
    +keypair = Keypair.from_bytes(secret_key)
    +
    // clang++ keypair_from_seed.cpp -o keypair_from_seed -std=c++17 -lssl -lcrypto -lsodium
    +
    +#include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +  const uint8_t bytes[] = {
    +    174, 47, 154, 16, 202, 193, 206, 113, 199, 190, 53, 133, 169, 175, 31, 56, 222, 53, 138,
    +    189, 224, 216, 117, 173, 10, 149, 53, 45, 73, 251, 237, 246, 15, 185, 186, 82, 177, 240,
    +    148, 69, 241, 227, 167, 80, 141, 89, 240, 121, 121, 35, 172, 247, 68, 251, 226, 218, 48,
    +    63, 176, 109, 168, 89, 238, 135,
    +  };
    +  Keypair key_pair = Keypair::from_seed(bytes);
    +  std::cout << "Created Keypair with Public Key: " << key_pair.public_key.to_base58() << std::endl;
    +}
    +
    use solana_sdk::signature::{Keypair, Signer};
     
     fn main() {
         let secret_key: [u8; 64] = [
    @@ -126,14 +164,13 @@
         "5MaiiCavjCmn9Hs1o3eznqDEhRwxo7pXiAYez7keQUviUkauRiTMD8DrESdrNjN8zd9mTmVhRvBJeg5vhyvgrAhG"
       )
     );
    -
    import base58
    -from solana.keypair import Keypair
    +
    from solders.keypair import Keypair
     
     b58_string = "5MaiiCavjCmn9Hs1o3eznqDEhRwxo7pXiAYez7keQUviUkauRiTMD8DrESdrNjN8zd9mTmVhRvBJeg5vhyvgrAhG"
    -keypair = Keypair.from_secret_key(base58.b58decode(b58_string)
    -print("Created Keypair with Public Key: {}".format(keypair.public_key))
    -
    use solana_sdk::signature::{Keypair, Signer};
     
     fn main() {
    @@ -146,7 +183,7 @@
     

    วิธี verify a Keypair

    ถ้าเราได้ keypair มา เราสามารถตรวจสอบมันได้ว่า secret นั้นตรงกับ public key หรือเปล่า

    Press </> button to view full source
    import { Keypair, PublicKey } from "@solana/web3.js";
    +

    วิธี verify a Keypair

    ถ้าเราได้ keypair มา เราสามารถตรวจสอบมันได้ว่า secret นั้นตรงกับ public key หรือเปล่า

    Press </> button to view full source
    import { Keypair, PublicKey } from "@solana/web3.js";
     
     (async () => {
       const publicKey = new PublicKey(
    @@ -174,10 +211,10 @@
     );
     console.log(keypair.publicKey.toBase58() === publicKey.toBase58());
     // true
    -
    from solana.keypair import Keypair
    -from solana.publickey import PublicKey
    +
    from solders.keypair import Keypair
    +from solders.pubkey import Pubkey
     
    -public_key = PublicKey("24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p")
    +public_key = Pubkey.from_string("24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p")
     
     keys = [
             174, 47, 154, 16, 202, 193, 206, 113, 199, 190, 53, 133, 169, 175, 31, 56, 222, 53, 138,
    @@ -185,11 +222,11 @@
             148, 69, 241, 227, 167, 80, 141, 89, 240, 121, 121, 35, 172, 247, 68, 251, 226, 218, 48,
             63, 176, 109, 168, 89, 238, 135,
         ]
    -keypair = Keypair.from_secret_key(bytes(keys))
    +keypair = Keypair.from_bytes(keys)
     
    -print(keypair.public_key.to_base58() == public_key.to_base58())
    +print(keypair.pubkey() == public_key)
     # True
    -
    // clang++ verify_keypair.cpp -o verify_keypair -std=c++17 -lssl -lcrypto -lsodium
    +
    +#include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +  PublicKey public_key = PublicKey("24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p");
    +
    +  const uint8_t bytes[] = {
    +    174, 47, 154, 16, 202, 193, 206, 113, 199, 190, 53, 133, 169, 175, 31, 56, 222, 53, 138,
    +    189, 224, 216, 117, 173, 10, 149, 53, 45, 73, 251, 237, 246, 15, 185, 186, 82, 177, 240,
    +    148, 69, 241, 227, 167, 80, 141, 89, 240, 121, 121, 35, 172, 247, 68, 251, 226, 218, 48,
    +    63, 176, 109, 168, 89, 238, 135,
    +  };
    +  Keypair key_pair = Keypair::from_seed(bytes);
    +
    +  std::cout << (public_key.to_base58() == key_pair.public_key.to_base58()) << std::endl;
    +}
    +
    solana-keygen verify <PUBKEY> prompt://
     

    วิธี check if a public key has an associated private key

    ในบางกรณีเฉพาะ (เช่น a Program Derived Address), public keys อาจจะไม่มี private key เราสามารถตรวจสอบโดยดูว่า public key อยู่บน ed25519 curve หรือไม่ เพราะ public keys ที่อยู่บน curve สามารถควบคุมได้จากผู้ใช้งานที่ถือ wallet นั้นอยู่

    Press </> button to view full source
    import { PublicKey } from "@solana/web3.js";
    +

    วิธี check if a public key has an associated private key

    ในบางกรณีเฉพาะ (เช่น a Program Derived Address), public keys อาจจะไม่มี private key เราสามารถตรวจสอบโดยดูว่า public key อยู่บน ed25519 curve หรือไม่ เพราะ public keys ที่อยู่บน curve สามารถควบคุมได้จากผู้ใช้งานที่ถือ wallet นั้นอยู่

    Press </> button to view full source
    import { PublicKey } from "@solana/web3.js";
     
     (async function () {
       // Note that Keypair.generate() will always give a public key that is valid for users
    @@ -219,20 +287,31 @@
     })();
     
    from solana.keypair import Keypair
    -from solana.publickey import PublicKey
    -from solana.utils.ed25519_base import is_on_curve
    +
    from solders.pubkey import Pubkey
     
     # Note that Keypair() will always give a public key that is valid for users
    -key = PublicKey('5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY') # Valid public key
    -print(is_on_curve(key)) # Lies on the ed25519 curve and is suitable for users
    +key = Pubkey.from_string('5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY') # Valid public key
    +print(key.is_on_curve()) # Lies on the ed25519 curve and is suitable for users
    +
    +off_curve_address = Pubkey.from_string('4BJXYkfvg37zEmBbsacZjeQDpTNx91KppxFJxRqrz48e') # Valid public key
    +print(off_curve_address.is_on_curve()) # Not on the ed25519 curve, therefore not suitable for users
    +
    +error_pubkey = Pubkey.from_string("testPubkey"); # Is not a valid public key
    +
    #include <iostream>
    +#include <solana_sdk.h>
    +
    +int main()
    +{
    +    auto public_key = PublicKey("5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY");
     
    -off_curve_address = PublicKey('4BJXYkfvg37zEmBbsacZjeQDpTNx91KppxFJxRqrz48e') # Valid public key
    -print(PublicKey._is_on_curve(off_curve_address)) # Not on the ed25519 curve, therefore not suitable for users
    +    std::cout << public_key.is_on_curve() << std::endl;
     
    -error_pubkey = PublicKey("testPubkey"); # Is not a valid public key
    -
    use solana_sdk::pubkey::{Pubkey};
     use std::str::FromStr;
     
    @@ -274,16 +353,16 @@
       "pill tomorrow foster begin walnut borrow virtual kick shift mutual shoe scatter";
     const seed = bip39.mnemonicToSeedSync(mnemonic, ""); // (mnemonic, password)
     const keypair = Keypair.fromSeed(seed.slice(0, 32));
    -
    from solana.keypair import Keypair
    +
    from solders.keypair import Keypair
     from mnemonic import Mnemonic
     
     mnemo = Mnemonic("english")
     seed = mnemo.to_seed("pill tomorrow foster begin walnut borrow virtual kick shift mutual shoe scatter")
    -keypair = Keypair.from_secret_key(seed)
    -print("Created Keypair with Public Key: {}".format(keypair.public_key)
    +keypair = Keypair.from_bytes(seed)
    +print("Created Keypair with Public Key: {}".format(keypair.pubkey()))
     
    solana-keygen recover
     
    1. BIP44 (สร้างหลาย wallets หรือที่เรียกว่า HD wallets)

    เราสามารถสร้างหลาย wallets จาก seed เดียวหรือที่เราเรียกว่า 'Hierarchical Deterministic wallets' หรือ HD wallets:

    Press </> button to view full source
    import { Keypair } from "@solana/web3.js";
    @@ -311,7 +390,7 @@
     }
     
    solana-keygen recover 'prompt:?key=0/0'
     

    วิธี generate a vanity address

    Vanity public keys หรือ custom addresses คือ keys ที่เริ่มด้วยตัวอักษรที่เฉพาะเจาะจง เช่น เราอาจจะต้องการ publickey ที่ขึ้นต้้นด้วย "elv1s" หรือ "cook" ซึ่งมันจะทำให้จำไดง่ายขึ้นว่าเป็นของใคร ทำให้ key สามารถแยกแยะกันได้ง่ายขึ้น

    Note: ยิ่งระบุ characters ใน vanity address มากเท่าไหร่ ก็จะยิ่งใช้เวลาในการค้นหา address นานขึ้น

    WARNING

    คุณควรใช้ CLI ในการสร้าง ทั้งตัวอย่าง Python และ TypeScript เป็นเพียงแค่การทำให้เห็นภาพมากขึ้นเท่านั้น และมันจะทำงานช้ากว่าบน CLI อีกด้วย

    Press </> button to view full source
    import { Keypair } from "@solana/web3.js";
    +

    วิธี generate a vanity address

    Vanity public keys หรือ custom addresses คือ keys ที่เริ่มด้วยตัวอักษรที่เฉพาะเจาะจง เช่น เราอาจจะต้องการ publickey ที่ขึ้นต้้นด้วย "elv1s" หรือ "cook" ซึ่งมันจะทำให้จำไดง่ายขึ้นว่าเป็นของใคร ทำให้ key สามารถแยกแยะกันได้ง่ายขึ้น

    Note: ยิ่งระบุ characters ใน vanity address มากเท่าไหร่ ก็จะยิ่งใช้เวลาในการค้นหา address นานขึ้น

    WARNING

    คุณควรใช้ CLI ในการสร้าง ทั้งตัวอย่าง Python และ TypeScript เป็นเพียงแค่การทำให้เห็นภาพมากขึ้นเท่านั้น และมันจะทำงานช้ากว่าบน CLI อีกด้วย

    Press </> button to view full source
    import { Keypair } from "@solana/web3.js";
     
     (async () => {
       let keypair = Keypair.generate();
    @@ -323,17 +402,36 @@
     while (!keypair.publicKey.toBase58().startsWith("elv1s")) {
       keypair = Keypair.generate();
     }
    -
    from solana.keypair import Keypair
    +
    from solders.keypair import Keypair
     
     keypair = Keypair()
    -while(str(keypair.public_key)[:5]!="elv1s") :
    +while(str(keypair.pubkey())[:5]!="elv1s") :
         keypair = Keypair()
         
    -print("Created Keypair with Public Key: {}".format(keypair.public_key))
    +print("Created Keypair with Public Key: {}".format(keypair.pubkey()))
     
    solana-keygen grind --starts-with e1v1s:1
    +
    // clang++ vanity_keypair.cpp -o vanity_keypair -std=c++17 -lssl -lcrypto -lsodium
    +
    +#include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +  auto key_pair = Keypair::generate();
    +
    +  while (key_pair.public_key.to_base58().substr(0, 5) != "elv1s") {
    +    key_pair = Keypair::generate();
    +  }
    +
    +  std::cout << "Created Keypair with Public Key: " << key_pair.public_key.to_base58() << std::endl;
    +}
    +
    solana-keygen grind --starts-with e1v1s:1
     

    วิธี sign และ verify messages with wallets

    function หลักของ keypair คือ sign message และยังเอาไว้ตรวจสอบ signature ได้ด้วย ซึ่งการตรวจสอบ signature จะทำให้ผู้รับมั่นใจได้ว่าข้อมูลถูก sign ด้วยเจ้าของ private key นั้นจริงๆ

    เพื่อที่จะทำตัวอย่างกันเราจะ import TweetNaClopen in new window crypto library มาใช้

    Press </> button to view full source
    import { Keypair } from "@solana/web3.js";
     import nacl from "tweetnacl";
    @@ -372,41 +470,25 @@
     );
     
     console.log(result);
    -
    from nacl.signing import VerifyKey
    -from solana.keypair import Keypair
    +
    from solders.keypair import Keypair
     
     secret_key =  [
           174, 47, 154, 16, 202, 193, 206, 113, 199, 190, 53, 133, 169, 175, 31, 56, 222, 53, 138, 189, 224, 216, 117,
           173, 10, 149, 53, 45, 73, 251, 237, 246, 15, 185, 186, 82, 177, 240, 148, 69, 241, 227, 167, 80, 141, 89, 240,
           121, 121, 35, 172, 247, 68, 251, 226, 218, 48, 63, 176, 109, 168, 89, 238, 135,
    -    ]
    -     
    -keypair = Keypair.from_secret_key(bytes(secret_key))
    -pubkey_bytes = bytes(keypair.public_key)
    -message = "The quick brown fox jumps over the lazy dog"
    -message_bytes = bytes(message,'utf8')
    -signed_message = keypair.sign(message_bytes)
    -
    -verify_sign = VerifyKey(
    -    pubkey_bytes
    -).verify(
    -    smessage=message_bytes,  
    -    signature=signed_message.signature
    -)
    -
    -#Returns original message if the signature has not been tampered with
    -print(verify_sign)
    -

    วิธีเชื่อมต่อกับ wallet

    Solana's wallet-adapteropen in new window libraries จะช่วยทำให้เราจัดการเชื่อมต่อ wallet ที่ฝั่ง client ได้อย่างง่ายดาย

    React

    Run คำสั่งข้างล่างเพื่อติดตั้ง dependencies ที่ต้องใช้:

    yarn add @solana/wallet-adapter-react @solana/wallet-adapter-react-ui @solana/wallet-adapter-base @solana/wallet-adapter-wallets
    +    ] 
    +keypair = Keypair.from_bytes(secret_key)
    +message = b"The quick brown fox jumps over the lazy dog"
    +signature = keypair.sign_message(message)
    +verify_sign = signature.verify(keypair.pubkey(), message)
    +
    +print(verify_sign) # bool
    +

    วิธีเชื่อมต่อกับ wallet

    Solana's wallet-adapteropen in new window libraries จะช่วยทำให้เราจัดการเชื่อมต่อ wallet ที่ฝั่ง client ได้อย่างง่ายดาย

    React

    Run คำสั่งข้างล่างเพื่อติดตั้ง dependencies ที่ต้องใช้:

    yarn add @solana/wallet-adapter-react @solana/wallet-adapter-react-ui @solana/wallet-adapter-base @solana/wallet-adapter-wallets
     

    React wallet-adapter libraries จะทำให้เราคงสถานะการเชื่อมต่อ wallet ผ่าน hooks และ Context providers ที่ชื่อว่า useWallet, WalletProvider, useConnection, และ ConnectionProvider React App ต้องครอบไว้ด้วย WalletProvider และ ConnectionProvider

    นอกจากนี้เรายังสามารถบอกให้ users เชื่อมต่อโดยใช้ useWalletModal เพื่อสลับการมองเห็น connection modal และครอบ app ไว้ด้วย WalletModalProvider จาก @solana/wallet-adapter-react-ui ได้ด้วย. ตัว connection modal จะควบคุมการทำงาน connection ให้เรา ทำให้เราสามารถ listen ไว้ได้ว่า wallet เชื่อมต่อแล้ว. เราจะรู้ว่า wallet เชื่อมต่อแล้วเมื่อการตอบกลับของ useWallet มีค่า wallet อยู่ (ไม่ null). และตรงข้ามกันถ้า wallet ค่าเป็น null แสดงว่าเรายังไม่ได้เชื่อมต่อ (disconnected).

    Press </> button to view full source
    import React, { useMemo, FC, PropsWithChildren } from "react";
     import {
       ConnectionProvider,
    @@ -593,6 +675,6 @@
     <WalletMultiButton />
     {/if}
     
    Last Updated:
    - + diff --git a/docs/.vuepress/dist/th/references/local-development.html b/docs/.vuepress/dist/th/references/local-development.html index d27e05372..c8e9ed200 100644 --- a/docs/.vuepress/dist/th/references/local-development.html +++ b/docs/.vuepress/dist/th/references/local-development.html @@ -23,12 +23,12 @@ } Local Development | คู่มือ Solana - + -

    Local Development

    เริ่มใช้ Local Validator

    การทดสอบ program ที่ local จะเสถียรกว่าการทดสอบบน devnet และมันยังช่วยเราทดสอบก่อนที่จะไปลองบน devnet อีกด้วย

    เราสามารถติดตั้ง local-test-validator โดยการลง solana tool suite และ run คำสั่งนี้

    solana-test-validator
    -

    ประโยชน์ของการใช้ local-test-validator คือ:

    • ไม่มีข้อจำกัด (rate-limits) ​ในการเรียก RPC
    • ไม่มีข้อจำกัดในการขอ airdrop
    • deploy program on-chain ได้โดยตรง (--bpf-program ...)
    • สามารถ clone accounts และ programs จาก public cluster ได้ (--clone ...)
    • ตั้งค่า transaction history retention ได้ (--limit-ledger-size ...)
    • ตั้งค่าความยาว epoch ได้ (--slots-per-epoch ...)
    • ข้ามไป slot ไหนก็ได้ตามใจ (--warp-slot ...)

    Connecting to Environments

    เวลา dev บน Solana development เราต้อง connect ไปที่ RPC API endpoint ซึ่ง Solana จะมีอยู่ 3 public development environments:

    • mainnet-beta https://api.mainnet-beta.solana.com
    • devnet https://api.devnet.solana.com
    • testnet https://api.testnet.solana.com
    Press </> button to view full source
    import { clusterApiUrl, Connection } from "@solana/web3.js";
    +    

    Local Development

    เริ่มใช้ Local Validator

    การทดสอบ program ที่ local จะเสถียรกว่าการทดสอบบน devnet และมันยังช่วยเราทดสอบก่อนที่จะไปลองบน devnet อีกด้วย

    เราสามารถติดตั้ง local-test-validator โดยการลง solana tool suite และ run คำสั่งนี้

    solana-test-validator
    +

    ประโยชน์ของการใช้ local-test-validator คือ:

    • ไม่มีข้อจำกัด (rate-limits) ​ในการเรียก RPC
    • ไม่มีข้อจำกัดในการขอ airdrop
    • deploy program on-chain ได้โดยตรง (--bpf-program ...)
    • สามารถ clone accounts และ programs จาก public cluster ได้ (--clone ...)
    • ตั้งค่า transaction history retention ได้ (--limit-ledger-size ...)
    • ตั้งค่าความยาว epoch ได้ (--slots-per-epoch ...)
    • ข้ามไป slot ไหนก็ได้ตามใจ (--warp-slot ...)

    Connecting to Environments

    เวลา dev บน Solana development เราต้อง connect ไปที่ RPC API endpoint ซึ่ง Solana จะมีอยู่ 3 public development environments:

    • mainnet-beta https://api.mainnet-beta.solana.com
    • devnet https://api.devnet.solana.com
    • testnet https://api.testnet.solana.com
    Press </> button to view full source
    import { clusterApiUrl, Connection } from "@solana/web3.js";
     
     (async () => {
       const connection = new Connection(clusterApiUrl("mainnet-beta"), "confirmed");
    @@ -38,6 +38,15 @@
     
     client = Client("https://api.mainnet-beta.solana.com")
     
    #include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +    Connection connection("https://api.mainnet-beta.solana.com");
    +    return 0;
    +}
    +
    use solana_client::rpc_client::RpcClient;
     use solana_sdk::commitment_config::CommitmentConfig;
     
    @@ -49,7 +58,7 @@
     let client = RpcClient::new_with_commitment(rpc_url, CommitmentConfig::confirmed());
     
    solana config set --url https://api.mainnet-beta.solana.com
     

    Finally, you สามารถ also connect to a private cluster, either one local or running remotely with the following:

    Press </> button to view full source
    import { Connection } from "@solana/web3.js";
    +

    Finally, you สามารถ also connect to a private cluster, either one local or running remotely with the following:

    Press </> button to view full source
    import { Connection } from "@solana/web3.js";
     
     (async () => {
       // This will connect you to your local validator
    @@ -60,6 +69,15 @@
     
     client = Client("http://127.0.0.1:8899")
     
    #include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +    Connection connection("http://127.0.0.1:8899");
    +    return 0;
    +}
    +
    use solana_client::rpc_client::RpcClient;
     use solana_sdk::commitment_config::CommitmentConfig;
     
    @@ -71,7 +89,7 @@
     let client = RpcClient::new_with_commitment(rpc_url, CommitmentConfig::confirmed());
     
    solana config set --url http://privaterpc.com
     

    Subscribing to Events

    Websockets จะมี pub/sub interface ที่เราสามารถฟัง events ที่เราสนใจแทนที่จะคอยวนๆ เรียก HTTP endpoint บ่อยๆ เราสามารถรับข้อมูลเฉพาะตอนมันเกิดขึ้นได้

    Solana's web3 Connectionopen in new window จะมี websocket endpoint และจะ registers ตัว websocket client เมื่อเรา new Connection ขึ้นมาใหม่ (ดู source code ที่นี่open in new window).

    Connection class จะมี pub/sub methods - ที่จะมีชื่อเริ่มด้วย on เหมือน event emitters ทั่วไป เวลาเราเรียก listener methods พวกนี้ มันจะ registers subscription ใหม่ไปที่ websocket client ของ Connection นั้นๆ ตัวอย่างของ pub/sub method ที่เราใช้ด้านล่างคือ onAccountChangeopen in new window. ส่วน callback จะให้ updated state data ผ่าน arguments (ดูตัวอย่างได้ที่ AccountChangeCallbackopen in new window).

    Press </> button to view full source
    import { clusterApiUrl, Connection, Keypair } from "@solana/web3.js";
    +

    Subscribing to Events

    Websockets จะมี pub/sub interface ที่เราสามารถฟัง events ที่เราสนใจแทนที่จะคอยวนๆ เรียก HTTP endpoint บ่อยๆ เราสามารถรับข้อมูลเฉพาะตอนมันเกิดขึ้นได้

    Solana's web3 Connectionopen in new window จะมี websocket endpoint และจะ registers ตัว websocket client เมื่อเรา new Connection ขึ้นมาใหม่ (ดู source code ที่นี่open in new window).

    Connection class จะมี pub/sub methods - ที่จะมีชื่อเริ่มด้วย on เหมือน event emitters ทั่วไป เวลาเราเรียก listener methods พวกนี้ มันจะ registers subscription ใหม่ไปที่ websocket client ของ Connection นั้นๆ ตัวอย่างของ pub/sub method ที่เราใช้ด้านล่างคือ onAccountChangeopen in new window. ส่วน callback จะให้ updated state data ผ่าน arguments (ดูตัวอย่างได้ที่ AccountChangeCallbackopen in new window).

    Press </> button to view full source
    import { clusterApiUrl, Connection, Keypair } from "@solana/web3.js";
     
     (async () => {
       // Establish new connect to devnet - websocket client connected to devnet will also be registered here
    @@ -102,7 +120,7 @@
       "confirmed"
     );
     
    import asyncio
    -from solana.keypair import Keypair
    +from solders.keypair import Keypair
     from solana.rpc.websocket_api import connect
     
     async def main():
    @@ -110,7 +128,7 @@
             # Create a Test Wallet
             wallet = Keypair()
             # Subscribe to the Test wallet to listen for events
    -        await websocket.account_subscribe(wallet.public_key)
    +        await websocket.account_subscribe(wallet.pubkey())
             # Capture response from account subscription 
             first_resp = await websocket.recv()
             print("Subscription successful with id {}, listening for events \n".format(first_resp.result))
    @@ -122,13 +140,62 @@
         # Create a Test Wallet
         wallet = Keypair()
         # Subscribe to the Test wallet to listen for events
    -    await websocket.account_subscribe(wallet.public_key)
    +    await websocket.account_subscribe(wallet.pubkey())
         # Capture response from account subscription 
         first_resp = await websocket.recv()
         print("Subscription successful with id {}, listening for events \n".format(first_resp.result))
         updated_account_info = await websocket.recv()
         print(updated_account_info)    
    -
    use solana_client::pubsub_client::PubsubClient;
    +
    // clang++ on_account_change.cpp -o on_account_change -std=c++17 -lssl -lcrypto -lsodium
    +
    +#include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +  Connection connection("https://api.devnet.solana.com");
    +
    +  auto key_pair = Keypair::generate();
    +
    +  int subscriptionId = connection.on_account_change(key_pair.public_key, [&](Result<Account> result) {
    +    Account account = result.unwrap();
    +    std::cout << "owner = " << account.owner.to_base58() << std::endl;
    +    std::cout << "lamports = " << account.lamports << std::endl;
    +    std::cout << "data = " << account.data << std::endl;
    +    std::cout << "executable = " << (account.executable ? "true" : "false") << std::endl;
    +  });
    +
    +  sleep(1);
    +
    +  std::string tx_hash = connection.request_airdrop(key_pair.public_key).unwrap();
    +  std::cout << "tx hash = " << tx_hash << std::endl;
    +
    +  for (int i = 0; i < 10; i++) {
    +    connection.poll();
    +    sleep(1);
    +  }
    +
    +  connection.remove_account_listener(subscriptionId);
    +
    +  return 0;
    +}
    +
    use solana_client::pubsub_client::PubsubClient;
     use solana_client::rpc_config::RpcAccountInfoConfig;
     use solana_sdk::commitment_config::CommitmentConfig;
     use solana_sdk::signature::{Keypair, Signer};
    @@ -177,7 +244,7 @@
     ).unwrap();
     let message = match receiver.recv().unwrap();
     println!("{:?}", message)
    -

    Getting Test SOL

    เมื่อเราทำงานที่ local เราจะต้องการ SOL ในการส่ง transactions บน non-mainnet environments เราสามารถขอ SOL ได้ด้วยการ airdrop ไปที่ address ของเรา

    Press </> button to view full source
    import { Connection, Keypair, LAMPORTS_PER_SOL } from "@solana/web3.js";
    +

    Getting Test SOL

    เมื่อเราทำงานที่ local เราจะต้องการ SOL ในการส่ง transactions บน non-mainnet environments เราสามารถขอ SOL ได้ด้วยการ airdrop ไปที่ address ของเรา

    Press </> button to view full source
    import { Connection, Keypair, LAMPORTS_PER_SOL } from "@solana/web3.js";
     
     (async () => {
       const keypair = Keypair.generate();
    @@ -201,7 +268,7 @@
     );
     
     await connection.confirmTransaction(airdropSignature);
    -
    from solana.keypair import Keypair
    +
    from solders.keypair import Keypair
     from solana.rpc.api import Client
     
     wallet = Keypair()
    @@ -209,14 +276,32 @@
     client = Client("https://api.devnet.solana.com")
     
     #Input Airdrop amount in LAMPORTS
    -client.request_airdrop(wallet.public_key, 1000000000)
    +client.request_airdrop(wallet.pubkey(), 1000000000)
     
     #Airdrops 1 SOL
     
    use solana_client::rpc_client::RpcClient;
    +
    // clang++ request_airdrop.cpp -o request_airdrop -std=c++17 -lssl -lcrypto -lsodium
    +
    +#include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +  Connection connection("https://api.devnet.solana.com");
    +
    +  auto key_pair = Keypair::generate();
    +
    +  std::string tx_hash = connection.request_airdrop(key_pair.public_key).unwrap();
    +
    +  std::cout << "tx hash = " << tx_hash << std::endl;
    +
    +  return 0;
    +}
    +
    use solana_client::rpc_client::RpcClient;
     use solana_sdk::commitment_config::CommitmentConfig;
     use solana_sdk::native_token::LAMPORTS_PER_SOL;
     use solana_sdk::signature::{Keypair, Signer};
    @@ -267,6 +352,6 @@
     solana-test-validator --bpf-program 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin serum_dex_v3.so --reset
     
    Last Updated:
    - + diff --git a/docs/.vuepress/dist/th/references/name-service.html b/docs/.vuepress/dist/th/references/name-service.html index e07fa7342..7774aad11 100644 --- a/docs/.vuepress/dist/th/references/name-service.html +++ b/docs/.vuepress/dist/th/references/name-service.html @@ -23,11 +23,11 @@ } Name Service | คู่มือ Solana - + -

    Name Service

    Name registry

    name registry จะมีไว้เก็บข้อมูลเกี่ยวกับ domain name ซึ่งจะแบ่งเป็น 2 ส่วนคือ:

    • The header
    • The data

    ข้อมูลของ domain name จะขึ้นต้นด้วย header ส่วนด้านล่างนี้คือ structure ของ header ใน JS:

    Press </> button to view full source
    import { PublicKey } from "@solana/web3.js";
    +    

    Name Service

    Name registry

    name registry จะมีไว้เก็บข้อมูลเกี่ยวกับ domain name ซึ่งจะแบ่งเป็น 2 ส่วนคือ:

    • The header
    • The data

    ข้อมูลของ domain name จะขึ้นต้นด้วย header ส่วนด้านล่างนี้คือ structure ของ header ใน JS:

    Press </> button to view full source
    import { PublicKey } from "@solana/web3.js";
     import { Schema } from "borsh";
     
     export class NameRegistryState {
    @@ -181,7 +181,7 @@
     const subDomain = "demo";
     
     // Step 1
    -const hashedParentDomain = await getHashedName(mainDomain);
    +const hashedParentDomain = await getHashedName(parentDomain);
     const parentDomainKey = await getNameAccountKey(
       hashedParentDomain,
       undefined,
    @@ -260,6 +260,6 @@
     
     const registry = await getTwitterRegistry(connection, handle);
     
    Last Updated:
    - + diff --git a/docs/.vuepress/dist/th/references/nfts.html b/docs/.vuepress/dist/th/references/nfts.html index 5b292540e..18895b879 100644 --- a/docs/.vuepress/dist/th/references/nfts.html +++ b/docs/.vuepress/dist/th/references/nfts.html @@ -23,11 +23,11 @@ } NFTs | คู่มือ Solana - + -

    Non Fungible Tokens (NFTs)

    วิธีสร้าง an NFT

    ในการสร้าง NFT เราจะต้อง:

    1. Upload รูป (image) ​ไปที่ IPFS เช่น Arweave
    2. Upload json metadata ไปที่ IPFS เช่น Arweave
    3. เรียกใช้ metaplex เพื่อสร้าง account สำหรับ NFT

    Upload to Arweave

    Press </> button to view full source
    import fs from "fs";
    +    

    Non Fungible Tokens (NFTs)

    วิธีสร้าง an NFT

    ในการสร้าง NFT เราจะต้อง:

    1. Upload รูป (image) ​ไปที่ IPFS เช่น Arweave
    2. Upload json metadata ไปที่ IPFS เช่น Arweave
    3. เรียกใช้ metaplex เพื่อสร้าง account สำหรับ NFT

    Upload to Arweave

    Press </> button to view full source
    import fs from "fs";
     import Arweave from "arweave";
     
     (async () => {
    @@ -271,11 +271,13 @@
       const metaplex = new Metaplex(connection);
       metaplex.use(keypairIdentity(keypair));
     
    -  const mint = new PublicKey("Ay1U9DWphDgc7hq58Yj1yHabt91zTzvV2YJbAWkPNbaK");
    +  const mintAddress = new PublicKey(
    +    "Ay1U9DWphDgc7hq58Yj1yHabt91zTzvV2YJbAWkPNbaK"
    +  );
     
    -  const nft = await metaplex.nfts().findByMint(mint);
    +  const nft = await metaplex.nfts().findByMint({ mintAddress });
     
    -  console.log(nft.metadata);
    +  console.log(nft.json);
       /*
       {
         name: 'SMB #139',
    @@ -302,18 +304,20 @@
       }
       */
     })();
    -

    วิธีดึงข้อมูลเจ้าของ (owner) ของ NFT

    ถ้าเรามี mint key ของ NFT เราจะสามารถหา owner ปัจจุบันได้ด้วยการดู largest token account สำหรับ mint key นั้นๆ

    เพราะ NFTs มี supply อยู่เพียง 1 ชิ้น และมันถูกแบ่งแยกไม่ได้ หมายความว่ามีเพียงหนึ่ง token account ที่จะถือ token ในเวลานั้น โดย token accounts อื่นสำหรับ mint key นั้นจะมี balance เป็น 0

    ก็แปลว่าเมื่อเราหาlargest token account ได้เราก็จะสามารถรู้ว่า owner เป็นใคร

    Press </> button to view full source
    import { Connection, PublicKey } from "@solana/web3.js";
    +console.log(nft.json);
    +

    วิธีดึงข้อมูลเจ้าของ (owner) ของ NFT

    ถ้าเรามี mint key ของ NFT เราจะสามารถหา owner ปัจจุบันได้ด้วยการดู largest token account สำหรับ mint key นั้นๆ

    เพราะ NFTs มี supply อยู่เพียง 1 ชิ้น และมันถูกแบ่งแยกไม่ได้ หมายความว่ามีเพียงหนึ่ง token account ที่จะถือ token ในเวลานั้น โดย token accounts อื่นสำหรับ mint key นั้นจะมี balance เป็น 0

    ก็แปลว่าเมื่อเราหาlargest token account ได้เราก็จะสามารถรู้ว่า owner เป็นใคร

    Press </> button to view full source
    import { Connection, PublicKey } from "@solana/web3.js";
     
     (async () => {
       const connection = new Connection("https://api.mainnet-beta.solana.com");
    @@ -540,7 +544,7 @@
       metaplex.use(keypairIdentity(keypair));
     
       const owner = new PublicKey("2R4bHmSBHkHAskerTHE6GE1Fxbn31kaD5gHqpsPySVd7");
    -  const allNFTs = await metaplex.nfts().findAllByOwner(owner);
    +  const allNFTs = await metaplex.nfts().findAllByOwner({ owner });
     
       console.log(allNFTs);
     })();
    @@ -551,10 +555,10 @@
     metaplex.use(keypairIdentity(keypair));
     
     const owner = new PublicKey("2R4bHmSBHkHAskerTHE6GE1Fxbn31kaD5gHqpsPySVd7");
    -const allNFTs = await metaplex.nfts().findAllByOwner(owner);
    +const allNFTs = await metaplex.nfts().findAllByOwner({ owner });
     
     console.log(allNFTs);
     
    Last Updated:
    - + diff --git a/docs/.vuepress/dist/th/references/offline-transactions.html b/docs/.vuepress/dist/th/references/offline-transactions.html index 90879752f..4853a387a 100644 --- a/docs/.vuepress/dist/th/references/offline-transactions.html +++ b/docs/.vuepress/dist/th/references/offline-transactions.html @@ -23,11 +23,11 @@ } Sending Offline Transactions | คู่มือ Solana - + -

    Offline Transaction

    Sign Transaction

    การสร้าง offline transaction เราสามารถ sign transaction และให้คนอื่น broadcast ไปที่ network ได้

    Press </> button to view full source
    import {
    +    

    Offline Transaction

    Sign Transaction

    การสร้าง offline transaction เราสามารถ sign transaction และให้คนอื่น broadcast ไปที่ network ได้

    Press </> button to view full source
    import {
       clusterApiUrl,
       Connection,
       Keypair,
    @@ -457,6 +457,6 @@
     
     console.log(`txhash: ${await connection.sendRawTransaction(tx.serialize())}`);
     
    Last Updated:
    - + diff --git a/docs/.vuepress/dist/th/references/programs.html b/docs/.vuepress/dist/th/references/programs.html index 90729a872..5dfa32995 100644 --- a/docs/.vuepress/dist/th/references/programs.html +++ b/docs/.vuepress/dist/th/references/programs.html @@ -23,11 +23,11 @@ } เขียน Programs | คู่มือ Solana - + -

    Writing Programs

    วิธี transfer SOL in a program

    Solana Program ของเราสามารถส่ง lamports จาก account นึงไปอีก account นึงโดยไม่ต้อง 'ร้องขอ' (invoking) ไปที่ System program. โดยหลักเบื้องต้นก็คือ program ของเราสามารถส่ง lamports จาก account ที่ program ของเรา เป็นเจ้าของ ไปที่ account ไหนก็ได้

    account ของคนรับ ไม่จำเป็นต้อง เป็น account ที่ program ของเราเป็นเจ้าของ

    /// Transfers lamports from one account (must be program owned)
    +    

    Writing Programs

    วิธี transfer SOL in a program

    Solana Program ของเราสามารถส่ง lamports จาก account นึงไปอีก account นึงโดยไม่ต้อง 'ร้องขอ' (invoking) ไปที่ System program. โดยหลักเบื้องต้นก็คือ program ของเราสามารถส่ง lamports จาก account ที่ program ของเรา เป็นเจ้าของ ไปที่ account ไหนก็ได้

    account ของคนรับ ไม่จำเป็นต้อง เป็น account ที่ program ของเราเป็นเจ้าของ

    /// Transfers lamports from one account (must be program owned)
     /// to another account. The recipient can by any account
     fn transfer_service_fee_lamports(
         from_account: &AccountInfo,
    @@ -1496,6 +1496,6 @@
     
     }
     
    Last Updated:
    - + diff --git a/docs/.vuepress/dist/th/references/staking.html b/docs/.vuepress/dist/th/references/staking.html index e271e2a1f..842056a3f 100644 --- a/docs/.vuepress/dist/th/references/staking.html +++ b/docs/.vuepress/dist/th/references/staking.html @@ -23,11 +23,11 @@ } Staking | คู่มือ Solana - + -

    Staking

    หาข้อมูล Validators ในปัจจุบัน

    เราสามารถ stake SOL และรับ rewards สำหรับการช่วยให้ network มีความปลอดภัยมากขึ้น ในการ stake เราจะ delegate SOL ไปที่ validators ที่มีหน้าที่ประมวลผล transactions

    import { clusterApiUrl, Connection } from "@solana/web3.js";
    +    

    Staking

    หาข้อมูล Validators ในปัจจุบัน

    เราสามารถ stake SOL และรับ rewards สำหรับการช่วยให้ network มีความปลอดภัยมากขึ้น ในการ stake เราจะ delegate SOL ไปที่ validators ที่มีหน้าที่ประมวลผล transactions

    import { clusterApiUrl, Connection } from "@solana/web3.js";
     
     (async () => {
       const connection = new Connection(clusterApiUrl("devnet"), "confirmed");
    @@ -641,6 +641,6 @@
     stakeBalance = await connection.getBalance(stakeAccount.publicKey);
     console.log(`Stake account balance: ${stakeBalance / LAMPORTS_PER_SOL} SOL`);
     
    Last Updated:
    - + diff --git a/docs/.vuepress/dist/th/references/token.html b/docs/.vuepress/dist/th/references/token.html index 77e003760..a79c5cb3d 100644 --- a/docs/.vuepress/dist/th/references/token.html +++ b/docs/.vuepress/dist/th/references/token.html @@ -23,11 +23,11 @@ } การใช้งาน Tokens | คู่มือ Solana - + -

    Token

    เราต้องรู้อะไรบ้างก่อนจะไปใช้งาน SPL-Tokens?

    ทุกครั้งที่เราจะทำงานกับ tokens บน Solana จริงๆ แล้วเราจะทำงานกับ Solana Program Library Token หรือมาตรฐาน SPL-Token standard ซึ่งจะต้องการ library เฉพาะ ที่เราสามารถหาได้ข้างล่างนี้ตามภาษาที่เราสนใจ

    "@solana/spl-token": "^0.2.0"
    +    

    Token

    เราต้องรู้อะไรบ้างก่อนจะไปใช้งาน SPL-Tokens?

    ทุกครั้งที่เราจะทำงานกับ tokens บน Solana จริงๆ แล้วเราจะทำงานกับ Solana Program Library Token หรือมาตรฐาน SPL-Token standard ซึ่งจะต้องการ library เฉพาะ ที่เราสามารถหาได้ข้างล่างนี้ตามภาษาที่เราสนใจ

    "@solana/spl-token": "^0.2.0"
     

    วิธีสร้าง Token ใหม่

    การสร้าง token ทำได้ด้วยการสร้าง "mint account" ซึ่ง mint account นี้จะถูกนำไปใช้ในการ mint token ไปที่ token account ของเราในภายหลัง

    Press </> button to view full source
    import {
       clusterApiUrl,
       Connection,
    @@ -1273,6 +1273,6 @@
       mint: mint,
     });
     
    Last Updated:
    - + diff --git a/docs/.vuepress/dist/tr/core-concepts/accounts.html b/docs/.vuepress/dist/tr/core-concepts/accounts.html index 0eab83232..24108dd49 100644 --- a/docs/.vuepress/dist/tr/core-concepts/accounts.html +++ b/docs/.vuepress/dist/tr/core-concepts/accounts.html @@ -23,11 +23,11 @@ } Accounts (Account’lar) | Solana Cookbook - +

    Accounts (Account’lar)

    Solana içindeki account’lar (hesaplar), durumu saklamak için kullanılır. Account, Solana'da gelişme yapmak için önemli bir yapı taşıdır.

    Facts (Özet Bilgiler)

    Bilgi tablosu

    • Account’lar veri depolamak için kullanılır.
    • Her account'ın benzersiz bir adresi vardır.
    • Account’ların maksimum boyutu 10 MB (10 Mega Bayt)’dır.
    • PDA account'larının maksimum boyutu 10 KB (10 Kilo Bayt)’dır.
    • PDA account'ları, bir program adına imzalamak için kullanılabilir.
    • Account boyutu oluşturma sırasında sabitlenir, ancak realloc kullanılarak ayarlanabilir.
    • Account veri depolaması rent ile ödenir.
    • Varsayılan account sahibi Sistem Programıdır.

    Deep Dive (Derinlemesine Bakış)

    Account Model (Account Modeli)

    Solana'da 3 çeşit account vardır:

    • Veri account'ları, verileri depolar.
    • Program account'ları, executable programları depolar.
    • System, Stake ve Vote gibi yerel programları gösteren yerel account'lar bulunur.

    Veri account'larının 2 türü bulunur:

    • Sisteme ait account'lar
    • PDA (Program Derived Address/Programdan Türetilmiş Adres) account'ları

    Her account'ın bir adresi (genellikle bir public key) ve bir sahibi (bir program account'ının adresi) vardır. Bir account'ın depoladığı tam alan listesi aşağıda bulunur.

    AlanAçıklaması
    lamportsHesaba ait "lamport" sayısı
    ownerAccount sahibi
    executableHesabın talimatları işleyip işleyemeyeceği bilgisi
    dataAccount tarafından depolanan ham veri byte array
    rent_epochBu account'ın rent borcu olacağı bir sonraki epoch

    Birkaç önemli sahiplik kuralı vardır:

    • Yalnızca bir data account'ının sahibi, lamports verilerini ve borç bilgisini değiştirebilir.
    • Herhangi birinin bir data account'ına Lamports kredisi vermesine izin verilir.
    • Hesabın verileri sıfırlanırsa, bir account'ın sahibi yeni bir sahip atayabilir.
    • Program account'ları durumu saklamaz.

    Örneğin, bir sayacı artırmanıza izin veren bir sayaç programınız varsa, biri program kodunu depolamak için diğeri de sayacı depolamak için iki account oluşturmanız gerekir.

    Bir account'ın silinmesini önlemek için rent ödemeniz gerekir.

    Rent

    Hesaplarda veri depolamanın bakımı SOL gerektirir ve rent(kira) ile finanse edilir. Bir account'ta en az 2 yıllık rent ödemesine eşdeğer bir bakiyeniz varsa, account'ınız rent ödemekten muaf tutulacaktır. Hesabı kapatarak ve Lamport'ları cüzdanınıza geri göndererek rent’i geri alabilirsiniz.

    Rent iki farklı zamanlamada ödenir:

    1. Bir işlem tarafından referans alındığında
    2. Her bir epoch(döngü)’da

    Hesaplar tarafından toplanan rent’in belirli bir bölümü yok edilirken geri kalanı her slotun sonunda vote account'larına dağıtılır.

    Hesabın rent ödemesi için yeterli olmaması durumunda, account serbest bırakılır ve veriler silinir.

    Yeni account'ların rent ödemesinden muaf olması gerektiğini de belirtmek önemlidir.

    Other Resources (Diğer Kaynaklar)

    Referans

    Bu bilgiler Pencilflip tarafından yazıldı, kendisini Twitteropen in new window’dan takip edebilirsiniz.

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/tr/core-concepts/pdas.html b/docs/.vuepress/dist/tr/core-concepts/pdas.html index de0a5495d..ea608f6af 100644 --- a/docs/.vuepress/dist/tr/core-concepts/pdas.html +++ b/docs/.vuepress/dist/tr/core-concepts/pdas.html @@ -23,11 +23,11 @@ } Program Derived Addresses (PDAs) (Programdan Türetilmiş Adresler) | Solana Cookbook - +

    Program Derived Addresses (PDAs) (Programdan Türetilmiş Adresler)

    Program Derived Addresses (Programdan Türetilmiş Adresler, PDA’lar), belirli bir program tarafından kontrol edilmek üzere tasarlanmış account'lara ev sahipliği yapar. PDA'lar ile programlar, private key’e ihtiyaç duymadan belirli adresleri programlı olarak imzalayabilir. PDA'lar, Solana uygulamalarının birbirleriyle birleştirilebilir olmasını sağlayan Cross-Program Invocationopen in new window’ın(programlar arası çağırma) temeli olarak hizmet eder.

    Facts (Özet Bilgiler)

    Bilgi Tablosu

    • PDA'lar, public key’lere benzeyen ancak karşılık gelen private key’e sahip olmayan 32 byte’lık array’lerdir.
    • findProgramAddress, bir programId ve seed’lerden (bayt koleksiyonu) deterministik olarak bir PDA türetecektir.
    • Potansiyel bir PDA'yı ed25519 eliptik eğriden çıkarmak için bir bump (bir bayt) kullanılır.
    • Programlar, seed’ler invoke_signedopen in new window ile kendi PDA'ları için imzalama yapabilir.
    • Bir PDA yalnızca türetildiği program tarafından imzalanabilir.
    • Programların farklı talimatları imzalamasına izin vermenin yanı sıra, PDA'lar ayrıca Account'ları indekslemek için hashmap benzeri bir arayüz sağlar.

    Deep Dive (Derinlemesine Bakış)

    PDA'lar, Solana'da programlar geliştirmek için temel bir yapı taşıdır. PDA'lar sayesinde programlar, hiçbir harici kullanıcının aynı Account için geçerli bir imza oluşturamayacağını garanti ederken Account’ları imzalayabilir. Hesapları imzalamaya ek olarak, belirli programlar kendi PDA'larında tutulan account'ları da değiştirebilir.

    Accounts matrix

    Image courtesy of Pencilflip

    Generating PDAs (PDA’lar Oluşturma)

    PDA'ların arkasındaki kavramı anlamak için, PDA'ların teknik olarak yaratılmadığını, daha çok bulunduğunu düşünmek faydalı olabilir. PDA'lar, seed ("vote_account" string’i gibi) ve bir program kimliği kombinasyonundan oluşturulur. Bu seed ve program kimliği kombinasyonu daha sonra, ed25519 eliptik eğri üzerinde yer alan bir public key oluşturup oluşturmadıklarını görmek için bir sha256 hash fonksiyonu aracılığıyla çalıştırılır.

    Program kimliğimizi ve seed’leri bir hash fonksiyonu aracılığıyla çalıştırırken, eliptik eğri üzerinde yer alan geçerli bir public key ile karşılaşma şansımız ~%50'dir. Bu durumda, girdimizi biraz geçiştirmek için bir şeyler ekleriz ve tekrar deneriz. Bu fudge faktör için teknik terim bump’tır. Solana'da, bump = 255 ile başlıyoruz ve eliptik eğride olmayan bir adres elde edene kadar, bump = 254, bump = 253, vb. ile aşağı doğru yineliyoruz. Bu ilkel görünebilir, ancak bir kez bulunduğunda bize aynı PDA'yı tekrar tekrar türetmenin deterministik bir yolunu sunar.

    PDA Curve

    Interacting with PDAs (PDA’lar ile Etkileşim)

    Bir PDA oluşturulduğunda, findProgramAddress hem adresi hem de adresi eliptik eğriden çıkarmak için kullanılan bump’ı döndürür. Bu bump ile donanmış bir program, daha sonra PDA'sını gerektiren herhangi bir talimat için imzalayabilir. İmzalamak için, programların talimatı, account listesini ve PDA'yı invoke_signed olarak türetmek için kullanılan seed ve bump’ı geçmesi gerekir. Talimatları imzalamaya ek olarak, PDA'lar invoke_signed aracılığıyla kendi yaratımları için de imzalamalıdır.

    PDA'larla oluştururken, bump seed account verilerinin kendisinde saklamak yaygındır. Bu, geliştiricilerin, bir talimat argümanı olarak bump’tan geçmek zorunda kalmadan bir PDA'yı kolayca doğrulamasını sağlar.

    Other Resources (Diğer Kaynaklar)

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/tr/core-concepts/programs.html b/docs/.vuepress/dist/tr/core-concepts/programs.html index 21463f438..24e3556ec 100644 --- a/docs/.vuepress/dist/tr/core-concepts/programs.html +++ b/docs/.vuepress/dist/tr/core-concepts/programs.html @@ -23,12 +23,12 @@ } Programs (Programlar) | Solana Cookbook - +

    Programs (Programlar)

    Facts (Özet Bilgiler)

    Bilgi Tablosu

    • Programlar, hem son kullanıcılardan hem de diğer programlardan gelen talimatları işler.
    • Tüm programlar stateless’dır(durumsuzdur): etkileşime girdikleri tüm veriler, talimatlar yoluyla iletilen ayrı account'larda saklanır.
    • Programlar executable (yürütülebilir) olarak işaretlenmiş account'larda saklanır.
    • Tüm programlar BPF Loaderopen in new window'a aittir ve Solana Runtimeopen in new window tarafından yürütülür.
    • Geliştiriciler en yaygın olarak Rust veya C++'da programlar yazarlar, ancak LLVMopen in new window'nin BPFopen in new window arka ucunu hedefleyen herhangi bir dili seçebilirler.
    • Tüm programların, talimat işlemenin gerçekleştiği tek bir giriş noktası vardır. (process_instruction); parametreler her zaman şunları içerir:
      • program_id: pubkey
      • accounts: array,
      • instruction_data: byte array

    Deep Dive (Derinlemesine Bakış)

    Diğer birçok blockchainden farklı olarak Solana, kodu verilerden tamamen ayırır. Programların etkileşimde bulunduğu tüm veriler ayrı account'larda saklanır ve talimatlar aracılığıyla referans olarak iletilir. Bu model, tek bir genel programın ek dağıtımlar gerektirmeden çeşitli account'larda çalışmasına izin verir. Bu kalıbın yaygın örnekleri, Native(yerel) ve SPL Programlarında görülür.

    Native Program’lar & Solana Program Library (SPL)

    Solana, on-chain etkileşimler için temel yapı taşları olarak hizmet eden bir dizi programla donatılmış olarak gelir. Bu programlar Native Programlar ve Solana Program Library (SPL) Programları olarak ikiye ayrılır.

    Native Program’lar, validator’leri çalıştırmak için gereken temel işlevleri sağlar. Bu programlar arasında en çok bilineni, yeni account’ların yönetilmesinden ve iki taraf arasında SOL transferinden sorumlu olan Sistem Programıdır.

    SPL Programları, token oluşturma, takas etme ve ödünç vermenin yanı sıra stake pool (hisse havuzu) oluşturma ve on-chain name service dahil olmak üzere bir dizi on-chain etkinliği destekler. SPL Token Programı doğrudan CLI aracılığıyla çağrılabilirken, Associated Token Account Programopen in new window gibi diğerleri genellikle özel programlardan oluşur.

    Writing Programs (Program Yazma)

    Programlar en yaygın olarak Rust veya C++ ile geliştirilir, ancak LLVM'nin BPF arka ucunu hedefleyen herhangi bir dille geliştirilebilir. Neon Labsopen in new window ve Solangopen in new window'ın son girişimleri, EVMopen in new window uyumluluğunu mümkün kılar ve geliştiricilerin Solidity'de programlar yazmasına olanak tanır.

    Rust tabanlı programların çoğu aşağıdaki mimariye uyar:

    DosyaAçıklama
    lib.rsModüllerin kaydedilmesi
    entrypoint.rsPrograma başlangıç
    instruction.rsProgram API'si, komut verilerini (de)serialize etme
    processor.rsProgram mantığının bulunduğu bölüm
    state.rsProgram nesneleri, durumu (de) serialize etme
    error.rsPrograma özgü hatalar

    Son zamanlarda, Anchoropen in new window program geliştirmek için popüler bir framework olarak ortaya çıkmıştır. Anchor, Ruby on Rails'e benzeyen, Rust tabanlı geliştirme için (de)serialization sürecini kolaylaştıran, üzerinde düşünülmüş bir frameworktür.

    Programlar genellikle Testnet veya Mainnet'e dağıtılmadan önce Localhost ve Devnet geliştirilir ve test edilir. Solana aşağıdaki ortamları destekler:

    Cluster EnvironmenRPC Connection URL
    Mainnet-betahttps://api.mainnet-beta.solana.com
    Testnethttps://api.testnet.solana.com
    Devnethttps://api.devnet.solana.com
    LocalhostDefault port: 8899 (e.g. http://localhost:8899, http://192.168.1.88:8899)

    Bir ortamda deploy edildikten sonra Client’lar ilgili cluster'la olan RPC bağlantılarıopen in new window aracılığıyla on-chain programlarla etkileşime girebilir.

    Deploying Programs (Programları Çalıştırma)

    Geliştiriciler programlarını CLIopen in new window aracılığıyla çalıştırabilir:

    solana program deploy <PROGRAM_FILEPATH>
     

    Bir program çalıştığında, bir ELFopen in new window shared object’e (BPF bayt kodu içeren) derlenir ve Solana cluster’a yüklenir. Programlar account’larda yaşar (Solana'daki diğer her şey gibi), ancak bu account'lar executable olarak işaretlenir ve BPF Loader’a atanır. Bu account’ın adresi program_id olarak adlandırılır ve gelecekteki tüm işlemlerde programa başvurmak için kullanılır.

    Solana, Upgradable BPF Loader da dahil olmak üzere birden fazla BPF Loader’ı destekler. BPF Loader, programın account’ını yönetmekten ve program_id aracılığıyla client’lara (client’lara) sunmaktan sorumludur. Tüm programlarda instruction işlemenin gerçekleştiği tek bir giriş noktası vardır (proses_instruction) ve parametreler her zaman şunları içerir:

    • program_id: pubkey
    • accounts: array,
    • instruction_data: byte array

    Çağrıldıklarında programlar Solana Runtime tarafından yürütülür.

    Other Resources (Diğer Kaynaklar)

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/tr/core-concepts/transactions.html b/docs/.vuepress/dist/tr/core-concepts/transactions.html index c8abcafd9..510381aad 100644 --- a/docs/.vuepress/dist/tr/core-concepts/transactions.html +++ b/docs/.vuepress/dist/tr/core-concepts/transactions.html @@ -23,11 +23,11 @@ } Transactions (İşlemler) | Solana Cookbook - +

    Transactions (İşlemler)

    Client’lar, bir cluster’a bir transaction (işlem) göndererek programları çağırabilir. Tek bir işlem, her biri kendi programını hedefleyen birden fazla talimat içerebilir. Bir işlem gönderildiğinde, Solana Runtimeopen in new window talimatlarını sırayla ve atomik olarak işleyecektir. Bir talimatın herhangi bir kısmı başarısız olursa, tüm işlem başarısız olur.

    Facts (Özet Bilgiler)

    Bilgi Tablosu

    • Instruction’lar(talimatlar) Solana'daki en temel operasyonel birimdir.
    • Her instruction şunları içerir:
      • Amaçlanan programın program_id'si
      • Okumak veya yazmak istediği tüm account’ların array’i
      • Amaçlanan programa özel bir instruction_data byte array’i
    • Birden fazla talimat tek bir transaction’da(işlemde) toplanabilir.
    • Her işlem şunları içerir:
      • Okumak veya yazmak istediği tüm account’ların array’i
      • Bir veya daha fazla instruction
      • Yakın zamanda bir blockhash
      • Bir veya daha fazla signature(imza)
    • Instruction’lar sırayla ve atomik olarak işlenir.
    • Bir instruction’ın herhangi bir kısmı başarısız olursa, transaction’ın tamamı başarısız olur.
    • Transaction’lar 1232 bayt ile sınırlıdır.

    Deep Dive (Derinlemesine Bakış)

    Solana Runtime, okumak veya yazmak istedikleri tüm account’ların bir listesini belirtmek için hem instructions hem de transactions gerektirir. Bu account’ları önceden talep ederek, çalışma zamanı tüm transaction’larda yürütmeyi paralel hale getirebilir.

    Bir transaction bir kümeye gönderildiğinde, çalışma zamanı instruction’larını sırayla ve atomik olarak işleyecektir. Her talimat için, alıcı program kendi veri dizisini yorumlayacak ve belirtilen account’ları üzerinde çalışacaktır. Program ya başarılı bir şekilde ya da bir hata koduyla dönecektir. Bir hata döndürülürse, tüm işlem hemen başarısız olur.

    Bir account’ı borçlandırmayı veya verilerini değiştirmeyi amaçlayan herhangi bir transaction, account sahibinin imzasını gerektirir. Değiştirilecek herhangi bir account writable(yazılabilir) olarak işaretlenir. Transaction ücretini ödeyen kişi, gerekli rent ve transaction ücretlerini karşıladığı sürece, sahibinin izni olmadan bir account’a kredi verilebilir.

    Gönderilmeden önce, tüm transaction’lar son bir blockhash’e referans vermelidir. Blockhash, tekrarları önlemek ve eski transaction’ları ortadan kaldırmak için kullanılır. Bir işlemin blockhash’inin maksimum yaşı 150 blok veya bu yazının yazıldığı zaman itibariyle yaklaşık ~1 dakika 19 saniyedir.

    Fees (Ücretler)

    Solana ağı iki tür ücret toplar:

    Solana'da işlem ücretleri belirlidir: Kullanıcıların bir sonraki bloğa dahil olma şanslarını artırmak için daha yüksek ücretler ödeyebilecekleri bir ücret piyasası kavramı yoktur. Bu yazının yazıldığı tarihte, işlem ücretleri kullanılan kaynak miktarına göre değil, yalnızca gereken imza sayısına (lamports_per_signature) göre belirlenir. Bunun nedeni, şu anda tüm işlemlerde 1232 baytlık bir sabit sınır bulunmasıdır.

    Tüm işlemler, işlemi imzalamak için en az bir writable account(yazılabilir hesap) gerektirir. Gönderildikten sonra, ilk olarak seri hale getirilen writable signer account ücreti ödeyen kişi olacaktır. Bu account, işlemin başarılı veya başarısız olmasına bakılmaksızın işlem maliyetini ödeyecektir. Ücret ödeyen kişinin işlem ücretini ödemek için yeterli bakiyesi yoksa işlem düşer.

    Bu yazının yazıldığı sırada, tüm işlem ücretlerinin %50'si bloğu üreten validator(doğrulayıcı) tarafından alınırken, kalan %50'si yakılır(burn). Bu yapı, validator’leri leader programı sırasında mümkün olduğunca çok işlemi işlemeye teşvik etmek için çalışır.

    Other Resources (Diğer Kaynaklar)

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/tr/getting-started/installation.html b/docs/.vuepress/dist/tr/getting-started/installation.html index e6d57a11c..14c509ed7 100644 --- a/docs/.vuepress/dist/tr/getting-started/installation.html +++ b/docs/.vuepress/dist/tr/getting-started/installation.html @@ -23,7 +23,7 @@ } Installation | Solana Cookbook - + @@ -71,6 +71,6 @@ export PATH=$PWD/bin:$PATH

    Daha sonra, önceden oluşturulmuş binary dosyalarla aynı sonucu elde etmek için aşağıdaki komutu çalıştırabilirsiniz:

    solana-install init
     
    Last Updated:
    - + diff --git a/docs/.vuepress/dist/tr/guides/account-maps.html b/docs/.vuepress/dist/tr/guides/account-maps.html index d059791a4..bef8f6a4c 100644 --- a/docs/.vuepress/dist/tr/guides/account-maps.html +++ b/docs/.vuepress/dist/tr/guides/account-maps.html @@ -23,7 +23,7 @@ } Account Maps (Hesap Haritaları) | Solana Cookbook - + @@ -260,6 +260,6 @@ tx.add(insertCAIx);
    Last Updated:
    - + diff --git a/docs/.vuepress/dist/tr/guides/data-migration.html b/docs/.vuepress/dist/tr/guides/data-migration.html index f6652f281..dbc12fcfe 100644 --- a/docs/.vuepress/dist/tr/guides/data-migration.html +++ b/docs/.vuepress/dist/tr/guides/data-migration.html @@ -23,7 +23,7 @@ } Migrating a Programs Data Accounts (Programların Data Account’larını Taşıma) | Solana Cookbook - + @@ -93,6 +93,6 @@ } }

    Bir talimat oluşturup gönderdikten sonra: VersionProgramInstruction::SetString(String) artık aşağıdaki 'yükseltilmiş' account veri düzenine sahibiz.

    Program Account v2

    Resources

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/tr/guides/debugging-solana-programs.html b/docs/.vuepress/dist/tr/guides/debugging-solana-programs.html index 2fadad82e..78cd78fac 100644 --- a/docs/.vuepress/dist/tr/guides/debugging-solana-programs.html +++ b/docs/.vuepress/dist/tr/guides/debugging-solana-programs.html @@ -23,7 +23,7 @@ } Debugging Solana Programs (Solana Programlarında Hata Ayıklama) | Solana Cookbook - + @@ -48,6 +48,6 @@ test test_validator_transaction ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 6.40s

    Burada hata ayıklama, test gövdesinde kullanılan işlevler ve yöntemlerde hata ayıklamanıza izin verir ancak programınızda kesme noktası oluşturmaz.

    Mükemmel değil mi?

    Local Validator Node Testing from Client Apps (Client Uygulamalarında Yerel Validator Node Testi)

    Son olarak, yerel bir validator node’u başlatabilir ve komut satırından solana-test-validator kullanarak programınızı ve tüm account'larınızı yükleyebilirsiniz.

    Bu yaklaşımda, ya Rust RcpClient kullanan ya da JavaScript veya TypeScript client'larında bir client uygulamasına ihtiyacınız olacak.

    Daha fazla ayrıntı ve seçenek için solana-test-validator --help bölümüne JavaScript veya Typescript clients’larına bakın. Örnek program için kurulum burada:

    1. Repo klasöründe bir terminal açın
    2. Yapılandırmayı yerele işaret edecek şekilde ayarlamak için solana config set -ul komutunu çalıştırın
    3. solana-test-validator --bpf-program target/deploy/bpf_program_template-keypair.json target/deploy/bpf_program_template.so'yu çalıştırın
    4. Başka bir terminal açın ve günlük aktarıcıyı başlatmak için solana logs’u çalıştırın
    5. Daha sonra client programınızı çalıştırabilir ve günlük aktarıcıyı başlattığınız terminalde program çıktısını gözlemleyebilirsiniz.

    Resources

    solana-program-bpf-templateopen in new window

    RcpClientopen in new window

    JavaScript/Typescript Libraryopen in new window

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/tr/guides/feature-parity-testing.html b/docs/.vuepress/dist/tr/guides/feature-parity-testing.html index cc1415ebe..e130a1174 100644 --- a/docs/.vuepress/dist/tr/guides/feature-parity-testing.html +++ b/docs/.vuepress/dist/tr/guides/feature-parity-testing.html @@ -23,7 +23,7 @@ } Feature Parity Testing (Özellik Parite Testi) | Solana Cookbook - + @@ -182,6 +182,6 @@ assert!(txn.is_ok()); }

    Mutlu Testler!

    Resources

    scfsdopen in new window

    gadget-scfsopen in new window

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/tr/guides/get-program-accounts.html b/docs/.vuepress/dist/tr/guides/get-program-accounts.html index bb15220d9..c4394ec0e 100644 --- a/docs/.vuepress/dist/tr/guides/get-program-accounts.html +++ b/docs/.vuepress/dist/tr/guides/get-program-accounts.html @@ -23,7 +23,7 @@ } Get Program Accounts | Solana Cookbook - + @@ -152,6 +152,6 @@ */ })();

    Üç parametrenin tümünü (dataSlice, dataSize, ve memcmp) birleştirerek sorgumuzun kapsamını sınırlayabilir ve yalnızca ilgilendiğimiz verileri verimli bir şekilde döndürebiliriz.

    Other Resources

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/tr/guides/retrying-transactions.html b/docs/.vuepress/dist/tr/guides/retrying-transactions.html index 15e36846b..7a8c9b8b7 100644 --- a/docs/.vuepress/dist/tr/guides/retrying-transactions.html +++ b/docs/.vuepress/dist/tr/guides/retrying-transactions.html @@ -23,7 +23,7 @@ } Retrying Transactions (İşlemleri Yeniden Denemek) | Solana Cookbook - + @@ -36,6 +36,6 @@ }

    getLatestBlockhash aracılığıyla seçim yaparken, uygulamalar amaçlanan commitmentopen in new window seviyelerini belirtmelidir. Bir uygulama, confirmed(oylandı) veya finalized (onaylandıktan sonra ~30 blok) taahhüdünü belirleyerek, bir minority fork’tan bir blockhash yoklamaktan kaçınabilir.

    Bir uygulamanın bir yük dengeleyicinin arkasındaki RPC node’lara erişimi varsa, iş yükünü belirli node’lar arasında bölmeyi de seçebilir. getProgramAccounts gibi veri yoğun isteklere hizmet eden RPC node’lar, geride kalmaya eğilimli olabilir ve ayrıca işlemleri yönlendirmek için uygun olmayabilir. Zamana duyarlı işlemleri işleyen uygulamalar için, yalnızca sendTransaction'ı işleyen özel node’lara sahip olmak akıllıca olabilir.

    The Cost of Skipping Preflight (Ön Kontrolü Atlamanın Maliyeti)

    Varsayılan olarak, sendTransaction bir işlemi göndermeden önce üç ön kontrol gerçekleştirecektir. Özellikle, sendTransaction:

    • Tüm imzaların geçerli olduğunu doğrulayın
    • Başvurulan blockhash’in son 150 blok içinde olup olmadığını kontrol edin
    • preflightCommitment tarafından belirtilen banka yuvasına karşı işlemi simüle edin

    Bu üç ön kontrol kontrolünden herhangi birinin başarısız olması durumunda, sendTransaction işlemi göndermeden önce bir hata verecektir. Ön kontrol kontrolleri, genellikle bir işlemi kaybetmek ile bir müşterinin bir hatayı zarif bir şekilde ele almasına izin vermek arasındaki fark olabilir. Bu yaygın hataların dikkate alındığından emin olmak için geliştiricilerin skipPreflightfalse olarak ayarlaması önerilir.

    When to Re-Sign Transactions (İşlemler Ne Zaman Yeniden İmzalanmalı)

    Tüm yeniden yayınlama girişimlerine rağmen, müşterinin bir işlemi yeniden imzalamasının gerekli olduğu zamanlar olabilir. Herhangi bir işlemi yeniden imzalamadan önce, ilk işlemin blockhash süresinin dolduğundan emin olmak çok önemlidir. İlk blockhash hala geçerliyse, her iki işlemin de ağ tarafından kabul edilmesi mümkündür. Bir son kullanıcıya bu, istemeden aynı işlemi iki kez göndermiş gibi görünebilir.

    Solana'da, referans verdiği blockhash değeri getLatestBlockhash'ten alınan lastValidBlockHeight değerinden daha eski olduğunda, bırakılan bir işlem güvenli bir şekilde atılabilir. Geliştiriciler, getEpochInfoopen in new window'yu sorgulayarak ve yanıtta blockHeight ile karşılaştırarak bu lastValidBlockHeight'ı takip etmelidir. Bir blockhash geçersiz kılındığında, müşteriler yeni sorgulanan bir blockhash ile yeniden imzalayabilirler.

    Acknowledgements (Teşekkürler)

    İncelemeleri ve geri bildirimleri için Trent Nelson, Jacob Creechopen in new window, White Tiger, Le Yafo, Buffaluopen in new window ve Jito Labsopen in new window'a çok teşekkürler.

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/tr/guides/serialization.html b/docs/.vuepress/dist/tr/guides/serialization.html index e7220b7b6..58851c05e 100644 --- a/docs/.vuepress/dist/tr/guides/serialization.html +++ b/docs/.vuepress/dist/tr/guides/serialization.html @@ -23,7 +23,7 @@ } Serializing Data (Serileştirme) | Solana Cookbook - + @@ -653,6 +653,6 @@ // Test without PublicKey entry();

    Resources

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/tr/index.html b/docs/.vuepress/dist/tr/index.html index 7694a8668..7fab2cede 100644 --- a/docs/.vuepress/dist/tr/index.html +++ b/docs/.vuepress/dist/tr/index.html @@ -23,11 +23,11 @@ } Solana Cookbook | Solana Cookbook - +

    Solana Cookbook

    Solana Cookbook, Solana'da uygulamalar oluşturmak için temel kavramları ve referansları sağlayan bir geliştirici kaynağıdır. Her kavram ve referans, ek ayrıntılar ve kullanım örnekleri sağlarken Solana kullanarak geliştirme yapmanın belirli yönlerine odaklanacaktır.

    Contributing (Nasıl Katkı Verebilirsiniz?)

    Solana Cookbook, yeni Solana geliştiricilerinin katkıda bulunmasını kolaylaştıracak şekilde tasarlanmıştır. Bir şeyi nasıl yapacağınızı bilmiyor olsanız bile, Solana Cookbook’a katkıda bulunmak öğrenmenin harika bir yoludur!

    Tüm açık konulara buradanopen in new window göz atabilir, katkı yönergelerine buradanopen in new window ulaşabilirsiniz. Solana Cookbook’da bir önerinin eksik olduğunu fark ederseniz, lütfen yeni bir issue oluşturun.

    How to Read the Cookbook (Cookbook Nasıl Okunur?)

    Solana Cookbook, her biri farklı bir amaca yönelik farklı bölümlere ayrılmıştır.

    BölümAçıklama
    Temel KavramlarSolana’da geliştirme yapmak için bilinmesi tavsiye edilen Solana yapı taşları
    RehberGeliştirme yapmak için çeşitli araçlar hakkında hap bilgileri içeren kılavuzlar
    ReferanslarYaygın olarak ihtiyaç duyulan kod parçaları için referanslar
    Last Updated:
    - + diff --git a/docs/.vuepress/dist/tr/references/accounts.html b/docs/.vuepress/dist/tr/references/accounts.html index 5dcfdc913..cf98b711d 100644 --- a/docs/.vuepress/dist/tr/references/accounts.html +++ b/docs/.vuepress/dist/tr/references/accounts.html @@ -23,7 +23,7 @@ } Accounts (Account’lar) | Solana Cookbook - + @@ -269,6 +269,6 @@

    How to get account balance (Account bakiyesi getirme)

    console.log(`${(await connection.getBalance(wallet)) / LAMPORTS_PER_SOL} SOL`);
     
     

    İPUCU

    Bir token bakiyesi almak istiyorsanız, token account'ının adresini bilmeniz gerekir. Daha fazla bilgi için bkz. Token Referansları

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/tr/references/basic-transactions.html b/docs/.vuepress/dist/tr/references/basic-transactions.html index 1362f8c1c..681128194 100644 --- a/docs/.vuepress/dist/tr/references/basic-transactions.html +++ b/docs/.vuepress/dist/tr/references/basic-transactions.html @@ -23,7 +23,7 @@ } Sending Transactions(İşlem Gönderimi) | Solana Cookbook - + @@ -111,6 +111,6 @@ [ 4] Program ComputeBudget111111111111111111111111111111 invoke [1] [ 5] Program ComputeBudget111111111111111111111111111111 success - + diff --git a/docs/.vuepress/dist/tr/references/keypairs-and-wallets.html b/docs/.vuepress/dist/tr/references/keypairs-and-wallets.html index df03693fc..9157becce 100644 --- a/docs/.vuepress/dist/tr/references/keypairs-and-wallets.html +++ b/docs/.vuepress/dist/tr/references/keypairs-and-wallets.html @@ -23,7 +23,7 @@ } Keypairs and Wallets | Solana Cookbook - + @@ -120,6 +120,6 @@ <WalletMultiButton /> {/if} - + diff --git a/docs/.vuepress/dist/tr/references/local-development.html b/docs/.vuepress/dist/tr/references/local-development.html index fa17990c0..8894e68f1 100644 --- a/docs/.vuepress/dist/tr/references/local-development.html +++ b/docs/.vuepress/dist/tr/references/local-development.html @@ -23,7 +23,7 @@ } Local Development (Yerel Geliştirme) | Solana Cookbook - + @@ -59,6 +59,6 @@

    Yerel ağınıza yükleme, doğrulayıcıyı başlatırken programın dosya ve hedef adresini (yerel kümede) ileterek yapılır:

    solana-test-validator --bpf-program 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin serum_dex_v3.so --reset
     
     
    - + diff --git a/docs/.vuepress/dist/tr/references/name-service.html b/docs/.vuepress/dist/tr/references/name-service.html index 50ea08197..8b35a69ef 100644 --- a/docs/.vuepress/dist/tr/references/name-service.html +++ b/docs/.vuepress/dist/tr/references/name-service.html @@ -23,7 +23,7 @@ } Name Service (Name Servisi) | Solana Cookbook - + @@ -82,7 +82,7 @@ const subDomain = "demo"; // Step 1 -const hashedParentDomain = await getHashedName(mainDomain); +const hashedParentDomain = await getHashedName(parentDomain); const parentDomainKey = await getNameAccountKey( hashedParentDomain, undefined, @@ -120,6 +120,6 @@ const registry = await getTwitterRegistry(connection, handle); - + diff --git a/docs/.vuepress/dist/tr/references/nfts.html b/docs/.vuepress/dist/tr/references/nfts.html index 658cacdee..b64173de9 100644 --- a/docs/.vuepress/dist/tr/references/nfts.html +++ b/docs/.vuepress/dist/tr/references/nfts.html @@ -23,7 +23,7 @@ } Non Fungible Tokens (NFTs) | Solana Cookbook - + @@ -135,6 +135,6 @@ console.log(allNFTs); - + diff --git a/docs/.vuepress/dist/tr/references/offline-transactions.html b/docs/.vuepress/dist/tr/references/offline-transactions.html index 641f94d5f..cf6c3ae85 100644 --- a/docs/.vuepress/dist/tr/references/offline-transactions.html +++ b/docs/.vuepress/dist/tr/references/offline-transactions.html @@ -23,7 +23,7 @@ } Offline Transaction (Çevrimdışı işlem) | Solana Cookbook - + @@ -128,6 +128,6 @@ console.log(`txhash: ${await connection.sendRawTransaction(tx.serialize())}`); - + diff --git a/docs/.vuepress/dist/tr/references/programs.html b/docs/.vuepress/dist/tr/references/programs.html index cc7b33720..14102f1ec 100644 --- a/docs/.vuepress/dist/tr/references/programs.html +++ b/docs/.vuepress/dist/tr/references/programs.html @@ -23,7 +23,7 @@ } Writing Programs (Programları Yazma) | Solana Cookbook - + @@ -430,6 +430,6 @@ } - + diff --git a/docs/.vuepress/dist/tr/references/staking.html b/docs/.vuepress/dist/tr/references/staking.html index 803bc21c4..31895c4c5 100644 --- a/docs/.vuepress/dist/tr/references/staking.html +++ b/docs/.vuepress/dist/tr/references/staking.html @@ -23,7 +23,7 @@ } Staking (Stake Etme) | Solana Cookbook - + @@ -197,6 +197,6 @@ console.log(`Stake account balance: ${stakeBalance / LAMPORTS_PER_SOL} SOL`); - + diff --git a/docs/.vuepress/dist/tr/references/token.html b/docs/.vuepress/dist/tr/references/token.html index ed88e1d61..cb94b6a65 100644 --- a/docs/.vuepress/dist/tr/references/token.html +++ b/docs/.vuepress/dist/tr/references/token.html @@ -23,7 +23,7 @@ } Interacting with Tokens (Token’lar ile Etkileşim) | Solana Cookbook - + @@ -322,6 +322,6 @@ mint: mint, }); - + diff --git a/docs/.vuepress/dist/vi/core-concepts/accounts.html b/docs/.vuepress/dist/vi/core-concepts/accounts.html index 01afada70..8914cf43b 100644 --- a/docs/.vuepress/dist/vi/core-concepts/accounts.html +++ b/docs/.vuepress/dist/vi/core-concepts/accounts.html @@ -23,11 +23,11 @@ } Accounts | Toàn tập Solana - + -

    Account

    Account trong lập trình Solana được hiểu như một vùng nhớ để lưu dữ liệu. Chúng là một khối cơ sở trong quá trình phát triển ứng dụng trên Solana.

    Có thể bạn chưa biết

    Những điều có thể bạn chưa biết

    • Account đươc dùng để lưu trữ dữ liệu
    • Mỗi Account sẽ có một địa chỉ duy nhất
    • Account có kích thước tối đa là 10MB (10 Mega Bytes)
    • PDA Account có kích thước tối đa là 10KB (10 Kilo Bytes)
    • PDA Account có thể dùng để ký đại diện cho một program
    • Kích thước Account được cố định tại thời điểm khởi tạo, nhưng vẫn có thể điều chỉnh bằng reallocopen in new window
    • Vùng nhớ dữ liệu được cấp phát cho Account phải được thuê bằng cách trả phí
    • Account owner trong trường hợp mặc định sẽ là System Program

    Chi tiết

    Cấu trúc Account

    Có 3 kiểu Account trên Solana:

    • Data Accounts dùng để lưu trữ dữ liệu
    • Program Accounts dùng để lưu chương trình thực thi
    • Native Accounts ám chỉ native programs trên Solana như là System, Stake, và Vote

    Kiểu Data Account lại có 2 kiểu con:

    • Account được sở hữu bởi System
    • PDA (Program Derived Address) Accounts

    Mỗi Account lại có một địa chỉ (thường là public key - khoá công khai) và một owner (địa chỉ của một Program Account). Đầy đủ các trường của một Account được trình bày ở bảng dưới.

    TrườngMô tả
    lamportsSố lượng lamports trong Account đóng
    ownerĐịa chỉ Program Account đang kiếm soát Account đó
    executableAccount này có thể thực thi các chỉ thị hay không?
    dataDữ liệu thô dưới dạng các bytes được lưu trữ trong Account
    rent_epochKỳ hạn thuê vùng nhớ tiếp theo cho Account

    Có một vài quy tắc quan trọng về quyền sở hữu:

    • Chỉ owner mới được chỉnh sửa cũng như rút số lamports từ một Data Account
    • Bất kỳ ai cũng được phép nạp lamports vào một Data Account
    • Owner của một Account có thể được gán cho một owner mới khi và chỉ khi vùng nhớ của Account đó được hoàn trả

    Program Accounts không được lưu bất kỳ trạng thái.

    Ví dụ, nếu bạn có một chương trình đếm trên một Program Account và cho phép tăng bộ đếm lên sau mỗi lần tương tác, bạn phải tạo tối thiểu 2 Account. Trong đó, một cho Program Account để lưu code thực thi, và một cho Data Account để lưu dữ liệu bộ đếm.

    Để tránh việc một Account bị xoá, bạn phải trả chi phí để thuê vùng nhớ cho Account đó.

    Thuê

    Lưu trữ dữ liệu vào Account và duy trì Account đó sẽ phát sinh chi phí SOL. Chi phí này được gọi là chi phí thuê. Nếu chi phí thuê được duy trì ở mức tối thiểu là 2 năm cho Account đó, thì bạn sẽ được miễn phí lưu trữ. Bạn cũng có thể thu hồi lại phí cọc bằng cách đóng Account. Số lamports cọc sẽ được hoàn trả về địa chỉ ví của bạn.

    Chi phí thuê được tính toán và chi trả ở 2 thời điểm khác nhau:

    1. Khi có bất kỳ giao dịch nào có tham khảo đến Account đó.
    2. Định kỳ mỗi epoch.

    Một phần của chi phí thuê thu được sẽ được tiêu huỷ, trong khi phần còn lại sẽ được phân chia cho các Vote Account sau mỗi slot.

    Nếu một Account không đủ cọc để chi trả phí thuê, Account đó sẽ bị thu hồi và toàn bộ dữ liệu sẽ bị xoá.

    Các nguồn tài liệu khác

    Lời cảm ơn

    Khái niệm căn bản này được đóng góp của Pencilflip. Theo dõi anh ấy trên Twitteropen in new window.

    Last Updated:
    - +

    Account

    Account trong lập trình Solana được hiểu như một vùng nhớ để lưu dữ liệu. Chúng là một khối cơ sở trong quá trình phát triển ứng dụng trên Solana.

    Có thể bạn chưa biết

    Những điều có thể bạn chưa biết

    • Account đươc dùng để lưu trữ dữ liệu
    • Mỗi Account sẽ có một địa chỉ duy nhất
    • Account có kích thước tối đa là 10MB (10 Mega Bytes)
    • PDA Account có kích thước tối đa là 10KB (10 Kilo Bytes)
    • PDA Account có thể dùng để ký đại diện cho một program
    • Kích thước Account được cố định tại thời điểm khởi tạo, nhưng vẫn có thể điều chỉnh bằng reallocopen in new window
    • Vùng nhớ dữ liệu được cấp phát cho Account phải được thuê bằng cách trả phí
    • Account owner trong trường hợp mặc định sẽ là System Program

    Chi tiết

    Cấu trúc Account

    Có 3 kiểu Account trên Solana:

    • Data Accounts dùng để lưu trữ dữ liệu
    • Program Accounts dùng để lưu chương trình thực thi
    • Native Accounts ám chỉ native programs trên Solana như là System, Stake, và Vote

    Kiểu Data Account lại có 2 kiểu con:

    • Account được sở hữu bởi System
    • PDA (Program Derived Address) Accounts

    Mỗi Account lại có một địa chỉ (thường là public key - khoá công khai) và một owner (địa chỉ của một Program Account). Đầy đủ các trường của một Account được trình bày ở bảng dưới.

    TrườngMô tả
    lamportsSố lượng lamports thuộc sở hữu bởi Account đó
    ownerĐịa chỉ Program Account đang kiếm soát Account đó
    executableAccount này có thể thực thi các instructions hay không?
    dataDữ liệu thô dưới dạng các bytes được lưu trữ trong Account
    rent_epochKỳ hạn thuê vùng nhớ tiếp theo cho Account

    Có một vài quy tắc quan trọng về quyền sở hữu:

    • Chỉ owner mới được chỉnh sửa cũng như rút số lamports từ một Data Account
    • Bất kỳ ai cũng được phép nạp lamports vào một Data Account
    • Owner của một Account có thể được gán cho một owner mới khi và chỉ khi vùng nhớ của Account đó được hoàn trả

    Program Accounts không được lưu state.

    Ví dụ, nếu bạn có một chương trình đếm trên một Program Account và cho phép tăng bộ đếm lên sau mỗi lần tương tác, bạn phải tạo tối thiểu 2 Account. Trong đó, một cho Program Account để lưu code thực thi, và một cho Data Account để lưu dữ liệu bộ đếm.

    Để tránh việc một Account bị xoá, bạn phải trả chi phí để thuê vùng nhớ cho Account đó.

    Thuê

    Lưu trữ dữ liệu vào Account và duy trì Account đó sẽ phát sinh chi phí SOL. Chi phí này được gọi là chi phí thuê. Nếu chi phí thuê được duy trì ở mức tối thiểu là 2 năm cho Account đó, thì bạn sẽ được miễn phí lưu trữ. Bạn cũng có thể thu hồi lại phí cọc bằng cách đóng Account. Số lamports cọc sẽ được hoàn trả về địa chỉ ví của bạn.

    Chi phí thuê được tính toán và chi trả ở 2 thời điểm khác nhau:

    1. Khi có bất kỳ giao dịch nào có tham chiếu đến Account đó.
    2. Định kỳ mỗi epoch.

    Một phần của chi phí thuê thu được sẽ được tiêu huỷ, trong khi phần còn lại sẽ được phân chia cho các Vote Account sau mỗi slot.

    Nếu một Account không đủ cọc để chi trả phí thuê, Account đó sẽ bị thu hồi và toàn bộ dữ liệu sẽ bị xoá.

    Các nguồn tài liệu khác

    Lời cảm ơn

    Khái niệm căn bản này được đóng góp của Pencilflip. Theo dõi anh ấy trên Twitteropen in new window.

    Last Updated:
    + diff --git a/docs/.vuepress/dist/vi/core-concepts/pdas.html b/docs/.vuepress/dist/vi/core-concepts/pdas.html index bc2df8eea..b0d42bc8d 100644 --- a/docs/.vuepress/dist/vi/core-concepts/pdas.html +++ b/docs/.vuepress/dist/vi/core-concepts/pdas.html @@ -23,11 +23,11 @@ } Program Derived Addresses (PDAs) | Toàn tập Solana - + -

    Program Derived Addresses (PDAs)

    Program Derived Addresses (hay còn gọi vắn tắt là PDA) là những Account được thiết kế cho các Program có thể kiểm soát. Với PDA, Program có thể lập trình được chữ ký cho một số địa chỉ cụ thể mà không cần khoá riêng tư - private key. PDA là cơ sở để hiện thực Cross-Program Invocationopen in new window, trong đó Solana cho phép các Program có thể tương tác cũng như kết hợp với nhau để tạo nên một hệ thống phức tạp hơn.

    Có thể bạn chưa biết

    Những điều có thể bạn chưa biết

    • PDA là một chuỗi 32 byte tương tự khoá công khai - public keys, nhưng lại không tồn tại khoá riêng tư tương ứng
    • findProgramAddress được dùng để suy ra một PDA từ thông tin program_idseeds (một tập hợp các bytes)
    • Một bump (có giá trị 1 byte) được dùng để tạo ra một PDA khả dĩ nằm ngoài đường cong ellipitic ed25519.
    • Program có thể tạo ra chữ cho PDA bằng cách cung cấp seedsbump cho hàm invoke_signedopen in new window
    • Một PDA chỉ có thể được ký bởi Program mà nó được suy ra.
    • Ngoài việc cho phép Program chó thể ký lên các chỉ thị, PDA cũng cung cấp một giao diện giống với hashmap dành cho việc đánh chỉ số Account

    Chi tiết

    PDA là một khối cơ sở cho việc lập trình trên Solana. Với PDA, Program có thể ký cho nhiều Account trong khi đảm bảo rằng không tồn tại người dùng nào có thể giả mạo chữ ký cho cùng Account đó. Ngoài việc tạo ra chữ ký, Program cũng có thể chỉnh sửa Account được sở hữu bởi PDA của nó.

    Accounts matrix

    Hình ảnh được cho phép bời Pencilflip

    Cách sinh PDA

    Để hiểu được khái niệm đằng sau PDA, là cần thiết để làm rõ rằng PDA không phải được "tạo ra" mà là "tìm ra". PDA được sinh ra từ quá trình kết hợp giữa seeds (ví dụ như chuỗi ký tự “vote_account”) và program_id. Việc kết hợp này được cho qua một hàm băm - sha256 - để thử xem giá trị tạo ra có phải là một khoá công khai nằm ngoài đường cong ellipitic ed25519 hay không.

    Quá trình thử này sẽ có xác suất 50/50. Nghĩa là sẽ có 50% cơ hội quá trình sinh ra một khoá công khai nằm trên đường cong ellipitic ed25519. Trong trường hợp đó, chúng ta đơn giản chỉ cần thêm một vài bit vào đầu vào để thử lại. Những bit được thêm vào trong thuật ngữ kỹ thuật được gọi là bump. Trong Solana, chúng ta bắt đầu với bump = 255 và tiếp tục giảm xuống 254, 253 cứ thể cho đến khi tìm được địa chỉ PDA không nằm trên đường cong ellipitic. Việc này có vẻ thô sơ, nhưng thực ra nó lại cho chúng ta một phương pháp bất biến để suy ra PDA cho các lần thử khác nhau, miễn là cùng một giá trị đầu vào.

    PDA on the ellipitic curve

    Tương tác với PDAs

    Khi một PDA được sinh ra, findProgramAddress sé trả về hai giá trị là địa chỉ của PDA và bump dùng để đảm bảo PDA này ngoài đường cong ellipitic. Với giá trị bump này, Program có thể ký lên bất kỳ chỉ thị nào có chứa PDA của nó về sau. Để ký, Program phải truyền cho chỉ thị một danh sách các Account, các seedsbump dùng để suy ra PDA vào hàm invoke_signed. Ngoài việc ký lên chỉ thị, PDA còn ký cho việc tạo ra chính bản thân nó thông qua hàm invoke_signed.

    Khi phát triển ứng dụng với PDA, thường thì bạn sẽ phải lưu bumpopen in new window trong dữ liệu Account. Điều này cho phép lập trình viên có thể kiểm tra PDA mà không cần truyền bump vào dữ liệu đầu vào của chỉ thị.

    Các nguồn tài liệu khác

    Last Updated:
    - +

    Program Derived Addresses (PDAs)

    Program Derived Addresses (hay còn gọi vắn tắt là PDA) là những Account được thiết kế cho các Program có thể kiểm soát. Với PDA, Program có thể lập trình được chữ ký cho một số địa chỉ cụ thể mà không cần khoá riêng tư - private key. PDA là cơ sở để hiện thực Cross-Program Invocationopen in new window, trong đó Solana cho phép các Program có thể tương tác cũng như kết hợp với nhau để tạo nên một hệ thống phức tạp hơn.

    Có thể bạn chưa biết

    Những điều có thể bạn chưa biết

    • PDA là một chuỗi 32 byte tương tự khoá công khai - public keys, nhưng lại không tồn tại khoá riêng tư tương ứng
    • findProgramAddress được dùng để suy ra một PDA từ thông tin program_idseeds (một tập hợp các bytes)
    • Một bump (có giá trị 1 byte) được dùng để tạo ra một PDA khả dĩ nằm ngoài đường cong ellipitic ed25519.
    • Program có thể tạo ra chữ ký cho PDA bằng cách cung cấp seedsbump cho hàm invoke_signedopen in new window
    • Một PDA chỉ có thể được ký bởi Program mà nó được suy ra.
    • Ngoài việc cho phép Program có thể ký lên các instruction, PDA cũng cung cấp một interface giống với hashmap dành cho việc đánh chỉ số Account

    Chi tiết

    PDA là một khối cơ sở cho việc lập trình trên Solana. Với PDA, Program có thể ký cho nhiều Account trong khi đảm bảo rằng không tồn tại người dùng nào có thể giả mạo chữ ký cho cùng Account đó. Ngoài việc tạo ra chữ ký, Program cũng có thể chỉnh sửa Account được sở hữu bởi PDA của nó.

    Accounts matrix

    Hình ảnh được cho phép bời Pencilflip

    Cách sinh PDA

    Để hiểu được khái niệm đằng sau PDA, là cần thiết để làm rõ rằng PDA không phải được "tạo ra" mà là "tìm ra". PDA được sinh ra từ quá trình kết hợp giữa seeds (ví dụ như chuỗi ký tự “vote_account”) và program_id. Việc kết hợp này được cho qua một hàm băm - sha256 - để thử xem giá trị tạo ra có phải là một khoá công khai nằm ngoài đường cong ellipitic ed25519 hay không.

    Quá trình thử này sẽ có xác suất 50/50. Nghĩa là sẽ có 50% cơ hội quá trình sinh ra một khoá công khai nằm trên đường cong ellipitic ed25519. Trong trường hợp đó, chúng ta đơn giản chỉ cần thêm một vài bit vào đầu vào để thử lại. Những bit được thêm vào trong thuật ngữ kỹ thuật được gọi là bump. Trong Solana, chúng ta bắt đầu với bump = 255 và tiếp tục giảm xuống 254, 253 cứ thể cho đến khi tìm được địa chỉ PDA không nằm trên đường cong ellipitic. Việc này có vẻ thô sơ, nhưng thực ra nó lại cho chúng ta một phương pháp bất biến để suy ra PDA cho các lần thử khác nhau, miễn là cùng một giá trị đầu vào.

    PDA on the ellipitic curve

    Tương tác với PDAs

    Khi một PDA được sinh ra, findProgramAddress sẽ trả về hai giá trị là địa chỉ của PDA và bump dùng để đảm bảo PDA này ngoài đường cong ellipitic. Với giá trị bump này, Program có thể ký lên bất kỳ instruction nào có chứa PDA của nó về sau. Để ký, Program phải truyền cho instruction một danh sách các Account, các seedsbump dùng để suy ra PDA vào hàm invoke_signed. Ngoài việc ký lên instruction, PDA còn ký cho việc tạo ra chính bản thân nó thông qua hàm invoke_signed.

    Khi phát triển ứng dụng với PDA, thường thì bạn sẽ phải lưu bumpopen in new window trong dữ liệu Account. Điều này cho phép lập trình viên có thể kiểm tra PDA mà không cần truyền bump vào dữ liệu đầu vào của instruction.

    Các nguồn tài liệu khác

    Last Updated:
    + diff --git a/docs/.vuepress/dist/vi/core-concepts/programs.html b/docs/.vuepress/dist/vi/core-concepts/programs.html index 99aa50f7e..924c822e4 100644 --- a/docs/.vuepress/dist/vi/core-concepts/programs.html +++ b/docs/.vuepress/dist/vi/core-concepts/programs.html @@ -23,12 +23,12 @@ } Programs | Toàn tập Solana - + -

    Program

    Bất kỳ lập trình viên nào đều có thể viết và triển khai một chương trình trên Solana. Program (hay được biết đến với tên gọi là Smart Contract trên các blockchain khác) sẽ là nền tảng cho các hoạt động on-chain; thứ giúp tạo nên đa số các hình thái từ DeFi, NFTs cho đến Mạng xã hội và Trò chơi.

    Có thể bạn chưa biết

    Những điều có thể bạn chưa biết

    • Program sẽ xử lý các chỉ thị từ cả người dùng và các Program khác
    • Tất cả các Program đều là stateless: mọi dữ liệu mà Program tương tác đều được lưu trên những Account tách biệt và được truyền thông qua các chỉ thị
    • Bản thân Program được lưu bên trong những Account dược đánh dấu là executable
    • Tất cả Program được sở hữu bởi BPF Loaderopen in new window và được thực thi bởi Solana Runtimeopen in new window
    • Hầu hết các lập trình viên đều phát triển Program bằng Rust hoặc C++, nhưng bạn vẫn có thể lựa chọn bất kỳ ngôn ngữ lập trình mà có hỗ trợ BPFopen in new window của LLVMopen in new window
    • Mọi Program chỉ có duy nhất một điểm truy cập nơi mà các chỉ thị được xử lý (cụ thể là process_instruction); các tham số đầu vào luôn bao gồm:
      • program_id: pubkey
      • accounts: array,
      • instruction_data: byte array

    Chi tiết

    Không giống như hấu hết các blockchain khác, Solana tách bạch giữa code và dữ liệu. Tất cả dữ liệu mà chương trình cần tương tác sẽ được lưu ở các Account tách biệt và được truyền thông qua các tham chiếu ở câu chỉ thị. Mô hình này cho phép một chương trình chung có thể hoạt động trên nhiều kiểu Account khác nhau mà không cần tái cơ cấu lại chương trình. Một ví dụ hay gặp của mô hình này là Native Programs và SPL Programs.

    Native Programs & Solana Program Library (SPL) Programs

    Solana được trang bị sẵn một số Program nền tảng và được dùng để xây dựng các tương tác on-chain. Những Program này thường được chia thành Native Programsopen in new windowSolana Program Library (SPL) Programsopen in new window.

    Native Programs cung cấp các chức năng cơ sở và cần thiết để vận hành các validators. Trong các Program này, chương trình được biết đến rộng rãi nhất là System Programopen in new window. System Program chịu trách nhiệm cho việc cấp phát Account mới, cũng như chuyển SOL giữa các Account khác nhau.

    SPL Programs hỗ trợ một số các hoạt động on-chain bao gồm tạo tokens, trao đổi tokens, cho vay tokens, cũng như tạo stake pools, và duy trì name service. SPL Token Programopen in new window có thể được gọi trực tiếp thông qua Solana CLI, hoặc bằng cách khác hơn như là Associated Token Account Programopen in new window. Associated Token Account Program thường được kết hợp với các chương trình tuỳ chỉnh để gọi đến SPL Token Program hơn là gọi độc lập.

    Viết một Program

    Program hầu như được phát triển dựa trên Rust hoặc C++. Tuy nhiên bạn vẫn có thể phát triển bằng bất kỳ ngôn ngữ nào miễn là hỗ trợ BPF của LLVM. Hiện tại, lập trình viên cũng có thể chuyển đổi smart contract trên EVM được viết bằng Solidity thông qua dự án được khởi xướng bởi Neon Labsopen in new windowSolangopen in new window.

    Đa số các Program dự trên Rust đều bám sát kiến trúc sau:

    TệpMô tả
    lib.rsĐăng ký các modules
    entrypoint.rsĐiểm truy cập của Program
    instruction.rsProgram API, tuần tự và phi tuần tự hoá dữ liệu đầu vào
    processor.rsLuận lý của Program
    state.rsCác đối tượng của Program, tuần tự và phi tuần tự hoá trạng thái
    error.rsĐịnh nghĩa lỗi của Program

    Hiện tại, Anchoropen in new window đang nổi lên như là một framework phổ biến giúp phát triển Program nhanh chóng hơn. Anchor được lấy cảm hứng nhiều từ Ruby on Rails nhằm giảm thiểu các mẫu code lặp lại, đồng thời chuẩn hoá việc tuần tự và phi tuần tự hoá dữ liệu trong quá trình phát triển bằng Rust.

    Program thường được phát triển và kiểm thử trên môi trường localhost và devnet trước khi được triển khai trên testnet hoặc mainnet. Solana hỗ trợ các môi trường sau:

    Cụm môi trườngĐường dẫn kết nối RPC
    Mainnet-betahttps://api.mainnet-beta.solana.com
    Testnethttps://api.testnet.solana.com
    Devnethttps://api.devnet.solana.com
    LocalhostPort mặc định: 8899 (e.g. http://localhost:8899, http://192.168.1.88:8899)

    Sau khi triển khai lên một môi trường cụ thể, người dùng có thể tương tác với chúng on-chain thông qua kết nối RPCopen in new window tương ứng.

    Triển khai Program

    Lập trình viên có thể triển khai Program của họ thông qua CLIopen in new window:

    solana program deploy <PROGRAM_FILEPATH>
    -

    Khi một Program được triển khai, nó sẽ được biên dịch thành một ELF shared objectopen in new window (có chứa BPF bytecode) và được tải lên mạng Solana. Program được lưu trữ trong Account (giống như hấu hết mọi thứ trên Solana), ngoại trừ việc được đánh đấu là executableowner được gán cho BPF Loader. Địa chỉ của Account này sẽ được gọi là program_id và được sử dụng nhưng là tham chiếu cho Program trong các giao dịch ở tương lai.

    Solana hỗ trợ đa dạng các BPF Loader với phiên bản mới nhất là Upgradable BPF Loaderopen in new window. BPF Loader chịu trách nhiệm cho việc điều hành các Account của Program và cho phép người dùng tương tác bằng program_id. Tất cả Program chỉ có một điểm truy cập duy nhất, nơi mà các chỉ thị sẽ được ghi nhận và xử lý (cụ thể là process_instruction) với các tham số bao gồm:

    • program_id: pubkey
    • accounts: array,
    • instruction_data: byte array

    Mỗi khi được gọi, Program sẽ được thực thi bởi Solana Runtime.

    Các nguồn tài liệu khác

    Last Updated:
    - +

    Program

    Bất kỳ lập trình viên nào đều có thể viết và triển khai một chương trình trên Solana. Program (hay được biết đến với tên gọi là Smart Contract trên các blockchain khác) sẽ là nền tảng cho các hoạt động on-chain; thứ giúp tạo nên đa số các hình thái từ DeFi, NFTs cho đến Mạng xã hội và Trò chơi.

    Có thể bạn chưa biết

    Những điều có thể bạn chưa biết

    • Program sẽ xử lý các instruction từ người dùng và các Program khác
    • Tất cả các Program đều là stateless: mọi dữ liệu mà Program tương tác đều được lưu trên những Account tách biệt và được lan truyền thông qua các instruction
    • Bản thân Program được lưu bên trong những Account được đánh dấu là executable
    • Tất cả Program được sở hữu bởi BPF Loaderopen in new window và được thực thi bởi Solana Runtimeopen in new window
    • Hầu hết các lập trình viên đều phát triển Program bằng Rust hoặc C++, nhưng bạn vẫn có thể lựa chọn bất kỳ ngôn ngữ lập trình mà có hỗ trợ BPFopen in new window của LLVMopen in new window
    • Mọi Program chỉ có duy nhất một điểm truy cập, nơi mà các instruction được xử lý (cụ thể là process_instruction); các tham số đầu vào luôn bao gồm:
      • program_id: pubkey
      • accounts: array,
      • instruction_data: byte array

    Chi tiết

    Không giống như hấu hết các blockchain khác, Solana tách bạch giữa code và dữ liệu. Tất cả dữ liệu mà chương trình cần tương tác sẽ được lưu ở các Account tách biệt và được lan truyền thông dưới dạng tham chiếu thông qua các instruction. Mô hình này cho phép một chương trình chung có thể hoạt động trên nhiều kiểu Account khác nhau mà không cần tái cơ cấu lại chương trình. Một ví dụ hay gặp của mô hình này là Native Programs và SPL Programs.

    Native Programs & Solana Program Library (SPL) Programs

    Solana được trang bị sẵn một số Program nền tảng và được dùng để xây dựng các tương tác on-chain. Những Program này thường được chia thành Native Programsopen in new windowSolana Program Library (SPL) Programsopen in new window.

    Native Programs cung cấp các chức năng cơ sở và cần thiết để vận hành các validators. Trong các Program này, chương trình được biết đến rộng rãi nhất là System Programopen in new window. System Program chịu trách nhiệm cho việc cấp phát Account mới, cũng như chuyển SOL giữa các Account khác nhau.

    SPL Programs hỗ trợ một số các hoạt động on-chain bao gồm tạo tokens, trao đổi tokens, cho vay tokens, cũng như tạo stake pools, và duy trì name service. SPL Token Programopen in new window có thể được gọi trực tiếp thông qua Solana CLI, hoặc bằng cách khác hơn như là Associated Token Account Programopen in new window. Associated Token Account Program thường được kết hợp với các chương trình tuỳ chỉnh để gọi đến SPL Token Program hơn là gọi độc lập.

    Viết một Program

    Program hầu như được phát triển dựa trên Rust hoặc C++. Tuy nhiên bạn vẫn có thể phát triển bằng bất kỳ ngôn ngữ nào miễn là hỗ trợ BPF của LLVM. Hiện tại, lập trình viên cũng có thể chuyển đổi smart contract trên EVM được viết bằng Solidity thông qua dự án được khởi xướng bởi Neon Labsopen in new windowSolangopen in new window.

    Đa số các Program dự trên Rust đều bám sát kiến trúc sau:

    TệpMô tả
    lib.rsĐăng ký các modules
    entrypoint.rsĐiểm truy cập của Program
    instruction.rsProgram API, tuần tự và phi tuần tự hoá dữ liệu đầu vào
    processor.rsLogic của Program
    state.rsCác đối tượng của Program, tuần tự và phi tuần tự hoá trạng thái
    error.rsĐịnh nghĩa lỗi của Program

    Hiện tại, Anchoropen in new window đang nổi lên như là một framework phổ biến giúp phát triển Program nhanh chóng hơn. Anchor được lấy cảm hứng nhiều từ Ruby on Rails nhằm giảm thiểu các mẫu code lặp lại, đồng thời chuẩn hoá việc tuần tự và phi tuần tự hoá dữ liệu trong quá trình phát triển bằng Rust.

    Program thường được phát triển và kiểm thử trên môi trường localhost và devnet trước khi được triển khai trên testnet hoặc mainnet. Solana hỗ trợ các môi trường sau:

    Cụm môi trườngĐường dẫn kết nối RPC
    Mainnet-betahttps://api.mainnet-beta.solana.com
    Testnethttps://api.testnet.solana.com
    Devnethttps://api.devnet.solana.com
    LocalhostPort mặc định: 8899 (e.g. http://localhost:8899, http://192.168.1.88:8899)

    Sau khi triển khai lên một môi trường cụ thể, người dùng có thể tương tác với các Program trên on-chain thông qua kết nối RPCopen in new window tương ứng.

    Triển khai Program

    Lập trình viên có thể triển khai Program của họ thông qua CLIopen in new window:

    solana program deploy <PROGRAM_FILEPATH>
    +

    Khi một Program được triển khai, nó sẽ được biên dịch thành một ELF shared objectopen in new window (có chứa BPF bytecode) và được tải lên mạng Solana. Program được lưu trữ trong Account (giống như hấu hết mọi thứ trên Solana), ngoại trừ việc được đánh dấu là executableowner được gán cho BPF Loader. Địa chỉ của Account này sẽ được gọi là program_id và được sử dụng nhưng là tham chiếu cho Program trong các giao dịch ở tương lai.

    Solana hỗ trợ đa dạng các BPF Loader với phiên bản mới nhất là Upgradable BPF Loaderopen in new window. BPF Loader chịu trách nhiệm cho việc điều hành các Account của Program và cho phép người dùng tương tác bằng program_id. Tất cả Program chỉ có một điểm truy cập duy nhất, nơi mà các instruction sẽ được ghi nhận và xử lý (cụ thể là process_instruction) với các tham số bao gồm:

    • program_id: pubkey
    • accounts: array,
    • instruction_data: byte array

    Mỗi khi được gọi, Program sẽ được thực thi bởi Solana Runtime.

    Các nguồn tài liệu khác

    Last Updated:
    + diff --git a/docs/.vuepress/dist/vi/core-concepts/transactions.html b/docs/.vuepress/dist/vi/core-concepts/transactions.html index 7fe460300..f054d0824 100644 --- a/docs/.vuepress/dist/vi/core-concepts/transactions.html +++ b/docs/.vuepress/dist/vi/core-concepts/transactions.html @@ -23,11 +23,11 @@ } Transactions | Toàn tập Solana - + -

    Transactions

    Người dùng có thể gọi Program bằng cách tạo và gửi một Transaction đến mạng lưới Solana. Một Transaction đơn có thể chứa nhiều chỉ thị bên trong, và mỗi chỉ thị có thể tương tác với các Program khác nhau. Khi một Transaction được gửi đi, Solana Runtimeopen in new window sẽ xử lý các chỉ thị bên trong Transaction từng chỉ thị một theo thứ tự. Nếu có bất kỳ chỉ thị nào xảy ra lỗi, toàn bộ Transaction sẽ được xem là lỗi.

    Có thể bạn chưa biết

    Những điều có thể bạn chưa biết

    • Các chỉ thị là những đơn vị thực thi nhỏ nhất trên Solana
    • Mỗi chỉ thị sẽ chứa:
      • program_id của Program mục tiêu
      • Một mảng tất cả accounts mà chỉ thị muốn đọc hoặc ghi
      • Một mảng byte instruction_data cung cấp dữ liệu đầu vào cụ thể cho Program
    • Nhiều chỉ thị có thể đọc đóng gói trong một Transaction duy nhất
    • Mỗi Transaction có thể chứa:
      • Một mảng tất cả accounts mà Transaction muốn đọc hoặc ghi
      • Một hoặc nhiều chỉ thị và được lưu trong instructions
      • blockhash hiện tại
      • Một hoặc nhiều chữ kỳ và được lưu trong signatures
    • Các chỉ thị sẽ được thực thi tuần tự và theo thứ tự trong Transaction
    • Nếu có bất kỳ chỉ thị nào xảy ra lỗi, toàn bộ giao dịch sẽ được xem là lỗi
    • Transaction có giới hạn dung lượng là 1232 bytes

    Chi tiết

    Solana Runtime yêu cầu cả chỉ thị và Transaction phải khai báo một danh sách tất cả các Account mà chúng cần đọc hoặc ghi dữ liệu. Bằng các yêu cầu những Account này trước, Solana Runtime có thể song song hoá quá trình thực thi xuyên suốt tất cả các Transaction.

    Khi một Transaction được gửi vào mạng lưới, Solana Runtime sẽ xử lý các chỉ thị của nó tuần tự từng chỉ thị một theo thứ tự khai báo bên trong Transaction. Với mỗi chỉ thị, Program được truy vấn sẽ lấy dữ liệu từ chỉ thị và thực thi trên các Account tương ứng trong chỉ thị đó. Program hoặc là trả về kết quả thành công, hoặc là với kết quả lỗi với mã lỗi tương ứng. Với bất kỳ lỗi nào được trả ra, toàn bộ Transaction sẽ kết thúc với lỗi ngay lập tức.

    Bất kỳ Transaction nào mà thay đổi dữ liệu của Account hay rút lamports ra từ Account thì đều cần yêu cầu chữ ký của owner trong Account. Bất kỳ Account nào khi cần được sửa đổi đều phải đánh dấu là writable trong chỉ thị tương ứng. Một Account có thể được nạp thêm lamports mà không cần xin phép, duy chỉ cần người trả phí cho Transaction đủ khả năng chi trả phí thuê và phí giao dịch.

    Trước khi gửi đi, tất cả các Transaction phải tham vấn Blockhashopen in new window mới nhất. Blockhash được dùng để chống trùng lặp và loại bỏ các giao dịch quá hạn. Thời hạn tối đa cho một Transaction là không quá 150 blocks so với Blockhash được ghi, và khoảng chừng 1 phút 19 giây theo ước tính tại thời điểm cuốn sách được viết.

    Phí

    Mạng Solana sẽ thu 2 loại phí:

    Trên Solana, phí giao dịch thường bất biến, nghĩa là không có khái niệm về đánh phí theo thị trường nơi mà người dùng có thể trả phí cao hơn mặt bằng để tăng cơ hội được ưu tiên thực thi Transaction trước. Tại thời điểm tác giả viết, phí giao dịch được xác định bằng số lượng chữ ký bên trong Transaction (cụ thể là lamports_per_signature), và không phải bằng số bước tính toán cho Transaction đó. Điều đó được lý giải bởi vì luôn có một giới hạn trần là 1232 bytes cho mọi Transaction.

    Tất cả Transaction yêu cầu ít nhất một Account là writable để ký Transaction đó. Một khi được gửi, Account trả phí với nhãn writablesigher sẽ được tuần tự hoá trước tiên. Account này sẽ chi trả các chi phí phát sinh của Transaction du cho Transaction thành công hay thất bại. Nếu Account trả phí không đủ số dư để trả phí giao dịch, Transaction sẽ bị bỏ qua.

    Tại thời điểm được viết, 50% phí giao dịch sẽ được thưởng cho Validator để sinh ra block, trong khi 50% còn lại sẽ được đốt. Bằng cơ cấu như vậy, Validator được khuyến khích phải xử lý càng nhiều Transaction càng tốt trong thời hạn được đề cử.

    Các nguồn tài liệu khác

    Last Updated:
    - +

    Transactions

    Người dùng có thể gọi Program bằng cách tạo và gửi một Transaction đến mạng lưới Solana. Một Transaction có thể chứa nhiều instruction bên trong, và mỗi instruction có thể tương tác với các Program khác nhau. Khi một Transaction được gửi đi, Solana Runtimeopen in new window sẽ xử lý các instruction bên trong Transaction theo thứ tự và tuần tự. Nếu có bất kỳ instruction nào xảy ra lỗi, toàn bộ Transaction sẽ được xem là lỗi.

    Có thể bạn chưa biết

    Những điều có thể bạn chưa biết

    • Các instruction là những đơn vị thực thi nhỏ nhất trên Solana
    • Mỗi instruction sẽ chứa:
      • program_id của Program mục tiêu
      • Một mảng tất cả accounts mà instruction muốn đọc hoặc ghi
      • Một mảng byte instruction_data cung cấp dữ liệu đầu vào cụ thể cho Program
    • Nhiều instruction có thể được đóng gói trong một Transaction duy nhất
    • Mỗi Transaction có thể chứa:
      • Một mảng tất cả accounts mà Transaction muốn đọc hoặc ghi
      • Một hoặc nhiều instructions
      • blockhash hiện tại
      • Một hoặc nhiều signatures
    • Các instruction sẽ được thực thi tuần tự và theo thứ tự trong Transaction
    • Nếu có bất kỳ instruction nào xảy ra lỗi, toàn bộ giao dịch sẽ được xem là lỗi
    • Transaction có giới hạn dung lượng là 1232 bytes

    Chi tiết

    Solana Runtime yêu cầu instruction và Transaction phải khai báo một danh sách tất cả các Account mà chúng cần đọc hoặc ghi dữ liệu. Bằng cách yêu cầu những Account này trước, Solana Runtime có thể song song hoá quá trình thực thi xuyên suốt tất cả các Transaction.

    Khi một Transaction được gửi vào mạng lưới, Solana Runtime sẽ xử lý các instructions của nó tuần tự từng instruction một theo thứ tự khai báo bên trong Transaction. Với mỗi instruction, Program được truy vấn sẽ lấy dữ liệu từ instruction và thực thi trên các Account tương ứng trong instruction đó. Program hoặc là trả về kết quả thành công, hoặc là với kết quả lỗi với mã lỗi tương ứng. Với bất kỳ lỗi nào được trả ra, toàn bộ Transaction sẽ kết thúc với lỗi ngay lập tức.

    Bất kỳ Transaction nào mà thay đổi dữ liệu của Account hay rút lamports ra từ Account thì đều cần yêu cầu chữ ký của owner trong Account. Bất kỳ Account nào khi cần được sửa đổi đều phải đánh dấu là writable trong instruction tương ứng. Một Account có thể được nạp thêm lamports mà không cần xin phép, chỉ cần người trả phí cho Transaction đủ khả năng chi trả phí thuê và phí giao dịch.

    Trước khi gửi đi, tất cả các Transaction phải tham chiếu Blockhashopen in new window mới nhất. Blockhash được dùng để chống trùng lặp và loại bỏ các giao dịch quá hạn. Thời hạn tối đa cho một Transaction là không quá 150 blocks so với Blockhash được ghi, và khoảng chừng 1 phút 19 giây theo ước tính tại thời điểm cuốn sách được viết.

    Phí

    Mạng Solana sẽ thu 2 loại phí:

    Trên Solana, phí giao dịch thường bất biến, nghĩa là không có khái niệm về đánh phí theo thị trường nơi mà người dùng có thể trả phí cao hơn mặt bằng để tăng cơ hội được ưu tiên thực thi Transaction trước. Tại thời điểm tác giả viết, phí giao dịch được xác định bằng số lượng chữ ký bên trong Transaction (cụ thể là lamports_per_signature), và không phải bằng số bước tính toán cho Transaction đó. Điều đó được lý giải bởi vì luôn có một giới hạn trần là 1232 bytes cho mọi Transaction.

    Tất cả Transaction yêu cầu ít nhất một Account là writable để ký Transaction đó. Một khi được gửi, Account trả phí với nhãn writablesigher sẽ được tuần tự hoá trước tiên. Account này sẽ chi trả các chi phí phát sinh của Transaction cho dù Transaction thành công hay thất bại. Nếu Account trả phí không đủ số dư để trả phí giao dịch, Transaction sẽ bị bỏ qua.

    Tại thời điểm được viết, 50% phí giao dịch sẽ được thưởng cho Validator để sinh ra block, trong khi 50% còn lại sẽ được đốt. Bằng cơ cấu như vậy, Validator được khuyến khích phải xử lý càng nhiều Transaction càng tốt trong thời hạn được đề cử.

    Các nguồn tài liệu khác

    Last Updated:
    + diff --git a/docs/.vuepress/dist/vi/getting-started/installation.html b/docs/.vuepress/dist/vi/getting-started/installation.html index c90a02b91..951b075d4 100644 --- a/docs/.vuepress/dist/vi/getting-started/installation.html +++ b/docs/.vuepress/dist/vi/getting-started/installation.html @@ -23,7 +23,7 @@ } Cài đặt | Toàn tập Solana - + @@ -71,6 +71,6 @@ export PATH=$PWD/bin:$PATH

    Sau đó, bạn phải chạy lệnh bên dưới để đặt được kết quả giống với bản binaries biên dịch sẵn:

    solana-install init
     
    - + diff --git a/docs/.vuepress/dist/vi/guides/account-maps.html b/docs/.vuepress/dist/vi/guides/account-maps.html index c388cd7c4..6a6915303 100644 --- a/docs/.vuepress/dist/vi/guides/account-maps.html +++ b/docs/.vuepress/dist/vi/guides/account-maps.html @@ -23,7 +23,7 @@ } Account Maps | Toàn tập Solana - + @@ -661,7 +661,7 @@ ); console.log("Post account state: ", postAccountState); }; -

    Map bằng Account đơn

    Một cách khác hơn đển hiện thực map là dùng cấu trúc BTreeMap để lưu dữ liệu lên một Account duy nhất. Địa chỉ của Account này có thể là PDA, hoặc có thể là khoá công khai của một cặp khoá được sinh ra thủ công.

    Phương pháp này thường có một vài hạn chế:

    Tuy vào tính huống của riêng ứng dụng, bạn có thể cân nhắc sử dụng nó như sau:

    Press </> button to view full source
    use std::{collections::BTreeMap};
    +

    Map bằng Account đơn

    Một cách khác hơn đển hiện thực map là dùng cấu trúc BTreeMap để lưu dữ liệu lên một Account duy nhất. Địa chỉ của Account này có thể là PDA, hoặc có thể là khoá công khai của một cặp khoá được sinh ra thủ công.

    Phương pháp này thường có một vài hạn chế:

    Tuy vào tính huống của riêng ứng dụng, bạn có thể cân nhắc sử dụng nó như sau:

    Press </> button to view full source
    use std::{collections::BTreeMap};
     use thiserror::Error;
     use borsh::{BorshSerialize, BorshDeserialize};
     use num_traits::FromPrimitive;
    @@ -1136,6 +1136,6 @@
     tx.add(insertBCIx);
     tx.add(insertCAIx);
     
    - + diff --git a/docs/.vuepress/dist/vi/guides/data-migration.html b/docs/.vuepress/dist/vi/guides/data-migration.html index 41f0c3b6b..93c640f4f 100644 --- a/docs/.vuepress/dist/vi/guides/data-migration.html +++ b/docs/.vuepress/dist/vi/guides/data-migration.html @@ -23,7 +23,7 @@ } Nâng cấp dữ liệu cho Program Account | Toàn tập Solana - + @@ -372,7 +372,7 @@ } } } -

    Trong phiên bản đầu tiên của Account, chúng ta thực hiện các bước sau:

    #Mô tả
    1Thêm trường data_version vào dữ liệu. Nó có thể đơn giản là số thứ tự (u8) hoặc có thể phức tạp hơn thế.
    2Phân phát một vùng nhớ đủ chứa dữ liệu
    3Khởi tạo một hằng số biễu diễn phiên bản cho các Program khác nhau
    4Thêm một hàm cập nhật Account với tên fn conversion_logic cho các nâng cấp trong tương lai

    Giả sử, chúng ta muốn nâng cấp các Account của Program bằng cách thêm một trường mới với tên somestring.

    Nếu chúng ta không phân phát đủ vùng nhớ cho trường mới thêm cho các Account trước đó, quá trình nâng cấp Account sẽ bị mắc kẹt.

    Nâng cấp Account

    Trong Program mới, chúng ta muốn thêm một thuộc tính mới cho nội dung của Account. Những thay đổi bên dưới trình bày cách chúng ta tận dụng cơ cấu Program ban đầu cho phiên bản hiện tại.

    1. Thêm luận lý để chuyển đổi Account

    Press </> button to view full source
    //! @brief account_state manages account data
    +

    Trong phiên bản đầu tiên của Account, chúng ta thực hiện các bước sau:

    #Mô tả
    1Thêm trường data_version vào dữ liệu. Nó có thể đơn giản là số thứ tự (u8) hoặc có thể phức tạp hơn thế.
    2Phân phát một vùng nhớ đủ để chứa dữ liệu
    3Khởi tạo một hằng số biễu diễn phiên bản cho các Program khác nhau
    4Thêm một hàm cập nhật Account với tên fn conversion_logic cho các nâng cấp trong tương lai

    Giả sử, chúng ta muốn nâng cấp các Account của Program bằng cách thêm một trường mới với tên somestring.

    Nếu chúng ta không phân phát đủ vùng nhớ cho trường mới thêm cho các Account trước đó, quá trình nâng cấp Account sẽ bị mắc kẹt.

    Nâng cấp Account

    Trong Program mới, chúng ta muốn thêm một thuộc tính mới cho nội dung của Account. Những thay đổi bên dưới trình bày cách chúng ta tận dụng cơ cấu Program ban đầu cho phiên bản hiện tại.

    1. Thêm luận lý để chuyển đổi Account

    Press </> button to view full source
    //! @brief account_state manages account data
     
     use arrayref::{array_ref, array_refs};
     use borsh::{BorshDeserialize, BorshSerialize};
    @@ -542,7 +542,7 @@
         data_version: u8,
         account_data: AccountContentCurrent,
     }
    -
    DòngMô tả
    6Chúng ta đã thêm solana_program::borsh::try_from_slice_unchecked của Solana để đơn giản hoá việc đọc các tập dữ liệu con từ khối dữ liệu cha
    13-26Ở đây, chúng ta phải giữ lại phiên bản cũ, AccountContentOld tại dòng 24, trước khi mở rộng nó thành AccountContentCurrent tại dòng 17.
    60Nâng cấp lại hằng số DATA_VERSION
    71Chúng ta giờ đã có một phiên bản cũ, đồng thời lưu lại kích thước của nó
    86Cuối cùng là thêm luận lý cho quá trình nâng cấp phiên bản dữ liệu cũ thành phiên bản hiện hành

    Sau đó chúng ta cập nhật hàm mới để thêm vào trường somestring và khai báo luận lý của chỉ thị mới trong processor. Lưu ý việc nâng cấp cấu trúc dữ liệu đã được đóng gói trong pack/unpack.

    //! instruction Contains the main VersionProgramInstruction enum
    +
    DòngMô tả
    6Chúng ta đã thêm solana_program::borsh::try_from_slice_unchecked của Solana để đơn giản hoá việc đọc các tập dữ liệu con từ khối dữ liệu cha
    13-26Ở đây, chúng ta phải giữ lại phiên bản cũ, AccountContentOld tại dòng 24, trước khi mở rộng nó thành AccountContentCurrent tại dòng 17.
    60Nâng cấp lại hằng số DATA_VERSION
    71Chúng ta giờ đã có một phiên bản cũ, đồng thời lưu lại kích thước của nó
    86Cuối cùng là thêm logic cho quá trình nâng cấp phiên bản dữ liệu cũ thành phiên bản hiện hành

    Sau đó chúng ta cập nhật hàm mới để thêm vào trường somestring và khai báo luận lý của chỉ thị mới trong processor. Lưu ý việc nâng cấp cấu trúc dữ liệu đã được đóng gói trong pack/unpack.

    //! instruction Contains the main VersionProgramInstruction enum
     
     use {
         crate::error::DataVersionError,
    @@ -676,6 +676,6 @@
         }
     }
     

    Sau khi xây dựng và áp dụng chỉ thị VersionProgramInstruction::SetString(String), chúng ta sẽ thấy dữ liệu Account được cập nhật sẽ được sắp xếp như sau:

    Program Account v2

    Các nguồn tài liệu khác

    - + diff --git a/docs/.vuepress/dist/vi/guides/debugging-solana-programs.html b/docs/.vuepress/dist/vi/guides/debugging-solana-programs.html index bfa9e6eee..058bef4bd 100644 --- a/docs/.vuepress/dist/vi/guides/debugging-solana-programs.html +++ b/docs/.vuepress/dist/vi/guides/debugging-solana-programs.html @@ -23,11 +23,11 @@ } Soát lỗi chương trình trên Solana | Toàn tập Solana - + -

    Soát lỗi chương trình trên Solana

    Có một vài lựa chọn và công cụ hỗ trợ cho việc kiểm thử và soát lỗi một chương trình trên Solana.

    Có thể bạn chưa biết

    Những điều có thể bạn chưa biết

    • Crate solana-program-test cho phép tạo nên một môi trường tiêu chuẩn local runtime để bạn có thể kiểm thử và soát lỗi chương trình một cách trực quan (ví dụ như trong vscode).
    • Crate solana-validator cho phép sử dụng solana-test-validator để chạy các bước kiểm thử một cách tin cậy trên local validator node. Bạn có thể chạy từ trình biên tập tuy nhiên các điểm dừng trong chương trình sẽ bị bỏ qua.
    • Công cụ CLI solana-test-validator giúp khởi chạy và tải Program cũng nhưng thực thi các Transaction từ Rust CLI hoặc từ web3js.
    • Trong tất cả các trường hợp trên, việc sử dụng macro msg! được khuyến khích tại thời điểm phát triển ban đầu, tuy nhiên cần xoá chúng một khi đã hoàn tất kiểm thử. Nên nhớ rằng msg! cũng tiêu tốn tài nguyên tính toán hay còn gọi là Compute Units. Program của bạn có thể bị lỗi một khi đạt đến giới hạn trần của Compute Unit.

    Những ví dụ ở các phần tiếp theo sẽ sử dụng solana-program-bpf-template. Vui lòng tải về máy bằng câu lệnh:

    git clone git@github.com:mvines/solana-bpf-program-template.git
    +    

    Soát lỗi chương trình trên Solana

    Có một vài lựa chọn và công cụ hỗ trợ cho việc kiểm thử và soát lỗi một chương trình trên Solana.

    Có thể bạn chưa biết

    Những điều có thể bạn chưa biết

    • Crate solana-program-test cho phép tạo nên một môi trường tiêu chuẩn local runtime để bạn có thể kiểm thử và soát lỗi chương trình một cách trực quan (ví dụ như trong vscode).
    • Crate solana-validator cho phép sử dụng solana-test-validator để chạy các bước kiểm thử một cách tin cậy trên local validator node. Bạn có thể chạy từ trình biên tập tuy nhiên các điểm dừng trong chương trình sẽ bị bỏ qua.
    • Công cụ CLI solana-test-validator giúp khởi chạy và tải Program cũng như thực thi các Transaction từ Rust CLI hoặc từ web3js.
    • Trong tất cả các trường hợp trên, việc sử dụng macro msg! được khuyến khích tại thời điểm phát triển ban đầu, tuy nhiên cần xoá chúng một khi đã hoàn tất kiểm thử. Nên nhớ rằng msg! cũng tiêu tốn tài nguyên tính toán hay còn gọi là Compute Units. Program của bạn có thể bị lỗi một khi đạt đến giới hạn trần của Compute Unit.

    Những ví dụ ở các phần tiếp theo sẽ sử dụng solana-program-bpf-template. Vui lòng tải về máy bằng câu lệnh:

    git clone git@github.com:mvines/solana-bpf-program-template.git
     cd solana-bpf-program-template
     code .
     

    Môi trường kiểm thử và soát lỗi trong trình biên tập

    Mở tệp src/lib.rs

    Bạn sẽ thấy ngay một Program khá đơn giản và chỉ in ra nội dụng nhận được từ điểm tiếp nhận chỉ thị: process_instruction

    1. Vào mục #[cfg(test)] và chọn Run Tests. Nó sẽ chạy trình biên dịch sau dó thực thi bài kiểm thử async fn test_transaction() ngay sau đó. Bạn sẽ thấy một thông báo đơn gian in ra ở cửa sổ lệnh (Terminal) của vscode như dưới:
    running 1 test
    @@ -48,6 +48,6 @@
     test test_validator_transaction ... ok
     test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 6.40s
     

    Soát lỗi ở đây sẽ cho phép bạn dò được các hàm, phương thức đã sử dụng trong nội dung bài kiểm thử ngoại trừ các điểm dừng được đánh dấu trong chương trình.

    Điều này có vẻ lời hơi phiền nhỉ!

    Kiểm thử bằng nốt Local Validator trên ứng dụng người dùng

    Cuối cùng, bạn có thể khởi chạy một nốt local validator và tải lên Program của bạn cũng như bất kỳ Account bằng câu của solana-test-validator.

    Bằng cách này, bạn sẽ cần một ứng dụng người dùng, hoặc là bằng Rust với RcpClient, hoặc là bằng ứng dụng JavaScript/Typescript

    Chạy solana-test-validator --help để hiểu thêm về các chi tiết cũng như tham số truyền vào. Ví dụ bên dưới là một cài đặt đơn giản nhất:

    1. Mở cửa sổ lệnh tại vị trí thử mục gốc của dự án
    2. Chạy solana config set -ul để trỏ cài đặt về môi trường địa phương
    3. Chạy solana-test-validator --bpf-program target/deploy/bpf_program_template-keypair.json target/deploy/bpf_program_template.so
    4. Mở một cửa sổ lệnh khác và chạysolana logs để bắt đầu theo dõi kết quả trả ra.
    5. Bạn có thể chạy ứng dụng người sau đó và quan sát kết quả đầu ra chửa chương trình bằng cửa sổ lệnh được khởi chạy ở bước 4

    Giờ đây bạn đã thành thạo mọi thứ rồi đấy!

    Các nguồn tài liệu khác

    solana-program-bpf-templateopen in new window

    RcpClientopen in new window

    JavaScript/Typescript Libraryopen in new window

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/vi/guides/feature-parity-testing.html b/docs/.vuepress/dist/vi/guides/feature-parity-testing.html index 1abc229f8..393b7cb81 100644 --- a/docs/.vuepress/dist/vi/guides/feature-parity-testing.html +++ b/docs/.vuepress/dist/vi/guides/feature-parity-testing.html @@ -23,7 +23,7 @@ } Đề xuất Kiểm thử Parity | Toàn tập Solana - + @@ -302,6 +302,6 @@ assert!(txn.is_ok()); }

    Chúc bạn có thời gian kiểm thử vui vẻ!

    Các nguồn tài liệu khác

    scfsdopen in new window

    gadget-scfsopen in new window

    - + diff --git a/docs/.vuepress/dist/vi/guides/get-program-accounts.html b/docs/.vuepress/dist/vi/guides/get-program-accounts.html index 628915e7c..9c9ba3720 100644 --- a/docs/.vuepress/dist/vi/guides/get-program-accounts.html +++ b/docs/.vuepress/dist/vi/guides/get-program-accounts.html @@ -23,11 +23,11 @@ } Đọc dữ liệu Program Account | Toàn tập Solana - + -

    Đọc Program Account

    getProgramAccounts là một phương thức RPC giúp lấy dữ liệu của tất cả các Account được sở hữu bởi Program. Lưu ý, phân trang vẫn chưa được hỗ trợ tại thời điểm hiện tại. Việc gọi getProgramAccounts nên có thêm các tham số dataSlice và/hoặc filters để cải thiện thời gian trả về với kết quả mong muốn.

    Có thể bạn chưa biết

    Tham số

    • programId: string - Khoá công khai của Program cần truy vấn và biểu diễn dưới dạng base58
    • (Tuỳ chọn) configOrCommitment: object - Tham số cài đặt có chứa các trường tuỳ chọn sau:
      • (Tuỳ chọn) commitment: string - State commitmentopen in new window
      • (Tuỳ chọn) encoding: string - Kiểu mã hoá dữ liệu, một trong các kiểu sau: base58, base64, jsonParsed. Lưu ý, người dùng web3js nên sử dụng getParsedProgramAccountsopen in new window
      • (Tuỳ chọn) dataSlice: object - Giới hạn các Account trả về dựa trên:
        • offset: number - Vị trí bắt đầu cho dữ liệu được trả về của Account
        • length: number - Độ dài dữ liệu của Account cần trả về và được tính từ vị trí bắt đầu
      • (Tuỳ chọn) filters: array - Lọc các kết quả bằng các sử dụng các bộ lọc sau:
        • memcmp: object - Lọc bằng cách so sánh một chuỗi dữ liệu dưới dạng các bytes với dữ liệu Account
          • offset: number - Vị trí bắt đầu trong dữ liệu Account dùng để so sánh
          • bytes: string - Dữ liệu cần so sánh, được truyền vào dưới dạng base58 và không quá 129 bytes
        • dataSize: number - Lọc theo độ lớn của dữ liệu Account
      • (Tuỳ chọn) withContext: boolean - Đóng gói kết quả vào một đối tượng RpcResponse JSONopen in new window
    Trả về

    Mặc định getProgramAccounts sẽ trả về một mảng các đối tượng JSON với cấu trúc như sau:

    • pubkey: string - Địa chỉ của Account và được mã hoá base58
    • account: object - Là một đối tượng JSON với các trường con như sau:
      • lamports: number, sô dư lamports của Account
      • owner: string, Địa chỉ của Program sở hữu Account và được mã hoá base58
      • data: string | object - Dữ liệu của Account và được biểu diễn dưới dạng, hoặc là binary, hoặc là JSON, tuỳ vào tham số encoding lúc truyền vào
      • executable: boolean, Nhãn đánh dấu nếu Account này chứa một Program và có thể thực thi
      • rentEpoch: number, Kỳ hạn thuê tiếp theo của Account

    Chi tiết

    getProgramAccounts là một phương thức RPC rất linh hoạt và có khả năng trả về tất cả các Account được sở hữu bởi một Program. Chúng ta có thể sử dụng getProgramAccounts cho nhiều loại truy vấn khác nhau, ví dụ như:

    • Tất cả các Account của một ví cụ thể
    • Tất cả các Account cho một mint (hoặc thường được gọi là token đối với các blockchain khác) (i.e. Tất cả người giữ token SRMopen in new window)
    • Tất cả các Account theo ý muốn của một Program cụ thể (i.e. Tất cả Account người dùng của ứng dụng Mangoopen in new window)

    Mặc dù hữu dụng là vậy, getProgramAccounts chỉ thường bị dùng sai vì các hạn chế hiện tại. Nhiều câu truy vấn được hỗ trợ bởi getProgramAccounts yêu cầu các nốt RPC phải quét một khối lượng rất lớn các dữ liệu. Những câu truy vấn như vậy không chỉ lớn về dung lượng dữ liệu và còn lớn về khối lượng tính toán. Tất yếu, việc gọi quá nhiều về cả tần suất và khối lượng dẫn đến kết nối sẽ bị ngắt. Ngoài ra, tại thời điểm cuốn sách được viết, getProgramAccounts vẫn chưa hỗ trợ phân trang. Nếu kết quả truy vấn quá lớn, nó sẽ được cắt bỏ đi.

    Để tránh các hạn chế này, getProgramAccounts giới thiệu các tham số dùng cho việc lọc và sơ chế kết quả, ví dụ như: dataSlice, filters với tuỳ chọn memcmpdataSize. Bằng cách kết hợp các tham số trên, chúng ta có thể giảm thiểu phạm vi truy vấn với kích thước dữ liệu được kiểm soát và dễ đoán hơn.

    Một ví dụ thường thấy của getProgramAccounts là tương tác với SPL-Token Programopen in new window. Truy vấn tất cả các Account được sở hữu bởi Token Program với một câu truy vấn thuần tuý không có lọc sẽ dẫn đến một số lượng dữ liệu trả về khổng lồ. Thay vào đó, bằng cách bổ sung các tham số, chúng ta có thể truy vấn một cách hiệu quả chỉ những dữ liệu mình cần.

    filters

    Tham số phổ biến nhất được dùng kèm với getProgramAccounts chính là mảng các filters. Mảng này chấp nhận 2 kiểu lọc là dataSizememcmp. Trước khi sử dụng một trong hai, chúng ta nên hiểu được dữ liệu cần truy vấn sẽ có chứa dữ liệu gì? hình thái ra sao? tuần tự hoá như thế nào?

    dataSize

    Trong trường hợp Token Program, chúng ta có thể thấy rằng độ dài của Token Account là 165 bytesopen in new window. Đặc biệt, một Token Account có 8 trường con, với mỗi trường có độ dài vùng nhớ biết trước. Chúng ta có thể mường tượng cách dữ liệu được sắp xếp bằng minh hoạ sau.

    Account Size

    Nếu chúng ta muốn tìm tất cả Token Account sở hữu bởi chỉ riêng ví của mình, chúng ta có thể thêm { dataSize: 165 }filters để thu hẹp pham vi câu truy vấn và chỉ lấy những Account có độ dài chính xác 165 bytes. Tuy vậy, nó vẫn là chưa đủ. Chúng ta cần thêm một điều kiện để chỉ lọc các Account được sở hữu bởi ví của mình. Để là được điều đó, chúng ta phải sử dụng memcmp.

    memcmp

    Điều kiện lọc memcmp, hoặc "memory comparison" (phép so sánh vùng nhớ), cho phép chúng ta so sánh dữ liệu truyền vào với bất kỳ vùng nhớ nào được lưu trong Account. Đặc biệt, chúng ta có thể truy vấn chỉ những Account mà khớp với một đoạn dữ liệu tại một vị trí cụ thể. memcmp yêu cầu 2 tham số:

    • offset: Vị trí bắt đầu để so sánh dữ liệu. Vị trí này thường được tính theo bytes và biễu diễn dưới dạng số nguyên.
    • bytes: Dữ liệu dùng để đối chiếu với dữ liệu trong Account. Dữ liệu này nên được biểu diễn dưới dạng base58 và không quá 129 bytes.

    Một điều quan trọng cần lưu ý là memcmp chỉ trả về các kết quả khớp chính xác trên từng bytes. Và hiện tại không hỗ trợ các phép so sánh lớn hơn hoặc nhỏ hơn cho bytes.

    Sử dụng lại ví dụ Token Program bên trên, chúng ta diều chỉnh câu truy vấn chỉ trả về những Token Account mà được sở hữu bởi chính mình. Khi nhìn vào một Token Account, chúng ta biết được 2 trường đầu tiên lưu trong Token Account là 2 khoá công khai với độ dài là 32 bytes. Biết rằng owner là trường thứ 2, chúng ta nên khởi tạo memcmp với offset là 32. Từ đó, chúng ta sẽ lọc được những Account của mình bằng cách truyền địa chỉ ví vào bytes.

    Account Size

    Chúng ta có thể gọi câu truy vấn này thông qua ví dụ sau:

    import { TOKEN_PROGRAM_ID } from "@solana/spl-token";
    +    

    Đọc Program Account

    getProgramAccounts là một phương thức RPC giúp lấy dữ liệu của tất cả các Account được sở hữu bởi Program. Lưu ý, phân trang vẫn chưa được hỗ trợ tại thời điểm hiện tại. Việc gọi getProgramAccounts nên có thêm các tham số dataSlice và/hoặc filters để cải thiện thời gian trả về với kết quả mong muốn.

    Có thể bạn chưa biết

    Tham số

    • programId: string - Khoá công khai của Program cần truy vấn và biểu diễn dưới dạng base58
    • (Tuỳ chọn) configOrCommitment: object - Tham số cài đặt có chứa các trường tuỳ chọn sau:
      • (Tuỳ chọn) commitment: string - State commitmentopen in new window
      • (Tuỳ chọn) encoding: string - Kiểu mã hoá dữ liệu, một trong các kiểu sau: base58, base64, jsonParsed. Lưu ý, người dùng web3js nên sử dụng getParsedProgramAccountsopen in new window
      • (Tuỳ chọn) dataSlice: object - Giới hạn các Account trả về dựa trên:
        • offset: number - Vị trí bắt đầu cho dữ liệu được trả về của Account
        • length: number - Độ dài dữ liệu của Account cần trả về và được tính từ vị trí bắt đầu
      • (Tuỳ chọn) filters: array - Lọc các kết quả bằng cách sử dụng các bộ lọc sau:
        • memcmp: object - Lọc bằng cách so sánh một chuỗi dữ liệu dưới dạng các bytes với dữ liệu Account
          • offset: number - Vị trí bắt đầu trong dữ liệu Account dùng để so sánh
          • bytes: string - Dữ liệu cần so sánh, được truyền vào dưới dạng base58 và không quá 129 bytes
        • dataSize: number - Lọc theo độ lớn của dữ liệu Account
      • (Tuỳ chọn) withContext: boolean - Đóng gói kết quả vào một đối tượng RpcResponse JSONopen in new window
    Trả về

    Mặc định getProgramAccounts sẽ trả về một mảng các đối tượng JSON với cấu trúc như sau:

    • pubkey: string - Địa chỉ của Account và được mã hoá base58
    • account: object - Là một đối tượng JSON với các trường con như sau:
      • lamports: number, số dư lamports của Account
      • owner: string, Địa chỉ của Program sở hữu Account và được mã hoá base58
      • data: string | object - Dữ liệu của Account và được biểu diễn dưới dạng, hoặc là binary, hoặc là JSON, tuỳ vào tham số encoding lúc truyền vào
      • executable: boolean, Nhãn đánh dấu nếu Account này chứa một Program và có thể thực thi
      • rentEpoch: number, Kỳ hạn thuê tiếp theo của Account

    Chi tiết

    getProgramAccounts là một phương thức RPC rất linh hoạt và có khả năng trả về tất cả các Account được sở hữu bởi một Program. Chúng ta có thể sử dụng getProgramAccounts cho nhiều loại truy vấn khác nhau, ví dụ như:

    • Tất cả các Account của một ví cụ thể
    • Tất cả các Account cho một mint (hoặc thường được gọi là token đối với các blockchain khác) (i.e. Tất cả người giữ token SRMopen in new window)
    • Tất cả các Account theo ý muốn của một Program cụ thể (i.e. Tất cả Account người dùng của ứng dụng Mangoopen in new window)

    Mặc dù hữu dụng là vậy, getProgramAccounts thường bị dùng sai vì các hạn chế hiện tại. Nhiều câu truy vấn được hỗ trợ bởi getProgramAccounts yêu cầu các nốt RPC phải quét một khối lượng rất lớn các dữ liệu. Những câu truy vấn như vậy không chỉ lớn về dung lượng dữ liệu và còn lớn về khối lượng tính toán. Tất yếu, việc gọi quá nhiều về cả tần suất và khối lượng dẫn đến kết nối sẽ bị ngắt. Ngoài ra, tại thời điểm cuốn sách được viết, getProgramAccounts vẫn chưa hỗ trợ phân trang. Nếu kết quả truy vấn quá lớn, nó sẽ được cắt bỏ đi.

    Để tránh các hạn chế này, getProgramAccounts giới thiệu các tham số dùng cho việc lọc và sơ chế kết quả, ví dụ như: dataSlice, filters với tuỳ chọn memcmpdataSize. Bằng cách kết hợp các tham số trên, chúng ta có thể giảm thiểu phạm vi truy vấn với kích thước dữ liệu được kiểm soát và dễ đoán hơn.

    Một ví dụ thường thấy của getProgramAccounts là tương tác với SPL-Token Programopen in new window. Truy vấn tất cả các Account được sở hữu bởi Token Program với một câu truy vấn thuần tuý không có lọc sẽ dẫn đến một số lượng dữ liệu trả về khổng lồ. Thay vào đó, bằng cách bổ sung các tham số, chúng ta có thể truy vấn một cách hiệu quả chỉ những dữ liệu mình cần.

    filters

    Tham số phổ biến nhất được dùng kèm với getProgramAccounts chính là mảng các filters. Mảng này chấp nhận 2 kiểu lọc là dataSizememcmp. Trước khi sử dụng một trong hai, chúng ta nên hiểu được dữ liệu cần truy vấn sẽ có chứa dữ liệu gì? hình thái ra sao? tuần tự hoá như thế nào?

    dataSize

    Trong trường hợp Token Program, chúng ta có thể thấy rằng độ dài của Token Account là 165 bytesopen in new window. Đặc biệt, một Token Account có 8 trường con, với mỗi trường có độ dài vùng nhớ biết trước. Chúng ta có thể mường tượng cách dữ liệu được sắp xếp bằng minh hoạ sau.

    Account Size

    Nếu chúng ta muốn tìm tất cả Token Account sở hữu bởi chỉ riêng ví của mình, chúng ta có thể thêm { dataSize: 165 }filters để thu hẹp pham vi câu truy vấn và chỉ lấy những Account có độ dài chính xác 165 bytes. Tuy vậy, nó vẫn là chưa đủ. Chúng ta cần thêm một điều kiện để chỉ lọc các Account được sở hữu bởi ví của mình. Để là được điều đó, chúng ta phải sử dụng memcmp.

    memcmp

    Điều kiện lọc memcmp, hoặc "memory comparison" (phép so sánh vùng nhớ), cho phép chúng ta so sánh dữ liệu truyền vào với bất kỳ vùng nhớ nào được lưu trong Account. Đặc biệt, chúng ta có thể truy vấn chỉ những Account mà khớp với một đoạn dữ liệu tại một vị trí cụ thể. memcmp yêu cầu 2 tham số:

    • offset: Vị trí bắt đầu để so sánh dữ liệu. Vị trí này thường được tính theo bytes và biểu diễn dưới dạng số nguyên.
    • bytes: Dữ liệu dùng để đối chiếu với dữ liệu trong Account. Dữ liệu này nên được biểu diễn dưới dạng base58 và không quá 129 bytes.

    Một điều quan trọng cần lưu ý là memcmp chỉ trả về các kết quả khớp chính xác trên từng bytes. Và hiện tại không hỗ trợ các phép so sánh lớn hơn hoặc nhỏ hơn cho bytes.

    Sử dụng lại ví dụ Token Program bên trên, chúng ta điều chỉnh câu truy vấn chỉ trả về những Token Account mà được sở hữu bởi chính mình. Khi nhìn vào một Token Account, chúng ta biết được 2 trường đầu tiên lưu trong Token Account là 2 khoá công khai với độ dài là 32 bytes. Biết rằng owner là trường thứ 2, chúng ta nên khởi tạo memcmp với offset là 32. Từ đó, chúng ta sẽ lọc được những Account của mình bằng cách truyền địa chỉ ví vào bytes.

    Account Size

    Chúng ta có thể gọi câu truy vấn này thông qua ví dụ sau:

    import { TOKEN_PROGRAM_ID } from "@solana/spl-token";
     import { clusterApiUrl, Connection } from "@solana/web3.js";
     
     (async () => {
    @@ -444,6 +444,6 @@
     #   "id": 1
     # }
     

    Vời việc kết hợp giữ 3 tham số (dataSlice, dataSize, và memcmp), chúng ta có thể giới hạn phạm vi truy vấn một cách hiệu quả với chỉ các kết quả trả về mà chúng ta quan tâm.

    Các nguồn tài liệu khác

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/vi/guides/retrying-transactions.html b/docs/.vuepress/dist/vi/guides/retrying-transactions.html index b59252252..872302928 100644 --- a/docs/.vuepress/dist/vi/guides/retrying-transactions.html +++ b/docs/.vuepress/dist/vi/guides/retrying-transactions.html @@ -23,11 +23,11 @@ } Thử lại Transaction | Toàn tập Solana - + -

    Thử lại Transaction

    Trong một vài tính huống, một Transaction trông có vể hợp lệ có thể bị hết hạn ngay trước khi được chấp nhận (thêm vào block). Điều đó thường diễn ra nhất là khi mạng lưới bị nghẽn và một nốt RPC không thể truyền Transaction đến leaderopen in new window. Dưới góc độ người dùng, bạn có thể nhận ra trường hợp này khi Transaction biến mất hoàn toàn. Trong khi các nốt RPC được trang bị một thuật toán lan truyền chung, ứng dụng của các lập trình viên vẫn có khả năng phát triển các luận lý lan truyền tuý chỉnh.

    Có thể bạn chưa biết

    Những điều có thể bạn chưa biết

    • Các nốt RPC sẽ thử lan truyền lại Transaction khi sử dụng một thuật toán chung
    • Ứng dụng riêng có thể hiện thực các luận lý lan truyền tuỳ chỉnh
    • Lập trình viên nên hiểu rõ tham số maxRetries của phương thức sendTransaction trong JSON-RPC.
    • Lập trình viên nên kích hoạt preflight để kiểm tra các tình huống lỗi trước khi gửi Transaction đi
    • Trước khi ký lại bất kỳ một Transaction nào, là rất quan trọng khi đảm bảo rằng blockhash của Transaction đã hết hạn

    Hành trình của một Transaction

    Làm thế nào để người dùng gửi Transactions

    Trong Solana, không tồn tại khái niệm mempool. Tất cả các Transaction, dù là được tạo nên từ các Program hay là từ người dùng, đều được điều hướng hiệu quả đến các leader để họ có thể xử lý và ghi nhận chúng vào block. Có 2 cách mà một Transaction có thể dược gửi đến các leader:

    1. Uỷ quyền cho các máy chủ RPC bằng phương thức sendTransactionopen in new window trong JSON-RPC.
    2. Gửi trực tiếp đến các leader thông qua TPU Clientopen in new window

    Phần lớn người dùng sẽ gửi Transaction thông qua máy chủ RPC. KHi một người dùng gửi Transaction đi, nốt RPC sẽ tiếp nhận và cố gắng truyền lần lượt các Transaction đến leader hiện tại cũng như leader tiếp theo. Cho đến khi Transaction được xử lý bởi một leader, sẽ không tồn tại bất kỳ bản sao nào của Transaction được lưu trữ ngoại trừ người dùng và các nốt RPC trung chuyển. Trong trường hợp TPU Client, quá trình lan truyền và điều hướng đến leader sẽ được xử lý toàn bộ bởi người dùng.

    Transaction Journey

    Làm thế nào để các nốt RPC lan truyền Transaction

    Ngay sau khi một nốt RPC tiếp nhận Transaction thông quá sendTransaction, nó sẽ chuyển Transaction đó thành một gói tin UDPopen in new window trước khi truyền đến các leader thích hợp. UDP cho phép validator có thể giao tiếp nhanh chóng với nhau, nhưng không đảm bảo gói tin có thể chắc chắn được chuyển đi đúng hướng.

    Bởi vì lịch trình của các leader trong Solana là biết trước cho mỗi epochopen in new window (~2 ngày), một nốt RPC will lan truyền Transaction của nó trực tiếp đến leader hiện tại cũng như tiếp sau. Điều này trái ngược với các giao thức gossip khác, ví dụ như Ethereum truyền Transaction một cách ngẫu nhiên và phủ khắp trên toàn mạng. Mặc định, các nốt RPC sẽ thử chuyển Transaction đến các leader cứ mỗi 2 giây cho để khi, hoặc Transaction thành công, hoặc blockhash của Transaction bị quá hạn (150 blocks hoặc ~1 phút 19 giây tại thời điểm viết bài). Nếu hàng đợi các Transaction cần được truyền đi lớn hơn 10,000 transactionsopen in new window, các Transaction đến sau sẽ bị từ chối. Để điều chỉnh cài đặt mặc định, tham khảo các tham số cho câu lệnh tại đâyopen in new window.

    Khi một nốt RPC lan truyền một Transaction, nó sẽ cố gắng chuyển Transaction đó để Transaction Processing Unit (TPU)open in new window của một leader.

    TPU xử lý các Transaction trong 5 pha riêng biệt:

    TPU OverviewHình ảnh được cho phép bởi Jito Labs

    Trong 5 pha này, Fetch Stage chịu trách nhiệm cho việc tiếp nhận Transaction. Trong phạm vi Fetch Stage, validator sẽ phân oại các Transaction mới đến dựa theo 3 cổng:

    • tpuopen in new window xử lý các Transaction bình thường như là chuyển token, tạo NFT, và các chỉ thị cho các Program
    • tpu_voteopen in new window tập trung hoàn toàn vào Transaction bỏ phiếu
    • tpu_forwardsopen in new window điều hướng các gói tin chưa xử lý đến các leader tiếp theo nếu leader hiện tại không đủ khả năng xử lý hết tất cả các Transaction

    Chi tiết hơn về TPU, vui lòng tham khảo bài viết rất xuất sắc của Jito Labsopen in new window.

    Khi nào các Transaction bị huỷ

    Xuyên suốt hành trình của một Transaction, luôn có một vài tình huống Transaction đó có thể bị làm mất một cách tình cờ do mạng.

    Trước khi Transaction được xử lý

    Nếu mạng làm mất một Transaction, khả năng gần như nó sẽ bị huỹ trước khi được xử lý bởi một leader. Mất gói tinopen in new window trong UDP là một nguyên nhân đơn giản nhất dẫn đến tình trạng trên. Trong thời gian mạng nghẽn, các validator có thể đã bị quá tải với số lượng khổng lồ các Transaction cần xử lý. Trong khi các validator được trang bị tpu_forwards để điều hướng các Transaction đến sau, thì vẫn luôn có một giới hạn số lượng các gói tin được điều hướngopen in new window. Hơn nữa, mỗi lần điều hướng sẽ bị giới hạn trong phạm vị một đơn vị kết nối (hop) giữa các validator. Bởi vậy mà các Transaction được nhận thông qua cổng tpu_forwards sẽ không bao giờ được điều hướng thêm cho các validator khác.

    Ngoài ra, cũng có 2 lý do được ghi nhận khác dẫn đến một Transaction bị đánh mất trước khi nó được xử lý. Trường hợp đầu tiên là những Transaction được gửi từ một RPC pool. Thi thoảng, một phần của RPC pool có thể đi nhanh hơn đáng kể phần còn lại của pool. Vấn đề này thường gặp khi các nốt trong pool cần làm việc kết hợp cùng nhau. Trong ví dụ này, recentBlockhashopen in new window của Transaction được truy vấn từ phần đi nhanh hơn của pool (Máy chủ A). Khi Transaction được gửi đến phần đi chậm của pool (Máy chủ B), các nốt này sẽ không nhận ra blockhash và sẽ vô hiệu hoá Transaction đó. Chúng ta có thể phát hiện lỗi này, nếu lập trình viên kích hoạt việc kiểm tra preflightopen in new window lúc gọi sendTransaction.

    Dropped via RPC Pool

    Một mạng bị rẽ nhánh tạm thời cũng có thể dẫn đến Transaction không hợp lệ. Nếu một validator bị chậm trong quá trình trung chuyển các block tại pha Banking Stage, rất có thể nó sẽ rẽ sang một nhánh thiểu số. Khi một Transaction được tạo, có khả năng Transaction tham chiếu đến recentBlockhash mà chỉ hợp lên trên nhánh thiểu số. Sau khi Transaction này được gửi đi, mạng lưới có thể nhảy về nhánh chính từ nhánh thiểu số trước khi Transaction được xử lý. Trong tình huống đó, Transaction sẽ không hợp lệ vì mạng không thể tìm thấy blockhash.

    Dropped due to Minority Fork (Before Processed)

    Sau khi Transaction được xử lý nhưnh trước khi được ghi vào block

    Trong trường hợp một Transaction tham chiếu recentBlockhash từ một nhánh thiểu số, nó vẫn có thể được xử lý bính thường. Tuy nhiên trong trường hợp đó, nó chỉ được tiếp nhận bởi leader trên nhánh thiểu số. Khi leader này cố gắng chia sẻ những Transaction mà nó đã xử lý với phần còn lại của mạng, lỗi đồng thuận sẽ xảy ra với phần cồng các validator khác đang duy trì trên nhánh chính và không hề nhận ra nhánh thiểu số. Lúc đó, Transaction sẽ bị xem là không hợp lên trước khi được đóng vào block.

    Dropped due to Minority Fork (After Processed)

    Xử trí với Transaction bị huỷ

    Trong khi các nốt RPC sẽ cố gắng lan truyền các Transaction, thuật toán được dùng thường chỉ đáp ứng các nhu cầu phổ biến và không tương thích với các nhu cầu đặt biệt. Để dự phòng trong tình huống mạng nghẽn, các lập trình viên sẽ phải tuỳ chỉnh thuật toán lan truyền trong ứng dụng của họ.

    Nghiên cứu sendTransaction

    Khi cần gửi Transaction, phương thức sendTransaction trong RPC là công cụ cơ bản nhất sẵn có cho lập trình viên. sendTransaction chỉ chịu trách nhiệm cho việc trung chuyển từ người dùng đến một nốt RPC. Nêys nốt đó nhận được Transaction, sendTransaction sẽ trả về id của Transaction và có thể dùng nó để theo dõi tiến độ của Transaction. Một phản hồi thành công từ RPC không đồng nghĩa với việc Transaction đó đã được tiếp nhận, xử lý và đóng vào một block trên mạng lưới Solana.

    TIP

    Tham số của Request

    • transaction: string - Transaction đã được ký dầy đủ và được mã hoá lại thành chuỗi ký tự
    • (optional) configuration object: object
      • skipPreflight: boolean - Nếu true, bỏ qua quá trình kiểm tra Transaction bằng preflight (Mặc định: false)
      • (optional) preflightCommitment: string - Cấp độ Commitmentopen in new window được dùng cho mô phỏng preflight trong ngân hàng chỗ trống (Mặc định: "finalized").
      • (optional) encoding: string - Mã hoá được dùng cho dữ liệu trong Transaction. Hoặc "base58" (chậm), hoặc "base64". (Mặc định: "base58").
      • (optional) maxRetries: usize - Số lượng tối đa lần thử lại cho nốt RPC gửi Transaction đến các leader. Nếu tham số này không được đề cập, nốt RPC sẽ thử lại cho đến khi Transaction thành công hoặc blockhash bị hết hạn.

    Response

    • transaction id: string - Chữ ký đầu tiên được nhúng vào trong Transaction. Id của transaction có thể dược dùng với getSignatureStatusesopen in new window để cập nhật trạng thái mới nhất của Transaction.

    Tuỳ chỉnh thuật toán lan truyền

    Để phát triển thuật toán lan truyền của riêng mình, lập trình viên cần hiểu rõ tham số maxRetries trong sendTransaction. Nếu được khai báo, maxRetries sẽ ghi đè lên giá trị mặc định của nốt RPC và cho phép lập trình viên điều khiển thử công quá trình thử lại trong phạm vi giới hạn hợp lýopen in new window.

    Một cài đặt phổ biến cho việc thử lại thủ công là tạm lưu lastValidBlockHeight được truy vấn từ getLatestBlockhashopen in new window. Sau khi lưu lại, một ứng dụng có thể theo dõi blockheight của mạng lướiopen in new window và lan truyền Transaction thủ công thông qua thuật toán tuỳ chỉnh. Có một vài ứng dụng sử dụng giải thuật exponential backoffopen in new window, thì một vài ứng dụng khác ví như Mangoopen in new window chọn liên tục tái gửiopen in new window Transaction với một khoảng thời gian lặp định trước cho đến khi quá hạn.

    Press </> button to view full source
    import {
    +    

    Thử lại Transaction

    Trong một vài tính huống, một Transaction trông có vẻ hợp lệ có thể bị hết hạn ngay trước khi được chấp nhận (thêm vào block). Điều đó thường diễn ra nhất là khi mạng lưới bị nghẽn và một nốt RPC không thể truyền Transaction đến leaderopen in new window. Dưới góc độ người dùng, bạn có thể nhận ra trường hợp này khi Transaction biến mất hoàn toàn. Trong khi các nốt RPC được trang bị một thuật toán lan truyền chung, ứng dụng của các lập trình viên vẫn có khả năng phát triển các luận lý lan truyền tuý chỉnh.

    Có thể bạn chưa biết

    Những điều có thể bạn chưa biết

    • Các nốt RPC sẽ thử lan truyền lại Transaction khi sử dụng một thuật toán chung
    • Ứng dụng riêng có thể hiện thực các luận lý lan truyền tuỳ chỉnh
    • Lập trình viên nên hiểu rõ tham số maxRetries của phương thức sendTransaction trong JSON-RPC.
    • Lập trình viên nên kích hoạt preflight để kiểm tra các tình huống lỗi trước khi gửi Transaction đi
    • Trước khi ký lại bất kỳ một Transaction nào, là rất quan trọng khi đảm bảo rằng blockhash của Transaction đã hết hạn

    Hành trình của một Transaction

    Làm thế nào để người dùng gửi Transactions

    Trong Solana, không tồn tại khái niệm mempool. Tất cả các Transaction, dù là được tạo nên từ các Program hay là từ người dùng, đều được điều hướng hiệu quả đến các leader để họ có thể xử lý và ghi nhận chúng vào block. Có 2 cách mà một Transaction có thể được gửi đến các leader:

    1. Uỷ quyền cho các máy chủ RPC bằng phương thức sendTransactionopen in new window trong JSON-RPC.
    2. Gửi trực tiếp đến các leader thông qua TPU Clientopen in new window

    Phần lớn người dùng sẽ gửi Transaction thông qua máy chủ RPC. Khi một người dùng gửi Transaction đi, nốt RPC sẽ tiếp nhận và cố gắng truyền lần lượt các Transaction đến leader hiện tại cũng như leader tiếp theo. Cho đến khi Transaction được xử lý bởi một leader, sẽ không tồn tại bất kỳ bản sao nào của Transaction được lưu trữ ngoại trừ người dùng và các nốt RPC trung chuyển. Trong trường hợp TPU Client, quá trình lan truyền và điều hướng đến leader sẽ được xử lý toàn bộ bởi người dùng.

    Transaction Journey

    Làm thế nào để các nốt RPC lan truyền Transaction

    Ngay sau khi một nốt RPC tiếp nhận Transaction thông qua sendTransaction, nó sẽ chuyển Transaction đó thành một gói tin UDPopen in new window trước khi truyền đến các leader thích hợp. UDP cho phép validator có thể giao tiếp nhanh chóng với nhau, nhưng không đảm bảo gói tin có thể chắc chắn được chuyển đi đúng hướng.

    Bởi vì lịch trình của các leader trong Solana là biết trước cho mỗi epochopen in new window (~2 ngày), một nốt RPC sẽ lan truyền Transaction của nó trực tiếp đến leader hiện tại cũng như tiếp sau. Điều này trái ngược với các giao thức gossip khác, ví dụ như Ethereum truyền Transaction một cách ngẫu nhiên và phủ khắp trên toàn mạng. Mặc định, các nốt RPC sẽ thử chuyển Transaction đến các leader cứ mỗi 2 giây cho để khi, hoặc Transaction thành công, hoặc blockhash của Transaction bị quá hạn (150 blocks hoặc ~1 phút 19 giây tại thời điểm viết bài). Nếu hàng đợi các Transaction cần được truyền đi lớn hơn 10,000 transactionsopen in new window, các Transaction đến sau sẽ bị từ chối. Để điều chỉnh cài đặt mặc định, tham khảo các tham số cho câu lệnh tại đâyopen in new window.

    Khi một nốt RPC lan truyền một Transaction, nó sẽ cố gắng chuyển Transaction đó để Transaction Processing Unit (TPU)open in new window của một leader.

    TPU xử lý các Transaction trong 5 pha riêng biệt:

    TPU OverviewHình ảnh được cho phép bởi Jito Labs

    Trong 5 pha này, Fetch Stage chịu trách nhiệm cho việc tiếp nhận Transaction. Trong phạm vi Fetch Stage, validator sẽ phân loại các Transaction mới đến dựa theo 3 cổng:

    • tpuopen in new window xử lý các Transaction bình thường như là chuyển token, tạo NFT, và các chỉ thị cho các Program
    • tpu_voteopen in new window tập trung hoàn toàn vào Transaction bỏ phiếu
    • tpu_forwardsopen in new window điều hướng các gói tin chưa xử lý đến các leader tiếp theo nếu leader hiện tại không đủ khả năng xử lý hết tất cả các Transaction

    Chi tiết hơn về TPU, vui lòng tham khảo bài viết rất xuất sắc của Jito Labsopen in new window.

    Khi nào các Transaction bị huỷ

    Xuyên suốt hành trình của một Transaction, luôn có một vài tình huống Transaction đó có thể bị làm mất một cách tình cờ do mạng.

    Trước khi Transaction được xử lý

    Nếu mạng làm mất một Transaction, khả năng gần như nó sẽ bị huỹ trước khi được xử lý bởi một leader. Mất gói tinopen in new window trong UDP là một nguyên nhân đơn giản nhất dẫn đến tình trạng trên. Trong thời gian mạng nghẽn, các validator có thể đã bị quá tải với số lượng khổng lồ các Transaction cần xử lý. Trong khi các validator được trang bị tpu_forwards để điều hướng các Transaction đến sau, thì vẫn luôn có một giới hạn số lượng các gói tin được điều hướngopen in new window. Hơn nữa, mỗi lần điều hướng sẽ bị giới hạn trong phạm vị một đơn vị kết nối (hop) giữa các validator. Bởi vậy mà các Transaction được nhận thông qua cổng tpu_forwards sẽ không bao giờ được điều hướng thêm cho các validator khác.

    Ngoài ra, cũng có 2 lý do được ghi nhận khác dẫn đến một Transaction bị đánh mất trước khi nó được xử lý. Trường hợp đầu tiên là những Transaction được gửi từ một RPC pool. Thi thoảng, một phần của RPC pool có thể đi nhanh hơn đáng kể phần còn lại của pool. Vấn đề này thường gặp khi các nốt trong pool cần làm việc kết hợp cùng nhau. Trong ví dụ này, recentBlockhashopen in new window của Transaction được truy vấn từ phần đi nhanh hơn của pool (Máy chủ A). Khi Transaction được gửi đến phần đi chậm của pool (Máy chủ B), các nốt này sẽ không nhận ra blockhash và sẽ vô hiệu hoá Transaction đó. Chúng ta có thể phát hiện lỗi này, nếu lập trình viên kích hoạt việc kiểm tra preflightopen in new window lúc gọi sendTransaction.

    Dropped via RPC Pool

    Một mạng bị rẽ nhánh tạm thời cũng có thể dẫn đến Transaction không hợp lệ. Nếu một validator bị chậm trong quá trình trung chuyển các block tại pha Banking Stage, rất có thể nó sẽ rẽ sang một nhánh thiểu số. Khi một Transaction được tạo, có khả năng Transaction tham chiếu đến recentBlockhash mà chỉ hợp lên trên nhánh thiểu số. Sau khi Transaction này được gửi đi, mạng lưới có thể nhảy về nhánh chính từ nhánh thiểu số trước khi Transaction được xử lý. Trong tình huống đó, Transaction sẽ không hợp lệ vì mạng không thể tìm thấy blockhash.

    Dropped due to Minority Fork (Before Processed)

    Sau khi Transaction được xử lý và trước khi được ghi vào block

    Trong trường hợp một Transaction tham chiếu recentBlockhash từ một nhánh thiểu số, nó vẫn có thể được xử lý bính thường. Tuy nhiên trong trường hợp đó, nó chỉ được tiếp nhận bởi leader trên nhánh thiểu số. Khi leader này cố gắng chia sẻ những Transaction mà nó đã xử lý với phần còn lại của mạng, lỗi đồng thuận sẽ xảy ra với phần cồng các validator khác đang duy trì trên nhánh chính và không hề nhận ra nhánh thiểu số. Lúc đó, Transaction sẽ bị xem là không hợp lên trước khi được đóng vào block.

    Dropped due to Minority Fork (After Processed)

    Xử trí với Transaction bị huỷ

    Trong khi các nốt RPC sẽ cố gắng lan truyền các Transaction, thuật toán được dùng thường chỉ đáp ứng các nhu cầu phổ biến và không tương thích với các nhu cầu đặc biệt. Để dự phòng trong tình huống mạng nghẽn, các lập trình viên sẽ phải tuỳ chỉnh thuật toán lan truyền trong ứng dụng của họ.

    Nghiên cứu sendTransaction

    Khi cần gửi Transaction, phương thức sendTransaction trong RPC là công cụ cơ bản nhất sẵn có cho lập trình viên. sendTransaction chỉ chịu trách nhiệm cho việc trung chuyển từ người dùng đến một nốt RPC. Nếu nốt đó nhận được Transaction, sendTransaction sẽ trả về id của Transaction và có thể dùng nó để theo dõi tiến độ của Transaction. Một phản hồi thành công từ RPC không đồng nghĩa với việc Transaction đó đã được tiếp nhận, xử lý và đóng vào một block trên mạng lưới Solana.

    TIP

    Tham số của Request

    • transaction: string - Transaction đã được ký đầy đủ và được mã hoá lại thành chuỗi ký tự
    • (optional) configuration object: object
      • skipPreflight: boolean - Nếu true, bỏ qua quá trình kiểm tra Transaction bằng preflight (Mặc định: false)
      • (optional) preflightCommitment: string - Cấp độ Commitmentopen in new window được dùng cho mô phỏng preflight trong ngân hàng chỗ trống (Mặc định: "finalized").
      • (optional) encoding: string - Mã hoá được dùng cho dữ liệu trong Transaction. Hoặc "base58" (chậm), hoặc "base64". (Mặc định: "base58").
      • (optional) maxRetries: usize - Số lượng tối đa lần thử lại cho nốt RPC gửi Transaction đến các leader. Nếu tham số này không được đề cập, nốt RPC sẽ thử lại cho đến khi Transaction thành công hoặc blockhash bị hết hạn.

    Response

    • transaction id: string - Chữ ký đầu tiên được nhúng vào trong Transaction. Id của transaction có thể được dùng với getSignatureStatusesopen in new window để cập nhật trạng thái mới nhất của Transaction.

    Tuỳ chỉnh thuật toán lan truyền

    Để phát triển thuật toán lan truyền của riêng mình, lập trình viên cần hiểu rõ tham số maxRetries trong sendTransaction. Nếu được khai báo, maxRetries sẽ ghi đè lên giá trị mặc định của nốt RPC và cho phép lập trình viên điều khiển thủ công quá trình thử lại trong phạm vi giới hạn hợp lýopen in new window.

    Một cài đặt phổ biến cho việc thử lại thủ công là tạm lưu lastValidBlockHeight được truy vấn từ getLatestBlockhashopen in new window. Sau khi lưu lại, một ứng dụng có thể theo dõi blockheight của mạng lướiopen in new window và lan truyền Transaction thủ công thông qua thuật toán tuỳ chỉnh. Có một vài ứng dụng sử dụng giải thuật exponential backoffopen in new window, thì một vài ứng dụng khác ví như Mangoopen in new window chọn liên tục tái gửiopen in new window Transaction với một khoảng thời gian lặp định trước cho đến khi quá hạn.

    Press </> button to view full source
    import {
       Keypair,
       Connection,
       LAMPORTS_PER_SOL,
    @@ -89,6 +89,6 @@
       blockheight = await connection.getBlockHeight();
     }
     

    Khi gọi getLatestBlockhash, ứng dụng nên chỉ rõ mức commitmentopen in new window mong muốn. Bằng cách đặt commitment là confirmed (đã được bỏ phiếu chọn) hoặc finalized (~30 block sau khi confirmed), ứng dụng có thể tránh được trường hợp đọc blockhash từ một nhánh rẽ thiểu số.

    Nếu một ứng dụng truy cập vào những nốt RPC thông qua một máy chủ cân bằng tải, nó có lựa chọn các nốt cụ thể để chia nhỏ tải lượng. Các nốt RPC đáp ứng các yêu cầu thiên về dữ liệu như là getProgramAccounts có thể dễ bị quá tải và bị đồng bộ chậm, cũng như là không thích hợp cho việc điều hướng Transaction. Với những ứng dụng đòi hỏi thời gian đáp ứng Transaction nhanh, nên có một máy chủ chuyên để xử lý duy nhất cho sendTransaction.

    Cân nhắc khi bỏ qua Preflight

    Mặc định, sendTransaction sẽ thực hiện preflight kiểm tra 3 bước trước khi gửi Transaction đó đi. Cụ thể, sendTransaction sẽ:

    • Xác nhận tất cả các chữ ký là hợp lệ
    • Kiểm tra blockhash được tham chiếu có nằm trong phạm vi 150 block không
    • Chạy giải lập transaction trong ngân hàng chỗ trống được định nghĩa bởi preflightCommitment.

    Nếu một trong 3 bước trên bị lỗi, sendTransaction sẽ đẩy ra lỗi trước khi gửi transaction đi. Kiểm tra preflight sẽ không đảm bảo các trường hợp mất transaction hoặc là cho phép người dùng xử lý lỗi. Thay vào đó nó đảm bảo các lỗi cơ bản sẽ được kiểm tra trước và khuyến khích các lập trình viên nên giữ nó lại bằng cách gán false cho skipPreflight.

    Khi nào nên tái ký transaction

    Dù cho tất cả nỗ lực gửi lại, thì vẫn có một xác suất mà người dùng bị yêu cầu ký lại transaction đó. Trước khi tái ký bất kỳ một transaction nào, bạn cần đảm bảo rằng transaction trước đó đã hết hạn đối với blockhash. Nếu transaction vẫn còn hiệu lực, cả hai transaction có thể sẽ được xử lý bởi mạng lưới. Điều tương tự cũng có thể xảy ra trong trường hợp người dùng không may gửi 2 lần với 2 transaction giống nhau.

    Trong Solana, một transaction được xem là đã vô hiệu hoá và an toàn khi giá trị blockhash được tham chiếu đã quá hạn so với lastValidBlock trả về từ hàm getRecentBlockhash. Lập trình viên có thể kiểm tra nhanh chóng giá trị blockhash thông qua hàm isBlockhashValidopen in new window. Một khi blockhash đã quá hạn, người dùng có thể tái ký trên giá trị blockhash mới và hợp lệ.

    Lời cảm ơn

    Rất cảm ơn Trent Nelson, Jacob Creechopen in new window, White Tiger, Le Yafo, Buffaluopen in new window, và Jito Labsopen in new window vì đã đọc và góp ý cho bài viết.

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/vi/guides/serialization.html b/docs/.vuepress/dist/vi/guides/serialization.html index 8ce043b11..1b6856c36 100644 --- a/docs/.vuepress/dist/vi/guides/serialization.html +++ b/docs/.vuepress/dist/vi/guides/serialization.html @@ -23,7 +23,7 @@ } Tuần tự hoá dữ liệu | Toàn tập Solana - + @@ -253,10 +253,11 @@ }
    from borsh_construct import String, CStruct, U8
     from enum import IntEnum
    -from solana.rpc.types import RPCResponse
    -from solana.transaction import Transaction, TransactionInstruction, AccountMeta
    -from solana.publickey import PublicKey
    -from solana.keypair import Keypair
    +from solana.transaction import Transaction
    +from solders.pubkey import Pubkey
    +from solders.keypair import Keypair
    +from solders.instruction import Instruction, AccountMeta
    +from solders.rpc.responses import SendTransactionResp
     from solana.rpc.api import Client
     
     
    @@ -279,12 +280,12 @@
     
     def mint_kv(
         client: Client,
    -    program_pk: PublicKey,
    -    account_pk: PublicKey,
    +    program_pk: Pubkey,
    +    account_pk: Pubkey,
         wallet_kp: Keypair,
         mint_key: str,
         mint_value: str,
    -) -> RPCResponse:
    +) -> SendTransactionResp:
         """Mint with a key/value pair to an account"""
         # Construct the program payload for Mint invariant
         payload_ser = construct_payload(InstructionVariant.MINT, mint_key, mint_value)
    @@ -300,13 +301,13 @@
     
         # Construct the transaction with instructionVariant
         txn = Transaction().add(
    -        TransactionInstruction(
    -            [AccountMeta(account_pk, False, True)], program_pk, payload_ser
    +        Instruction(
    +            accounts=[AccountMeta(account_pk, False, True)], program_id=program_pk, data=payload_ser
             )
         )
         return client.send_transaction(txn, wallet_kp)
         # => {'jsonrpc': '2.0', 'result': '4ZdpWNdovdVaLextWSiqEBWp67k9rNTTUaX3qviHDXWY9c98bVtaRt5sasPhYzMVXHqhex78gzNKytcBnVH5CSTZ', 'id': 2}
    -
    
    +
    
     /// Instruction payload gets serialized
     #[derive(BorshSerialize)]
     pub struct Payload<'a> {
    @@ -477,7 +478,7 @@
             }
         }
     }
    -

    Tuần tự hoá và Phi tuần tự hoá

    Để hoàn thành các hàm tuần tự và phi tuần tự hoá cơ sở:

    1. sol_template_shared::pack_into_slice - Điểm thực sự diễn ra quá trình tuần tự hoá
    2. sol_template_shared::unpack_from_slice - Điểm thực sự diễn ra quá trình phi tuần tự hoá

    Lưu ý rằng trong code mẫu bên dưới, chúng ta có một vùng nhớ 4 bytes cho u32 dành cho BTREE_LENGTH ngay trước BTREE_STORAGE. Việc này giúp Borsh, trong quá trình phi tuần tự hoá, có thể kiểm tra độ lớn của vùng nhớ mà nó cần phải trích xuất để xử lý, cũng như tái tạo lại đối tượng đã được tuần tự hoá trước đây. Phương pháp này được minh hoạ bên dưới khi mà BTREE_LENGTH được đọc trước tiên nhắm lấy được kích thước của slice ra khỏi con trỏ BTREE_STROAGE.

    use {
    +

    Tuần tự hoá và Phi tuần tự hoá

    Để hoàn thành các hàm tuần tự và phi tuần tự hoá cơ sở:

    1. sol_template_shared::pack_into_slice - Điểm thực sự diễn ra quá trình tuần tự hoá
    2. sol_template_shared::unpack_from_slice - Điểm thực sự diễn ra quá trình phi tuần tự hoá

    Lưu ý rằng trong code mẫu bên dưới, chúng ta có một vùng nhớ 4 bytes cho u32 dành cho BTREE_LENGTH ngay trước BTREE_STORAGE. Việc này giúp Borsh, trong quá trình phi tuần tự hoá, có thể kiểm tra độ lớn của vùng nhớ mà nó cần phải trích xuất để xử lý, cũng như tái tạo lại đối tượng đã được tuần tự hoá trước đây. Phương pháp này được minh hoạ bên dưới khi mà BTREE_LENGTH được đọc trước tiên nhằm lấy được kích thước của slice ra khỏi con trỏ BTREE_STROAGE.

    use {
         arrayref::*,
         borsh::{BorshDeserialize, BorshSerialize},
         solana_program::program_memory::sol_memcpy,
    @@ -632,10 +633,9 @@
       let nameAccount = await connection.getAccountInfo(account, "processed");
       return deserializeUnchecked(dataSchema, AccoundData, nameAccount.data);
     }
    -
    import base64
    -from borsh_construct import CStruct, U8, U32, HashMap, String
    +
    from borsh_construct import CStruct, U8, U32, HashMap, String
     from solana.rpc.commitment import Confirmed
    -from solana.publickey import PublicKey
    +from solders.pubkey import Pubkey
     from solana.rpc.api import Client
     
     
    @@ -647,14 +647,10 @@
     )
     
     
    -def get_account_info(client: Client, account_pk: PublicKey):
    +def get_account_info(client: Client, account_pk: Pubkey):
         """Fetch account information from RPC, parse out the data and deserialize"""
         res = client.get_account_info(account_pk, Confirmed, encoding='base64')
    -    data = res['result']
    -    if isinstance(data, dict):
    -        return account_schema.parse(base64.urlsafe_b64decode(data['value']['data'][0]))
    -    else:
    -        raise AttributeError(f'Unknown RPC result {data}')
    +    return account_schema.parse(res.value.data)
     
     # Results in or similar
     # => Container:
    @@ -662,7 +658,7 @@
     # =>     map_length = 109
     # =>     map = {'Happy': 'New Year!', 'newKey': 'A new value',
     # =>            'python key': 'python value', 'ts key': 'ts first value'}
    -
    use {
    +
    use {
         arrayref::*,
         borsh::{BorshDeserialize, BorshSerialize},
         std::{collections::BTreeMap, error::Error},
    @@ -766,8 +762,7 @@
     }
     
     entry();
    -
    import base64
    -from borsh_construct import U8, U16, U32, String, HashMap
    +
    from borsh_construct import U8, U16, U32, String, HashMap
     
     # Schema to deserialize various types
     primitive_schema = CStruct(
    @@ -811,7 +806,7 @@
         # =>        4
         # =>        5
         # =>    MAP_STRING_STRING = {'cookbook': 'recipe', 'recipe': 'ingredient'}
    -
    fn main() {}
    +
    fn main() {}
     
     #[cfg(test)]
     mod tests {
    @@ -840,7 +835,7 @@
             println!("{:?}", x);
         }
     }
    -

    Kiểu dữ liệu nâng cao

    Chúng ta đã đi qua nội dung cơ bản ở các ví dụ trước. Nhưng ngoài ra, Solana còn có một vài kiểu dự liệu tự định nghĩa khác. Trong phần này, chúng ta tìm hiểu qua các xử lý chúng bằng TS/JS và Rust.

    COption

    #!/usr/bin/env node
    +

    Kiểu dữ liệu nâng cao

    Chúng ta đã đi qua nội dung cơ bản ở các ví dụ trước. Nhưng ngoài ra, Solana còn có một vài kiểu dữ liệu tự định nghĩa khác. Trong phần này, chúng ta tìm hiểu qua các xử lý chúng bằng TS/JS và Rust.

    COption

    #!/usr/bin/env node
     
     import { serialize, deserialize, deserializeUnchecked } from "borsh";
     import { Buffer } from "buffer";
    @@ -1021,6 +1016,6 @@
         }
     }
     

    Các nguồn tài liệu khác

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/vi/index.html b/docs/.vuepress/dist/vi/index.html index 1c11d144d..2ec80e3e8 100644 --- a/docs/.vuepress/dist/vi/index.html +++ b/docs/.vuepress/dist/vi/index.html @@ -23,11 +23,11 @@ } Nhập môn Solana | Toàn tập Solana - +

    Nhập môn Solana

    Cuốn sách Toàn tập Solana là một tài liệu lập trình hướng đến việc cung cấp nhưng khái niệm căn bản và tài liệu tham khảo cho quá trình xây dựng ứng dụng trên Solana. Mỗi khái niệm hoặc tài liệu tham khảo không những tập trung vào những khía cạnh cụ thể trên Solana, mà còn cung cấp các chi tiết giảng giải cũng như ví dụ mẫu cho lập trình viên.

    Đóng góp

    Toàn tập Solana được thiết kế sao cho các lập trình viên mới trên Solana cũng có thể dễ dàng tham gia đóng góp và xây dựng. Ngay cả khi bạn chưa có ý tưởng nào cho các sản phẩm cá nhân hoặc tổ chức của bạn, tham gia góp ý cũng là một cách rất hay để bạn có thể trau dồi.

    Xem qua tất cả các đóng góp tại đâyopen in new window. Cách thức góp ý được trình bày tại đâyopen in new window. Nếu bạn cảm thấy Toàn tập Solana đang thiếu sót ở bất kỳ điểm nào, vui lòng tạo mới một góp ý thông qua các đường dẫn bên trên.

    Cấu trúc của Toàn tập Solana

    Toàn tập Solana được chia thành các mục cụ thể, và ở mỗi mục sẽ trình bày, giải thích các mục tiêu khác nhau.

    MụcMục tiêu
    Khái niệm căn bảnXây dựng các khối cơ sở của Solana cần thiết cho quá trình phát triển ứng dụng
    Hướng dẫnCác hướng dẫn nhanh về bộ công cụ hữu ích cho quá trình phát triển ứng dụng
    Tham khảoCác mẫu code thường gặp trong quá trình phát triển ứng dụng

    Lời của dịch giả

    Phiên bản Tiếng Việt của Toàn tập Solana được dịch lại từ phiên bản Tiếng Anh - Solana Cookbookopen in new window bởi Sentre Protocolopen in new window. Vì đây là một tài liệu kỹ thuật nên để đảm bảo tính nhất quán, một số thuật ngữ chuyên ngành sẽ được giữ nguyên và không được dịch sang các từ thay thế ở Tiếng Việt. Ngoài ra, một số hình minh hoạ có thể được cập nhật chậm và vẫn phải dùng hình ảnh gốc ở bản Tiếng Anh. Hi vọng bạn đọc thông cảm và có thời gian học tập vui vẻ. Chúc cộng đồng Solana Việt Nam ngày càng phát triển về chất và lượng.

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/vi/integrations/index.html b/docs/.vuepress/dist/vi/integrations/index.html index 7c7bed47d..a7e3a7df2 100644 --- a/docs/.vuepress/dist/vi/integrations/index.html +++ b/docs/.vuepress/dist/vi/integrations/index.html @@ -23,11 +23,11 @@ } Getting Started | Toàn tập Solana - +

    Getting Started with Integrations

    The Solana Cookbook integrations provides a set of examples and references for anyone to build on top of other protocols on Solana.

    The power of Solana comes from the ability to integrate with other protocols, building on top of existing infrastructure to make something better.

    Composability is Key

    Making your program easy to use and extend will grow both your program and the entire Solana ecosystem. Don't reinvent the wheel, build on top of existing protocols and bootstrap your userbase.

    Adapt and build on top of other programs or libraries and unlock new capabilities for Solana.

    Contributing

    If you are interested in contributing to integrations, please checkout the contribution guidelinesopen in new window.

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/vi/integrations/jupiter.html b/docs/.vuepress/dist/vi/integrations/jupiter.html index 2e15eb8f4..4f6a025f6 100644 --- a/docs/.vuepress/dist/vi/integrations/jupiter.html +++ b/docs/.vuepress/dist/vi/integrations/jupiter.html @@ -23,7 +23,7 @@ } Jupiter | Toàn tập Solana - + @@ -595,6 +595,6 @@ skipPreflight: false, });

    Other Resources

    - + diff --git a/docs/.vuepress/dist/vi/integrations/mango.html b/docs/.vuepress/dist/vi/integrations/mango.html index 09ff2af9e..f9b0bfdb9 100644 --- a/docs/.vuepress/dist/vi/integrations/mango.html +++ b/docs/.vuepress/dist/vi/integrations/mango.html @@ -23,7 +23,7 @@ } Mango Markets | Toàn tập Solana - + @@ -367,6 +367,6 @@ })();

    Other Resources

    - + diff --git a/docs/.vuepress/dist/vi/integrations/pyth.html b/docs/.vuepress/dist/vi/integrations/pyth.html index b45f3bca9..d381f1bd0 100644 --- a/docs/.vuepress/dist/vi/integrations/pyth.html +++ b/docs/.vuepress/dist/vi/integrations/pyth.html @@ -23,7 +23,7 @@ } Pyth | Toàn tập Solana - + @@ -103,6 +103,6 @@ let pyth_price_data = &pyth_price_info.try_borrow_data()?; let price_account: Price = *load_price(pyth_price_data).unwrap();

    Other Resources

    - + diff --git a/docs/.vuepress/dist/vi/integrations/react-native.html b/docs/.vuepress/dist/vi/integrations/react-native.html index 3e12dca2b..3a6c534a9 100644 --- a/docs/.vuepress/dist/vi/integrations/react-native.html +++ b/docs/.vuepress/dist/vi/integrations/react-native.html @@ -23,11 +23,11 @@ } - +
    - + diff --git a/docs/.vuepress/dist/vi/integrations/serum.html b/docs/.vuepress/dist/vi/integrations/serum.html index 6750b0ee5..809fa143c 100644 --- a/docs/.vuepress/dist/vi/integrations/serum.html +++ b/docs/.vuepress/dist/vi/integrations/serum.html @@ -23,7 +23,7 @@ } Serum | Toàn tập Solana - + @@ -105,6 +105,6 @@ })(); - + diff --git a/docs/.vuepress/dist/vi/integrations/strata.html b/docs/.vuepress/dist/vi/integrations/strata.html index 30a02de56..beff6fc8e 100644 --- a/docs/.vuepress/dist/vi/integrations/strata.html +++ b/docs/.vuepress/dist/vi/integrations/strata.html @@ -23,7 +23,7 @@ } Strata | Toàn tập Solana - + @@ -150,6 +150,6 @@ }, });

    Other Resources

    - + diff --git a/docs/.vuepress/dist/vi/integrations/switchboard.html b/docs/.vuepress/dist/vi/integrations/switchboard.html index 089c290a7..972b54eb1 100644 --- a/docs/.vuepress/dist/vi/integrations/switchboard.html +++ b/docs/.vuepress/dist/vi/integrations/switchboard.html @@ -23,7 +23,7 @@ } Switchboard | Toàn tập Solana - + @@ -169,8 +169,8 @@ use super::*; pub fn get_result(ctx: Context<GetResult>) -> Result<()> { - let aggregator = &ctx.accounts.aggregator_feed; - let val: f64 = AggregatorAccountData::new(aggregator)? + let aggregator = &ctx.accounts.aggregator_feed.load()?; + let val:f64 = aggregator .get_result()? .try_into()?; @@ -184,12 +184,12 @@ pub struct GetResult<'info> { pub authority: Signer<'info>, /// CHECK: field is unsafe - pub aggregator_feed: AccountInfo<'info>, // pass aggregator key + pub aggregator_feed: AccountLoader<'info, AggregatorAccountData>, // pass aggregator key } -

    How to Create a Feed from the Publisher

    The official Switchboard documentation has an in-depth walk-through of how to create a feed from the publisher. Check it out hereopen in new window.

    Oracles

    Switchboard's unique feature is that it allows you to create your own oracle and run it locally.

    Create an oracle

    Press </> button to view full source
    import * as anchor from "@project-serum/anchor";
     import { Keypair } from "@solana/web3.js";
     import {
    @@ -536,6 +536,6 @@
         state_seeds,
     )?;
     

    Resources

    APIs and Libraries

    Examples

    More Information

    - + diff --git a/docs/.vuepress/dist/vi/integrations/web3auth.html b/docs/.vuepress/dist/vi/integrations/web3auth.html index dfa4bcd06..da9946578 100644 --- a/docs/.vuepress/dist/vi/integrations/web3auth.html +++ b/docs/.vuepress/dist/vi/integrations/web3auth.html @@ -23,7 +23,7 @@ } web3Auth (Torus Wallet) | Toàn tập Solana - + @@ -113,6 +113,6 @@ })();

    Resources

    - + diff --git a/docs/.vuepress/dist/vi/references/accounts.html b/docs/.vuepress/dist/vi/references/accounts.html index 25616419c..71826d300 100644 --- a/docs/.vuepress/dist/vi/references/accounts.html +++ b/docs/.vuepress/dist/vi/references/accounts.html @@ -23,7 +23,7 @@ } Accounts | Toàn tập Solana - + @@ -998,7 +998,7 @@ programId: programId, }) ); -

    Làm thế nào để truy vấn số dư của một account

    Press </> button to view full source
    import {
    +

    Làm thế nào để truy vấn số dư của một account

    Press </> button to view full source
    import {
       clusterApiUrl,
       Connection,
       PublicKey,
    @@ -1034,22 +1034,47 @@
         );
     }
     
    from solana.publickey import Keypair
    +
    from solders.keypair import Keypair
     from solana.rpc.api import Client
     
     client = Client("https://api.devnet.solana.com")
     
     key_pair = Keypair()
    -public_key = key_pair.public_key
    +public_key = key_pair.pubkey()
     
     print(client.get_balance(public_key))
     
    // clang++ get_balance.cpp -o get_balance -std=c++17 -lssl -lcrypto -lsodium
    +
    +#include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +  Connection connection("https://api.devnet.solana.com");
    +
    +  auto key_pair = Keypair::generate();
    +
    +  auto public_key = key_pair.public_key;
    +  std::cout << "public_key = " << public_key.to_base58() << std::endl;
    +
    +  uint64_t balance = connection.get_balance(public_key).unwrap();
    +  std::cout << "balance = " << balance << std::endl;
    +
    +  return 0;
    +}
    +

    TIP

    Nếu bạn muốn đọc số dư token, bạn sẽ cần biết địa chỉ của token account. Tham khảo Token References để hiểu rõ.

    - + diff --git a/docs/.vuepress/dist/vi/references/basic-transactions.html b/docs/.vuepress/dist/vi/references/basic-transactions.html index 46c31506a..6fac67ce1 100644 --- a/docs/.vuepress/dist/vi/references/basic-transactions.html +++ b/docs/.vuepress/dist/vi/references/basic-transactions.html @@ -23,7 +23,7 @@ } Gửi Transaction | Toàn tập Solana - + @@ -76,31 +76,31 @@ await sendAndConfirmTransaction(connection, transferTransaction, [fromKeypair]);
    from solana.rpc.api import Client
    -from solana.keypair import Keypair
    +from solders.keypair import Keypair
     from solana.transaction import Transaction
    -from solana.system_program import TransferParams, transfer
    +from solders.system_program import TransferParams, transfer
     
     LAMPORT_PER_SOL = 1000000000
     
     client: Client = Client("https://api.devnet.solana.com")
     
    -sender = Keypair.generate()
    -receiver = Keypair.generate()
    +sender = Keypair()
    +receiver = Keypair()
     
    -airdrop = client.request_airdrop(sender.public_key, 1 * LAMPORT_PER_SOL)
    -airdrop_signature = airdrop["result"]
    +airdrop = client.request_airdrop(sender.pubkey(), 1 * LAMPORT_PER_SOL)
    +airdrop_signature = airdrop.value
     client.confirm_transaction(airdrop_signature)
     
     transaction = Transaction().add(transfer(TransferParams(
    -    from_pubkey=sender.public_key,
    -    to_pubkey=receiver.public_key,
    +    from_pubkey=sender.pubkey(),
    +    to_pubkey=receiver.pubkey(),
         lamports=1_000_000)
     ))
     
     client.send_transaction(transaction, sender)
     
    - + diff --git a/docs/.vuepress/dist/vi/references/keypairs-and-wallets.html b/docs/.vuepress/dist/vi/references/keypairs-and-wallets.html index f523b1887..b87c56bc0 100644 --- a/docs/.vuepress/dist/vi/references/keypairs-and-wallets.html +++ b/docs/.vuepress/dist/vi/references/keypairs-and-wallets.html @@ -23,7 +23,7 @@ } Cặp khoá và Ví | Toàn tập Solana - + @@ -33,7 +33,7 @@ let keypair = Keypair.generate(); })();
    from solana.keypair import Keypair
    +
    from solders.keypair import Keypair
     
     keypair = Keypair()
     

    Làm thế nào để phục hồi một Cặp khoá từ khoá riêng tư

    Nếu bạn đã có khoá riêng tư, bạn có thể phục hồi lại cặp khoá từ khoá riêng tư đó và dùng nố để kết nối với dApp của bạn.

    1. Từ Bytes
    Press </> button to view full source
    import { Keypair } from "@solana/web3.js";
    +

    Làm thế nào để phục hồi một Cặp khoá từ khoá riêng tư

    Nếu bạn đã có khoá riêng tư, bạn có thể phục hồi lại cặp khoá từ khoá riêng tư đó và dùng nố để kết nối với dApp của bạn.

    1. Từ Bytes
    Press </> button to view full source
    import { Keypair } from "@solana/web3.js";
     
     (async () => {
       const keypair = Keypair.fromSecretKey(
    @@ -67,7 +67,7 @@
         121, 35, 172, 247, 68, 251, 226, 218, 48, 63, 176, 109, 168, 89, 238, 135,
       ])
     );
    -
    from solana.keypair import Keypair
    +
    from solders.keypair import Keypair
     
     secret_key= [
             174, 47, 154, 16, 202, 193, 206, 113, 199, 190, 53, 133, 169, 175, 31, 56, 222, 53, 138,
    @@ -76,8 +76,8 @@
             63, 176, 109, 168, 89, 238, 135,
         ]
         
    -keypair = Keypair.from_secret_key(bytes(secret_key))
    -print("Created Keypair with Public Key: {}".format(keypair.public_key))
    +keypair = Keypair.from_bytes(secret_key)
    +print("Created Keypair with Public Key: {}".format(keypair.pubkey()))
     
    use solana_sdk::signature::{Keypair, Signer};
    +keypair = Keypair.from_bytes(secret_key)
    +
    // clang++ keypair_from_seed.cpp -o keypair_from_seed -std=c++17 -lssl -lcrypto -lsodium
    +
    +#include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +  const uint8_t bytes[] = {
    +    174, 47, 154, 16, 202, 193, 206, 113, 199, 190, 53, 133, 169, 175, 31, 56, 222, 53, 138,
    +    189, 224, 216, 117, 173, 10, 149, 53, 45, 73, 251, 237, 246, 15, 185, 186, 82, 177, 240,
    +    148, 69, 241, 227, 167, 80, 141, 89, 240, 121, 121, 35, 172, 247, 68, 251, 226, 218, 48,
    +    63, 176, 109, 168, 89, 238, 135,
    +  };
    +  Keypair key_pair = Keypair::from_seed(bytes);
    +  std::cout << "Created Keypair with Public Key: " << key_pair.public_key.to_base58() << std::endl;
    +}
    +
    use solana_sdk::signature::{Keypair, Signer};
     
     fn main() {
         let secret_key: [u8; 64] = [
    @@ -126,14 +149,13 @@
         "5MaiiCavjCmn9Hs1o3eznqDEhRwxo7pXiAYez7keQUviUkauRiTMD8DrESdrNjN8zd9mTmVhRvBJeg5vhyvgrAhG"
       )
     );
    -
    import base58
    -from solana.keypair import Keypair
    +
    from solders.keypair import Keypair
     
     b58_string = "5MaiiCavjCmn9Hs1o3eznqDEhRwxo7pXiAYez7keQUviUkauRiTMD8DrESdrNjN8zd9mTmVhRvBJeg5vhyvgrAhG"
    -keypair = Keypair.from_secret_key(base58.b58decode(b58_string)
    -print("Created Keypair with Public Key: {}".format(keypair.public_key))
    -
    use solana_sdk::signature::{Keypair, Signer};
     
     fn main() {
    @@ -146,7 +168,7 @@
     

    Làm thế nào để kiểm tra một cặp khoá

    Nếu bạn được cho một cặp khoá, bạn có thể xác nhận rằng cặp khoá đó có khớp giữa khoá riêng tư và khoá công khai hay không.

    Press </> button to view full source
    import { Keypair, PublicKey } from "@solana/web3.js";
    +

    Làm thế nào để kiểm tra một cặp khoá

    Nếu bạn được cho một cặp khoá, bạn có thể xác nhận rằng cặp khoá đó có khớp giữa khoá riêng tư và khoá công khai hay không.

    Press </> button to view full source
    import { Keypair, PublicKey } from "@solana/web3.js";
     
     (async () => {
       const publicKey = new PublicKey(
    @@ -174,10 +196,10 @@
     );
     console.log(keypair.publicKey.toBase58() === publicKey.toBase58());
     // true
    -
    from solana.keypair import Keypair
    -from solana.publickey import PublicKey
    +
    from solders.keypair import Keypair
    +from solders.pubkey import Pubkey
     
    -public_key = PublicKey("24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p")
    +public_key = Pubkey.from_string("24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p")
     
     keys = [
             174, 47, 154, 16, 202, 193, 206, 113, 199, 190, 53, 133, 169, 175, 31, 56, 222, 53, 138,
    @@ -185,11 +207,11 @@
             148, 69, 241, 227, 167, 80, 141, 89, 240, 121, 121, 35, 172, 247, 68, 251, 226, 218, 48,
             63, 176, 109, 168, 89, 238, 135,
         ]
    -keypair = Keypair.from_secret_key(bytes(keys))
    +keypair = Keypair.from_bytes(keys)
     
    -print(keypair.public_key.to_base58() == public_key.to_base58())
    +print(keypair.pubkey() == public_key)
     # True
    -
    // clang++ verify_keypair.cpp -o verify_keypair -std=c++17 -lssl -lcrypto -lsodium
    +
    +#include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +  PublicKey public_key = PublicKey("24PNhTaNtomHhoy3fTRaMhAFCRj4uHqhZEEoWrKDbR5p");
    +
    +  const uint8_t bytes[] = {
    +    174, 47, 154, 16, 202, 193, 206, 113, 199, 190, 53, 133, 169, 175, 31, 56, 222, 53, 138,
    +    189, 224, 216, 117, 173, 10, 149, 53, 45, 73, 251, 237, 246, 15, 185, 186, 82, 177, 240,
    +    148, 69, 241, 227, 167, 80, 141, 89, 240, 121, 121, 35, 172, 247, 68, 251, 226, 218, 48,
    +    63, 176, 109, 168, 89, 238, 135,
    +  };
    +  Keypair key_pair = Keypair::from_seed(bytes);
    +
    +  std::cout << (public_key.to_base58() == key_pair.public_key.to_base58()) << std::endl;
    +}
    +
    solana-keygen verify <PUBKEY> prompt://
     

    Làm thế nào để kiểm tra nếu một khoá công khai không tồn tại khoá riêng tư tương Ứng

    Trong một vài trường hợp đặc biệt (ví dụ như PDA), khoá công khai sẽ không hề tồn tại khoá riêng tư tương ứng với nó. Bạn có thể kiểm tra được điều này bằng cách thử xem khoá công khai có nằm trên đường cong ed25519 hay không. Chỉ những khoá công khai nằm trên đường cong mới có khoá riêng tư, hay nói cách khác là được kiểm soát bởi một ví người dùng.

    Press </> button to view full source
    import { PublicKey } from "@solana/web3.js";
    @@ -219,20 +272,18 @@
     })();
     
    from solana.keypair import Keypair
    -from solana.publickey import PublicKey
    -from solana.utils.ed25519_base import is_on_curve
    +
    from solders.pubkey import Pubkey
     
     # Note that Keypair() will always give a public key that is valid for users
    -key = PublicKey('5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY') # Valid public key
    -print(is_on_curve(key)) # Lies on the ed25519 curve and is suitable for users
    +key = Pubkey.from_string('5oNDL3swdJJF1g9DzJiZ4ynHXgszjAEpUkxVYejchzrY') # Valid public key
    +print(key.is_on_curve()) # Lies on the ed25519 curve and is suitable for users
     
    -off_curve_address = PublicKey('4BJXYkfvg37zEmBbsacZjeQDpTNx91KppxFJxRqrz48e') # Valid public key
    -print(PublicKey._is_on_curve(off_curve_address)) # Not on the ed25519 curve, therefore not suitable for users
    +off_curve_address = Pubkey.from_string('4BJXYkfvg37zEmBbsacZjeQDpTNx91KppxFJxRqrz48e') # Valid public key
    +print(off_curve_address.is_on_curve()) # Not on the ed25519 curve, therefore not suitable for users
     
    -error_pubkey = PublicKey("testPubkey"); # Is not a valid public key
    -
    use solana_sdk::pubkey::{Pubkey};
     use std::str::FromStr;
     
    @@ -274,16 +325,16 @@
       "pill tomorrow foster begin walnut borrow virtual kick shift mutual shoe scatter";
     const seed = bip39.mnemonicToSeedSync(mnemonic, ""); // (mnemonic, password)
     const keypair = Keypair.fromSeed(seed.slice(0, 32));
    -
    from solana.keypair import Keypair
    +
    from solders.keypair import Keypair
     from mnemonic import Mnemonic
     
     mnemo = Mnemonic("english")
     seed = mnemo.to_seed("pill tomorrow foster begin walnut borrow virtual kick shift mutual shoe scatter")
    -keypair = Keypair.from_secret_key(seed)
    -print("Created Keypair with Public Key: {}".format(keypair.public_key)
    +keypair = Keypair.from_bytes(seed)
    +print("Created Keypair with Public Key: {}".format(keypair.pubkey()))
     
    solana-keygen recover
     
    1. BIP44 - nhiều ví, thường được biết đến với tên gọi ví HD (Hierarchical Deterministic - Phân quyền Tất định)

    Bạn có thể tạo nhiều ví từ một seed đơn và được gọi là ví HD:

    Press </> button to view full source
    import { Keypair } from "@solana/web3.js";
    @@ -311,7 +362,7 @@
     }
     
    solana-keygen recover 'prompt:?key=0/0'
     

    Làm thế nào để sinh một địa chỉ danh nghĩa

    Địa chỉ danh nghĩa, hay địa chỉ tuỳ chỉnh là những địa chỉ với các tiền tố là những ký tự cụ thể. Ví dụ, một người muốn một khoá công khai sao cho nó bắt đầu với cụm từ "elv1s", hoặc "cook". Những đại chỉ nào giúp người khác có thể biết được chủ sở hữu của khoá và thuận tiện cho việc nhận dạng hơn.

    Lưu ý: Càng nhiều ký tự tiền tố trong đại chỉ danh nghĩa, sẽ càng yêu cầu nhiều thời gian tính toán hơn.

    WARNING

    Bạn nên sử dụng CLI cho nhiệm vụ này. Ví dụ trên Python và TypeScript chỉ nhằm mục đích minh hoạ và có hiệu suất chậm hơn rất nhiều so với CLI.

    Press </> button to view full source
    import { Keypair } from "@solana/web3.js";
    +

    Làm thế nào để sinh một địa chỉ danh nghĩa

    Địa chỉ danh nghĩa, hay địa chỉ tuỳ chỉnh là những địa chỉ với các tiền tố là những ký tự cụ thể. Ví dụ, một người muốn một khoá công khai sao cho nó bắt đầu với cụm từ "elv1s", hoặc "cook". Những đại chỉ nào giúp người khác có thể biết được chủ sở hữu của khoá và thuận tiện cho việc nhận dạng hơn.

    Lưu ý: Càng nhiều ký tự tiền tố trong đại chỉ danh nghĩa, sẽ càng yêu cầu nhiều thời gian tính toán hơn.

    WARNING

    Bạn nên sử dụng CLI cho nhiệm vụ này. Ví dụ trên Python và TypeScript chỉ nhằm mục đích minh hoạ và có hiệu suất chậm hơn rất nhiều so với CLI.

    Press </> button to view full source
    import { Keypair } from "@solana/web3.js";
     
     (async () => {
       let keypair = Keypair.generate();
    @@ -323,17 +374,36 @@
     while (!keypair.publicKey.toBase58().startsWith("elv1s")) {
       keypair = Keypair.generate();
     }
    -
    from solana.keypair import Keypair
    +
    from solders.keypair import Keypair
     
     keypair = Keypair()
    -while(str(keypair.public_key)[:5]!="elv1s") :
    +while(str(keypair.pubkey())[:5]!="elv1s") :
         keypair = Keypair()
         
    -print("Created Keypair with Public Key: {}".format(keypair.public_key))
    +print("Created Keypair with Public Key: {}".format(keypair.pubkey()))
     
    solana-keygen grind --starts-with e1v1s:1
    +
    // clang++ vanity_keypair.cpp -o vanity_keypair -std=c++17 -lssl -lcrypto -lsodium
    +
    +#include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +  auto key_pair = Keypair::generate();
    +
    +  while (key_pair.public_key.to_base58().substr(0, 5) != "elv1s") {
    +    key_pair = Keypair::generate();
    +  }
    +
    +  std::cout << "Created Keypair with Public Key: " << key_pair.public_key.to_base58() << std::endl;
    +}
    +
    solana-keygen grind --starts-with e1v1s:1
     

    Làm thế nào ký và kiểm tra tinh nhắn bằng ví

    Một chức năng cơ bản của một cặp khoá là ký một tin nhắn và cho phép kiểm tra chữ ký cùng tin nhắn đó. Wuas trình xác nhận một chữ ký cho phép người nhận chắc chắn rằng dữ liệu được ký là do chủ sở hữu thực sự của cặp khoá ký lên.

    Để làm được điều đó chúng ta cần sử dụng thư viện mật mã học TweetNaClopen in new window.

    Press </> button to view full source
    import { Keypair } from "@solana/web3.js";
     import nacl from "tweetnacl";
    @@ -372,41 +442,25 @@
     );
     
     console.log(result);
    -
    from nacl.signing import VerifyKey
    -from solana.keypair import Keypair
    +
    from solders.keypair import Keypair
     
     secret_key =  [
           174, 47, 154, 16, 202, 193, 206, 113, 199, 190, 53, 133, 169, 175, 31, 56, 222, 53, 138, 189, 224, 216, 117,
           173, 10, 149, 53, 45, 73, 251, 237, 246, 15, 185, 186, 82, 177, 240, 148, 69, 241, 227, 167, 80, 141, 89, 240,
           121, 121, 35, 172, 247, 68, 251, 226, 218, 48, 63, 176, 109, 168, 89, 238, 135,
    -    ]
    -     
    -keypair = Keypair.from_secret_key(bytes(secret_key))
    -pubkey_bytes = bytes(keypair.public_key)
    -message = "The quick brown fox jumps over the lazy dog"
    -message_bytes = bytes(message,'utf8')
    -signed_message = keypair.sign(message_bytes)
    -
    -verify_sign = VerifyKey(
    -    pubkey_bytes
    -).verify(
    -    smessage=message_bytes,  
    -    signature=signed_message.signature
    -)
    -
    -#Returns original message if the signature has not been tampered with
    -print(verify_sign)
    -

    Làm thế nào để kết nối ví

    Thư viện wallet-adapteropen in new window của Solana sẽ giúp cho việc quản lý và kết nối ví trở nên hết sức đơn giản.

    React

    Chạy đoạn mã bên dưới để cài đặt các thư viện cần thiết:

    yarn add @solana/wallet-adapter-react @solana/wallet-adapter-react-ui @solana/wallet-adapter-base @solana/wallet-adapter-wallets
    +    ] 
    +keypair = Keypair.from_bytes(secret_key)
    +message = b"The quick brown fox jumps over the lazy dog"
    +signature = keypair.sign_message(message)
    +verify_sign = signature.verify(keypair.pubkey(), message)
    +
    +print(verify_sign) # bool
    +

    Làm thế nào để kết nối ví

    Thư viện wallet-adapteropen in new window của Solana sẽ giúp cho việc quản lý và kết nối ví trở nên hết sức đơn giản.

    React

    Chạy đoạn mã bên dưới để cài đặt các thư viện cần thiết:

    yarn add @solana/wallet-adapter-react @solana/wallet-adapter-react-ui @solana/wallet-adapter-base @solana/wallet-adapter-wallets
     

    Thư viện React wallet-adapter cho phép lập trình viên duy trì kết nối cũng như truy cập vào các trạng thái của ví thông qua HookContext Provider như useWallet, WalletProvider, useConnection, và ConnectionProvider. Ứng dụng React phải được bọc bởi WalletProviderConnectionProvider.

    Ngoài ra, lập trình viên cũng có thể hiển thị kết nối đến người dùng bằng cách sử dụng useWalletModal để mở một cửa sổ thông báo. Lưu ý, bạn cần phải bọc toàn bộ ứng dụng bằng WalletModalProvider từ thư viện @solana/wallet-adapter-react-ui. Cửa sổ kết nối sẽ xử lý tất cả các bước kết nối nên chúng ta chỉ cần lắng nghe sự kiện kết nối ví thành công. useWallet sẽ trả về giá trị khác rỗng là wallet nếu kết nối thành công. Ngược lại, nó sẽ trả về rỗng nếu kết nối chưa thành công hoặc người dùng đã ngắt kết nối.

    Press </> button to view full source
    import React, { useMemo, FC, PropsWithChildren } from "react";
     import {
       ConnectionProvider,
    @@ -593,6 +647,6 @@
     <WalletMultiButton />
     {/if}
     
    - + diff --git a/docs/.vuepress/dist/vi/references/local-development.html b/docs/.vuepress/dist/vi/references/local-development.html index 687695ed1..685ece1cd 100644 --- a/docs/.vuepress/dist/vi/references/local-development.html +++ b/docs/.vuepress/dist/vi/references/local-development.html @@ -23,12 +23,12 @@ } Lập trình ở Local | Toàn tập Solana - +

    Lập trình ở Local

    Khởi chạy Local Validator

    Kiểm thử program của bạn trên máy cá nhân sẽ nhanh và đáng tin cậy hơn nhiều so với devnet. Quá trình này giúp bạn có thể kiểm tra chương trình trước khi triển khai và kiểm thứ chúng trên devnet.

    Bạn có thể thiết lập local-test-validator bằng cách cài đặt bộ công cụ solana và chạy lệnh sau:

    solana-test-validator
    -

    Lợi ích của việc chạy local-test-validator gồm:

    • Không giới hạn truy vấn RPC
    • Không giới hạn số lượng SOL nhận được để kiểm thử
    • Triển khai trực tiếp program lên on-chain (--bpf-program ...)
    • Sao chép account từ các mạng công cộng, bao gồm cả các program (--clone ...)
    • Có thể điều chỉnh số lượng lịch sử transaction (--limit-ledger-size ...)
    • Có thể điều chỉnh độ dài epoch (--slots-per-epoch ...)
    • Nhảy đến bấy kỳ chỗ trống nào (--warp-slot ...)

    Kết nối đến môi trường

    Một khi bắt đầu làm việc với môi trường phát triển ứng dụng trên Solana, bạn sẽ cần phải kết nối ứng dụng của bạn đến một điểm RPC API cụ thể. Solana có 3 môi trường công cộng cho quá trình phát triển ứng dụng:

    • mainnet-beta: https://api.mainnet-beta.solana.com
    • devnet: https://api.devnet.solana.com
    • testnet: https://api.testnet.solana.com
    Press </> button to view full source
    import { clusterApiUrl, Connection } from "@solana/web3.js";
    +

    Lợi ích của việc chạy local-test-validator gồm:

    • Không giới hạn truy vấn RPC
    • Không giới hạn số lượng SOL nhận được để kiểm thử
    • Triển khai trực tiếp program lên on-chain (--bpf-program ...)
    • Sao chép account từ các mạng công cộng, bao gồm cả các program (--clone ...)
    • Có thể điều chỉnh số lượng lịch sử transaction (--limit-ledger-size ...)
    • Có thể điều chỉnh độ dài epoch (--slots-per-epoch ...)
    • Nhảy đến bấy kỳ chỗ trống nào (--warp-slot ...)

    Kết nối đến môi trường

    Một khi bắt đầu làm việc với môi trường phát triển ứng dụng trên Solana, bạn sẽ cần phải kết nối ứng dụng của bạn đến một điểm RPC API cụ thể. Solana có 3 môi trường công cộng cho quá trình phát triển ứng dụng:

    • mainnet-beta: https://api.mainnet-beta.solana.com
    • devnet: https://api.devnet.solana.com
    • testnet: https://api.testnet.solana.com
    Press </> button to view full source
    import { clusterApiUrl, Connection } from "@solana/web3.js";
     
     (async () => {
       const connection = new Connection(clusterApiUrl("mainnet-beta"), "confirmed");
    @@ -38,6 +38,15 @@
     
     client = Client("https://api.mainnet-beta.solana.com")
     
    #include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +    Connection connection("https://api.mainnet-beta.solana.com");
    +    return 0;
    +}
    +
    use solana_client::rpc_client::RpcClient;
     use solana_sdk::commitment_config::CommitmentConfig;
     
    @@ -49,7 +58,7 @@
     let client = RpcClient::new_with_commitment(rpc_url, CommitmentConfig::confirmed());
     
    solana config set --url https://api.mainnet-beta.solana.com
     

    Cuối cùng bạn cũng có thể kết nối đến các mạng riêng, hoặc từ một điểm truy cập cá nhân, hoặc từ một dịch vụ từ xa ví dụ như:

    Press </> button to view full source
    import { Connection } from "@solana/web3.js";
    +

    Cuối cùng bạn cũng có thể kết nối đến các mạng riêng, hoặc từ một điểm truy cập cá nhân, hoặc từ một dịch vụ từ xa ví dụ như:

    Press </> button to view full source
    import { Connection } from "@solana/web3.js";
     
     (async () => {
       // This will connect you to your local validator
    @@ -60,6 +69,15 @@
     
     client = Client("http://127.0.0.1:8899")
     
    #include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +    Connection connection("http://127.0.0.1:8899");
    +    return 0;
    +}
    +
    use solana_client::rpc_client::RpcClient;
     use solana_sdk::commitment_config::CommitmentConfig;
     
    @@ -71,7 +89,7 @@
     let client = RpcClient::new_with_commitment(rpc_url, CommitmentConfig::confirmed());
     
    solana config set --url http://privaterpc.com
     

    Lắng nghe các sự kiện

    Websockets cung cấp một giao diện pub/sub để bạn có thể lắng nghe các sự kiện cụ thể. Thay vì liên tục gọi vào các điểm thông tin thông qua HTTP để thường xuyên cập nhật dữ liệu, bạn có thể nhận được dữ liệu cập nhật mỗi khi có thay đổi xảy ra.

    Connectionopen in new window trong web3 của Solana sẽ chủ động tạo ra một kết nối websocket mỗi khi bạn tạo mới Connection (chi tiết mã nguồn tại đâyopen in new window).

    Lớp Connection sẽ cung cấp các phương thức pub/sub - tất cả chúng đều bắt đầu với tiền tố on, giống như các emitter. Khi bạn gọi vào một phương thức nghe, nó sẽ đăng ký một sự kiện mới vào websocket người dùng của Connection vừa tạo. Ví dụ cho phương thức pub/sub bên dưới sẽ sử dụng onAccountChangeopen in new window. Hàm gọi lại (callback) sẽ nhận các tham số và cập nhật lại trạng thái mới (tham khảo ví dụ AccountChangeCallbackopen in new window).

    Press </> button to view full source
    import { clusterApiUrl, Connection, Keypair } from "@solana/web3.js";
    +

    Lắng nghe các sự kiện

    Websockets cung cấp một giao diện pub/sub để bạn có thể lắng nghe các sự kiện cụ thể. Thay vì liên tục gọi vào các điểm thông tin thông qua HTTP để thường xuyên cập nhật dữ liệu, bạn có thể nhận được dữ liệu cập nhật mỗi khi có thay đổi xảy ra.

    Connectionopen in new window trong web3 của Solana sẽ chủ động tạo ra một kết nối websocket mỗi khi bạn tạo mới Connection (chi tiết mã nguồn tại đâyopen in new window).

    Lớp Connection sẽ cung cấp các phương thức pub/sub - tất cả chúng đều bắt đầu với tiền tố on, giống như các emitter. Khi bạn gọi vào một phương thức nghe, nó sẽ đăng ký một sự kiện mới vào websocket người dùng của Connection vừa tạo. Ví dụ cho phương thức pub/sub bên dưới sẽ sử dụng onAccountChangeopen in new window. Hàm gọi lại (callback) sẽ nhận các tham số và cập nhật lại trạng thái mới (tham khảo ví dụ AccountChangeCallbackopen in new window).

    Press </> button to view full source
    import { clusterApiUrl, Connection, Keypair } from "@solana/web3.js";
     
     (async () => {
       // Establish new connect to devnet - websocket client connected to devnet will also be registered here
    @@ -102,7 +120,7 @@
       "confirmed"
     );
     
    import asyncio
    -from solana.keypair import Keypair
    +from solders.keypair import Keypair
     from solana.rpc.websocket_api import connect
     
     async def main():
    @@ -110,7 +128,7 @@
             # Create a Test Wallet
             wallet = Keypair()
             # Subscribe to the Test wallet to listen for events
    -        await websocket.account_subscribe(wallet.public_key)
    +        await websocket.account_subscribe(wallet.pubkey())
             # Capture response from account subscription 
             first_resp = await websocket.recv()
             print("Subscription successful with id {}, listening for events \n".format(first_resp.result))
    @@ -122,13 +140,62 @@
         # Create a Test Wallet
         wallet = Keypair()
         # Subscribe to the Test wallet to listen for events
    -    await websocket.account_subscribe(wallet.public_key)
    +    await websocket.account_subscribe(wallet.pubkey())
         # Capture response from account subscription 
         first_resp = await websocket.recv()
         print("Subscription successful with id {}, listening for events \n".format(first_resp.result))
         updated_account_info = await websocket.recv()
         print(updated_account_info)    
    -
    use solana_client::pubsub_client::PubsubClient;
    +
    // clang++ on_account_change.cpp -o on_account_change -std=c++17 -lssl -lcrypto -lsodium
    +
    +#include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +  Connection connection("https://api.devnet.solana.com");
    +
    +  auto key_pair = Keypair::generate();
    +
    +  int subscriptionId = connection.on_account_change(key_pair.public_key, [&](Result<Account> result) {
    +    Account account = result.unwrap();
    +    std::cout << "owner = " << account.owner.to_base58() << std::endl;
    +    std::cout << "lamports = " << account.lamports << std::endl;
    +    std::cout << "data = " << account.data << std::endl;
    +    std::cout << "executable = " << (account.executable ? "true" : "false") << std::endl;
    +  });
    +
    +  sleep(1);
    +
    +  std::string tx_hash = connection.request_airdrop(key_pair.public_key).unwrap();
    +  std::cout << "tx hash = " << tx_hash << std::endl;
    +
    +  for (int i = 0; i < 10; i++) {
    +    connection.poll();
    +    sleep(1);
    +  }
    +
    +  connection.remove_account_listener(subscriptionId);
    +
    +  return 0;
    +}
    +
    use solana_client::pubsub_client::PubsubClient;
     use solana_client::rpc_config::RpcAccountInfoConfig;
     use solana_sdk::commitment_config::CommitmentConfig;
     use solana_sdk::signature::{Keypair, Signer};
    @@ -177,7 +244,7 @@
     ).unwrap();
     let message = match receiver.recv().unwrap();
     println!("{:?}", message)
    -

    Nhận SOL để kiểm thử

    Khi bạn làm việc trên môi trường địa phương, bạn sẽ phải cần một ít SOL để gửi transaction. Trong các môi trường không phải mainnet, bạn có thể nhận được SOL miễn phí.

    Press </> button to view full source
    import { Connection, Keypair, LAMPORTS_PER_SOL } from "@solana/web3.js";
    +

    Nhận SOL để kiểm thử

    Khi bạn làm việc trên môi trường địa phương, bạn sẽ phải cần một ít SOL để gửi transaction. Trong các môi trường không phải mainnet, bạn có thể nhận được SOL miễn phí.

    Press </> button to view full source
    import { Connection, Keypair, LAMPORTS_PER_SOL } from "@solana/web3.js";
     
     (async () => {
       const keypair = Keypair.generate();
    @@ -201,7 +268,7 @@
     );
     
     await connection.confirmTransaction(airdropSignature);
    -
    from solana.keypair import Keypair
    +
    from solders.keypair import Keypair
     from solana.rpc.api import Client
     
     wallet = Keypair()
    @@ -209,14 +276,32 @@
     client = Client("https://api.devnet.solana.com")
     
     #Input Airdrop amount in LAMPORTS
    -client.request_airdrop(wallet.public_key, 1000000000)
    +client.request_airdrop(wallet.pubkey(), 1000000000)
     
     #Airdrops 1 SOL
     
    use solana_client::rpc_client::RpcClient;
    +
    // clang++ request_airdrop.cpp -o request_airdrop -std=c++17 -lssl -lcrypto -lsodium
    +
    +#include "solana.hpp"
    +
    +using namespace many::solana;
    +
    +int main() {
    +  Connection connection("https://api.devnet.solana.com");
    +
    +  auto key_pair = Keypair::generate();
    +
    +  std::string tx_hash = connection.request_airdrop(key_pair.public_key).unwrap();
    +
    +  std::cout << "tx hash = " << tx_hash << std::endl;
    +
    +  return 0;
    +}
    +
    use solana_client::rpc_client::RpcClient;
     use solana_sdk::commitment_config::CommitmentConfig;
     use solana_sdk::native_token::LAMPORTS_PER_SOL;
     use solana_sdk::signature::{Keypair, Signer};
    @@ -267,6 +352,6 @@
     solana-test-validator --bpf-program 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin serum_dex_v3.so --reset
     
    Last Updated:
    - + diff --git a/docs/.vuepress/dist/vi/references/name-service.html b/docs/.vuepress/dist/vi/references/name-service.html index 851290150..1ba4a8ea7 100644 --- a/docs/.vuepress/dist/vi/references/name-service.html +++ b/docs/.vuepress/dist/vi/references/name-service.html @@ -23,7 +23,7 @@ } Dịch vụ tên miền | Toàn tập Solana - + @@ -181,7 +181,7 @@ const subDomain = "demo"; // Step 1 -const hashedParentDomain = await getHashedName(mainDomain); +const hashedParentDomain = await getHashedName(parentDomain); const parentDomainKey = await getNameAccountKey( hashedParentDomain, undefined, @@ -260,6 +260,6 @@ const registry = await getTwitterRegistry(connection, handle); - + diff --git a/docs/.vuepress/dist/vi/references/nfts.html b/docs/.vuepress/dist/vi/references/nfts.html index 094ba6f3a..5c93910c3 100644 --- a/docs/.vuepress/dist/vi/references/nfts.html +++ b/docs/.vuepress/dist/vi/references/nfts.html @@ -23,7 +23,7 @@ } NFTs | Toàn tập Solana - + @@ -271,11 +271,13 @@ const metaplex = new Metaplex(connection); metaplex.use(keypairIdentity(keypair)); - const mint = new PublicKey("Ay1U9DWphDgc7hq58Yj1yHabt91zTzvV2YJbAWkPNbaK"); + const mintAddress = new PublicKey( + "Ay1U9DWphDgc7hq58Yj1yHabt91zTzvV2YJbAWkPNbaK" + ); - const nft = await metaplex.nfts().findByMint(mint); + const nft = await metaplex.nfts().findByMint({ mintAddress }); - console.log(nft.metadata); + console.log(nft.json); /* { name: 'SMB #139', @@ -302,18 +304,20 @@ } */ })(); -

    Làm thế nào để truy vấn chủ sở hữu của một NFTs

    Nếu bạn có địa chỉ mint của một NFT, bạn có thể tìm được chủ sở hữu hiện tại của nó bằng truy vấn token account lớn nhất của địa chỉ mint đó.

    Nhớ rằng vì tổng cung của NFT là 1, và chúng không thể chia nhỏ hơn, nên chỉ có duy nhất một token account sẽ chứa token đó ở mọi lúc. Tất cả các token account khác sẽ có số dư là 0.

    Một khi token account lớn nhất được xác định, chúng ta có thể truy vấn chủ sỡ hữu của nó.

    Press </> button to view full source
    import { Connection, PublicKey } from "@solana/web3.js";
    +console.log(nft.json);
    +

    Làm thế nào để truy vấn chủ sở hữu của một NFTs

    Nếu bạn có địa chỉ mint của một NFT, bạn có thể tìm được chủ sở hữu hiện tại của nó bằng truy vấn token account lớn nhất của địa chỉ mint đó.

    Nhớ rằng vì tổng cung của NFT là 1, và chúng không thể chia nhỏ hơn, nên chỉ có duy nhất một token account sẽ chứa token đó ở mọi lúc. Tất cả các token account khác sẽ có số dư là 0.

    Một khi token account lớn nhất được xác định, chúng ta có thể truy vấn chủ sỡ hữu của nó.

    Press </> button to view full source
    import { Connection, PublicKey } from "@solana/web3.js";
     
     (async () => {
       const connection = new Connection("https://api.mainnet-beta.solana.com");
    @@ -540,7 +544,7 @@
       metaplex.use(keypairIdentity(keypair));
     
       const owner = new PublicKey("2R4bHmSBHkHAskerTHE6GE1Fxbn31kaD5gHqpsPySVd7");
    -  const allNFTs = await metaplex.nfts().findAllByOwner(owner);
    +  const allNFTs = await metaplex.nfts().findAllByOwner({ owner });
     
       console.log(allNFTs);
     })();
    @@ -551,10 +555,10 @@
     metaplex.use(keypairIdentity(keypair));
     
     const owner = new PublicKey("2R4bHmSBHkHAskerTHE6GE1Fxbn31kaD5gHqpsPySVd7");
    -const allNFTs = await metaplex.nfts().findAllByOwner(owner);
    +const allNFTs = await metaplex.nfts().findAllByOwner({ owner });
     
     console.log(allNFTs);
     
    - + diff --git a/docs/.vuepress/dist/vi/references/offline-transactions.html b/docs/.vuepress/dist/vi/references/offline-transactions.html index 10f2f8e44..b6f7b7782 100644 --- a/docs/.vuepress/dist/vi/references/offline-transactions.html +++ b/docs/.vuepress/dist/vi/references/offline-transactions.html @@ -23,7 +23,7 @@ } Gửi Transactions Ngoại tuyến | Toàn tập Solana - + @@ -457,6 +457,6 @@ console.log(`txhash: ${await connection.sendRawTransaction(tx.serialize())}`); - + diff --git a/docs/.vuepress/dist/vi/references/programs.html b/docs/.vuepress/dist/vi/references/programs.html index 9909d62f0..b57adf211 100644 --- a/docs/.vuepress/dist/vi/references/programs.html +++ b/docs/.vuepress/dist/vi/references/programs.html @@ -23,7 +23,7 @@ } Xây dựng Programs | Toàn tập Solana - + @@ -1496,6 +1496,6 @@ } - + diff --git a/docs/.vuepress/dist/vi/references/staking.html b/docs/.vuepress/dist/vi/references/staking.html index bf9178efe..9afdd0dda 100644 --- a/docs/.vuepress/dist/vi/references/staking.html +++ b/docs/.vuepress/dist/vi/references/staking.html @@ -23,7 +23,7 @@ } Staking | Toàn tập Solana - + @@ -641,6 +641,6 @@ stakeBalance = await connection.getBalance(stakeAccount.publicKey); console.log(`Stake account balance: ${stakeBalance / LAMPORTS_PER_SOL} SOL`); - + diff --git a/docs/.vuepress/dist/vi/references/token.html b/docs/.vuepress/dist/vi/references/token.html index ef094e8b9..f30611c0a 100644 --- a/docs/.vuepress/dist/vi/references/token.html +++ b/docs/.vuepress/dist/vi/references/token.html @@ -23,7 +23,7 @@ } Tương tác với Tokens | Toàn tập Solana - + @@ -1273,6 +1273,6 @@ mint: mint, }); - + diff --git a/docs/.vuepress/dist/zh/core-concepts/accounts.html b/docs/.vuepress/dist/zh/core-concepts/accounts.html index dea101055..ecf09d2ce 100644 --- a/docs/.vuepress/dist/zh/core-concepts/accounts.html +++ b/docs/.vuepress/dist/zh/core-concepts/accounts.html @@ -23,11 +23,11 @@ } 账户 | Solana秘籍 - +

    账户

    在Solana中,账户是用来存储状态的。账户是Solana开发中非常重要的构成要素。

    综述

    要点

    • 账户是用来存放数据的
    • 每个账户都有一个独一无二的地址
    • 每个账户大小不能超过10MB
    • 程序派生账户大小不能超过10KB
    • 程序派生账户可以用其对应程序进行签名
    • 账户大小是静态的
    • 账户数据存储需要付租金
    • 默认的账户所有者是"系统程序"

    深入

    账户模型

    在Solana中有三类账户:

    • 数据账户,用来存储数据
    • 程序账户,用来存储可执行程序
    • 原生账户,指Solana上的原生程序,例如"System","Stake",以及"Vote"。

    数据账户又分为两类:

    • 系统所有账户
    • 程序派生账户(PDA)

    每个账户都有一个地址(一般情况下是一个公钥)以及一个所有者(程序账户的地址)。 下面详细列出一个账户存储的完整字段列表。

    字段描述
    lamports这个账户拥有的lamport(兰波特)数量
    owner这个账户的所有者程序
    executable这个账户成是否可以处理指令
    data这个账户存储的数据的字节码
    rent_epoch下一个需要付租金的epoch(代)

    关于所有权,有几条重要的规则:

    • 只有账户的所有者才能改变账户中的数据,提取lamport
    • 任何人都可以向数据账户中存入lamport
    • 当账户中的数据被抹除之后,账户的所有者可以指定新的所有者

    程序账户不储存状态。

    例如,假设有一个计数程序,这个程序用来为一个计数器加数,你需要创建两个账户,一个用于存储程序的代码, 另一个用于存储计数器本身。

    为了避免账户被删除,必须付租金。

    租金

    在账户中存储数据需要花费SOL来维持,这部分花费的SOL被称作租金。如果你在一个账户中存入大于两年租金的SOL, 这个账户就可以被豁免付租。租金可以通过关闭账户的方式来取回。lamport会被返还回你的钱包。

    租金在这两个不同的时间点被支取:

    1. 被一个交易引用的时候
    2. epoch更迭时

    收取的租金,一定百分比会被销毁,另一部分会在每个slot(插槽)结束时被分配给投票账户。

    当一个账户没有足够的余额支付租金时,这个账户会被释放,数据会被清除。

    其他资料

    致谢

    这些核心概念来源于Pencilflip. 在Twitter上关注他open in new window.

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/zh/core-concepts/pdas.html b/docs/.vuepress/dist/zh/core-concepts/pdas.html index 939692baf..f871022ca 100644 --- a/docs/.vuepress/dist/zh/core-concepts/pdas.html +++ b/docs/.vuepress/dist/zh/core-concepts/pdas.html @@ -23,11 +23,11 @@ } 程序派生账户 (PDA) | Solana秘籍 - +

    程序派生账户(PDA)

    程序派生账户(PDA)是为了让特定程序可以控制一些账户而设计出来的。使用PDA,程序可以通过编程方法为一些地址进行签名,而不一定用到私钥。 PDA是Cross-Program Invocation(跨程序调用)open in new window的基础, 这个功能让Solana的app可以跟其他app进行组合。

    综述

    要点

    • PDA是长度为32的字节串,看起来和公钥很像,但是并没有与之对应的私钥
    • findProgramAddress可以针对一个programId(程序id)和seeds(种子)唯一确定的生成一个PDA。这里的seeds(种子)是一组指定的字节串
    • 一个跳跃(一个字节)用于将候选PDA推离ed25519椭圆曲线
    • 程序通过传入种子和跳跃参数,调用invoke_signedopen in new window为PDA进行签名
    • PDA只能被用来派生出这个地址的程序所签名
    • 除了允许程序为不同的instruction签名之外,PDA还提供了一个像哈希表一样的接口,用于建立账户索引

    深入

    PDA是Solana程序开发的重要构成要素。有了PDA,程序可以为账户签名,同时保证没有外部用户能够产生针对同一个账户的有效签名。 除了为账户签名外,一些程序还可以修改自己派生出来的PDA里的数据。

    Accounts matrix

    图片来源:Pencilflip

    生成PDA

    为了更好的理解PDA的概念,可以认为PDA从技术角度讲并不是创建出来的,而是找到的。PDA由一组种子(例如字符串"vote_account")以及程序id生成。 这组种子和程序id接下来会放到sha256哈希函数中执行一遍,检查他们产生的公钥是否落在ed25519椭圆曲线上。

    在程序id和种子上运行哈希函数时,有大约50%的概率会得到在一个落在椭圆曲线上有效的公钥。这种情况下,我们需要向输入当中加点扰动,略微改变输入,再进行重试。 这个扰动的技术名称叫bump(跳跃)。在Solana中,我们一开始指定bump = 255,然后向下迭代bump,到254,253等等。知道我们能够找到一个不在椭圆曲线上的地址为止。 这个看起来简陋的办法可以让我们每次生成PDA的时候都能够得到唯一确定的结果。

    落在椭圆曲线上的PDA

    与PDA交互

    生成PDA的时候,findProgramAddress会把得到的地址和用来将PDA碰撞出椭圆曲线所用的bump都返回出来。 有了这个bump,程序就可以对任何需要这个PDA地址的指令进行签名。签名时,程序调用invoke_signed函数,传入指令,账户列表,以及用于生成PDA的种子和bump。 除了为指令签名之外,PDA在他自己通过invoke_signed函数被创建时,也需要签名。

    在使用PDA编写程序时,经常会将这个bump存储在这个账户本身的数据当中open in new window。 这种机制可以让开发者轻易的对PDA进行验证,而不用重新在指令参数当中传入这个值。

    Other Resources

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/zh/core-concepts/programs.html b/docs/.vuepress/dist/zh/core-concepts/programs.html index 4b4143e82..c49dabf5e 100644 --- a/docs/.vuepress/dist/zh/core-concepts/programs.html +++ b/docs/.vuepress/dist/zh/core-concepts/programs.html @@ -23,12 +23,12 @@ } 程序 | Solana秘籍 - +

    程序

    任何开发者都可以在Solana链上编写以及部署程序。Solana程序(在其他链上叫做智能合约),是所有链上活动的基础。 链上的一切活动,从去中心化金融(DeFi),到非同质化代币(NFT),再到社交媒体,链上游戏,都由Solana程序所驱动。

    综述

    要点

    • 程序可以处理来自用户和其他程序的指令
    • 所有的程序都是无状态的:所有的和程序交互的数据都是存储在独立的账户中。执行时,这些账户借由指令传入程序
    • 程序本身存储在标记为executable(可执行)的账户中。
    • 任何程序的所有者都是BPF Loaderopen in new window and executed by the Solana Runtimeopen in new window
    • 开发者通常使用Rust或C++来编写程序,也可以采用任何其他可以编译为LLVMopen in new windowBPFopen in new window后端的语言
    • 所有的程序都有一个单独的入口点,指令的执行就是从这里开始的(亦即process_instruction)。参数须包括:
      • program_id: pubkey (公钥)
      • accounts: array (数组)
      • instruction_data: byte array (字节数组)

    深入

    与其他链不同,Solana将代码与数据完全分开。 程序需要访问的全部数据都存储在独立的账户中,在指令中这些账户需要以引用的方式传入。 这种模式使得一个通用的程序可以在不同的账户上运行,而不用为此额外部署程序。 这种模式的例子很常见,包括了"原生程序"以及"SPL程序"等。

    原生程序和Solana程序库(SPL)

    Solana自带一系列程序,这些程序是链上交互的核心构成要素。 这些程序分为原生程序open in new windowSolana程序库(SPL程序)open in new window

    原生程序提供了运行验证节点(validator)所需的功能。原生程序中最广为人知的是System Programopen in new window。 这个程序负责管理建立新账户以及在两个账户之间转账SOL。

    SPL程序定义了一系列的链上活动,其中包括针对代币的创建,交换,借贷,以及创建质押池,维护链上域名解析服务等。 SPL Token Program(SPL代币程序)open in new window可以直接在命令行调用,其他的一些,如 Associated Token Account Program(关联代币账户程序)open in new window, 则常被用于编写其他定制程序。

    编写程序

    编写Solana程序常用的是Rust和C++,但是也可以使用其他可以编译为LLVM的BPF后端的语言。 最近Neon Labsopen in new windowSolangopen in new window发起了一个项目, 旨在建立Solana的EVMopen in new window兼容性,进而让开发者可以使用Solidity编写程序。

    大部分Rust编写的程序遵循以下架构:

    文件描述
    lib.rs注册模块
    entrypoint.rs程序的入口点
    instruction.rs程序的API, 对指令的数据进行序列化与反序列化
    processor.rs程序的业务逻辑
    state.rs程序对象,对状态进行反序列化
    error.rs程序中制定的错误

    最近,Anchoropen in new window逐渐成为了一个广受欢迎的Solana程序开发框架。 Anchor是一个有态度的框架,与Ruby on Rails相似,这个框架旨在减少模式化的代码,将Rust开发流程中的序列化与反序列化过程流水线化。

    在部署到Testnet(测试网)和Mainnet(主网)之前,程序在开发和测试阶段经常使用Localhost和Devnet(开发网)环境。 Solana支持以下的几个环境:

    集群环境RPC连接URL
    Mainnet-betahttps://api.mainnet-beta.solana.com
    Testnethttps://api.testnet.solana.com
    Devnethttps://api.devnet.solana.com
    Localhost默认端口:8899(例如,http://localhost:8899,http://192.168.1.88:8899)

    部署到一个环境之后,客户端就可以通过对应集群的RPC连接open in new window与链上程序进行交互。

    部署程序

    开发者可以使用命令行open in new window部署程序:

    solana program deploy <PROGRAM_FILEPATH>
     

    部署程序的时候,程序会被编译为包含BPF字节码的ELF共享对象open in new window,并上传到Solana集群上。 和Solana上其他的任何东西一样,程序储存在账户当中。唯一的特殊之处是,这些账户标记为executable(可执行),并且其所有者是"BPF Loader(BPF加载器)"。 这个账户的地址被称为program_id,在后面的一切交易当中,用于指代这个程序。

    Solana支持多种BPF加载器,最新的是Upgradable BPF Loaderopen in new window。 BPF加载器负责管理程序账户,让客户端可以通过其program_id对程序进行访问。每个程序都只有一个入口点,这里对指令进行处理。这里的参数须包括:

    • program_id: pubkey(公钥)
    • accounts: array(数组)
    • instruction_data: byte array(字节数组)

    当程序被调用时,会在Solana运行库中被执行。

    其他资料

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/zh/core-concepts/transactions.html b/docs/.vuepress/dist/zh/core-concepts/transactions.html index e654056fa..da74326b1 100644 --- a/docs/.vuepress/dist/zh/core-concepts/transactions.html +++ b/docs/.vuepress/dist/zh/core-concepts/transactions.html @@ -23,11 +23,11 @@ } 交易 | Solana秘籍 - +

    交易

    客户端可以通过向一个集群提交交易来调用程序。一个交易可以包含多个指令,每个指令可以针对不同的程序。 交易提交时,Solana运行库open in new window会自动的按顺序处理这些指令。 如果某一个指令中的任何一个部分失败,整个交易就会失败。

    概述

    要点

    • 指令是Solana上最基本的操作单元
    • 每个指令都包含:
      • program_id:所针对的程序的id
      • accounts:需要读或写的全部账户组成的数组
      • instruction_data:向指定程序所传输的数据的字节码
    • 多个指令可以被打包进入同一个交易当中
    • 每个交易都包含:
      • instructions:一个或多个指令
      • blockhash:最新的块哈希值
      • signatures:一个或多个签名
    • 指令会被自动的按顺序执行
    • 如果一个指令的任何一部分失败,整个交易就会失败
    • 交易的大小限制在1232字节以内

    深入

    在Solana运行库中,指令和交易都需要先指定全部需要读写访问的账户列表。 通过事先指定账户列表,运行库可以对交易的执行做并行化处理。

    当交易被提交到集群时,运行库会自动的按照顺序处理这些指令。对于每个指令,接收这个指令的程序会解析指令中的数据字段,在指定的账户上进行操作。 程序要么执行成功,要么会返回一个错误码。如果返回了一个错误码,整个交易都会立即失败。

    任何交易,只要针对一个账户扣除SOL,或者修改其中的数据,都需要这个账户拥有者的签名。 在交易中,会被修改的账户都会被标记为writable(可写)。 当交易的付费者支付了足够的租金和交易费用时,一个账户可以被存入SOL而不用这个账户拥有者的许可。

    提交之前,每个交易需要引用一个recent blockhash(最新块哈希)open in new window。 块哈希被用于去重,以及移除过期交易。一个块哈希的最大寿命是150个区块,成文时这个时间大约是1分钟19秒。

    费用

    Solana网络收取两种费用:

    在Solana中,交易费是确定的。并没有费率竞价的概念,用户无法通过增加交易费的方式增加自己的交易被打包进下一个区块的概率。 在成文时,交易费只与交易所需的签名数量相关(参见lamports_per_signature),与交易所使用的资源无关。 这是因为目前所有交易都有一个严格的1232字节的限制。

    每个交易都需要至少有一个writable(可写)的账户,用于为交易签名。这个账户无论交易成功与否都需要为交易成本付费。 如果付费者没有足够为交易付费的余额,这个交易就会被丢弃。

    成文时,50%的交易费被出块的验证节点收取,剩下的50%被燃烧掉。这样的结构会激励验证节点在leader schedule(领导时间表)规定的属于自己的slot(插槽)中处理尽可能多的交易。

    Other Resources

    Last Updated:
    - + diff --git a/docs/.vuepress/dist/zh/getting-started/installation.html b/docs/.vuepress/dist/zh/getting-started/installation.html index 4ea4d8124..7df5f3338 100644 --- a/docs/.vuepress/dist/zh/getting-started/installation.html +++ b/docs/.vuepress/dist/zh/getting-started/installation.html @@ -23,7 +23,7 @@ } 安装 | Solana秘籍 - + @@ -71,6 +71,6 @@ export PATH=$PWD/bin:$PATH

    然后运行以下命令,可以和预编译二进制文件获得一样的结果:

    solana-install init
     
    - + diff --git a/docs/.vuepress/dist/zh/index.html b/docs/.vuepress/dist/zh/index.html index 8972944ff..e37c7e145 100644 --- a/docs/.vuepress/dist/zh/index.html +++ b/docs/.vuepress/dist/zh/index.html @@ -23,11 +23,11 @@ } Solana秘籍 | Solana秘籍 - +

    Solana秘籍

    《Solana秘籍》力图为你提供在Solana公链上编写去中心化应用所需的核心概念、 参考。 每个概念和参考都会聚焦于Solana开发中的某个具体方面,同时提供额外的技术细节以及用例。

    贡献代码

    Solana秘籍的设计力图让新的Solana开发者也能容易的贡献代码。 即使你还不太了解如何做项目,贡献代码也是一个很好的学习过程!

    这里open in new window 可以查看所有待解决的issue。

    如果你觉得还有其他哪些建议,可以新建一个issue.

    如何阅读Solana秘籍

    Solana秘籍分为不同的章节。每个章节都有不同的目标。

    章节描述
    核心概念Solana的基础元素。开发者最好能了解这些内容。
    指南关于开发中所能用到的工具的简要介绍。
    参考常用的代码片段参考
    Last Updated:
    - +